ネットワーク機能のベンチマーク自動化 / How to benchmark network functions in LINE

ネットワーク機能のベンチマーク自動化 / How to benchmark network functions in LINE

ネットワーク機能のベンチマーク自動化
田口雄規(LINE株式会社 ITSC Verda室 ネットワーク開発チーム・ソフトウェアエンジニア)
LINEのプライベートクラウドで使われているネットワーク機能の一部は、データプレーンも含めて独自に開発を行っています。もちろん、このようなネットワーク機能には、大量のトラフィックを捌けるような高性能を維持することが求められています。そのためには、開発過程でも定期的なベンチマークを行い、実際のパフォーマンスを把握し続けることが重要です。このセッションでは、私たちが構築したネットワーク機能の自動ベンチマークシステムと、ベンチマークを動作させるための環境である、チーム共有テストベッドについてご紹介します。

53850955f15249a1a9dc49df6113e400?s=128

LINE Developers

August 19, 2020
Tweet

Transcript

  1. ωοτϫʔΫػೳͷϕϯνϚʔΫࣗಈԽ ాޱ ༤ن :VLJ5BHVDIJ  )PXUPCFODINBSLOFUXPSLGVODUJPOTJO-*/& -*/&%FWFMPQFS.FFUVQ

  2. :VLJ5BHVDIJ 7FSEBࣨωοτϫʔΫ։ൃνʔϜ ʙࡢ೥݄̏ɿֶ෦म࢜ʢ/'7ͷੑೳ޲্ʣ ࡢ೥݄ɿ -*/&ʹ৽ଔೖࣾ ۀ຿ɿϓϥΠϕʔτΫϥ΢υʹؔ࿈͢Δ %1MBOFͷੑೳվળ -PBE #BMBODFSͷ$1MBOFվળ %$

    /8ΦʔέετϨʔλʔ։ൃ
  3. ࠓ೔ͷ಺༰ "HFOEB  -#ͷ։ൃϑϩʔʹϕϯνϚʔΫΛ૊ΈࠐΉ Ͳ͏΍ͬͯϕϯνϚʔΫΛࣗಈԽ͍ͯ͠Δʁࢫຯ͸ʁ  νʔϜڞ༗ςετϕου঺հ ݶΓ͋ΔϦιʔεΛͲ͏΍ͬͯڞ༗͍ͯ͠Δ͔ʁ  ੑೳ໰୊ͷ੾Γ෼͚ʹ΋ϕϯνϚʔΫ͕໾ʹཱͭ

    43Wͷੑೳ໰୊ͷݪҼΛಛఆͯ͠ղܾͨ͠ࣄྫ
  4. 1. LB   

  5. -*/&ͷιϑτ΢ΣΞ-# -#ͷৄࡉ͸-*/&%&7&-01&3%":ͷൃදࢿྉ<>Λࢀর <> IUUQTMJOFEFWEBZMJOFDPSQDPNKQTFTTJPOT' • ී௨ͷY-JOVYαʔό্Ͱಈ࡞͢Δ • σʔλϓϨʔϯ͸9%1ϕʔεͰϑϧεΫϥον࣮૷ • ϝοηʔδϯά΍ϝσΟΞɾ޿ࠂ഑৴ͳͲ෯޿͍αʔϏεͰར༻

    Messaging LINEBLOG LINE Clova LB ߴ͍ύϑΥʔϚϯεͱ҆ఆੑͷҡ͕࣋ෆՄܽ
  6. -#ͷςετঢ়گ #FGPSF • -#ੑೳࢼݧ͸ɺ-#։ൃऀ͕ຊ൪σϓϩΠલͳͲʹखಈͰ࣮ࢪ͍ͯͨ͠ • σʔλϓϨʔϯͷςετ͕։ൃϑϩʔʹ৐͍ͬͯͳ͍ ػೳςετ ʢҙਤͨ͠௨Γͷಈ࡞͔ʣ ੑೳςετ ʢҙਤͨ͠௨Γͷੑೳ͔ʣ

    ࣗಈԽ͕೉͍͠ طʹࣗಈԽͰ͖Δঢ়ଶ
  7. खಈςετͷ໰୊ ςετͷ࠶ݱੑ աڈͷ݁Ռͱͷൺֱ • ։ൃ ςετ࣮ߦ ͷϧʔϓΛճ͢ͷ͕େม • Ͳ͏ͯ͠΋ςετͷճ਺͸ݮΔ •

    ։ൃ్தͷόʔδϣϯͷੑೳ͸෼͔Βͳ͍ • ઃఆϛε • ༻ҙͰ͖ΔϦιʔεʹΑΔɺ؀ڥͷࠩҟ ։ൃऀ΁ͷࢧԉෆ଍ • ͲͷϚγϯͰɺͲΜͳίϯϑΟάͰɺͲΜͳςετΛͯ͠Δʁ
  8. ࣗಈԽͷΞϓϩʔν Ξϓϩʔν ୡ੒͍ͨ͜͠ͱ ࠶ݱՄೳͳϕϯνϚʔΫ աڈͷςετ݁Ռ ͱൺֱՄೳ ։ൃऀ΁ͷࢧԉ • ઃఆ͸એݴతʹ è

    "OTJCMFΛ࢖ͬͯߏ੒؅ཧ • ͳΔ΂͘ࡉ͔͘ઃఆΛࣗಈԽ • ઐ༻ͷςετϕουΛ੔උ • ຖճಉ͡ϚγϯͰϕϯνϚʔΫ͢ΔΑ͏ʹ • Ұൠతͳ$*γεςϜʹγʔϜϨεʹ࿈ܞ • աڈͷ݁ՌΛ֬ೝͰ͖Δ 1 d
  9. ࡞੒ͨࣗ͠ಈϕϯνϚʔΫγεςϜ Automated Testbed Developer Plot Figures (pandas/matplotlib) Tester LB Continuous

    feedback 1. Provisioning 2. Run benchmark 3. Collect results GitHub Storage Compare Save Ansible provisioning PR Drone
  10. ϕϯνϚʔΫγφϦΦ • ੑೳ௿Լ͕ݒ೦͞ΕΔಛघͳύλʔϯ TRex Generator (software-base) new scenario (python) Tester

    4:/'MPPEJOH࣌ͷੑೳ͸ Measurement Dropped? Decrease rate yes no Increase rate TRex Generator LB XJSFSBUF PVUQVU • ࠷େϨʔτ ʢύέϩεڐ༰ʣ • ;FSP1BDLFU-PTTςετ
  11. -#ݻ༗ͷϕϯνϚʔΫͷ೉͠͞ • 7FSEBͷ-#Ͱ͸*1*1τϯωϦϯάΛར༻͓ͯ͠ΓɺඇରশτϥϑΟοΫΛੜ੒ • δΣωϨʔλʢ53FYʣ͸ૹ৴ϑϩʔͱड৴ϑϩʔΛผʑʹΧ΢ϯτ • ϑϩʔຖͷ౷ܭ৘ใͳͲ͕ར༻Ͱ͖ͳ͍ LB Traffic Generator

    (TRex) IP IP’ IP ҧ͏ϑϩʔͩ • ؔ܎ͷͳ͍"31΍--%1΋Χ΢ϯτ͞ΕΔΑ͏ͳ άϩʔόϧ౷ܭΛ୅ΘΓʹར༻ • ׬ᘳͳθϩύέοτϩεςετ͸Ͱ͖ͳ͍ • ύέοτड৴Ͱ͖͍ͯΕ͹ɺϩεແ ͠ͱΈͳ͢
  12. ࣮ࡍͷΠϝʔδ $*1JQFMJOF #FODINBSL-PHT Repo name Repo name Changed file Changed

    file
  13. 2.   

  14. ઐ༻ςετϕουߏஙͷഎܠ • -#ʹݶΒͣɺଞʹ΋༷ʑͳωοτϫʔΫػೳͷධՁɾݕূ͕ඞཁ • ػثࡏݿͷ੍໿΋͋Γɺ͙͢ʹݕূ؀ڥΛ༻ҙ͢Δͷ͸ࠔ೉ • ϓϥΠϕʔτΫϥ΢υͷ෺ཧػث͕Ұ௨Γଗͬͨςετϕου؀ڥ͕͋Δͱศར • աڈͷ݁Ռͱൺֱ͠΍͍͢ϕϯνϚʔΫΛߦ͍͍ͨ

  15. -*/&Πϯϑϥݕূʹదͨ͠ςετϕουઃܭ • -εΠονΛհͨ͠ϊʔυؒ઀ଓ • 73'΍1#3ͳͲͰτϥϑΟοΫΛॊೈʹ੍ޚͰ͖Δ • -#ͷΑ͏ʹΧϓηϧԽΛ൐͏τϥϑΟοΫ΋੍ޚ͕༰қ L3 Switch (Cumulus

    Linux) LB Traffic Generator Management Switch  Provisioning via SSH ࠷େ(C&QPSU ʜ
  16. ςετϕουͷαʔόΛνʔϜͰڞ༗͢Δ • ཁٻ • લʹ࢖ͬͨਓͷίϯϑΟά͸࢒ͨ͘͠ͳ͍ • LFSOFMόʔδϣϯ΋੾Γସ͑ͯݕূ͍ͨ͠ Management Server •

    19&%)$1 • ,FSOFMJNBHF • /'4 • 04JOTUBMMFS ςεταʔό Diskless Boot • ղܾࡦσΟεΫϨεϒʔτ
  17. ςετϕουͷ-εΠονΛνʔϜͰڞ༗͢Δ • ݒ೦ • ৽ͨʹ௥Ճͨ͠ϧʔτ͕ଞऀͷطଘͷઃఆʹӨڹΛ༩͑ɺϕϯνϚʔΫ͕ࣦ ഊ͢Δ͔΋͠Εͳ͍ • ղܾࡦར༻ऀ͸ඞͣ73'Λ࡞੒͢Δ L3 Switch

    Traffic Generator VRF LB VRF VRF Traffic Generator VRF A B
  18. 5FTUCFE.BOBHFS ୭͕ͲͷϚγϯΛར༻த͔ Ϛγϯͷ֬อ -εΠονͷઃఆ݁Ռ ʢ"OTJCMF-PHʣ ઃఆ൓өϘλϯ hostname hostname hostname hostname

    hostname hostname hostname hostname hostname hostname hostname hostname Server name Switch name Switch name Switch name Switch name Switch name
  19. 5FTUCFE.BOBHFSͷεΠονઃఆࣗಈԽ • ֘౰Ϛγϯ͕઀ଓ͞Ε͍ͯΔϙʔτ൪߸Λऔಘ͠ɺ*OUFSGBDFͱ3PVUJOHͷઃఆςϯ ϓϨʔτΛ(JU)VC্ʹࣗಈੜ੒͢Δ • FUDGSSGSSDPOGE66*% • FUDOFUXPSLJOUFSGBDFTE66*% Tester Tester

    DuT Testbed GitHub  DPOGJHςϯϓϨʔτੜ੒ Provision L3 SW config Testbed Manager
  20. 3.  

  21. ϓϥΠϕʔτΫϥ΢υͷϚϧνςφϯγʔ • -*/&Ͱ͸43WΛ࢖ͬͯϚϧνςφϯγʔΛ࣮ݱ • 'VMM-ͷ-*/&ͷωοτϫʔΫΛ׆͔ͤΔ • -JOVYΧʔωϧͷ%1MBOF࣮૷Λར༻ -*/&ͷ43Wಋೖͷৄࡉ͸-*/&%&7&-01&3%":΍+"/0(ͷൃදࢿྉ< >Λࢀর <>IUUQTXXXKBOPHHSKQNFFUJOHKBOPHQSPHSBNTSW

    <>IUUQTMJOFEFWEBZMJOFDPSQDPNKQTFTTJPOT& IP-Fabric (underlay) Tenant A Tenant B Tenant C ß *1Wύέοτసૹ ß αʔϏε͝ͱʹಠཱͨ͠ςφϯτ
  22. -JOVYΧʔωϧͷ43Wੑೳ໰୊ • 43WͰߏஙͨ͠Ϛϧνςφϯτ؀ڥ͸ɺసૹੑೳ͕௿͍ • γϯάϧςφϯτ؀ڥͷ෼ͷ̍ఔ౓ʢ(CQTʣͷసૹੑೳ • Ͳ͏ʹ͔ͯ͠ɺੑೳΛ޲্Ͱ͖ͳ͍͔ʁ • /*$ϕϯμʔ͔Β৽ͨͳ5$1ηάϝϯςʔγϣϯΦϑϩʔυػೳ͕௥Ճ <>IUUQTXXXKBOPHHSKQNFFUJOHKBOPHQSPHSBNTSWYEQ

    540 1VSF- ඇ43W Host VM/APP /*$Ͱ43Wύέοτ Ληάϝϯςʔγϣϯ Φʔόϔου࡟ݮ͕ظ଴
  23. ࣗಈϕϯνϚʔΫͰੑೳ֬ೝ • ౰ॳͷݕূ؀ڥͰ͸ɺ540ͷޮՌ͕֬ೝͰ͖ͳ͍ • ֤*'ͷΦϑϩʔυઃఆΛ༷ʑͳύλʔϯΛࣗಈͰςετ SRv6 encap SRv6 decap Traffic

    Generator (iperf) 43WϊʔυΛϒϥοΫϘοΫεతʹςετͯ͠΋ݪҼ͕Θ͔Βͳ͍ Ansible ςετ ύϥϝʔλมߋ
  24. )ZQFSWJTPSͷ43Wੑೳݕূ HV VM VRF tap veth veth p0 br End.DX4

    T.encaps iperf ϘτϧωοΫʹͳΒͳ͍Α͏ ߴ଎ͳ711Λ43Wର޲ʹ Traffic Generator (iperf) VPP End.DX4 T.encaps ड৴ੑೳ ૹ৴ੑೳ • ϘτϧωοΫΛ୳͢ 540͕ޮ͍͍ͯΕ͹͜͜͸଎͍
  25. ࣮ࡍͷσʔλ 4 Gbps 4 Gbps 20 Gbps ड৴ੑೳ 540PGG ૹ৴ੑೳ

    ड৴ੑೳ 540PO ࣮͸ૹ৴ଆ͸540͕ޮ͍͓ͯΓ ੑೳ͕͔ͳΓ޲্ ड৴ଆ͸540͕ಇ͍͍ͯͳͦ͞͏ 43W OPO43W 43W` 43W OPO43W 43W` 43W OPO43W 43W` 711
  26. ύέοτΛτϨʔεͯ͠ΈΔ HV VM VRF tap veth veth p0 br End.DX4

    T.encaps iperf ෳ਺ͷ5$1ηάϝϯτ͕ ू໿͞Εͯड৴ -(0(30 Traffic Generator (iperf) VPP End.DX4 T.encaps ηάϝϯςʔγϣϯ ຊ౰͸͜͜·Ͱ540Ͱ ू໿͞Ε͍ͯͯ΄͍͠ • Ͳ͜Ͱηάϝϯςʔγϣϯ͞Ε͍ͯΔ͔Λ୳͢ Per-Packet ड৴ύέοτ
  27. ࠷ޙ͸Χʔωϧ಺෦ͷௐࠪ • ҙਤ͠ͳ͍ηάϝϯςʔγϣϯͷݪҼΛ͔֬ΊΔ • ΧʔωϧωοτϫʔΫௐࠪʹJQGUSBDF<> • ύέοτ͕-JOVYΧʔωϧͷͲͷॲཧGVODUJPOͰॲཧ͞Ε͔ͨΛτϨʔε • TLCͷΦϑϩʔυϑϥά΋֬ೝͰ͖Δ <>IUUQTHJUIVCDPN:VUBSP)BZBLBXBJQGUSBDF

    %FDBQ࣌ʹ࡟আ͞ΕΔ͸ͣͷ ϑϥά͕࢒͍ͬͯΔ è 4,#@(40@*19*1 VRF doesn’t support this!
  28. -JOVY,FSOFM΁ͷ$POUSJCVUJPO ղܾࡦ • 43Wͷ%FDBQॲཧޙʹɺ4,#@(40@*19*1Λ࡟আ͢ΔॲཧΛ௥Ճ <>IUUQTHJUIVCDPNUPSWBMETMJOVYDPNNJUFCBFBFEFFD EBFDBFD 7.·Ͱू໿͞Εͨ··సૹ͞ΕΔ͜ͱΛ֬ೝ è,FSOFMʹQBUDIΛૹͬͯϚʔδࡁΈʂ Remove!

  29. ੑೳվળ • ड৴ੑೳ͸(CQTΛ௒͑ɺγϯάϧςφϯτ؀ڥʹ͍ۙੑೳ·Ͱվળ 12 Gbps 20 Gbps 43W OPO43W 43W`

    43W OPO43W 43W` )7ड৴ੑೳ )7ૹ৴ੑೳ
  30. ·ͱΊ  -#ͷ։ൃϑϩʔʹϕϯνϚʔΫΛ૊ΈࠐΉ ੑೳΛ։ൃऀʹϑΟʔυόοΫɺ༧ظͤ͵ੑೳ௿Լʹؾ͚ͮΔ  νʔϜڞ༗ςετϕου঺հ -εΠονͷίϯϑΟάΛࣗಈԽͯ͠ಉ࣌ʹςετΛ࣮ߦ  ੑೳ໰୊ͷ੾Γ෼͚ʹ΋ϕϯνϚʔΫ͕໾ʹཱͭ ࣗಈϕϯνϚʔΫͰूΊͨσʔλ͔Βɺ43WͷΧʔωϧόάΛൃݟ

  31. THANK YOU