深度探討微軟與 Linux 合作模式 ( 三 ) : Linux 動態記憶體配置與即時備份

在此篇文章中,您可以看到:


初步介紹

        這篇文章是有關於如何在私有資料中心上,利用 Hyper-V 運行與管理 Linux 以及 FreeBSD。先前的系列文章可以在下面的連結找到:

Microsoft Loves Linux ”

l 深度探討微軟與 Linux 合作模式 ( 一 ):運行在 Hyper-V 上的 Linux 與 FreeBSD

l 深度探討微軟與 Linux 合作模式 ( 二 ):探討 Hyper-V 的關鍵技術

鼓勵大家若尚未閱讀前述文章,請先行閱讀了解。

Linux  動態記憶體配置

        動態記憶體配置是一項在 Hyper-V 內可以選擇使用的技術之一,如果您啟用此技術,Hyper-V 將會依照客端虛擬機器所需要的記憶體大小,自動的保留或者釋出實體記憶體。當動態記憶體開啟時,能夠聚集這些實際上還沒被客端作業系統用到的記憶體空間。這能夠使得記憶體能夠更妥善的被利用,能夠提高在單一主端上運作更多虛擬機器的數量,提高整體虛擬機器的密度,能夠讓硬體有更高的利用率以及減少每個虛擬機所需要的記憶體花費。動態記憶體配置技術在 Windows 以及 Linux 客戶端作業系統皆能夠使用,甚至可以在單一 Hyper-V 主端上達成這兩種作業系統的混合配置。

        動態記憶體配置是在多種混合環境,盡可能發揮記憶體使用率的技術。Hyper-V 將會減少對於記憶體使用較少的客端作業系統,並將其指定給使用較多記憶體的客端作業系統使用。而 Hyper-V 會自行做記憶體的配置與調整和不需要管理人員去進行調整等工作。

        如果目前客端作業系統記憶體需求已達穩定的程度,這時動態記憶體配置所能帶來的好處就不會彰顯出來。如果您的配置情況是可以穩定掌握的,那我們將會建議您關閉此項技術。另外,有些客端作業系統上的程式會嘗試著把所有劃分給他使用的記憶體都拿去自行規劃管理,而繞過客端作業系統。像如果有這種程式自行規劃記憶體配置時,則動態記憶體配置建議不進行啟用,因為這類的程式可能會與 Hyper-V 所提供的技術會有所衝突。最普遍的例子就像是大型可擴展的資料庫以及一些JAVA應用伺服器等。 

        在 Hyper-V 內動態記憶體配置的技術支援大部分的 Linux 發行版本,但目前尚未於 FreeBSD 上支援。這一部分可以持續關注在 TechNet 上的 LIS/BIS 技術表格,得到那些發行版本已經支援動態記憶體配置技術。

動態記憶體配置技術是如何運作的?

        動態記憶體配置技術使用兩種技術達成,而彼此兩者為獨立的方式分 ”Hot-Add” 以及 ”Ballooning”。為了要了解這兩種技術,首先我們先來看到 Hyper-V 允許您在虛擬機器中設置三個動態記憶體配置的參數:

  1. 起始記憶體-在一開始虛擬機器啟用時應該配置的記憶體大小為何。
  2. 最大記憶體限度-在這個虛擬機器中能夠透過動態記憶體配置技術配置到的最大記憶體大小為何。
  3. 最小記憶體限度-最小記憶體是動態記憶體配置時,最少需要給此虛擬機器最低限度的記憶體大小為何。

        通常起始記憶體會介於最大記憶體限度與最小記憶體限度之間。

        而前面提到 ”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 配置更多的記憶體給需要的虛擬機器中。

動態記憶體配置範例

讓我們來看看動態記憶體的配置流程,我們用下列的範例來解釋這三個步驟:

  1. 一台虛擬機器開啟,其記憶體大小將會依照起始記憶體所設定的記憶體大小做配置。
  2. 虛擬機器對記憶體的需求增加,於是 Hyper-V 透過 Hot-add 技術增加該虛擬機器的記憶體。
  3. 虛擬機對對記憶體的需求減少,於是 Hyper-V 透過 Ballooning 技術是放空閒`記憶體。

而上面這三個步驟的過程我們用幾種方式來觀察:

l   從一個概要的記憶體配置圖來顯示目前記憶體配置狀況。

l   透過 Hyper-V 管理員內的記憶體頁面查看記憶體狀況。

l   在 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 內的資料回寫入虛擬磁碟中。這個動作是為了確保作業系統有把所有的資料回寫入磁碟,否則當您透過備份檔案回復虛擬機器時可能會遭遇資料不一致的問題。

讓我們透過上圖解說,看看即時備份是如何運作的吧!

  1. 透過微軟或者第三方廠商所提供的備份軟體,要求 Hyper-V 備份一個或多個虛擬機器。
  2. 透過在 LIS 內的 VSS 驅動程式,Hyper-V 與 Linux 虛擬機器溝通並開始備份程序。而這個稱作 VSS 的驅動程式其實是因為部分功能相似 Windows 中 ”Volume Shadow Copy Service” 而命名。但不盡相同,因此別把這兩個名稱視為同一種技術。
  3. 而 VSS 驅動程式與 Linux User space 內的 VSS 服務溝通,而 VSS 服務將會向 Linux 發出暫停檔案系統與回寫記憶體檔案回虛擬磁碟請求。
  4. Hyper-V 將會建立一個備份的檢查點(Check point ),並告訴 LIS 可以將系統狀態解除暫停。而 Linux 檔案系統僅會在第三與第四步驟時暫停操作,而這足夠將記憶體內的資料回寫並且建立虛擬機器檢查點,通常這個動作會小於 2 秒。
  5. 在 Hyper-V 內的 Windows VSS 將會對該虛擬磁碟建立一個快照磁碟卷宗(VHD/VHDX)。
  6. 而備份軟體再將此 VHD/VHDX 複製到其他的儲存空間上。

結論

        動態記憶體配置以及即時備份是您在 Hyper-V 上運行 Linux 時相當重要的功能。這兩項功能需要 Hyper-V 主端與客端作業系統間密切的偕同處理方能達成的功能。而現在微軟已經將這兩項功能帶至 Hyper-V 與 Linux 之中。

本篇文章翻譯自:Microsoft Loves Linux Deep Dive #3: Linux Dynamic Memory and Live Backup