Armazenando dados enormes no kernel do Linux

0

Eu tenho um Kernel Linux personalizado que imprime para o dmesg e syslog (usando printk) algumas informações adicionais sobre cada pacote MP-TCP recebido no sistema. As coisas funcionam perfeitamente, no entanto estou gerando uma enorme quantidade de dados (usando iperf tool) em torno de 2 Gbps de dados que correspondem a um número extremamente alto de pacotes. Por causa do printk, todas as minhas CPUs são 100% carregadas no meu sistema (eu tenho 4 CPUs). Estou preocupado que isso possa afetar o processamento de pacotes em meu sistema e cause problemas adicionais e latência. Então, a minha pergunta é que existe algum método alternativo para armazenar meus dados no kernel Liunx sem aumentar a carga em minhas CPUs?

Para dar um exemplo do tamanho dos dados, por 60 segundos de uma sessão iperf, o tamanho do '/ var / log / syslog é de cerca de 1,2 Gbytes.

Deixe-me acrescentar mais uma coisa, não preciso processar os dados reportados pelo Kernel Linux de forma online. Vou processá-los no modo offline.

    
por IoT 05.09.2017 / 15:06

1 resposta

2

Você provavelmente deve procurar em ftrace , a ferramenta interna de rastreamento de kernel do Linux. Por exemplo, este artigo do LWN ligeiramente desatualizado diz

Ftrace introduces a new form of printk() called trace_printk(). It can be used just like printk(), and can also be used in any context (interrupt code, NMI code, and scheduler code). What is nice about trace_printk() is that it does not output to the console. Instead it writes to the Ftrace ring buffer and can be read via the trace file. Writing into the ring buffer with trace_printk() only takes around a tenth of a microsecond or so.

For example you can add something like this to the kernel or module:

trace_printk("read foo %d out of bar %p\n", bar->foo, bar);

O kernel doc ftrace.txt tem os detalhes . No diretório /sys/kernel/debug/tracing/ , você pode definir o tamanho do buffer do anel de rastreamento no pseudo arquivo buffer_size_kb .

    
por 05.09.2017 / 16:25