在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中重新创建相同的内存配置,以便所有内存区域在进程之间共享,并且所有指向该内存的指针都是有效的,并且指向相同的对象。
DPDK多进程示例应用程序中的内存共享如下图所示:

EAL还支持自动检测模式(由EAL -proc-type = auto标志设置),如果主实例已经在运行,则DPDK进程作为辅助实例启动。

2.部署模式

2.1对称/对等进程

DPDK多进程支持可用于创建一组对等进程,每个进程执行相同的工作负载。该模型相当于具有多个线程,每个线程都运行相同的主循环功能,如大多数提供的DPDK示例应用程序中所完成的一样。 在此模型中,应使用–proc-type = primary EAL标志生成第一个生成的进程,而所有后续实例都应使用–proc-type = secondary标志生成。

2.2非对称/非对等进程

可用于多进程应用程序的替代部署模型是具有单个primary process实例,充当负载均衡器或distributor,在作为secondary processes运行的worker或客户机线程之间分发接收到的数据包。在这种情况下,广泛使用rte_ring对象,它们位于共享的hugepage内存中。

2.3运行多个独立的DPDK应用程序

除了涉及多个DPDK进程的上述情况之外,可以并行运行多个DPDK进程,这些进程都可以独立工作。使用EAL的–file-prefix参数提供对此使用场景的支持。

默认情况下,EAL使用rtemap_X文件名在每个hugetlbfs文件系统上创建hugepage文件,其中X的范围为0到最大的hugepages -1。同样,当以root身份运行(或以非root用户身份运行时为$ HOME / .rte_config),如果文件系统和设备权限为空,则会在每个进程中使用/var/run/.rte_config文件名创建共享配置文件)。以上每个文件名的部分可以使用file-prefix参数进行配置。

除了指定file-prefix参数外,并行运行的任何DPDK应用程序都必须明确限制其内存使用。这通过将-m标志传递给每个进程来指定每个进程可以使用多少hugepage内存(以兆字节为单位)(或通过–socket-mem来指定每个进程可以使用每个套接字的多少hugepage内存)。

2.4运行多个独立的DPDK应用程序组

以同样的方式,可以在单个系统上并行运行独立的DPDK应用程序,这也可以简单地扩展到并行运行DPDK应用程序的多进程组。在这种情况下,secondary processes必须使用与其共享内存连接的primary process相同的–file-prefix参数。

3.多进程限制

运行DPDK多进程应用程序时存在一些限制。其中一些记录如下:
多进程功能要求在所有应用程序中都存在完全相同的hugepage内存映射。Linux安全功能,地址空间布局随机化(ASLR)可能会干扰此映射,因此可能需要禁用此功能才能可靠地运行多进程应用程序。

作为单个应用程序运行并使用共享内存的所有DPDK进程必须具有不同的coremask /corelist参数。任何相同的逻辑内核不可能拥有primary和secondary实例或两个secondary实例。尝试这样做可能会导致内存池缓存的损坏等问题。

中断的传递,如Ethernet设备链路状态中断,在secondary process中不起作用。所有中断仅在primary process内触发。在多个进程中需要中断通知的任何应用程序都应提供自己的机制,将中断信息从primary process转移到需要该信息的任何secondary process。

不支持使用基于不同编译二进制文件运行的多个进程之间的函数指针,因为在一个进程中给定函数的位置可能与其中一个进程的位置不同。这样可以防止librte_hash库在多线程实例中正常运行,因为它在内部使用了一个指向散列函数的指针。

要解决此问题,建议多进程应用程序通过直接从代码中调用散列函数,然后使用rte_hash_add_with_hash()/rte_hash_lookup_with_hash()函数来执行哈希计算,而不是内部执行散列的函数,例如rte_hash_add()/rte_hash_lookup()。

根据所使用的硬件和所使用的DPDK进程的数量,可能无法在每个DPDK实例中都使用HPET定时器。可用于Linux 用户空间的HPET comparators的最小数量可能只有一个,这意味着只有第一个primary DPDK进程实例可以打开和mmap/dev/hpet。如果所需DPDK进程的数量超过可用的HPETcomparators数量,则必须使用TSC(此版本中的默认计时器)而不是HPET。

