そろそろRubyEnterpriseのGCについて一言いっておくか

これのことね。
Welcome — Ruby Enterprise Edition
ほいで
眠れないのでRubyKaigiのビデオを観ました! - ¬¬日常日記
にてご指名を頂きましたので、ちょっと小言を。。。
 

CoWの対策が入ってる

gc.cを覗いてみるとcopy-on-writeの対策が入ってるみたい。
それでCopyしなくてメモリ使わないからハッピーみたいな。
これくらい省メモリになるんだったら是非本家の方にも入れたいなぁ。
 

でも、遅くなるよ!!

遅くなりますよ。これ。
それはなぜかというと。
Objectにmarkがついているかどうかを調べる時 or markをつけるとき、
こんな処理をやってます。
 

/* marktable.c 18line */
static inline struct heaps_slot *
find_heap_slot_for_object(RVALUE *object)
{
	register int i;

	/* Look in the cache first. */
	if (last_heap != NULL && object >= last_heap->slot
	 && object < last_heap->slotlimit) {
		return last_heap;
	}
	for (i = 0; i < heaps_used; i++) {
		struct heaps_slot *heap = &heaps[i];
		if (object >= heap->slot
		 && object < heap->slotlimit) {
			/* Cache this result. According to empirical evidence, the chance is
			 * high that the next lookup will be for the same heap slot.
			 */
			last_heap = heap;
			return heap;
		}
	}
	return NULL;
}

 
HeapのSlotをぶん回して、Slotがもってるbitmapを見つけるわけですね。
これを全部のObjectにやってしまう事で大分遅くなるんじゃないのかな。
本家に入れられていないのは、このbitmapとObjectをどう結びつけるのか
とい問題があるからではないかと。思うわけです
 

と言う事で

そこを修正したパッチを作りたいと思ってます。
BoehmGCを参考にして。
ってか、BoehmGC入れてみたいよねぇ。頑張ります。
 

幸せになるのか?

というかみんな結構困ったりしてるんでしょうか。
こういうのが出るくらいだから困ってるんでしょうけども。
 

というか頭痛い

RubyKaigiから帰ってきてから調子が悪いっす。