Xen環境下的內存與CPU分配:性能優化

聲明:本文轉至TechTarget中國的特約虛擬化專家Sander van Vugt所寫文章!

在Xen環境下,硬件的管理並不是僅僅告訴它可以使用哪些PCI設備就可以完事。在準虛擬環境下,內存與CPU分配是可以動態改變的。通過動態更改內存與CPU分配,可以達到優化虛擬機性能的目的。
  啓動物理服務器時,所有的內存資源都會默認被分配給Domain0。然後,其它虛擬機啓動時,會從Domain0獲取內存資源。如果虛擬機是在完全虛擬化模式下運行,hypervisor將無法與虛擬內核對話,當前的內存分配也將無法改變。不過,如果是在準虛擬化模式(paravirtualization)下,Xen的hypervisor就可以動態更變內存分配。採用準虛擬化模式時,一定要確保Domain0至少可以分得一定的內存資源,以免它內存不足。對於Domain0的內存分配最小值,我建議設置爲512MB。
  要爲Domain0預留內存,可以爲內核添加一個啓動項:dom0_mem= 。例如,dom0_mem=512M。打開Grub配置文件進行此設置。在Grub配置文件中,你會看到啓動Xen內核的啓動項。它大體如下:
  title XEN
  root (hd0,0)
  kernel /xen.gz
  module /vmlinuz-
  2.6.16 .46-0.14-xen root=/dev/system/root vga=0x314 
  resume=/dev/system/swap splash=silent showopts
  module /initrd-
  2.6.16 .46-0.14.xen
  在此配置文件中的第一個“module”行後面添加dom0_mem啓動項。添加之後應該是這樣:
  title XEN
   root (hd0,0)
   kernel /xen.gz
   module /vmlinuz-
   2.6.16 .46-0.14-xen root=/dev/system/root vga=0x314 
        resume=/dev/system/swap splash=silent showopts   dom0_mem=512M
   module /initrd-
   2.6.16 .46-0.14.xen
  設置好Domain0的內存分配後,就可以管理你的虛擬機內存分配了。啓動一個虛擬機時,通常它會從Domain0獲取內存資源。內存一旦分配給虛擬機,Domain0將無法再收回,即使所有虛擬機都被停止也不能收回。正是因爲這個原因,所以爲Domain0設置內存最小值非常重要。
  要想更改虛擬機的內存分配,可以利用兩個xm命令:
  • xm mem-set:此命令可以更改一臺虛擬機的當前內存分配;
  • xm mem-max:此命令可以限定一臺虛擬機的內存使用最大值。不過,更改最大值之後需要重啓才能生效。
  更改內存分配之後,一定要使用xm list命令檢查設置是否生效和正確:
xm
  CPU管理
  與內存一樣,你也可以管理虛擬機的CPU分配。如果虛擬機使用的是準虛擬化,CPU的分配也可以動態更改。爲虛擬機分配CPU時,不一定要根據服務器中的物理CPU數目來分。如果你願意,是可以這麼做。不過,這樣做是絕對優化不了性能的。如果將虛擬機與指定的物理CPU綁定,會幫助你大大地提高虛擬機性能。除此之外,還可以調整CPU的運行隊列(run queue),使某臺虛擬機在CPU中具有更高的優先級。
  所有可運行的虛擬CPU(VCPU)都是由物理CPU中的本地運行隊列管理的。這個隊列是按優先級進行排序的,隊列中的每個VCPU平分CPU資源。VCPU的優先級狀態有兩種值:over和under。Over表示它佔用的CPU資源超過了資源平分值,under表示低於這個平分值。如果VCPU的當前狀態爲under,調度程序下次則會優先服務該VCPU。如果調度程序發現在其CPU上沒有虛擬機爲under狀態,則會看其它CPU中是否有VCPU狀態爲under,如果發現,則立即服務該VCPU。通過這種方式,所有CPU都會平均分配CPU資源。
  通過設置weight和cap參數值,管理員可以管理CPU的優先級。Weight參數用於分配CPU cycle,是一個相對值。一個weight爲128的VCPU比一個weight爲64的VCPU獲得的CPU cycle多一倍。因此,利用這個參數可以決定哪個VCPU獲得更多,哪個獲得更少。第二個設置CPU的參數是cap,它設置的是domain獲得的CPU cycle百分數,是一個絕對值。如果設置爲100,就表示那個VCPU會100%地佔用物理CPU的可用cycle。如果cap爲50,則表示該VCPU佔用的CPU cycle絕不會超過總量的一半。
  在如下命令示例中, id爲3的虛擬機weight爲128,允許使用兩個物理CPU的所有CPU cycle:
  xm sched-credit -d 3 -w 128 -c 200
  對於虛擬CPU,還要做的一個重要工作就是CPU分配。默認情況下,虛擬CPU與物理CPU是沒有固定聯繫的。要提高性能,就需要爲它們建立一個這樣的聯繫,這個工作很簡單易行。爲虛擬CPU和物理CPU建立“聯繫”的主要好處是可以防止虛擬CPU到處遊蕩。如果沒有“聯繫”,調度程序會爲虛擬CPU選擇一個物理CPU。當某個物理CPU處於繁忙狀態時,虛擬CPU就會被轉移,由另一個物理CPU服務。這個工作對性能的影響是很大的。因此,將虛擬CPU與物理CPU綁定是個不錯的辦法。
  
  綁定虛擬CPU時,首先利用xm list命令查看當前配置。然後,在你要查看CPU詳細信息的domain中使用xm vcpu-list命令,命令輸出結果如下:
  lin:~ # xm vcpu-list 2
Xen
  這個命令顯示,ID 2 domain當前使用了一個CPU(ID 0),該CPU當前在物理CPU 0。爲了確認它的狀態,可以使用如下命令:
  
  xm vcpu-pin 2 0 1
  如果你再使用xm vcpu-list命令,你會看見CPU Affinity由原來的“any cpu”變爲了CPU 1。
  注意,這個設置是無法被寫入的。意思是,每次重啓虛擬機之後,你都必須再重新設置。
  最後,你還可以更改虛擬機分配的CPU數量。要更改此設置,既可以利用虛擬機管理器(Virtual Machine Manager)進行,也可以使用xm vcpu-set命令。例如,將domain 1分配的VCPU數改爲4個,則:
  xm vcpu-set 1 4
  使用該命令時,你會發現它有時不起作用。這是因爲,虛擬機的操作系統還必須支持動態更改CPU數量,不然就不能這樣更改了。所以,在虛擬機的配置文件中更改其VCPU數更有效,而且不會因爲重啓虛擬機而失效。
  綜述
  對於虛擬機的性能優化,內存與CPU設置很重要,本文已闡述了其原因。此外,你還了解了如何調整虛擬機在物理CPU中的優先級。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章