DPDK之CPU初始化过程总结


风晓
风晓 2024-01-05 10:36:40 49936 赞同 0 反对 0
分类: 资源
本文基于DPDK-17.05.2分析总结

 

函数调用过程:

Main----rte_eal_init----rte_eal_cpu_init----eal_cpu_detected
                               -----eal_cpu_core_id
                               -----eal_cpu_socket_id

CPU探测:
以RTE_MAX_LCORE循环进入/sys/devices/system/cpu/cpu目录判断CPU是否在位并赋值给全局数组lcore_config[lcore_id].detected,,若在位则赋值&rte_config->lcore_role[lcore_id]=
ROLE_RTE使能,不在位则赋值为ROLE_OFF;
#define RTE_MAX_LCORE 128
#define RTE_MAX_NUMA_NODES 8

取出/sys/devices/system/cpu/cpu x/topology/core_id相应的core_id,进入/sys/devices/system/node/node0/cpu x返回socket_id,并保存在lcore_config[RTE_MAX_LCORE]全局数组中,如下:

 

 


CPU核绑定:
目的:增加CPU缓存的命中率
CPU之间是不共享缓存的,如果进程频繁的在各个CPU间进行切换,需要不断的使旧CPU的cache失效。如果进程只在某个CPU上执行,则不会出现失效的情况。在多个线程操作的是相同的数据的情况下,如果把这些线程调度到一个处理器上,大大的增加了CPU缓存的命中率。但是可能会导致并发性能的降低。如果这些线程是串行的,则没有这个影响。
dpdk启动时会建立会分析系统的逻辑核属性建立映射表并统一管理,每个核主要属性如下.
每个核属性包括逻辑核id,硬核id,numa节点id。dpdk会根据系统默认状态生成一一绑定的映射表,用户可以根据需求更改映射表,后续dpdk框架会根据该映射表进行核绑定。

 

多核调度框架
1)服务器启动时选取一个逻辑核做主核
2)然后启动其他核做从核
3)所有线程都根据映射表做核绑定
4)控制核主要完成pci,内存,日志等系统的初始化
5)从核启动后等待主核初始化完毕后挂载业务处理入口
6)从核运行业务代码
为每一个SLAVE核创建线程,并调用eal_thread_set_affinity()绑定cpu。线程的执行体是eal_thread_loop()。eal_thread_loop()的主体是一个while死循环,调用不同模块注册到lcore_config[lcore_id].f的回调函数。
不同的模块需要调用rte_eal_mp_remote_launch(),将自己的回调处理函数注册到lcore_config[].f中。以l2fwd为例,注册的回调处理函数是l2fwd_launch_on_lcore()。

DPDK每个核上的线程最终会调用eal_thread_loop()----l2fwd_launch_on_lcore(),调用到自己实现的处理函数。
lcore指的是EAL线程,就是一个真正的linux/freeBSD线程。EAL创建和管理eal线程,且通过remote_launch来实现任务分配。在每个EAL线程中,有一个称为_lcore_id TLS是线程的独一无二的id。一般EAL线程使用1:1来绑定物理cpu,_lcore_id通常等于CPU id。
当使用多线程时,绑定不再在线程和指定物理cpu之间总是1:1,EAL线程设为对cpu集的亲和性,而_lcore_id不再和CPU id一样。因为这个,有一个EAL选项-lcores,设置lcore的cpu亲和性。对于指定lcore ID或者是ID组,这个选项允许对EAL线程设置CPU集。
格式模板:-lcores=lcores=’<lcore_set>[@cpu_set][,<lcore_set>[@cpu_set],…]’
lcore_set 和cpu_set可以是一个数,范围或者是组。数必须是“digit([0-9]+)”,范围则是“-”,组则是“(<number|range>[,<number|range>,…])”。
如果@cpu_set的值没有提供,则默认将其设为lcore_set相同的值。

 

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
风晓L1
粉丝 1 资源 2038 + 关注 私信
最近热门资源
银河麒麟桌面操作系统备份用户数据  130
统信桌面专业版【全盘安装UOS系统】介绍  129
银河麒麟桌面操作系统安装佳能打印机驱动方法  120
银河麒麟桌面操作系统 V10-SP1用户密码修改  108
麒麟系统连接打印机常见问题及解决方法  30
最近下载排行榜
银河麒麟桌面操作系统备份用户数据 0
统信桌面专业版【全盘安装UOS系统】介绍 0
银河麒麟桌面操作系统安装佳能打印机驱动方法 0
银河麒麟桌面操作系统 V10-SP1用户密码修改 0
麒麟系统连接打印机常见问题及解决方法 0
作者收入月榜
1

prtyaa 收益393.62元

2

zlj141319 收益218元

3

1843880570 收益214.2元

4

IT-feng 收益210.13元

5

风晓 收益208.24元

6

777 收益172.71元

7

Fhawking 收益106.6元

8

信创来了 收益105.84元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!