Slide 1

Slide 1 text

͍Ζ͍Ζͳ5$1αʔό

Slide 2

Slide 2 text

5$1Ͱ௨৴͢Δखॱ αʔό • ιέοτΛ࡞Δ(socket) • ઀ଓ଴ͪΛ͢ΔIPΞυϨεͱϙʔτΛઃఆ͢Δ • ιέοτʹ໊લΛ͚ͭΔ(bind) • ઀ଓ଴ͪ͢Δ(listen) • ΫϥΠΞϯτ͔Βͷ઀ଓΛड͚෇͚Δ(accept) • ௨৴Λߦ͏(read/write) ΫϥΠΞϯτ • ιέοτΛ࡞Δ • ઀ଓ૬खΛઃఆ͢Δ • ઀ଓ͢Δ • ௨৴Λߦ͏

Slide 3

Slide 3 text

ΞʔΩςΫνϟ ϓϩηε ϚϧνϓϩηεϚϧνεϨου 1SFGPSL Πϕϯτۦಈ ϋΠϒϦου

Slide 4

Slide 4 text

ϓϩηε ΫϥΠΞϯτ αʔό ϓϩηε

Slide 5

Slide 5 text

ϚϧνϓϩηεϚϧνεϨου ΫϥΠΞϯτ αʔό .BTUFS ϓϩηε

Slide 6

Slide 6 text

ϚϧνϓϩηεϚϧνεϨου ΫϥΠΞϯτ αʔό .BTUFS ϓϩηε ࢠϓϩηε 'PSL

Slide 7

Slide 7 text

ϚϧνϓϩηεϚϧνεϨου ΫϥΠΞϯτ αʔό .BTUFS ϓϩηε ࢠϓϩηε 'PSL

Slide 8

Slide 8 text

1SFGPSL ΫϥΠΞϯτ αʔό .BTUFS ϓϩηε ࢠϓϩηε ࢠϓϩηε ༧ΊGPSL͓ͯ͘͠ ࠷େಉ࣌઀ଓ਺͸ࢠϓϩηεͷ਺

Slide 9

Slide 9 text

1SFGPSL ࠷େಉ࣌઀ଓ਺͸ࢠϓϩηεͷ਺ ૿΍ͤ͹૿΍͢΄Ͳεϧʔϓοτ͸্͕Δʁ ݶք͸Ͳ͜ʁ

Slide 10

Slide 10 text

1SFGPSL $,໰୊ αʔόʔͷϋʔυ΢ΣΞੑೳ͸໰୊ͳ͍ʹ΋͔͔ΘΒͣɺΫϥΠΞϯτͷಉ࣌઀ଓ਺͕ଟ͘ͳΔͱαʔϏεͷԠ౴͕஗͘ ͳΔ໰୊ ίϯςΩετεΠονͷ૿Ճ ϓϩηε͕૿͑͗͢Δͱͦ͏ͳΔɻεϨουͰ΋ίετ͸௿͍͕ى͜Δ ϨʔείϯσΟγϣϯ εϨουͳΒΫϦςΟΧϧηΫγϣϯͩͬͨΓڞ༗ϝϞϦͰͷ΍ΓऔΓͩͬͨΓͰ͔͞Ήίετ ϝϞϦ্ݶϑΝΠϧσΟεΫϦϓλ্ݶ εϨου͋ͨΓͰݻఆ௕ͷϝϞϦΛফඅ͢Δ͠ϓϩηε͝ͱʹඞཁͳϝϞϦ΋͋Δ ιέοτΛ࢖͏ͷͰϑΝΠϧσΟεΫϦϓλͷ্ݶʹ΋͋ͨͬͨΓ͢Δ εϩʔΫϥΠΞϯτ DL໰୊ͱ͸ผ ஗͍ΫϥΠΞϯτ͕͍ͨΒϓϩηεΛઐ༗͞ΕΔ

Slide 11

Slide 11 text

