Como evitar o overflowing do buffer do anel printk do kernel?

1

Estou tentando depurar um driver do Linux e uma parte específica do código está se comportando de maneira muito estranha. Para ver o que está acontecendo, preenchai o código com instruções printk para poder ver exatamente o que as variáveis em que estou interessado fazem quando o código é executado. Infelizmente, ao imprimir o buffer de anel com dmesg , muitas linhas parecem estar perdidas aleatoriamente. O Google me diz que isso é porque estou escrevendo muitos dados no buffer de toques de uma só vez. Eu tentei aumentar o tamanho do buffer de anel para o seu máximo (1 < 21) e tentei inserir o udelays para retardar a gravação, mas ainda estou tendo o mesmo problema.

O que mais posso experimentar?

    
por Shum 01.02.2013 / 07:22

1 resposta

1

Até onde eu sei, klogd usa um read() de bloqueio para ler /proc/kmsg . Pode ajudar se você aumentar sua prioridade via renice. Você também pode tentar gravar os logs do kernel em um ramfs / tmpfs para economizar alguma sobrecarga de disco, seja por meio de syslog ou com a opção klogd -f para gravar diretamente em um arquivo.

Caso contrário, o plano B é ftrace e trace_printk() : link

    
por 01.02.2013 / 11:24