NUMA与虚拟化

  

1. NUMA的几个概念(Node,socket,core,thread)

   对于socket,core和thread会有不少文章介绍,这里简单说一下,具体参见下图:

1

    一句话总结:socket就是主板上的CPU插槽; Core就是socket里独立的一组程序执行的硬件单元,比如寄存器,计算单元等; Thread:就是超线程hyperthread的概念,逻辑的执行单元,独立的执行上下文,但是共享core内的寄存器和计算单元。

   NUMA体系结构中多了Node的概念,这个概念其实是用来解决core的分组的问题,具体参见下图来理解(图中的OS CPU可以理解thread,那么core就没有在图中画出),从图中可以看出每个Socket里有两个node,共有4个socket,每个socket 2个node,每个node中有8个thread,总共4(Socket)× 2(Node)× 8 (4core × 2 Thread) = 64个thread。

   另外每个node有自己的内部CPU,总线和内存,同时还可以访问其他node内的内存,NUMA的最大的优势就是可以方便的增加CPU的数量,因为Node内有自己内部总线,所以增加CPU数量可以通过增加Node的数目来实现,如果单纯的增加CPU的数量,会对总线造成很大的压力,所以UMA结构不可能支持很多的核。

2

IOH,IOH=Input Output Hub,也就是传统意义上部分北桥的功能,通过QPI总线与CPU相连,下方使用DMI总线连接南桥ICH芯片,主要负责I/O总线的传输,它同时提供了很多PCI-E 2.0总线连接作为标准的I/O接口。

3

    根据上面提到的,由于每个node内部有自己的CPU总线和内存,所以如果一个虚拟机的vCPU跨不同的Node的话,就会导致一个node中的CPU去访问另外一个node中的内存的情况,这就导致内存访问延迟的增加。在有些特殊场景下,比如NFV环境中,对性能有比较高的要求,就非常需要同一个虚拟机的vCPU尽量被分配到同一个Node中的pCPU上。

而解决这个问题的方法,就是让hypervisor在管理、调度虚拟机时,有意识地根据host的NUMA特性进行资源分配,将同一个虚拟机的所有VCPU尽可能调度到同一个物理处理器上,并且将这个虚拟机的所有“物理内存”尽可能分配在这个物理处理器自身所直接管理的物理内存上。这样,则虚拟机VCPU上运行的计算任务的访存,事实上又变成了物理机上的本地访存,从而有助于提高虚拟机的性能。

4


2018年4月16日 20:45
浏览量:0
收藏
Powered by CloudDream