內存復用技術(內存共享、內存置換、內存氣泡)、虛擬機QoS、內存大頁、內存位圖、快照、虛擬機熱遷移


1、內存復用

我們之前提到了內存復用技術,可以對內存進行超分,提高資源使用率。如下圖所示,1台8G內存的物理機,假如裝了2台4G內存的虛擬機,vm1,vm2占用的是虛擬內存,實際上並沒有把物理內存真正的使用完。所以這時候通過內存復用技術,就可以繼續發放虛擬機,提高硬件資源的利用率。常見的有三種內存復用技術,分別是:內存共享、內存置換、內存氣泡。下面我們詳細的說明一下這三種技術。

 

(1)內存共享:

所有的虛擬機共享一段內存,共享的內存段是只讀的。

如下圖所示,假如下邊是我們的物理內存,上邊是我們的虛擬機,在物理內存里邊有一段內存同時給這3個虛擬機共享,假如物理內存的這段內存中的數據是123,那么這3台虛擬機共享的這段內存也都是123。物理機上的這段內存相當於母卷,別的虛擬機共享母卷中的內容。這樣一來,物理資源就節省了三倍資源,不然的話每台虛擬機都需要在物理內存上占用一個123。

那么這個數據除了只讀,能修改嗎?它是可以修改的。但是修改的時候他會在占用另外一個內存段,類似於差分卷,修改的所有內容都會放在差分卷里。總結一下就是:讀取的時候從母卷進行讀,修改的時候寫入到差分卷里。這就是內存共享技術。

 

 

 (2)內存置換:

我們在Linux中進行磁盤分區時,會看到有一個swap分區,即交換分區。那么交換分區是干嘛的呢?當內存比較小的時候,會在磁盤上開辟出來一段空間,給內存置換使用。 當內存不夠用的時候,把一些冷數據置換在磁盤上。冷數據就是指一段時間沒有被使用的數據,時間越長越冷。比如說123這個數據好久沒用了,內存現在不夠用了,那么內存就會把123暫時置換到磁盤上,以此騰出內存空間加載別的數據。未來如果要重新用到123,再把123給拿回來。這就是內存置換技術。

  

(3)內存氣泡:

假如我們有兩台虛擬機,每台虛擬機規格4G內存,但是並不是每一時刻虛擬機都可以完全使用完這4G大小,因此,hypervisor(VMM)會回收這些未使用完的內存資源,然后給到使用率較高的虛擬機。通過擠壓其他虛擬機的內存,把內存釋放給其他內存使用率較高的虛擬機。這就是內存氣泡技術。

 

通過內存復用技術,可以將物理內存利用率提升至150%,同等內存資源條件下,虛擬機開機密度會提升150%,節省50%硬件采購成本。但是與此同時,如果采用了內存復用,相應的性能就下降了。所以一般在生產環境中,不會開啟主機的內存復用。

 

 

 

2、虛擬機QoS(quality of service)

服務質量控制。QoS包含CPU和內存兩個部分。

(1)CPU QoS

CPU部分主要包含三個參數。分別是:CPU資源份額、CPU資源預留、CPU資源限額。下圖是官方文檔給出的解釋:

 

總的來說,CPU資源份額代表了虛擬機的權重,在競爭CPU物理資源時,會按照份額(權重)比例來分配CPU資源。CPU資源預留保證了虛擬機的下限,比如如果按份額計算的這台虛擬機只能分配到200MHZ的計算資源,但是我們設置的CPU預留資源是500MHZ,那么不管在什么情況下,這台虛擬機最少能獲得500MHZ的計算資源,就不會在按計算的份額去分配計算資源。CPU資源限額保證了虛擬機的上限,假如沒有設置的話,比如這台主機只運行了一台虛擬機,那么這台虛擬機可以使用2.8GHZ的物理資源,但是如果我們設置了CPU資源限額為800MHZ,那么不管在什么情況下,這台虛擬機最多能獲得800MHZ的計算資源。這就是CPU的QOS質量服務。

 

(2)內存QoS

內存部分也主要包含三個參數。分別是:內存資源份額、內存資源預留、內存資源限額。其含義和CPU一樣。下圖是官方文檔給出的解釋:

 

 

 

 3、內存大頁

我們在創建虛擬機時,在配置內存時,除了份額、預留等,還有一個內存大頁配置項,什么是內存大頁呢?

 

不管是windows還是Linux,內存也默認大小是4K,也就是一個文件或一個程序在操作系統里邊占據的最小的內存單位就是一個內存頁,即4k。同樣的,內存頁是4k,那么底層的數據快大小就是4k。

物理內存是連續的,但是虛擬內存不是,虛擬內存和物理內存只是映射關系。如下圖所示,下邊是物理內存,上邊是虛擬內存 ,當我們打開了一個瀏覽器時,它可能用的是物理內存的5,他們之間是一個映射關系,當掉瀏覽器時,他們之間的映射關系也就不存在了。當在打開時,它可能和別的物理內存塊產生了映射關系,比如映射到物理內存的4上。這種反反復復的映射是會消費資源的,也會影響性能。那么我們能不能將他們的映射關系保存下來呢?這樣下次打開的時候就可以直接映射。CPU里邊有一個小芯片mmu(memory managment unit),就是用來管理這個的,mmu使用頁表直接保存虛擬內存和物理內存的映射關系。這個頁表叫做TLB(translation lookside buffer),高速緩沖區。

 

