成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

NFV關鍵技術:計算虛擬化之內存虛擬化

開發 開發工具 數據中心
大型操作系統(比如Linux)的內存管理的內容是很豐富的,而內存的虛擬化技術在OS內存管理的基礎上又疊加了一層復雜性,需要對虛擬內存再進行虛擬化。本文將從“概述”、“軟硬件解決方案”和“內存管理”四個方面探討內存虛擬化技術。

Labs 導讀

大型操作系統(比如Linux)的內存管理的內容是很豐富的,而內存的虛擬化技術在OS內存管理的基礎上又疊加了一層復雜性,需要對虛擬內存再進行虛擬化。本文將從“概述”、“軟硬件解決方案”和“內存管理”四個方面探討內存虛擬化技術。

1、內存虛擬化概述

所謂的內存虛擬化,即如何在多個虛擬機之間共享物理內存以及如何進行動態分配。在《x86架構基礎》一文中已經介紹操作系統對物理服務器內存管理的知識,它的本質就是將物理內存地址映射到一段線性地址空間,也有叫邏輯地址空間,應用程序訪問內存物理地址是通過段頁查詢機制完成。而這個線性地址空間或邏輯地址空間本身就是物理內存的虛擬化呈現。在虛擬化環境中,分配給虛擬機內存非常類似于操作系統中關于線性地址空間的實現。操作系統負責維護虛頁號到實頁號的映射,并將這一 映射信息保存到頁表(Page Table)。在 x86架構的CPU中,內存管理單元MMU與TLB這兩個模塊就負責實現并優化虛擬內存的性能。詳見《DPDK技術在電信云中最佳實踐》系列文章。

一個操作系統對其物理內存存在兩個主要的基本認識:物理地址從0開始和內存地址連續性(至少在一些大的粒度上連續)。

如上圖所示,而VMM與客戶機操作系統在對物理內存的認識上存在沖突,這使得真正擁有物理內存的VMM必須對客戶機操作系統所訪問的內存進行一定程度的虛擬化。換句話說,就是VMM 負責將MMU進行虛擬化,為客戶機操作系統提供一段連續的“物理”地址空間,而操作系統本身不會意識到這種變化,仍能夠將虛擬機虛擬地址(Guest Virtual Address,GVA)映射到虛擬機物理地址(Guest Physical Address,GPA),但是需要VMM將虛擬機物理地址映射到物理機物理地址(Host Physical Address,HPA)。

所以,內存虛擬化的本質就是把物理機的真實物理內存統一管理,包裝成多份虛擬的內存給若干虛擬機使用。內存虛擬化的核心,在于引入一層新的地址空間---客戶機物理地址空間,客戶機以為自己運行在真實的物理地址空間中,實際上它是通過VMM訪問真實的物理地址的。在VMM中保存客戶機地址空間和物理機地址空間之間的映射表。

虛擬化系統中包括三層內存地址空間:虛擬機虛擬地址GVA、虛擬機物理地址GPA和物理機物理地址HPA。因此,原先由MMU完成的線性地址到物理地址的映射已經不能滿足,必須由VMM接入來完成這三層地址的映射維護和轉換。

  • GVA:指GuestOS提供給其應用程序使用的線性地址空間。
  • GPA:經VMM抽象的,虛擬機看到的偽物理地址空間。
  • HPA:真實的機器地址,即地址總線上出現的地址信號。

為了實現上述映射和轉換關系,主要有兩種解決方案:軟件解決方案---影子頁表和硬件解決方案---Intel的EPT和AMD的RVI。

2、內存虛擬化軟件解決方案

2.1 MMU半虛擬化(MMU Paravirtualization)

這種方式主要為Xen所用,MMU半虛擬化主要原理是:

  1. 當Guest OS創建新頁表時,VMM從維護的空閑內存中為其分配頁面并進行注冊。后續,Guest OS對該頁表的寫操作都會陷入VMM進行驗證和轉換;VMM檢查頁表中的每一項,確保它們只映射到屬于該虛擬機的機器頁面,而且不包含對頁表頁面的可寫映射。
  2. 然后,VMM會根據其維護的映射關系PA-MA,將頁表項中的虛擬機邏輯地址VA替換為相應的機器地址MA。
  3. 最后把修改過的頁表載入MMU,MMU就可以根據修改過的頁表直接完成虛擬地址VA到機器地址MA的轉換。

