Wohin gehen meine eBPF-Daten pro CPU-Array?

Wohin gehen meine eBPF-Daten pro CPU-Array?

Ich habe einen Testfall ähnlich dem Code inhttps://github.com/xdp-project/xdp-tutorial/das eine Statistikkarte in einem Array pro CPU verwaltet, und einen Benutzerbereichscode, der die Statistiken regelmäßig anzeigt.

Wenn ich dies ausführe, zeigt der Benutzerbereichscode immer Nullen an. Ich habe meinen eBPF-Kernelcode mit bpf_trace_printk instrumentiert und er scheint die richtigen Werte in die Karte einzutragen. Der Benutzercode iteriert über alle möglichen CPUs, findet aber immer Nullen in den Array-Slots pro CPU.

Kann mir jemand sagen, was schief läuft?

Mein Testfall istHier ; af_xdp_kern.c ist der eBPF-Code, af_xdp_user.c ist der Userspace-Code, der den eBPF-Code steuert, und filter-xdp_stats.c ist der Code, der die Statistiken anzeigen soll. Das Ganze wird mit „make“ in diesem Verzeichnis erstellt, und es gibt ein Run-Skript, das ich mit verwende

tjcw@r28b29-n10:~/workspace/bpf-examples/AF_XDP-filter/netperf-namespace$ sudo FILTER=af_xdp_kern ./run.sh

um den Benutzercode und den eBPF-Code auszuführen, wobei Daten zwischen 2 Netzwerk-Namespaces auf dem Computer übertragen werden. Während der Ausführung

tjcw@r28b29-n10:~/workspace/bpf-examples/AF_XDP-filter$ sudo ./filter-xdp_stats

sollte Statistiken anzeigen, zeigt aber tatsächlich Nullen an.

Mein Testfall ist für die BPF-Schnittstelle „1.0“ codiert, während der Code im xdp-tutorial für die BPF-Schnittstelle der Vorabversion codiert ist.

Ich verwende Ubuntu 22.04 mit uname -a und

tjcw@r28b29-n10:~/workspace/bpf-examples/AF_XDP-filter$ uname -a
Linux r28b29-n10 5.15.0-48-generic #54-Ubuntu SMP Fri Aug 26 13:26:29 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
tjcw@r28b29-n10:~/workspace/bpf-examples/AF_XDP-filter$

Vielen Dank für Ihre Hilfe!

Antwort1

Es ist erforderlich, die Anwendung zur Statistikanzeige im selben Netzwerk-Namespace wie der Benutzer und die eBPF-Anwendung auszuführen; sogar in derselben Instanz von ip netns exec.

verwandte Informationen