<div dir="ltr">My NIC has 32 RX and 32 TX queues.<br><br>Now given this API,<br><br><table class="gmail-memname" style="font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:14px;line-height:22px;font-family:Roboto,sans-serif;margin-left:6px;color:rgb(37,53,85);background-color:rgb(223,229,241)"><tbody><tr></tr><tr><td class="gmail-memname" style="margin-left:6px;vertical-align:bottom">static uint16_t rte_eth_tx_burst</td><td style="vertical-align:bottom">(</td><td class="gmail-paramtype" style="white-space:nowrap;vertical-align:bottom">uint16_t </td><td class="gmail-paramname" style="color:rgb(96,32,32);white-space:nowrap;vertical-align:bottom">port_id,</td></tr><tr><td class="gmail-paramkey" style="text-align:right;vertical-align:bottom"></td><td style="vertical-align:bottom"></td><td class="gmail-paramtype" style="white-space:nowrap;vertical-align:bottom">uint16_t </td><td class="gmail-paramname" style="color:rgb(96,32,32);white-space:nowrap;vertical-align:bottom">queue_id,</td></tr><tr><td class="gmail-paramkey" style="text-align:right;vertical-align:bottom"></td><td style="vertical-align:bottom"></td><td class="gmail-paramtype" style="white-space:nowrap;vertical-align:bottom">struct <a class="el" href="https://doc.dpdk.org/api/structrte__mbuf.html" style="color:rgb(61,87,140);font-weight:bold">rte_mbuf</a> ** </td><td class="gmail-paramname" style="color:rgb(96,32,32);white-space:nowrap;vertical-align:bottom">tx_pkts,</td></tr><tr><td class="gmail-paramkey" style="text-align:right;vertical-align:bottom"></td><td style="vertical-align:bottom"></td><td class="gmail-paramtype" style="white-space:nowrap;vertical-align:bottom">uint16_t </td><td class="gmail-paramname" style="color:rgb(96,32,32);white-space:nowrap;vertical-align:bottom">nb_pkts </td></tr><tr><td style="vertical-align:bottom"></td><td style="vertical-align:bottom">)</td></tr></tbody></table><br>I gather the most natural approach for efficient packet transmissions is,<br><br>- assign one core to TX on a given port, queue since I/O through different queues is essentially independent<br>- arrange packets in memory buffers so packets for the same queue are in the same buffer<br><br>The RX side is much the same:<br><br><table class="gmail-memname" style="font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:14px;line-height:22px;font-family:Roboto,sans-serif;margin-left:6px;color:rgb(37,53,85);background-color:rgb(223,229,241)"><tbody><tr></tr><tr><td class="gmail-memname" style="margin-left:6px;vertical-align:bottom">static uint16_t rte_eth_rx_burst</td><td style="vertical-align:bottom">(</td><td class="gmail-paramtype" style="white-space:nowrap;vertical-align:bottom">uint16_t </td><td class="gmail-paramname" style="color:rgb(96,32,32);white-space:nowrap;vertical-align:bottom">port_id,</td></tr><tr><td class="gmail-paramkey" style="text-align:right;vertical-align:bottom"></td><td style="vertical-align:bottom"></td><td class="gmail-paramtype" style="white-space:nowrap;vertical-align:bottom">uint16_t </td><td class="gmail-paramname" style="color:rgb(96,32,32);white-space:nowrap;vertical-align:bottom">queue_id,</td></tr><tr><td class="gmail-paramkey" style="text-align:right;vertical-align:bottom"></td><td style="vertical-align:bottom"></td><td class="gmail-paramtype" style="white-space:nowrap;vertical-align:bottom">struct <a class="el" href="https://doc.dpdk.org/api/structrte__mbuf.html" style="color:rgb(61,87,140);font-weight:bold">rte_mbuf</a> ** </td><td class="gmail-paramname" style="color:rgb(96,32,32);white-space:nowrap;vertical-align:bottom">rx_pkts,</td></tr><tr><td class="gmail-paramkey" style="text-align:right;vertical-align:bottom"></td><td style="vertical-align:bottom"></td><td class="gmail-paramtype" style="white-space:nowrap;vertical-align:bottom">const uint16_t </td><td class="gmail-paramname" style="color:rgb(96,32,32);white-space:nowrap;vertical-align:bottom">nb_pkts </td></tr><tr><td style="vertical-align:bottom"></td><td style="vertical-align:bottom">)</td><td style="vertical-align:bottom"></td></tr></tbody></table><br class="gmail-Apple-interchange-newline"><div>- assign one core to RX on a given port, queue since I/O through different queues is essentially independent of other queues<br></div><div><br></div><div>Is this pretty much the starting place?<br><br>Now, my NIC also has RSS (elided):<br><br><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(33,255,6);background-color:rgb(0,0,0)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures">ethtool -x eth0<br>
</span></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(33,255,6);background-color:rgb(0,0,0)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures">RSS hash key:</span></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(33,255,6);background-color:rgb(0,0,0)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures">e8:27:27:e4:d9:fa:e4:1e:c6:89:67:95:52:4b:7a:41:3a:a6:68:5f:12:ec:4c:2f:51:18:a0:9b:bb:e1:7a:fb:a7:fb:7f:68:39:47:c2:83</span></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(33,255,6);background-color:rgb(0,0,0)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures">RSS hash function:</span></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(33,255,6);background-color:rgb(0,0,0)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space"> </span>toeplitz: on</span></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(33,255,6);background-color:rgb(0,0,0)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space"> </span>xor: off</span></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(33,255,6);background-color:rgb(0,0,0)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures">
</span></p><p class="gmail-p1" style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(33,255,6);background-color:rgb(0,0,0)"><span class="gmail-s1" style="font-variant-ligatures:no-common-ligatures"><span class="gmail-Apple-converted-space"> </span>crc32: off</span></p><br>But doesn't specifying the queue_id on RX/TX burst functions undercut RSS? That is, nowhere is there an opportunity for the NIC to determine which queue TX or RX go to since it was told at the outset?</div></div>