這種方式的本質是將映射關系VA-MA直接寫入Guest OS的頁表中,以替換原來的映射VA-PA映射關系。

2.2 影子頁表

相比較MMU半虛,大部分虛擬化廠商在VMM中還使用了一種稱為影子頁表(Shadow Page Table)的技術實現上述功能。對于每個虛擬機的主頁表(Primary Page Table),VMM都維持一個影子頁表來記錄和維護GVA與HPA的映射關系。

影子頁表映射關系

影子頁表包括以下兩種映射關系,

1)GVA>>>GPA,虛擬機操作系統負責維護從虛擬機邏輯地址到虛擬機物理地址的映射關系,VMM可以從虛擬機主頁表中獲取這種映射關系。

2)GPA>>>HPA,VMM負責維護從虛擬機物理地址到物理機物理地址的映射關系。

通過這種兩級映射的方式,VMM為Guest OS的每個頁表維護一個影子頁表,并將GVA-HPA的映射關系寫入影子頁表,Guest OS的頁表內容保持不變,然后,VMM將影子頁表寫入MMU。同時,又對虛擬機可訪問的內存邊界進行了有效控制。并且,使用TLB緩存影子頁表的內容可以大大提高虛擬機問內存的速度。

影子頁表的維護將帶來時間和空間上的較大開銷。時間開銷主要體現在Guest OS構造頁表時不會主動通知VMM,VMM必須等到Guest OS發生缺頁錯誤時(必須Guest OS要更新主頁表),才會分析缺頁原因再為其補全影子頁表。而空間開銷主要體現在VMM需要支持多臺虛擬機同時運行,每臺虛擬機的 Guest OS通常會為其上運行的每個進程創建一套頁表系統,因此影子頁表的空間開銷會隨著進程數量的增多而迅速增大。

為權衡時間開銷和空間開銷,現在一般采用影子頁表緩存(Shadow Page Table Cache)技術,即VMM在內存中維護部分最近使用過的影子頁表,只有當影子頁表在緩存中找不到時,才構建一個新的影子頁表。當前主要的虛擬化技術都采用了影子頁表緩存技術。

3、內存虛擬化的硬件解決方案

為了解決影子頁表導致的上述開銷問題,除了使用影子頁表緩存技術外(這項技術雖然能避免時間上的一部分開銷,但是空間開銷還是實實在在存在的), Intel與AMD公司都針對MMU虛擬化給出了自 的解決方案:Intel公司在Nehalem微架構CPU中推出擴展頁表(Extended Page Table,EPT)技術;AMD公司在四核皓龍CPU中推出快速虛擬化索引(Rapid Virtualization Index,RVI)技術。

RVI與EPT盡管在具體實現細節上有所不同,但是在設計理念上卻完全一致:通過在物理MMU中保存兩個不同的頁表,使得內存地址的兩次映射都在硬件中完成,進而達到提高性能的目的。具體來說,MMU中管理管理了兩個頁表,第一個是GVA >>>GPA,由虛擬機決定;第二個是GPA>>>HPA,對虛擬機透明,由VMM決定。根據這兩個映射頁表,CPU中的page walker就可以生成最近訪問過key-value鍵值對 ,并緩存在TLB中(類似影子頁表緩存技術思路)。

另外,原來在影子頁表中由VMM維持的GPA>>>HPA映射關系,則由一組新的數據結構擴展頁表(Extended Page Table,也稱為Nested Page Table)來保存。由于GPA >>>HPA的映射關系非常定,并在虛擬機創建或修改頁表時無需更新,因此VMM在虛擬機更新頁表的時候無需進行干涉。VMM也無需參與到虛擬機上下文切換,虛擬機可以自己修改GVA >>>GPA的頁表。

我們以Intel EPT技術為例說明。Intel EPT是Intel VT-x 提供的內存虛擬化支持技術,其基本原理下圖所示。在原有的CR3頁表地址映射的基礎上,EPT引入EPT頁表來實現另一次映射。比如:假設客戶機頁表和EPT頁表都是4級頁表,CPU完成一次地址轉換的基本過程如下:

CPU首先查找客戶機CR3寄存器指向的L4頁表。客戶機CR3寄存器給出的是GPA,所以,CPU通過EPT頁表將客戶機CR3中的GPA轉換為HPA:CPU 首先查找EPT TLB,如果沒有相應的記錄,就進一步查找EPT頁表,如果還沒有,CPU則拋出EPT Violation異常交給VMM處理。

CPU獲得L4頁表地址(指的是HPA)后,CPU根據GVA和L4頁表項的內容來獲取L3 頁表項的GPA。如果L4頁表中GVA對應的表項顯示為“缺頁”,那么CPU 產生Page Fault,直接交由客戶機操作系統處理。獲得L3 頁表項的GPA后,CPU通過查詢EPT頁表來將L3的GPA轉換為HPA。同理,CPU 會依次完成L2、L1頁表的查詢,獲得GVA所對應的GPA,然后進行最后一次查詢EPT頁表獲得HPA。

正如上圖所示,CPU需要5次查詢EPT頁表,每次查詢都需要4次內存訪問。這樣,在最壞的情況下總共需要20次內存訪問。EPT硬件通過增大EPT TLB 盡量減少內存訪問。

4、內存虛擬化管理

在虛擬化環境中,內存是保證虛擬機工作性能的關鍵因素。如何盡可能提高虛擬機的性能、提高內存利用率、降低虛擬機上下文切換的內存開銷,依然非常復雜,這就引入了內存虛擬化管理的問題。像介紹CPU虛擬化管理一樣,我們還是通過實例來說明內存的虛擬化管理。以VMware的ESX解決方案為例,在沒有出現硬件支持的內存虛擬化技術之前,ESX/ESXi采用影子頁表來實現虛擬機的虛擬地址到物理機物理地址的快速轉換。當Intel和AMD公司分別推出了EPT與RIV技術之后,ESX/ESXi很快轉向硬件支持來提高內存虛擬化的性能。

4.1 內存復用技術

在虛擬化內存管理 上,ESX/ESXi實現了主機內存超分配的目標:即多個虛擬機總的內存分配量大于物理機的實際內存容量。如下圖所示,一個物理內存只有4GB的Host,可以同時運行三個內存配置為2GB的虛擬機。

主機內存超分配功能意味著VMM必須能夠有效地回收虛擬機中不斷釋放的內存,并在有限的內存容量中盡能 地提高內存利用率。因為,Host Memory與Guest Memory并不是一一對應的關系,通過Host Memory超配技術可以實現某一個Host上某一個虛擬機內存大于主機內存,這一點與CPU虛擬化不一樣。但是,在執行超配技術時,需要考慮主機性能問題,不能過大。一般的超配限額是主機內存的50%。要實現主機內存超配,必須通過內存復用技術實現。目前常用的內存復用技術有:零頁共享技術、內存氣球回收技術和內存置換技術三種。

4.1.1 零頁(透明頁)共享技術

當運行多個虛擬機時,有些內存頁面的內容很可能是完全一樣的,比如:什么數據都沒有的零頁。這就為虛擬機之間甚至在虛擬機內部提供了共享內存的可能。例如:當幾個虛擬機都運行相同的操作系統、相同的應用程序或者包含相同的用戶數據時,那些包含相同數據的內存頁面完可以被共享。基于這個原理,VMM完全可通過回收冗余數據的內存頁面,僅維持一個被多個虛擬機共享的內存拷貝來實現這個功能。

華為FusionCompute的零頁共享技術示意圖

原理如下:用戶進程定時掃描虛擬機的的內存數據,如果發現其數據內容全為零,則通過修改PA to MA映射的形式,把其指向一個特定的零頁,從而做到在物理內存中只保留一份零頁拷貝,虛擬機的所有零頁均指向該頁,從而達到節省內存資源的目的。當零頁數據發生變動時,由Xen動態分配一頁內存出來給虛擬機,使修改后的數據有內存頁進行存放。因此,對GuestOS來說,整個零頁共享技術是完全不感知的。

而在VMware的ESX解決方案中,也有同樣的技術。在VMware ESX/ESXi中,檢測頁面數據是否冗余是通過散列的方法來實現的。

