MJITãã³ãããŒã¯ã®çµæãèŠãŸãããïŒ åœŒãã¯çŽ æŽãããã§ãããïŒ MJITã¯ããªãã·ã§ã³ãªãã§ä»ã®ãã¹ãŠã®å®è£
ãæåéãåãåºããŸãã 圌ã¯ããäœå¹Žã©ãã«ããã®ã§ããïŒ ãã¹ãŠãä»ã¯ã¬ãŒã¹ãªãŒããŒïŒ
ãã ããèŠåºããããç©äºã¯ããã»ã©åçŽã§ã¯ãªãããšãããããŸãã ãããããããã®ç¹å®ã®ãã³ãããŒã¯ã®åé¡ãåæããåã«ïŒãã¡ãããããããªå³ãŸã§ã¹ã¯ããŒã«ã§ããŸãïŒããã³ãããŒã¯ã®éèŠãªåºæ¬çãªåºç€ãèæ
®ããå¿
èŠããããŸãã
MJITïŒ TruffleRubyïŒ ããã¯äœã§ããïŒ
MJITã¯ã
GCCéçºè
ã®Vladimir Makarovã«ããGithubã®Rubyã®æŽŸçç©ã§ãããæã人æ°ã®ããRubyã€ã³ã¿ãŒããªã¿ãŒã§ããCRubyã§åçJITã³ã³ãã€ã«ïŒ
Just In Time Compilation ïŒãå®è£
ããŠããŸãã ããã¯
æçµããŒãžã§ã³ã§ã¯
ãªããå察ã«ããããžã§ã¯ãã¯éçºã®åæ段éã«ãããŸãã ææãªãã³ãããŒã¯çµæã¯2017幎6æ15æ¥ã«å
¬éãããŸãããããããã®èšäºã®äž»ãªè°è«ã®äž»é¡ã§ãã
TruffleRubyã¯ãOracle Labsã®
GraalVMã§ã®Rubyå®è£
ã§ãã ç§ã®ååã®èšäºã
Ruby plays Go Rumble ãã§ãããããã«ãå°è±¡çãªããã©ãŒãã³ã¹çµæã瀺ããŠããŸãã ãŸããJITãå®è£
ããå°ããŠã©ãŒã ã¢ããããå¿
èŠããããŸãããæçµçã«ã¯åè¿°ã®ãã³ãããŒã¯ã®Ruby 2.0ã®çŽ8åé«éã§ãã
ç¶è¡ããåã«...
ç§ã¯ãŠã©ãžããŒã«ã«éåžžã«æ¬æãè¡šããŠãããMJITã¯éåžžã«è²Žéãªãããžã§ã¯ãã ãšæããŸãã å®éãããã¯æšæºã®Rubyã«JITãå°å
¥ããæ°å°ãªãè©Šã¿ã®1ã€ãããããŸããã JRubyã«ã¯é·å¹ŽJITããããè¯å¥œãªããã©ãŒãã³ã¹ã瀺ããŠããŸããããã®å®è£
ã¯å®éã«ã¯æ®åããŠããŸããïŒããã¯å¥ã®èšäºã®ãããã¯ã§ãïŒã
ãã³ãããŒã¯ãå®è¡ãããæ¹æ³ãæ¹å€ããŸãããããã«ã¯ããã€ãã®çç±ããããŸãããç§ã¯èŠéããŸããïŒç§ã¯ç¥ã£ãŠãããã®ãææããããšããŸãïŒã æçµçã«ããŠã©ãžããŒã«ã¯ç§ãäžçã§è¡ã£ãŠããããããã£ãšé·ãéããã°ã©ãã³ã°ãè¡ã£ãŠããŠãããæããã«ç§ã®èšèªã®å®è£
ã«ã€ããŠããå€ããç¥ã£ãŠããŸãã
ç¹°ãè¿ããŸãããããã§ã¯éçºè
ã®äººæ Œã®åé¡ã§ã¯ãªããæ£ç¢ºã«ãã³ãããŒã¯ãå®æœããæ¹æ³ã®åé¡ã§ãã ãŠã©ãžããŒã«ããããèªãã ãã

