KVM虛擬機通常提供了比較好的網絡性能,但是每個管理員都知道這不足以解決所有問題。可以通過兩種方式來優化網絡性能:VirtIO驅動器或者PCI直通磁盤。方法的選擇取決於你所需要的網絡性能,以及使用的RedHatEnterpriseLinux版本。
使用VirtIO驅動器優化網絡性能
網絡性能始於虛擬網卡,但是VirtIO驅動器對網絡性能影響巨大。VirtIO驅動器在不同的層面包括網絡層提供了半虛擬化。如果你安裝了一個Linux虛擬機,那麼默認就使用了VirtIO驅動器。如果虛擬機使用的是其他操作系統,那麼需要手動安裝VirtIO驅動器。
爲驗證虛擬機是否在使用VirtIO驅動器,可以在虛擬機內運行lspci-v命令。然後在輸出結果中查找以太網控制器。結果應該如列表1所示,顯示正在使用的virtio-pci內核模塊以及內核驅動器。
列表1:
GoodKVMnetworkperformancestartsbyusingtheVirtIOdriver
00:03.0
Ethernetcontroller:RedHat,IncVirtIOnetworkdevice
Subsystem:RedHat,IncDevice0001
PhysicalSlot:3
Flags:fastdevsel,IRQ10
I/Oportsatc040[size=32]
Memoryatf2020000(32-bit,non-prefetchable)[size=4K]
ExpansionROMatf2030000[disabled][size=64K]
Capabilities:[40]MSI-X:Enable+Count=3Masked-
Kerneldriverinuse:virtio-pci
Kernelmodules:virtio_pci
在KVM之前的版本中,即使使用了VirtIO驅動器,網絡流量也是通過QEMU處理的,QEMU是位於主機和虛擬機之間的模擬層。而KVM最近的版本使用vhost-net取代了QEMU。RedHat從6.1版本開始提供該功能,保證了網絡包在客戶機和主機之間使用Linux內核而非QEMU進行路由。在RHEL6.1及之後的版本中,該功能已經自動被啓用了。如果使用的是較舊的主機平臺,一定要升級軟件包否則網絡性能將會受到影響。
使用專用網卡
如果已經使用了VirtIO網絡驅動器,但是仍舊遇到了性能問題,那麼可以考慮使用PCI直通。PCI直通將專門的物理網卡分配給虛擬機。只有該虛擬機能夠直接訪問這一物理網卡。
爲配置PCI直通,首先需要斷開主機的網絡設備。找到網絡設備的ID,然後使用lspci–nn並查找網卡定義:
02:00.0Networkcontroller[0280]:IntelCorporationCentrinoAdvanced-N6205[8086:0082](rev34)
現在需要關閉客戶操作系統並編輯客戶機XML定義,可以使用virsh進行編輯。在<device>部分將會看到客戶機XML代碼,確保已經定義了PCI設備。列表2中的示例顯示了相關定義。最重要的一行就是用於匹配PCIID(使用lspci–vv命令看到的)的有關域、總線、插槽及功能定義:
列表2:
AddingaPCIpass-throughdevicetoaKVMvirtualmachine
<devices>
…
<hostdevmode='subsystem'type='pci'managed='yes'>
<source>
<addressdomain='0x0000'bus='0x02'slot='0x00'function='0x0'/>
</source>
</hostdev>
</devices>
現在可以重啓虛擬機並驗證PCI直通設備的支持情況。
從來不要認爲你需要承受糟糕的KVM網絡性能。VirtIO驅動器以及PCI直通磁盤是實現更好性能的兩種方式。(文/互聯網)