1SFGPSL $,໰୊ αʔόʔͷϋʔυ΢ΣΞੑೳ͸໰୊ͳ͍ʹ΋͔͔ΘΒͣɺΫϥΠΞϯτͷಉ࣌઀ଓ਺͕ଟ͘ͳΔͱαʔϏεͷԠ౴͕஗͘ ͳΔ໰୊ ίϯςΩετεΠονͷ૿Ճ ϓϩηε͕૿͑͗͢Δͱͦ͏ͳΔɻεϨουͰ΋ίετ͸௿͍͕ى͜Δ ϨʔείϯσΟγϣϯ εϨουͳΒΫϦςΟΧϧηΫγϣϯͩͬͨΓڞ༗ϝϞϦͰͷ΍ΓऔΓͩͬͨΓͰ͔͞Ήίετ ϝϞϦ্ݶϑΝΠϧσΟεΫϦϓλ্ݶ εϨου͋ͨΓͰݻఆ௕ͷϝϞϦΛফඅ͢Δ͠ϓϩηε͝ͱʹඞཁͳϝϞϦ΋͋Δ ιέοτΛ࢖͏ͷͰϑΝΠϧσΟεΫϦϓλͷ্ݶʹ΋͋ͨͬͨΓ͢Δ εϩʔΫϥΠΞϯτ DL໰୊ͱ͸ผ ஗͍ΫϥΠΞϯτ͕͍ͨΒϓϩηεΛઐ༗͞ΕΔ αʔόϦιʔε͸ۭ͍͍ͯΔͷʹಉ࣌઀ଓ਺ʹݶք͕ʜͲ͏͢Ε͹Α͍͔ʜ

Slide 12

Slide 12 text

Πϕϯτۦಈ

Slide 13

Slide 13 text

Πϕϯτۦಈ ΫϥΠΞϯτ αʔό ϓϩηε ΫϥΠΞϯτ ΫϥΠΞϯτ ϓϩηεͰෳ਺ΫϥΠΞϯτͷΞΫηεΛ͞͹͘ *0ଟॏԽ

Slide 14

Slide 14 text

ϓϩηεͱ͸ w ࣮ߦதͷϓϩάϥϜͷΠϝʔδɻػցޠͷϓϩάϥϜ͕ϝϞϦʹಡΈࠐ·Εͯʮϓϩηοα $16 ʯͷ࣮ߦͷର৅ʹͳͬͨ΋ͷɻ w ϑΝΠϧ౳ͷΞΫηε੍ޚʹ༻͍Δݖݶ ར༻ऀͷࣝผࢠɺར༻ऀͷάϧʔϓͷࣝผࢠ Λ࣋ͭ w ϓϩηεͷૢ࡞͸ɺੜ੒ɺऴྃɺڧ੍ऴྃɺϓϩάϥϜͷ࣮ߦɺҰ࣌ఀࢭɺ࠶։ɺσόοάͳͲɻ w ̏ͭͷجຊతͳঢ়ଶΛ࣋ͭ w $16͸ಉ࣌ʹҰͭͷॲཧ͔͠Ͱ͖ͳ͍ ϒϩοΩϯάͱ͸ w ʮ˓˓͍ͯ͠Δ࠷த͸ଞͷॲཧΛ͠ͳ͍Ͱ଴ͬͯΔΑʙʯͷ͜ͱ w ྫ͑͹ϓϩηε͕SFBE ΍XSJUF Ͱ௨৴ઌ͔ΒσʔλΛ଴͍ͬͯΔؒ͸ϒϩοΩϯά w ίωΫγϣϯཱ֬ޙɺΫϥΠΞϯτ͔ΒϦΫΤετ͕ૹΒΕͯ͘Δ·Ͱͷ଴ػ࣌ؒ w %#΍֎෦"1*ͷॲཧΛ͍ͯ͠Δ࣌ؒ

Slide 15

Slide 15 text

Πϕϯτۦಈ ΫϥΠΞϯτ αʔό ϓϩηε εϩʔΫϥΠΞϯτ ΫϥΠΞϯτ SFBE ଴ͪ ॲཧ͞Εͳ͍ ॲཧ͞Εͳ͍ ϓϩηε͕ෳ਺ͷίωΫγϣϯΛѻ͏ͱྫ͑͹ͦΕ͕ϒϩοΫͨ࣌͠఺Ͱఀࢭ͕શͯࢭ·ͬͯ͠·͏ 0@/0/#-0$,ͱ͔ͰϊϯϒϩοΩϯά͢Δ͜ͱ͸Ͱ͖Δ͕&"("*/ΛϋϯυϦϯά͢Δͷ͸େม

Slide 16

Slide 16 text

Πϕϯτۦಈ ΫϥΠΞϯτ αʔό ϓϩηε εϩʔΫϥΠΞϯτ ΫϥΠΞϯτ SFBE ଴ͪ ॲཧ͞Εͳ͍ ॲཧ͞Εͳ͍ ͜͜Ͱొ৔͢Δͷ͕*0.VMUJQMFYJOH *0ͷଟॏԽ

Slide 17

Slide 17 text

