そのため、現在、Receive Side Scaling (RSS) オフロードが DPDK (Data Plane Development Kit) 内で機能する方法を理解することに取り組んでいます。したがって、基本的に、選択したオフロードに応じて、ハッシュ値を計算し、それを使用して、特定の CPU コアにバインドされている特定のキューにパケットを配置します。
したがって、これに関して2つのクエリがあります。
の RSS オフロードを使用すると
**ETH_RSS_IPV6_EX**
、0 以外のハッシュ値を取得できません。これは、Mellanox カードがこのオフロードをサポートしているにもかかわらず、選択した RSS オフロードに従ってパケットが無効と見なされることを意味します。次の Scapy パケットを送信しましたが、まだハッシュが 0 になりつつあります:sendp(Ether(dst="AA:AA:BB:BB:CC:DD")/IPv6(dst="a:a:a:a:a:a:a:b",src="a:a:a:a:a:a:a:c",nh=60)/IPv6ExtHdrDestOpt(nh=43,options=HAO(hoa="a:a:a:a:a:a:a:d"))/IPv6ExtHdrRouting(nh=59,type=2,addresses=["a:a:a:a:a:a:a:e"]),iface="enp4s0f0",count=1)
. (どのパケットを操作するかについて、https://docs.microsoft.com/en-us/windows-hardware/drivers/network/rss-hashing-types#ndis_hash_ipv6_exからこのリソースを取得しましたが、これらの RSS オフロードと DPDK が持っているもの。) このEX用語は、RSS オフロードで何を意味しますか。それとは別に、DPDK 内にある RSS オフロードを一度に 1 つずつ説明しているリソースを教えてもらえますか?参考になります):
#define ETH_RSS_IPV4 (1ULL << 2) #define ETH_RSS_FRAG_IPV4 (1ULL << 3) #define ETH_RSS_NONFRAG_IPV4_TCP (1ULL << 4) #define ETH_RSS_NONFRAG_IPV4_UDP (1ULL << 5) #define ETH_RSS_NONFRAG_IPV4_SCTP (1ULL << 6) #define ETH_RSS_NONFRAG_IPV4_OTHER (1ULL << 7) #define ETH_RSS_IPV6 (1ULL << 8) #define ETH_RSS_FRAG_IPV6 (1ULL << 9) #define ETH_RSS_NONFRAG_IPV6_TCP (1ULL << 10) #define ETH_RSS_NONFRAG_IPV6_UDP (1ULL << 11) #define ETH_RSS_NONFRAG_IPV6_SCTP (1ULL << 12) #define ETH_RSS_NONFRAG_IPV6_OTHER (1ULL << 13) #define ETH_RSS_L2_PAYLOAD (1ULL << 14) #define ETH_RSS_IPV6_EX (1ULL << 15) #define ETH_RSS_IPV6_TCP_EX (1ULL << 16) #define ETH_RSS_IPV6_UDP_EX (1ULL << 17)
ご不明な点がございましたら、お気軽にお問い合わせください。
前もって感謝します。
Edit_1 (Vipin のコメントに応えて):
この構造 (ETH_RSS_IPV6_EX) で RSS を有効にしています。
static struct rte_eth_conf port_conf = { .rxmode = { .mq_mode = ETH_MQ_RX_RSS, .max_rx_pkt_len = RTE_ETHER_MAX_LEN, .split_hdr_size = 0, .offloads = DEV_RX_OFFLOAD_CHECKSUM, }, .rx_adv_conf = { .rss_conf = { .rss_key = .rss_key = ETH_VRSh6, = . //ETH_RSS_IP //オリジナル、//AU: ハッシュ アプリケーションの変更 }, }, .txmode = { .mq_mode = ETH_MQ_TX_NONE, }, };
私が使用している DPDK バージョンは 20.08 です。
使用されている NIC は Mellanox ConnectX-5 です
DPDK l3fwd アプリケーションをベースとして使用し、それをテストしています。