在DPKD中,默认情况下,XL710 Intel NIC没有激活ETH_RSS_IPV4
数据流。因此,当您想要在lcores之间分发数据包时,您必须选择XL710支持的其他IPv4数据流,即ETH_RSS_FRAG_IPV4
,ETH_RSS_NONFRAG_IPV4_TCP
,ETH_RSS_NONFRAG_IPV4_UDP
,ETH_RSS_NONFRAG_IPV4_SCTP
和ETH_RSS_NONFRAG_IPV4_OTHER
。但是,当你处理分段的IP数据包时,你将面临一个愚蠢的问题。如果您选择使用ETH_RSS_FRAG_IPV4
和ETH_RSS_NONFRAG_IPV4_TCP
选项,则连接的某些碎片数据包将落入另一个队列,因为它们不具有L4端口号。如果排除ETH_RSS_NONFRAG_IPV4_TCP
函数,那么ETH_RSS_FRAG_IPV4
散列函数将不会应用于非分段数据包,并且这些数据包将进入队列0.所有其他散列函数组合都不起作用。那么,我们该怎么做?如何在XL710中设置RSS哈希函数来接收IPv4流类型?
1
A
回答
3
XL710的行为与DPDK中的约定不兼容。因此,您必须直接使用i40e驱动程序提供的API来设置ETH_RSS_IPV4的RSS。正如英特尔以太网控制器710系列规范更新,第18页(发布2017年1月)中提到:需要哈希
功能在IPv4数据包(RSS)过滤器应设置 在PFQF_HENA所有IPv4 PCTYPEs/VFQF_HENA(PCTYPEs 31,33 ... 36)
支持分组类型(PCTYPE)在英特尔以太网控制器710系列数据表页面597和598(释放2017年1月)中提到。您可以看到没有为IPv4定义的数据包类型。
但是有一个解决方案。线索是为所有需要的流类型(或包类型)修改输入集。我们使用DPDK在应用程序文件夹中提供的testpmd
工具来尝试它。编译DPDK和应用程序后,运行testpmd
应用:
./app/test-pmd/testpmd -c ff -n 2 -w 0a:00.0 -w 0a:00.1 -- -i --rxq=4 --txq=4
我们已经在我们的系统中的两个XL710。使用以下命令,您可以将XL710配置为按照您希望支持IPv4数据流的方式运行。
port config all rss all
set_hash_input_set 0 ipv4-tcp src-ipv4 select
set_hash_input_set 0 ipv4-tcp dst-ipv4 add
set_hash_input_set 0 ipv4-udp src-ipv4 select
set_hash_input_set 0 ipv4-udp dst-ipv4 add
set_hash_input_set 1 ipv4-tcp src-ipv4 select
set_hash_input_set 1 ipv4-tcp dst-ipv4 add
set_hash_input_set 1 ipv4-udp src-ipv4 select
set_hash_input_set 1 ipv4-udp dst-ipv4 add
set_hash_global_config 0 default ipv4-frag enable
set_hash_global_config 0 default ipv4-tcp enable
set_hash_global_config 0 default ipv4-udp enable
set_hash_global_config 1 default ipv4-frag enable
set_hash_global_config 1 default ipv4-tcp enable
set_hash_global_config 1 default ipv4-udp enable
它选择通过去除L4端口部对TCP和UDP数据流类型设置适当的输入。如果需要,set_hash_global_config
命令启用对称散列。通过修改TCP输入集,它的行为就像Frag IPv4流类型,因此属于同一连接的所有数据包都转到相同的内核。
注意,默认的输入破片的IPv4和NonFIPv4设置,其他是IP4-S和IP4-d。所以它不需要修改。请记住修改所有其他IPv4流输入集和它们的对称质量。
您可以通过查看testpmd应用程序的源代码找到这些命令的API函数。
相关问题
- 1. 如何在Redis&Rails中设置动态哈希键(哈希数据类型)?
- 2. 在Java中设置哈希表数组
- 3. 如何实现各种类型的密钥的哈希函数?
- 4. 如何为各种模板类型构建哈希函数?
- 5. 有没有内置函数来在.NET中哈希密码?
- 6. 如何在C++中实现泛型哈希函数
- 7. 快速哈希函数为IPv4/6地址
- 8. 在红宝石中设置哈希等于另一个哈希
- 9. Python哈希函数和哈希对象
- 10. 确定双哈希函数给定键 - >哈希位置值
- 11. 如何实现动态哈希表的哈希函数?
- 12. ruby rspec mocks测试函数接收哈希
- 13. 如何在哈希中存储哈希哈希?
- 14. 哈希Python函数
- 15. PHP哈希函数
- 16. Java哈希函数
- 17. 作为流接收器的类(函数)
- 18. 哈希函数来散列IP碎片
- 19. 在redis中设置mutltiple哈希
- 20. 在JavaScript中设置哈希集合?
- 21. 在javascript中构建哈希表和完美的哈希函数
- 22. 如何通过哈希值来识别类型?
- 23. PowerShell哈希映射类型
- 24. 识别哈希类型
- 25. 用于SHA512哈希的VB类型设置
- 26. 在PHP中设置一个良好的哈希函数来设置URL长度缩短
- 27. 红宝石哈希设置
- 28. 哈希表大小设置
- 29. 迭代哈希设置
- 30. 在API调用栏中接收哈希数组