Como usar pontos de rastreio no Kernel Module

0

Eu comecei a aprender essas coisas recentemente. Sobre este assunto, me deparei com muitos recursos sobre kprobes, BPF, eBPF, tracepoints e perf.

Eu queria testar alguns eventos irq no kernel (antes que ele chegasse ao driver de dispositivo). Assim, criei um evento trace no kernel na função do_IRQ ().

Para verificar isso, eu tentei o seguinte trecho com o eBPF.

...
TRACEPOINT_PROBE(irq_vectors, vector_irq_rcv) {
    u64 __pid_tgid = bpf_get_current_pid_tgid();
    u32 __pid      = __pid_tgid;        // lower 32 bits
    u32 __tgid     = __pid_tgid >> 32;  // upper 32 bits


    if (!(args->irq==24)) return 0;

    bpf_trace_printk("IRQ %d encountered; Vector: %d \n", args->irq, args->vector);
    return 0;
}
...

Aqui, estou ouvindo eventos de IRQ em um determinado número de IRQ. Isso funciona bem para mim, por enquanto.

Agora, eu estava tentando anexar este ponto de rastreio a um módulo do kernel (da mesma maneira que nós conectamos um kprobe no módulo do kernel). É mesmo possível? No momento, usei o perf para isso, mas isso criou um pouco de instabilidade. Como eu estava avaliando algumas tarefas sensíveis ao jitter, eu esperava poder usar este ponto de rastreio no módulo Kernel.

Gostaria de receber sugestões ou sugestões sobre este assunto.

Obrigado Cooshal.

    
por Cooshal 02.05.2018 / 01:03

0 respostas