0. 引言
因为手上一个项目是网卡模拟器, 因此需要在rx_ring, tx_ring中写东西模拟网卡的收发功能。之前尝试使用物理地址完全解耦, 但是发现该种方案需要大量映射, 性能很差, 大概是发包仪的 1/2。遂采用主从进程的方式直接对上层设备句柄进行操作来模拟。
1. dpdk 主从进程实现原理
如上图所示, 所有的dpdk程序都会使用hugepage作为存储全局变量的位置。这意味着在primary进程所使用的全局变量在secondary可以直接获取。这就是主从进程实现共享变量的原理。
2. 驱动层从进程的支持
每次启动dpdk程序, dpdk对设备进行探测, 这里以vdev
为例。
vdev.c
dpdk启动时会对vdev进行一次探测
static int
vdev_probe_all_drivers(struct rte_vdev_device *dev)
{
...
name = rte_vdev_device_name(dev);
VDEV_LOG(DEBUG