K.Sasada's Home Page

こめんとのついか

こめんとこめんと!

message

please set comment :).

_23(Wed)

なんかやる気が出ないので延々と「最前線UNIXのカーネル」という本を読む.Solaris 2.5 が最新な最前線.

v-node/vfs の構造とか,i-node との関係とかがよくわからんなぁ.実は,i-node とカーネルとの関係もよくわかっていない.

しかし,色々とわかりやすい.ふつりな読んでるよりもわかりやすいと思うんだけれど,俺変なのかなあ.


上記の本,p435

多くの商用環境では,これに関連して,メモリの使用パターンは周期的である.例えば,昼間は,データベース検索とトランザクション処理に使用され,夜間はバックアップとデータベースの再構築に使われるマシンの場合,昼間と夜間では,メモリ割り当ての要求の種類が違うだろう.

おお,目からウロコ.Kernel Memory allocator の話なんだけどね.


世代別GCの考察.

mark するときの root によって動作を変えてあげればいいと思うので,特にコストはかからないような.深い,浅いは気にしない.いや,別に気にしてあげてもいいか.

いや,絶対誰かがやってるだろうけれど,効果のほどは? こないだの SIGPRO のやつだと遅くなってたけど,なんか余計なことやってたような気がしたんだよな.


しかし,write barrier の挿入だよなぁ,問題は.挿入忘れを防ぐための方法論ってあるのかなぁ.ポリシ決めよりも,実際は重要だと思うんだが.


Ruby の場合,一番重要(やばそう)なのが T_DATA のバリアし忘れだと思うんだけど,T_DATA はしょうがないからとにかく全部マークするように出来ないだろうか.

問題になるのは,殿堂入りしている T_DATA の構造体に,勝手に誰かがマークしないでRubyオブジェクトを突っ込んでしまった場合.

これを防ぐために,殿堂入りしている T_DATA なオブジェクトのリストを用意してあげて,そいつらは強制的に mark 関数を呼び出す,というのはどうでしょうか.

で,これから拡張ライブラリを作る人で,write barrier をきっちり作る人には T_DATA_BARRIERD でも用意してあげるとか.


今までは,T_DATA のオブジェクト data_value が含む構造体 data->value に対して,

data->value = value;

だけで済んでいたのを,

insert_ruby_value(data_value, data->value, value);

みたいにするのかなぁ.

#define TENURED_VALUE_P(v) (RBASIC(v)->flags & TENURED_FLAG)

#define TENURED_P(v) \
  (!SPECIAL_CONST_P(v) && TENURED_VALUE_P(v))

#define insert_ruby_value(d, dv, v) \
  if(!SPECIAL_CONST_P(v) && TENURED_VALUE_P(d) && !TENURED_VALUE_P(v)) \
    dv = WRITE_BARRIER(v); \
  else \
    dv = v; \

みたいな感じになるのかなあ.マクロにしておけば,v が即値のときにはコンパイル時にチェックを省略してくれる.


って、環境へのアクセスにもライトバリアをしないといけないのか。ローカル変数アクセスでライトバリアって、なんか嫌だなあ。


好きにコメントを編集してください。ただし、あまり他の人のコメントを書き換えることは感心しません。



back

tton 記述が使えます。YukiWikiな記述してりゃ問題ありません。

「行頭に#code」 と、「行頭に#end」 で挟むと、その間の行は pre で囲まれます。プログラムのソースを書くときに使ってください。

例:

#code

(なんかプログラム書く)

#end

リンクは

[[なまえ|http://www.example.org]]

とか

[[http://www.example.org]]

で貼れます。

$Date: 2003/04/28 10:27:51 $