2021-05-12 14:32:11
微軟愛Linux:Linux動態記憶體設定與及時備份
動態記憶體設定以及及時備份是您在Hyper-V上執行Linux時相當重要的功能。這兩項功能需要Hyper-V主機與用戶端作業系統間密切的協同處理方能達成的功能。而現在微軟已經將這兩項功能帶至Hyper-V與Linux之中。
Linux動態記憶體設定
動態記憶體設定是一項在 Hyper-V 中可選擇使用的技術之一,如果您啟用此技術,Hyper-V 將會按照 Guest OS 所需要的記憶體大小,自動的保留或釋放實體記憶體。 當動態記憶體開啟時,能夠聚集事實上還沒被 Guest OS 用到的記憶體空間。 這使得記憶體能夠更妥善的被利用,能夠提高單台 Host OS 上執行的虛擬機器數量,提高整體虛擬機器的密度,能夠讓硬體有更高的利用率以及減少每個虛擬機器所需要的花費。動態記憶體設定技術在 Windows 以及 Linux 用戶端作業系統都能夠使用,甚至可以在單一 Hyper-V 主機上使用這兩種作業系統的混合設定。
動態記憶體設定是在多種混合環境,盡可能發揮記憶體使用率的技術。 Hyper-V 將會減少對於記憶體使用較少的用戶端作業系統,並將其指定給使用較多記憶體的用戶端作業系統使用。 而 Hyper-V 會自行做記憶體的設定與調整和不需要管理人員去進行調整等工作。
如果目前用戶端作業系統記憶體需求已達穩定的程度,這時動態記憶體所能帶來的好處就不會表現得太明顯。 如果您的設定情況是可以穩定掌握的,那我們將會建議您關閉此項技術。另外,有些用戶端作業系統上的程式會嘗試著把所有劃分給他使用的記憶體都拿去自行規劃管理,而繞過作業系統。像如果有這種程式自行規劃記憶體設定時,則動態記憶體建議不進行啟用,因為這類的程式可能會與 Hyper-V 所提供的技術會有所衝突。 最普遍的例子就像是大型可延伸的資料庫以及一些 Java 應用伺服器等。
在 Hyper-V 中動態記憶體的技術支援大部分的 Linux 發行版,但目前尚未於 FreeBSD 上支援。 這一部分可以持續關注在 TechNet 上的 LIS/BIS 技術表格,檢視哪些發行版已經支動態記憶體技術。
動態記憶體技術是如何工作的?
動態記憶體技術使用兩種技術達成,而彼此兩者為獨立的方式:做 ”Hot-Add” 以及 ”Ballooning”。 為了要了解這兩種技術,首先我們先來看到 Hyper-V 允許您在虛擬機器中設定三個動態記憶體設定的引數:
◆起始記憶體-最一開始虛擬機器啟用時應該設定的記憶體大小。
◆最大記憶體限度-在這個虛擬機器中能夠從動態記憶體術設定到的最大記憶體大小。
◆最小記憶體限度-最小記憶體是動態記憶體設定時,最少需要給此虛擬機器最低限度的記憶體大小。
通常起始記憶體會介於最大記憶體限度與最小記憶體限度之間。
而前面提到 ”Hot-add” 技術是當虛擬機器對記憶體用量需求增加時,則會逐漸地將該虛擬機器的可用記憶體逐漸提升到最大記憶體限度。 而這種方式只會逐漸提升虛擬機器中可用的記憶體限度,但並沒有辦法做到 ”Hot-remove”,也就是說這個方式只能增加記憶體而無法收回不使用的記憶體。
而在記憶體自虛擬機器中回收已設定的大小是使用 ”Ballooning” 技術。 這是由 LIS 內動態記憶體驅動程式來向用戶端作業系統宣稱這些記憶體必須要留給 LIS,因此在 Linux 用戶端作業系統上並沒有辦法使用到這些記憶體。 接著LIS記憶體驅動程式會將這些由 LIS 占用的記憶體還給 Hyper-V,讓 Hyper-V 能夠設定給其他虛擬機器使用。 這個操作並不會導致原本的 Linux 用戶端作業系統的總記憶體容量減少,反而是其 Linux 用戶端作業系統認為記憶體應該是被用來當作某些程式的緩衝區域。 因此 Ballooning 技術不會將其 Linux 用戶端作業系統所看到實際可以用的記憶體空間減少至小於最小記憶體限度所設定的值以下。
Ballooning 技術亦可將可用記憶體設定回虛擬機器當中,當 Hyper-V 決定要歸還界用的記憶體時,LIS 內將會歸還先前宣稱需要使用的記憶體空間回 Linux 用戶端作業系統。 當虛擬機器記憶體需求提升且 Ballooned 的記憶體皆已歸還,這時 Hyper-V 將會使用 Hot-add 設定更多的記憶體給需要的虛擬機器中。
動態記憶體設定範例
讓我們來看看動態記憶體的設定流程,我們用下列的範例來解釋這三個步驟:
◆一台虛擬機器開啟,其記憶體大小將會依照起始記憶體所設定的記憶體大小做設定。
◆虛擬機器對記憶體的需求增加,於是 Hyper-V 通過 Hot-add 技術增加該虛擬機器的記憶體。
◆虛擬機器對對記憶體的需求減少,於是 Hyper-V 通過 Ballooning 技術釋放空閒記憶體。
而上面這三個步驟的過程我們用幾種方式來觀察:
◆從一個概要的記憶體設定圖來顯示目前記憶體設定狀況。
◆通過 Hyper-V 管理員內的記憶體頁面檢視記憶體狀況。
◆在 Linux 下使用 free –m 命令查詢記憶體狀況。
前面兩個方式為從虛擬機器觀察記憶體消耗狀況,而第三種方式為從用戶端作業系統內部觀察記憶體使用狀況。
在第一個步驟時,虛擬機器此時開機完畢後並沒有特別顯明的程式消耗記憶體。 依照該虛擬機器設定的起始記憶體設定相對應大小的記憶體。此時在 Hyper-V 與 Linux 用戶端作業系統內也可以看到相同數量的記憶體,但要注意 Linux 內已經預留 32MB 的記憶體大小給 BIOS 作為其他的用途使用。
在第二個步驟時,虛擬機器內開始有顯著的記憶體需求出現,這時 Hyper-V 會開始通過 Hot-add 技術將更多的記憶體設定給虛擬機器,可以看到在 Assigned Memory 的欄位顯示的大小增加,而在 Linux 用戶端作業系統中也會跟著提升(依然保留 32MB 給 BIOS 使用)。
在第三個步驟時,先前耗費記憶體的程式完成運算,對記憶體使用量下降,這時 Hyper-V 會通過 LIS 使用 Ballooning 技術開始回收這些記憶體,而在 Hyper-V 內的 Assigned memory 此時會開始下降。 但是在 Linux 用戶端作業系統內檢視記憶體狀態時,並不會作任何改變,仍然保持剛剛在高記憶體使用量額外加上的記憶體大小。儘管 Linux 用戶端作業系統可使用的記憶體看起來沒有任何改變,但其實在亮綠色的區塊中,是有 LIS 拿取並宣稱是 LIS 使用的,藉此讓 Linux 用戶端作業系統認為是拿去作為 Buffer 用途。 如果這些亮綠色的區塊皆被 Linux 拿去使用且 Linux 用戶端作業系統對記憶體需求量又開始增長,這時會回到步驟一的情況,使用 Hot-add 設定更多記憶體到該虛擬機器中。
Linux 及時備份
接著,我們來談談另外一項功能,及時備份。 及時備份允許您在不停止或者關閉虛擬機器的情況下,能夠建立一個 Linux 虛擬機器的完整備份,包括其中的虛擬磁碟驅動器。這個功能主要是確保您在生產階段所使用的環境能夠保持其最大的上線時間。
檔案系統的備份必須要維持一致性,當一個備份動作被執行時,Linux 用戶端作業系統上的檔案系統將會把位於記憶體 Buffer 內的資料回寫入虛擬磁碟中。 這個動作是為了確保作業系統有把所有的資料回寫入磁碟,否則當您通過備份檔案恢復虛擬機器時可能會遇到資料不一致的問題。
讓我們通過上圖範例,看看及時備份是如何工作的吧!
◆通過微軟或者第三方廠商所提供的備份軟體,要求 Hyper-V 備份一個或多個虛擬機器。
◆通過在 LIS 內的 VSS 驅動程式,Hyper-V 與 Linux 虛擬機器溝通並開始備份程式。 而這個稱作 VSS 的驅動程式其實是因為部分功能類似於 Windows 中 ”Volume Shadow Copy Service” 而命名。 但不盡相同,因此別把這兩個名稱視為同一種技術。
◆而 VSS 驅動程式與 Linux User space 內的 VSS 服務溝通,而 VSS 服務將會向 Linux 發出暫停檔案系統與回寫記憶體回虛擬磁碟請求。
◆Hyper-V 將會建立一個備份的檢查點(Check point ),並告訴 LIS 可以將系統狀態解除暫停。 而 Linux 檔案系統僅會在第三與第四步驟時暫停操作,而這足夠將記憶體內的資料回寫並且建立虛擬機器檢查點,通常這個動作會小於 2 秒。
◆在 Hyper-V 內的 Windows VSS 將會對該虛擬磁碟建立一個快照磁碟卷(VHD/VHDX)。
◆而備份軟體再將此 VHD/VHDX 複製到其他的儲存空間上。
小結
動態記憶體設定以及及時備份是您在 Hyper-V 上執行 Linux 時相當重要的功能。這兩項功能需要 Hyper-V 主機與用戶端作業系統間密切的協同處理方能達成的功能。而現在微軟已經將這兩項功能帶至 Hyper-V 與 Linux 之中。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2015-11/125559.htm
相關文章