1. 程式人生 > 實用技巧 >KVM的部署與優化(2)

KVM的部署與優化(2)

接上文-----《KVM的概念與雲端計算》


cpu的快取繫結cpu的優化

[[email protected]~]#lscpu|grepcacheL1dcache:32KL1icache:32KL2cache:256KL3cache:3072K

L1是靜態快取,造價高,L2,L3是動態快取,通過脈衝的方式寫入0和1,造價較低。cache解決了cpu處理快,記憶體處理慢的問題,類似於memcaced和資料庫。如果cpu排程器把程序隨便排程到其他cpu上,而不是當前L1,L2,L3的快取cpu上,快取就不生效了,就會產生miss,為了減少cache miss,需要把KVM程序繫結到固定的cpu上,可以使用taskset把某一個程序繫結(cpu親和力繫結,可以提高20%的效能)在某一個cpu上,例如:taskset -cp 1 25718(1指的是cpu1,也可以繫結到多個cpu上,25718是指的pid).

cpu繫結的優點:提高效能,20%以上

cpu繫結的缺點:不方便遷移,靈活性差

b、記憶體的優化

1)記憶體定址:宿主機虛擬記憶體 -> 宿主機實體記憶體

虛擬機器的虛擬記憶體 -> 虛擬機器的實體記憶體

以前VMM通過採用影子列表解決記憶體轉換的問題,影子頁表是一種比較成熟的純軟體的記憶體虛擬化方式,但影子頁表固有的侷限性,影響了VMM的效能,例如,客戶機中有多個CPU,多個虛擬CPU之間同步頁面資料將導致影子頁表更新次數幅度增加,測試頁表將帶來異常嚴重的效能損失。如下圖為影子頁表的原理圖

wKioL1ZpjiySSHaLAABARR8ozpY926.png

在此之際,Inter在最新的Core I7系列處理器上集成了EPT技術(對應AMD的為RVI技術),以硬體輔助的方式完成客戶實體記憶體到機器實體記憶體的轉換,完成記憶體虛擬化,並以有效的方式彌補了影子頁表的缺陷,該技術預設是開啟的,如下圖為EPT技術的原理。

wKiom1ZpmeDDA8vsAAAfYt6BdjU357.jpg

2)KSM記憶體合併

宿主機上預設會開啟ksmd程序,該程序作為核心中的守護程序存在,它定期執行頁面掃描,識別副本頁面併合並副本,釋放這些頁面以供它用,CentOS7預設是開啟的

[[email protected]~]#psaux|grepksmd|grep-vgreproot2860.00.000?SN12:320:00[ksmd]

3)大頁記憶體,CentOS7預設開啟的

[[email protected]~]#cat/sys/kernel/mm/transparent_hugepage/enabled

[always]madvisenever[[email protected]~]#psaux|grepkhugepage|grep-vgrep
root2870.20.000?SN12:320:21[khugepaged]


Linux平臺預設的記憶體頁面大小都是4K,HugePage程序會將預設的的每個記憶體頁面可以調整為2M。

c、磁碟IO的優化

IO排程演算法,也叫電梯演算法,詳情請看http://www.unixhot.com/article/4

1、Noop Scheduler:簡單的FIFO佇列,最簡單的排程演算法,由於會產生讀IO的阻塞,一般使用在SSD硬碟,此時不需要排程,IO效果非常好

2、Anticipatory IO Scheduler(as scheduler)適合大資料順序順序儲存的檔案伺服器,如ftp server和web server,不適合資料庫環境,DB伺服器不要使用這種演算法。

3、Deadline Schedler:按照截止時間的排程演算法,為了防止出現讀取被餓死的現象,按照截止時間進行調整,預設的是讀期限短於寫期限,就不會產生餓死的狀況,一般應用在資料庫

4、Complete Fair Queueing Schedule:完全公平的排隊的IO排程演算法,保證每個程序相對特別公平的使用IO

檢視本機Centos7預設所支援的排程演算法

[[email protected]~]#dmesg|grep-i"scheduler"[11.312549]ioschedulernoopregistered[11.312555]ioschedulerdeadlineregistered(default)[11.312606]ioschedulercfqregistered

臨時更改某個磁碟的IO排程演算法,將deadling模式改為cfq模式

[[email protected]~]#cat/sys/block/sda/queue/scheduler

noop[deadline]cfq[[email protected]~]#echocfq>/sys/block/sda/queue/scheduler[[email protected]~]#cat/sys/block/sda/queue/schedulernoopdeadline[cfq]

使更改的IO排程演算法永久生效,需要更改核心引數

[[email protected]~]#vim/boot/grub/menu.lst

kernel/boot/vmlinuz-3.10.0-229.el7roroot=LABEL=/elevator=deadlinerhgbquiet



d、cache的優化,關於write through和write back,預設write through即可

Write-back

在這種策略下,當資料被寫到raid卡的cache中,控制器就向IO排程器返回了寫操作完成訊號; 雙刃劍,它雖然帶來了IO效能的提升,但是隨之而來的風險:因為cache是ROM,假設伺服器突然斷電,則cache中的資料可能丟失; 為了解決這個問題,raid卡加加裝一塊鋰電池(BBU),即當伺服器斷電時,能把cache中的資料刷到磁碟上;同樣的道理,BBU又成為一個風險點,因為鋰電池需要保證始終有足夠的電量來保證能將cache中的資料寫到磁碟上,raid卡會加入一個BBU的管理策略,learn cycle(充放電週期,一般有30/90天,讓電池充放電一次,持續約6小時),那麼這6小時又稱為一個風險點;所以raid卡又會增加一個策略:No WB when bad bbu,即當BBU壞掉,或者BBU正在充放電時,禁用write-back,此時Write policy就會變成:write-through。

wKioL1ZpqjuSBfqHAADscRDGpgM591.png

Write through

只有當資料被寫到物理磁碟中,控制器才向IO排程器返回了寫操作完成訊號; 這種策略以犧牲IO效能,來保證資料安全性,淘寶這邊的策略:因為Write-Through的io效能無法滿足業務的需求,所以我們這邊會採用另一個模式:WB when bad bbu,即不管bbu狀態是否正常,我們都會採用write-back,那資料安全怎麼辦?伺服器異常斷電的情況,在我們這邊概率極低;即便很不幸的我們IDC區域性斷電了,我們也有主備模式來保證資料的相對安全;我們會監控BBU的狀態,一旦發生了BBU failed,我們會將安排停機更換

wKiom1Zpqknh_30-AAEAvIAoG2Y580.png



五、建立虛擬機器映象

1、由於在一開始建立了虛擬磁碟,並命名為CentOS-7.1-x86_64.raw,這就是虛擬機器的映象嘍。

[[email protected]~]#cd/opt/[[email protected]opt]#lsCentOS-7.1-x86_64.isoCentOS-7.1-x86_64.rawrh

2、映象製作原則

1、分割槽的時候,只分一個/根分割槽,並不需要swap分割槽,由於虛擬機器的磁碟效能就不好,如果設定了swap分割槽,當swap工作的時候,效能會更差。例如阿里雲主機,就沒有交換分割槽。

2、映象製作需要刪除網絡卡(eth0)中的UUID,如果有udev(/etc/udev/rules.d/70-persistent-ipoib.rules)的規則也要刪除

3、關閉selinux,關閉iptables

4、安裝基礎軟體的包:net-tools lrzsz screen tree vim wget

本文出自 “思想決定高度” 部落格,請務必保留此出處http://chuck.blog.51cto.com/10232880/1720953

轉載於:https://blog.51cto.com/chenjisong/1725475