*0.VMUJQMFYJOHͱ͸ ɾpoll()ɺselect()ɺepollγεςϜίʔϧΛར༻ͯ͠ɺෳ਺ͷϑΝΠϧσΟεΫϦϓλΛ1ͭͷϓϩηεͰ؅ཧ͢Δ͜ͱ ɾ(epoll͸ϑΝΠϧσΟεΫϦϓλͷ਺ʹ੍ݶ͕ແ͍ͷʹՃ͑ͯɺϑΝΠϧσΟεΫϦϓλͷঢ়ଶมԽ؂ࢹ΋վળ͞Ε͍ͯΔ) ɾepoll_wait(2)͸Πϕϯτൃੜ·ͰฦΒͳ͍ ɾίϯςΩετεΠον͸ൃੜ͠ͳ͍ ɾΠϕϯτ = ΫϥΠΞϯτ͔ΒͷwriteɺαʔόଆͷSND_BUF͕͍ͬͺ͍ ɾλΠϜΞ΢τͳΜ͔΋(͜ΕͰ࣮૷͞Ε͍ͯͨΓ͢Δ) ɾͪͳΈʹrecv(2)͸ϒϩοΩϯά ɾσʔλͷ౸ணޙʹϓϩηεʹॲཧ͍ͤͨ͞ͳΒAIOͳͲ͕ඞཁ ɾgoroutineͳΜ͔΋ཪͰ͸͜ΕΛ࢖͍ͬͯΔ ɾNode.js΍memcached͸libuv΍libevͳͲͰϥοϓͨ͠ϥΠϒϥϦΛ࢖͍ͬͯΔ ΠϕϯτϧʔϓϞσϧ͸MJTUFO͢Διέοτ΋FQPMM@XBJU Ͱ؂ࢹͯ͠ɺίωΫγϣϯ͕དྷ͔ͨͲ͏͔νΣοΫγͨΓ͢Δඞཁ΋͋Δ

Slide 18

Slide 18 text

*0.VMUJQMFYJOHͱ͸ ɾpoll()ɺselect()ɺepollγεςϜίʔϧΛར༻ͯ͠ɺෳ਺ͷϑΝΠϧσΟεΫϦϓλΛ1ͭͷϓϩηεͰ؅ཧ͢Δ͜ͱ ɾ(epoll͸ϑΝΠϧσΟεΫϦϓλͷ਺ʹ੍ݶ͕ແ͍ͷʹՃ͑ͯɺϑΝΠϧσΟεΫϦϓλͷঢ়ଶมԽ؂ࢹ΋վળ͞Ε͍ͯΔ) ɾಉظ/ඇಉظIO ɾϒϩοΩϯά/ϊϯϒϩοΩϯάIO ɾͦΕͧΕผ෺ ɾҰ൪͍͍ͷ͸ඇಉظϊϯϒϩοΩϯά͕࣮ͩ૷͕Α͘ͳ͍ ɾ(Ϧʔφεౖ͕ܹ͍ͯͨ͠) ɾϗοτͳͷ͸io_uringͱ͍͏LinuxͰඇಉظIOΛ͢ΔͨΊͷAPI ɾ·ͩ·ͩރΕͯͳ͍ͷͰຊ൪౤ೖ͸·ͩઌ͔΋ʁ * ࢀߟ: Linuxʹ͓͚ΔඇಉظIOͷ࣮૷ʹ͍ͭͯ https://qiita.com/tmsn/items/0b9e5f84f9fbc56c1c82

Slide 19

Slide 19 text

Πϕϯτۦಈ ΫϥΠΞϯτ αʔό ϓϩηε ΫϥΠΞϯτ ΫϥΠΞϯτ &QPMM Πϕϯτ͕ൃੜͨ͠ ιέοτΛϓϩηε΁௨஌ 04ʹσʔλ͕͖ͨΒ௨஌͢Δ

Slide 20

Slide 20 text

Πϕϯτۦಈ ΫϥΠΞϯτ αʔό ϓϩηε εϩʔΫϥΠΞϯτ ΫϥΠΞϯτ &QPMM Πϕϯτ͕ൃੜͨ͠ ιέοτΛϓϩηε΁௨஌ ॲཧՄೳ ॲཧՄೳ SFBE ͳͲͰϒϩοΩϯά

Slide 21

Slide 21 text

ϋΠϒϦου ΫϥΠΞϯτ αʔό ϓϩηε ΫϥΠΞϯτ ΫϥΠΞϯτ &QPMM ϓϩηε &QPMM .BTUFS ϓϩηε ΫϥΠΞϯτ 1SFGPSLΠϕϯτۦಈ ϚϧνίΞγγεςϜͳΒઈରʹͬͪ͜Λ࢖͏

Slide 22

Slide 22 text

Ϛϧνϓϩηε ϚϧνεϨου 1SFGPSL Ϛϧνϓϩηε ϚϧνεϨου "QBDIFIUUQ QSFGPSN UISFBE 4BNCB BNBWJTE .Z42- 1PTUHSF42- /HJOY "QBDIFIUUQ FWFOU 3FEJT .FNDBDIFE /PEFKT