Slide 1

Slide 1 text

JITίϯύΠϥ͸͍͔ʹ RAILSΛ଎͘͢Δ͔ RAILS DEVELOPERS MEETUP 2017

Slide 2

Slide 2 text

self #=> • @k0kubun • TreasureDataॴଐ • Rubyίϛολ • Hamlitͷ࡞ऀɺERBͱHamlͷϝϯςφ • barbeque, mitamae, xremap΋ΑΖ͘͠

Slide 3

Slide 3 text

࠷ۙRubyʹ͍Εͨػೳͷએ఻ (Feature#14124) • binding.pry Έ͍ͨʹ binding.irb ͨ࣌͠ʹपลίʔυ͕දࣔ͞ΕΔΑ͏ʹͳΔ • ͜Ε͕͋ͬͯॳΊͯbinding.irb׬੒ͨ͠ͱݴͬͯ΋աݴͰ͸ͳ͍(?) • ଞʹ΋Ruby 2.5Ͱ͸ͳΜͱ require "irb" ͠ͳͯ͘΋ࣗಈͰϩʔυ͞ΕΔΑ͏ʹͳΓɺ binding.irb ͕ศརʹͳΔ

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

ಥવͰ͕͢ɺTDͰಇ͖͍ͨ ํ͍·ͤΜ͔ʁ

Slide 6

Slide 6 text

օ͞Μ͕ԿނTDʹԠื͠ͳ͍ͷ͔ෆ໌ • ෼ࢄDBΫϥ΢υͷཪଆΛݟΒΕΔɺ։ൃ͕Ͱ͖Δ • ༷ʑͳ෼໺ͷ༏लͳಉ྅ͱҰॹʹ࢓ࣄ͕Ͱ͖Δ • Fluentd, Embulk, Digdag౳OSS։ൃ͕࢓ࣄʹͰ͖Δ • γϦίϯόϨʔग़ࢿͷ଴۰ɺۈ຿࣌ؒͷࣗ༝౓΋ߴ͍

Slide 7

Slide 7 text

RailsͰग़དྷ͍ͯΔίϯϙʔωϯτୡ • ϓϩμΫτ • Treasure Data Service • Customer Data Platform • Enterprise Fluentd Management Console • ϚΠΫϩαʔϏε • Embulk config management API

Slide 8

Slide 8 text

Treasure Data Service ͷνʔϜ • kamipo (ϦϞʔτ) • ϑΣϧφϯυ (US, ϦϞʔτ) • uu59 • k0kubun • makimoto

Slide 9

Slide 9 text

k0kubunͱJIT ͜Ε·Ͱͷ͋Β͢͡

Slide 10

Slide 10 text

2017೥4݄: ΋ͬͱ଎͍Rubyཉ͠ ͍ͳ… → JIT͚ͩॻ͚͹Αͦ͞͏

Slide 11

Slide 11 text

2017೥4-6݄: C++ͱLLVMΛษڧ͠ͳ͕Βɺ CRuby޲͚ͷελοΫϕʔεͷϝιουJITΛ ։ൃ

Slide 12

Slide 12 text

2017೥7݄: ຊମ΁ͷϚʔδΛເݟ ͯCʹॻ͖௚͠ "LLRB" ͱͯ͠ެ։

Slide 13

Slide 13 text

2017೥7-8݄: MJIT͕ຊମʹೖΓͦ͏ͩ͠ LLRB͸͍͍͔ͱ͍͏ؾ࣋ͪʹͳΓɺGraphQL Ͱ༡ΜͰ͍ͨ

Slide 14

Slide 14 text

2017೥9݄: RubyKaigiͰͷϨδελϕʔεͷϝ ιουJIT "MJIT" ͷൃදޙɺϦεΫΛऔΒͣε λοΫϕʔεͷ··Ͱ଎͍JITΛ࡞Δ͜ͱΛܾҙ

Slide 15

Slide 15 text

2017೥10݄: MJITͷ͏ͪJITίʔυੜ੒෦෼͚ͩஔ ͖׵͑ͨ "YARV-MJIT" Λ։ൃɺެ։ (optcarrot: YARV-MJIT/gcc 56.4, MJIT/gcc 75.6)

Slide 16

Slide 16 text

2017೥11݄: RubyConfʹ޲͚YARV-MJITߴ଎ ԽɺpthreadҠ২ɺWindowsରԠ (optcarrot: YARV-MJIT/gcc 69.4, MJIT/gcc 75.6)

Slide 17

Slide 17 text

2017೥12݄: railsdm2017 ͰJIT͕RailsʹͲΕ͘ Β͍ޮՌ͕͋Δ͔࿩͢༧ఆ͕ͩͬͨɺYARV-MJIT ΛRailsͰಈ͔͠ଓ͚ΔͱյΕΔ͜ͱʹؾ෇͘

Slide 18

Slide 18 text

2017೥12݄: RailsͰಈ͘Α͏ʹ͢΂͘Ұࡢ೔͔ ΒYARV-MJITͷج൫ͷॻ͖௚͠Λ࢝Ίɺͦͷϒ ϥϯνͰ͸ΑΓ҆ఆͯ͠ಈ͘Α͏ʹͳͬͨ

Slide 19

Slide 19 text

͔͠͠RailsͰಈ͔ͯ͠Δͱ ΍ͬͺ͍͔ͭյΕΔ

Slide 20

Slide 20 text

ͳͷͰࠓ೔͸͜͏͍͏࿩Λ͠·͢ • CRuby޲͚ͷJITͷݱঢ় • Ͳͷ͘Β͍Rails͕ಈ͔ͤΔͷ͔ • ϕϯνϚʔΫ݁Ռ • YARV-MJIT͕ߦͳ͏࠷దԽͷ࢓૊Έ • ͦΕͧΕͷRails΁ͷΠϯύΫτͷ༧૝ • RailsͰͷYARV-MJITͷ࢖͍ํ

Slide 21

Slide 21 text

CRuby޲͚ͷJITͷݱঢ়

Slide 22

Slide 22 text

CRuby޲͚ͷJITͨͪ • RuJIT: TraceϕʔεɺϝϞϦ࢖༻ྔ͕໰୊ʹͳͬͨ໛༷ • Eclipse OMR: Optcarrotͩͱ଎͘ͳΒͳ͍Β͍͠ • LLRB: LLVMਏ͍ɺͪ͜Β͔Β͸Ҏ্ • MJIT: ଎͍ɺগͳ͍ϝϞϦফඅɺมͳґଘ΋ͳ͍ • YARV-MJIT: ͪΐͬͱMJITΑΓ஗͍͕ɺVMଆ͕όάΒͳ͍

Slide 23

Slide 23 text

ࠓ೔͸MJIT, YARV-MJITͷ࿩͚ͩ͠·͢ • RuJIT: TraceϕʔεɺϝϞϦ࢖༻ྔ͕໰୊ʹͳͬͨ໛༷ • Eclipse OMR: Optcarrotͩͱ଎͘ͳΒͳ͍Β͍͠ • LLRB: LLVMਏ͍ɺͪ͜Β͔Β͸Ҏ্ • MJIT: ଎͍ɺগͳ͍ϝϞϦফඅɺมͳґଘ΋ͳ͍ • YARV-MJIT: ͪΐͬͱMJITΑΓ஗͍͕ɺVMଆ͕όάΒͳ͍

Slide 24

Slide 24 text

MJITͱ͸ • GitHub: vnmakarov/ruby • CRubyͷͨΊͷϝιουJITίϯύΠϥ • JITίϯύΠϥ͚ͩͰͳ͘ɺϕʔεͷVM໋ྩ΋ஔ͖׵͑ • JIT༻pthread͕gcc΍clangΛfork, execͯ͠dlopen, dlsym • ͜ͷͨΊWindowsͰ͸ಈ͔ͳ͍ • http://rubykaigi.org/2017/presentations/vnmakarov.html

Slide 25

Slide 25 text

YARV-MJITͱ͸ • GitHub: k0kubun/yarv-mjit • MJITΛΑΓอकతʹͨ͠ϑΥʔΫ, trunkʹ௥ैத • JITج൫Λվળͭͭ͠ɺVM໋ྩ͸ஔ͖׵͑ͳ͍ • ଎౓͸MJITʹগ͠ྼΔ͕ɺRuby 2.5ΑΓे෼ߴ଎ • pthread෦෼ΛWindows޲͚ʹҠ২ࡁɺMinGWͰ͸׬શʹಈ࡞

Slide 26

Slide 26 text

ԿނYARV-MJITΛ։ൃ͍ͯ͠Δͷ͔ • RubyΛόάͳ͘ϦϦʔε͍ͯͨ͘͠Ίʹ͸ɺ͍͖ͳΓMJITΛೖΕΔͷ͸೉ͦ͠͏ • VM໋ྩͷஔ͖׵͑͸ϦεΩʔ (YARV͕ೖͬͨRuby 1.9΋࠷ॳ͸͔ͳΓյΕ͍ͯͨ໛༷) • JIT͸ΦϓγϣφϧͳͷͰࢼݧతʹಋೖ͠΍͍͕͢ɺVMͷมߋ͸όάΔͱճආͰ͖ͳ͍ • ͦΕͱಉ࣌ʹҠ২ੑΛղܾ͠ͳ͕ΒJITج൫΋ಋೖ͢Δඞཁ͕͋Δ • VMͦͷ··Ͱ΋ಈ͘γϯϓϧͳJIT (YARV-MJIT) ΛͱΓ͋͑ͣೖΕͯΈͨΒͲ͏͔ • ෦෼తʹupstreamʹ͋ΔͱMJIT͕ίϯϑϦΫτ͠ʹ͘͘ͳΓɺڞ༗͍ͯ͠ΔJITج൫΋ڠ ྗͯ͠։ൃ͠΍͘͢ͳΔ

Slide 27

Slide 27 text

ͰɺRailsͰಈ͘ΜͰ͔͢ʁ

Slide 28

Slide 28 text

ͦ΋ͦ΋Rubyຊମͷςετ͕ͲͪΒ΋શ෦͸௨Βͳ͍ .+*5 :"37.+*5 NBLFUFTUUFTUBMMTQFD XJUIPVU+*5 ˓ºº ˓˓˓ NBLFUFTUUFTUBMMTQFD XJUI+*5 ˓ºº ºº˓

Slide 29

Slide 29 text

MJIT on Rails • MJIT͕ϕʔεʹ͍ͯ͠ΔRTL໋ྩͷVMͰffi͕ಈ͔ͳ͍ • rubyͷtest-allͱ͔rubyspec΋མͪΔ • ͳͷͰJIT͕༗ޮ͔Ͳ͏͔ʹؔΘΒͣɺݱঢ়Rails͸ىಈෆೳ • ͨͩ͠ɺVladimir͸RTLΛYARV→JIT࣌ͷதؒදݱʹมߋதΒ͍͠ͷͰղܾ͞ΕΔ͔ ΋͠Εͳ͍͕ɺະެ։ͷͨΊෆ໌

Slide 30

Slide 30 text

YARV-MJIT on Rails • VMʹ΄΅ϊʔλονͳͷͰJIT͕ແޮͷঢ়ଶͰ͸RailsͩΖ͏͕׬શʹಈ࡞͢Δ • JIT༗ޮͩͱଟ෼͓͔͍͠ίϯύΠϧΛ͍ͯ͠Δͷ͕͍͔͋ͬͯͭམͪΔ • Ϛʔδ͢Δʹͯ͠΋͜Ε͸ղܾ͔ͯ͠ΒͰ͠ΐ͏Ͷ

Slide 31

Slide 31 text

ϕϯνϚʔΫ݁Ռ

Slide 32

Slide 32 text

Ruby 3x3 ͷ֬ೝʹ࢖ΘΕ͍ͯΔϕϯνϚʔΫ • mame/optcarrot • Rubyίϛολͷԕ౻͞Μ࡞ NESΤϛϡϨʔλͷϕϯν • noahgibbs/rails_ruby_bench • Noah GibbsʹΑΔ RailsΞϓϦdiscourseΛ࢖ͬͨϕϯν

Slide 33

Slide 33 text

mame/optcarrot 0QUDBSSPUXJUI-BO@.BTUFS GQT Ruby 2.0 Ruby 2.5 YARV-MJIT MJIT

Slide 34

Slide 34 text

noahgibbs/rails_ruby_bench • MJIT, YARV-MJIT ͕RailsͰಈ͔͘Ͳ͏͔Ҏલʹ͜ͷϕϯνϚʔΫͷ࣮ߦ͕೉͍͠ • RubyͱRailsͷίϛολʔͷদా͞Μ΋ಈ͔ͤͳ͔ͬͨ͠ɺ๻΋ಈ͔ͤͳ͔ͬͨ • ͳͷͰɺࠓͪΐͬͱࣗ෼ͰRailsͷϕϯνϚʔΫΛॻ͖࢝Ί͍ͯΔ

Slide 35

Slide 35 text

Ruby Grant 2017ͷϕϯν ϚʔΫϓϩδΣΫτʹ͍ͭͯ

Slide 36

Slide 36 text

Ruby Grant 2017΍ͬͯ·͢ • Ruby Grant ͱ͸: 50ສԁΛ͍͍ͨͩͯRubyʹߩݙ͢Δౕ • ๻͸ϕϯνϚʔΫ؀ڥͷ੔උΛ΍͍ͬͯ·͢ • benchmark_driver.gem • ैདྷͷϕϯνϚʔΧʔʹଘࡏ͢ΔProcݺͼग़͠ͷΦʔόʔϔου͕ͳͤ͘Δ • ϝϞϦ࢖༻ྔΛܭଌͨ͠ΓɺΞ΢τϓοτΛϓϥάΠϯͰࣗ༝ʹม͑ͨΓ • ͋ͱͦΕΛ࢖ͬͯϕϯνϚʔΫηοτͷ֦ॆͱɺCI؀ڥΛ༻ҙ͠·͢ • ࠷ऴతʹ͸RubyBench΁ͷ߹ྲྀ΋ࢹ໺

Slide 37

Slide 37 text

ϕϯνϚʔΫηοτͷ֦ॆʹ͍ͭͯ • RubyͷίΞΫϥεͷϝιουͷΧόϨοδΛ্͍͛ͯ͘ • Railsͱ͔Fluentdͱ͔ͷϕϯνϚʔΫ΋ॻ͜͏ͱࢥ͍ͬͯΔ • Rails΍Γ࢝Ίͨ: https://github.com/benchmark-driver/rails-benchmarks • ActionViewͷϕϯνॻ͍ͯͨͱࢥͬͨΒςϯϓϨʔτΤϯδϯΛϕϯν͍ͯͨ͠

Slide 38

Slide 38 text

YARV-MJITͷ࠷దԽͷ࢓૊Έ

Slide 39

Slide 39 text

YARV-MJITͷ࠷దԽͷ࢓૊Έ QVUPCKFDU QVUPCKFDU PQU@NVMU MFBWF $BMMDPVOU :"37CZUFDPEF 5ISFBE3VCZ7. 5ISFBE+*5DPNQJMFS *OUFSQSFU

Slide 40

Slide 40 text

YARV-MJITͷ࠷దԽͷ࢓૊Έ QVUPCKFDU QVUPCKFDU PQU@NVMU MFBWF $BMMDPVOU 7"-6&PQU@NVMU B C \ *G OPU@SFEFpOFE JOU@NVMU \ SFUVSOBC ^FMTF\ SFUVSOWN@FYFD ^ ^ 7"-6&OBUJWF@DPEF \ SFUVSOPQU@NVMU ^ $DPNQJMFS 0QUJNJ[F$PNQJMF :"37CZUFDPEF 5ISFBE3VCZ7. 5ISFBE+*5DPNQJMFS (FOFSBUF$DPEF *OUFSQSFU

Slide 41

Slide 41 text

YARV-MJITͷ࠷దԽͷ࢓૊Έ #ZUFDPEF GPS3VCZ7. QVUPCKFDU QVUPCKFDU PQU@NVMU MFBWF $BMMDPVOU 40pMF 7"-6&OBUJWF@DPEF \ *G OPU@SFEFpOFE JOU@NVMU \ SFUVSO ^FMTF\ SFUVSOWN@FYFD ^ ^ $BMM $DPNQJMFS 5ISFBE3VCZ7. 5ISFBE+*5DPNQJMFS *OUFSQSFU (FOFSBUF$DPEF EMTZN /BUJWFDPEF

Slide 42

Slide 42 text

͜ͷݩͷੜ੒ίʔυΛݡ͘͠ͳ͍ͱ଎͘ͳΒͳ͍ͷͰɺͦͷ࿩ #ZUFDPEF GPS3VCZ7. QVUPCKFDU QVUPCKFDU PQU@NVMU MFBWF $BMMDPVOU 40pMF 7"-6&OBUJWF@DPEF \ *G OPU@SFEFpOFE JOU@NVMU \ SFUVSO ^FMTF\ SFUVSOWN@FYFD ^ ^ $BMM $DPNQJMFS 5ISFBE3VCZ7. 5ISFBE+*5DPNQJMFS *OUFSQSFU (FOFSBUF$DPEF EMTZN /BUJWFDPEF

Slide 43

Slide 43 text

JITίʔυͷ࠷దԽઓུ

Slide 44

Slide 44 text

JITίʔυͷ࠷దԽઓུ • ๻͕RubyKaigi 2017ͷΩʔϊʔτʹٻΊ͍͚ͯͨͲ࿩͞Εͳ͔ͬͨ෦෼ • MJITͱYARV-MJITͷίϯύΠϥ͸ผ෺͕ͩɺ଎͞ͷຊ࣭తͳཧ༝͸ଟ͘ڞ༗͍ͯ͠Δ • MJIT͕଎͍ཧ༝͸ϕʔεͷ໋ྩ͕Ϩδελϕʔε͔ͩΒͰ͸ͳ͍ͱࢥ͍ͬͯΔ • ͜ΕҎ߱ͷ಺༰ͰͦΕΛূ໌

Slide 45

Slide 45 text

جຊΞΠσΞ • ݱࡏ͸ओʹҎԼͷ3छྨͷ࠷దԽʹϑΥʔΧε: • ؔ਺ͷΠϯϥΠϯԽ • ෆཁॲཧͷলུ • ίϯύΠϧ࣌ؒͷ୹ॖ • ͦΕͧΕRailsʹޮՌ͕͋Γͦ͏͔ߟ࡯Λ͍Ε·͢ • ΋͠શ෦ޮՌ͋ΔͳΒɺRailsͷRubyͷϨΠϠʔ͕ಉ͘͡Β͍଎͘ͳΔ͸ͣ

Slide 46

Slide 46 text

ઓུ1: VMͷίʔυΛͳΔ΂͘ϔομʹؚΊΠϯϥΠϯԽ͢Δ • ର৅: ؔ਺ͷΠϯϥΠϯԽ (MJIT͔ΒͷҠ২) • ίϯύΠϥ͸ίϯύΠϥʹ౉͞Εͨίʔυ͔͠࠷దԽͰ͖ͳ͍ͷͰɺఆٛΛ౉͢ • ୯ʹ vm.c ΛϓϦϓϩηεͨ͠΋ͷΛϔομͱͯ͠Πϯετʔϧ • Railsʹޮ͔͘: ○ • VM࣮ߦ͸໋ྩΛލ͍ͩ࠷దԽ͕Ͱ͖ͳ͍ͷͰɺେମ͋Δఔ౓͸ޮՌ͕͋Δ • ͨͩ͠ɺಛԽ໋ྩͷ͋ΔҰ෦ͷϝιου͸࠶ఆٛ͞Ε͍ͯͳ͍৔߹ʹྑ͘ޮ͘ͷͰɺASͷ ͍ͤͰ஗͘ͳΔౕ΋͋Δ͔΋

Slide 47

Slide 47 text

ઓུ2: ϔομͷඇstaticؔ਺Λstaticʹ͢Δ • ର৅: ίϯύΠϧ࣌ؒͷ୹ॖ (MJIT͔ΒͷҠ২) • ະ࢖༻ͷstaticؔ਺͸ී௨ͷ -O2 ͳΒίϯύΠϧ͕ແࢹ͞ΕΔ͜ͱΛར༻ • RubyͷεΫϦϓτ͕CͷίʔυΛਖ਼نදݱͰؾ߹Ͱม׵ (!?) • Railsʹޮ͔͘: ˕ • ίϯύΠϧ͕࣌ؒ଎͍ํ͕ͨ͘͞ΜίϯύΠϧͰ͖ΔͷͰɺ࣮֬ʹޮ͘

Slide 48

Slide 48 text

ઓུ3: setjmpݺͼग़͠ΛεΩοϓͨ͠JITίʔυ௚઀ݺͼग़͠ • ର৅: ෆཁॲཧͷলུ (MJIT͔ΒͷҠ২) • Rubyͷྫ֎͸"setjmp", “longjmp"Ͱ࣮૷͞Ε͍ͯΔ͕ɺϚγϯͷίϯςΩετͷอଘ͕ඞཁͰ஗ ͍ • ͜Ε͕ඞཁͳέʔεͷͨΊɺجຊతʹJITίʔυ͸VMΛىಈ͢Δؔ਺ʹϥοϓͯ͠ݺͼग़͍ͯ͠ Δ • ྫ֎͕ग़ͳͦ͏ͳόΠτίʔυͷ৔߹ʹɺͦͷϥοϓΛεΩοϓ͢Δ • Railsʹޮ͔͘: ○ • ΞϓϦͰྫ֎Λ࢖͏ʹͯ͠΋RailsͷϨΠϠʔͰޮ͘৔ॴ͸͋Δఔ౓͋Γͦ͏

Slide 49

Slide 49 text

ઓུ4: ࠷దԽʹ࣌ؒͷ͔͔Δؔ਺ͷΠϯϥΠϯԽΛආ͚Δ • ର৅: ίϯύΠϧ࣌ؒͷ୹ॖ (MJIT͔ΒͷҠ২) • CͷίʔυͷίϯύΠϧ࣌ؒ͸ɺύʔεͱ͔ڱٛͷίϯύΠϧ͸ҰॠͰɺ࠷దԽ͕஗͍ • ͳͷͰɺ࠷దԽ͕େมͳౕΛexternͰࢀর͢ΔΑ͏ʹ͢Ε͹ίϯύΠϧ͸଎͘ͳΔ • େมͳౕ: vm_search_method (ϝιου୳ࡧ) • ݺͼग़͢ͷ͕ඞཁͳ৔߹VM࣮ߦʹdeoptimizationΛ͢Δ • Railsʹޮ͔͘: ˚ • ͜Ε͸τϨʔυΦϑͷ͋Δ࠷దԽͰɺ͔ͳΓ௕͍࣌ؒ૸ΒͤΔRailsʹ͸ඍົͰ͢Ͷ

Slide 50

Slide 50 text

ઓུ5: ؀ڥϙΠϯλͷॳظ஋ͷอଘ • ର৅: ෆཁॲཧͷলུ (MJIT͔ΒͷҠ২) • ͔ͳΓ͜Έ͍ͬͨ࿩ͳͷͰฉ͖ྲྀ͍ͯͩ͘͠͞ (Ͱ΋ޮՌ͋Δ) • YARV͸؀ڥϙΠϯλ(ep)ͱελοΫϙΠϯλ(sp)Λ࣋ͪɺͦΕΒ͸࠷ॳ͸ಉ͡஋ • deoptimization࣌spͷૢ࡞͕ཁΔ͕ɺϝιου಺ͰProcੜ੒ͳͲͰ؀ڥ͕࡞ΒΕͨ࣌ep͸ಈ͍ͯ͠·͏ • ͦͷࡍep͔Βͷspͷܭࢉ͕େมʹͳΔͷͰɺepͷॳظ஋Λอଘ͓ͯ͘͠ͱ଎͍ • Railsʹޮ͔͘: ˕ • Railsͩͱdeoptimizationͷػձଟͦ͏ͩ͠ɺޮ͖ͦ͏

Slide 51

Slide 51 text

ઓུ6: VMʹؚ·Εͳ͍ϝιουͷΠϯϥΠϯԽ • ର৅: ؔ਺ͷΠϯϥΠϯԽ (MJIT͔ΒͷҠ২) • ϕʔεͷϔομ͸ vm.c ͔ΒͷΈ࡞͍ͬͯΔ͕ɺ౰વଞͷఆٛ΋͋ͬͨํ͕ྑ͍ • optcarrotʹޮ͘ͷͰͱΓ͋͑ͣ Array#[] ͱ͔͚͖ͩ࣋ͬͯͯΈͨΒޮ͍ͨ • Railsʹޮ͔͘: ˕ • ͪΌΜͱ࣮૷ͷ࢓૊Έ͕൚༻ԽͰ͖Ε͹ޮ͖ͦ͏

Slide 52

Slide 52 text

ઓུ7: ϝιουͷछྨ͝ͱʹҟͳΔϝιουݺͼग़͠ॲཧͷΠϯϥΠϯԽ • ର৅: ؔ਺ͷΠϯϥΠϯԽ (MJIT͔ΒͷҠ২) • CͰ࣮૷͞ΕͨϝιουͱRubyͰ࣮૷͞Εͨϝιουͷݺͼग़͠ॲཧ͸౰વҧ͏ • ͳͷͰVM໋ྩ͔ΒݟΔͱந৅Խ͞Ε͍ͯΔ • YARV͸όΠτίʔυʹΠϯϥΠϯΩϟογϡΛ͏Ί͜ΈɺͦΕ͕ϝιουͷλΠϓΛ ͍࣋ͬͯΔͷͰɺͦΕʹԠͯ͡ΠϯϥΠϯԽ͢Δ • Railsʹޮ͔͘: ˕ • ϝιουݺͼग़͕͠ଟ͍΄ͲޮՌ͕͋Δ

Slide 53

Slide 53 text

RailsͰͷYARV-MJITͷ࢖͍ํ

Slide 54

Slide 54 text

RailsͰͷYARV-MJITͷ࢖͍ํ • ී௨ʹϏϧυ: autoconf && ./configure && make && make install • rubyόΠφϦʹ͏·͍͜ͱ "-j" ϑϥάΛ౉͢

Slide 55

Slide 55 text

RailsͰͷrubyͷΦϓγϣϯͷ౉͠ํ • RUBYOPT="-j" rails s • ruby -j bin/rails s

Slide 56

Slide 56 text

·ͱΊ • YARV-MJITΛಋೖͯ͠΋JITΛ੾ͬͨঢ়ଶͳΒ࣮֬ʹRails͕ಈ࡞͢Δ • JITΛ༗ޮʹͨ͠৔߹͸·ͩյΕΔϝιου͕͋ΔͷͰɺ௚͠த • YARV-MJIT/gcc ͕ੜ੒͢Δίʔυͷ଎౓͸͔ͳΓ MJIT/gcc ʹۙ͘ͳͬͨ • ·ͩࢼͤͳ͍͕Railsʹ΋ޮ͖ͦ͏ɺޤ͏͝ظ଴