DPDK学习(二)DPDK多进程支持相关推荐

  1. DPDK学习(一)DPDK简介

    1.DPDK介绍 Intel® DPDK 全称 Intel Data Plane Development Kit,是intel提供的数据平面开发工具集,为Intel architecture(IA)处 ...

  2. 深入浅出DPDK学习笔记(3)——— Cache和内存

    深入浅出DPDK学习笔记(3)--- Cache和内存 系统架构的演进 Cache系统简介 Cache的种类 TLB Cache Cache地址映射和变换 全关联型Cache 直接关联型Cache 组 ...

  3. 深入浅出DPDK学习笔记——认识DPDK

    什么是DPDK? 对于用户来说, 它可能是一个性能出色的包数据处理加速软件库: 对于开发者来说, 它可能是一个实践包处理新想法的创新工场: 对于性能调优者来说, 它可能又是一个绝佳的成果分享平台.当下 ...

  4. WCF学习之旅—实现支持REST客户端应用(二十四)

    WCF学习之旅-实现REST服务(二十二) WCF学习之旅-实现支持REST服务端应用(二十三) 在上二篇文章中简单介绍了一下RestFul与WCF支持RestFul所提供的方法,及创建一个支持RES ...

  5. MLNX 网卡 dpdk 适配与dpdk最大队列支持

    MLNX 网卡 dpdk 适配 环境 dpdk 版本: dpdk-stable-18.02.1 MLNX 版本: 4.7 下载驱动 https://network.nvidia.com/product ...

  6. DPDK系列之三DPDK介绍及简单应用

    一.DPDK介绍 提起DPDK,需要先回顾一下网络的发展.最初的网络的出现是从美国军方的局域网发展起来的,从一开始,网络的应用并没有现在这么复杂,数据传输量也没有现在这么巨大.更不要提现在什么高清.3 ...

  7. 【网络】DPDK的基本原理|DPDK和RDMA的区别

    目录 DPDK和RDMA的区别 DPDK RDMA 总结 DPDK的基本原理 RDMA的基本原理 作者bandaoyu,本文随时更新,原地址:https://blog.csdn.net/bandaoy ...

  8. DPDK — PMD,DPDK 的核心优化

    目录 文章目录 目录 前文列表 PMD,DPDK 的核心优化 PMD 与 UIP 的交互实现 PMD 的应用层实现 参考文章 前文列表 <DPDK - 安装部署> <DPDK - 数 ...

  9. spring security 学习二

    spring security 学习二 doc:https://docs.spring.io/spring-security/site/docs/ 基于表单的认证(个性化认证流程): 一.自定义登录页 ...

最新文章

  1. CentOS7 Change the Sources of yum(刚装完centos后一定要干的事)
  2. WEB 实时推送技术总结
  3. 利用网站模板创建子网站
  4. 使用 dynamic 类型让 ASP.NET Core 实现 HATEOAS 结构的 RESTful API
  5. 可执行程序加载到内存的过程
  6. memcpy执行效率测试,无效测试
  7. Adobe Acrobat 高亮工具使用后无法显示文字Bug解决办法
  8. iOS 全屏侧滑/UIScrollView/UISlider间滑动冲突
  9. scrapy数据存储在mysql数据库的两种方式
  10. 稚晖君教你制作全球最迷你的自平衡机器人
  11. 南通市城管局推动“数字化城管”向“智慧城管”升级
  12. 计算机在语文教学中,计算机课件在语文课堂教学中的应用——用Powerpoint制作课件的一点体会(网友来稿)...
  13. 如果把编程语言比作武器
  14. 鸡先还是蛋先,当然有答案
  15. ios开发---URL Schemes 使用详解-app协议
  16. 我的C盘满了 如何清理一下
  17. 8000字34张图史诗级介绍同轴电缆、双绞线、光纤等线缆,超级详细!
  18. MYSQL跨库查询的优缺点
  19. 系统安装,UltraISO制作U盘系统安装盘
  20. ERROR: The executable E:\路径名称\Scripts\python2.exe is not functioning

热门文章

  1. 怎么用计算机把浓度转换成PH,知道PH值,怎么用科学计算器算氢离子浓度,怎样用计算器将PH值转换为浓度...
  2. Ford_Fulkerson算法
  3. SPI 读取不同长度 寄存器_正点原子Linux第二十七章SPI实验
  4. Python+PyQt5实现五子棋游戏(人机博弈+深搜+α-β剪枝)
  5. 《Python语言程序设计》王恺 机械工业出版社 第二章课后习题答案
  6. 平滑过渡的战争迷雾(二) 实现:真正的迷雾来了
  7. linux程序设计基础——概述,3.linux程序设计基础—vi使用
  8. Special Weekly | 瑞兔送福,Live Long and Prosper
  9. decent descent descend descendant
  10. 华为手机的备忘录有定时提醒的功能吗 华为手机备忘录便签提醒教程