首先VMM會維持一個全局散列表,其中每個表項都記錄了一個物理頁面數據的散列值與頁號。當對某一個虛擬機進行頁面共享掃描時,VMM會針對該虛擬機物理頁面的數據計算散列值,并在全局散列表 中進行遍歷及匹配是否有相同的散列值的表項。當找到了匹配的表項,還要對頁面數據內容逐位比較,以避免由于散列沖突而導致的頁面內容不一樣的可能性。一旦確定頁面數據完全一致,則會修改邏輯地址到物理地址的映射關系,即將從邏輯地址對應到包含冗余數據的物理地址的映射關系(上圖中虛線所示)改為對應到要被共享物理地址的映射關系,并回收冗余的物理頁面。這一過程對于虛擬機操作系統是完全透明的。因此,共享頁面中含有敏感數據的部分不會在虛擬機之間泄露。

當虛擬機對共享頁面發生寫操作時,通過“寫時拷貝”( Copy-on-Write)技術來實現。

具體來說,任何一個對共享頁面的寫操作都會引發頁面錯誤(Minor Page Fault)。當VMM捕獲到這個錯誤時,會給發起寫操作的虛擬機創建一個該頁面的私有拷貝,并將被寫的邏輯地址映射到這個私有拷貝頁面。這樣虛擬機就可以安全地進行寫操作,并且不會影響到其他共享該頁面的虛擬機。相比于對非共享頁面的寫操作,盡管這種處理方法的確導致了一些額外的開銷,但是卻在一定程度上提高了內存頁面的利用率。

4.1.2 內存氣球回收技術

內存氣球回收技術也稱為內存氣泡技術,基于氣球回收法的內存管理機制與頁面共享完全不同。在虛擬化環境中,VMM會一次性在虛擬機啟動后分配給虛擬機內存,由于虛擬機并沒有意識到自己運行于 虛擬化平臺上,之后它會一直運行在分配好的內存空間,而不主動釋放分配的物理內存給其他虛擬機。因此VMM需要一種機制使得虛擬機能夠主動釋放空閑內存歸還給物理機,再由VMM分配給其他有需求的虛擬機。并且,在內存資源需求緊張時還能從物理機中“拿回”自己釋放的那部分內存。

華為FusionCompute內存氣泡技術示意圖

原理如下:Hypervisor通過利用預裝在用戶虛擬機中的前端驅動程序,“偷取”Guest OS的內存貢獻給VMM,以供其他虛擬機使用,反向時由VMM“偷取”氣泡中的內存給特定虛擬機使用。內存氣泡本質是將較為空閑的虛擬機內存釋放給內存使用率較高的虛擬機,從而提升內存利用率。

在VMware的ESX解決方案中,也有類似的技術。

內存釋放過程的原理圖

在上圖(a)中,VMM有四個頁面被映射到虛擬機的內存頁面空間中,其中左側兩個頁面被應用程序占用,而另兩個被打上星號的頁面則是在內存空閑列表中。當VMM要從虛擬機中回收內存時,比如要回收兩個內存頁面,VMM就會將Balloon驅動的目標膨脹大小設置為兩個頁面。Balloon驅動獲得了目標膨脹值之后,就會在虛擬機內部申請兩個頁面空間的內存,并如上圖(b)所示,調用虛擬機操系統的接口標示這兩個頁面被“ 釘住”,即不能再被分配出去。

內存申請完畢后,Balloon驅動會通知VMM這兩個頁面的頁號,這樣VMM就可以找到相應的物理頁號并進行回收。在上(b)中虛線就標示了這兩個頁面從虛擬機分配出去的狀態。

由于被釋放的頁面在釋放前已經在虛擬機的空閑列表中,因此沒有進程會對該頁面進行讀寫操作。如果虛擬機的進程接下來要重新訪問這些頁面,那么VMM可以像平常分配內存一樣,再分配新的物理內存給這臺虛擬機。當VMM決定收縮氣球膨脹大小時,通過設置更小的目標膨脹值,balloon驅動會將已經被“釘住” 的頁面歸還給虛擬機。

