2023-05-19 12:11:39

by Zhouyi Zhou

[permalink] [raw]
Subject: a small question about bpftool struct_ops

Dear developers:
I compiled bpftool and bpf tests in mainline (2d1bcbc6cd70),
but when I invoke:
bpftool struct_ops register bpf_cubic.bpf.o

the command line fail with:
libbpf: struct_ops init_kern: struct tcp_congestion_ops data is not
found in struct bpf_struct_ops_tcp_congestion_ops
libbpf: failed to load object 'bpf_cubic.bpf.o'

The host OS I used to compile the kernel and bpf is Ubuntu 23.04, the
guest OS that I run bpftool is Ubuntu 22.04.
I have stumbled on this for several days, could you help me by guidance my way?

Thanks in advance
Zhouyi


2023-05-19 19:10:09

by Martin KaFai Lau

[permalink] [raw]
Subject: Re: a small question about bpftool struct_ops

On 5/19/23 5:07 AM, Zhouyi Zhou wrote:
> Dear developers:
> I compiled bpftool and bpf tests in mainline (2d1bcbc6cd70),
> but when I invoke:
> bpftool struct_ops register bpf_cubic.bpf.o
>
> the command line fail with:
> libbpf: struct_ops init_kern: struct tcp_congestion_ops data is not
> found in struct bpf_struct_ops_tcp_congestion_ops

At the machine trying to register the bpf_cubic, please dump the vmlinux btf and
search for bpf_struct_ops_tcp_congestion_ops and paste it here:

For example:
#> bpftool btf dump file /sys/kernel/btf/vmlinux

...

[74578] STRUCT 'bpf_struct_ops_tcp_congestion_ops' size=256 vlen=3
'refcnt' type_id=145 bits_offset=0
'state' type_id=74569 bits_offset=32
'data' type_id=6241 bits_offset=512


2023-05-19 23:54:49

by Zhouyi Zhou

[permalink] [raw]
Subject: Re: a small question about bpftool struct_ops

Thank you for responding so quickly ;-)

On Sat, May 20, 2023 at 3:01 AM Martin KaFai Lau <[email protected]> wrote:
>
> On 5/19/23 5:07 AM, Zhouyi Zhou wrote:
> > Dear developers:
> > I compiled bpftool and bpf tests in mainline (2d1bcbc6cd70),
> > but when I invoke:
> > bpftool struct_ops register bpf_cubic.bpf.o
> >
> > the command line fail with:
> > libbpf: struct_ops init_kern: struct tcp_congestion_ops data is not
> > found in struct bpf_struct_ops_tcp_congestion_ops
>
> At the machine trying to register the bpf_cubic, please dump the vmlinux btf and
> search for bpf_struct_ops_tcp_congestion_ops and paste it here:
>
> For example:
> #> bpftool btf dump file /sys/kernel/btf/vmlinux
>
> ...
>
> [74578] STRUCT 'bpf_struct_ops_tcp_congestion_ops' size=256 vlen=3
> 'refcnt' type_id=145 bits_offset=0
> 'state' type_id=74569 bits_offset=32
> 'data' type_id=6241 bits_offset=512
OK
[214398] STRUCT 'bpf_struct_ops_tcp_congestion_ops' size=256 vlen=3
'refcnt' type_id=298 bits_offset=0
'state' type_id=214224 bits_offset=32
'data' type_id=213704 bits_offset=512

Please tell me if I could provide any further information.

You are of great help

Thank you very much
Zhouyi
>

2023-05-21 08:53:03

by Zhouyi Zhou

[permalink] [raw]
Subject: Re: a small question about bpftool struct_ops

Hi

On Sat, May 20, 2023 at 7:37 AM Zhouyi Zhou <[email protected]> wrote:
>
> Thank you for responding so quickly ;-)
>
> On Sat, May 20, 2023 at 3:01 AM Martin KaFai Lau <[email protected]> wrote:
> >
> > On 5/19/23 5:07 AM, Zhouyi Zhou wrote:
> > > Dear developers:
> > > I compiled bpftool and bpf tests in mainline (2d1bcbc6cd70),
> > > but when I invoke:
> > > bpftool struct_ops register bpf_cubic.bpf.o
> > >
> > > the command line fail with:
> > > libbpf: struct_ops init_kern: struct tcp_congestion_ops data is not
> > > found in struct bpf_struct_ops_tcp_congestion_ops
> >
> > At the machine trying to register the bpf_cubic, please dump the vmlinux btf and
> > search for bpf_struct_ops_tcp_congestion_ops and paste it here:
> >
> > For example:
> > #> bpftool btf dump file /sys/kernel/btf/vmlinux
> >
> > ...
> >
> > [74578] STRUCT 'bpf_struct_ops_tcp_congestion_ops' size=256 vlen=3
> > 'refcnt' type_id=145 bits_offset=0
> > 'state' type_id=74569 bits_offset=32
> > 'data' type_id=6241 bits_offset=512
> OK
> [214398] STRUCT 'bpf_struct_ops_tcp_congestion_ops' size=256 vlen=3
> 'refcnt' type_id=298 bits_offset=0
> 'state' type_id=214224 bits_offset=32
> 'data' type_id=213704 bits_offset=512
>
> Please tell me if I could provide any further information.
>
> You are of great help
>
> Thank you very much
> Zhouyi
Thanks for your help

