在DPDK中,多进程支持旨在允许一组DPDK进程以简单的透明方式协同工作,以执行数据包处理或其他工作负载。为了支持此功能,已经对核心的DPDK环境抽象层(EAL)进行了一些增加。
EAL已被修改为允许不同类型的DPDK进程产生,每个DPDK进程在应用程序使用的hugepage内存上具有不同的权限。现在可以指定两种类型的进程:
primary processes, 可以初始化,拥有共享内存的完全权限
secondary processes, 不能初始化共享内存,但可以附加到预初始化的共享内存并在其中创建对象。
独立DPDK进程是primary processes,而secondary processes只能与主进程一起运行,或者主进程已经为其配置了hugepage共享内存。
为了支持这两种进程类型以及稍后描述的其他多进程设置,EAL还提供了两个附加的命令行参数:
–proc-type: 用于将给定的进程实例指定为primary processes或secondary processes DPDK实例。
–file-prefix: 以允许不希望协作具有不同存储器区域的进程。
1.内存共享
使用DPDK的多进程应用程序工作的关键要素是确保内存资源在构成多进程应用程序的进程之间正确共享。一旦存在可以通过多个进程访问的共享存储器块,则诸如进程间通信(IPC)的问题就变得简单得多。
在独立进程或者primary processes启动时,DPDK向内存映射文件中记录其使用的内存配置的详细信息,包括正在使用的hugepages,映射的虚拟地址,存在的内存通道数等。当secondary processes启动时,这些文件被读取,并且EAL在secondary processes中重新创建相同