(Linux)
我正在考虑使用相同的网络接口卡 (NIC),但连接到不同 IP 地址的 2-3 个 TCP 连接。每个连接都有自己的线程和专用的 CPU 内核。
我知道 NIC 有多个接收和传输队列:
如何确保每个连接都有自己的 RX 和 TX 队列?我是否需要设置任何特定的套接字选项,或者这是由驱动程序/卡在 IP 地址等元组上散列自动完成的?
共享接口对性能有何影响?我假设 Linux IP/TCP 堆栈中不会发生争用?唯一的竞争将在硬件中进行,因为它会在不同的 RX/TX 队列的推送/弹出之间切换?如果是这样,几十个 CPU 周期?
不清楚您需要确保每个连接在 NIC 上都有自己的 RX/TX 队列对。这完全取决于每个连接将/必须进行的速度,以及您的 CPU 相对于这些速率的性能如何。
而且,根据您拥有的 NIC,您实际上可能没有向主机公开多个 RX/TX 队列。您可以使用“ethtool -l”进行检查