dpdk升級版本的一些坑

1. DPDK18.11嚴格判斷網卡對RSS支持特性

 .rss_hf = ETH_RSS_PROTO_MASK
int
rte_eth_dev_rss_hash_update(uint16_t port_id,
                struct rte_eth_rss_conf *rss_conf)
{
    struct rte_eth_dev *dev;
    struct rte_eth_dev_info dev_info = { .flow_type_rss_offloads = 0, };

    RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
    dev = &rte_eth_devices[port_id];
    rte_eth_dev_info_get(port_id, &dev_info);
    //以下代碼:
    if ((dev_info.flow_type_rss_offloads | rss_conf->rss_hf) !=
        dev_info.flow_type_rss_offloads) {
        RTE_ETHDEV_LOG(ERR,
            "Ethdev port_id=%u invalid rss_hf: 0x%"PRIx64", valid value: 0x%"PRIx64"\n",
            port_id, rss_conf->rss_hf,
            dev_info.flow_type_rss_offloads);
        return -EINVAL;
    }
    RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rss_hash_update, -ENOTSUP);
    return eth_err(port_id, (*dev->dev_ops->rss_hash_update)(dev,
                                rss_conf));
}

而之前的代碼(網上的16.11和我們現在用的2.2),對rss_hf都是很粗粒度的判斷:

int
rte_eth_dev_rss_hash_update(uint8_t port_id, struct rte_eth_rss_conf *rss_conf)
{
	struct rte_eth_dev *dev;
	uint16_t rss_hash_protos;

	RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
	rss_hash_protos = rss_conf->rss_hf;
	if ((rss_hash_protos != 0) &&
	    ((rss_hash_protos & ETH_RSS_PROTO_MASK) == 0)) {
		RTE_PMD_DEBUG_TRACE("Invalid rss_hash_protos=0x%x\n",
				rss_hash_protos);
		return -EINVAL;
	}
	dev = &rte_eth_devices[port_id];
	RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rss_hash_update, -ENOTSUP);
	return (*dev->dev_ops->rss_hash_update)(dev, rss_conf);
}

對每個網卡需要分析支持的RSS支持能力:

可查看網卡白皮書

本章節參考:

https://www.cnblogs.com/yanhai307/p/10608323.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章