Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update linux_headers_image to support >= 6.3 kernels. Add 6.2 through 6.11 kernels #2036

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

ddelnano
Copy link
Member

@ddelnano ddelnano commented Oct 2, 2024

Summary: Update linux_headers_image to support >= 6.3 kernels. Add 6.2 through 6.11 kernels

#2035 reported an issue where the socket tracer fails to run on a openSUSE MicroOS instance running a 6.11 kernel. This change updates our header building process to support >= 6.3 kernels since upstream broke the source building process from non git trees (binary builds still work outside of git trees).

Going forward, building source packages is only possible in a git-managed tree. Building binary packages does not require git.

It also adds a variety of kernel versions between 6.1 and 6.11 to the header build list.

Relevant Issues: #2035

Type of change: /kind compatibility

Test Plan: Verified the following

  • Ran full build without upload
  • Built x86_64 and arm64 kernels pre and post 6.3
  • That the previous dockerfile and pre 6.3 dockerfile is same as before
$ git diff main:tools/docker/linux_headers_image/Dockerfile tools/docker/linux_headers_image/Dockerfile.bionic
$

Changelog Message: Update packaged linux-headers to support kernels 6.2 through 6.11

…kernel versions to header builder list

Signed-off-by: Dom Del Nano <ddelnano@gmail.com>
@ddelnano ddelnano requested review from a team as code owners October 2, 2024 17:08
Comment on lines +104 to +110
6.1.8 \
6.2.16 \
6.3.13 \
6.6.53 \
6.8.12 \
6.10.12 \
6.11.1
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we have an official process for how to pick these? Since I had conditional logic for pre 6.3 and post 6.3, I wanted the latest minor version on either side, in addition to some number of kernels between 6.3 and 6.11.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The last time I did this I picked the newest patch version for each.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you check the change in the size of the headers tar with these changes? I believe we were worried about the size increase here. cc @oazizi000

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change adds 63MB to the existing header file and brings its total size to 315MB. That's a pretty big addition, so I'd be open to trimming down the added versions. I think we could select one version in between 6.1 and 6.7/6.8 and one from 6.10/6.11 (since #2035 is related to those versions).

Comment updated and will keep it in sync with what we decide as the right set of new headers to include.

Signed-off-by: Dom Del Nano <ddelnano@gmail.com>
Signed-off-by: Dom Del Nano <ddelnano@gmail.com>
ddelnano added a commit that referenced this pull request Oct 11, 2024
…er kernels (#2041)

Summary: Upgrade bcc and libbpf to fix BPF program compilation on 6.10
and later kernels

Bcc provides some
"[virtual](https://github.com/iovisor/bcc/blob/cb1ba20f4800f556dc940682ba7016c50bd0a3ac/src/cc/exported_files.cc#L28-L48)"
includes to BPF programs. The `compat/linux/virtual_bpf.h` file in
particular needs to be kept in sync with libbpf and matches the [header
guard](https://github.com/iovisor/bcc/blob/cb1ba20f4800f556dc940682ba7016c50bd0a3ac/src/cc/compat/linux/virtual_bpf.h#L9)
of the `include/uapi/linux/bpf.h` file. This means that while our linux
headers were updated, our older bcc install was inserting an older copy
of the `uapi/linux/bpf.h` file -- one that didn't contain the `bpf_wq`
declaration.

```
  include/linux/bpf.h:348:10: error: invalid application of 'sizeof' to an incomplete type 'struct bpf_wq'
                  return sizeof(struct bpf_wq);
                         ^     ~~~~~~~~~~~~~~~
  include/linux/bpf.h:348:24: note: forward declaration of 'struct bpf_wq'
                  return sizeof(struct bpf_wq);
                                       ^
  include/linux/bpf.h:377:10: error: invalid application of '__alignof' to an incomplete type 'struct bpf_wq'
                  return __alignof__(struct bpf_wq);
                         ^          ~~~~~~~~~~~~~~~
  include/linux/bpf.h:377:29: note: forward declaration of 'struct bpf_wq'
                  return __alignof__(struct bpf_wq);
```

Note: while this fixes the 6.10 compilation issue, our 6.10 qemu build
fails without disabling [this
logic](https://github.com/pixie-io/pixie/blob/3c41d554215528e688328aef94192e696db617dc/src/stirling/source_connectors/socket_tracer/socket_trace_connector.cc#L464-L472).
6.10 kernels added BPF token support. This changes the BPF permission
model slightly and causes the BPF instruction limit to be dependent on
the permissions of the BPF syscall caller ([linux
source](https://elixir.bootlin.com/linux/v6.11.1/source/kernel/bpf/syscall.c#L2757)).

This new BPF token logic coupled with our qemu setup, causes our 6.10
build to fallback to the 4096 instruction limit. I'll be addressing this
in #2040 and #2042. Those issues shouldn't block this change since that
loop limit code can be bypasses at runtime with our current cli flags.

Relevant Issues: Closes #2035

Type of change: /kind bugfix

Test Plan: Built 6.10 and 6.11 kernels and the associated linux headers
from #2036 and verified that a local qemu build passes
- [x] Verify `#ci:bpf-build-all-kernels` build passes

Changelog Message: Upgraded bcc and libbpf to support kernels 6.10 and
later

---------

Signed-off-by: Dom Del Nano <ddelnano@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants