Add support for recvmmsg and UDP GRO.#9904
Closed
brbzull0 wants to merge 3 commits intoapache:masterfrom
Closed
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
WIP
I will leave this as draft as I still need to :
WIP
Descrition
This PR adds support for UDP GRO when reading the socket using
recvm(m)gsg. This PR also includes support forrecvmmsgwhen it is available by the OS.There is now a new configuration variable:
Notes
All the tests were done using GET only and setting the h2load parameter to
--max-udp-payload-size=2k.As I didn't see much of a difference between having GRO enabled or disabled I did run a test with debug
enabled and I was able to count how many packets came with the GRO set in the ancillary data.
Then I realized why I wasn't actually seeing much difference, not too many packets were spliced by the kernel.
Packets with (No GRO/GRO) = Number of times that ATS detected a packet with spliced with GRO.
Using recvmmsg reduced the number of syscall significantly
This is what I used for this tests:
bpftrace
bpftrace -e 'tracepoint:syscalls:sys_enter_recvm* { @[comm, probe] = count(); }'h2load
I was using only GET requests with around 15 header with about 80 bytes each.
I have not tried POST yet which I believe will give us better insights.