如何将属于 TCP 连接的数据包定向到 DPDK 中的特定 lcore?

How to direct packets belonging to a TCP connection to a specific lcore in DPDK?

我们想要一个特定的lcore 来接收属于TCP 连接双方的数据包。 IE。从客户端到服务器 (CtoS) 的数据包和从服务器到客户端 (StoC) 的数据包都被定向到单个 lcore。似乎 RSS 保证属于流(单向数据流)的数据包被定向到相同的 lcore。为了将一个方向的两侧指向同一个 lcore,我们需要一个对称的 RSS。

DPDK(截至 16.07)尚不直接支持对称哈希。但是,邮件列表中讨论了一些解决方法 here. You might also find this 很有帮助。

另一种选择是自己进行负载平衡。例如,您有一个拉取 NIC 队列的 lcore,解析数据包,提取 source/destination ips 和端口并计算对称值(一个简单的方法是 (src_port + dst_port + src_ip + dst_ip) % NUM_OF_SOFTWARE_RINGS

对于每个 lcore worker,您需要一个 rte_ring 来连接负载平衡 lcore。请注意,此方法的性能不如直接 RSS。