首頁 > 軟體

KVM虛擬機器按需優化範例

2020-06-16 16:43:56

一、KVM為什麼要調優

  • 效能的損耗是矛盾的根源,KVM採用全虛擬化技術,全虛擬化要由一個軟體來模擬硬體層,故有一定的損耗,特別是I/O輸入輸出。
  • KVM效能優化主要在CPU、記憶體、I/O這幾方面,當然在這幾方面也是要分場景的,不同場景優化方向也是不同的。

二、KVM優化思路及步驟

1、CPU優化

  • 要考慮CPU的數量問題,所有guestcpu的總數目不要超過物理機CPU總數目,如果超過,則將對效能帶來嚴重影響,建議選擇複製主機CPU設定。

2、記憶體優化

(1)KSM---kernel Samepage Merging 相同頁合併

  • 記憶體分配的最小單位是page(頁面),預設大小是4KB,可以將host主機內容相同的記憶體合併,以節省記憶體的使用。
  • 當KVM上執行許多相同系統的客戶機時,客戶機之間將有很多記憶體頁是完全相同的,特別是唯讀的核心內碼表完全可以在客戶機之間共用,從而減少客戶機佔用的記憶體資源,也能同時執行更多的客戶機。

ll //sys/kernel/mm/ksm/

  • 檢視KSM是否開啟

cat run

[root@bogon ksm]# cat run    //是否開啟KSM,0為關閉,1為開啟
0
[root@bogon ksm]# echo 1 > run  //臨時開啟KSM,只能使用重定向,不支援VI編輯器
                                //若想永久開啟,可在/etc/rc.local中新增echo 1 > /sys/kernel/mm/ksm/run,讓KSM開機自動執行
[root@bogon ksm]# cat pages_to_scan  //定期掃描相同頁,sleep_millisecs決定多長時間
                                     //pages_to_scan決定每次檢視多少個頁面
                                     //預設是100,越大越好,超過2000無效,需要開啟兩個服務ksmtuned和tuned,支援更多頁面

(2)對記憶體設定限制

  • 如果我們有多個虛擬機器,為了防止某個虛擬機器無節制的使用記憶體資源,導致其他虛擬機器無法正常使用,就需要對使用的記憶體進行限制。

virsh memtune c7-1 //檢視當前虛擬機器的記憶體限制,單位為KB

hard_limit     : 無限制       //強制最大記憶體
soft_limit     : 無限制       //可用最大記憶體
swap_hard_limit: 無限制       //強制最大swap使用大小
  • 設定強制最大記憶體為100MB,線上生效。

virsh memtune c7-1 --hard-limit 1024000 --live

3、大頁後端記憶體

  • 在邏輯地址想實體地址轉換時,CPU保持一個翻譯後備緩衝器TLB,用來緩衝轉換結果,而TLB容量很小,所以如果page很小,TLB很容易就充滿,這樣就容易導致cache miss,相反page變大,TLB需要儲存的快取項就變少,就會減少cache miss,通過為用戶端提供大頁後端記憶體,就能減少客戶機消耗的記憶體並提高TLB命中率,從而提高KVM效能。

  • 檢視記憶體資訊,無可用大頁

cat /proc/meminfo

HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
  • 指定大頁需要的記憶體頁面數量

echo 25000 > /proc/sys/vm/nr_hugepages //臨時生效

  • 永久生效
sysctl -w vm.nr_hugepages=25000
或者
vim /etc/sysctl.conf
vm.nr_hugepages=25000    //新增行,執行sysctl -p 立即生效
  • 關閉虛擬機器,編輯虛擬機器XML組態檔使用大頁來分配記憶體。

virsh destroy c7-1
vim /etc/libvirt/qemu/c7-1.xml

......
<domain type='kvm'>
  <name>c7-1</name>
  <uuid>09ea8217-8943-47b1-9275-63b0357d31e2</uuid>
  <memory unit='KiB'>2097152</memory>
  <currentMemory unit='KiB'>2097152</currentMemory>
  <memoryBacking><hugepages/></memoryBacking>   //新增,使用大頁
  <vcpu placement='static'>1</vcpu>
  <os>
    <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
    <boot dev='hd'/>
......

  • 重新啟動KVM服務,開啟虛擬機器,檢視大頁記憶體是否生效。

systemctl restart libvirtd.service
virsh start c7-1
cat /proc/meminfo | grep HugePage

  • 關閉虛擬機器,再檢視大頁記憶體是否有變化。

4、I/O優化

  • 在實際的生產環境中,為了米麵過度消耗磁碟資源而對其他的虛擬機器造成影響,我們希望每台虛擬機器對磁碟資源的消耗是可控的,比如多個虛擬機器往硬碟中寫資料,誰可以優先寫,就可以調整I/O的權重weight,權重越高寫入磁碟的優先順序越高。

  • 對磁碟I/O控制方式有兩種方式:

在整體中的權重,範圍在100~1000.
限制具體的I/O.

  • 針對虛擬機器權重設定

virsh blkiotune c7-1 //檢視當前虛擬機器權重狀態

virsh blkiotune c7-1 --weight 500 //通過命令修改權重為500

5、系統調優工具tuned/tuned-adm

  • tuned是伺服器端程式,用來監控和收集系統各個元件的資料,並依據資料提供的資訊動態調整系統設定,達到動態優化系統的目的。
  • tuned-adm是用戶端程式,用來和tuned打交道,用命令列的管理方式和設定tuned/tuned-adm,提供了一些預先設定的優化方案可直接使用。

yum install tuned -y
service tuned start
tuned-adm active
tuned-adm list

  • 更改解決方案

tuned-adm profile desktop


IT145.com E-mail:sddin#qq.com