
우리는 Ubuntu Servers 12.04.4 / Libvirt 0.9.8-2ubuntu17.17을 기반으로 다수의 Debian Wheezy VM을 실행하고 있습니다.
호스트는 트렁크를 통해 네트워크에 연결됩니다. 그런 다음 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
"rtt min/avg/max/mdev" 60번의 ping을 수행할 때:
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의가상 스위치/필터링예상할 수 있듯이 약간의 지연 시간을 추가할 뿐만 아니라 3배로 늘립니다(0.132 대 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가 더 높다고 생각합니다). 이는 각 게스트에게 네트워킹 하드웨어에 대한 직접 액세스를 제공함으로써 작동합니다. 호스트 OS는 패킷 흐름에 관여하지 않으며 VM은 NIC와 직접 통신합니다.
SR-IOV는 최고의 성능(높은 수준의 네트워크 트래픽에 대해 테스트에서 CPU 사용량이 약 10% 더 낮음)과 가장 낮은 대기 시간(패킷과 상호 작용하는 소프트웨어 레이어가 훨씬 적기 때문에)을 제공합니다. 나는 이것을 사용하여 VLAN 태그를 구성할 수 있다고 생각하지만 설정이 약간 어려울 수 있습니다(SR-IOV는 기본적으로 문서화되지 않은 마술이므로 설정을 많이 조작하게 될 것입니다).