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
.