Upgrade to Pro — share decks privately, control downloads, hide ads and more …

epollによるNetwork I/O in Goランタイム

H.Saki
November 24, 2021

epollによるNetwork I/O in Goランタイム

21/11/24 Go Reject Con 2021にて発表
https://moneyforward.connpass.com/event/228698/

H.Saki

November 24, 2021
Tweet

More Decks by H.Saki

Other Decks in Technology

Transcript

  1. スケジューラから学ぶGoランタイム 〜 code reading of runtime pkg〜 epollによるNetwork I/O in

    Goランタイム さき(H.Saki) @saki-engineer Go Conference 2021 Autumn, NOV 13 2021 Go Reject Con, NOV 24 2021
  2. 自己紹介 About Me l ͖͞ )4BLJ ◦ ౦େ޻ֶ෦ ˠ ࠓ೥͔Β৽ࣾձਓ

    ◦ 5XJUUFS!TBLJFOHJOFFS l աڈͷ੒Ռ෺ FUDʜ
  3. 1章 ランタイムとは l (PϥϯλΠϜϓϩάϥϜΛಈ͔͢ͷʹඞཁͳࡉʑͱͨ͠ॲཧΛɺਓͷ୅Θ ΓʹҾ͖ड͚ͯ͘ΕΔՕॴ ϝϞϦͷׂΓ౰ͯ intܕͭΛ֨ೲ͢ΔϝϞϦ͸ ࣗಈͰ֬อ͞ΕΔ ஫$ݴޠͩͱmallocͳͲͰ ໌ࣔతʹ֬อ͢Δඞཁ͋Γ

    (PϥϯλΠϜͷ໾ׂ ΨϕʔδίϨΫτ εέδϡʔϦϯά ࢖͍ऴΘͬͨม਺arrayͷ ϝϞϦղ์͸ࣗಈͰߦΘΕΔ ஫$ݴޠͩͱfreeͰ ໌ࣔతʹղ์͢Δඞཁ͋Γ ฒߦͳؔ਺Λ࣮ࡍʹͲͷλΠ ϛϯάͰಈ͔͢ͷ͔͸ࣗಈͰ ௐ੔͞ΕΔ
  4. 2章 Goランタイムのコンポーネント l (PϥϯλΠϜʹ͸ͭͷίϯϙʔωϯτ͕͋Γ·͢ɻ ໾ׂ ΰʔϧʔνϯ ( . 1 04εϨου

    ࣮ߦϦιʔεɺԾ૝$16 ུশ ໾ׂ ϥϯλΠϜશମͷঢ়ଶ؅ཧ TDIFE TZTNPO ( γεςϜϞχλ εέδϡʔϥͷ࣮ଶ ུশ ( . 1 ( ( ( . TZTNPO ( ( 
  5. LinuxにおけるI/O 〜 blocking I/O 4. ランタイムが絡む処理 ෳ਺ѻ͍ͬͯΔ͏ͪͷͭͷGEͰͷ*0͕ϒϩοΫঢ়ଶʹͳΔͱɺͦͷ*0Λ࣮ߦ ͍ͯ͠Δϓϩηε΋TMFFQঢ়ଶʹͳͬͯ͠·͍·͢ɻ ϑΝΠϧ ωοτϫʔΫ

    ιέοτ ϓϩηε ϑΝΠϧGE  ྫ ϑΝΠϧGE  ྫ ϑΝΠϧGE  ྫ SFBE ˠಡΈऔΓͷ४උ͕Ͱ͖ͯ ͍ͳ͍ͷͰϒϩοΫ ωοτϫʔΫ ιέοτ
  6. LinuxにおけるI/O 〜 blocking I/O 4. ランタイムが絡む処理 ϓϩηε͕TMFFQঢ়ଶʹͳͬͯ͠·͏ͱɺͦͷؒʹଞͷૢ࡞͕Ұ੾Ͱ͖ͳ͘ͳΔ ͷͰޮ཰͕ѱ͍Ͱ͢ɻ ϑΝΠϧ ωοτϫʔΫ

    ιέοτ ϓϩηε TMFFQ XSJUF SFBE ϑΝΠϧGE  ྫ ϑΝΠϧGE  ྫ ϑΝΠϧGE  ྫ ωοτϫʔΫ ιέοτ ϒϩοΫ͞Ε͍ͯΔ*0͕࣮ߦ͞ΕΔ ·Ͱɺଞͷૢ࡞͕Ͱ͖ͳ͍
  7. LinuxにおけるI/O 〜 non-blocking I/O 4. ランタイムが絡む処理 ϒϩοΫΛ๷͙ͨΊʹɺʮ*0ͷ४උ͕Ͱ͖͍ͯͳ͍ͳΒɺΤϥʔΛฦ͢ʯͱ͍ ͏OPOCMPDLJOHϞʔυͰͷ*0΋ߦ͏͜ͱ͕Ͱ͖·͢ɻ ϑΝΠϧ ωοτϫʔΫ

    ιέοτ ϓϩηε ϑΝΠϧGE  ྫ ϑΝΠϧGE  ྫ ϑΝΠϧGE  ྫ SFBE ˠಡΈऔΓͷ४උ͕Ͱ͖͍ͯͳ͍ ˠΤϥʔΛฦ͢ ωοτϫʔΫ ιέοτ
  8. 多重I/Oの面倒さ 4. ランタイムが絡む処理 ͨͩɺॴ๬ͷૢ࡞Λ͢ΔͨΊʹɺద੾ͳॱ൪ͰOPOCMPDLJOH*0ΛࣗྗͰൃߦ ͠ଓ͚Δͷ͸໘౗Ͱ͢ɻ ϑΝΠϧ ωοτϫʔΫ ιέοτ ϓϩηε ϑΝΠϧGE

     ྫ ϑΝΠϧGE  ྫ ϑΝΠϧGE  ྫ ωοτϫʔΫ ιέοτ OPOCMPDLJOHͳSFBEཁٻΛ ੒ޭ͢Δ·Ͱߦ͏ ಡΈࠐΜͩ಺༰ΛXSJUF͢Δ
  9. epoll 4. ランタイムが絡む処理 ͦ͜Ͱɺ-JOVYͰ͸ෳ਺ͷ*0Λޮ཰Α͘؅ཧ͢ΔͨΊͷ࢓૊ΈzFQPMMzͱ͍͏΋ ͷ͕͋Γ·͢ɻ ϑΝΠϧ ωοτϫʔΫ ιέοτ ϓϩηε ϑΝΠϧGE

     ྫ ϑΝΠϧGE  ྫ ϑΝΠϧGE  ྫ ωοτϫʔΫ ιέοτ FQPMM Πϯ ελ ϯε ؅ཧɾ؂ࢹ *0ͷ४උ͕Ͱ͖ͨ GE͕ͳ͍͔֬ೝ
  10. ネットワークI/O 4. ランタイムが絡む処理 -JOVYͰ͸ɺωοτϫʔΫ*0͸FQPMMΠϯελϯεܦ༝ͰߦΘΕΔɻ ϑΝΠϧͷొ࿥ SVOUJNFʹΑΔ( . 1ૢ࡞͕ൃੜ͢Δॲཧ *0ͷ֬ೝ FQPMM

    Πϯ ελ ϯε *0ͷ༗ແΛ؂ࢹ͍ͨ͠ϑΝΠϧGEΛ FQPMMΠϯελϯεʹొ࿥͢Δ ϑΝ Πϧ GE ϑΝ Πϧ GE FQPMM@DUMͰ ొ࿥ FQPMM Πϯ ελ ϯε ϑΝ Πϧ GE ϑΝ Πϧ GE FQPMM@XBJUͰ ໰߹ͤ
  11. ネットワークI/O 4. ランタイムが絡む処理 -JOVYͰ͸ɺωοτϫʔΫ*0͸FQPMMΠϯελϯεܦ༝ͰߦΘΕΔɻ ϑΝΠϧͷొ࿥ SVOUJNFʹΑΔ( . 1ૢ࡞͕ൃੜ͢Δॲཧ *0ͷ֬ೝ FQPMM

    Πϯ ελ ϯε *0ͷ༗ແΛ؂ࢹ͍ͨ͠ϑΝΠϧGEΛ FQPMMΠϯελϯεʹొ࿥͢Δ ϑΝ Πϧ GE ϑΝ Πϧ GE FQPMM@DUMͰ ొ࿥ FQPMM Πϯ ελ ϯε ϑΝ Πϧ GE ϑΝ Πϧ GE FQPMM@XBJUͰ ໰߹ͤ
  12. ネットワークI/O 4. ランタイムが絡む処理 ग़యSVOUJNFQSPDHP . TZTNPO ( *0ऴΘΓͷ(͕ͳ͍͔ ໰߹ͤ FQPMM

    Πϯ ελ ϯε ϑΝ Πϧ GE ϑΝ Πϧ GE TZTNPOͷதͰ͸ɺFQPMMͰৗʹ࣮ߦՄೳͳωοτϫʔΫ*0Λ୳ͯ͠ɺΩϡʔʹ ೖΕΔ࡞ۀΛ͍ͯ͠Δɻ
  13. ネットワークI/O 4. ランタイムが絡む処理 . TZTNPO ( *0ऴΘΓͷ(͕ͳ͍͔ ໰߹ͤ FQPMM Πϯ

    ελ ϯε ϑΝ Πϧ GE ϑΝ Πϧ GE TZTNPOͷதͰ͸ɺFQPMMͰৗʹ࣮ߦՄೳͳωοτϫʔΫ*0Λ୳ͯ͠ɺΩϡʔʹ ೖΕΔ࡞ۀΛ͍ͯ͠Δɻ ( *0ऴΘΓͷ(ΛHFU