首页 > 系统相关 > DPDK-22.11.2 [五] 多进程

DPDK-22.11.2 [五] 多进程

时间:2023-10-13 15:22:06浏览次数:43  
标签:大页 -- 22.11 内存 使用 进程 DPDK dpdk

dpdk支持多进程运行,不过要指定参数打开,如果没有设定,但开启第二个dpdk程序是会报错,告诉你相关系统资源被占用。

EAL: Cannot create lock on '/var/run/dpdk/rte/config'. Is another primary process running?
EAL: FATAL: Cannot init config
EAL: Cannot init config

dpdk有两种进程类型

  • primary processes 主进程 初始化,对共享内存有所有权限
  • secondary processes 子进程 不能初始化共享内存,可以附加到一个已经初始化的共享内存

多进程需要的参数

  • --proc-type 指定是主进程还是子进程,参数可选是primary/secondary/auto。auto表示,如果已经有主进程开启,那么就会把新的进程当作子进程
  • --file-prefix 指定进程使用不同的内存

使用dpdk多进程,必须是同一dpdk版本编译的程序。

内存共享

当开启多进程后,就多了一些IPC进程间通信的问题需要注意。

如果主进程使用了--legacy-mem或者--single-file-segments参数,那么子进程也必须使用相同的参数。

部署方式

对等模式

这个就相当于把原来dpdk多个线程的模式,改成了多个进程,启动主进程,初始化好数据,然后开启多个子进程,分别接收对应端口的数据。并且主进程与子进程是对等的。

不对等模式

一个主进程,用来做负载均衡,把数据发送到其他线程或者子进程。这个会大量用到rte_ring,ret_ring存在于共享大页内存上。

多个独立的dpdk程序

指定--file-prefix,可以让dpdk运行在相互独立的模式。在相互独立模式下,每个网口都是独立隔离的,不同dpdk之间不可以相互使用,一个网口被一个dpdk程序使用后,就无法被其他dpdk程序使用。

dpdk运行的一些配置信息保存在一个目录中,如果设定了\(RUNTIME_DIRECTORY,那么就保存在\)RUNTIME_DIRECTORY/dpdk目录中。如果没有设定,如果dpdk是root用户运行的,那么就存在/var/run/dpdk中,不然就存在/tmp/dpdk或者$XDG_RUNTIME_DIRECTORY/dpdk中。

ls /var/run/dpdk/rte 
config  dpdk_telemetry.v2  fbarray_memseg-1048576k-0-0  fbarray_memseg-1048576k-0-1  fbarray_memseg-1048576k-1-0  fbarray_memseg-1048576k-1-1  fbarray_memzone  hugepage_info  mp_socket

大页内存文件保存在系统的hugetlbfs中,名字是rtemap_X,X范围是0到大页内存最大数量减一。

ls /dev/hugepages/
libvirt  rtemap_16384

正常情况,会为每个进程创建共享配置文件和内存映射文件,文件名是.rte_config。

上面提到的rte相关的文件名都由file-prefix参数指定。

这种模式下,每个dpdk进程都必须限制对大页内存的使用数量,只能分配自己需要的大小。如果使用--legacy-mem参数,dpdk就会分配所有的大页内存。可以使用-m每个进程使用设定多少MB的大页内存,也可以使用--socket-mem设定每个进程每个socket可以使用多少大页内存。

运行多组相互独立的dpdk

这个的意思就是有多个dpdk程序,但是有一些是同一组,另一些是单独的一组。这样的话需要子进程使用指定--file-prefix同一组dpdk创建的共享内存。

多进程dpdk的注意事项

  • dpdk多进程需要共享大页内存完全匹配,这样对子进程启动有着不可控的风险。
  • 所有的dpdk进程都要运行在不同的cpu core上。如果两个示例运行在同一个逻辑core上,会导致内存池缓冲区损坏等问题。
  • 所有的中断,比如网卡设备链接状态,在子进程都不起作用。需要自己维护传递相关信息。
  • 不同编译二进制的函数指针,在不同的进程间是无法使用的。a second. This prevents the librte_hash library from behaving properly as in a multi-process instance, since it uses a pointer to the hash function internally.

多进程间通信

