Intel X710的RSS哈希函数支持微软的Toeplitz算法以及XOR算法。并且支持对称和非对称操作。与82599不同,X710的Toeplitz算法使用416位(52字节)的秘钥,82599网卡使用320位(40字节)的秘钥。
I40E驱动定义的秘钥值结构如下:
struct i40e_aqc_get_set_rss_key_data {u8 standard_rss_key[0x28];u8 extended_hash_key[0xc];
};
VPP默认使用的秘钥,以下可见:
vpp# show hardware-interfacesName Idx Link Hardware
m1/1 1 up m1/1Link speed: 10 GbpsIntel X710/XL710 Familyrss key length: 52rss key: 0x44 0x39 0x79 0x6b 0xb5 0x4c 0x50 0x23 0xb6 0x750xea 0x5b 0x12 0x4f 0x9f 0x30 0xb8 0xa2 0xc0 0x3d0xdf 0xdc 0x4d 0x02 0xa0 0x8c 0x9b 0x33 0x4a 0xf60x4a 0x4c 0x05 0xc6 0xfa 0x34 0x39 0x58 0xd8 0x550x7d 0x99 0x58 0x3a 0xe1 0x38 0xc9 0x2e 0x81 0x150x03 0x66
在DPDK中,函数i40e_hash_parse_key默认设置此hash秘钥值rss_key_default。
static void
i40e_hash_parse_key(const struct rte_flow_action_rss *rss_act,struct i40e_rte_flow_rss_conf *rss_conf)
{const uint8_t *key = rss_act->key;if (!key || rss_act->key_len != sizeof(rss_conf->key)) {const uint32_t rss_key_default[] = {0x6b793944,0x23504cb5, 0x5bea75b6, 0x309f4f12, 0x3dc0a2b8,0x024ddcdf, 0x339b8ca0, 0x4c4af64a, 0x34fac605,0x55d85839, 0x3a58997d, 0x2ec938e1, 0x66031581};if (rss_act->key_len != sizeof(rss_conf->key))PMD_DRV_LOG(WARNING,"RSS key length invalid, must be %u bytes, now set key to default",(uint32_t)sizeof(rss_conf->key));memcpy(rss_conf->key, rss_key_default, sizeof(rss_conf->key));} else {memcpy(rss_conf->key, key, sizeof(rss_conf->key));}rss_conf->conf.key = rss_conf->key;rss_conf->conf.key_len = sizeof(rss_conf->key);
启用对称哈希,可以使用如下的秘钥值。而不用启用X710的对称设置。
uint8_t symmetric_rss_hash_key[52] = {0x6d, 0x5a, 0x6d, 0x5a, 0x6d, 0x5a, 0x6d, 0x5a,0x6d, 0x5a, 0x6d, 0x5a, 0x6d, 0x5a, 0x6d, 0x5a,0x6d, 0x5a, 0x6d, 0x5a, 0x6d, 0x5a, 0x6d, 0x5a,0x6d, 0x5a, 0x6d, 0x5a, 0x6d, 0x5a, 0x6d, 0x5a,0x6d, 0x5a, 0x6d, 0x5a, 0x6d, 0x5a, 0x6d, 0x5a,0x6d, 0x5a, 0x6d, 0x5a, 0x6d, 0x5a, 0x6d, 0x5a,0x6d, 0x5a, 0x6d, 0x5a
};