Linuxにsplice/tee/vmspliceというシステムコールができていたことに最近気がついた。入ったのは最近というわけではなくて、2.6.17とかの頃ですね。
実際これらは良いものなのかどうか。パイプを介してどんなファイルディスクリプタにもデータを飛ばせるのでsendfileよりは使いでがあるように思う。
これらを使うとしたら、、、
- sendfileの代わり
- readやwriteの高速化
- (ファイルやディスクの)コピーの高速化
くらいか。
sendfileの代わりとしてはまあ、インタフェースがちょっと変わるくらいですね。ただソケットに直接投げられないので、そのぶん面倒になり、sendfileよりも高速になるとはあまり思えないな。
readやwriteについては、コピーを使わずにバッファキャッシュがそのままユーザに見えるというイメージかな。速度的には普通、メモリの速度はI/Oと比べると圧倒的に速いので、あまり高速になるとは思えないな。やはり高速ネットワーク向けか、SSD系のデバイスがもっと高速になれば使われるかもしれない。広く(?)使われてきたO_DIRECTの代替になってくる可能性はある。