<div dir="ltr">Hi Stephen,<div><br></div><div>Thank you very much for your reply!</div><div><br></div><div>After using 'transmit scheduling' as the keyword, much more useful results now show up.</div><div><br></div><div>For others who are also interested in how queues are scheduled, I would recommend reading this paper (it's open access): <a href="https://www.usenix.org/system/files/nsdi19-stephens.pdf">https://www.usenix.org/system/files/nsdi19-stephens.pdf</a></div><div><br></div><div><br></div><div>--</div><div>Thanks,</div><div>Fengkai</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, May 31, 2023 at 12:24 AM Stephen Hemminger <<a href="mailto:stephen@networkplumber.org">stephen@networkplumber.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Mon, 29 May 2023 23:02:45 +0800<br>
Fengkai Sun <<a href="mailto:qcloud1014@gmail.com" target="_blank">qcloud1014@gmail.com</a>> wrote:<br>
<br>
> Hi list,<br>
> <br>
> I'm curious how DPDK programs the NIC to receive/transmit packets when<br>
> there are multiple queues on a single port.<br>
> <br>
> As for RX, the answer might be clear.<br>
> The NIC can only receive a packet once at a time, since the cable only<br>
> outputs one signal (0 or 1) at a time (correct me if I'm wrong).<br>
> Therefore the NIC can receive a packet, check it's information, and finally<br>
> put in into the right queue via some policies, e.g. RSS, all sequentially.<br>
> <br>
> However, it confuses me when it comes to TX.<br>
> As there are multiple TX queues on the same port, the NIC must decide which<br>
> queue to get packets from when it's idle.<br>
> This is where scheduling lies. How does the NIC select the queue?<br>
> Round-Robin? Does it have to enforce fairness among the queues?<br>
> <br>
> I'm wondering where I can find some documentation on this issue. Thank you!<br>
<br>
Transmit scheduling is up to the hardware (not DPDK).<br>
Generally I assume it is round-robin<br>
but there maybe cases like priority queues (like DCB) or large packets<br>
with segment offload.<br>
</blockquote></div>