Improve arp_responder.py performance #17280
Open
+36
−3
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.
Description of PR
Summary:
Fixes # (issue)
Type of change
Back port request
Approach
What is the motivation for this PR?
Improve the overall performance of arp_responder.py.
How did you do it?
recvmsg
syscalls to get packets one at a time, a RX ring buffer is set up as shared memory between userspace and kernel space. The kernel then writes incoming packets into that ring buffer, and then userspace reads it from there. All this happens with only one syscall toselect
(or equivalent) to know when data (one or more packets) is available, instead of 2 syscalls per packet. The downside is that this does increase memory usage, for the ring buffer to be created. A similar thing can be done for TX, but is a bit harder and is currently not supported by libpcap (so packets being sent out will still use the regularsendmsg
syscall.How did you verify/test it?
Tested with multiple advanced reboot warm upgrade runs.
Any platform specific information?
Supported testbed topology if it's a new test case?
Documentation