Sadayuki Furuhashi
@frsyuki
named mmapアロケータは、大きなバッファを確保するときにファイルシステム上にファイルを作ってmmapする。ファイルを受信して保存したり、他のサーバに中継するコードを書くときに、前者はrename or hardlinkで、後者はsendfileで実現できる。
2011-02-27 23:57:16
Sadayuki Furuhashi
@frsyuki
あとnoname mmapアロケータ。namedとほとんど同じだけど、ファイルは作ってmmapしたらすぐに削除する。ファイルディスクリプタをcloseするまでの期間だけ有効。ページキャッシュだけ使いたいという発想。kumofsでも使っている方法。
2011-02-28 00:02:32
Sadayuki Furuhashi
@frsyuki
これがあると、数十GB級のメモリに載らないファイルの送受信をMessagePack-RPCだけで実現できる。こういうのは普通はRPCではできない。でもI/Oエラーを考えるとマジメなプログラムではチャンクに区切る実装を上に載せると思うけども。
2011-02-28 00:09:02
Sadayuki Furuhashi
@frsyuki
チャンクに区切る場合だとmvだけではできないけど、某CTOの2006年の調査報告であるところの『C言語: UNIX最速ファイルコピー』で述べられている mmap -> write が使えるので有効。http://bit.ly/geS4Ig
2011-02-28 00:13:32
Sadayuki Furuhashi
@frsyuki
もしかするとspliceも使えるかもしれない。ユーザー空間へのアドレス変換が発生しないので、速いかもしれない。 http://bit.ly/fUeF1R
2011-02-28 00:15:05
Sadayuki Furuhashi
@frsyuki
あるいはio_*系の非同期I/Oが使えるので、上位レイヤーにI/Oの非同期化を作り込まなくて済む可能性がある。ただ移植性が低いので、使えるか否かはMessagePack-RPC側の作り込み次第。後で作り込めるようにインタフェースだけは作っておきたいところ。
2011-02-28 00:17:09