问题
DPDK是解决报文快速转发的组件(库)
CPU调度线程,是影响报文快速转发的一个原因。
操作系统会调度线程,也就是在CPU间调度调度需要执行的线程。
这样会有以下几点影响性能:
1、 调度本身,需要内核进行线程上下文的切换,切换过程消耗性能
2、 线程变调度不再RUNNING状态,线程不再执行,影响性能
3、 线程被切换,指令的流水线被打断,即使恢复RUNNING,需要重新执行
4、 线程被切换,cache的数据不再有效,影响性能
DPDK的解决方案
DPDK运行在用户态。
DPDK将用户态线程绑定到特定的core上,不再被操作系统调度。
DPDK为每个线程分配一定数量的专有cache,线程独享。
DPDK如何绑定到core
EAL在初始化的时候,将线程分别绑定到特定的core上。
DPDK入参会设置core的个数,比如
“-c 7”,代表三个core,十进制7,二进制是0b111,默认是指core0、core1、core2。
EAL在启动时候,会把线程分为主线程和从线程。EAL初始化分别将线程绑定到core上
主线程绑定在函数eal_th