Or, can you teach me how to prepare an environment that can run
"bpftool struct_ops register xxx.o" ;-)
(A few words of description of OS version (Ubuntu/CentOS/Suse for etc)
and example kernel .config is enough)

I am an enthusiastic learner ;-)

Thanks in advance
Zhouyi
> >

2023-05-26 23:43:36

by Zhouyi Zhou

[permalink] [raw]
Subject: Re: a small question about bpftool struct_ops

Hi

On Sun, May 21, 2023 at 4:27 PM Zhouyi Zhou <[email protected]> wrote:
>
> Hi
>
> On Sat, May 20, 2023 at 7:37 AM Zhouyi Zhou <[email protected]> wrote:
> >
> > Thank you for responding so quickly ;-)
> >
> > On Sat, May 20, 2023 at 3:01 AM Martin KaFai Lau <[email protected]> wrote:
> > >
> > > On 5/19/23 5:07 AM, Zhouyi Zhou wrote:
> > > > Dear developers:
> > > > I compiled bpftool and bpf tests in mainline (2d1bcbc6cd70),
> > > > but when I invoke:
> > > > bpftool struct_ops register bpf_cubic.bpf.o
> > > >
> > > > the command line fail with:
> > > > libbpf: struct_ops init_kern: struct tcp_congestion_ops data is not
> > > > found in struct bpf_struct_ops_tcp_congestion_ops
> > >
> > > At the machine trying to register the bpf_cubic, please dump the vmlinux btf and
> > > search for bpf_struct_ops_tcp_congestion_ops and paste it here:
> > >
> > > For example:
> > > #> bpftool btf dump file /sys/kernel/btf/vmlinux
> > >
> > > ...
> > >
> > > [74578] STRUCT 'bpf_struct_ops_tcp_congestion_ops' size=256 vlen=3
> > > 'refcnt' type_id=145 bits_offset=0
> > > 'state' type_id=74569 bits_offset=32
> > > 'data' type_id=6241 bits_offset=512
> > OK
> > [214398] STRUCT 'bpf_struct_ops_tcp_congestion_ops' size=256 vlen=3
> > 'refcnt' type_id=298 bits_offset=0
> > 'state' type_id=214224 bits_offset=32
> > 'data' type_id=213704 bits_offset=512
> >
> > Please tell me if I could provide any further information.
> >
> > You are of great help
> >
> > Thank you very much
> > Zhouyi
> Thanks for your help
>
> Or, can you teach me how to prepare an environment that can run
> "bpftool struct_ops register xxx.o" ;-)
> (A few words of description of OS version (Ubuntu/CentOS/Suse for etc)
> and example kernel .config is enough)
I invoke following commands, and it works:
cd tools/testing/selftests/bpf
find . -name vmlinux.h|xargs rm
make -j 20

put bpf_cubic.bpf.o to my virtual machine, and it works!
I don't know why

Thank you all!
Best Regards
Zhouyi
>
> I am an enthusiastic learner ;-)
>
> Thanks in advance
> Zhouyi
> > >

2023-05-31 03:44:54

by Zhouyi Zhou

[permalink] [raw]
Subject: Re: a small question about bpftool struct_ops

Hi

On Sat, May 20, 2023 at 3:01 AM Martin KaFai Lau <[email protected]> wrote:
>
> On 5/19/23 5:07 AM, Zhouyi Zhou wrote:
> > Dear developers:
> > I compiled bpftool and bpf tests in mainline (2d1bcbc6cd70),
> > but when I invoke:
> > bpftool struct_ops register bpf_cubic.bpf.o
> >
> > the command line fail with:
> > libbpf: struct_ops init_kern: struct tcp_congestion_ops data is not
> > found in struct bpf_struct_ops_tcp_congestion_ops
>
> At the machine trying to register the bpf_cubic, please dump the vmlinux btf and
> search for bpf_struct_ops_tcp_congestion_ops and paste it here:
>
> For example:
> #> bpftool btf dump file /sys/kernel/btf/vmlinux
>
> ...
>
> [74578] STRUCT 'bpf_struct_ops_tcp_congestion_ops' size=256 vlen=3
> 'refcnt' type_id=145 bits_offset=0
> 'state' type_id=74569 bits_offset=32
> 'data' type_id=6241 bits_offset=512
>
Exciting news:
when I construct the kernel package, I found lots of following warnings:
WARN: multiple IDs found for 'task_struct': 241, 21719 - using 241
WARN: multiple IDs found for 'vm_area_struct': 360, 21750 - using 360
WARN: multiple IDs found for 'file': 805, 21789 - using 805
WARN: multiple IDs found for 'cgroup': 666, 21819 - using 666
WARN: multiple IDs found for 'inode': 928, 21936 - using 928
WARN: multiple IDs found for 'path': 960, 21965 - using 960

These warnings lead me to:
Link: https://lore.kernel.org/lkml/[email protected]/T/

So, I upgraded my pahole from [1], and construct the kernel package
again, now I can successfully invoke
bpftool struct_ops register bpf_cubic.bpf.o

[1] https://github.com/acmel/dwarves.git

Sorry for the previous noise

and

Thanks again
Best Regards
Zhouyi