[前][次][番号順一覧][スレッド一覧][生データ]

yarv-dev:262

From: SASADA Koichi <ko1 atdot.net>
Date: Thu, 21 Oct 2004 00:30:53 +0900
Subject: [yarv-dev:262] VM state version problem

 ささだです。

 キャッシュのために、VM に状態バージョン(カウンタ)を持た
せる、って話を前したと思うんですが、やっぱり問題があって、
そのカウンタがオーバーフローしたらどうなるって話があると思う
のです。

対策:

1) そんなのはレアケースなので見ないことにする
   (各種定義を 4G 回するなんてありえない)

2) オーバーフローを検出して、
  a) すべてのメソッドを再コンパイル
  b) すべてのメソッドのキャッシュのカウンタをチェックして、
     リセット
  c) Ruby の実行を止める

1 と 2-c は使い物にならなそうなので、ダメ。

	ObjectSpace.each_object(YARV::InsnSeq){|e|
	  e.recompile                 # 2-b
	# or
	  e.reset_vm_version_counter  # 2-c
	}

 だけだから、簡単っていえば簡単なんですが、そのカウンタの
インクリメント時に、オーバーフローチェックが必要になるんで
すよね。

	vm_ver++;
	if(vm_ver == 0){
	  reset_process...
	}

 で、こんなことを考えてると、そもそもこいつはスレッドセーフ
にしなくてもいいのか、とか余計なことを考えてしまったり。

 いや、何か値をインクリメントするのなら、ロックしないとまず
いような気はとてもするんですが・・・。てことは、キャッシュに
触るには、まずロックしないとだめってこと? うーん。r/w lock
にしても、やっぱり reade もロックの確認はしないと駄目だしなあ。


 昔から、リファレンスカウンタの値がオーバーフローしたらどう
するんだろう、と疑問に思ってるんですが、何か対策を立てるもの
なんでしょうか。


 と、取りとめも無く。

-- 
// SASADA Koichi at atdot dot net
//




--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

->     262 2004-10-21 00:30 [ko1 atdot.net       ] VM state version problem                
       263 2004-10-21 13:58 ┗[maeda-yarv atusi.org]                                       
       264 2004-10-21 14:18  ┗[ko1 atdot.net       ]                                     
       265 2004-10-21 15:09   ┗[maeda-yarv atusi.org]