VMware vSphere 中的虛擬機性能分析。 第 2 部分:內存

VMware vSphere 中的虛擬機性能分析。 第 2 部分:內存

第 1 部分。關於 CPU

在本文中,我們將討論 vSphere 中隨機存取存儲器 (RAM) 的性能計數器。
似乎有了內存,一切都比處理器更清晰:如果 VM 有性能問題,很難不注意到它們。 可一旦出現,對付起來就困難多了。 但首先是第一件事。

一點理論

虛擬機的 RAM 取自運行 VM 的服務器的內存。 這很明顯:)。 如果服務器的 RAM 對每個人來說都不夠,ESXi 會開始使用內存回收技術來優化 RAM 的消耗。 否則,VM 操作系統會因 RAM 訪問錯誤而崩潰。

使用 ESXi 的技術取決於 RAM 的負載:

內存狀態

邊界

行動

400% 的最低限度免費

達到上限後,將大內存頁拆分為小內存頁(TPS 工作在標準模式下)。

重設

100% 的最低限度免費

大內存頁被分成小頁,TPS 被迫工作。

64% 的最低限度免費

TPS + 氣球

32% 的最低限度免費

TPS + 壓縮 + 交換

16% 的最低限度免費

壓縮+交換+塊

minFree 是管理程序工作所需的 RAM。

在包含 ESXi 4.1 之前,minFree 默認固定為服務器 RAM 的 6%(可以通過 ESXi 上的 Mem.MinFreePct 選項更改該百分比)。 在後來的版本中,由於服務器內存大小的增加,minFree 開始根據主機內存量計算,而不是固定百分比。

minFree(默認)值計算如下:

為 minFree 保留的內存百分比

內存範圍

6%

0-4GB

4%

4-12GB

2%

12-28GB

1%

剩餘內存

例如,對於具有 128 GB RAM 的服務器,MinFree 值將為:
最小可用空間 = 245,76 + 327,68 + 327,68 + 1024 = 1925,12MB = 1,88GB
實際值可能相差幾百 MB,這取決於服務器和 RAM。

為 minFree 保留的內存百分比

內存範圍

128 GB 的價值

6%

0-4GB

245,76 兆字節

4%

4-12GB

327,68 兆字節

2%

12-28GB

327,68 兆字節

1%

剩餘內存 (100 GB)

1024 兆字節

通常,對於生產林,只有高狀態才能被認為是正常的。 對於測試和開發平台,Clear/Soft 狀態可能是可以接受的。 如果主機上的 RAM 低於 64% MinFree,那麼運行在其上的 VM 肯定存在性能問題。

在每個狀態下,都會應用某些內存回收技術,從 TPS 開始,實際上不會影響 VM 的性能,並以 Swapping 結束。 我會告訴你更多關於它們的信息。

透明頁面共享 (TPS)。 TPS,粗略地說,就是對服務器上的虛擬機內存頁進行去重。

ESXi 通過計算和比較頁面的哈希和來查找虛擬機 RAM 的相同頁面,並刪除重複頁面,將它們替換為指向服務器物理內存中相同頁面的鏈接。 結果,減少了物理內存消耗,並且可以在幾乎沒有或沒有性能下降的情況下實現一些內存超額訂閱。

VMware vSphere 中的虛擬機性能分析。 第 2 部分:內存

這種機制只適用於 4 KB 的內存頁(small pages)。 管理程序甚至不會嘗試對 2 MB 的頁面(大頁面)進行重複數據刪除:找到這種大小的相同頁面的機會不大。

默認情況下,ESXi 將內存分配給大頁面。 當達到 High 狀態閾值時開始將大頁面分解為小頁面,並在達到 Clear 狀態時強制執行(請參閱管理程序狀態表)。

如果您希望 TPS 開始工作而不等待主機 RAM 填滿,則需要在 Advanced Options ESXi 中設置該值 “Mem.AllocGuestLargePage” 到 0(默認 1)。 然後將禁用為虛擬機分配大內存頁。

自 2014 年 XNUMX 月以來,在 ESXi 的所有版本中,VM 之間的 TPS 默認情況下已禁用,因為發現了一個漏洞,理論上允許從一個 VM 訪問另一個 VM 的 RAM。 詳情在這裡。 我還沒有看到關於利用 TPS 漏洞的實際實施的信息。

