在 cifs mount strace 上调试缓慢的 ls 可以使其快速运行

在 cifs mount strace 上调试缓慢的 ls 可以使其快速运行

我有一台安装了 cifs 共享(Azure 存储文件)的服务器。有时 ls 返回速度很慢(20 秒)。经过一番调试,我发现:

  • ls /data/some/symlink/directory20 秒后返回
  • 进入 /data/some/symlink/ 目录然后执行ls .需要 0.02 秒
  • 这样做ls /data/original/location/that/symlinkpoints/to/directory也会返回亚秒

ls 的 20 秒返回时间似乎受目录中文件数量的影响。目录越大,所需时间越长。

这让我觉得这与 ls 处理符号链接的方式有关。好像它必须为每个文件解析它之类的。

为了调试这个问题,我想通过 strace 运行 ls 来看看是否能看到不同情况下系统调用的差异。但是如果我运行

strace ls /data/some/symlink/directory it also returns sub second suddenly.

关于为什么通过 strace 运行可以使其运行得更快以及如何进一步调试,有什么想法吗?

答案1

结果是 ls /home/someuser/.bashrc 的别名:alias ls='ls --color=auto'

--color=auto 选项导致 ls 在我的终端中返回颜色,但在 strace 中不返回。为了支持颜色,它需要统计文件。

相关内容