microsoft / microsoft/demikernel
[Catpowder] Windows: Support more than one concurrent packet per ring in XDP
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 1.2k
- Forks
- 151
- PR merge metrics
- No merged PRs in 30d
Description
Context
Currently, each Rx/Tx ring in XDP allow for only a single buffer. This value is not configurable, and some code in Rx/TxRing relies on the assumption that only one buffer is allocated. This prevents more than one packet from being sent or received concurrently.
Proposed Solution
Rx/Tx fill and completion ring sizes should be configurable. Additionally, the Rx/Tx ring size and the number of user memory buffers should be decoupled, able to be configured separately. Ideally, user memory buffers would be over-allocated for high throughput systems (at least the sum of the size of the completion and fill rings for each end of the socket).
Alternative Solutions
Potentially one could create additional sockets with one buffer, but the overhead per socket likely outweighs the overhead of more buffers per socket.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading the Rx/TxRing code and the XDP fill and completion ring setup, focusing on where ring sizes and user memory buffer counts are fixed or assumed to be one. Define how those values can be configured independently and verify that multiple packets can be sent and received concurrently without exhausting the buffers.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- networking
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100