Полуночный командир иногда очень медленный

707
Krzysztof Bociurko

Я использую полночь Commander с Cygwin 64 бит на Windows 10 64 бит.

После перехода на новую машину и чистой переустановки Windows и Cygwin мой полуночный командир время от времени начинал очень тормозить. Перезапуск помогает, но это случается слишком часто, чтобы это было жизнеспособным решением. (перезапуск не помогает) .

Я понятия не имею, что может быть причиной этих икоты. MC нормально работает: нажатия на стрелки работают хорошо, просмотр и редактирование выполняются мгновенно, но одна вещь занимает до 10 секунд - смена каталогов. Поиск в файлах имеет аналогичную задержку, но только один раз (то есть не во всех, которые chdirон мог бы сделать). В не-mc Cygwin эта проблема не возникает.

Диспетчер задач не показывает ненормально высокую загрузку ЦП или памяти ни в одном процессе. Я cygserverбегу, использую в bashкачестве оболочки и не имею необычных PS1настроек, $CYGWINтолько мой winsymlinks:native.

Вот straceжурнал, может у кого-то есть идея, что пошло не так? http://pastebin.pl/view/9b839815
(записано с LOCALE=C strace -q -o /tmp/mc-log mc /tmp)

В записанном сеансе у меня есть:

  • запустил mc в /tmpкаталоге
  • введенный /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 ''; \ 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 

С учетом накладных расходов на измерение времени оно составляет в среднем 16 м34 с / 19919 = 0,499 с на вызов ls -al, 2 awkс и итерацию find. Не очень хорошо, но не четыре секунды.


Нормализация с помощью 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

0
Это доменный компьютер или отдельный? matzeri 8 лет назад 0
`$ grep normalize_posix_path 9b839815.strace | awk '' `показывает 4-секундный тайм-аут при входе в некоторые каталоги. Какой-нибудь необычный SID в файлах ACL? Можете ли вы сравнить время запуска ls -l в тех же каталогах? matzeri 8 лет назад 0
@matzeri: это отдельная установка Windows, без сетевых дисков или контроллера домена. Krzysztof Bociurko 8 лет назад 0
@matzeri: время `ls -al` для каталога или его содержимого незначительно (около 0,021 с) Krzysztof Bociurko 8 лет назад 0
@matzeri: добавлено много подробных вопросов о времени Krzysztof Bociurko 8 лет назад 0
Ничего очевидного по срокам. Можете ли вы проверить, есть ли проблема в `mc -u`? Если нет, то проблема заключается во взаимодействии с подоболочкой. matzeri 8 лет назад 0
Давайте [продолжим это обсуждение в чате] (http://chat.stackexchange.com/rooms/42165/discussion-between-matzeri-and-chanibal). matzeri 8 лет назад 0

1 ответ на вопрос

0
Krzysztof Bociurko

Я нашел проблему и решил, что это Windows 10 или неисправная аппаратная ошибка, а не MC. Midnight Commander действительно вызывает эту проблему, но делает это, используя ОС ожидаемым образом, так что это не его вина.

Точнее говоря, проблема в том, что перечисление устройств занимает время (ровно 4 или 5 секунд в Windows PowerShell или 4 секунды в Cygwin). Исправление в моем случае состояло в том, чтобы отключить привод DVD, который занимал время. Подробности в ветке списка рассылки Cygwin .