dpdk提供了用于进程间通信的api

https://doc.dpdk.org/guides-22.11/prog_guide/multi_proc_support.html
http://doc.dpdk.org/guides-22.11/sample_app_ug/multi_process.html

标签:大页,--,22.11,内存,使用,进程,DPDK,dpdk
From: https://www.cnblogs.com/studywithallofyou/p/17761847.html

相关文章

  • dpdk
    dpdk环境适配dpdk22.114.19.90-24.4.v2101.ky10.x86_64指导文档2.SystemRequirements—DataPlaneDevelopmentKit22.11.1documentation(dpdk.org)RequiredToolsandLibrariesdnfgroupinstall"DevelopmentTools"yuminstall--assumeyespython3-pippi......
  • 云服务测试DPDK
    一、DPDK的系统要求1.1x86上的BIOS的设置先决条件1.1.1 对于大多数平台,不需要特殊的BIOS设置即可使用基本的DPDK功能;1.1.2为了获得额外的HPET定时器和电源管理功能以及小数据包的高性能,可能需要更改BIOS设置;1.2DPDK编译(Ubuntu22.04)......
  • Linux脚本内开异步进程和终端开异步进程区别
    sleep.sh内容sleep1000&echo$!脚本内开异步进程是1号进程的子进程终端开异步进程是当前bash进程的子进程在关闭终端后该异步进程会停止停止终端时想要继续执行,使用nohupsleep1000&,刚开始是终端bash进程的子进程,在终端停止后会变成1号进程的子进程。......
  • Kubernetes:根据进程 Pid 获取 Pod 名称
    前言在管理Kubernetes集群的过程中,我们经常会遇到这样一种情况:在某台节点上发现某个进程资源占用量很高,却又不知道是哪个容器里的进程。有没有办法可以根据进程PID快速找到Pod名称呢?解决假设现在有一个prometheus进程的PID是14338:要获取容器的ID,可以查看PID对应......
  • HarmonyOS跨进程通信—IPC与RPC通信开发指导
    HarmonyOS跨进程通信—IPC与RPC通信开发指导一、IPC与RPC通信概述基本概念IPC(Inter-ProcessCommunication)与RPC(RemoteProcedureCall)用于实现跨进程通信,不同的是前者使用Binder驱动,用于设备内的跨进程通信,后者使用软总线驱动,用于跨设备跨进程通信。需要跨进程通信的原因是因为......
  • 对于ogg19 mysql 中如果mysql中存在json数据类型,进程会abend问题报错信息 OGG-00774
    对于ogg19mysql是不支持json的这个数据类型还是比较常见的,这个数据类型是在ogg21才开始支持,对于这种报错可以打补丁进行修复Bug29998662:MySQLExtractAbendsWithoutErrorwithJSONdatatypesinbinlog 参考自:MySQLExtractAbendsWithoutErrorWithJSONDataT......
  • 简单 webapi 登录成功就返回 电脑的进程信息·
    ///<summary>///如果登录成功就返回电脑的进程信息///</summary>///<returns></returns>[HttpPost]publicLoginResponseLogin(LoginRequestreq){if(req.UserName=="admin"&......
  • DPDK-22.11.2 [四] Virtio_user as Exception Path
    因为dpdk是把网卡操作全部拿到用户层,与原生系统驱动不再兼容,所以被dpdk接管的网卡从系统层面(ipa/ifconfig)无法看到,同样数据也不再经过系统内核。如果想把数据再发送到系统,就要用到virtiouser。这种把数据从dpdk再发送到内核的步骤,就叫做exceptionpath。有关virtiouser,又有一......
  • windows查询进程启动时间
    1.打开运行输入"msinfo32" 2.选择"软件环境"再点击"正在运行任务"即可看到正在运行的进程的启动时间如下所示 ......
  • 操作系统(7)---进程通信、进程互斥
    一、进程通信进程通信是进程之间的信息交换。主要有三种方式:管道通信e.gps-aux|grepexp(左边只能写,右边只能读,半双工管道,管道在内核)管道的实质是一个用于连接读写进程的一个共享文件,固定大小的缓冲区。数据一旦被读出,则从管道中丢弃。没写满不读,没读空不写。......