Comandante da meia-noite, por vezes, muito lento

0

Estou usando o midnight commander com o Cygwin 64 bit no Windows 10 de 64 bits.

Depois de mudar para uma nova máquina e uma reinstalação limpa do windows e cygwin, meu comandante da meia-noite começou a ficar muito lento de vez em quando. Reiniciar ajuda, mas isso acontece com muita frequência para que isso seja uma solução viável (reiniciar não ajuda) .

Eu não tenho idéia do que poderia ser o motivo desses soluços. O MC normalmente funciona bem: as teclas de seta funcionam bem, a visualização e a edição são instantâneas, mas uma coisa leva até 10 segundos - mudar de diretório. Pesquisando em arquivos tem um atraso semelhante, mas apenas uma vez (ou seja, não em todos os chdir que poderia ter feito). No uso não-mc do cygwin, esse problema não acontece.

O gerenciador de tarefas não exibe nenhum uso anormalmente alto de CPU ou memória em nenhum processo. Eu tenho cygserver em execução, usando bash como meu shell e não tenho configurações de PS1 extravagantes, meu $CYGWIN é apenas winsymlinks:native .

Aqui está um log strace , talvez alguém tenha uma ideia do que deu errado? link
(gravado com LOCALE=C strace -q -o /tmp/mc-log mc /tmp )

Na sessão gravada, tenho:

  • iniciou o mc no diretório /tmp
  • inserido /tmp/NVIDIA Corporation directory
  • voltou para cima ( .. )
  • inserido /tmp/mc-chanibal directory
  • voltou para cima ( .. )
  • encerrado com F10

Informações adicionais de tempo:

Um achado de todos os diretórios no meu $HOME leva 4,6 segundos:

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

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

Um ls -al em todos esses diretórios levou muito tempo, mas a média foi bastante baixa:

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

O tempo médio para fazer um ls -al é 0.020s, min é 0.017, max é 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

Com a sobrecarga de tempo de medição, a média é de 16m34s / 19919 = 0,499s por chamada para ls -al , dois awk s e uma iteração de find . Não muito bom, mas não quatro segundos.

A normalização com cygpath não demora:

$ 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

EDIT: Adicionado este problema ao trac do MC

    
por Krzysztof Bociurko 06.07.2016 / 16:06

1 resposta

0

Eu encontrei o problema e decidi que é o Windows 10 ou falha de hardware com defeito, não MC. O comando da meia-noite dispara esse problema, mas o faz usando o sistema operacional de maneiras esperadas, então não é culpa dele.

Para ser exato, o problema é que a enumeração de dispositivos leva tempo (exatamente 4 ou 5 segundos no Windows powershell ou 4 segundos no Cygwin). A correção no meu caso foi desativar a unidade de DVD que estava demorando. Detalhes sobre o tópico da lista de discussão do Cygwin .

    
por 26.07.2016 / 13:03