Являются ли точки трассировки избыточными в ядре Linux после поддержки ktrabes для ftrace?
Каковы случаи использования событий tracepoint, когда в ядре Linux доступна поддержка событий kprobe для ftrace? Кажется, что все, что можно сделать с помощью "событий трассировки", возможно с помощью событий kprobe, поскольку можно установить событие kprobe в той же точке, где доступно событие трассировки.
Я что-то пропустил?
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