簡介
虛擬機擴展一般來說是通過某種方法來擴展虛擬機的存儲空間,主要是為了提高虛擬機的性能和提高系統資源利用效率。虛擬機擴展另一種解釋是指虛擬機體系結構擴展,即擴展調試暫存器、記憶體訪問監視暫存器等基礎調試機構,這一般用於一些特定領域如軟體調試。在提供記憶體訪問行為分析、多數據斷點跟蹤等基礎功能之上,進一步支持數據操作語義正確性、軟體行為一致性等高層調試支持 。
方法
虛擬機的記憶體占用機制,其記憶體資源一旦分配,就會被虛擬機作業系統持續占用,即使該虛擬機大量記憶體資源空閒,被占用的宿主機記憶體資源也無法被其他虛擬機利用,造成資源池記憶體資源不足。針對以上實際生產中的問題,傳統的解決方法一般不外乎兩種,一種是簡單粗暴地增加伺服器的記憶體配比,通過加大記憶體的方式解決記憶體不足的問題。第二種方法是通過swap的方式,將部分記憶體保存在硬碟上,緩解記憶體不足的壓力。其中方法一自然是簡單有效,並且沒有任何風險隱患,但是記憶體價格高昂。而通過swap的方式解決記憶體問題則很不可靠。由於linux本身的記憶體最佳化機制,還有硬碟本身的性能所限,當套用直接訪問swap內的資源時,往往會對套用造成極大的不利影響。
Linux kernel都支持記憶體超分 (Memory Overcommit),KVM還可以對相同類型的虛機利用KSM(Kernel Same-page Merging)合併完全一致的記憶體頁表。但當部署密度較大時,隨著活躍的記憶體頁表增加,仍然容易出現swap,從而引起應用程式被強制中斷或者運行異常。在雲場景中,虛機內部套用訪問到swap資源,造成套用崩潰,進而影響到虛機的穩定性。當希望重新創建一個新的虛機接替原有的虛機時,本地記憶體資源仍然在被占用,而新虛機被迫在swap上創建記憶體,造成新虛機創建失敗。這種負面的連鎖效應對於整個雲計算系統而言是災難性的 。
虛擬機
虛擬機監視器是一個能夠提供計算機硬體完整模擬的軟體層, 虛擬機監視器中創造的系統抽象就稱之為虛擬機,它讓使用虛擬機的作業系統認為自己是直接運行於硬體之上的。虛擬機監視器中模擬的計算機硬體要做到跟真機的硬體儘可能一致,這樣應用程式和作業系統就可以在虛擬機透明地運行。虛擬機監視器可以讓多個虛擬機能夠同時利用所有資源。虛擬機監視器起的作用就是提供一種抽象,可以使得多個虛擬實例運行在同一個硬體平台上。虛擬機(virtual machine),在計算機科學中的體系結構里,是指一種特殊的軟體,可以在計算機平台和終端用戶之間創建一種環境,而終端用戶則是基於這個軟體所創建的環境來操作軟體。虛擬機技術大致可以分成三類完全虛擬化、半虛擬化、模擬器。完全虛擬化是指允許多個作業系統在同一台主機上運行。所有這些例子都對底層硬體至少是底層硬體的一個子集進行了完全虛擬化的實現。完全虛擬化技術最大的好處就是可以無需修改作業系統,直接移植到虛擬環境中,支持多個OS。因為完全虛擬化往往只能對特定硬體的特點進行虛擬,在虛存管理和設備管理方面,需要花費大量的代碼進行處理,這對軟體運行的效率必定會產生極大的影響,同時也增加了虛擬軟體層的複雜度。因此,半虛擬化技術也應運而生。半虛擬化技術通過對作業系統的核心做一定的修改,使得原本一些需要直接通過CPU執行的保護任務,可以在修改後的核心中直接執行,這樣就有效的提高了虛擬機的效率。模擬器只是讀取CPU指令,對它們指令進行解釋,並且模擬執行,保證這些代碼指令的執行效果。模擬器需要模擬硬體的各個暫存器和狀態機的狀態,往往CPU會耗費巨大的開銷,嚴重影響性能。