我有一個帶有 elf 部分的函式的 ebpf xdp 程式
SEC("tracepoint/xdp/xdp_devmap_xmit")
- 我想在上面知道這是哪個內核函式的鉤子
- 是什么
tracepoint/xdp/xdp_devmap_xmit
所以問題是
上面的SECelf 部分是否使我的 ebpf 程式成為 XDP 程式?
所以如果它是真的,那么里面tracepoint/還有tracepoint/xdp/xdp_devmap_xmit其他可用的選項。我可以看到xdp里面顯然是可用的tracepoint/,tracepoint/[xdp]/xdp_dexmap_xmit顯然是可用的,并且那里有示例程式和 | 誰能解釋一下 tracepoint/ 中還有哪些其他選項可用?我可以在內核中為我的某些函式創建自定義跟蹤點嗎
uj5u.com熱心網友回復:
部分名稱指的是什么?
什么是tracepoint/xdp/xdp_devmap_xmit
tracepoint/xdp/xdp_devmap_xmit是此 BPF 程式的 ELF 部分的名稱。加載器(此處為 libbpf)將使用此部分名稱來了解它是哪種 BPF 程式型別,在這種情況下,將其附加到何處。
BPF 程式型別的部分名稱tracepoint采用以下格式:
tracepoint/<category>/<name>
name是跟蹤點本身的名稱。跟蹤點按類別組織。您可以使用 列出一個類別的所有跟蹤點perf list '<category>:*'。例如,對于 XDP:
$ sudo ./perf list 'xdp:*'
List of pre-defined events (to be used in -e):
xdp:mem_connect [Tracepoint event]
xdp:mem_disconnect [Tracepoint event]
xdp:mem_return_failed [Tracepoint event]
xdp:xdp_bulk_tx [Tracepoint event]
xdp:xdp_cpumap_enqueue [Tracepoint event]
xdp:xdp_cpumap_kthread [Tracepoint event]
xdp:xdp_devmap_xmit [Tracepoint event]
xdp:xdp_exception [Tracepoint event]
xdp:xdp_redirect [Tracepoint event]
xdp:xdp_redirect_err [Tracepoint event]
xdp:xdp_redirect_map [Tracepoint event]
xdp:xdp_redirect_map_err [Tracepoint event]
這個跟蹤點是什么?
我想在上面知道這是哪個內核函式的鉤子
您可以按如下方式獲取有關該跟蹤點的資訊:
$ cat /sys/kernel/debug/tracing/events/xdp/xdp_devmap_xmit/format
name: xdp_devmap_xmit
ID: 467
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:int map_id; offset:8; size:4; signed:1;
field:u32 act; offset:12; size:4; signed:0;
field:u32 map_index; offset:16; size:4; signed:0;
field:int drops; offset:20; size:4; signed:1;
field:int sent; offset:24; size:4; signed:1;
field:int from_ifindex; offset:28; size:4; signed:1;
field:int to_ifindex; offset:32; size:4; signed:1;
field:int err; offset:36; size:4; signed:1;
print fmt: "ndo_xdp_xmit map_id=%d map_index=%d action=%s sent=%d drops=%d from_ifindex=%d to_ifindex=%d err=%d", REC->map_id, REC->map_index, __print_symbolic(REC->act, { 0, "ABORTED" }, { 1, "DROP" }, { 2, "PASS" }, { 3, "TX" }, { 4, "REDIRECT" }, { -1, ((void *)0) }), REC->sent, REC->drops, REC->from_ifindex, REC->to_ifindex, REC->err
這個特定的跟蹤點將跟蹤 function 的執行ndo_xdp_xmit。
XDP的鏈接是什么?
上面的 SEC elf 部分是否使我的 ebpf 程式成為 XDP 程式?
不,這個部分名稱使您的 BPF 程式成為跟蹤點程式。這是一個跟蹤點程式,將跟蹤 XDP 的接收鉤子的執行。
如何跟蹤內核函式?
我可以為內核中的某些函式創建自定義跟蹤點嗎
跟蹤點只為內核中的特定點定義(例如上面的 XDP 接收掛鉤)。為了能夠跟蹤大多數內核函式,您可能需要使用 kprobes BPF 程式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/416409.html
標籤:
上一篇:C中動態變化的運算子
