午夜指挥官有时很慢

午夜指挥官有时很慢

我在 Windows 10 64 位上将午夜指挥官与 Cygwin 64 位一起使用。

在转移到新机器并重新全新安装 Windows 和 cygwin 后,我的午夜指挥官开始时不时地变得非常滞后。重新启动会有所帮助,但这种情况发生得太频繁,因此不是一个可行的解决方案 (重新启动没有帮助)

我不知道这些故障的原因是什么。MC 通常工作正常:箭头键工作正常,查看和编辑是即时的,但有一件事需要长达 10 秒钟 - 更改目录。在文件中搜索也有类似的延迟,但只有一次(即不是每次chdir都可以)。在非 mc cygwin 使用中不会发生此问题。

任务管理器未显示任何进程的 CPU 或内存使用率异常高。我已经cygserver运行,使用bash作为我的 shell,并且没有花哨的PS1设置,我$CYGWIN的只有winsymlinks:native

这是一个strace日志,也许有人知道哪里出了问题? http://pastebin.pl/view/9b839815
(录制于LOCALE=C strace -q -o /tmp/mc-log mc /tmp

在录音中我有:

  • /tmp在目录中启动 mc
  • 进入/tmp/NVIDIA Corporation目录
  • 又回到了(..
  • 进入/tmp/mc-chanibal目录
  • 又回到了(..
  • 按 F10 退出

其他时间信息:

查找我的所有目录$HOME需要 4.6 秒:

$ time find ~ -type d | wc -l
(snipped two directories without permissions)
19919

real    0m4.626s
user    0m0.796s
sys     0m3.765s

所有ls -al这些目录都花费了大量时间,但平均值相当低:

time (find ~ -type d | while read f; do { time ls -al $f; } \
   |& awk '$1 == "real" { printf $2 }'                      \
   | awk -Fm '{printf( "%2.4f", $1 * 60 + $2 )}';           \
   echo -e "\t$f"; done                                     \
) >/tmp/ls-time-log ;
(snipped two dirs without permissions)

real    12m21.870s
user    7m4.576s
sys     16m34.446s

执行一项操作的平均时间ls -al为 0.020 秒,最小值为 0.017,最大值为 0.154:

$ awk 'BEGIN { sum=0; min=9999; max=0;  minf=""; maxf=""; }     \
      $1 { sum += $1;                                           \
           if(min > $1) { min = $1; minf = $2; };               \
           if(max < $1) { max = $1; maxf = $2; } }              \
      END { print "avg: " sum/NR; print "min: " min " "         \
          minf; print "max: " max " " maxf }' </tmp/ls-time-log
avg: 0.0204292
min: 0.0170 /cygdrive/c/Users/chanibal/AppData/Roaming/OculusClient/Local
max: 0.1540 /cygdrive/c/Users/chanibal/AppData/Local/Android/sdk/platforms/android-23/data/res/drawable-hdpi

加上测量时间的开销,平均每次调用 需要 16m34s/19919 = 0.499s ,每次迭代需要ls -al2 s 。不是很好,但也不是四秒。awkfind


标准化cygpath不需要很长时间:

$ time strace cygpath -aw /tmp/NVIDIA\ Corporation/ | grep normalize_posix_path
  116   11175 [main] cygpath 3524 normalize_posix_path: src /tmp/NVIDIA Corporation/
   20   11195 [main] cygpath 3524 normalize_posix_path: /tmp/NVIDIA Corporation/ = normalize_posix_path (/tmp/NVIDIA Corporation/)

real    0m0.034s
user    0m0.015s
sys     0m0.000s

编辑:将此问题添加到MC 轨迹

答案1

我发现了这个问题,并确定是 Windows 10 或硬件故障,而不是 MC。Midnight commander 确实会触发此问题,但它是通过以预期的方式使用操作系统来实现的,所以这不是它的错。

确切地说,问题是枚举设备需要时间(在 Windows powershell 中正好是 4 或 5 秒,在 Cygwin 中正好是 4 秒)。我的情况的解决办法是禁用需要时间的 DVD 驱动器。详情请见Cygwin 邮件列表主题

相关内容