一、背景
凡是接触虚拟化技术的小伙伴肯定对“NUMA”这个词不陌生,今天我们就来学习下NUMA技术原理,以及在超融合上如何使用NUMA。
二、what is NUMA? 以下来自百度百科:“非统一内存访问(Non Uniform Memory Access Architecture)是一种用于多处理器的电脑记忆体设计,内存访问时间取决于处理器的内存位置。 在NUMA下,处理器访问它自己的本地存储器的速度比非本地存储器(存储器的地方到另一个处理器之间共享的处理器或存储器)快一些。” 我们都知道目前主流的服务器都是多路CPU的,如图所示,有四个CPU。对于这种架构的物理CPU(节点), 和自己直接连接的内存称为本地内存,而连接在其他物理CPU(节点)的内存称为远地内存。 物理CPU访问远地内存时候要通过QPI间接访问,所以相对访问本地内存而言存在一定的延时。同理每一个CPU(节点)都有自己的PCIE设备(本地IO资源),和内存相似,远地访问PCIE设备相对访问本地PCIE设备存在延时。
虚拟机NUMA就是把QEMU模拟出的虚拟节点,绑定在某颗物理CPU上,对应的内存同样绑定在该CPU的本地内存,使其与物理架构相对应,在物理上也尽可能地使CPU访问本地内存,这样我们可以认为虚拟机能够识别服务器numa拓扑 具体的优化方式如下: vCPU数如果比一颗物理CPU的核数少,那么这个虚拟节点就会绑在一颗物理CPU上。 vCPU数如果比一颗物理CPU的核数多,那么就会平分开,然后绑在多个物理CPU上。 通过优化的调度算法,使虚拟节点的NUMA绑定都是保持性能最佳的状态。
三、应用场景 1、虚拟机NUMA的应用 内存访问旺盛的业务,NUMA能帮助大幅度提高性能!!!如需要大量吃内存的数据库服务(Oracle、SQL Server)、编译服务等。内存访问频繁的场景,开启NUMA,计算性能提高7%~30% 2、CPU需求密集的小应用,开启NUMA会影响一些性能,由于我们超融合一体机原本的CPU性能充足,开启NUMA造成的损失并不足以影响到业务,所以大部分应用无须考虑该问题。 |