KVM总结-KVM性能优化之网络性能优化
前面已經(jīng)介紹了KVM CPU優(yōu)化(http://blog.csdn.net/dylloveyou/article/details/71169463)、內(nèi)存優(yōu)化(http://blog.csdn.net/dylloveyou/article/details/71338378)、磁盤(pán)IO優(yōu)化(http://blog.csdn.net/dylloveyou/article/details/71515880),下面繼續(xù)介紹網(wǎng)絡(luò)性能調(diào)優(yōu)。
首先,我給大家看一張圖,這張圖是數(shù)據(jù)包從虛擬機(jī)開(kāi)始然后最后到物理網(wǎng)卡的過(guò)程。?
我們分析下這張圖,虛擬機(jī)有數(shù)據(jù)包肯定是先走虛擬機(jī)自身的那張?zhí)摂M網(wǎng)卡,然后發(fā)到中間的虛擬化層,再然后是傳到宿主機(jī)里的內(nèi)核網(wǎng)橋中,最后傳到物理網(wǎng)卡,這個(gè)過(guò)程很好理解。
那么我們要做網(wǎng)絡(luò)的優(yōu)化,讓虛擬機(jī)的網(wǎng)絡(luò)運(yùn)行得更加高效,我們要想的就是讓虛擬機(jī)訪問(wèn)到物理網(wǎng)卡的層次要少。或者說(shuō)能不能讓宿主機(jī)的物理網(wǎng)卡直接丟給虛擬機(jī)用,這樣達(dá)到最高的網(wǎng)絡(luò)性能。
那么目前KVM提高網(wǎng)絡(luò)性能這塊有以下四種方法:
使用virtio半虛擬化網(wǎng)卡
首先要明確一點(diǎn),那就是全虛擬化網(wǎng)卡的性能是不如半虛擬化網(wǎng)卡的,因?yàn)榘胩摂M化網(wǎng)卡virtio是使用了驅(qū)動(dòng)進(jìn)行改造了的,所以性能上肯定是強(qiáng)過(guò)用戶態(tài)下的全虛擬化網(wǎng)卡,這點(diǎn)我們?cè)谇懊嬷v磁盤(pán)優(yōu)化的時(shí)候也提到過(guò)。?
?
這張圖可以看出全虛擬化跟半虛擬化的區(qū)別。?
?
使用virtio 就是讓vm的數(shù)據(jù)包直接跟虛擬化層接觸,如上圖。
注意,Linux的內(nèi)核是從2.6.24才開(kāi)始支持Virtio的。CentOS6系列都是支持的,我們查看linux是否支持Virtio可以通過(guò)下面這個(gè)命令查看:
grep -i Virtio /boot/config-2.6.32-358.2.1.el6.x86_64?(演示的宿主機(jī)是CentOS7.1)?
Linux系統(tǒng)原生自帶就有,但是如果你的虛擬機(jī)是Windows,那么得裝Virtio驅(qū)動(dòng)。
那么下載Virtio驅(qū)動(dòng)是在這個(gè)網(wǎng)址:?
http://www.linux-kvm.org/page/WindowsGuestDrivers/Download_Drivers
使用Virtio,我們可以在創(chuàng)建虛擬機(jī)的時(shí)候在Virtual Machine Manager圖形界面里指定下:?
當(dāng)然也可以編輯XML文件,添加<model type='virtio'/>?
如果你不指定,那么虛擬機(jī)會(huì)默認(rèn)使用8139的全虛擬化網(wǎng)卡,8139網(wǎng)卡是Realtek的百兆。
在實(shí)際的測(cè)試結(jié)果中使用virtio要比使用e1000或者rtl8139網(wǎng)絡(luò)吞吐性能要高出2倍左右,如下圖的測(cè)試數(shù)據(jù)就可以看出,注意,藍(lán)色和綠色分別是全虛擬化下的8139和e1000,紅色的就是virtio模式;測(cè)試的數(shù)據(jù)差距確實(shí)很大。?
使用vhost_net
vhost-net是對(duì)于virtio的優(yōu)化,在內(nèi)核中加入了vhost-net.ko模塊,使得對(duì)網(wǎng)絡(luò)數(shù)據(jù)可以在內(nèi)核態(tài)得到處理。?
我們可以從這圖看到,數(shù)據(jù)包從虛擬網(wǎng)卡出來(lái)后,直接跳到了內(nèi)核那一層中。這里要注意的是,如果你要使用vhost-net那么,你虛擬機(jī)的網(wǎng)卡類(lèi)型必須是virtio的。
我們要使用vhost-net,只要編輯虛擬機(jī)的XML文件,加入<driver name="vhost"/>即可
如果不使用vhost-net那么把vhost變成qemu或者刪除這句話。
至于vhost-net跟virtio的區(qū)別,我們可以看紅帽官方文檔的解釋:?
首先,我們可以從架構(gòu)圖看到區(qū)別,vhost_net 下用戶態(tài)QEMU不參與數(shù)據(jù)包的發(fā)送了,虛擬機(jī)數(shù)據(jù)包直接進(jìn)入內(nèi)核態(tài),減少了兩個(gè)空間內(nèi)存拷貝和cpu的切換。這樣的好處就是圖中紅色框框里說(shuō)的那樣,可以降低延遲以及提高CPU的使用率。但是這里要注意一點(diǎn)的就是,如果虛擬機(jī)接收數(shù)據(jù)包的速度慢于宿主機(jī)發(fā)送的速度,那么不建議使用vhost_net。
虛擬機(jī)網(wǎng)卡獨(dú)占
虛擬機(jī)網(wǎng)卡獨(dú)占,很簡(jiǎn)單,就是說(shuō)把宿主機(jī)的網(wǎng)卡直接配置給虛擬機(jī)使用,這樣,減少了中間的三個(gè)層次,如圖:?
我們可以先用lspci命令查看宿主機(jī)pci網(wǎng)卡信息:?
當(dāng)然,這里會(huì)顯示很多PCI設(shè)備,我們可以過(guò)濾下,只顯示網(wǎng)卡的PCI信息
# lspci | grep Ethernet- 1
通過(guò)上面這個(gè)命令,我們可以發(fā)現(xiàn)宿主機(jī)有4塊網(wǎng)卡(注意前面02:00.0的短標(biāo)識(shí)符信息,我們接下來(lái)會(huì)用到)
我們使用virsh nodedev-list --cap pci命令也可以羅列出PCI設(shè)備列表
注意,我們可以通過(guò)上個(gè)圖中前面顯示的短標(biāo)識(shí)符(如02:00.0),找到下面對(duì)應(yīng)的PCI名稱(后面的02_00_0),如紅色框框所示:?
然后我們可以再用virsh nodedev-dumpxml + pci name得到PCI XML配置信息:
如:virsh nodedev-dumpxml pci_0000_02_00_0?
OK,以上是PCI信息的查看,那么我們?nèi)绾伟裀CI網(wǎng)卡直接丟給虛擬機(jī)使用呢?接下來(lái)我們做以下配置即可:
首先你得確認(rèn)你的宿主機(jī)是否開(kāi)啟了IOMMU服務(wù),CentOS7下默認(rèn)是不開(kāi)啟的,我們用命令dmesg | grep -iE "dmar|iommu"可以先查看(執(zhí)行這個(gè)命令如果沒(méi)任何輸出,說(shuō)明沒(méi)打開(kāi))。然后我們修改vim /etc/sysconfig/grub?,在GRUB_CMDLINE_LINUX那行添加intel_iommu=on(如果是intel平臺(tái)的話);再然后執(zhí)行g(shù)rub2-mkconfig -o /boot/grub2/grub.cfg生效,最后重啟系統(tǒng)。?
做完以上操作之后,我們就可以開(kāi)始給虛擬機(jī)添加PCI設(shè)備了。
我們要關(guān)注的是PCI XML信息里的以下四個(gè):
<domain>0</domain><bus>2</bus> <slot>0</slot> <function>0</function>- 1
- 2
- 3
- 4
有了這四個(gè)信息后,我們先把需要設(shè)置的VM進(jìn)行關(guān)機(jī),然后運(yùn)行virsh edit vmname?進(jìn)行xml的修改。
我們?cè)谔摂M機(jī)的XML添加下面內(nèi)容:
<hostdev mode='subsystem' type='pci' managed='yes'> <source> <address domain='0' bus='2' slot='0' function='0' /> </source> </hostdev>- 1
- 2
- 3
- 4
- 5
SRIOV技術(shù)
原作者沒(méi)有寫(xiě) %>_<%
轉(zhuǎn)載自云技術(shù)實(shí)踐微信公眾號(hào),作者寶哥。
轉(zhuǎn)載于:https://www.cnblogs.com/tcicy/p/10193614.html
總結(jié)
以上是生活随笔為你收集整理的KVM总结-KVM性能优化之网络性能优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 澄天伟业是外资企业吗
- 下一篇: sql语句中嵌套2层循环