假如說TLB最多只能保存10條對應關系,因為一個內存的最小單元(內存頁)是4k,所以默認只能保存40k大小內存的映射關系。但是我們為了提高命中率(即根據頁表能查到對應的映射關系),肯定希望TLB中能保存的條目數越多越好,但是因為mmu內置在cpu中,而cpu的資源是非常寶貴的,所以我們沒辦法擴大TLB的大小。那么怎么辦呢?我們只能去調整內存頁的大小,假設把內存頁大小調整成2M,那么同樣的10條映射關系,TLB就可以保存20M大小內存的映射關系。

所以上述配置中的內存大頁其實就是把內存頁調整為多大,從而提升命中率。既然大頁可以提高命中率(TLB保存的數據空間會很大),是不是意味着所有的應用場景都可以選擇開啟大頁?當然不是。如果我們的環境中跑的大多是數據庫,因為數據庫很占內存,這個時候我們可以開啟大頁。但是如果我們只是跑個微信,QQ等,就會造成大量的內存資源浪費。比如將大頁設置成1G,那么我們的內存最小單元就是1G,微信可能才占幾十M,那么剩下的資源就全部浪費了。所以我們要根據不同的業務場景能選擇是否開啟大頁。 另外需要注意的是,開啟大頁的虛擬機不支持集群資源調度,是沒辦法遷移的,因為比如你的大頁是2M,別的是4K,他們是沒辦法互相遷移的。所以大頁虛擬機最好部署在獨立的集群中。 

 

 

4、虛擬機熱遷移

我們集群中的虛擬機是可以進行熱遷移的,即把這個主機上的虛擬機遷移到另外一台主機上去。整個遷移過程是無感知的,不影響上層業務。我們可以看到這里有三種遷移方式,他們有什么區別呢?

 

 

 

 

 (1)更改主機

如圖所示,下邊是我們的共享存儲,上邊是我們的虛擬機,存儲通過LUN映射給虛擬機,我們把虛擬機從這個主機遷移到另一個主機上,這個時候實際上我們遷移的是計算資源,即CPU和內存。存儲並沒有改變。這就是僅主機遷移模式。這種模式的前提是必須使用的是共享存儲。

 

 

 

 

(2)更改數據存儲

將虛擬機及其存儲(包括虛擬磁盤、配置文件或其組合)移至同一主機上的新數據存儲。即我們更改的不是主機,更改的只是同一主機上的不同磁盤或者LUN,如下圖所示:

 

(3)更改主機和數據存儲,即把前兩種方式結合起來。

 

 

 

5、內存位圖

在僅主機方式遷移時,虛擬機熱遷移底層是遷移的計算資源,但是從上層來看,其實他遷移的只是內存中的數據。冷遷移的時候虛擬機是關機的,內存沒有資源,這個沒什么問題,但是在熱遷移的過程中,內存又被寫入了新的數據怎么辦?這就用到了內存位圖。

內存位圖:通過0和1來管理內存的哪些地方被使用了,哪些地方沒有被使用,通過內存位圖我們可以知道內存中的哪些地址被使用了,哪些沒有被使用。如下圖所示:

 

 

 當我們發生熱遷移的那一瞬間,他會在CNA主機的內存里面創建一個內存位圖,根據初始的內存位圖說顯示的數據,它會把對應的內存數據遷移過去,在遷移的過程中,依然有業務往這台虛擬機的內存中寫入數據,他就又會創建第二個位圖,來記錄剛才的遷移過程中有哪些數據發生變化,然后根據第二個位圖,又會把發生改變的內存數據遷移過去,因為業務是連續的,所以在第二個位圖遷移過程中,內存數據還是會發生變化,所以會形成第三個內存位圖,以此類推,過程如下圖所示:

 

 

 

 

那么什么時候會結束這個過程呢?當主機自己認為數據量足夠小了,原虛擬機會短暫的暫停。在暫停的時候在往里寫數據是寫不進去的,但是因為數據量足夠小,且遷移的速度足夠快,所以用戶是無感知的。但是會不會存在主機自己認為數據量足夠小,但是最后發生內存數據丟失的功能。我們在創建虛擬機的時候會看到有一個tools,如果我們的虛擬機安裝了tools,就不會發生數據丟失的情況,但是如果虛擬機沒有安裝tools,就有可能會發生數據丟失。

 

 

6、快照

快照能夠保存虛擬機在某一時刻的數據狀態,我們在創建快照時,有兩種快照方式。

(1)一致性快照

我們在創建快照時,先將內存中的數據寫入磁盤,使磁盤中的數據和內存保持一致,然后在對磁盤創建快照,我們稱這種快照方式為一致性快照。還原快照的時候也只需還原磁盤就行。

(2)內存快照

對現階段的內存和磁盤數據直接做快照,還原的時候也是直接還原內存數據和磁盤數據。

 需要注意的是,華為的FusionComputer中,一致性快照只支持windows系統,不支持Linux。 內存快照windows和linux都支持。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM