BT

Ruby 2.1がガベージコレクションを変更,大規模システムでの批判に対処

| 作者: Manuel Pais フォローする 9 人のフォロワー , 翻訳者 吉田 英人 フォローする 0 人のフォロワー 投稿日 2013年9月23日. 推定読書時間: 2 分 |

原文(投稿日:2013/09/15)へのリンク

Rubyを開発したMatz氏が先週のBaruco (Barcelona Ruby Conference) で,Ruby MRIのバージョン2.1から世代別ガベージコレクション (Generational Garbage Collection/GC) に移行することを発表した。これによってRuby言語の大幅なパフォーマンス向上が期待できる。Ruby 2.1は年末までにリリースされる予定だ。 

偶然にも同じ日,別の講演でGithubのVicent Martí氏は,Ruby MRIのガベージコレクション実装を強い調子で批判していた。氏は現行のマーク・アンド・スイープ (mark-and-sweep) アルゴリズムを "双頭の怪物 (2-headed monster) "と呼び,大規模なRubyシステムであるGithubがGCの制限によって何度となく影響を受けていることを説明した。

問題のひとつはマーキング・フェーズが遅いこと (アクティブなオブジェクトの識別で,オブジェクトグラフ全体がシーケンシャルに走査されるため。アプリケーションはその間,事実上の停止状態となる),もうひとつはスイーピング・フェーズが不正確で,実際にはC拡張によって使用されているRubyオブジェクトを開放してしまう場合があることだ。

氏はValgrindなどツールの利用や事前に静的解析を実施することで,これらの問題を最小化することができる,と説明した。その一方で,現状のRuby MRIのGC実装に根本的な欠陥がある点を強調し,JRubyRubiniusがMRIと同じ機能セットを達成できた時点で,大規模なRubyシステムはそちらへ移行した方がよい,とも提言している。

New RelicのChris Kelly氏は自身の講演で,現行のGC実装の遅さについて同調するとともに,典型的なRailsアプリケーションは数十万のオブジェクトを伴って起動するため,GC実行のマーキングフェーズ中に何度も解析処理を行わなければならないことを指摘した。またNew Relicで実施したRuby GCベンチマークの結果として,Ruby 1.8から1.9の間に,ガベージコレクションの実行が48%削減されていることも合わせて報告した。

氏はこれを,MRI開発チームがこの領域で大きな改善を行ったことを示すものだ,としている。具体的には,発表されたような世代別ガベージコレクションへの移行 (Matz氏によると,マーキングフェーズ時間の半減が期待できる) である。

Ruby MRIのガベージコレクション実装については,英語のドキュメントがないことに批判的な意見もある。氏は自身のプレゼンテーションで,"Rare Are GC Talks" など資料の一覧を紹介した。

Matz氏が発表したRuby 2.1の拡張機能としては,他にも文字列サフィックス (複素数に "i",有理数に "r",凍結した文字列に "f") やRefinement (フル機能),RDoc生成の高速化 (約15%) などがある。

 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT