내 eBPF CPU당 어레이 데이터는 어디로 가나요?

내 eBPF CPU당 어레이 데이터는 어디로 가나요?

코드와 비슷한 테스트 케이스가 있습니다.https://github.com/xdp-project/xdp-tutorial/CPU별 배열로 통계 맵을 유지 관리하는 코드와 통계를 주기적으로 표시하는 사용자 공간 코드입니다.

이것을 실행하면 사용자 공간 코드가 항상 0으로 표시됩니다. bpf_trace_printk를 사용하여 eBPF 커널 코드를 계측했는데 올바른 값을 맵에 입력하는 것으로 보입니다. 사용자 코드는 가능한 모든 CPU를 반복하지만 CPU당 배열 슬롯에서는 항상 0을 찾습니다.

아무도 무슨 일이 일어나고 있는지 말해 줄 수 있습니까?

내 테스트 케이스는여기 ; 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

통계를 표시해야 하지만 실제로는 0을 표시합니다.

내 테스트 사례는 '1.0' BPF 인터페이스로 코딩되었으며, 여기서 xdp-tutorial의 코드는 시험판 BPF 인터페이스로 코딩되었습니다.

uname -a를 사용하여 Ubuntu 22.04를 실행 중입니다.

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.

관련 정보