Virtual-Machine

為什麼當主機處於重負載 i/o 時,虛擬機在 i/o 上會遇到很大的困難?

  • March 1, 2018

我已經註意到很多次,當主機作業系統處於繁重的 i/o 負載下時,所有虛擬機都開始在 i/o 上遇到令人難以置信的掙扎,直到它們甚至無法通過 systemd 啟動,從而導致CPU 卡住消息和其他超時。它在 Linux 主機上的 VMWare Workstation 和 VirtualBox 下都以這種方式工作。與任何客人。基本上,如果主機正在執行例如文件系統檢查或某些校驗和計算,則客戶作業系統由於幾乎完全不工作 i/o 而處於半功能狀態。

值得一提的是,主機程序在此類負載期間共享 i/o 沒有問題,並且當執行第二次校驗和時,i/o 只會在 2 個程序之間或多或少地平均分配。這是為什麼?是什麼讓 VM 如此“特別”?能幫上忙嗎?

消費級控制器/磁槃無法高效執行多個繁重的 I/O 操作;但是,通常最快的是技術,該過程會變得更好(理論上)。

顯然,如果您執行 CPU/I/O 密集型操作,如軟體 RAID(正如 OP 所說的那樣),它將降低整個設置的性能,無論是在共享控制器時,還是在使用 CPU 資源時。我建議至少投資一個硬體 RAID 控制器。

伺服器級硬體通常可以更好地處理多個虛擬機/多個使用者並行大量訪問的情況。

然而,選擇伺服器級硬體並不是全部,在處理消費級或伺服器級硬體時,有一些優化策略很有用。

在虛擬機中可以做哪些有助於減少 I/O 負擔的虛擬機管理程序是paravirtualizing服務。

半虛擬化意味著添加特殊的驅動程序,它將直接與虛擬化服務/核心進行大量數據傳輸(在 VMWare 中稱為 PVSCSI),因此不必模擬實際的媒體儲存設備/NIC。

對於所有的 vmware 解決方案,無論是 Enterprise 還是 Workstation,您都擁有適用於 Linux 和 FreeBSD 的open-vm-tools軟體包。

在 Debian 下,您可以使用以下命令安裝它:

apt-get install open-vm-tools

對於 Debian Stretch,它不再涉及編譯任何東西。對於 Jessie,我建議從後端安裝 open-vm-tools,因為後端安裝open-vm-toolsv10。

安裝 open-vm-tools 後,您必須關閉 VM,並將磁碟控制器更改為 type ParaVirtual,將網路控制器更改為vmxnet3.

查看配置磁碟以使用 VMware 準虛擬 SCSI (PVSCSI) 適配器 (1010398)

vmtools 還允許虛擬機進行記憶體膨脹,因此它們不需要用完它們不使用的 RAM。

虛擬記憶體膨脹是管理程序使用的一種電腦記憶體回收技術,允許物理主機系統從某些來賓虛擬機 (VM) 檢索未使用的記憶體並與其他人共享。記憶體膨脹允許來賓 VM 所需的 RAM 總量超過主機上可用的物理 RAM 量。

對 VT 和 VT-d 等處理器級別的仿真技術的支持也有助於流程更加順暢。面向定向 I/O 的英特爾虛擬化技術 (VT-d)

不用說,減少 I/O 的作業系統級別的優化也有幫助;例如,記錄到遠端記錄系統,而不是本地 VM。

或對齊分區。

VMware vSphere 5 中的分區對齊,DeepDrive,第 1 部分

VMware vSphere 5 中的分區對齊,DeepDrive,第 2 部分

還要注意其他 I/O 優化,例如由於日誌守護程序刷新日誌文件而從 /var 分區中取出數據庫儲存空間,以在突然重啟的情況下保持日誌完整性。

它還有助於遵循 Unix 使用最低要求服務的理念。根據我的使用經驗,較小的虛擬機將在內部管理/分頁中使用更少的 I/O。顯然,如果你使用的記憶體比你擁有的多,你可能會遇到 I/O 問題(也就是垃圾)。

您還可以在管理程序中微調特定 VM 的 I/O 優先級,即賦予它更高或更低的優先級。我知道它可以在 VCenter/VMWare ESX 中完成,可能不在 VMWare Workstation 中,因為它是 2 級虛擬機管理程序,因此它是處理 I/O 操作和切片配額管理的主機作業系統(稍後會詳細介紹在)。

不言而喻,當使用 2 級管理程序時,我們在這裡討論的許多優化也應該盡可能應用於主機作業系統。

與其他替代方案相比, VMware 管理程序技術似乎也能更好地處理多個 VM 中的高負載 I/O。

但是,如果您擔心性能,至少在 VMWare 領域,至少對於生產系統而言,我建議您選擇他們的 Type-1/裸機管理程序(ESX 或 ESXi),而不是使用 VMware 工作站。

管理程序

Type-1、本機或裸機虛擬機管理程序 這些虛擬機管理程序直接在主機硬體上執行,以控制硬體和管理客戶作業系統。出於這個原因,它們有時被稱為裸機管理程序。IBM 在 1960 年代開發的第一個虛擬機管理程序是本機虛擬機管理程序。

$$ 4 $$其中包括測試軟體 SIMMON 和 CP/CMS 作業系統(IBM z/VM 的前身)。現代同類產品包括 Xen、Oracle VM Server for SPARC、Oracle VM Server for x86、Citrix XenServer、Microsoft Hyper-V 和 VMware ESX/ESXi。Type-2 或託管管理程序 這些管理程序在傳統作業系統 (OS) 上執行,就像其他電腦程序一樣。來賓作業系統作為主機上的程序執行。 Type-2 管理程序從主機作業系統中抽像出客戶作業系統。VMware Workstation、VMware Player、VirtualBox、Parallels Desktop for Mac 和 QEMU 是類型 2 管理程序的範例。

最後,還可以選擇不為海量儲存訪問添加模擬層的原生虛擬機管理程序或容器技術,例如XenPV 模式下的 Linux 主機,dockerFreeBSD jails. 此替代方案也有其優點和缺點,超出了此答案的範圍。

引用自:https://unix.stackexchange.com/questions/347839