通過氣球回收法,盡管虛擬機的負載略微增加,但VMM卻成功地將系統內存壓力轉移到各個虛擬機上。當balloon驅動發起申請內存的請求時,由虛擬機操作系統決定了是否要將虛擬機物理內存換出來滿足balloon驅動的申請內存請求。如果虛擬機有充足的空閑內存,那么balloon驅動申請內存并不會對虛擬機的性能造成影響;如果虛擬機內存已經吃緊,那么就需要由虛擬機的操作系統決定換出哪些內存頁面,滿足balloon驅動的請求。因此,氣球回收法巧妙地利用了各個虛擬機操作系統的內存換頁機制來確定哪些頁面要被釋放給物理機,而不是由VMM來決定。

氣球回收法要求虛擬機操作系統必須安裝balloon驅動,在VMware的ESX/ESXi產品中,就是VMware Tool。另外,氣球回收法回收內存需要一段時間,不能馬上滿足系統的需求。

4.1.3 內存置換技術

頁面共享機制與氣球回收法都從不同的角度盡可能地提高虛擬機的內存利用率,從虛擬機中收回可以復用或者空閑的內存。然而這兩種方法都不能在短時間內滿足系統內存回收的要求:頁面共享依賴于頁面的掃描速度,以及是否有頁面可共享;氣球回收法則取決于虛擬機操作系統對于balloon驅動申請內存的響應時間。如果這兩種溫和的方法都不能滿足需求,VMM則會采取內存換出機制,即強制性地從虛擬機中奪回內存,這就是內存置換技術。

華為FusionCompute和VMware ESX/ESXI的內存置換技術示意圖

原理如下:通過VMM實現請頁功能,這時Guest OS類似進程一樣在VMM缺少內存時,能被換出到宿主機磁盤上,也就是將虛擬機長時間未訪問的內存內容被置換到存儲中,并建立映射,當虛擬機再次訪問該內存內容時再置換回來。該方法也對虛擬機透明,即虛擬機不感知。

具體來說,VMM會在每個虛擬機啟動時創建一個單獨的換頁文件(Swap File)。在必要的時候,VMM會主動將虛擬機的物理內存頁面換到這個換頁文件上,釋放給其他虛擬機使用。內存換出機制是VMM需要在短時間內緩解內存壓力的一種有效方法,然而這種方法卻很可能嚴重導致VMM的性能下降。由于VMM對于虛擬機的內存使用狀態并不解,且該方法對虛擬機透明,強制內存換出可能觸發虛擬機操作系統內部的一些換頁機制。舉例來說,虛擬機操作系統永遠都不會將內核的內存頁面換出,而VMM并不知道哪些頁正在被內核使用,一旦這些頁面被換出,會使得虛擬機性能嚴重受損。

4.2 內存的回收

接下來以VMware ESX為例,結合上述三種內存復用技術,介紹內存回收機制。一般來說,ESX會對物理機的空閑內存狀態按照空閑內存的百分比設置四種狀態,分別是:高(6%)、平緩(4%)、繁重(2%)和低(1%)。ESX會按照這四種狀態來選擇前述三種內存回收機制。

缺省狀態下,ESX會啟用頁面共享機制,因為頁面共享機制能以較小的開銷提高內存利用率。何時啟用氣球回收和換頁則取決于當前系統的內存狀態。當內存狀態處于“高”,很顯然此時總的虛擬機內存使用量要小于物理機的內存容量,因此不管虛擬機的內存是否已經被過載分配,VMM都不會使用氣球 或者換頁的方法回收內存。

然而,當物理機空閑內存狀態下降到了“平緩” 狀態,VMM則開始使用氣球回收法。事實上,氣球回收法是在空閑內存的百分比高于“平緩” 的閾值4%之前啟動的,這是因為該方法總是需要一段時間才能在虛擬機內申請到一些內存。通常氣球回收法都能夠及時將空閑內存比的閾值控制在“平緩”狀態之上。

一旦氣球回收法不能夠及時回收內存,并且空閑內存下降到“繁重”狀態,即空閑內存比低于2%,那么VMM就會再啟動內存換出機制強制從虛擬機回收內存。使用這種辦法,VMM能夠很快回收內存,并將空閑內存比控制回“平緩”狀態。

在最壞的情況下,萬一空閑內存狀態低于“低”狀態,即空閑內存比低于1%,那么VMM會繼續使用內存換出法,同時將那些消耗內存值超過內存配置值的虛擬機掛起。