äœã枬å®ããŸããïŒ
ãã³ãããŒã¯ã®çµæãèŠããšãæåã«çããã®ã¯ãäœã枬å®ãããã®ãããšãã質åã§ããããã§ã®çãã¯ãã³ãŒããšæéã®2ã€ã§ãã
ã©ã®ã³ãŒãã枬å®ããŠããŸããïŒ
ãã¹ããå®éã«ã©ã®ã³ãŒãã枬å®ããããç¥ãããšã¯éèŠã§ããããã¯ç§ãã¡ã«ãšã£ãŠæ¬åœã«é¢é£æ§ãããã®ã§ãããããã¯è¯ãRubyããã°ã©ã ãªã®ã§ãã ããã¯ãç¹å®ã®Rubyå®è£
ã®ããã©ãŒãã³ã¹ã®ææšãšããŠãã³ãããŒã¯ã䜿çšããå Žåã«ç¹ã«éèŠã§ãã
READMEãã¡ã€ã«ã®ãã³ãããŒã¯ã®ãªã¹ããèŠããšïŒãããŠã
ãããã®æå³ã®èª¬æãŸã§ã¹ã¯ããŒã«
ããã
ãã³ãŒãã調ã¹ããšïŒãäžååã®ã»ãŒå
šäœããã€ã¯ããã¹ãã§ããããšãããããŸãã

ã€ã³ã¹ã¿ã³ã¹å€æ°ãžã®æžã蟌ã¿ãå®æ°ã®èªã¿åãã空ã®ã¡ãœããã®åŒã³åºããwhileã«ãŒããªã©ã枬å®ããŸãã ãããã¯ãã£ã±ããããã¥ã¢ãã¹ãã§ãããèšèªå®è£
è
ã®èŠ³ç¹ããã¯èå³æ·±ããããããŸããããå®éã®Rubyã®ããã©ãŒãã³ã¹ãå®éã«ã¯åæ ããŠããŸããã äžå®ã®æ€çŽ¢ãRubyã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã®ããã«ããã¯ã«ãªãæ¥ãæã幞ããªæ¥ã§ãã ãŸããã³ãŒãã®ã©ã®éšåã«whileã«ãŒããå«ãŸããŠããŸããïŒ
ããã®ã³ãŒãã®å€§éšåïŒãã€ã¯ããµã³ãã«ãé€ãïŒã¯ãç§ãå
žåçãªRubyã³ãŒããšåŒã¶ãã®ãšã¯ãŸã£ããç°ãªããŸãã ã¹ã¯ãªãããšCã³ãŒãã®æ··åç©ã«ãã䌌ãŠããŸãã å€ãã®å Žæã§ã¯ã©ã¹ã¯å®çŸ©ãããŠããŸããããåŸæ¥ã®Enumerableã¡ãœããã®ä»£ããã«forã«ãŒãã䜿çšãããå Žæã«ãã£ãŠã¯ããããã¹ã¯ãããããŸãã
ãããã®æ§é ã®äžéšã¯ãæé©åã®çµæã§ããå¯èœæ§ããããŸãã ã©ãããããããã¯
äžè¬çãªèšèªãã¹ãã§äœ¿çšãããŠã
ãŸã ã ãããå±éºã§ããããããã®ã»ãšãã©ã¯ç¹å®ã®ãã©ãããã©ãŒã ïŒãã®å Žåã¯CRubyïŒåãã«æé©åãããŠããŸãã ãããã©ãããã©ãŒã ã§ã®æéã®Rubyã³ãŒãã¯ãå®è£
ã®è©³çŽ°ã®ããã«ä»ã®ãã©ãããã©ãŒã ã§ã¯ã¯ããã«é
ããªãå¯èœæ§ããããŸãïŒããšãã°ãTruffleRubyã¯
ç°ãªãStringå®è£
ã䜿çšã
ãŸã ïŒã åœç¶ããã®ãããä»ã®å®è£
ã«ã¯æ¬ ç¹ããããŸãã
ããã§ã®åé¡ã¯ããå°ãæ·±ãã§ããäžè¬çãªãã³ãããŒã¯ã«ãããã®ã¯äœã§ãããããçš®ã®å®è£
ã®ããã«æé©åãããããšã¯é¿ããããŸãããããã®ã³ãŒãã¯ã§ããã ãå®éã®ãã®ã«è¿ãã¯ãã§ãã ãããã£ãŠã
Ruby 3Ã3ãããžã§ã¯ãã®
ãã³ãããŒã¯ã«éåžžã«æºè¶³ããŠã
ãŸã ããããã®æ°ãããã¹ãã¯ãããé¢é£æ§ã®é«ãçµæã瀺ããŠããŸãã
äœæã«æž¬å®ããŸããïŒ
ããã¯å®éã«ç§ã®èšäºã®ãæ°ã«å
¥ãã®éšåã§ããã
ééããªãæãéèŠã§ãã ç§ã®ç¥ãéããå
ã®èšäºã®æé枬å®ã¯æ¬¡ã®ããã«è¡ãããŸããïŒ
/usr/bin/time -v ruby $script
ãããã¯Webã¢ããªã±ãŒã·ã§ã³ã§åºã䜿çšãããŠããããã°ã©ãã³ã°èšèªã®ãã³ãããŒã¯ã§ç§ã®ãæ°ã«å
¥ãã®ééãã®1ã€ã§ãã ãã®ããšã«ã€ããŠã®è©³çŽ°ã¯ãäŒè°ã§ã®ç§ã®ã¹ããŒãã§èªãããšãã§ã
ãŸã ã
åé¡ã¯äœã§ããïŒ ããŠãã¹ã¯ãªããã®å®è¡
æéïŒèµ·åããŠã©ãŒã ã¢ãããå®è¡ïŒã®ã¿ã枬å®ããå Žåãå
šäœçãªçµæã«å«ãŸãããã®ãåæããŸãããã