通過高級選項控制的 TPS 策略 “Mem.ShareForceSalting” 在 ESXi 上:
0 - VM 間 TPS。 TPS適用於不同VM的頁面;
1 – 在 VMX 中具有相同“sched.mem.pshare.salt”值的 VM 的 TPS;
2(默認值)- VM 內 TPS。 TPS 適用於 VM 內的頁面。

在測試台上關閉大頁面並打開 Inter-VM TPS 絕對有意義。 它也可以用於具有大量相同類型VM的站點。 例如,在具有 VDI 的機架上,物理內存的節省可以達到百分之幾十。

內存膨脹。 Ballooning 不再像 TPS 那樣對 VM 操作系統是一種無害且透明的技術。 但是通過適當的應用,您可以使用 Ballooning 生活甚至工作。

與 Vmware Tools 一起,在 VM 上安裝了一個名為 Balloon Driver(又名 vmmemctl)的特殊驅動程序。 當 hypervisor 開始耗盡物理內存並進入 Soft 狀態時,ESXi 會通過此 Balloon Driver 要求 VM 回收未使用的 RAM。 反過來,驅動程序在操作系統級別工作並從中請求可用內存。 管理程序查看 Balloon Driver 佔用了哪些物理內存頁面,從虛擬機中獲取內存並將其返回給主機。 操作系統的運行沒有問題,因為在操作系統級別,內存被 Balloon Driver 佔用。 默認情況下,Balloon Driver 最多可佔用 65% 的 VM 內存。

如果 VM 上未安裝 VMware Tools 或 Ballooning 被禁用(我不推薦,但有 KB:),管理程序立即切換到更嚴格的內存刪除技術。 結論:確保 VMware Tools 在 VM 上。

VMware vSphere 中的虛擬機性能分析。 第 2 部分:內存
可以通過 VMware Tools 從操作系統檢查 Balloon Driver 的操作.

內存壓縮。 當 ESXi 達到硬狀態時使用此技術。 顧名思義,ESXi 試圖將 4KB 的 RAM 頁面縮小為 2KB,從而釋放服務器物理內存上的一些空間。 這種技術顯著增加了對 VM RAM 頁面內容的訪問時間,因為頁面必須首先被解壓縮。 有時並非所有頁面都可以壓縮,並且該過程本身需要一些時間。 因此,這種技術在實踐中不是很有效。

內存交換。 在短暫的內存壓縮階段後,ESXi 幾乎不可避免地(如果虛擬機沒有離開其他主機或關閉)將切換到交換。 如果剩餘內存非常少(低狀態),那麼管理程序也會停止向 VM 分配內存頁面,這可能會導致 VM 的來賓操作系統出現問題。

這是交換的工作原理。 當您打開虛擬機時,會為其創建一個擴展名為 .vswp 的文件。 它的大小等於 VM 的未保留 RAM:它是配置內存和保留內存之間的差異。 當 Swapping 運行時,ESXi 將虛擬機內存頁面卸載到此文件中並開始使用它而不是服務器的物理內存。 當然,即使 .vswp 依賴於快速存儲,這種“有效”內存比真實內存慢幾個數量級。

與 Ballooning 不同,當未使用的頁面從 VM 中取出時,通過交換,操作系統或 VM 內的應用程序正在使用的頁面可以移動到磁盤。 結果,VM 的性能下降到凍結點。 VM 正式運行,至少可以從操作系統中正確禁用它。 如果你有耐心😉

如果虛擬機去交換,這是一種異常情況,如果可能的話最好避免。

關鍵 VM 內存性能計數器

所以我們到了重點。 要監視 VM 中的內存狀態,有以下計數器:

活性 — 顯示 VM 在上一個測量期間訪問的 RAM (KB) 量。

用法 - 與 Active 相同,但以 VM 已配置 RAM 的百分比表示。 使用以下公式計算:活動 ÷ 虛擬機配置的內存大小。
High Usage 和 Active 並不總是 VM 性能問題的指標。 如果 VM 積極使用內存(至少可以訪問它),這並不意味著沒有足夠的內存。 相反,這是一個查看操作系統中正在發生的事情的機會。
VM 有一個標準的內存使用警報:

VMware vSphere 中的虛擬機性能分析。 第 2 部分:內存

共享 - 使用 TPS(在 VM 內部或 VM 之間)進行重複數據刪除的 VM RAM 的數量。

誠然 - 分配給 VM 的物理主機內存量 (KB)。 包括共享。

