Являются ли точки трассировки излишними в ядре Linux после того, как kprobes поддерживает ftrace?

Каковы варианты использования событий трассировки, когда поддержка событий kprobe для ftrace доступна в ядре Linux? Кажется, что все, что можно сделать с помощью «событий точки трассировки», возможно с помощью событий kprobe, поскольку можно настроить событие kprobe в той же точке, где доступно событие точки трассировки.

Я что-то упускаю?


person gabhijit    schedule 10.08.2017    source источник


Ответы (1)


Поскольку kprobes отслеживает произвольные функции, основанные на них инструменты могут легко выйти из одной версии Linux в другую. Например, можно изменить имя функции или один из ее аргументов или удалить всю функцию. Подобные изменения происходят часто и могут сломать инструменты на основе kprobe.

И наоборот, точки трассировки более стабильны. Они должны оставаться в основном одинаковыми и предоставлять ту же информацию. Кроме того, они задокументированы; вы можете найти тип и расположение информации, предоставляемой точками трассировки, в /sys/kernel/debug/tracing:

# cat /sys/kernel/debug/tracing/events/skb/kfree_skb/format 
name: kfree_skb
ID: 1122
format:
    field:unsigned short common_type;   offset:0;   size:2; signed:0;
    field:unsigned char common_flags;   offset:2;   size:1; signed:0;
    field:unsigned char common_preempt_count;   offset:3;   size:1; signed:0;
    field:int common_pid;   offset:4;   size:4; signed:1;

    field:void * skbaddr;   offset:8;   size:8; signed:0;
    field:void * location;  offset:16;  size:8; signed:0;
    field:unsigned short protocol;  offset:24;  size:2; signed:0;

print fmt: "skbaddr=%p protocol=%u location=%p", REC->skbaddr, REC->protocol, REC->location
person pchaigno    schedule 31.10.2017