0
votes

I am in the process of buying a 25Gbe Card, and evaluating said card at the moment, and I can't seem to get it to receive a 25G Stream of 64 Byte UDP or TCP Packets traffic. Getting heavy packet drops, with dpdk-pktgen stating that It's using as many cores as I have set up. The most difficult thing to find out is why the packets are coming into the MAC but being dropped when they reach the Physical layer itself. Which leads me to believe that the dispersion of the reception of the packets is not being handled correctly. Leading me to believe that RSS is not taking place with the device, under dpdk. IRQ's are dispersed among the cores used in the system, which have been isolcpu'ed to keep the kernel from slating jobs on top of them, and all needed tuning seems to state that it has been done, and things should be moving along, but can't move past this hurdle.

Command run to initialize dpdk-pktgen:

RTE_SDK=../dpdk_Src/share/dpdk/ sudo -E ./app/build/pktgen -c 0x555555555 -n 8 w 03:00.1 -- -T -m '[2-28:29-33].0' -N -P

I read the documentation provided by DPDK RSS but have not been able to see any changes. I've altered the actual driver contained within dpdk's source "$RTE_SDK/drivers/net/mlx5/mlx5-rss.c" and added in the key that it suggests, I've also manipulated the pktgen-port-cfg.c file with the same instructions altering the below snippet of code

const struct rte_eth_conf default_port_conf = {
    .rxmode = {
            .split_hdr_size = 0,
            .header_split   = 0,    /**< Header Split disabled. */
            .hw_ip_checksum = 0,    /**< IP checksum offload disabled. */
            .hw_vlan_filter = 0,    /**< VLAN filtering enabled. */
            .hw_vlan_strip  = 0,    /**< VLAN strip enabled. */
            .hw_vlan_extend = 0,    /**< Extended VLAN disabled. */
            .jumbo_frame    = 0,    /**< Jumbo Frame Support disabled. */
            .hw_strip_crc   = 0,    /**< CRC stripping by hardware disabled. */
    },
    .rx_adv_conf = {
            .rss_conf = {
                    .rss_key = NULL,
                    .rss_key_len = 0,
                    .rss_hf = ETH_RSS_IP,
            },
    },
    .txmode = {
            .mq_mode = ETH_MQ_TX_NONE,
    }, };

Changing the rx_adv_conf to reflect the key that i want to use ie.

.rx_adv_conf = {
            .rss_conf = {
                    .rss_key = "65da65da65da65da65da65da65da65da65da65da",
                    .rss_key_len = 40,
                    .rss_hf = ETH_RSS_IP,
            },
    },

The thing is the documenation seems to state that as long as the rss_hf parameter is set, then it will use RSS, internally defined if not explicitly stated. And should that be the case is there a way to validate a per ring reception rate within pktgen, or ethtool or any other tool?

1

1 Answers

0
votes

ETH_RSS_IP means we hash flows using source and destination IP. So in order to leverage the RSS the packets you generate should have different source/destination IPs.