eBPF の CPU アレイごとのデータはどこに保存されますか?

eBPF の CPU アレイごとのデータはどこに保存されますか?

私は次のコードに似たテストケースを持っていますhttps://github.com/xdp-project/xdp-tutorial/CPU ごとの配列に統計マップを維持し、統計を定期的に表示するユーザー空間コードです。

これを実行すると、ユーザー スペース コードには常にゼロが表示されます。eBPF カーネル コードを bpf_trace_printk でインストルメント化しましたが、マップに正しい値が設定されているようです。ユーザー コードはすべての可能な CPU を反復処理していますが、CPU ごとの配列スロットでは常にゼロが検出されます。

何が間違っているのか誰か教えてもらえますか?

私のテストケースはここ ; af_xdp_kern.cはeBPFコード、af_xdp_user.cはeBPFコードを駆動するユーザースペースコード、filter-xdp_stats.cは統計を表示するコードです。これらはすべてそのディレクトリの「make」でビルドされ、私が使用する実行スクリプトがあります。

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

マシン上の2つのネットワーク名前空間間でデータが転送されるユーザーコードとeBPFコードを実行します。実行中は、

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

統計情報が表示されるはずですが、実際にはゼロが表示されます。

私のテスト ケースは '1.0' BPF インターフェイスにコーディングされていますが、xdp-tutorial のコードはプレリリース BPF インターフェイスにコーディングされています。

私はUbuntu 22.04をuname -aで実行しています

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$

ご協力いただきありがとうございます!

答え1

統計表示アプリケーションは、ユーザーおよび eBPF アプリケーションと同じネットワーク名前空間で実行する必要があります ( の同じインスタンス内でも) ip netns exec

関連情報