1. 程式人生 > 其它 >記憶體複用技術(記憶體共享、記憶體置換、記憶體氣泡)、虛擬機器QoS、記憶體大頁、記憶體點陣圖、快照、虛擬機器熱遷移

記憶體複用技術(記憶體共享、記憶體置換、記憶體氣泡)、虛擬機器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)記憶體快照

對現階段的記憶體和磁碟資料直接做快照,還原的時候也是直接還原記憶體資料和磁碟資料。