DPDK 多进程支持总结

DPDK库里是支持多进程和多线程,本文主要总结多进程的相关的操作。

DPDK多进程使用的关键启动参数:

  • --proc-type:指定一个dpdk进程是主进程还是副进程(参数值就用上面的primary或是secondary,或者是auto
  • --file-prefix:允许非合作的进程拥有不同的内存区域。主副进程默认文件路径/var/run/.rte_config,同一个处理组的主副进程使用相同的参数,
    如果想运行多个主进程,
    这个参数就必须指定!
  • --socket-mem:设置从hugepages分配多大的存储空间。默认会用掉所有的hugepages,所以建议指定这个参数,不管是单cpu还是在NUMA中。
    eg:单socket,--socket-mem=512;在numa中,--socket-mem=512,512;多个socket间用‘,’号隔开;

  • -w : 后面跟网卡的PCI号,指定使用网卡。设置了这参数,DPDK只会使用这个参数对应的网卡,不会初始化其他的。

在Multi-process Sample Application中介绍了4种使用场景:

  1. Basic Multi-process Example,DPDK进程间通过ring,内存池,队列,进行信息交互。
  2. Symmetric Multi-process Example,主进程初始化所有资源,副进程直接获取资源进行数据包处理,副进程除了不初始化资源,数据包处理和主进程是一样的。每个进程获取每个端口的一个RX, TX队列。
  3. Client-Server Multi-process Example,主进程初始化资源和接收所有收到的数据包并轮询分发给副进程处理。
  4. Master-slave Multi-process Example,这个模式主要是介绍各进程之间存在依赖关系,主进程和副进程,副进程和副进程之间。

但是根据业务需要,还要支持一种场景,就是在一个服务器里,需要启动多个DPDK主进程(primary),每个DPDK进程绑定一个网卡(可以是VF)。DPDK进程之间没有关系。

假如在单CPU上启动三个DPDK程序,启动参数示例:

#./dpdk -c 1 -n 4 --proc-type=primary --socket-mem=512 --file-prefix=var/run/.test1_config -w 0000:01:00.0
#./dpdk -c 2 -n 4 --proc-type=primary --socket-mem=512 --file-prefix=var/run/.test2_config -w 0000:01:00.1
#./dpdk -c 4 -n 4 --proc-type=primary --socket-mem=512 --file-prefix=var/run/.test3_config -w 0000:01:00.2

在NUMA中(两个CPU)

#./dpdk -c 1 -n 4 --proc-type=primary --socket-mem=512,512 --file-prefix=var/run/.test1_config -w 0000:01:00.0
#./dpdk -c 2 -n 4 --proc-type=primary --socket-mem=512,512 --file-prefix=var/run/.test2_config -w 0000:01:00.1
#./dpdk -c 4 -n 4 --proc-type=primary --socket-mem=512,512 --file-prefix=var/run/.test3_config -w 0000:01:00.2


你可能感兴趣的:(dpdk-18.11)