使用DPDK环与主进程和辅助进程

问题描述 投票:0回答:1

我想要有 2 个

DPDK
进程,主要进程和次要进程。
主节点使用 rte_ring_create() 打开一个
ring
,名称为
myring

现在,辅助设备应该能够使用
ring
打开该
rte_ring_lookup()
的另一侧,如此处
所示
26.1.2.2. How the Application Works

if (rte_eal_process_type() == RTE_PROC_PRIMARY){
    send_ring = rte_ring_create(_PRI_2_SEC, ring_size, rte_socket_id(), flags);
    recv_ring = rte_ring_create(_SEC_2_PRI, ring_size, rte_socket_id(), flags);
    message_pool = rte_mempool_create(_MSG_POOL, pool_size,
            STR_TOKEN_SIZE, pool_cache, priv_data_sz,
            NULL, NULL, NULL, NULL,
            rte_socket_id(), flags);
} else {
    recv_ring = rte_ring_lookup(_PRI_2_SEC);
    send_ring = rte_ring_lookup(_SEC_2_PRI);
    message_pool = rte_mempool_lookup(_MSG_POOL);
}

但是,我希望能够使辅助进程使用

ring
,就像它是常规接口设备一样。
我的意思是,通过 DPDK params,您可以使用
vdev
-a
定义物理端口和
--vdev=...
端口。

我想将

ring
myring
作为
DPDK
参数,如here:

./dpdk-testpmd -l 1-3 -n 4 --vdev=net_ring0 --vdev=net_ring1 -- -i

只是,使用

--vdev=net_ringmyring

我还尝试在创建环时调用环,在主要过程中:
net_ring_myring

似乎没有任何作用。
在辅助过程中,我收到如下错误:

Device net_ring_myring is not driven by the primary process
rte_pmd_ring_probe(): Failed to probe net_ring_myring
vdev_probe(): failed to initialize net_ring_myring device
EAL: Bus (vdev) probe failed.
c linux network-programming dpdk
1个回答
0
投票

从外观上看,在辅助进程中观察到的错误可能来自

rte_eth_dev_attach_secondary
,这表明在辅助进程中创建环形设备可能不正确:它只能附加到 ethdev 在第一个创建。

此外,假设

--vdev=net_ringmyring
可用于传递一些实际的环名称来代替
myring
部分,这很可能是错误的:这是一个不可分割的名称,已分配给辅助进程正在尝试的设备附加到。

作为一个快速建议,也许值得在主进程中创建环形设备,如下所示 struct rte_ring *r_0, *r_1; unsigned int flags = 0; unsigned int sz = 1024; r_0 = rte_ring_create("r_0", sz, rte_socket_id(), flags); r_1 = rte_ring_create("r_1", sz, rte_socket_id(), flags); (void)rte_eth_from_rings("net_ring0", &r_0, 1, &r_1, 1, rte_socket_id());

并且,也在主进程中,根据 OP 的判断,实现与环直接交互的所有逻辑,同时 
在辅助进程中

附加到设备并利用常规 ethdev API(例如如 rte_eth_rx_burst

rte_eth_tx_burst
)进行交互交通:
uint16_t port_id; (void)rte_eal_hotplug_add("vdev", "net_ring0", ""); (void)rte_eth_dev_get_port_by_name("net_ring0", &port_id); /* (set up the port) */ /* (interact with packet receive and transmit APIs, etc) */

对于辅助流程,也可以使用一些现有工具(如 
test-pmd

)并通过传递 EAL 参数进行附加(--vdev,如 OP 中已描述)。这也值得检查。

    

© www.soinside.com 2019 - 2024. All rights reserved.