【发布时间】:2017-02-07 18:27:50
【问题描述】:
我有一个 rsync 正在运行一个无操作(所有文件都已经存在)目录复制操作到网络安装的文件系统。
因为所有文件都已经存在,rsync 唯一要做的就是lstat() syscalls。
如果我strace -c这个,我会得到这个:
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00 0.076780 30 2524 lstat
------ ----------- ----------- --------- --------- ----------------
100.00 0.076780 2524 total
real 0m5.451s
但如果我 strace -T(显示每个系统调用的时间),我会得到:
lstat("file1", {st_mode=S_IFREG|0644, st_size=32820, ...}) = 0 <0.005523>
lstat("file2", {st_mode=S_IFREG|0644, st_size=20816, ...}) = 0 <0.001529>
lstat("file3", {st_mode=S_IFREG|0644, st_size=1828312, ...}) = 0 <0.001991>
lstat("file4", {st_mode=S_IFREG|0644, st_size=1823258, ...}) = 0 <0.001326>
lstat("file5", {st_mode=S_IFREG|0644, st_size=32820, ...}) = 0 <0.006562>
lstat("file6", {st_mode=S_IFREG|0644, st_size=22578, ...}) = 0 <0.002151>
lstat("file7", {st_mode=S_IFREG|0644, st_size=32835, ...}) = 0 <0.001705>
lstat("file8", {st_mode=S_IFREG|0644, st_size=25493, ...}) = 0 <0.001492>
lstat("file9", {st_mode=S_IFREG|0644, st_size=1783930, ...}) = 0 <0.001974>
时代彻底结束了!
-c 声称每个lstat 大约需要30 usecs/call,而-T 显示大约2 毫秒/调用。
2 毫秒是有道理的,这是网络挂载的 ping 速度的顺序,但 30 微秒根本不可能。
为什么usecs/call 列中的值是假的?是我误会了吗?
【问题讨论】: