ãã ããèŠåºããããç©äºã¯ããã»ã©åçŽã§ã¯ãªãããšãããããŸãã ãããããããã®ç¹å®ã®ãã³ãããŒã¯ã®åé¡ãåæããåã«ïŒãã¡ãããããããªå³ãŸã§ã¹ã¯ããŒã«ã§ããŸãïŒããã³ãããŒã¯ã®éèŠãªåºæ¬çãªåºç€ãèæ ®ããå¿ èŠããããŸãã
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æçãªãã¹ãã¯ãã»ãšãã©ã®å Žåãã¢ããªã±ãŒã·ã§ã³ã®åäœã«çŽæ¥é¢ä¿ããŸããã
åžžã«ç¬èªã®ãã³ãããŒã¯ãéå§ããã©ã®ã³ãŒãã枬å®ãããã©ã®ããã«è¡ãããã©ã®ããã«æéããã³ãããŒã¯ã«åã蟌ãŸãããã確èªããŠãã ãã