DPDK基本技术二

来源:互联网 发布:win7开机windows后黑屏 编辑:程序博客网 时间:2024/05/01 02:23

CPU的物理核,逻辑核概念
一个物理封装的CPU(通过physical id区分判断)可以有多个核(通过core id区分判断)。而每个核可以有多个逻辑cpu(通过processor区分判断)。一个核通过多个逻辑cpu实现这个核自己的超线程技术。

物理处理器封装个数:
sockets, 中文翻译成“插槽”,也就是所谓的物理处理器封装个数,即俗称的“物理CPU数”,管理员可能会称之为“路”。例如一块“Intel Core i3-2310M”只有1个“物理处理器封装个数”。若对于有多个处理器插槽的服务器,“物理处理器封装个数”很可能会大于1。可以使用如下命令查询物理处理器的封装个数:

cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc –l

或者使用

lscpu | grep "CPU socket"(lscpu可以看到很多cat /proc/cpuinfo看不到的东西,建议使用)

处理器核心数
processor cores,即俗称的“CPU核心数”,也就是每个物理CPU中core的个数
例如“Intel Core i3-2310M”是双核处理器,它有2个“处理器核心数”。
可以通过以下的命令来查看:

cat /proc/cpuinfo| grep "cpu cores"| uniq

注意:

  • 具有相同physical id的CPU是同一个CPU封装的线程或核心
  • 具有相同core id的CPU是同一个core的超线程

逻辑处理器
逻辑处理器数英文名是logical processors,即俗称的“逻辑CPU数”,,逻辑核心处理器,就是虚拟物理核心处理器的一个超线程技术,例如“Intel Core i3-2310M”支持超线程,一个物理核心能模拟为两个逻辑处理器,即一块“Intel Core i3-2310M”有4个“逻辑处理器数”。可以使用如下命令查看:

cat /proc/cpuinfo| grep "processor"| wc –l

SIBLING:
SIBLING是内核认为的单个物理处理器所有的超线程个数,也就是一个物理封装中的逻辑核的个数。如果SIBLING等于实际物理核数的话,就说明没有启动超线程,反之启用超线程。也就是说使用cat /proc/cpu命令查看时:

  • 如果“siblings”和“cpu cores”一致,则说明不支持超线程,或者超线程未打开。
  • 如果“siblings”是“cpu cores”的两倍,则说明支持超线程,并且超线程已打开

超线程:
超线程全名为Hyper-Threading,利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的运行速度。采用超线程即是可在同一时间里,应用程序可以使用芯片的不同部分。
虽然单线程芯片每秒钟能够处理成千上万条指令,但是在任一时刻只能够对一条指令进行操作。而超线程技术可以使芯片同时进行多线程处理,使芯片性能得到提升。
虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的CPU那样,每个CPU都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。因此超线程的性能并不等于两颗CPU的性能。
如果有两个逻辑CPU具有相同的“core id”,那么超线程是打开的。

CPU亲和性:
CPU的亲和性也就是cpu affinity机制,指的是进程要在指定的 CPU 上尽量长时间地运行而不被迁移到其他处理器, 通过处理器关联可以将虚拟处理器映射到一个或多个物理处理器上 , 也就是说把一个程序绑定到一个物理CPU上。

在越来越多核心的cpu机器上,如何提高外设以及程序工作效率的最直观想法就是让各个cpu核心各自干专门的事情。而且在多核运行的机器上,每个CPU本身自己会有缓存,缓存着进程使用的信息,而进程可能会被OS调度到其他CPU上,如此,CPU cache命中率就低了,当绑定CPU后,程序就会一直在指定的cpu跑,不会由操作系统调度到其他CPU上,性能有一定的提高。

另外一种使用绑核考虑就是将重要的业务进程隔离开,对于部分实时进程调度优先级高,可以将其绑定到一个指定核上,既可以保证实时进程的调度,也可以避免其他CPU上进程被该实时进程干扰。DPDK利用cpu affinity主要是将控制面线程以及各个数据面线程绑定到不同的cpu,省却了来回反复调度的性能消耗,线程之间互不干扰的完成工作。