(KVM連載) 5.1.3 使用virtio_balloon(KVM中的Ballooning)(上)

5.1.3 使用virtio_balloon

1. Ballooning簡介

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

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

很多現代的虛擬機,如KVM、Xen、VMware等,都對Ballooning技術提供支持。關於內存Balloon的概念,其示意圖如圖5-9所示。

 

linux ballooning

linux ballooning

圖5-9 內存Balloon的概念

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. 在氣球中的內存被釋放出來,重新讓客戶機可以訪問和使用。

Ballooning在節約內存和靈活分配內存方面有明顯的優勢,其好處有如下三點。

第一,因爲能夠控制和監控ballooning,所以ballooning能夠潛在地節約大量的內存。它不同於內存頁共享技術(KSM是內核自發完成的、不可控),客戶機系統的內存只有在通過命令行調整balloon時纔會隨之改變,所以能夠監控系統內存並驗證ballooning引起的變化。

第二,Ballooning對內存的調節很靈活,既可以精細的請求少量內存,又可以粗獷的請求大量的內存。

第三,hypervisor使用ballooning讓客戶機歸還部分內存,從而可以緩解其內存壓力。而且從氣球中回收的內存也不要求一定要被分配給另外某個進程(或另外的客戶機)。

從另一方面來說,KVM中ballooning的使用不方便、不完善的地方也是存在的,其缺點也有如下幾個。

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

2. 如果有大量內存從客戶機系統中回收,Ballooning可能會降低客戶機操作系統運行的性能。一方面,內存的減少,可能會讓客戶機中作爲磁盤數據緩存的內存被放到氣球中,從而客戶機中的磁盤I/O訪問會增加;另一方面,如果處理機制不夠好,也可能讓客戶機中正在運行的進程由於內存不足而執行失敗。

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章