性能的損耗是關(guān)鍵。KVM采用全虛擬化技術(shù),全虛擬化要由一個(gè)軟件來(lái)模擬硬件,故有一定的損耗,特別是I/O,因此需要優(yōu)化。
KVM性能優(yōu)化主要在CPU、內(nèi)存、I/O這幾方面。當(dāng)然對(duì)于這幾方面的優(yōu)化,也是要分場(chǎng)景的,不同的場(chǎng)景其優(yōu)化方向也是不同的。
KVM的性能已經(jīng)很不錯(cuò)了,但還有一些微調(diào)措施可以進(jìn)一步提高KVM的性能
1、CPU的優(yōu)化
要考慮CPU的數(shù)量問(wèn)題,所有g(shù)uestcpu的總數(shù)目不要超過(guò)物理機(jī)CPU的總數(shù)目。如果超過(guò),則將對(duì)性能帶來(lái)嚴(yán)重影響,建議選擇復(fù)制主機(jī)CPU配置。
2、內(nèi)存的優(yōu)化
(1)KSM(Kernel Samepage Merging,相同頁(yè)合并)
內(nèi)存分配的最小單位是page(頁(yè)面),默認(rèn)大小是4KB,可以將host機(jī)內(nèi)容相同的內(nèi)存合并,以節(jié)省內(nèi)存的使用,特別是在虛擬機(jī)操作系統(tǒng)都一樣的情況下,肯定會(huì)有很多內(nèi)容相同的內(nèi)存值,開(kāi)啟了KSM,則會(huì)將這些內(nèi)存合并為一個(gè),當(dāng)然這個(gè)過(guò)程會(huì)有性能損耗,所以開(kāi)啟與否,需要考慮使用場(chǎng)景。
而KSM對(duì)KVM環(huán)境有很重要的意義,當(dāng)KVM上運(yùn)行許多相同系統(tǒng)的客戶機(jī)時(shí),客戶機(jī)之間將有許多內(nèi)存頁(yè)是完全相同的,特別是只讀的內(nèi)核代碼頁(yè)完全可以在客戶機(jī)之間共享,從而減少客戶機(jī)占用的內(nèi)存資源,能同時(shí)運(yùn)行更多的客戶機(jī)。
KSM會(huì)稍微影響系統(tǒng)性能,以效率換空間,如果系統(tǒng)的內(nèi)存很寬裕,則無(wú)須開(kāi)啟KSM,如果想盡可能多地并行運(yùn)行KVM客戶機(jī),則可以打開(kāi)KSM。ll /sys/kernel/mm/ksm/ //查看內(nèi)核信息
pages_shared合并的頁(yè)面數(shù)
pages_sharing 正在共享單個(gè)頁(yè)面的虛擬頁(yè)面數(shù)
page_unshared 作為共享候選者但當(dāng)前未共享的頁(yè)數(shù)
page_volatile 作為共享候選者但頻繁更改的頁(yè)數(shù),KSM服務(wù)不會(huì)合并這個(gè)頁(yè)面
full_scan 為重復(fù)內(nèi)容掃描KSM的次數(shù)
merge_across_nodes 是否允許在NUMA節(jié)點(diǎn)中執(zhí)行合并
pages_to_scan 一次掃描的頁(yè)數(shù),該數(shù)字會(huì)影響系統(tǒng)性能
sleep_milisecs 掃描之間的時(shí)間間隔
每個(gè)頁(yè)面的大小為4KB,可計(jì)算出共享內(nèi)存為:4頁(yè)面數(shù)=內(nèi)存大小(KB)
cd /sys/kernel/mm/ksm/
cat run //是否開(kāi)啟KSM,0是不開(kāi)啟,1是開(kāi)啟
echo 1 > run //臨時(shí)開(kāi)啟KSM,只能使用重定向,不支持VI編輯器
vi /etc/rc.local //添加echo 1 > /sys/kernel/mm/ksm/run,讓KSM開(kāi)啟自啟
cat pages_to_scan //定期掃描相同頁(yè),sleep_millisecs決定多長(zhǎng)時(shí)間, pages_to_scan決定每次查看多少個(gè)頁(yè)面,默認(rèn)為100,越大越好,超過(guò)2000無(wú)效, 需要開(kāi)啟兩個(gè)服務(wù)ksmtuned和tuned支持更過(guò)頁(yè)面
(2)對(duì)內(nèi)存設(shè)置限制
如果我們有多個(gè)虛擬機(jī),為了防止某個(gè)虛擬機(jī)無(wú)節(jié)制地使用內(nèi)存資源,導(dǎo)致其他虛擬機(jī)無(wú)法正常使用,就需要對(duì)內(nèi)存的使用進(jìn)行限制。virsh memtune c01 //查看當(dāng)前虛擬機(jī)c01內(nèi)存的限制,單位為KB
virsh memtune --help
virsh memtune c01 --hard-limit 1024000 --live //設(shè)置強(qiáng)制大內(nèi)存并且在線生效
virsh memtune c01 //查看
(3)大頁(yè)后端內(nèi)存(Huge Page Backed Memory)
在邏輯地址向物理地址轉(zhuǎn)換時(shí),CPU保持一個(gè)翻譯后備緩沖器TLB,用來(lái)緩存轉(zhuǎn)換結(jié)果,而TLB容量很小,所以如果page很小,TLB很容易就充滿,這樣就容易導(dǎo)致cache miss,相反page變大,TLB需要保存的緩存項(xiàng)就變少,就會(huì)減少cache miss。通過(guò)為客戶機(jī)提供大頁(yè)后端內(nèi)存,就能減少客戶機(jī)消耗的內(nèi)存并提高TLB命中率,從而提升KVM性能。
Intel的x86 CPU通常使用4KB內(nèi)存頁(yè)、但是經(jīng)過(guò)配置,也能夠使用大頁(yè)(huge page): x86_32是4MB,x86_64和x86_32 PAE是2MB,這是KVM虛擬機(jī)的又一項(xiàng)優(yōu)化技術(shù)。
使用大頁(yè),KVM的虛擬機(jī)的頁(yè)表將使用更少的內(nèi)存,并且將提高CPU的效率。cat /proc/meminfo //查看內(nèi)存信息,無(wú)可用大頁(yè)
echo 25000 > /proc/sys/vm/nr_hugepages //指定大頁(yè)需要的內(nèi)存頁(yè)面數(shù)量(臨時(shí)生效)
sysctl -w vm.nr_hugepages=25000 //指定大頁(yè)需要的內(nèi)存頁(yè)面數(shù)永久生效
或者在/etc/sysctl.conf中添加vm.nr_hugepages=2500來(lái)持久設(shè)定大頁(yè)文件系統(tǒng)需要的內(nèi)存頁(yè)面數(shù)。
注意:大頁(yè)文件系統(tǒng)需要的頁(yè)面數(shù)可以由客戶機(jī)需要的內(nèi)存除以頁(yè)面大小來(lái)大體估計(jì)。
virsh destroy c01 //刪除原有的域
virsh edit c01 //編輯虛擬機(jī)的XML配置文件使用大頁(yè)來(lái)分配內(nèi)存
mount -t hugetlbfs /dev/hugepages/ //掛載hugetlbfs文件系統(tǒng)
systemctl restart libvirtd.service
virsh start c01 //開(kāi)啟虛擬機(jī)
cat /proc/meminfo | grep HugePage //查看
virsh destroy c01 //再次刪除
cat /proc/meminfo | grep HugePage //再次查看,發(fā)現(xiàn)大頁(yè)被釋放
3、I/O的優(yōu)化
在實(shí)際的生產(chǎn)環(huán)境中,為了避免過(guò)度消耗磁盤資源而對(duì)其他的虛擬機(jī)造成影響,我們希望每臺(tái)虛擬機(jī)對(duì)磁盤資源的消耗是可以控制的。比如多個(gè)虛擬機(jī)往硬盤中寫數(shù)據(jù),誰(shuí)可以優(yōu)先寫,就可以調(diào)整I/O的權(quán)重weight,權(quán)重越高寫入磁盤的優(yōu)先級(jí)越高。
對(duì)磁盤I/O控制有兩種方式
(1)在整體中的權(quán)重,范圍在100~1000。
(2)限制具體的I/O。virsh blkiotune c01 //查看c01的I/O參數(shù)
virsh blkiotune c01 --weight 500 //設(shè)置權(quán)重為500
virsh blkiotune c01 //再次查看
virsh edit c01 //也可編輯虛擬機(jī)的XML配置文件
virsh blkiotune --help //查看使用幫助
4、系統(tǒng)調(diào)優(yōu)工具tuned/tuned-adm
CentOS在6.3版本以后引入了一套新的系統(tǒng)調(diào)優(yōu)工具tuned/tuned-adm,其中,tuned是服務(wù)端程序,用來(lái)監(jiān)控和收集系統(tǒng)各個(gè)組件的數(shù)據(jù),并依據(jù)數(shù)據(jù)提供的信息動(dòng)態(tài)調(diào)整系統(tǒng)設(shè)置,達(dá)到動(dòng)態(tài)優(yōu)化系統(tǒng)的目的;tuned-adm是客戶端程序,用來(lái)和tuned打交道,用命令行的方式管理和配置tuned/tuned-adm,提供了一些預(yù)先配置的優(yōu)化方案可供直接使用。當(dāng)然不同的系統(tǒng)和應(yīng)用場(chǎng)景有不同的優(yōu)化方案,tuned-adm預(yù)先配置的優(yōu)化策略不是總能滿足要求,這時(shí)候就需要定制,tuned-adm允許用戶自己創(chuàng)建和定制新的調(diào)優(yōu)方案。
yum install tuned -y //安裝和啟動(dòng)tuned工具
service tuned start
tuned-adm active //查看當(dāng)前優(yōu)化方案
tuned-adm list //查看預(yù)先設(shè)定好的優(yōu)化方案
tuned-adm profile virtual-host //修改優(yōu)化方案為virtual-host
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。