
我們在 Ubuntu 伺服器 12.04.4 / Libvirt 0.9.8-2ubuntu17.17 上運行許多 Debian Wheezy VM
主機透過Trunk連接到網路。然後它分割 VLAN 並使用以下配置為每個 VLAN 建立一個網橋:
auto eth4.2 kvmbrtrunk.2
iface eth4.2 inet manual
up ifconfig eth4.2 up
down ifconfig eth4.2 down
iface kvmbrtrunk.2 inet manual
bridge-ports eth4.2
bridge-stp no
bridge-fd 0
bridge-maxwait 0
VM 配置如下:
<interface type='bridge'>
<mac address='54:52:00:02:10:70'/>
<source bridge='kvmbrtrunk.2'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</interface>
他們使用 VirtIO
00:09.0 Ethernet controller: Red Hat, Inc Virtio network device
主角(都在同一個 VLAN 上):
A: 1st Ubuntu 12.04 desktop
B: 2nd Ubuntu 12.04 desktop
C: 1st VM, 1st host
D: 2nd VM, 1st host
E: 3rd VM, 2nd host
當我們執行一系列 60 次 ping“rtt min/avg/max/mdev”時:
A -> B = 0.093/0.132/0.158/0.015 ms
A -> C = 0.272/0.434/1.074/0.113 ms
A -> D = 0.294/0.460/0.832/0.091 ms
A -> E = 0.324/0.505/0.831/0.069 ms
C -> D = 0.348/0.607/0.863/0.124 ms
C -> E = 0.541/0.792/0.972/0.101 ms
所以這些結果似乎顯示 libvirt 的虛擬交換器/過濾正如人們所期望的那樣,不僅增加了一些延遲,而且使延遲增加了三倍(0.132 vs 0.460)
問題
Is there anything that can be done to attenuate this extra latency?
預先感謝您的任何提示。
答案1
為了減少延遲,您願意犧牲哪些功能?
首先,嘗試在橋接介面上停用 iptables/ebtables。您可以變更/proc/sys/net/bridge/bridge-nf-call-iptables
為 0 來完成此操作。這裡的缺點是您無法再對訪客流量進行任何類型的過濾。
這裡「更好」的選擇是使用 SR-IOV 切換到虛擬化網路卡。這需要您的主機板和網路控制器支援它。每個網卡最多只能容納 7 位客人(對於千兆以太網,我相信 10gig 會更高)。這是透過讓每個訪客直接存取網路硬體來實現的。主機作業系統不參與封包流,VM 僅直接與 NIC 對話。
SR-IOV 將為您提供最佳效能(在我們的測試中,對於高水準的網路流量,CPU 使用率降低了約 10%)和最低延遲(因為與資料包互動的軟體層少得多)。我相信你可以用它來配置 VLAN 標記,但設定可能會有點困難(SR-IOV 基本上是未記錄的魔法,你將需要進行大量的設定)。