消費 (授予 - 共享)- VM 從主機消耗的物理內存量 (KB)。 不包括共享。

如果部分 VM 內存不是來自主機的物理內存,而是來自交換文件,或者內存是通過 Balloon Driver 從 VM 獲取的,則在 Granted 和 Consumed 中不考慮此數量。
高 Granted 和 Consumed 值是完全正常的。 操作系統逐漸從管理程序中獲取內存並且不歸還它。 隨著時間的推移,在一個活躍運行的虛擬機中,這些計數器的值會接近配置的內存量,並保持在那裡。

— VM RAM (KB) 的數量,其中包含零。 這樣的內存被管理程序認為是空閒的,可以提供給其他虛擬機。 來賓操作系統將某些內容寫入歸零內存後,它會進入已消耗狀態並且不會返回。

預留開銷 — 虛擬機管理程序為 VM 操作保留的 VM RAM 量 (KB)。 這是一個小數量,但必須在主機上可用,否則 VM 將無法啟動。

氣球 — 使用 Balloon Driver 從 VM 中獲取的 RAM (KB) 量。

壓縮 - 壓縮的 RAM (KB) 量。

交換 - 由於服務器物理內存不足而移至磁盤的 RAM (KB) 量。
氣球和其他內存回收技術計數器為零。

這是具有內存計數器的圖形對於具有 150 GB RAM 的正常工作的 VM 的外觀。

VMware vSphere 中的虛擬機性能分析。 第 2 部分:內存

在下圖中,VM 存在明顯的問題。 在圖表下,您可以看到對於此 VM,使用了所有描述的使用 RAM 的技術。 此 VM 的氣球比消耗的大得多。 事實上,虛擬機是死的,而不是活的。

VMware vSphere 中的虛擬機性能分析。 第 2 部分:內存

ESXTOP

與 CPU 一樣,如果我們想快速評估主機上的情況,以及最多 2 秒的時間間隔的動態,我們應該使用 ESXTOP。

Memory 的 ESXTOP 屏幕使用“m”鍵調出,如下所示(已選擇字段 B、D、H、J、K、L、O):

VMware vSphere 中的虛擬機性能分析。 第 2 部分:內存

我們會對以下參數感興趣:

內存過量使用平均值 - 主機內存超額訂閱 1、5 和 15 分鐘的平均值。 如果它高於零,那麼這是查看正在發生的事情的機會,但並不總是問題的指示器。

在行 電源管理器/MB и VMK內存/MB - 有關服務器物理內存和 VMkernel 可用內存的信息。 從有趣的這裡你可以看到 minfree 的值(以 MB 為單位),主機在內存中的狀態(在我們的例子中,高)。

排隊 內存/MB 您可以看到 NUMA 節點(套接字)的 RAM 分佈。 在這個例子中,分佈不均勻,原則上不是很好。

以下是有關內存回收技術的一般服務器統計信息:

股票/MB 是 TPS 統計數據;

交換/MB — 交換使用統計;

郵編/MB — 內存頁壓縮統計;

MEMCTL/MB — Balloon Driver 使用統計。

對於單個 VM,我們可能對以下信息感興趣。 我隱藏了 VM 名稱以免混淆觀眾 :)。 如果ESXTOP metric和vSphere中的counter類似,我給出對應的counter。

MEMSZ — VM 上配置的內存量 (MB)。
MEMSZ = GRANT + MCTLSZ + SWCUR + 未更改。

GRANT — 授予 MB。

心腦血管疾病 — 活躍於 MB。

MCTL? - 虛擬機上是否安裝了 Balloon Driver。

MCTLSZ — 氣球到 MB。

MCTLGT — ESXi 想要通過 Balloon Driver (Memctl Target) 從 VM 獲取的 RAM (MB) 量。

MCTLMAX - ESXi 可以通過氣球驅動程序從虛擬機獲取的最大 RAM (MB) 量。

西南水庫 — 當前從​​交換文件分配給 VM 的 RAM (MB) 量。

S.W.G.T. - ESXi 想要從交換文件(交換目標)提供給 VM 的 RAM (MB) 量。

此外,通過 ESXTOP,您還可以查看有關 VM 的 NUMA 拓撲的更多詳細信息。 為此,請選擇字段 D、G:

VMware vSphere 中的虛擬機性能分析。 第 2 部分:內存

氨氮 – 虛擬機所在的 NUMA 節點。 在這裡您可以立即註意到寬虛擬機,它不適合一個 NUMA 節點。

