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:
-
Executar:
sudo trace-cmd record -e syscalls:* -f "common_pid==<pid of vim>" \ -e sched:sched_switch -e sched:sched_wakeup -s 1000000
- Reproduzir o congelamento
- Parar de gravar com Ctrl-c
Para analisar:
-
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
- 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.