在某些情況下,VMM可能不會考慮物理機空閑內存狀態,而仍然啟動物理機內存回收機制。比如,即使整個系統的物理機空閑內存狀態為“高”,如果某個虛擬機的內存使用量超過了其指定的內存上限,那么VMM會啟動氣球回收法,如有必要,也會啟動內存換出機制從虛擬機回收內存,直到該虛擬機的內存低于指定的內存上限。

4.3 內存QoS保障

在虛擬化系統中,內存虛擬化的QoS保障包括兩個基本特征:預留和份額。

內存預留:虛擬機預留的最低內存。預留的內存會被VM獨占。即,一旦內存被某個虛擬機預留,即使虛擬機實際內存使用量不超過預留量,其它VM也無法搶占該VM的內存空閑資源。即,上述的三種內存復用技術對該虛擬機不生效。

內存份額:適用上述三種資源復用場景,按比例分配內存資源。以6G內存規格的主機為例,假設其上運行有3臺4G內存規格的虛擬機VMA,VMB,VMC。內存份額分別為20480,20480,40960,那么其內存分配比例為1:1:2。當三臺VM內部逐步加壓,策略會根據三個虛擬機的份額按比例分配調整內存資源,最終三臺虛擬機獲得的內存量穩定為1.5G/1.5G/3G。

⚠同樣需要注意一點:內存份額只在各虛擬機發生資源競爭時生效。如沒有競爭,則有需求的虛擬機可獨占物理內存。

但是,內存QoS不像CPU QoS一樣設置上限?,這是因為分配給虛擬機的內存大小就是其內存上限。

 

責任編輯:未麗燕 來源: 移動Labs
相關推薦

2021-12-21 15:37:46

NFV虛擬化IO虛擬化

2021-06-17 13:28:20

NFV虛擬化服務器

2021-05-17 14:57:22

NFV虛擬化數據

2022-04-12 14:11:27

存儲虛擬化軟件定義服務器

2019-01-09 13:20:51

2019-10-30 15:35:08

虛擬化云計算封裝

2011-12-28 10:44:02

PowerVM虛擬化

2013-04-28 14:34:02

服務器虛擬化

2018-05-08 15:16:59

內存虛擬化處理器

2010-02-04 09:51:53

虛擬交換機

2013-06-19 09:56:39

2016-01-27 13:28:00

虛擬化

2010-09-28 09:08:32

虛擬化云計算

2011-04-21 09:20:28

IaaS網絡虛擬化

2013-05-10 09:47:19

云計算虛擬化

2018-10-09 10:38:09

網絡功能虛擬化NFV5G

2018-04-17 15:03:40

CPU虛擬化半虛擬化

2013-03-18 10:12:25

存儲虛擬化虛擬化技術

2014-03-04 11:49:01

網絡虛擬化NFVSDN

2009-04-14 19:39:55

虛擬化NovellIT
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久国产精品精品国产色婷婷 | 免费特黄视频 | 色综合成人网 | av片毛片 | 亚洲欧美日韩成人在线 | 91成人精品视频 | 国产免费a视频 | 精精国产xxxx视频在线播放7 | 国偷自产av一区二区三区 | 91精品国产91久久久 | 欧美a在线 | 久久久久一区二区三区 | 午夜资源| 午夜av影院 | 日韩精品在线观看视频 | av网站在线播放 | 美美女高清毛片视频免费观看 | 国产在线精品一区二区三区 | 中文字幕精品一区二区三区精品 | 免费三级av | 中文字字幕一区二区三区四区五区 | www.4567| 中文字幕精品一区二区三区精品 | 日韩av高清 | 欧美精品一区二区免费视频 | 国产成人久久精品一区二区三区 | 黄免费在线 | 日韩精品一区二区三区在线播放 | 国产精品视频一区二区三区四区国 | a在线视频 | h视频在线观看免费 | 一区二区三区国产 | 一区二区三区免费在线观看 | 亚洲成人免费视频 | 激情一区二区三区 | 久草在线在线精品观看 | 男女深夜网站 | 毛片a级 | 女人一区 | 国产精品久久久久久久久久三级 | 日本精品一区二区三区视频 |