GitHub - fluent/fluentd: Fluentd: Unified Logging Layer (project under CNCF) のメンテナの方が、Ruby 3でどれぐらい速く動くようになったか計測した話です。 fluentdでは1秒間に1万オブジェクトを作ることもあるそうです。 オブジェクト生成ならObject Shapesの効果ですね。
1000万行のログを読ませて、パースに掛かった時間を測ったそうです。 CPUバウンドな処理のようです。 JITは効くみたいですが10%程度だったみたいです。 同じ処理を繰り返す小さいプログラムはJIT効きそうなイメージがあります。 ただ、実際にはプログラムによって効いたり効かなかったりするのが不思議です。 JITの気持ちがわかりません。
Python速い!!#rubykaigi pic.twitter.com/uzopQ3a9Cg
— クオッカネン・サンポ (@KuokkanenSampoJ) September 9, 2022
Pythonより大幅に遅いという衝撃的なグラフが見られました。
#RubyKaigi で話題のあったLTSVのパース、PythonとRubyの違いはやっぱりメモリ管理ぽいな。 pic.twitter.com/Vmp6lupN95
— Naoki 🇺🇦🇯🇵 (@methane) September 12, 2022
こちらのツイートによると、どうやらGCに時間が掛かっているようです。 なるほど。大量のオブジェクトを生成した分、大量のオブジェクトを破棄しないといけないのかもしれません。
Ractorも試したかったけどPluginが動かなくなったという話も面白かったです。 ですよね。Pluginシステムはアーキテクチャが多きく変わると難しいですよね。
GitHub - fujimotos/RubyKaigi2022: RubyKaigi 2022 resources にて、発表資料や計測に使ったスクリプトが公開されています。
2022/09/18 追記
twitter.comIn his talk "How fast really is Ruby 3.x?" at @RubyKaigi 2022, Fujimoto Seiji asks whether CRuby 3.1 is 3 times faster than 3.0 or even 2.0.
— Benoit Daloze (@eregontp) 2022年9月12日
The answer on the LTSV benchmark is no for CRuby, but it is yes for @TruffleRuby which is 3.6x (CE) and 5.7x (EE) faster than CRuby 3.1!
このベンチマークはTruffleRubyだと速く動くのだそうです。