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
cilium: IPv4 BIG TCP support #26172
cilium: IPv4 BIG TCP support #26172
Conversation
ca412ff
to
38430dd
Compare
9a4963c
to
86a7c53
Compare
/test |
86a7c53
to
b70b35c
Compare
/test |
Turns out vishvananda/netlink@acdc658 causes a regression in Cilium. I've reverted that specific commit in our local copy for now. |
b70b35c
to
b3263d9
Compare
/test |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM for vendor changes 💯
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM for my code owners. Thanks for nicely splitting it up into easy-to-review and well-documented commits.
Given we have IPv6 BIG TCP support already, lets also support it for IPv4. From the IPv4 BIG TCP work: Different from IPv6, IPv4 tot_len is 16-bit long only, and IPv4 header doesn't have exthdrs(options) for the BIG TCP packets' length. To make it simple, as David and Paolo suggested, we set IPv4 tot_len to 0 to indicate this might be a BIG TCP packet and use skb->len as the real IPv4 total length. This will work safely, as all BIG TCP packets are GSO/GRO packets and processed on the same host as they were created; There is no padding in GSO/GRO packets, and skb->len - network_offset is exactly the IPv4 packet total length; Also, before implementing the feature, all those places that may get iph tot_len from BIG TCP packets are taken care with some new APIs. The device settings are different from IPv6 ones, so we also need to explicitly set them via IFLA_GSO_IPV4_MAX_SIZE and IFLA_GRO_IPV4_MAX_SIZE for all involved devices to take effect. Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Link: https://lore.kernel.org/netdev/cover.1674921359.git.lucien.xin@gmail.com/
Extend the veth setup to also configure IPv4 GRO/GSO max size configuration for every new veth for a given Pod. Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Add status dump field, so that this can be introspected via sysdump. Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Add generated API code for the status exposure. Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Hook up the status field from agent and client side. Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Add Helm setting for IPv4 BIG TCP (enableIPv4BIGTCP) which defaults to false. Used "make -C install/kubernetes cilium/values.yaml" to autogenerate the values.yaml file. Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Add documentation for the tuning guide. Also improve the IPv6 section slightly. Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Add the IPv4 BIG TCP kernel requirements to the table. Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Now that we have BPF IPv6 masquerading, lift the restriction that it needs to be disabled specifically. Also remove nodePort.enabled=true as this is redundant with KPR=strict. Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
(CI all green, pushing small improvement) |
b3263d9
to
b370546
Compare
/test |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks all good to me, nice work!
IPv4 BIG TCP support for Cilium on 6.3+ kernels.
Link: https://lore.kernel.org/netdev/cover.1674921359.git.lucien.xin@gmail.com/