> From the first days of XDP implementation in idpf, it relied and > worked solely on top of the queue-based scheduling Tx mode, which > basically means simple FIFO. However, turned out not every firmware > supports this mode and XDP doesn't work there at all. > > Since the flow-based scheduling Tx mode is mandatory and supported > by every FW, introduce a simple fallback guarded by a static key > to not hurt the more performant mode. The FB mode generates a > completion for each Tx descriptor and never guarantees that there > won't be any out-of-order completions. Serialize that using a > bitmap of completed descriptors and report contiguous blocks of > free bits to match XDP and XSk expectations and avoid further > code complication. > > The usage of a bitmap on hotpath might sound scary, but this > fallback is able to reach around 70% of the QB mode's performance, > which is comparable to what ice gives us. The main bottlenecks are > unlikely()s and one completion per each descriptor, while in the QB > mode we have one completion per batch (which might contain 64 or > even 128 frames), plus the size of the completion descriptor is > 8 bytes in this mode (4 bytes in the QB mode), which means a lot > of additional PCI traffic. > > bloat-o-meter shows .text increase in about 2 Kb without adding new > functions or uninlining any of the existing ones. I played a bunch > with inlining and uninlining certain pieces or the whole fallback, > but the compiler collapses and optimizes libeth templates so hardly > so that each additional external call only makes things worse. > > Signed-off-by: Alexander Lobakin <[email protected]>
Tested-by: YiFei Zhu <[email protected]>
