2016年3月19日 (土曜日)

16:36:18 # Life 日々のコーディング。 できるだけ自分の興味のあることを自分のためにコードする時間というのをとりたいなとおもってだれかのいってた毎日すこしづつやるハックを電車の中でやっているんだけどなかなか毎日はできないなぁ。

16:44:12 # Life Spliceとread/write. Linuxカーネルではspliceというシステムコールがあってそれだとファイルディスクリプタからファイルディスクリプタに直接コピー操作をさせることができる。read/writeでループするよりユーザ空間へのコピーがおこらないのでこちらのほうが効率が良さそうに思える。しかし手元でベンチマークとってみたところ、キャッシュにのっているときにはあまり差がないんだけど キャッシュにのっていないとき(/proc/sys/vm/drop_cachesした直後)に read/writeだと2秒でコピーが完了する680MBの ファイルがspliceだと3秒かかってた。 一回パイプを噛ませてるというのもあるかもだけど、うーん、なんでだろ。

ふと思いついてfallocateいれたら5倍位高速になった。しかしまだspliceのほうが遅い。一回Pipeを挟むからシステムコールの数が倍になるとかいうのは理由になるんだろうか。

Junichi Uekawa