DPDK是运行在linux用户面的程序,支持多线程。
线程个数通过启动入参确定
比如“-c 7”
代表可以运行3个线程,十进制的7,相当于二进制的0b111,三个1代表三个线程。
EAL的线程初始化
EAL初始化时候,对线程进行初始化。
在初始化的时候,线程分为主线程和从线程,主线程负责资源的初始化,从线程共享这些资源。
EAL里的主线程和从线程并不是真正执行的业务线程,而是仅仅为了初始化而创建的一模型线程,为了便于线程资源的创建。
真正执行的业务线程会在EAL初始化后再创建。
EAL初始化会创建线程间通信用的pipe通道。
有了模型线程和pipe,线程间可以在初始化阶段相互通信,确保资源初始化能够线程间同步。保证主线程和从线程处于正确的状态。
入上图,显示了主线程和从线程初始化阶段的同步示意图。
EAL对线程初始化的工作:
1、 绑定主线程的lcore
2、 对从线程依次创建pipe通道,同步用
3、 创建从线程
4、 将从线程绑定到lcore
5、 从线程等待主线程的pipe消息
6、 从线程给主线程回响应
7、 主线程收集所有从线程响应