- èµ·å -Rubyã€ã³ã¿ãŒããªã¿ãŒã®èµ·åãã³ãŒãã®è§£æãªã©ããæçšãªãããšãè¡ãåã®æéã åèãŸã§ã«ãæšæºRubyã䜿çšããŠç©ºã®Rubyãã¡ã€ã«ãå®è¡ããã«ã¯0.02ç§ãMJITã§0.17ç§ãTruffleRubyã§2.5ç§ããããŸã ïŒ Substrate VMã䜿çšããŠãã®æéã倧å¹
ã«åæžããèšç»ããããŸã ïŒã ã¹ã¯ãªããã®å®è¡æéãåçŽã«æž¬å®ããå Žåããããã®ç§ã¯åºæ¬çã«åãã³ãããŒã¯ã«è¿œå ãããŸãã
- ãŠã©ãŒã ã¢ãã -ããã°ã©ã ãæé«é床ã§åäœãå§ããåã®æéã ããã¯ãJITå®è£
ã«ãšã£ãŠç¹ã«éèŠã§ãã é«ã¬ãã«ã§ã¯ã次ã®ããšãçºçããŸããã©ã®ã³ãŒããæãé »ç¹ã«åŒã³åºããããã確èªããããã«æé©åãè©Šã¿ãŸãã ãã®ããã»ã¹ã«ã¯å€ãã®æéãããããŸãããå®éã®ãããŒã¯ããã©ãŒãã³ã¹ããéæããããšã«ã€ããŠã¯ããã®æåŸã§ãã話ããŸããã ãŠã©ãŒã ã¢ããæã«ãããã°ã©ã ã¯ããŒã¯ããã©ãŒãã³ã¹ãããã¯ããã«é
ãå®è¡ãããå¯èœæ§ããããŸã ã 以äžã«ããŠã©ãŒã ã¢ããã®ã¿ã€ãã³ã°ã詳现ã«åæããŸãã
- å®è¡ -ãããããããŒã¯ããã©ãŒãã³ã¹ã-確ç«ããããªãŒãã¿ã€ã ã ãã®æ®µéãŸã§ã«ãã³ãŒãã®ã»ãšãã©ãŸãã¯ãã¹ãŠããã§ã«æé©åãããŠããŸãã ããã¯ãä»åŸã³ãŒããå®è¡ãããããã©ãŒãã³ã¹ã®ã¬ãã«ã§ãã çæ³çã«ã¯ããã®ããã©ãŒãã³ã¹ã枬å®ããå¿
èŠããããŸãã99.99ïŒ
以äžã®æéãã³ãŒãã¯æ¢ã«å ç±ãããç¶æ
ã§å®è¡ãããããã§ãã
å
ã®ãã³ãããŒã¯ãéå§æéãšãŠã©ãŒã ã¢ããæéã
確èªããã®ã¯èå³æ·±ãããšã§ããããããã®ã€ã³ãžã±ãŒã¿ãŒã¯ãå¹æãåãããããããã«åŠçãããŸãããå®å
šã«ã¯æ¶ããŸããïŒãJRubyãGraal Rubyãšã¯ç°ãªããMJITã¯éåžžã«è¿
éã«éå§ãããŸãã JRubyãšGraal Rubyã®å¯èœæ§ãåçã«ããããã«ããã³ãããŒã¯ãå€æŽãããRuby MRI v2.0ãåãã¹ãã§20ã70ç§åäœããããã«ãªããŸããã
ãã詳现ãªãã¹ãã¹ããŒã ã§
ã¯ãé·æããã»ã¹ã§ããã©ãŒãã³ã¹ããã¹ãããããšãç®æšã§ããã°
ãããŒãæéãšãŠã©ãŒã ã¢ããæéã¯çµæã«
圱é¿ãäžããªããšèããŠ
ããŸãã
ãªãã§ïŒ ããšãã°ãWebã¢ããªã±ãŒã·ã§ã³ã¯éåžžãé·æçãªããã»ã¹ã§ããããã§ãã WebãµãŒããŒãèµ·åããŸã-ãããŠãããã¯æ°æéãæ°æ¥ãæ°é±éåããŸãã
èªã¿èŸŒã¿ãšãŠã©ãŒã ã¢ããã¯æåã®1åã ãã«è²»ããããã®åŸãµãŒããŒã®é»æºãåããŸã§
ããã»ã¹ã¯é·æéæ©èœããŸãã éåžžã®ãµãŒããŒã¯ã99.99ïŒ
以äžã®æéãäºåã«æããããç¶æ
ã§å®è¡ããå¿
èŠããããŸãã ããã¯ããã³ãããŒã¯ãåæ ãã¹ãã§ãããšããäºå®ã§ãã
ããŒãåŸã®æåã®æ°ç§ãŸãã¯æ°åã§ã¯ãªãããµãŒããŒã®æé/æ¥/é±ã®éã«æé«ã®ããã©ãŒãã³ã¹ã
åŸãæ¹æ³ã
å°ããªäŸãã¯è»ã§ãã æçæéïŒçŽç·ïŒã§300ããã¡ãŒãã«èµ°è¡ããŸãã äžèšã®è¡šã«ãã枬å®å€ã¯ãæåã®çŽ500ã¡ãŒãã«ã®æž¬å®å€ãšæ¯èŒã§ããŸãã è»ã«ä¹ã£ãŠãæé«é床ãŸã§å éããããŒã¯æã«å°ããã©ã€ãããŸãã æéã®è»ã¯æåã®500ã¡ãŒãã«ããã300ããã¡ãŒãã«é«éã§ããïŒ ãããããªãã ïŒæ³šïŒç§ã¯è»ãèŠæã§ãïŒã
ããã¯ãã³ãããŒã¯ã«ãšã£ãŠäœãæå³ããŸããïŒ çæ³çã«ã¯ãè² è·ãšãŠã©ãŒã ã¢ããæéãåãé€ãå¿
èŠããããŸãã ããã¯ãå®éã®æž¬å®ïŒãŠã©ãŒã ã¢ããæéïŒãè¡ãåã«ãæåã«ãã³ãããŒã¯ãæ°åéå§ããRubyã§äœæããããã¹ãã©ã€ãã©ãªã䜿çšããŠå®è¡ã§ããŸãã gemãå¿
èŠãšãããé·æéã®ãã¹ãã«é©ããŠããããã
ç¬èªã®å°ããªã©ã€ãã©ãªã䜿çšããŸãã
ããŒããšãŠã©ãŒã ã¢ããã®æéã¯æ¬åœã«éèŠã§ã¯ãããŸãããïŒ åœŒããæã£ãŠããŸãã ãããã¯ãéçºããã»ã¹äžã«æãé¡èã«åœ±é¿ããŸã-ãµãŒããŒã®èµ·åãã³ãŒãã®ãªããŒãããã¹ãã®å®æœã ããããã¹ãŠã®ã¿ã¹ã¯ã«ã€ããŠãè² è·ãšãŠã©ãŒã ã¢ããæéããæ¯æããå¿
èŠããããŸãã ãŸãããšã³ããŠãŒã¶ãŒåãã®UIã¢ããªã±ãŒã·ã§ã³ãŸãã¯CLIããŒã«ãéçºããŠããå ŽåãããŒããé »ç¹ã«çºçãããããããŒãããã³ãŠã©ãŒã ã¢ããæéãåé¡ã«ãªãå¯èœæ§ããããŸãã ããŒããã©ã³ãµãŒã«éä¿¡ããåã«ãŠã©ãŒã ã¢ããããããšã¯ã§ããŸããã ãµãŒããŒäžã®cronjobãšããŠã®ããã»ã¹ã®å¥ã®å®æçãªèµ·åããããŠã³ããŒããšãŠã©ãŒã ã¢ããã«æéãè²»ããããšã匷å¶ããŸãã
ããã§ã¯ãè² è·ãšãŠã©ãŒã ã¢ããæéã枬å®ããããšã«å©ç¹ã¯ãããŸããïŒ ã¯ããããã¯äžèšã®ç¶æ³ã®1ã€ã«ãšã£ãŠéèŠã§ãã ãŸãã
time -vãã©ã¡ãŒã¿ãŒã䜿çšãã枬å®ã§ã¯ãããã«å€ãã®ããŒã¿ãçæãããŸãã
tobi@speedy $ /usr/bin/time -v ~/dev/graalvm-0.25/bin/ruby pent.rb
Command being timed: "/home/tobi/dev/graalvm-0.25/bin/ruby pent.rb"
User time (seconds): 83.07
System time (seconds): 0.99
Percent of CPU this job got: 555%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:15.12
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 1311768
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 57
Minor (reclaiming a frame) page faults: 72682
Voluntary context switches: 16718
Involuntary context switches: 13697
Swaps: 0
File system inputs: 25520
File system outputs: 312
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
ã¡ã¢ãªäœ¿çšéãCPUãçµéæéïŒãŠã©ãŒã«ã¯ããã¯ïŒãªã©ãå«ãå€ãã®æ
å ±ãååŸããŸããããã¯èšèªã®å®è£
ãè©äŸ¡ããããã«ãéèŠã§ãããã
ãå
ã®ãã³ãããŒã¯ã«ã
å«ãŸããŠããŸã ã
æ§æ
ïŒæçµçã«ïŒïŒãã³ãããŒã¯ã«é²ãåã«ããããã«æž¬å®ãè¡ãããã·ã¹ãã ããããŸãããšããå¿
é ã®éšåãå¿
èŠã§ãã
次ã®RubyããŒãžã§ã³ã䜿çšãããŸããïŒç¹å¥ãªèšå®ãªãã§ã³ã³ãã€ã«ããã
2017幎8æ25æ¥ã®ãã®ã³ãããã® MJITãgraalvm 25ããã³27ïŒè©³çŽ°ã¯åŸè¿°ïŒãããã³ããŒã¹ã¬ãã«ãšããŠã®CRuby 2.0.0-p648
ãããã¯ãã¹ãŠã16 GBã®ã¡ã¢ãªãš
i7-4790ããã»ããµ
ïŒ3.6 GHzã4 GHzã¿ãŒãïŒãæèŒããLinux Mint 18.2ãã¹ã¯ãããPCïŒUbuntu 16.04 LTSããŒã¹ïŒã§å®è¡ãããŠããŸããã
tobi@speedy ~ $ uname -a
Linux speedy 4.10.0-33-generic #37~16.04.1-Ubuntu SMP Fri Aug 11 14:07:24 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
ãã¥ã¢ã«ã³ã¢ã©ãããããã§
PolyconfäŒè°ã®ãã¹ãã
åããŠè¡ã£ããšããTruffleRubyã®çµæã¯ã¯ããã«æªãã£ããããããã§ã®æ§æã«ã€ããŠèšåããããšãç¹ã«éèŠã ãšæãããŸãã ã³ã¢ã§ã®CPU䜿çšçãããªãé«ããããgraalvmã¯2ã€ã®ã³ã¢ãéããªã©ã®ã¡ãªããããããŸãã
ãã®ãªããžããªã§ããã¹ãçšã®ã¹ã¯ãªãããšãã®ä»ãã¹ãŠã確èªã§ã
ãŸã ã
ããã... ...ããªãã¯ãã³ãããŒã¯ãçŽæããŸãããã©ãã«ãããŸããïŒ
ç³ãèš³ãããŸããããçè«ã¯ãã¹ãçµæèªäœãããéèŠã§ããããã«æãããŸãããããããã¯ééããªãè«æã説æããã®ã«åœ¹ç«ã¡ãŸãã æåã«ã
pent.rbãã³ãããŒã¯ãéžæããçç±ãšã
graalvmã®ãããã«å€ãããŒãžã§ã³ã§å®è¡ããçç±ã説æããŸãïŒå¿é
ããªãã§ãã ãããçŸåšã®ããŒãžã§ã³ãããžãã¹ã«ãããŸãïŒã ãããŠæåŸã«ãã°ã©ããšæ°åã衚瀺ãããŸãã
ãã®ãã³ãããŒã¯ã¯ãªãã§ããïŒ
ãŸããå
ã®ããã©ãŒãã³ã¹ãã¹ããgraalvm-0.22ã§å®è¡ãããŸããã graalvm-0.25ã®çŸåšã®ïŒçŸåšã®ïŒããŒãžã§ã³ã§çµæãåçŸããããšãããšããããã®å€ãããã§ã«æé©åãããŠããããïŒãããŠããŒãžã§ã³0.22ã«ã¯ããã€ãã®æ¬æ Œçãªããã©ãŒãã³ã¹ãã°ãå«ãŸããŠããŸãïŒãé£ããããšãããããŸãã
ããã©ãŒãã³ã¹ã®åé¡ãåçŸã§ããå¯äžã®ãã³ãããŒã¯ã¯
pent.rbã§ãããç°åžžãæãæ確ã«ç€ºããŸããã å
ã®ãã³ãããŒã¯ã§ã¯ãRuby 2.0ã®ããã©ãŒãã³ã¹ã®0.33ãšããŠããŒã¯ãããŠããŸãïŒã€ãŸãã3åé
ãïŒã ããããTruffleRubyã§ã®ç§ã®çµéšã¯ãã¹ãŠãããã¯ããããééã£ãŠãããšèšã£ãŠããŸãã 圌ã¯TruffleRubyã§æéã ã£ãã®ã§ãç§ã¯åœŒãé€å€ããŸããã§ããããããã©ãããã
圌ã¯æé
ã§ãã ã
ããã«ãããã¯äž»ã«æãå
žåçãªRubyã³ãŒãã§ã¯ãããŸããããç§ã®æèŠã§ã¯ïŒã¯ã©ã¹ãå€ãã®ã°ããŒãã«å€æ°ã¯ãããŸããïŒãeachãcollectãsortãuniqãªã©ã®Enumerableã¡ãœããã䜿çšããŠããŸãããåæã«ããããã¹ã¯ãªã©ããããŸãããã®ãããªã ã§ããããç§ã¯ããã§ãæ¯èŒçè¯ãåè£è
ãç²åŸã§ããããã«æããŸããã
å
ã®ãã³ãããŒã¯ã¯ãµã€ã¯ã«å
ã«é
眮ãããæ°åç¹°ãè¿ãããããããŠã©ãŒã ã¢ããæéã枬å®ããŠãããããã©ãŒãã³ã¹ã®ããŒã¯æã®å¹³å皌åæéã枬å®ã§ããŸãã
ã§ã¯ããªãå€ãããŒãžã§ã³ã®graalvm-0.25ã§å®è¡ããã®ã§ããïŒ ãã³ãããŒã¯çšã«æé©åããããã®ã¯äœã§ããããã§ã®éãã¯ããã»ã©æçœã§ã¯ãããŸããã
Benoit Dalousã¯ããã®ãã³ãããŒã¯ã®TruffleRubyã®ãŠã©ãŒã ã¢ããæéãæé©åããããšããã€ãŒãããŸããããã®ãããTruffleRubyã¯MJITããã3åé«éã«ãªããŸããã 圌ã¯ã
pen.rbãã³ãããŒã¯ã³ãŒã
ãåŒæ°ã®ä»£ããã«
ã°ããŒãã«å€æ°ã䜿çšããŠå€ãã¡ãœããã«æž¡ããšããäºå®ã«æ³šæãåããŠããŸãã
åŸã»ã©ãæ°ããæ¹è¯çãè©ŠããŸãã
MJIT察Graalvm-0.25
ãã®ãããç§ã®ãã·ã³ã§ã¯ã
TruffleRuby 0.25ã§ã®
pent.rbãã³ãããŒã¯ïŒããŒãããŠã©ãŒã ã¢ãããå®è¡æéïŒã®æåã®å®è¡ã«ã¯15.05ç§ããããMJITã§ã¯7.26ç§ããããããŸããã§ããã ã€ãŸããMJITã¯2.1åé«éã§ããã å°è±¡çïŒ
ããããããŒããšãŠã©ãŒã ã¢ãããèæ
®ããªããã®ã¯äœã§ããïŒ éèš³ãéå§ããåŸã«æž¬å®ãéå§ãããã©ããªããŸããïŒ ãã®å Žåãã³ãŒãã60ç§éã«ãŒãã§å®è¡ããŠãŠã©ãŒã ã¢ãããããã®åŸãå®éã®ããã©ãŒãã³ã¹ã60ç§é枬å®ããŸãã ãã®å³ã¯ãæåã®15åã®å埩ã®ãã¹ãå®è¡æéã瀺ããŠããŸãïŒãã®åŸãTruffleRubyã¯å®å®ããŸãïŒã
TruffleRubyãšMJITã®ã©ã³ã¿ã€ã ã¯åŸã
ã«å€åããŸã-å埩åŸã®å埩ã芧ã®ãšããã
TruffleRubyã®èµ·åã¯éåžžã«é
ããªããŸãããããã«é床ãäžãããŸãããMJITã¯ã»ãŒåãããã«åäœãç¶ããŸãã èå³æ·±ãããšã«ãTrufleRubyã¯ã€ãã¬ãŒã·ã§ã³6ããã³7ã§åã³ã¹ããŒããŠã³ããŸããå®äºãããŸã§ã«ããªãã®æéããããæ°ââããæé©åãèŠã€ãããã以åã®æé©åã®å¶éãç¡å¹ã«ãªã£ãããã«æé©åã解é€ãããŸããã ãã®åŸãTruffleRubyã¯å®å®ããæé«ã®ããã©ãŒãã³ã¹ã«éããŸãã
ãŠã©ãŒã ã¢ããåŸã«ãã³ãããŒã¯ãéå§ãããšãTruffleRuby 1.75ç§ããã³MJIT-7.33ç§ã§å¹³åæéãåŸãããŸãã ã€ãŸãããã®æž¬å®æ¹æ³ã§
㯠ã
TruffleRubyã¯MJITãããäºæ³å€ã«4.2åé«éã§ã ã
2.1åé
ããªã代ããã«ã枬å®æ¹æ³ãå€æŽããã ãã§4.2åéããªããŸããããã¹ãçµæãæ¯ç§ã®å埩åæ°ïŒips / ipmïŒãšããŠè¡šç€ºããã®ã奜ãã§ãããªããªããããã§ã¯ããè¯ãã®ã§ãã°ã©ããããçŽæçã«åºãŠããããã§ãã ã©ã³ã¿ã€ã ã¯ãTruffleRubyã§ã¯1åããã34.25å埩ãMJITã§ã¯1åããã8.18å埩ã«å€æãããŸãã ããã§ã¯ãæ¯åå埩ãšããŠå€æããããã¹ãçµæãèŠãŠã¿ãŸãããã ããã«ãããå
ã®æž¬å®æ¹æ³ãšæ°ããæ¹æ³ãæ¯èŒãããŸãã
ã¹ã¯ãªããå
šäœã®å®è¡äžã®1åãããã®å埩æ°ïŒåææéïŒããã³å ç±åŸã®å埩æ°TruffleRubyã®çµæã®å€§ããªéãã¯ãæåã®æ°åã®å埩äžã®ãŠã©ãŒã ã¢ããæéãé·ãããã§ãã äžæ¹ãMJITã¯éåžžã«å®å®ããŠããŸãã ãã®éãã¯ãçµ±èšèª€å·®ã®ç¯å²å
ã«ãããŸãã
Ruby 2.0 vs MJIT vs Graalvm-0.25 vs GRAALVM-0.27
ãããã£ãŠãããå€ãã®ããŒã¿ãçŽæããŸããããããã«ãããŸãïŒ ãã®ããŒã¿ã»ããã«ã¯ãæ¯èŒã®ããã®ããŒã¹ã©ã€ã³ãšããŠã®CRuby 2.0ãã³ãããŒã¯ãããã³æ°ããgraalvmãå«ãŸããŠããŸãã
| åææéïŒç§ïŒ | IPMéå§æé | å¹³åïŒç§ïŒ | ãŠã©ãŒã ã¢ããåŸã®ipm medium | åèšã®äžéšãšããŠã®æšæºåå·® |
CRuby 2.0 | 12.3 | 4.87 | 12.34 | 4.86 | 0.43ïŒ
|
ããªã¥ãã«ããŒ0.25 | 15.05 | 3.98 | 1.75 | 34.25 | 0.21ïŒ
|
ããªã¥ãã«ããŒ0.27 | 8.81 | 6.81 | 1.22 | 49.36 | 0.44ïŒ
|
ã ãžãã | 7.26 | 8.26 | 7.33 | 8.18 | 2.39ïŒ
|
åå埩ã®å®è¡æéïŒç§åäœïŒã å埩ãçµãã£ããããCRubyã®çµæããã§ãŒãããŸãTruffleRuby 0.27ã¯ãæåã®å埩ããã®MJITãããé«éã§ããããšãããããŸããããã¯éåžžã«å°è±¡çã§ãã ãŸãã6åç®ã®å埩ã®ååŸã§å¥åŠãªé床äœäžãåé¿ãããããTruffleRuby 0.25ãããã¯ããã«éãããŒã¯ããã©ãŒãã³ã¹ã«éããŸããã 4ã€ã®ç«¶åä»ç€Ÿãã¹ãŠããŠã©ãŒã ã¢ããããåŸã®ããã©ãŒãã³ã¹ãæ¯èŒãããšãäžè¬ã«æ°ããããŒãžã§ã³ã¯äžè¬çã«é«éã«ãªããŸããã
4人ã®ãã¹ãåå è
ã®å ç±åŸã®1åãããã®å¹³åå埩åæ°ãããã£ãŠãTruffleRuby 0.27ã§ã¯ããŠã©ãŒã ã¢ãããå éããã ãã§ãªããå
šäœçãªããã©ãŒãã³ã¹ããããã«åäžããŸããã çŸåšã§ã¯ãMJITããã6å以äžé«éã§ãã ãã¡ãããTruffleRubyã®éçºè
ãããããæ¢åã®ãã³ãããŒã¯ã®æé©åãå®è¡ãããããããã¯éšåçã«èµ·ãããŸããã ããã¯ãããè¯ãããã©ãŒãã³ã¹ãã¹ããå¿
èŠã§ãããšããç§ã®äž»åŒµãããäžåºŠåŒ·èª¿ããŠããŸãã
æåŸã®å¥åŠãªå³ãšããŠã1åãããã®å埩åæ°ã«å¿ããŠãã¹ã¯ãªããã®åèšå®è¡æéïŒ
timeãäœ¿çš ïŒãšå ç±åŸã®ããã©ãŒãã³ã¹ãæ¯èŒããŠ
ããŸãã
ã¹ã¯ãªããã®åèšå®è¡æéïŒ1åãããã®å埩åæ°ïŒãšãŠã©ãŒã ã¢ããåŸã®ããã©ãŒãã³ã¹ã®å·®äºæ³éããCRuby 2ã¯éåžžã«å®å®ããŠãããTruffleRubyã¯ããã«ããªããŸãšããªããã©ãŒãã³ã¹ã瀺ããŸããããã®åŸæ°åå éããŸãã ããã«ããã
ç°ãªã枬å®æ¹æ³ãåçã«ç°ãªãçµæã«ã€ãªããããšã確èªã§ããŸãã
ãããã«
ããã§ã¯ãã©ã®ãããªçµè«ãåºãããšãã§ããŸããïŒ èªã¿èŸŒã¿ãšãŠã©ãŒã ã¢ããã®æéã¯éèŠã§ããããããã®ææšãã©ãã»ã©éèŠã§ããããããã³ãããã枬å®ããå¿
èŠããããã©ãããæ
éã«æ€èšããå¿
èŠããããŸãã Webã¢ããªã±ãŒã·ã§ã³ã®å ŽåãããŠã³ããŒããšãŠã©ãŒã ã¢ããã®æéã¯ãããã°ã©ã ããŠã©ãŒã ã¢ããåŸã«ããã©ãŒãã³ã¹ã瀺ãæéã®99.99ïŒ
以äžã§ãããããå®è³ªçã«ç¡é¢ä¿ã§ãã
èšæž¬ããæéã ãã§ãªããã³ãŒããéèŠã§ãã ãã³ãããŒã¯ã¯ãçµæãå¯èœãªéãææ矩ã«ãªãããã«ãå¯èœãªéãçŸå®çãªãã®ã«ããå¿
èŠããããŸãã ã€ã³ã¿ãŒãããã§ã®ããçš®ã®arbitraryæçãªãã¹ãã¯ãã»ãšãã©ã®å Žåãã¢ããªã±ãŒã·ã§ã³ã®åäœã«çŽæ¥é¢ä¿ããŸããã
åžžã«ç¬èªã®ãã³ãããŒã¯ãéå§ããã©ã®ã³ãŒãã枬å®ãããã©ã®ããã«è¡ãããã©ã®ããã«æéããã³ãããŒã¯ã«åã蟌ãŸãããã確èªããŠãã ãã