这2个函数是不是遍历搜索所有的inode来才能输出结果呢?如果不是,它们的时间复
杂度是跟什么有关的?
最近遇到一个问题,两台配置一样的服务器,一台上面ls,du,tar挂载在本地SAN的文
件系统的速度很慢,strace发现耗时主要在lstat和getdents64两个函数上面。
比较慢的系统(只取前5行)
# strace -c du -sh /mount_fs/var
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
97.33 9.450775 32 294108 lstat
2.65 0.257191 12 21333 getdents64
0.02 0.001481 0 19166 1 open
0.00 0.000393 0 28740 fstat
0.00 0.000355 0 19148 fchdir
正常的系统
# strace -c du -sh /mount_fs/var
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
91.67 1.977701 4 555066 lstat
8.25 0.177979 7 25069 getdents64
0.03 0.000569 0 32207 fstat
0.03 0.000546 0 21478 1 open
0.01 0.000293 0 21478 close
用dd测试过磁盘io速度,两边都是一样的。
先谢过了