NUMA架构vSphere CPU调度策略介绍

8 Krypton

NUMA架构vSphere CPU调度策略介绍

NUMA架构vSphere CPU调度策略介绍

转载请在文首保留原文出处:EMC中文支持论坛 - https://community.emc.com/go/chinese

介绍

本文主要为大家介绍VMware vSphere 5.1 CPU调度的NUMA支持。主要内容有NUMA背景知识、vSphere NUMA相关概念、NUMA迁移、vNUMA、虚拟机CPU配置注意事项。

更多信息

什么是NUMA

NUMA是一种计算机内存访问方式,与之相关概念还有UPSMPUMA

计算机经历从一个CPU到多个CPU的发展经历。对于单个CPU架构,我们通常称之为UPuniprocessor);SMPSymmetric multiprocessing)是我们常见的多CPU架构。现在市面上流通的CPU基本都是SMP架构。随着计算机CPU个数越来越多,CPU对内容访问方式也对应发生变化。计算机内存访问方式主要有两种:UMA(Unified Memory Access)NUMA(Non- Unified Memory Access)

UMA架构,所有CPU共享内存。不同CPU内容访问延迟和带宽都是相等的。UP架构和早期SMP架构(早期SMP架构内存控制器集成在北桥芯片,多个CPU通过FSB(Front-side Bus)访问内存。)都属于典型的UMA架构。

NUMA架构,每个CPU都自带内存;不同CPU内存通过其他方式(比如:intelQPIamdHyperTransport)可以互相访问。不同CPU不同内存访问延迟和带宽不相同。随着计算机CPU个数越来越多,对内存要求也相应增加,早期SMP架构基于FSB内存共享方式的扩展性收到严重挑战。后来amdintel都在CPU内部集成内存控制器。不同CPU之间通过特定总线技术完成连接。NUMA架构内存分两种类型:一种是直接与CPU集成内存控制器连接;另外一种是内存与其他CPU直接连接,需要通过特定总线访问。对于这两种不同类型内存访问,延迟和带宽都不相同。为了提升NUMA架构性能,操作系统和应用程序都需要做相对应的优化。尽可能保证内存访问都发生在本地。

vSphere相关NUMA概念

vSphere 5.1 CPU调度模块针对NUMA架构做专门优化。为方便了解其调度原理,讨论vSphereNUMA支持主要包含以下三种主要概念:

NUMA客户端

vSphere为虚拟机分配的内存和CPU资源集合。一个虚拟机可以有一个或者多个NUMA客户端。

NUMA节点

一个完整插槽CPU及附带的内存。NUMA节点为NUMA客户端提供CPU和内存资源,NUMA客户端可以在NUMA节点之前切换。

家目录节点

虚拟机启动过程,vSphereNUMA客户端分配的NUMA节点叫家目录节点。NUMA客户端的内存资源优先从家目录节点分配,在不能满足情况下从别的节点访问。vSphere会自动根据NUMA客户端访问情况确定是否需要将NUMA客户端迁移到另外的NUMA节点。

NUMA迁移

vSphere在创建虚拟机过程会为NUMA客户端指定家目录节点。NUMA客户端的内存和CPU都会默认从家目录节点分配。由于ESX/ESXiCPU负载会随时都是变动的, 当CPU负载过高时,vSphere会将虚拟机CPU从家目录节点调配到负载较低的NUMA节点。如果虚拟机CPU资源需要频繁被调度到非家目录节点,vSphere会对虚拟机发起NUMA迁移操作。

NUMA迁移操作是指将NUMA客户端的家目录节点从一个NUMA节点迁移到另外一个NUMA节点。NUMA迁移操作不但需要迁移虚拟机CPU,还需要迁移虚拟机内存。相比CPU而言,内存迁移十分缓慢,还十分消耗资源。

NUMA迁移触发条件有以下主要4个:

·         CPU负载不均衡

    NUMA节点CPU使用率不一样,vSphere会将NUMA客户端从高负载节点迁移到负载低的节点。       

·         内存亲近性

    CPU负载发生临时波动,vSphere会先将虚拟机CPU先调度至新的NUMA节点;CPU负载很快恢复正常,虚拟机内存可能还没有来得及迁移;这个时候虚拟机CPU回重新配迁移回原来家目录节点。这样一来可以增强内存访问的本地命中率,而来避免迁移给CPU负载带来新的不均衡。

·         虚拟机之间频繁通信

    如果虚拟机之间通信平凡,那么这些虚拟机可以迁移至相同节点。vSphere对这种情况起名叫做“Action Affinity(操作亲近性)”。

·         迁移不会引发新的迁移

    NUMA迁移需要保证不会引发新的的迁移。一个有趣场景就是三个虚拟机(每个虚拟机一个CPU)跑在两个CPU上面,很显然有一个CPU需要跑两个虚拟机。两个CPU之间负载会不均衡,但是这种情况并不能触发迁移。因为无论怎么迁移,最终CPU负载还是不均衡,会导致新的迁移。

vNUMA

vNUMA意义

vNUMA是一种将物理硬件NUMA拓扑结构透传给虚拟机的技术,信息保存在ACPI表格里面,由虚拟机BIOS负责透传。该技术可以让虚拟机操作系统和应用程序感知到底层NUMA拓扑。

vNUMA功能主要服务于CPU数量较多的虚拟机,vSphere 5.1里面要求是大于等于9.现有主流CPU核心/超线程数量很容易大于等于8,对于CPU个数小于等于8个的虚拟机,vSphere会尽可能将虚拟机CPU分配至一个NUMA节点。因此对于CPU数量较少的虚拟机,容易满足虚拟机CPU和内存在同一个NUMA节点上的要求。对于CPU数量较多的虚拟机,通过多个NUMA客户端进行调度,每个NUMA客户端可以对于1个虚拟NUMA节点。虚拟NUMA节点CPU和内存配置可以小于或者等于物理NUMA。比如:物理NUMA节点是8-CPU,一台虚拟机需要12个虚拟CPU。由于虚拟CPU数量大于物理NUMA节点CPU数量,虚拟机只能通过轮询方式调度;采用vNUMA,可以为虚拟机定义4-核的虚拟NUMA节点,为虚拟机一共分配3NUMA客户端,这个3个客户端根据具体情况可以分配至1个或者2物理NUMA节点。

vNUMA的挑战

通过vNUMA虚拟机可以感知到物理硬件的NUMA拓扑,这样显然可以提升虚拟机性能。但是由于物理NUMA拓扑是由虚拟机BIOS通过ACPI方式传递给虚拟机,虚拟机无法感知底层物理硬件NUMA结构变化(及时虚拟机现在可以动态增删CPU和内存资源)。要想重新获取新的NUMA拓扑,必须重启虚拟机。另外还有一个常见场景就是虚拟机迁移,如果ESX/ESXi集群物理硬件NUMA拓扑不相同,迁移后虚拟机由于无法感知新集群的NUMA拓扑,这样会导致虚拟机性能下降。

虚拟机CPU配置注意事项

ESX/ESXi集群服务器配置尽量相同,虚拟机暂时无法感知动态感知NUMA拓扑。

虚拟机数CPU 8

虚拟NUMA节点设定合适的CPU数量。

参考

·         The CPU Scheduler in VMware vSphere 5.1

应用于

VMware  vSphere 5.1+

版本历史
修订号
1 / 1
上次更新时间:
‎02-18-2013 09:47 AM
更新依据: