Vim congela por um curto período de tempo

2

Quando eu trabalho no vim, acontece (frequentemente) que ele congele por um segundo ou dois ... depois disso, ele volta a uma vida normal, executando tudo o que eu digitei quando estava congelado

Eu vi esse comportamento em duas máquinas diferentes com o Ubuntu, uma após uma nova instalação. Nenhum plug-in adicional nem configuração sofisticada.

Alguma ideia?

    
por Jakub M. 22.04.2012 / 20:34

2 respostas

2

Para mim, o congelamento acontece quando o vim está chamando o fsync para garantir que os dados gravados no disco não sejam armazenados em cache para evitar perdas de dados. Opção para melhorar a situação:

  • Compre um HD melhor com menor latência.
  • Corrija o vim para usar o thread de E / S ou E / S assíncrono para ocultar a latência

Não sei se o seu problema é o problema do fsync. Você pode tentar verificar isso com ftrace.

Para gravar o rastreio:

  1. Executar:

    sudo trace-cmd record -e syscalls:* -f "common_pid==<pid of vim>" \
      -e sched:sched_switch -e sched:sched_wakeup -s 1000000
    
  2. Reproduzir o congelamento
  3. Parar de gravar com Ctrl-c

Para analisar:

  1. Executar:

    trace-cmd report -F "syscalls : common_pid == <pid of vim>" | sed 's/://' \
     | awk '{time = 0; if ($4 == "sys_exit:") time=$3-prev_time; prev_time=$3; \
     printf "%6.6f %6.6f %s %s %s %s %s\n", time, $3, $4, $5, $6, $7, $8}' \
     | sort -n
    
  2. A partir da lista, qualquer syscalls, exceto a seleção ou pesquisa, deve ser curto. Você pode verificar com "kernelshark" gui o que aconteceu durante o syscall problemático. A segunda coluna na saída do awk é o registro de data e hora que corresponde ao final do syscall no rastreio.

Seu kernel precisa ser compilado com CONFIG_FTRACE_SYSCALLS. O Ubuntu habilitou isso, mas algumas outras distribuições podem estar faltando.

    
por 02.06.2012 / 20:09
1

Verifique se a função autoread está desativada. Isso pode causar congelamentos momentâneos semelhantes ao que você está descrevendo.

Você também pode colocar o arquivo .swp em um diretório diferente, em vez de onde o arquivo está sendo editado. Depois de abrir o arquivo no vim, mas antes de fazer qualquer edição, execute

:set dir=/tmp
:vi

Se isso funcionar, você pode padronizar o local do arquivo .swp adicionando isso ao seu ~/.vimrc

set dir=/tmp
    
por 23.04.2012 / 18:58

Tags