非RMEM - VM 從遠程 NUMA 節點佔用多少兆字節的內存。

非線性記憶體 - VM 從本地 NUMA 節點獲取多少兆字節的內存。

%L – 本地 NUMA 節點上 VM 內存的百分比(如果低於 80%,可能會出現性能問題)。

管理程序上的內存

如果管理程序的 CPU 計數器通常不是特別重要,那麼內存的情況正好相反。 VM 上的高內存使用率並不總是表示存在性能問題,但管理程序上的高內存使用率會觸發內存管理技術並導致 VM 出現性能問題。 必須監控主機內存使用警報,以防止 VM 進入 Swap。

VMware vSphere 中的虛擬機性能分析。 第 2 部分:內存

VMware vSphere 中的虛擬機性能分析。 第 2 部分:內存

取消交換

如果 VM 在 Swap 中,其性能會大大降低。 主機上出現空閒 RAM 後,Ballooning 和壓縮的痕跡很快消失,但虛擬機並不急於從 Swap 返回到服務器 RAM。
在 ESXi 6.0 之前,使 VM 脫離 Swap 的唯一可靠且快速的方法是重新啟動(更準確地說,關閉/打開容器)。 從 ESXi 6.0 開始,雖然不是很正式,但已經出現了一種從交換中刪除 VM 的有效且可靠的方法。 在其中一次會議上,我能夠與一位負責 CPU 調度程序的 VMware 工程師交談。 他證實該方法非常有效且安全。 根據我們的經驗,它也沒有問題。

從 Swap 中刪除 VM 的實際命令 描述 鄧肯·埃平。 我不會重複詳細的描述,只是舉一個它的使用例子。 正如您在屏幕截圖中所見,執行指定命令一段時間後,Swap 在 VM 上消失了。

VMware vSphere 中的虛擬機性能分析。 第 2 部分:內存

ESXi 內存管理技巧

最後,這裡有一些技巧可以幫助您避免 RAM 導致的 VM 性能問題:

  • 避免生產集群中的內存超額訂閱。 最好在集群中始終有 ~20-30% 的可用內存,以便 DRS(和管理員)有操作空間,並且 VM 在遷移期間不會進入交換。 另外,不要忘記容錯餘量。 令人不快的是,當一台服務器出現故障並且使用 HA 重新啟動 VM 時,一些機器也會進入 Swap。
  • 在高度整合的基礎設施中,盡量不要創建超過主機內存一半的虛擬機。 這將再次幫助 DRS 在集群服務器之間毫無問題地分發虛擬機。 當然,這條規則並不普遍:)。
  • 觀察主機內存使用警報。
  • 不要忘記在 VM 上安裝 VMware Tools 並且不要關閉 Ballooning。
  • 考慮在 VDI 和測試環境中啟用 Inter-VM TPS 並禁用大頁面。
  • 如果 VM 遇到性能問題,請檢查它是否正在使用來自遠程 NUMA 節點的內存。
  • 盡快讓您的 VM 脫離 Swap! 除其他事項外,如果 VM 在 Swap 中,由於顯而易見的原因,存儲系統會受到影響。

這就是我對 RAM 的全部了解。 下面是一篇相關文章,供那些想深入了解細節的人使用。 下一篇文章將專門介紹 storadzh。

有用的鏈接http://www.yellow-bricks.com/2015/03/02/what-happens-at-which-vsphere-memory-state/
http://www.yellow-bricks.com/2013/06/14/how-does-mem-minfreepct-work-with-vsphere-5-0-and-up/
https://www.vladan.fr/vmware-transparent-page-sharing-tps-explained/
http://www.yellow-bricks.com/2016/06/02/memory-pages-swapped-can-unswap/
https://kb.vmware.com/s/article/1002586
https://www.vladan.fr/what-is-vmware-memory-ballooning/
https://kb.vmware.com/s/article/2080735
https://kb.vmware.com/s/article/2017642
https://labs.vmware.com/vmtj/vmware-esx-memory-resource-management-swap
https://blogs.vmware.com/vsphere/2013/10/understanding-vsphere-active-memory.html
https://www.vmware.com/support/developer/converter-sdk/conv51_apireference/memory_counters.html
https://docs.vmware.com/en/VMware-vSphere/6.5/vsphere-esxi-vcenter-server-65-monitoring-performance-guide.pdf

來源: www.habr.com

添加評論