2016-12-17 65 views
0

我有一臺運行虛擬化路由器的Arch Linux主機。KVM和Libvirt:客戶端的CPU /網絡性能不佳

當使用LXC guest作爲路由器時,一切都很好。我得到100MBits向上/向下,幾乎沒有CPU使用率。但是,當我使用libvirt gest(pfSense FreeBSD)作爲路由器時,無論何時網絡訪問量過大時,CPU使用率都會不合理地過高(高達100%),但最糟糕的是網絡吞吐量減半了!我得到最大45-49Mbits。

主機不支持PCI穿過,所以這是我對的libvirtd虛擬機配置:

Nic1 (wan) 
Network source: Direct ‘eth0’ 
Source mode: passthrough 
Device model: virtio 

Nic2 (lan) 
Bridge name: br0 
Device model: virtio 

我試圖E1000代替,但它的變化絕對沒有。

Host CPU: AMD A4-5000 Kabini 
Guest CPU: default or Opteron_G3 

自從我開始使用KVM以來,這已經過去了一年多了。如果我沒有解決這個問題,我將不得不拋棄libvirt,因爲這樣的性能是不可接受的。

+0

pfSense可能會使用輪詢來獲得更好的性能,這可能無法在虛擬化環境中按預期工作。詳細閱讀'ifconfig '可能會有所幫助。 – kikap

+0

硬件輪詢被禁用。 ifconfig顯示這個:http://storage5.static.itmages.com/i/16/1217/h_1481996196_8871112_a2f0d75655.png – lockheed

+0

堆棧溢出是編程和開發問題的網站。這個問題似乎與題目無關,因爲它不涉及編程或開發。請參閱幫助中心的[我可以詢問哪些主題](http://stackoverflow.com/help/on-topic)。也許[超級用戶](http://superuser.com/)或[Unix&Linux堆棧交換](http://unix.stackexchange.com/)會是一個更好的地方。另請參閱[我在哪裏發佈有關Dev Ops的問題?](http://meta.stackexchange.com/q/134306) – jww

回答

0

用這種有限的信息來診斷這類問題是相當困難的。絕對不要使用e1000或任何其他NIC型號 - virtio-net將提供任何虛擬NIC的最佳性能。確保主機具有/ dev/vhost-net,因爲這會加速主機內核空間中的來賓NIC通信量。

如果您想使用guest虛擬機作爲高性能網絡路由設備,通常有很多方法可以調整VM。將guest虛擬機vCPU固定到特定的主機物理CPU,並將其他guest虛擬機關閉,以確保guest虛擬機不會因其他進程被搶佔而導致其緩存被刷新。接下來,使用巨大的頁面來訪客RAM大量增加訪客內存訪問的TLB高速緩存命中率。如果主機有多個NUMA節點,請確保來賓CPU和guest虛擬機RAM(巨大頁面)已修復爲來自同一主機NUMA節點。同樣,確保客戶機使用的主機NIC的IRQ處理具有親和性設置,以匹配來賓所使用的pCPU。

+0

感謝您的想法。主機可以看到/ dev/vhost-net,它的所有權是root:kvm,所以我認爲它是正確的。 來賓CPU是Opteron_G3。我在某處讀到這是AMD Kabini主機的最佳選擇。恐怕,你寫的其餘部分有點凌駕於我的頭上。但從你寫的我收集的內容來看,這些都是次要的潛在罪犯。 – lockheed