在為新的虛擬機器配置處理器設置時,有幾個關鍵概念需要理解:如何計算每個CPU的處理器核心數和每個插槽的CPU核心數,以及這些設置如何影響虛擬機器的速度。此外,重要的是理解什麼能確保更好的VM性能:限制處理器數量並擁有更多的CPU核心,還是擁有更多的處理器但核心較少?
繼續閱讀以了解這些概念以及在ESXi主機上為虛擬機器配置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核心)配置給VM,超出物理主機上可用的邏輯處理器總數。CPU超配允許提高資源利用率的靈活性和效率,但如果總需求超過可用的物理CPU容量,則可能導致性能下降。
NUMA
非一致性存取記憶體(NUMA)是用於多處理器計算機的一種計算機記憶體設計。其概念是為每個處理器提供獨立的記憶體(與UMA不同,UMA中所有處理器通過總線訪問共享記憶體)。同時,處理器可以通過使用共享總線(所有處理器都可以訪問計算機上的所有記憶體)訪問屬於其他處理器的記憶體。CPU具有在多處理器計算機上訪問其本地記憶體比訪問其他記憶體更快的性能優勢。
這些基本架構在現代多處理器計算機中混合使用。處理器分組在多核CPU封裝或節點上。屬於同一節點的處理器與UMA架構一樣共享對記憶體模塊的訪問。此外,處理器可以通過共享互連來訪問來自遠程節點的記憶體。處理器使用NUMA架構進行這樣的操作,但性能較慢。此記憶體訪問是通過擁有該記憶體的CPU而不是直接進行的。
NUMA節點是由CPU插槽和最近的記憶體模塊組成的CPU/記憶體對。通常在BIOS中配置NUMA為節點交錯或交錯記憶體設置。
示例:一個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拓撲暴露給客戶操作系統。 因此,客戶OS知道底層NUMA拓撲以進行最有效的使用。 虛擬機器的虛擬硬件版本必須為8或更高版本才能使用vNUMA。
在VMware vSphere 6.5中,對vNUMA的處理顯著改善,此功能不再由VM配置中的CPU核心每插槽值控制。 默認情況下,對於具有超過8個邏輯處理器(vCPU)的VM,vNUMA已啟用。 您可以通過編輯VM的VMX配置文件並添加行numa.vcpu.min=X手動為VM啟用vNUMA,其中X是虛擬機器的vCPU數量。
計算核心數
讓我們找出如何計算服務器上的物理CPU核心數,邏輯CPU核心數和其他參數。
- 主機上的物理CPU核心總數計算公式如下:
(處理器插槽數)x(每個處理器的核心數)=物理處理器核心數
只有安裝處理器的處理器插槽需要考慮。
- 若支援超線程,則使用以下公式 計算 logical processor 核數:
(实体处理器核數) x (2 threads/实体处理器) = logical 处理器數量
-
最後,使用單個公式來計算 可分配給 VM 的处理器資源:
(CPU 插槽) x (CPU 核數) x (線程)
例如,如果您擁有一台有两个处理器,每个处理器有4核,并且支持超线程的服务器,那么可以分配给VM的总逻辑处理器数量为:
2(CPU) x 4(核) x 2(HT) = 16 logical processors
在 VM 設定中,一个 logical processor 可作為一個處理器或一個 CPU 核分配給 VM。
對於虛擬機,由於硬體模擬的特性,它們可以在其配置中使用多個處理器和 CPU 核來運行。一個實體 CPU 核可以配置為 VM 的虛擬 CPU 或虛擬 CPU 核。
- VM 可用總的時脈周期 是 calculated 如下:
( logical 插槽數量) 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 个或少于 128 个 vCPU,则不能为该虚拟机使用 CPU 热添加功能,并且不能在虚拟机处于运行状态时编辑虚拟机的 CPU 配置。
操作系统 CPU 限制 。如果操作系统对处理器数量有限制,并且您为虚拟机分配了更多虚拟处理器,则附加处理器将不会被客户操作系统识别和使用。限制可能是由操作系统技术设计和操作系统许可限制引起的。请注意,有些操作系统按套接字和每个 CPU 核心的许可进行许可(例如,Windows Server 2019 )。 - OS CPU限制。如果作業系統對處理器數量有上限,並且您為VM分配了更多的虛擬處理器,則客戶端OS不會識別和使用額外的處理器。這些限制可能是由於OS的技術設計和OS許可證限制造成的。請注意,有些作業系統是按插槽和CPU核心許可的(例如,Windows Server 2019)。
某些作業系統的CPU支持限制:
- Windows 10 Pro – 2個CPU
- Windows 10 Home – 1個CPU
- Windows 10 Workstation – 4個CPU
- Windows Server 2019 Standard/Datacenter – 64個CPU
- Windows XP Pro x64 – 2個CPU
- Windows 7 Pro/Ultimate/Enterprise – 2個CPU
- Windows Server 2003 Datacenter – 64個CPU
您可以在VMware網站上查看您環境中使用的vSphere版本的配置最大值。
配置建議
對於較舊的vSphere版本,我們建議在VM配置中使用插槽而不是核心。首先,您可能不會在VM配置中看到CPU插槽或CPU核心對VM性能有顯著差異。請注意一些配置功能會產生差異。在考慮為VM設置多個虛擬處理器(插槽)以獲得最佳性能時,請記住NUMA和vNUMA。
如果vNUMA沒有自動配置,請鏡像物理服務器的NUMA拓撲。以下是VMware vSphere 6.5及更高版本中虛擬機的一些建議:
- 在為虛擬機定義邏輯處理器(vCPUs)數量時,優先考慮每插槽核心配置。繼續進行,直到計數超過ESXi服務器上單個NUMA節點的CPU核心數量。使用相同的邏輯,直到您超過物理ESXi服務器上單個NUMA節點可用的內存量
- 有時,虛擬機配置的邏輯處理器數量超過單個NUMA節點上的物理CPU核心數量,或者RAM數量高於單個NUMA節點可用內存總量。考慮將邏輯處理器(vCPUs)的計數分散到最少數量的NUMA節點上,以獲得最佳性能。
- 如果CPU數量或內存量超過CPU核心數,請不要設置奇數數量的vCPU。如果內存量超過物理服務器上單個NUMA節點的內存量,也適用相同的規則。
- 不要創建vCPU數量超過物理主機上物理處理器核心數量的虛擬機。
- 如果由於您的需求無法禁用vNUMA,請不要啟用vCPU Hot-Add功能。
如果虛擬機上的客戶操作系統和其他軟件按處理器計費,請配置虛擬機使用較少的處理器和更多的 CPU 核心。例如,Windows Server 2012 R2 按插槽許可,而 Windows Server 2016 則按核心許可。
如果您在 VMware 虛擬機的配置中使用了 CPU 超配,請牢記以下值:
1:1 到 3:1 – 執行虛擬機時不應該出現問題
- 3:1 到 5:1 – 觀察到性能下降
- 6:1 – 准備因顯著性能下降而引起的問題
- 具有正常值的 CPU 超配可在測試和開發環境中使用,無風險。
ESXi 主機上的 VM 配置
首先,確定您的物理主機的邏輯處理器數量(處理器數量)需要多少,以便虛擬機可以正常工作並具有足夠的性能。然後定義在 vSphere 客戶端中虛擬插槽與處理器(虛擬機中的插槽數)以及應為虛擬機設置的 CPU 核心數(每個插槽的核心數),同時考慮之前的建議和限制。下表可以幫助您選擇所需的配置。
首先,確定您的物理主機所需的邏輯處理器(CPU數量)數量,以確保虛擬機能夠正常工作並具有足夠的性能。然後,根據先前的建議和限制,定義虛擬插槽的數量(vSphere Client中的插槽數量)和CPU核心數量(每個插槽的核心數量)。下表可以幫助您選擇所需的配置。
如果您需要為虛擬機分配超過8個邏輯處理器,邏輯仍然相同。要計算vSphere Client中的邏輯CPU數量,請將插槽數量乘以每個插槽的核心數量。例如,如果您需要配置一個虛擬機以使用2個處理器插槽,每個插槽有2個CPU核心,那麼總的邏輯CPU數量是2*2=4。這意味著您應該在vSphere Client的虛擬硬件選項中選擇4個CPU來應用此配置。
在vSphere Client中配置每個CPU的核心
讓我們解釋如何在VMware vSphere Client中為虛擬機配置CPU選項。在網絡瀏覽器中輸入您的vCenter Server的IP地址,並打開VMware vSphere Client。在導航器中,打開主機和集群,並選擇您想要配置的虛擬機。確保虛擬機已關閉電源,以便能夠更改CPU配置。在vSphere 6.x、7.0和8.0中,配置過程是相同的。
- 右鍵點擊虛擬機,並在上下文菜單中點擊編輯設置以打開虛擬機設置。
- 在編輯設定視窗的虛擬硬體標籤中擴展CPU部分。
- CPU。在CPU字串中,點擊下拉選單,並選擇此VM所需的邏輯處理器總數。在此範例中,我們為Ubuntu VM(blog-Ubuntu1)選擇4個邏輯處理器。
- 每個插槽的核心數。在這個字串中,點擊下拉選單,並選擇每個虛擬插槽(處理器)所需的核心數。
- CPU熱插拔。如果您想使用此功能,請選擇啟用CPU熱添加核取方塊。請記住限制和要求。
- 保留。選擇虛擬機在ESXi主機或叢集上保證的最低CPU時脈速度(頻率,MHz或GHz)分配。
- 限制。選擇VM處理器的最大CPU時脈速度。即使該VM是唯一在具有更多免費處理器資源的ESXi主機或叢集上運行的VM,此頻率也是虛擬機的最大頻率。設定的限制適用於VM的所有虛擬處理器。如果VM有2個單核心處理器,並且限制為1000 MHz,則兩個虛擬處理器以總時脈速度每秒一百萬個週期(每個核心500 MHz)工作。
- 股份。此參數定義 ESXi 主機或資源池上虛擬機器 (低、正常、高、自訂) 的資源消耗優先級。與預留和限制參數不同,僅在 ESXi 主機、資源池或 DRS 集群中缺少 CPU 資源時,才對 VM 應用股份參數。
股份
參數的可用選項:
- 低– 每個虛擬處理器 500 股
- 正常– 每個虛擬處理器 1000 股
- 高– 每個虛擬處理器 2000 股
- 自訂– 設置自訂值
股份
值越高,為 VM 在 ESXi 主機或資源池中分配的 CPU 資源越多。
- 硬體虛擬化。選中此核取方塊以啟用嵌套虛擬化。如果您想要在 VM 內部運行一個 VM 進行測試或教育目的,則此選項很有用。
- 性能計數器。此功能用於允許在虛擬機內安裝的應用程序在測量 CPU 性能後進行調試和優化。
- 調度關聯性。此選項用於將 VM 分配給特定處理器。輸入的值可以是這樣:“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 瀏覽器中配置 VM,則配置原則與 VMware vSphere Client 相同。
在 VMware Workstation 中配置每 CPU 的核心
如果您連接到 VMware Workstation 中的 vCenter Server 或 ESXi 主機,並打開 vSphere VM 的 VM 設置,則可以編輯虛擬處理器的基本配置。
- 單擊 VM > 設置,選擇 硬件 選項卡,然後單擊 處理器。
- 選擇虛擬處理器(插槽)的數量和每個處理器的核心數。
在下面的截圖中,您可以看到與之前在 vSphere Client 中配置的相同 Ubuntu VM 的處理器配置。
總處理器核心數(ESXi 主機或集群上物理處理器的邏輯核心)將自動計算並顯示在下方。相比之下,在 vSphere Client 的界面中,您設置總處理器核心數(CPU 選項),選擇每個處理器的核心數,然後計算並顯示虛擬插槽的數量。
在PowerCLI中配置VM處理器
如果您偏好使用命令行界面來配置VMware vSphere的組件,請使用PowerCLI來編輯VM的CPU配置。讓我們看看如何在PowerCLI中為Ubuntu 19編輯VM的CPU配置。這些命令用於已關機的VM。
- 要配置一個VM使用兩個單核心虛擬處理器(使用兩個虛擬插槽),請使用以下命令:
get-VM -name Ubuntu19 | set-VM -NumCpu 2
如果您想為VM設置不同數量的處理器(插槽),請輸入另一個數字。
- 在以下示例中,您將看到如何配置一個VM使用兩個雙核心虛擬處理器(使用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 配置應用於虛擬機器,該配置將保存在 VM 的 VMX 配置文件中。在我們的情況下,我們檢查位於數據存儲區中虛擬機目錄中的 Ubuntu19.vmx 文件(/vmfs/volumes/datastore2/Ubuntu19/)。新 CPU 配置的行位於 VMX 文件的末尾。
numvcpus = “2”
cpuid.coresPerSocket = “2”
- 如果您需要減少虛擬機的處理器(插槽)數量,請使用與之前相同的命令,但數量較少。例如,要為虛擬機設置一個處理器(插槽),請使用以下命令:
get-VM -name Ubuntu19 | set-VM -NumCpu 1
使用 PowerCLI 的主要優勢在於能夠批量配置多個虛擬機。如果要配置的虛擬機數量很多,任務自動化是重要的和方便的。使用 VMware 命令和 Microsoft PowerShell 的語法來創建腳本。
結論
虛擬機上運行應用程式的性能取決於正確的 CPU 和記憶體配置。在 VMware vSphere 6.5 及更新版本中,為虛擬機設置更多 CPU 核心,並使用每個虛擬機的 CPU 核心每個插槽的方法。如果您使用的是早於 vSphere 6.5 的 vSphere 版本,在不增加虛擬機 CPU 核心數量的情況下,配置插槽數量,因為新舊 vSphere 版本中 vNUMA 的行為不同。考慮到您需要安裝在虛擬機上的軟體的授權模型。如果軟體按 CPU 授權,請在虛擬機設置中配置更多每個 CPU 的核心。
在使用 VMware vSphere 中的虛擬機時,不要忘記使用 VMware 備份工具。使用 NAKIVO 備份和複製來備份您的虛擬機,包括具有每個 CPU 多個核心的虛擬機。定期備份可幫助您保護數據,並在災難發生時恢復數據。
Source:
https://www.nakivo.com/blog/the-number-of-cores-per-cpu-in-a-virtual-machine/