zed shawのmongrel2: メモリ管理

http://sheddingbikes.com/posts/1277863730.html

mongrel2がファイルを送れるようになったので、それまで手抜きでやっていたメモリ管理に真剣に取り組でいるそうだ。Cでサーバを書くんなら伝統的にmallocとfreeでやるんだろうと思ったらそこはZed、色々なテクニックを使っている。

mongrel2が何かについては: http://d.hatena.ne.jp/karasuyamatengu/20100617/1276796731

bstringライブラリ http://bstring.sourceforge.net/

文字列処理を安全にしてくれるライブラリ。ソースからこの正規表現で危ない関数を見付けだしてbstringに変える。

[^_.>a-zA-Z0-9](str(n?cpy|n?cat|xfrm|n?dup|str|pbrk|tok|_)|stpn?cpy|r?index[^.]|a?sn?printf|byte_)

さらに危い関数を使うとプログラムがクラッシュするモジュールまで組み込んであるというから徹底している。

Valgrind http://valgrind.org/

これはメモリprofilerの定番。これをユニットテストと組み合わせて使っている。「Valgrind純潔」を追及している。

halloc http://swapped.cc/halloc/

深い階層を作った際に一気にメモリを返すことを可能にするライブラリ。

Boehm GCにもトライ http://www.hpl.hp.com/personal/Hans_Boehm/gc/

サーバでBoehm GCはないだろうと思うが、Zedは試してみる。でやはり結果は駄目ってことになった。いろいろなものを勤勉に試してみるところが偉いな。

ucontext based coroutine

Cでcoroutineなんて見出しは見たことあるけど、実用できるものだとは知らなかった。どういう風に使っているのか、ソースを覗いてみたい。coroutineとBoehmは相性が悪かったようだ。