2017-02-20 41 views
1

在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_SCTPETH_RSS_NONFRAG_IPV4_OTHER。但是,当你处理分段的IP数据包时,你将面临一个愚蠢的问题。如果您选择使用ETH_RSS_FRAG_IPV4ETH_RSS_NONFRAG_IPV4_TCP选项,则连接的某些碎片数据包将落入另一个队列,因为它们不具有L4端口号。如果排除ETH_RSS_NONFRAG_IPV4_TCP函数,那么ETH_RSS_FRAG_IPV4散列函数将不会应用于非分段数据包,并且这些数据包将进入队列0.所有其他散列函数组合都不起作用。那么,我们该怎么做?如何在XL710中设置RSS哈希函数来接收IPv4流类型?

回答

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流类型,因此属于同一连接的所有数据包都转到相同的内核。

注意,默认的输入破片的IPv4NonFIPv4设置,其他是IP4-S和IP4-d。所以它不需要修改。请记住修改所有其他IPv4流输入集和它们的对称质量。

您可以通过查看testpmd应用程序的源代码找到这些命令的API函数。