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

Design challenge: ethernet mirror #1009

Open
lukego opened this issue Sep 2, 2016 · 0 comments
Open

Design challenge: ethernet mirror #1009

lukego opened this issue Sep 2, 2016 · 0 comments

Comments

@lukego
Copy link
Member

lukego commented Sep 2, 2016

Challenge: How do you design an "ethernet mirror" application that receives packets on a port and retransmits exactly the same packets back? The design should be optimized for high packet rates.

Intel 10G

This should be fairly easy on the Intel 82599. Just create one intel_app and wire the transmit and receive links together. Done.

ConnectX-4 100G

This seems to become tricky on the ConnectX-4 when we consider the performance data on #1007. Suppose that we need to use 4 pairs of TX+RX queues in order to optimize the packet rate. Then the challenge is how to ensure that we send packets back in the same order that they were received.

Sub-problems:

  • Received packets need to be spread across the receive queues. RSS/hashing is not optimal because it will only work for specific traffic mixes. May require something more like round-robin packet dispatch. (I am not sure if this is available on ConnectX-4.)
  • Received packets need to be put into order. May need to examine precise hardware timestamps in order to work out the order in which packets receive on different queues should be transmitted. The 100G ConnectX-4 seems to be able to timestamp recieved packets using a 156 MHz clock (would seem sufficient for minimum one tick per packet).
  • Transmitted packets need to be put into the order that was determined for receive. The packets are being sent on separate send queues and so we would need to somehow control the order in which the NIC processes packets from these queues.

Fun challenge! I am not sure if this would be easy or impossible on ConnectX-4. The first place to look for answers is the PRM. I would be very interested if anybody has a proposed (partial) solution.

dpino added a commit to dpino/snabb that referenced this issue Jan 15, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant