Para onde vão meus dados eBPF por matriz de CPU?

Para onde vão meus dados eBPF por matriz de CPU?

Eu tenho um caso de teste semelhante ao código emhttps://github.com/xdp-project/xdp-tutorial/que mantém um mapa estatístico em uma matriz por CPU e código de espaço do usuário que exibe as estatísticas periodicamente.

Quando executo isso, o código do espaço do usuário sempre exibe zeros. Instrumentei meu código do kernel eBPF com bpf_trace_printk e parece estar colocando os valores corretos no mapa. O código do usuário está iterando em todas as CPUs possíveis, mas sempre encontra zeros nos slots da matriz por CPU.

Alguém pode me dizer o que está errado?

Meu caso de teste éaqui ; af_xdp_kern.c é o código eBPF, af_xdp_user.c é o código do espaço do usuário que orienta o código eBPF e filter-xdp_stats.c é o código que deve exibir as estatísticas. Tudo é compilado com 'make' nesse diretório, e há um script de execução que eu uso com

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

para executar o código do usuário e o código eBPF com os dados sendo transferidos entre 2 namespaces de rede na máquina. Enquanto estiver em execução,

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

deve exibir estatísticas, mas na verdade exibe zeros.

Meu caso de teste é codificado para a interface BPF '1.0', onde o código no xdp-tutorial é codificado para a interface BPF de pré-lançamento.

Estou executando o Ubuntu 22.04 com uname -a dando

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$

Obrigado por toda a ajuda que você pode dar!

Responder1

É necessário executar a aplicação de exibição de estatísticas no mesmo namespace de rede do usuário e da aplicação eBPF; mesmo na mesma instância de ip netns exec.

informação relacionada