kvm記憶體優化 記憶體氣球

2021-08-02 08:42:36 字數 3569 閱讀 1161

一、記憶體氣球技術(使用virtio_balloon)

1、balloon簡介

通常來說,要改變客戶機占用的宿主機記憶體,是要先關閉客戶機,修改啟動時的記憶體配置,然後重啟客戶機才能實現。而記憶體的ballooning(氣球)技術可以在客戶機執行時動態地調整它所占用的宿主機記憶體資源,而不需要關閉客戶機。

ballooning技術形象地在客戶機占用的記憶體中引入氣球(balloon)的概念,氣球中的記憶體是可以供宿主機使用的(但不能被客戶機訪問或使用),所以,當宿主機記憶體使用緊張,空餘記憶體不多時,可以請求客戶機**利用已分配給客戶機的部分記憶體,客戶機就會釋放其空閒的記憶體,此時若客戶機空閒記憶體不足,可能還會**部分使用中的記憶體,可能會換出部分記憶體到客戶機的交換分割槽(swap)中,從而使得記憶體氣球充氣膨脹,從而讓宿主機**氣球中的記憶體可用於其他程序(或其他客戶機)。反之,當客戶機中記憶體不足時,也可以讓客戶機的記憶體氣球壓縮,釋放出記憶體氣球中的部分記憶體,讓客戶機使用更多的記憶體。

當使用balloon命令使客戶機記憶體增加時,最大值不可以大於qemu命令列啟動時設定的記憶體,大於的部分不會生效。

2、kvm中ballooning的原理

kvm中ballooning的工作過程主要如下幾個步驟:

(1)hypervisor(即kvm)傳送請求到客戶機作業系統讓其歸還一定數量的記憶體給hypervisor。

(2)客戶機作業系統中的virtio_balloon驅動接收到hypervisor的請求。

(3)virtio_balloon驅動使客戶機的記憶體氣球膨脹,氣球中的記憶體就不能被客戶機訪問。如果此時客戶機中記憶體剩餘量不多(如某應用程式繫結/申請了大量的記憶體),並不能讓記憶體氣球膨脹到足夠大以滿足hypervisor的請求,那麼virtio_balloon驅動也會讓盡可能多地提供記憶體記憶體使氣球膨脹,盡量去滿足hypervisor的請求中的記憶體數量(即使不一定能完全滿足)。

(4)客戶機作業系統歸還氣球中的記憶體給hypervisor。

(5)hypervisor可以將從氣球中得來的記憶體分配到任何需要的地方。

(6)如果從氣球中得到來記憶體沒有處於使用中,hypervisor也可以將記憶體返還到客戶機中,這個過程為:a. hypervisor發請求到客戶機的virtio_balloon驅動;b. 這個請求讓客戶機作業系統壓縮記憶體氣球;c. 在氣球中的記憶體被釋放出來,重新讓客戶機可以訪問和使用。

3、kvm中balloon的劣勢

(1) ballooning需要客戶機作業系統載入virtio_balloon驅動,然而並非每個客戶機系統都有該驅動(如windows需要自己安裝該驅動)。

(2)如果有大量記憶體從客戶機系統中**,ballooning可能會降低客戶機作業系統執行的效能。一方面,記憶體的減少,可能會讓客戶機中作為磁碟資料快取的記憶體被放到氣球中,從而客戶機中的磁碟i/o訪問會增加;另一方面,如果處理機制不夠好,也可能讓客戶機中正在執行的程序由於記憶體不足而執行失敗。

(3)目前沒有比較方便的、自動化的機制來管理ballooning,一般都是採用在qemu monitor中執行balloon命令來實現ballooning的。沒有對客戶機的有效監控,沒有自動化的ballooning機制,這可能會讓生產環境中實現大規模自動化部署並不很方便。

(4)記憶體的動態增加或減少,可能會使記憶體被過度碎片化,從而降低記憶體使用時的效能。另外,記憶體的變化會影響到客戶機核心對記憶體使用的優化,比如:核心起初根據目前狀態對記憶體的分配採取了某個策略,而突然由於balloon的效果讓可用記憶體減少了很多,這時起初的記憶體策略可能就不是太優化的了。

二、記憶體氣球技術的應用例項

(一)記憶體限制技術

1、宿主機記憶體氣球技術配置

kvm的記憶體氣球技術可以在虛擬機器之間按照需要調節記憶體大小,提高記憶體的利用率。使用的時候需要在虛擬機器中安裝virt balloon的驅動,核心開啟config_virtio_balloon(對於centos6.x以上的系統預設開啟),並且預設已經安裝virt balloon驅動。

(1)如圖檢視宿主機是否支援virtio:

只要有virtio的關鍵字,就代表支援virtio

(2)如圖檢視centos6.5虛擬機器中安裝驅動:

2、虛擬機器記憶體氣球配置

(1)檢視當前記憶體大小

(2)限制記憶體

3、windows系統

(二)在宿主機中獲取虛擬機器記憶體利用率

該功能只能在centos7中使用(很無語。。。。)

1、centos虛擬機器

(1)設定採集資訊,可以在虛擬機器配置檔案中更改也可以手動設定

手動設定:

(2)檢視記憶體

根據這些資訊即可求得記憶體利用率。

2、對於windows虛擬機器

(1)安裝驅動

a. 進入「裝置管理器」 - 「系統裝置」,安裝「未知裝置」為「virtio balloon driver」

b. 將virtio-win光碟機中的win7/x86目錄拷貝到「c:/program files/balloon」

c. 以管理員身份使用cmd命令列進入上述目錄

d. 執行「blnsvr.exe -i」用以安裝blnsvr服務

e. 正常關機儲存設定

(2)與centos系統相同。

三、使用centos7注意事項

1、安裝linux虛擬機器沒問題

2、安裝windows虛擬機器需用命令安裝

virt-install –name=win71 –ram=2048 –vcpus=4 –disk path=/home/kvmshare/win7_64.img,size=60 –cdrom /data/win7_64.iso –force –autostart –network bridge=br0,model=virtio –graphics vnc –os-variant rhel6

KVM 記憶體虛擬化

除了 cpu 虛擬化,另乙個關鍵是記憶體虛擬化,通過記憶體虛擬化共享物理系統記憶體,動態分配給虛擬機器。虛擬機器的記憶體虛擬化很象現在的作業系統支援的虛擬記憶體方式,應用程式看到鄰近的記憶體位址空間,這個位址空間無需和下面的物理機器記憶體直接對應,作業系統保持著虛擬頁到物理頁的對映。現在所有的 x8...

KVM 記憶體虛擬化

dev kvm 裝置 虛擬化分為軟體虛擬化和硬體虛擬化,而且遵循 intercept 和 virtualize 的規律。記憶體虛擬化也分為基於軟體的記憶體虛擬化和硬體輔助的記憶體虛擬化,其中,常用的基於軟體的記憶體虛擬化技術為 影子頁表 技術,硬體輔助記憶體虛擬化技術為 intel 的 ept ex...

kvm調整配置cpu 記憶體

一 調小記憶體 ps 調小記憶體可以動態實現,不用關機 1 產看當前配置 virsh dominfo vm grep memory max memory 8388608 kib used memory 4194304 kib 2 設定虛擬機器記憶體 512m virsh setmem vm 5242...