はてなにおけるLinuxネットワークスタックパフォーマンス改善 / Linux network performance improvement at hatena

はてなにおけるLinuxネットワークスタックパフォーマンス改善 / Linux network performance improvement at hatena

はてな・ペパボ技術大会〜インフラ技術基盤〜@京都

A658ec7f1badf73819dfa501165016c1?s=128

Yuuki Tsubouchi (yuuk1)

July 02, 2016
Tweet

Transcript

  1. ͸ͯͳʹ͓͚Δ -JOVYωοτϫʔΫελοΫ ύϑΥʔϚϯεվળ JEZ@VVLJ ͸ͯͳɾϖύϘٕज़େձ ʙΠϯϑϥٕज़ج൫ʙ!ژ౎

  2. !Z@VVL JEZ@VVLJ ΢ΣϒΦϖϨʔγϣϯΤϯδχΞ !͸ͯͳ ೖࣾ೥໨

  3. ৽ଔ೥໨ͷ࢓ࣄ Λ঺հ

  4. 1 ΢ΣϒγεςϜͷ ύϑΥʔϚϯε

  5. ΢ΣϒγεςϜͷయܕߏ੒ LB Proxy Application Database

  6. ϘτϧωοΫ͸ Ͳ͔͜ʹ͋Δ

  7. LB Proxy Web App Database ϘτϧωοΫʢϩʔϧʣ

  8. LB Proxy Web App Database ϘτϧωοΫʢϦιʔεʣ $16 .FN %JTL /8

    $16 .FN %JTL $16 .FN %JTL /8 /8 $16 .FN %JTL /8
  9. ϘτϧωοΫʢϦιʔεৄࡉʣ $16 .FN %JTL /8 )PTU VTFS TZT JPXBJU ʜ

    VTFE DBDIFE CVGGFS ʜ XSJUF *014 SFBE *014 SFBE MBUFODZ ʜ UY CQT SY CQT UY QQT ʜ
  10. $16VTSOJDFTZTJPXBJUJSRTPGUTUFBMHVFTUJEMF BMM     ιϑτׂΓࠐΈʢύέοτड৴ʣ ෛՙ͕ߴ͍

  11. CPU %irq %softirq

  12. େྔύέοτ ͱͷઓ͍

  13. 2 ωοτϫʔΫ ελοΫ

  14. ωοτϫʔΫελοΫ w ωοτϫʔΫ*0Λ࣮ݱ͢ΔͨΊʹඞཁ ͳཁૉ܈ w /*$ɺΧʔωϧͷ/*$υϥΠόɺΧʔ ωϧͷ5$1*1ελοΫɺιέοτͳͲ w ύέοτૹड৴ɺύέοτόοϑΝ؅ཧɺ ϓϩτίϧॲཧͳͲΛؚΉ

    w ड৴ଆͷෛՙ͕ߴ͍͜ͱ͕ଟ͍
  15. ωοτϫʔΫ*0ߴ଎Խ w (C&ͳͲʹΑΔωοτϫʔΫଳҬ෯޲্ʹ ΑΓɺҰఆ࣌ؒʹॲཧ͢Δύέοτ਺͕૿େ w (CQT.QQT #ZUFTQBDLFU  w ωοτϫʔΫελοΫॲཧͷ$16ෛՙ͕ߴ͘

    ͳΔ w $16ΫϩοΫ͸্͕ΒͣϚϧνίΞ࣌୅ʹ ಥೖ w ͞·͟·ͳߴ଎Խख๏͕࣮૷͞Ε͍ͯΔ
  16. NIC Kernel Process ύέοτड৴ϑϩʔ ؆қ

  17. NIC Kernel Process ύέοτड৴ ύέοτసૹ ϓϩτίϧॲཧ σʔλίϐʔ SFBE  SFDW

     ύέοτड৴ϑϩʔ ؆қ 5$1*1ͷύέοτϔομղੳɺνΣοΫαϜܭࢉͳͲ ΞϓϦέʔγϣϯϓϩηε͸γεςϜίʔϧͰ଴ͪड͚
  18. NIC Process ύέοτड৴ϑϩʔ ৄղ ύέοτ ड৴ ϓϩτίϧ ॲཧ σʔλड৴ ॲཧ

    ,FSOFM 3JOH #VGGFS 4PDLFU #VGGFS ΧʔωϧͷॲཧΛ෼ղ
  19. NIC Process ύέοτड৴ϑϩʔ ৄղ ύέοτ ड৴ ϓϩτίϧ ॲཧ σʔλड৴ ॲཧ

    ,FSOFM 3JOH #VGGFS 4PDLFU #VGGFS ϋʔυ ׂΓࠐΈ ιϑτ ׂΓࠐΈ ࢒Γͷॲཧ͸ιϑτׂΓࠐΈͰඇಉظॲཧ ஗Ԇॲཧ ϋʔυׂΓࠐΈͰ͸ϦϯάόοϑΝʹύέοτΛੵΉ·Ͱ
  20. ͳͥछྨͷׂΓࠐΈʁ w ड৴ύέοτ૿ׂΓࠐΈ૿ίϯςΩ ετεΠον૿ߴ$16ෛՙ w ϋʔυׂΓࠐΈ͚ͩͩͱύέοτड৴ͷͨͼ ʹϓϩτίϧॲཧ·Ͱଈ࣮ߦ͞ΕΔ w ϋʔυׂΓࠐΈͰ͸ύέοτΛόοϑΝʹੵ Ή͚ͩʹͯ͠ɺճͷׂΓࠐΈॲཧͷ$16ෛ

    ՙΛԼ͛Δ w ιϑτׂΓࠐΈʹΑΓɺϝΠϯͷϓϩτίϧ ॲཧΛඇಉظॲཧ
  21. /"1* /FX"1* w ޙճ͠ʹͯ͠΋ड৴ύέοτ͕૿͑Ε͹ιϑτׂΓࠐΈ ͷ਺͸૿͑Δ w ෳ਺ͷύέοτΛ·ͱΊͯͭͷιϑτׂΓࠐΈͰॲཧ ͍ͨ͠ w ϋʔυׂΓࠐΈΛҰ୴ͱΊͯɺϙʔϦϯάʹΑΓϦϯά

    όοϑΝ͔Βಉ࣌ʹύέοτΛऔΓग़͢ w ͨͩ͠ύέοτ਺͕গͳ͍৔߹ʹಛʹϨΠςϯγ͕େ͖ ͘ͳͬͯ͠·͏ͷͰɺड৴ύέοτ͕ଟ͍ͱ͖ͷΈ༗ޮ
  22. NIC Process /"1* ύέοτ ड৴ ϓϩτίϧ ॲཧ σʔλड৴ ॲཧ ,FSOFM

    3JOH #VGGFS 4PDLFU #VGGFS ϋʔυׂΓࠐΈΛͱΊͯɺϙʔϦϯά QPMMJOH
  23. ͜͜·Ͱ͸ -JOVYωοτϫʔΫ ελοΫͷجຊతͳ࿩

  24. 3 ͸ͯͳͰͷࣄྫ

  25. )"1SPYZͷ୆਺૿໰୊ w )"1SPYZΛ&$Ͱͷϩʔυόϥϯαͱͯ͠࢖༻ w ιϑτׂΓࠐΈෛՙʹΑΓίΞͰ཯଎ w $16ίΞ͸༨͍ͬͯΔͷʹɺ)"1SPYZͷεέʔϧ Ξ΢τ͕ඞཁ w %/4ϥ΢ϯυϩϏϯʹΑΓɺෳ਺ͷ)"1SPYZ΁

    ࢀরΛৼΓ෼͚ w ϩʔυόϥϯαΛϩʔυόϥϯε͠ͳ͍ͱ͍͚ͳ ͍ࣄଶ
  26. )"1SPYZ ʜʜ EC ʜʜ BQQ ʜʜ    TVHPJIBQSPYZQSJWBUF

  27. ʜʜ EC ʜʜ BQQ ʜʜ   )"1SPYZ

  28. ׂΓࠐΈ͕ଟ͍ͳΒ ׂΓࠐΈࣗମΛݮΒ͢

  29. NIC Process *OUFSSVQU$PBMFTDJOH ύέοτ ड৴ ϓϩτίϧ ॲཧ σʔλड৴ ॲཧ ,FSOFM

    3JOH #VGGFS 4PDLFU #VGGFS /*$͕ͭͷϋʔυׂΓࠐΈͰෳ਺ͷύέοτΛ·ͱΊͯసૹ ϋʔυ ׂΓࠐΈ ෳ਺ύέοτἧ͏·Ͱ౸ணΛ଴ͭͨΊϨΠςϯγ͸্͕Δ
  30. /*$υϥΠόͷύϥϝʔλݕূ w ࢖༻/*$͸*OUFMͷJYHCF*OUFSSVQU5ISPUUMF3BUFΦ ϓγϣϯ w DYMBSHF୆͔ΒDYMBSHF୆ʹ5$1઀ଓ w σϑΥϧτͰ͸΢ΣϒαʔϏεͷΑ͏ͳγϣʔτύ έοτ͕ࢧ഑తͳঢ়گͰ͸ɺׂΓࠐΈ਺͕ߴ͘ͳΔ w

    ΢ΣϒαʔϏεͰ͸ͦ͜·ͰϨΠςϯγʹγϏΞͰ ͸ͳ͍ w ݕূͷ݁ՌɺιϑτׂΓࠐΈͷ$16ར༻཰ TPGU ͕࠷େ·Ͱվળ l&$Ͱ43*07Λ࢖͏ͱ͖ͷ/*$υϥΠόύϥϝʔλݕূz IUUQCMPHZVVLJPFOUSZ
  31. ׂΓࠐΈॲཧΛෳ਺ͷ ίΞʹ෼ࢄͤ͞Δ

  32. NIC Process ύέοτ ड৴ ϓϩτίϧ ॲཧ σʔλड৴ ॲཧ ͳͥෳ਺ͷίΞΛ࢖͑ͳ͍ͷ͔ $16

    ϋʔυׂΓࠐΈ͕͔͔ͬͨ$16ίΞͱಉ͡$16ίΞ͕ ιϑτׂΓࠐΈΛ࣮ߦ͢ΔͨΊ ϋʔυ ׂΓࠐΈ ιϑτ ׂΓࠐΈ
  33. NIC Process ύέοτ ड৴ ϓϩτίϧ ॲཧ σʔλड৴ ॲཧ $16 314

    3FDFJWF1BDLFU4UFFSJOH NIC Process ύέοτ ड৴ ϓϩτίϧ ॲཧ σʔλड৴ ॲཧ $16 NIC Process ύέοτ ड৴ ϓϩτίϧ ॲཧ σʔλड৴ ॲཧ $16 ίΞׂؒΓࠐΈ
  34. 314 3FDFJWF1BDLFU4UFFSJOH w ௨ৗ͸ϋʔυׂΓࠐΈ͕͔ͬͨ$16ͱಉ͡$16Ͱ ιϑτׂΓࠐΈΛ࣮ߦ w 314͸ɺଞͷ$16ʹίΞׂؒΓࠐΈͯ͠ɺϓϩτ ίϧॲཧΛଞͷ$16ʹ೚ͤΔ w 5$1ϔομͷ

    TBEES TQPSU EBEES EQPSU ͷ૊ʹ ର͠$POTJTUFOU)BTIJOHʹΑΔ෼ࢄ w ݪଇಉ͡5$1ϑϩʔͳΒ͹ಉ͡$16ʹ෼ࢄ͞Ε ΔΑ͏ʹ w $16Ωϟογϡώοτ཰ΛߴΊͨ3'4 3FDFJWF 'MPX4UFFSJOH ͱ͍͏ͷ΋͋Δ l-JOVYͰϩʔυόϥϯα΍ΩϟογϡαʔόΛϚϧνίΞεέʔϧͤ͞ΔͨΊͷΧʔωϧνϡʔχϯάz IUUQ CMPHZVVLJPFOUSZMJOVYOFUXPSLTUBDLUVOJOHSGT
  35. ࣾ಺ͷ࠷ۙͷ ωοτϫʔΫαʔόʹ ޿͘ద༻ࡁ

  36. 314Ͱ3FEJTνϡʔχϯά w 3FEJT͸εϨουಈ࡞͢ΔͨΊɺϚϧν ίΞεέʔϧ͠ͳ͍ w ΧʔωϧͷωοτϫʔΫ*0ॲཧ͢ΔεϨο υͱɺ3FEJTεϨουͷ෼ࢄ͸Ͱ͖Δ w 314͸෼ࢄઌ$16൪߸ΛࢦఆͰ͖Δ w

    $16 ʹ෼ࢄͤ͞Δ w UBTLTFUͰ$16ΞϑΟχςΟΛઃఆ͠ɺ 3FEJTεϨουΛ$16 Ҏ֎ʹݻఆ IUUQSFEJTJPUPQJDTCFODINBSLT
  37. $16ˋݮ

  38. ଞʹ΋਺ଟ͘ͷ ߴ଎Խख๏͕͋Δ νΣοΫαϜΦϑϩʔυ 540 5$14FHNFOUBUJPO0⒐PBE  -30 -BSHF3FDFJWF0⒐PBE  50&

    5$10⒐PBE&OHJOF  344 3FDFJWF4JEF4DBMJOH  "DDFMFSBUFE3'4 914 1$*QBTTUISPVHI 43*07 *OUFM%BUB%JSFDU*0
  39. 4 ωοτϫʔΫελο Ϋͷઌ୺ٕज़

  40. ͦ΋ͦ΋Χʔωϧʹ ॲཧͤ͞ͳ͍ protocol process NIC process hardirq packet receive consistent

    hashing forward
  41. Ϣʔβϥϯυ΁θϩίϐʔ w ύέοτΛ/*$͔ΒϢʔβϥϯυ΁όΠύε w ࣮૷ w OFUNBQ w *OUFM%1%, w

    ϢʔβϥϯυͰ5$1*1࣮૷ w ஌ΔݶΓͰ͸࣮༻ஈ֊ͷωοτϫʔΫαʔό͸ ·ͩͳ͍
  42. ιέοτ"1*ͷݶք w େ఍ͷωοτϫʔΫαʔόͷ࣮૷͸104*9ͷι έοτ"1*ϕʔε w ιέοτ"1*Ͱ͸θϩίϐʔʹͰ͖ͳ͍ w ΧʔωϧͷιέοτόοϑΝʹੵΉඞཁ͕͋Δ w طଘͷωοτϫʔΫαʔόͷιέοτ"1*Λஔ͖

    ׵͑Δͷ͸େม w Χʔωϧ͕ϋʔυͷਐԽʹ௥͍͔ͭͳ͘ͳΕ͹ɺ ීٴ͢Δ͔΋͠Εͳ͍
  43. 5 ·ͱΊ

  44. ·ͱΊ w ΢ΣϒγεςϜʹ͓͚ΔωοτϫʔΫ*0ෛՙͷҐஔ͚ͮ w -JOVYͷωοτϫʔΫελοΫͷ࢓૊ΈΛ঺հ w ͸ͯͳͰ࣮ફͨ͠ωοτϫʔΫελοΫͷߴ଎Խख๏ w ׂΓࠐΈΛ·ͱΊΔ*OUFSSVQU$PBMFTDJOH w

    ϓϩτίϧॲཧΛϚϧνίΞεέʔϧͤ͞ΔͨΊͷ 3143'4 w )"1SPYZɺ3FEJTͷྫ w ઌ୺ٕज़ͱͯ͠ɺ/*$͔ΒϢʔβϥϯυ΁όΠύε͢Δ ٕज़͕͋Δ
  45. 04͸ ΞΠσΞͷๅݿ

  46. 04಺෦ͷٕज़ͷ֎ग़͠ w ιϑτׂΓࠐΈʹΑΔ஗Ԇॲཧ w δϣϒΩϡʔͷΑ͏ͳඇಉظॲཧ w ׂΓࠐΈͱϙʔϦϯά w ϑϩϯτΤϯυʹ͓͚ΔϩϯάϙʔϦϯά΍ 4FSWFS4FOU&WFOUT

    w ϓϩηεεέδϡʔϥ w ྲྀߦΓͷ7.΍ίϯςφͷΦʔέετϨʔγϣ ϯ
  47. 04ͷٕज़Λ ࣗ෼ͷιϑτ΢ΣΞʹ ͱΓ͍Ε͍ͨ

  48. 04΍γεςϜιϑτ΢ΣΞ ͕޷͖ͳਓ΁ IUUQIBUFOBDPSQKQSFDSVJUGSFTIPQFSBUJPOFOHJOFFS