Open osresearch opened 2 months ago
Searching through the docs, it seems that this configuration is not supported: https://docs.amd.com/r/en-US/ug1586-onload-user/CTPIO-Modes
CTPIO feature can be used in three modes:
- cut-through (ct) Lowest latency. A packet is transmitted onto the network as it is being streamed across the PCIe bus. The adapter starts transmitting the packet even before the entire packet has been delivered over the PCIe bus. Note: This mode is supported at 10 Gb, but not at 25 Gb.
Should the library detect if the user is attempting to use CTPIO on a 25G link?
I'm benchmarking two machines with SFC9250 cards direct connected with 25G fiber on one port, as well as via a 10G switch on the other port. If the ctpio threshold is larger than the packet size, there is no problem on either port. On the 10G port, if the ctpio threshold is set lower than the payload length in
eflatency
, the ctpio fallback seems to work -- I see the expected CRC error on the receive side and it then receives the correct packet afterwards (I'm running with my #238 patches to validate that the packet received matches, although it occurs with the stock build as well).On the 25G direct connect port, however, the fallback doesn't always work. It isn't deterministic; sometimes it makes it through several iterations before failing, other times it fails in the first few loops like this one. Usually after a
EF_EVENT_TYPE_RX_DISCARD
with a bad CRC caused by the CTPIO underun, there is a goodEF_EVENT_TYPE_RX
, but sometimes it never arrives and theping
or thepong
can get hung waiting for the next packet.Interestingly, it seems to also depend on the value of ctpio threshold and the size of the packet. Very lower values for the threshold work (8-16), as do ones close to the packet size (90-128). It also does not seem to affect very short (<64bytes) or larger packets like 1K.
This is with onload 8.1.3 and
ethtool -i ens2f0
reports:lspci | grep 5e