DPDK網卡設備概念


DPDK網卡初始化流程中涉及的幾個對象

port

端口對象,例如一個pcie網卡

rx_queue/tx_queue

端口收發隊列對象
多核環境下,端口收到包后可指定響應的cpu來處理這個包。
通過增加收發隊列,根據五元組哈希分配處理的core,實現計算資源的初步負載均衡
每個端口進來的包通過rss模塊計算hash后,發送到對應cpu的queue上等待處理

tx_desc/rx_desc

網卡驅動中收發dma的隊列數量。
收發desc中描述了dma收發需要的信息,如源/目的地址、長度等

相關API

根據設備名稱獲取端口號

int
rte_eth_dev_get_port_by_name(const char *name, uint16_t *port_id)

驅動probe階段識別到網卡后,層層深入調用到rte_eth_dev_allocate,從rte_eth_devices數組中分配一個未使用的結構
后續API中的port_id其實訪問的就是rte_eth_devices[port_id]

設置端口的收發隊列數量,以及端口參數

int rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_queue,
		uint16_t nb_tx_queue, const struct rte_eth_conf *eth_conf);

nb_rx_queue/nb_tx_queue配置依據:收發包處理的core數量

設置端口接收隊列。rte_eth_dev_info_get可以獲取rx_conf的默認配置

int rte_eth_rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
		uint16_t nb_rx_desc, unsigned int socket_id,
		const struct rte_eth_rxconf *rx_conf,
		struct rte_mempool *mb_pool);

nb_rx_desc配置依據:網卡硬件,不能超過mb_pool中ring的數量
mb_pool:網卡->驅動接收包時分配的內存池

設置端口發送隊列。rte_eth_dev_info_get可以獲取tx_conf的默認配置

int rte_eth_tx_queue_setup(uint16_t port_id, uint16_t tx_queue_id,
		uint16_t nb_tx_desc, unsigned int socket_id,
		const struct rte_eth_txconf *tx_conf);

nb_tx_desc配置依據:網卡硬件

每張網卡的tx/rx descriptor是確定的,所有port的隊列共享這些descriptor
rte_eth_rx_queue_setup和rte_eth_tx_queue_setup允許具體分配每個隊列占用的descriptor數量,初步實現基於隊列的Qos


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM