Eu uso uma placa xilinx chamada xilinx_zynq_zcu102. E eu uso o yocto para gerar o sistema para isso. Hoje, quando eu tento executar "perf top -g", a porta serial de saída da seguinte mensagem e, em seguida, eu não posso introduzir nada através dele, também nada de saída.
perf: interrupt took too long (6152 > 6136), lowering
kernel.perf_event_max_sample_rate to 32500
perf: interrupt took too long (7728 > 7690), lowering
kernel.perf_event_max_sample_rate to 25750
perf: interrupt took too long (9678 > 9660), lowering
kernel.perf_event_max_sample_rate to 20500
versão do kernel: Linux xilinx-zynqmp 4.12.24-yocto-standard #1 SMP PREEMPT Mon Jul 2 13:00:38 CST 2018 aarch64 aarch64 aarch64 GNU/Linux
Após a interrupção, a conexão ssh também é interrompida e a nova conexão não pode ser estabelecida. Mas eu descobri que ainda posso pingar, e isso existia na lista de clientes do roteador.
O mais estranho é que, se eu executo o "perf top", que não tem a opção "-g", ele funciona bem. E eu compilei o sistema para uma placa de braço de 32 bits e placa intel x86-64 com a mesma versão do yocto, ambos funcionam bem. Então eu acho que só arm64 sofre isso.
Eu primeiro suspeitei que o kernel pode estar bloqueado em algum loop, então eu abri Detect Hard and Soft Lockups
e Detect Hung Tasks
em Kernel hacking
. Esperei por muito tempo após o sistema desligar, mas nada foi emitido.
Então eu encontrei algo lá . Alguém diz que reduzir a taxa de amostragem pode ajudar. Então eu corro o seguinte comando.
echo 10 > /proc/sys/kernel/perf_event_max_sample_rate
Funcionou. O sistema não travou depois de executar "perf top -g". Mas isso obviamente não é uma solução. Porque perf deve ter reduzido a taxa de amostragem automaticamente. Mas de alguma forma desligou.
Gostaria de saber se existe algum outro método para depurá-lo. Porque eu não consigo obter nenhuma informação de log sobre o problema. Qualquer sugestão seria útil.
Obrigado.