俺の話を聞け!!LT大会 #8でトークした資料です
ʙय़ͩʂՖคͩʂ-5େձͩ͊͊͊͋͋͋͋ʂʂʂ̍ʙ!QZBNB(.01FQBCP *ODԶͷΛฉ͚ʂʂ-5େձ-JOVYίϚϯυͰϘτϧωοΫΛௐΔ
View Slide
ϗεςΟϯάࣄۀ෦νʔϑςΫχΧϧϦʔυࢁԼ!QZBNB
ϖύϘԬ
αʔόαΠυɺϑϩϯτΤϯυɺΠϯϑϥΤϯδχΞશһདྷͯ͘Εʂʂʂʂ̍࠷৽ͷ࠾༻ใΛνΣοΫˠ !QC@SFDSVJU
ϘτϧωοΫௐࠪ
ʮͳΜ͔Θ͔ΒΜ͚ͲɺԿ͔͕ͯ͘ॲཧ͕ॏ͍ʯ
಄ѱͦ͏
ύϑΥʔϚϯεղੳʹ͍͔ͭ͘ͷखஈ͕͋Δ
ͳΜ͔͍͍ͩͨͲͷձࣾʹ͍Δ͍͢͝ਓʹฉ͘w͍͢͝ਓʹฉ͘ͱɺ͍͍ͩͨղܾͯ͘͠ΕΔw͍͢͝ਓ͍͢͝ͷͰɺͦͷͰΘ͔Βͳͯ͘ɺ͍͍ͩͨ࣍ͷʹ ʮࡢͷ͋ΕΘ͔ͬͨΑʂʂʂʯͱ͔ௐ͖ͯͯ͘ΕΔw͍͢͝ਓʹฉ͘ͱɺ͍͢͝ਓ͕ؤுΔ͚ͩͰɺ͕ࣗؤுΒͳ͍͔Β͕ࣗ͠ͳ͍
ϓϩϑΝΠϦϯάwIUUQTHJUIVCDPNUNNTUBDLQSPGݴޠ໊ϓϩϑΝΠϥ<ݕࡧ>
-JOVYͷίϚϯυͰௐΔwHEC5IF(/6%FCVHHFSwTUSBDF5SBDFTZTUFNDBMMTBOETJHOBMTwQFSG1FSGPSNBODFBOBMZTJTUPPMTGPS-JOVYwWBMHSJOEBTVJUFPGUPPMTGPSEFCVHHJOHBOEQSPpMJOHQSPHSBNT
ࣄྫ
NSVCZͷ"1*ΞΫηε͕NSVCZDMJFOU "1*4FSWFSSFTPVSDFFYBNQMFNSVCZͷ$MJFOU͔Β͋Δ"1*Λ࣮ߦͯ͠.#ͷϨεϙϯεΛऔಘ͢Δ߹+40/
ࣄྫॠؒతʹ(CZUF͘Β͍ϝϞϦ͏
WBMHSJOEͰϝϞϦͷΞϩέʔγϣϯΛݟΔ# valgrind curl http://localhost/resource/example > /dev/null…==18619== HEAP SUMMARY:==18619== in use at exit: 0 bytes in 0 blocks==18619== total heap usage: 1,863 allocs, 1,863 frees, 211,125 bytes allocated# valgrind /home/pyama/mruby test.rb…==12811== HEAP SUMMARY:==12811== in use at exit: 0 bytes in 0 blocks==12811== total heap usage: 51,721 allocs, 51,721 frees, 12,028,345,116 bytes allocated
ʗ ?P?ʘ(
TUSBDFͰγεςϜίʔϧͷ౷ܭΛऔΔ# strace -fc /home/pyama/mruby test.rb% time seconds usecs/call calls errors syscall------ ----------- ----------- --------- --------- ----------------73.00 0.006317 2 3361 munmap23.27 0.002014 11 183 brk2.62 0.000227 0 1734 read1.11 0.000096 0 3380 mmap0.00 0.000000 0 3 write0.00 0.000000 0 16 open0.00 0.000000 0 23 closeNVONBQ͕ࢧతIUUQTMJOVYKNPTEOKQIUNM-%1@NBOQBHFTNBONNBQIUNM
QFSGΛར༻ͯ͠ίʔϧάϥϑΛऔಘ͢ΔIUUQNSVCZPSHEPDTBQJIFBEFSTNSVCZ@'TUSJOHIIUNMNSC@TUS@QMVTGVODUJPO# perf record --call-graph dwarf -- /home/pyama/mruby test.rb# perf report -g -G —stdio94.35% 0.03% mruby mruby [.] mrb_str_plus|---mrb_str_plus|--20.06%-- mrb_vm_execmrb_vm_run…NSC@TUS@QMVT͕ࢧత
ใ͔ΒԾઆΛཱͯΔwॲཧ)551ϦΫΤετͰϨεϙϯεϘσΟαΠζ͕େ͖͍wϝϞϦ(#ͬͯΔΦϫλwNVONBQ͕ࢧతͰճଟ͍͜ͱ͔ΒɺϝϞϦͷ֬อɺղ์͕ଟ͍ͷͰͳ͍͔ʁwNSC@TUS@QMVT͕ࢧతͰ͋Δ͜ͱ͔Βɺจࣈྻ݁߹͕ଟ͍͜ͱ͕ݪҼͬΆ͍ͳʁ NSC@TUS@QMVTSVCZFbDlBzlCz`
ΧΫΧΫγΧδΧ
ݪҼ)551ϦΫΤετͷόοϑΝαΠζIUUQTHJUIVCDPNNBUTVNPUPSZNSVCZTJNQMFIUUQQVMMNSVCZDMJFOU "1*4FSWFSSFTPVSDFFYBNQMF+40/ιέοτ͔Β+40/Λड͚औΔࡍͷόοϑΝαΠζ͕CZUFͰ͋ͬͨ͜ͱ͔Βɺಡࠐͷϧʔϓճ͕ଟ͘ͳ͍ͬͯͨɻόοϑΝͷαΠζΛCZUFมߋ͢Δ͜ͱͰ݁Ռͱͯ͠ϧʔϓճΛݮΒͯ͠จࣈྻ݁߹ͷճΛݮΒͨ͠
NSVCZTJNQMFIUUQwhile (t = socket.read(1024))if block_given?yield tnextendɹ #όοϑΝ͕গͳ͍ͱϧʔϓճ͕૿͑ͯɺ݁߹ճ͕૿͑ͯແବʹϝϞϦ֬อresponse_text += tend͔͠ɺ($͕Δ·Ͱ։์͞Εͳ͍
͏Ұา౿ΈࠐΉ
NSC@TUS@QMVTNSVCZͰจࣈྻ݁߹ͷࡍʹ݁߹݁ՌจࣈྻͷϝϞϦΛ֬อ͢Δ
NSVCZTJNQMFIUUQwhile (t = socket.read(1024))if block_given?yield tnextendresponse_text << tend͞ΒʹDPODBUʹ͢Δ͜ͱͰɺແବͳྖҬ֬อΛΊΔ
NSC@TUS@QMVT74NSC@TUS@DBUTUSJOHlBCzTUSJOHlBz TUSJOHlCzTUSJOHlBz TUSJOHlCz TUSJOHlBz TUSJOHlCz TUSJOHlBCz
IUUQTUFOTOBQPODPNBSDIJWFT
·ͱΊwϓϩϑΝΠϥίϚϯυΛར༻ͯ͠ใΛूΊΑ͏wूΊͨใ͔ΒԾઆΛཱͯΑ͏wԾઆΛݕূ͠Α͏wσόοάίʔυͰ͋Ε͜Εࢼ͢wਂ͘ίʔυΛಡΉɺ࣮ʹഭΔ
5IBOLZPV࠷৽ͷ࠾༻ใΛνΣοΫˠ !QC@SFDSVJU