在为新虚拟机配置处理器设置时,有几个关键概念需要了解:如何计算每个 CPU 的处理器核心数和每个 CPU 插槽的 CPU 核心数,以及这些设置如何影响虚拟机的速度。此外,了解什么可以确保更好的虚拟机性能也很重要:限制处理器数量并拥有更多 CPU 核心,还是拥有更多处理器但核心较少?
继续阅读,了解这些概念以及在 ESXi 主机上为虚拟机配置 CPU 的基本原则。
术语
让我们从配置虚拟机 CPU 设置时使用的术语定义开始虚拟机。这些术语将有助于理解工作原理,并避免对每个 CPU 的核心数、每个 CPU 插槽的 CPU 核心数以及 CPU 核心数与速度之间的混淆。
CPU 插槽
A CPU Socket is a physical connector on the motherboard to which a single physical CPU is connected. A motherboard has at least one CPU socket. Server motherboards usually have multiple CPU sockets that support multiple multicore processors. CPU sockets are standardized for different processor series. Intel and AMD use different CPU sockets for their processor families.
CPU
A CPU (central processing unit, microprocessor chip, or processor) is a computer component. It is the electronic circuitry with transistors that is connected to a socket. A CPU executes instructions to perform calculations, run applications, and complete tasks.
当处理器的时钟速度接近热障时,制造商改变了处理器的架构,并开始生产具有多个 CPU 核心的处理器。为了避免在物理处理器、逻辑处理器或处理器核心之间产生混淆,一些供应商将物理处理器称为插槽。
CPU 核心
A CPU core is the part of a processor containing the L1 cache. The CPU core performs computational tasks independently without interacting with other cores and external components of a “big” processor that are shared among cores. Basically, a core can be considered as a small processor built into the main processor that is connected to a socket. Applications should support parallel computations to use multicore processors rationally.
超线程
超线程是由英特尔工程师开发的技术,旨在将并行计算引入具有一个处理器核心的处理器。超线程首次亮相是在2002年,当时发布了Pentium 4 HT处理器,并定位于台式电脑。操作系统将具有超线程的单核处理器检测为具有两个逻辑核心(而不是物理核心)。类似地,具有超线程的四核处理器在操作系统中显示为具有8个核心的处理器。每个核心上运行的线程越多,就可以并行执行更多任务。
现代英特尔处理器同时具有多个核心和超线程。超线程通常默认启用,并可以在BIOS中启用或禁用。AMD的同步多线程(SMT)是AMD处理器的超线程模拟。
vCPU
A vCPU is a virtual processor that is configured as a virtual device in the virtual hardware settings of a VM. A virtual processor can be configured to use multiple CPU cores. A vCPU is connected to a virtual socket.
CPU过度分配
CPU过度分配是为虚拟机分配更多逻辑处理器(物理主机的CPU核心)而不是物理主机上可用的逻辑处理器总数。CPU过度分配允许增加灵活性和资源利用效率,但如果总需求超过可用的物理CPU容量,则可能导致性能下降。
NUMA
NUMA(非一致性内存访问)是多处理器计算机中使用的计算机内存设计。其思想是为每个处理器提供单独的内存(与UMA不同,UMA通过总线让所有处理器访问共享内存)。同时,处理器可以通过使用共享总线访问属于其他处理器的内存(所有处理器都可以访问计算机上的所有内存)。CPU具有在多处理器计算机上访问自己的本地内存比访问其他内存更快的性能优势。
这些基本架构在现代多处理器计算机中混合使用。处理器被分组在多核CPU包或节点上。属于同一节点的处理器与UMA架构一样共享对内存模块的访问。此外,处理器可以通过共享互连访问远程节点的内存。处理器使用NUMA架构进行此操作,但性能较慢。这种内存访问是通过拥有该内存的CPU而不是直接进行的。
NUMA节点是由CPU插座和最近的内存模块组成的CPU/内存对。NUMA通常在BIOS中配置为节点交错或交错内存设置。
示例:一个ESXi主机有两个插槽(两个CPU)和256 GB的RAM。每个CPU有6个处理器核心。此服务器包含两个NUMA节点。每个NUMA节点有1个CPU插座(一个CPU),6个内核和128 GB的RAM。
ESXi始终尝试从本机(本地)NUMA节点为VM分配内存。如果VM负载和ESXi服务器负载发生变化,则本节点可以自动更改。
vNUMA
虚拟NUMA(vNUMA)是用于VMware虚拟机的NUMA的类比。 vNUMA消耗多个物理NUMA节点的硬件资源以提供最佳性能。 vNUMA技术向客户操作系统公开NUMA拓扑结构。因此,客户操作系统能够意识到底层NUMA拓扑结构以实现最有效的使用。虚拟机的虚拟硬件版本必须为8或更高才能使用vNUMA。
在VMware vSphere 6.5中,vNUMA的处理显着改善,此功能不再由虚拟机配置中的CPU核心每个插槽值控制。默认情况下,对于具有超过8个逻辑处理器(vCPU)的虚拟机,vNUMA已启用。您可以通过编辑虚拟机的VMX配置文件并添加行numa.vcpu.min=X来手动为虚拟机启用vNUMA,其中X是虚拟机的vCPU数量。
计算核心数量
让我们找出如何计算服务器上的物理CPU核心数、逻辑CPU核心数和其他参数。
- 主机上的物理CPU核心总数通过以下公式计算:
(处理器插槽数)×(每个处理器的核心数)= 物理处理器核心数
仅应考虑已安装处理器的处理器插槽。
- 如果支持超线程,请使用以下公式计算逻辑处理器核心数:(物理处理器核心数) x (每个物理处理器的线程数) = 逻辑处理器数
- 最后,使用单个公式计算可分配给虚拟机的可用处理器资源:(CPU插槽数) x (CPU核心数) x (线程数)
例如,如果您有一台服务器,每个处理器都有4个核心并支持超线程,则可分配给虚拟机的逻辑处理器总数为:
2(CPU) x 4(核心) x 2(HT) = 16个逻辑处理器
可以在VM设置中将一个逻辑处理器分配为一个处理器或一个CPU核心。
至于虚拟机,由于硬件仿真特性,它们可以在配置中使用多个处理器和CPU核心进行操作。一个物理CPU核心可以配置为虚拟CPU或虚拟CPU核心。
- 可供VM使用的总时钟周期数计算如下:
(逻辑插槽数) x (CPU的时钟速度)
例如,如果您配置一个虚拟机使用2个vCPU和2个核心,而您的物理处理器的时钟速度为3.0 GHz,则总时钟速度为2x2x3=12 GHz。如果在ESXi主机上使用了CPU超额分配,则如果虚拟机执行CPU密集型任务,则虚拟机的可用频率可能小于计算出的频率。
每个套接字的CPU核心限制
vSphere 7.0 Update 1和vSphere 8.0中的CPU/核心限制如下。
- 分配给虚拟机的虚拟处理器套接字的最大数量为768。如果要分配的虚拟处理器多于768个,则配置一个使用多核处理器的虚拟机。
- 可以分配给单个虚拟机的处理器核心的最大数量为768个。虚拟机不能使用比物理机上的逻辑处理器核心数量更多的CPU核心。
- CPU热添加。如果一个虚拟机有128个vCPU或少于128个vCPU,则无法为此虚拟机使用CPU热添加功能,并且在虚拟机处于运行状态时编辑虚拟机的CPU配置。
操作系统CPU限制 。如果操作系统对处理器数量有限制,并且您为虚拟机分配了更多虚拟处理器,则额外的处理器将不会被客户操作系统识别和使用。限制可能是由操作系统技术设计和操作系统许可限制引起的。请注意,有些操作系统是按套接字和CPU核心计费的(例如Windows Server 2019 )。 - 操作系统CPU限制。如果操作系统对处理器数量有限制,并且您为VM分配了更多的虚拟处理器,则额外的处理器不会被来宾操作系统识别和使用。这些限制可能由操作系统的技术设计和操作系统许可限制引起。请注意,有些操作系统是按插槽和CPU核心许可的(例如,Windows Server 2019)。
某些操作系统的CPU支持限制如下:
- Windows 10专业版 – 2个CPU
- Windows 10家庭版 – 1个CPU
- Windows 10工作站版 – 4个CPU
- Windows Server 2019标准版/数据中心版 – 64个CPU
- Windows XP Pro x64 – 2个CPU
- Windows 7专业版/旗舰版/企业版 – 2个CPU
- Windows Server 2003数据中心版 – 64个CPU
您可以在VMware网站上查看您环境中使用的vSphere版本的配置最大值。
配置建议
对于较旧的vSphere版本,我们建议在VM配置中使用插槽而不是核心。起初,您可能不会在VM配置中看到CPU插槽或CPU核心对VM性能有显著差异。请注意一些配置功能会产生差异。在考虑为VM设置多个虚拟处理器(插槽)以获得最佳性能时,请记住NUMA和vNUMA。
如果vNUMA没有自动配置,请镜像物理服务器的NUMA拓扑。以下是VMware vSphere 6.5及更高版本中虚拟机的一些建议:
- 在为虚拟机定义逻辑处理器(vCPU)数量时,优先考虑每插槽核心配置。继续这样做,直到计数超过ESXi服务器上单个NUMA节点的CPU核心数量。使用相同的逻辑,直到您超过物理ESXi服务器上单个NUMA节点可用的内存量
- 有时,您的虚拟机配置的逻辑处理器数量超过了单个NUMA节点上的物理CPU核心数量,或者RAM的数量高于单个NUMA节点可用的总内存量。考虑将逻辑处理器(vCPU)的数量分散到尽可能少的NUMA节点上,以获得最佳性能。
- 如果CPU数量或内存量超过CPU核心数量,请不要设置奇数个vCPU。如果内存超过物理服务器上单个NUMA节点的内存量,也是如此。
- 不要创建vCPU数量超过物理主机上物理处理器核心数量的虚拟机。
- 如果您由于需求无法禁用vNUMA,请不要启用vCPU热添加功能。
如果在虚拟机上安装的客户操作系统和其他软件按处理器数量许可,可以配置虚拟机使用更少的处理器和更多的CPU核心。例如,Windows Server 2012 R2按插槽许可,而Windows Server 2016按核心数量许可。
如果您在VMware虚拟机的配置中使用CPU超配,要牢记以下数值:
1:1 到 3:1 – 运行VM应该没有问题
- 3:1 到 5:1 – 观察到性能下降
- 6:1 – 准备好因显著性能下降而引起的问题
- 具有正常值的CPU超配可以在测试和开发环境中使用,没有风险。
ESXi主机上VM的配置
首先,确定物理主机所需的逻辑处理器数量(CPU数量),以便虚拟机能够以足够的性能正常工作。然后,考虑先前的建议和限制,定义虚拟机应该设置的虚拟插槽和处理器数量(vSphere Client中的插槽数)以及CPU核心数量(每个插槽的核心数)。下表可以帮助您选择所需的配置。
首先,确定您的物理主机所需的逻辑处理器(CPU数量)数量,以便为虚拟机提供适当的工作性能。然后,根据之前的建议和限制,定义虚拟机所需的虚拟插槽数量(vSphere客户端中的插槽数量)和CPU核心数量(每插槽核心数)。下表可以帮助您选择所需的配置。
如果您需要为虚拟机分配超过8个逻辑处理器,逻辑保持不变。要在vSphere客户端中计算逻辑CPU的数量,请将插槽数量乘以核心数量。例如,如果您需要配置一个使用2个处理器插槽的虚拟机,每个插槽有2个CPU核心,那么逻辑CPU的总数是2*2=4。这意味着您应该在vSphere客户端的虚拟硬件选项中选择4个CPU来应用此配置。
在vSphere客户端中配置每CPU核心
让我们解释一下如何在VMware vSphere客户端中为虚拟机配置CPU选项。在网络浏览器中输入您的vCenter服务器的IP地址,并打开VMware vSphere客户端。在导航器中,打开主机和集群,并选择您想要配置的所需虚拟机。确保虚拟机关闭以能够更改CPU配置。配置过程在vSphere 6.x、7.0和8.0中是相同的。
- 右键单击虚拟机,在上下文菜单中,点击编辑设置以打开虚拟机设置。
- 展开“编辑设置”窗口中的“虚拟硬件”选项卡下的CPU部分。
- CPU。在CPU字符串中点击下拉菜单,并为这个虚拟机选择所需的总逻辑处理器数量。在这个例子中,我们为Ubuntu虚拟机(blog-Ubuntu1)选择了4个逻辑处理器。
- 每个插槽的核心数。在这个字符串中,点击下拉菜单,并为每个虚拟插槽(处理器)选择所需的核心数量。
- CPU热插拔。如果你想要使用这个功能,选择启用CPU热添加复选框。记住限制和要求。
- 预留。为ESXi主机或集群上的虚拟机选择保证的最低CPU时钟速度分配(频率,MHz或GHz)。
- 限制。为虚拟机处理器选择最大的CPU时钟速度。这个频率是虚拟机的最大频率,即使这个虚拟机是在ESXi主机或集群上唯一运行的虚拟机,并且有更多的处理器资源可用。设置的限额对所有虚拟处理器的VM都适用。如果一个虚拟机有2个单核心处理器,并且限额是1000 MHz,那么两个虚拟处理器将以每秒一百万周期的总时钟速度工作(每个核心500 MHz)。
- 份额。此参数定义在ESXi主机或资源池上虚拟机(低、正常、高、自定义)对资源消耗的优先级。与保留和限制参数不同,份额参数仅在ESXi主机、资源池或DRS集群中缺少CPU资源时才适用于VM。
份额参数的可用选项:
- 低–每个虚拟处理器500份额
- 正常–每个虚拟处理器1000份额
- 高–每个虚拟处理器2000份额
- 自定义–设置自定义值
份额值越高,为VM在ESXi主机或资源池中提供的CPU资源就越多。
- 硬件虚拟化。选中此复选框以启用嵌套虚拟化。如果您希望在虚拟机内部运行一个VM进行测试或教育目的,则此选项很有用。
- 性能计数器。此功能用于允许在虚拟机中安装的应用程序在测量CPU性能后进行调试和优化。
- 调度关联性。此选项用于将虚拟机分配给特定处理器。输入的值可以是这样的:“0, 2, 4-7”。
- I/O MMU. This feature allows VMs to have direct access to hardware input/output devices such as storage controllers, network cards, and graphic cards (rather than using emulated or paravirtualized devices). I/O MMU is also called Intel Virtualization Technology for Directed I/O (Intel VT-d) and AMD I/O Virtualization (AMD-V). I/O MMU is disabled by default. Using this option is deprecated in vSphere 7.0. If I/O MMU is enabled for a VM, the VM cannot be migrated with vMotion and is not compatible with snapshots, memory overcommit, suspended VM state, physical NIC sharing, and NSX network virtualization.
如果您使用独立的ESXi主机并使用VMware Host Client在Web浏览器中配置虚拟机,则配置原则与VMware vSphere Client相同。
在VMware Workstation中配置每个CPU的内核
如果您连接到VMware Workstation中的vCenter Server或ESXi主机,并打开vSphere VM的VM设置,则可以编辑虚拟处理器的基本配置。
- 单击VM >设置,选择硬件选项卡,然后单击处理器。
- 选择虚拟处理器(插槽)的数量和每个处理器的内核数。
在下面的屏幕截图中,您可以看到相同Ubuntu VM的处理器配置,该配置之前在vSphere Client中进行了配置。
总处理器核心数(ESXi主机或集群上物理处理器的逻辑核心)将自动计算并显示在下方。相比之下,在vSphere Client的界面中,您设置总处理器核心数(CPU选项),选择每个处理器的内核数,然后计算并显示虚拟插槽的数量。
在 PowerCLI 中配置虚拟机处理器
如果您更喜欢使用命令行界面来配置 VMware vSphere 的组件,请使用 PowerCLI 来编辑虚拟机的 CPU 配置。让我们了解如何在 PowerCLI 中编辑一个运行 Ubuntu 19 的虚拟机的 CPU 配置。这些命令用于已关闭电源的虚拟机。
- 要将虚拟机配置为使用两个单核虚拟处理器(使用两个虚拟插槽),请使用以下命令:
get-VM -name Ubuntu19 | set-VM -NumCpu 2
如果您想为虚拟机设置其他数量的处理器(插槽),请输入另一个数字。
- 在以下示例中,您将看到如何将虚拟机配置为使用两个双核虚拟处理器(使用 2 个插槽):
$VM=Get-VM -Name Ubuntu19
$VMSpec=New-Object -Type VMware.Vim.VirtualMachineConfigSpec -Property @{ "NumCoresPerSocket" = 2}
$VM.ExtensionData.ReconfigVM_Task($VMSpec)
$VM | Set-VM -NumCPU 2
- 一旦新的CPU配置应用到虚拟机上,此配置将保存在虚拟机的VMX配置文件中。在我们的情况下,我们检查位于数据存储器上的VM目录中的Ubuntu19.vmx文件(/vmfs/volumes/datastore2/Ubuntu19/)。包含新CPU配置的行位于VMX文件的末尾。
numvcpus = “2”
cpuid.coresPerSocket = “2”
- 如果您需要减少虚拟机的处理器(插槽)数量,请使用与前面显示的相同命令,但数量较少。例如,要为虚拟机设置一个处理器(插槽),请使用此命令:
get-VM -name Ubuntu19 | set-VM -NumCpu 1
使用PowerCLI的主要优势是能够批量配置多个虚拟机。任务自动化对于需要配置大量虚拟机的情况非常重要和方便。使用VMware的cmdlet和Microsoft PowerShell的语法来创建脚本。
结论
虚拟机上运行的应用程序性能取决于正确的 CPU 和内存配置。在 VMware vSphere 6.5 及更高版本中,为虚拟机设置更多的 CPU 核心,并使用每个套接字的 CPU 核心方法。如果您使用的是早于 vSphere 6.5 的 vSphere 版本,请配置套接字数量,但不要增加 VM 的 CPU 核心数量,因为在新旧 vSphere 版本中 vNUMA 的行为不同。考虑需要安装在 VM 上的软件的许可模型。如果软件按 CPU 许可,则在 VM 设置中配置更多的 CPU 核心。
在 VMware vSphere 中使用虚拟机时,不要忘记使用 VMware 备份工具。使用 NAKIVO 备份与复制来备份您的虚拟机,包括每个 CPU 多核心的 VM。定期备份可帮助您保护数据,并在灾难发生时恢复数据。
Source:
https://www.nakivo.com/blog/the-number-of-cores-per-cpu-in-a-virtual-machine/