なんかいちいさん(id:ichii386)が面白そうなこと(「rsync で削除すると速い (?) 件」)をやってたので、手元の PC でも試してみました。
- ThinkPad X220
- Linux Mint 14
- Linux 3.5.0-28
- ext4
% mkdir /tmp/a % cd /tmp/a % seq 1000000 | time xargs -n100 touch xargs -n100 touch 0.33s user 1.02s system 3% cpu 38.471 total
% cd /tmp % time rm -rf a rm -rf a 0.94s user 12.84s system 14% cpu 1:35.91 total
% cd /tmp % mkdir empty % time rsync -a --delete empty/ a rsync -a --delete empty/ a 1.65s user 20.53s system 8% cpu 4:31.73 total
rm の約96秒に対して、rsync は約272秒。めっちゃ遅いんですけど…。
dtrace なんて使えないので、strace でシステムコールの回数を取ってみました。
[rm]
1000001 unlinkat 976 getdents64 840 brk 11 mmap2 10 fstatfs64
[rsync]
1000004 lstat64 1000000 unlink 978 getdents64 327 mmap2 291 munmap 63 select 45 close 42 read
んー、rsync の方が余計なこといっぱいしてそうです。そのせいでしょうか。
rm と rsync のバージョンはこんな感じです。
% rm --version rm (GNU coreutils) 8.13 % rsync --version rsync version 3.0.9 protocol version 30
とくに結論はありません。興味がつきたのでここまで。