閆健恩 張宏莉 許海燕



摘要:隨著云計算平臺運營成本增加,對物力資源的利用率要求也越來越高。虛擬機放置方法是為虛擬機選擇合適的物理宿主機方法,其優劣直接影響到宿主機資源利用的高低,進而影響云計算平臺的運營成本。本文提出了一個基于負載優化的虛擬機放置方法,利用CPU、MEM和硬盤的占用率作為資源負載的指標,描述系統的負載情況,采用“稱重”的方式,計算宿主機的資源利用情況,從而達到資源利用的最大化。實驗表明,相較于OpenStack自帶的虛擬機調度方法,該方法在資源利用率方面有明顯提升。
關鍵詞:云計算:負載優化;虛擬機放置
0引言
隨著云計算的普及應用。虛擬化技術得到快速的發展。云計算中放棄使用價格昂貴的大型機而采用價格相對低廉的集群,使用虛擬化技術實現大型計算和提供基礎設施服務成為趨勢。KVM性能優異、擴展性好以及安全優勢明顯,是目前相關領域選用較多的虛擬化平臺之一。不過由于運營成本不斷提升,人們對資源利用率的要求在不斷提高。如何將物理資源合理的規劃使用,減少物理服務器的使用量,降低運營與維護成本,提升資源利用效率是系統優化資源配置的關鍵問題。
將虛擬機分配到物理服務器中,其本質是虛擬機放置問題。在滿足虛擬機資源需求的前提下,如果能夠將足夠多的虛擬機放置在一個物理服務器中,那么每個物理設備的資源將得到充分的利用,從而減少物理服務器的使用。物理服務器使用量的減少,也必然帶來能量消耗等情況的降低,進而降低云計算平臺的運營成本,保證平臺的可持續性發展。
1 相關研究工作
不少研究者對虛擬機放置問題進行了研究。并將其建模成裝箱問題或多維裝箱問題:箱子即為物理服務器,裝入的物品是運行應用服務的虛擬機,虛擬機所用虛擬CPU、MEM、網絡帶寬等資源是物品的尺寸體積,箱子容量是物理服務器資源的使用閾值。如果物理服務器的數量為M,待放置虛擬機的數量為N,那么虛擬機放置到物理服務器上的解空間為MN。這是一個NP-Hard問題。在多項式時間內無法找到最優解,所以大部分的研究工作都是通過近似算法找到一個近似最優解。
在多維空間求解最優值的策略中,主要有啟發式算法、進化算法及群體智能算法。文獻[3]、文獻[4]和文獻[5]采用啟發式算法,從降低能量消耗的目標研究了虛擬機放置的問題,減少電力資源浪費帶來的成本壓力;文獻[6]和文獻[7]利用啟發式算法研究了各種資源負載均衡在虛擬機放置問題中的作用。文獻[8]采用遺傳算法對虛擬機放置方案的多目標優化問題進行了研究,并獲得了一定的成果。文獻[9]采用群體智能算法的蟻群算法,在考慮能耗和網絡總流量的前提下,研究了虛擬機放置問題,也取得了良好的效果。
2 負載優化的虛擬機放置算法
在進行虛擬機放置時。僅僅考慮將虛擬機放置到哪個物理服務器中是不夠的,若處理方法過于簡單,如隨機或順序等方法,只能完成基本的資源使用需求:如果方法過于復雜,屬性參數在實際應用環境中又存在獲取困難的情況。因此,需要在有限的資源下,尋找合理可行的分配調度方案,實現資源使用效率和方法實用性的平衡。只有充分將已有資源有效利用,才可以減少基礎物理設備的消耗,降低運營成本,將服務能力最大化。
2.1 負載計算
基于KVM的虛擬化技術中,每個KVM虛擬機就是運行在物理宿主機上的一個進程,可以通過進程使用的物理資源情況,衡量虛擬機對宿主機的負載影響。在本文的方法中,考慮實際情況的可操作性,選擇進程的內存占用率、CPU占用率和硬盤占用率作為主要的系統負載參考指標,這些數據可以隨時進行采集,具備可操作性,當為虛擬機分配物理資源時,這三項指標是重要配置參數,直接影響到虛擬機的系統性能。
算法采用的負載計算定義為:
其中,μA、μB、μC分別為內存、CPU和硬盤在定量計算時的占比;Rused、Rtotal分別為已用內存總量、內存總量;Cused、Ctotal分別為已用CPU總量、CPU總量;Dused、Dtotal為已用硬盤總量、硬盤總量;Li為物理宿主機i的負載。
利用上述負載計算方法,本文提出一種簡便易行的基于資源優化的虛擬機放置方法,每當有虛擬機請求放置到物理宿主機上時,便對每臺物理宿主機進行“稱重”(weight calculating algorithm),即計算物理主機剩余資源總量與請求資源的差額,剩余資源與請求資源越接近,則被選擇的可能性越高。此處需解決資源的定量計算問題。當資源種類涉及內存、CPU和硬盤等多種資源時定義,物理服務器的負載為:
其中,Rfree、Rreq、Rtotal分別為可用內存總量、請求內存大小、內存總量;Cfree、Creq、Ctotal分別為可用CPU總量、請求CPU數、CPU總量;Dfree、Dreq、Dtotal分別為可用硬盤總量、請求硬盤大小、硬盤總量;μA、μB、μC分別為內存、CPU和硬盤在定量計算時的比例系數;wi為物理宿主機i稱重之后的計算結果。
2.2 虛擬機放置方法
進行虛擬機調度時,首先獲取虛擬機規格等信息。同時,獲取各個物理主機的狀態,主要包括物理主機的資源總量和剩余資源。
其次,使用過濾方法過濾配額不足的物理主機,如果過濾后結果為空,說明沒有適合放置的物理主機,至此放置失敗,反之則對每個通過過濾的物理主機進行稱重。稱重時,分別對內存、CPU以及硬盤計算資源差百分比,即物理主機剩余資源與請求資源的差值占總資源的百分比,再把上述計算結果分別乘以相應的系數并相加得到稱重結果。本文中,內存、CPU以及硬盤三者的系數分別為0.6、0.3和0.1,系數的取值主要考慮了以下因素:
(1)資源豐富程度。在實際情況,硬盤相較前兩者資源最為豐富,不易成為瓶頸,CPU的虛擬化程度較內存更高,同時CPU切換的靈活性要高于內存頁面的置換。因此從虛擬化的角度來看,相同情況下,CPU資源要富于內存資源:
(2)實驗結果。在多次實驗測試中,觀察到該系數配比下,資源利用率達到了一個較高的水平,滿足實際需要。
最后。對稱重之后的物理主機列表進行升序排序,選擇稱重結果最小的物理主機放置虛擬機。
3 實驗分析
下面對上述方法進行實驗,以測試該方法的可行性。測試中將本方法與OpenStack自帶的filter虛擬機調度算法進行對比測試。
首先,使用5臺計算節點作為初始計算資源節點,分別在5臺服務器中運行一定的負載,模擬生產環境。初始服務的資源占用情況見表1.每臺物理主機節點配置為AMD 4core CPU、8GB RAM、1T GB硬盤,操作系統為Ubuntu Server 14.04,OpenStack的版本為Kilo。申請資源的虛擬機規格相同,都為1核CPU、1G內存、10G硬盤。
分別對10個、20個虛擬機放置的情況,以及1-10個虛擬機進行放置后的物理服務器負載情況進行測試。虛擬機放置情況如圖1和圖2所示,虛擬機放置后物理服務器的負載按2.1節所給負載計算公式分別計算負載變化情況。兩種算法負載變化情況如圖3、圖4所示。
由圖1和圖2中可以看到。WCA方法在宿主機的資源利用上更好,使用的物理服務器數量少,而OpenStack自帶的filter調度方法更趨向于各個宿主物理服務器的負載相對均衡,這樣的結果雖然增加了物理資源的使用量,從而也導致資源利用率的降低。
由圖3和圖4的負載變化情況可知。優化后的算法較原虛擬機調度算法負載變化情況更為穩定,且資源利用更加集中。優化算法中,物理主機負載平穩提高,而原算法始終存在2臺主機負載并未發生變化。綜上所述,優化算法基本達到預期要求。
4 結束語
虛擬機放置方法的優劣直接影響到云計算平臺的資源利用率高低,高效的資源利用率會減少資源消耗,明顯降低平臺的運行成本壓力,有利于平臺提供更好的服務能力。本文的方法雖然在提升宿主物理服務器資源利用上取得了一定的效果,但后續還要繼續研究其它因素對平臺資源負載的影響情況,例如網絡帶寬,網絡流量等。