2016年3月14日 (月曜日)

09:41:20 # Life read/write loop とsplice. ファイルのコピーをread/write システムコールを使ってやっているのがなんか無駄な気がしたのでふとspliceを使ってみた。 片側は必ずPipeじゃないといけないっぽいのでPipeを中間にもたせてループ。PIPEのバッファサイズは64kB単位。これはカーネル内部に決め打ちだった気もするけど最近はfcntl(F_SETPIPE_SZ)で設定できて1MBくらいまであげれるっぽい(/proc/sys/fs/pipe-max-size)。 mmapするのとどっちが原理的には速いのだろうか。ユーザ空間でアクセスする必要のないデータをユーザ空間で見れるようにコピーするのが遅いはずだし、mmapはやるたびにメモリマップをいじることになるのでそれをしなくてよいのは利点のはず。

Junichi Uekawa