トップ «前の日記(2013-05-30) 最新 次の日記(2013-06-01)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2013-05-31

_ RubyKaigi1日目

・2.1のGC

マークビットをビットマップへ移動したので、予約ビットと合わせて2ビット空いた。

そのうち1つを世代別GC用に利用する。

マーク時に世代ビットも立てる。

新世代用GC時に、上記ビットが立っているオブジェクトを発見したら、そのオブジェクトから先はマークしない。

マークフェーズが速くなった。

a.b = c の状態でGCしてaが旧世代となった後に、a.b = dした場合に、cが実際には不要化されたのに残る。それはフルGC時にスィープできるから良いとしてdはマークされないんじゃないか? どうやってるんだろう。(追記:下で書いているSHADYと不可分な話だった。SHADYかつリメンバオブジェクトであれば旧世代(PROMOTED)とはしないといった制御をしている)

もう1つのビットを日陰者と日陽者とする。陽なオブジェクトとするかどうかは、Cのコードでライトバリアを陽に設定するかどうかで決まる。既存の拡張ライブラリのものはすべて日陰者となる。

(このへん、ちゃんと理解してないので、なぜそうなったかわからないのだが、世代別と合わせることで、不要オブジェクトの早期回収が可能となるからフルGCの頻度が減るという理解で良いのかな?)

Rubyコアの利用箇所でライトバリアを設定するように改造し、RDocで試したら220秒かかっていた処理が、190秒で終わるようになった。15%の速度向上だ。

_ 卜部さんのバイヤーズガイド

#rubykaigi バイヤーズガイド ‘13

というわけで、インフォメーション買った。

インフォメーション: 情報技術の人類史(ジェイムズ グリック/James Gleick/楡井 浩一)

(kindle化されたら買おうとか考えていたが、そういうことを考えた場合の常ですっかり存在を忘れていたし、そこにジュンク堂が来ているのだから今買うしかないなぁと思ったのだった)

長田さんから、おれのC#の本は持ってきたら売れると思うか? と聞かれたので、客層とまったくマッチしないから無理でしょうと最初答えた。しかし良く良く考えてみれば、著者としては不誠実かも知れないと思いなおした。なので、もしかしたら奇特な人もいるかも知れないから、2冊くらいは置いてくれたらうれしいと頼んでみた。

後、Kaigi関連本として、まつもとさんがRubyでは採用しなかったBoehmGCを採用している処理系として名前を挙げられたGaucheの本もポップにそう書いて少し置いてみたらどうかとか。

プログラミングGauche(Kahuaプロジェクト/川合 史朗)

その伝でいくと、同じく言及があったトランザクションメモリを実装しているClojureについては丁度第2版が出たところなので置いてあったけど、ポップに書けば良いのにと今になって思い出した。

本日のツッコミ(全5件) [ツッコミを入れる]
_ shiro (2013-05-31 08:58)

Rubyの実装は読んでませんが、世代別GCの場合、tenureされたオブジェクトが変更される時は、それをwrite barrier等で検出してマークしなおすのが普通だと思います。

_ 青木 (2013-05-31 13:52)

普通はwrite barrierはmprotectとか使ってold領域まとめてかけるものなんですが、Rubyはcopy GCじゃないのでoldとnewが混在していてそれができない。したがって書き込みコードで明示的にチェックをしないといけない。だけどそれは開発コストがかかるので、最初から全部対応しなくていい工夫をしました。というのが今回の話です。

_ arton (2013-05-31 14:18)

最初から対応→陽、そうじゃない→陰ということですね?

_ shiro (2013-05-31 15:21)

ふむ。コード読んでみます。

_ arton (2013-05-31 15:54)

trunkのソースです。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|

ジェズイットを見習え