Как использовать точки трассировки в модуле ядра - PullRequest
0 голосов
/ 02 мая 2018

Я начал изучать эти вещи недавно. Что касается этого вопроса, я натолкнулся на множество ресурсов, касающихся kprobes, BPF, eBPF, точек трассировки и perf.

Я хотел протестировать некоторые события irq в ядре (до того, как оно поступило в драйвер устройства). Таким образом, я создал событие трассировки в ядре в функции do_IRQ ().

Я объявил свою точку трассировки в Ядре как:

TRACE_EVENT(vector_irq_rcv,

        TP_PROTO(unsigned int vector, unsigned int irq),

        TP_ARGS(vector, irq),

        TP_STRUCT__entry(
                __field(    unsigned int, vector    )
                __field(    unsigned int, irq       )
        ),

        TP_fast_assign(
                __entry->vector     =   vector;
                __entry->irq        =   irq;
        ),

        TP_printk("irq=%u cpu=%u",
                __entry->irq, __entry->vector)
);

Чтобы проверить это, я попробовал следующий фрагмент с eBPF.

...

bpf_text = """
#include <linux/netdevice.h>
#include <uapi/linux/ptrace.h>

typedef struct my_stats {
    u32 irq;
    u32 ts;
} my_stat;

BPF_HASH(irq_rcv_stats, u32, my_stat);

TRACEPOINT_PROBE(irq_vectors, vector_irq_rcv) {

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

    u32 pid = bpf_get_current_pid_tgid();
    my_stat val = {};
    val.ts = bpf_ktime_get_ns();
    val.irq = args->irq;
    irq_rcv_stats.update(&pid, &val);

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

Здесь я прослушиваю события IRQ для определенного номера IRQ. Это хорошо работает для меня, в настоящее время.

Теперь я пытался присоединить эту точку трассировки в модуле ядра (так же, как мы присоединяем kprobe в модуле ядра). Это вообще возможно? На данный момент я использовал для этого perf, но это создало некоторую дрожь. Поскольку я оценивал некоторые задачи, чувствительные к дрожанию, я надеялся, что смогу использовать эту точку трассировки в модуле ядра.

Буду признателен за любые предложения или предложения по этому вопросу.

Спасибо, Cooshal.

...