В настоящее время я устанавливаю сервер VirtualBox, используя Debian для хоста и клиента. У меня возникли некоторые проблемы с производительностью сети и нагрузкой на процессор, особенно при использовании сетей только с хостом, и я не знаю, как отследить это дальше.
Ни хост, ни клиент не имеют доступного графического интерфейса.
Я провел несколько тестов, используя iperf
чтобы понять, что происходит не так.
Хост = хост Virtualbox (работает под управлением iperf -s
), Core i7 (4x2 ядра при 1,6 ГГц), 16 ГБ ОЗУ
- 192.168.0.13, eth0 (встроенный гигабитный адаптер Broadcom), гигабитный Cat.6 через гигабитный коммутатор SoHo
- 192.168.0.20, eth1 (встроенный гигабитный Broadcom), гигабитный Cat.6 через гигабитный коммутатор SoHo
- 192.168.14.1, vboxnet0, сеть только для хоста VirtualBox
- ОС: Debian 7.2.0 amd64 (Wheezy), ядро 3.2.0-4-amd64, SMP Debian 3.2.51-1 x86_64
- VirtualBox: 4.1.18_Debianr78361
Клиент = клиент VirtualBox (работает iperf -s
), 2 ядра, 2 ГБ ОЗУ
- 192.168.0.14, eth0, соединен с eth1 хоста с использованием virtio
- 192.168.14.100, eth1, vboxnet0, сеть только для хоста VirtualBox с использованием virtio
- lsmod в списках виртуальной машины "virtio_net", "virtio_PCI", "virtio_ring" и "virtio"
- установленные virtualbox-guest-(dkms | utils | x11) и virtualbox-ose-guest-x11
- ОС: Debian 7.2.0 amd64 (Wheezy), ядро 3.2.0-4-amd64, SMP Debian 3.2.51-1 x86_64
Другая физическая машина (работает iperf -s
)
- 192.168.0.2, Gigabit Cat.6 через SoHo Gigabit Switch
- ОС: Ubuntu Server
Тест 1: Loopback на физической машине работает отлично (> 60 Гбит / с) и является узким местом клиентом iperf, который насыщает одно ядро:
- Сценарий: зацикливание на физической машине
- Команда:
iperf -c 127.0.0.1 -B 127.0.0.1 -i 60 -t 600
- Пропускная способность (Мбит / с): 62100 61900 61800 61900 61800 61900 61900 61900 61800 -> 61900
- Процессор: хост (iperf -s) 70%, хост (iperf -c) 100%
Тест 2: Классическая связь через eth0 работает как положено:
- Сценарий: Host eth0 (встроенный Broadcom Gigabit) -> другая физически подключенная машина через коммутатор
- Команда:
iperf -c 192.168.0.2 -B 192.168.0.13 -i 60 -t 600
- Пропускная способность (Мбит / с): 942 941 941 941 941 941 941 941 941 -> 941
- Процессор: хост (iperf -c) 3,5%
Тест 3: Классическая связь через eth1 работает как положено:
- Сценарий: Host eth1 (Intel Gigabit Server 4xNIC PCIe) -> Другая физически подключенная машина через коммутатор
- Команда:
iperf -c 192.168.0.2 -B 192.168.0.20 -i 60 -t 600
- Пропускная способность (Мбит / с): 942 941 941 941 941 941 941 941 941 -> 941
- Процессор: хост (iperf -c) 3,5%
Тест 4: Loopback в виртуальной машине почти насыщает оба виртуальных ядра, как и ожидалось; достижение 30% собственной скорости хоста:
- Сценарий: петля полностью внутри виртуальной машины
- Команда:
iperf -c 192.168.14.1 -B 192.168.14.100 -i 60 -t 600
- Пропускная способность (Мбит / с): 19600 19500 19600 19500 19500 19600 19600 19500 19500 -> 19500
- Процессор: хост (VBoxHeadless) 200%, клиент (iperf -s) 75%, клиент (iperf -c) 100%
Тест 5: Драйвер мостового подключения virtio к внешнему миру работает на 50% (40 - 70%) и занимает хост-процессор, особенно когда клиент простаивает:
- Сценарий: Virtualbox eth0 virtio соединен с хостом eth1 -> другая физически подключенная машина через коммутатор
- Команда:
iperf -c 192.168.0.2 -B 192.168.0.14 -i 60 -t 600
- Пропускная способность (Мбит / с): 401 458 480 367 582 720 431 388 696 553 -> 508
- Процессор: хост (VBoxHeadless) 30-60%, клиент (iperf -c) 3%
Тест 6. Мостовой драйвер virtio к хосту является узким местом клиентского ЦП, достигая только 12% собственной скорости хоста!
- Сценарий: Virtualbox eth0 virtio соединен с хостом eth1 -> хостом eth1
- Команда:
iperf -c 192.168.0.20 -B 192.168.0.14 -i 60 -t 600
- Пропускная способность (Мбит / с): 7420 7660 7310 7620 7690 7580 7570 7580 7700 7710 -> 7580
- Процессор: хост (VBoxHeadless) 160%, хост (iperf -s) 11%, клиент (iperf -c) 100%
Тест 7: Сеть с хостом, использующая virtio, является узким местом клиентским ЦП, достигая только 8% от собственной скорости хоста!
- Сценарий: Virtualbox vboxnet0 только для хоста virtio
- Команда:
iperf -c 192.168.14.1 -B 192.168.14.100 -i 60 -t 600
- Пропускная способность (Мбит / с): 4760 4740 4980 5300 4890 4560 5270 4850 5450 5070 -> 4990
- Процессор: хост (VBoxHeadless) 170%, хост (iperf -s) 13%, клиент (iperf -c) 100%
Я добавил еще несколько тестов, которые привели меня к еще более запутанным результатам - что-то определенно сломано.
Тест 8 = Тест 6 с использованием Intel 82545EM медленнее, чем virtio
- Сценарий: Virtualbox eth0 Intel 82545EM соединен с хостом eth1 -> хостом eth1
- Команда: iperf -c 192.168.0.20 -B 192.168.0.14 -i 60 -t 600
- Пропускная способность (Мбит / с): 3250 3300 3270 3290 3320 3380 3330 3330 3300 3300 -> 3310
- Процессор: хост (VBoxHeadless) 110%, хост (iperf -s) 5%, клиент (iperf -c) 100%
Тест 9 = Тест 6 с использованием Intel 82543GC очень медленный!
- Сценарий: Virtualbox eth0 Intel 82543GC соединен с хостом eth1 -> хостом eth1
- Команда: iperf -c 192.168.0.20 -B 192.168.0.14 -i 60 -t 600
- Пропускная способность (Мбит / с): 667 627 717 743 633 653 621 677 701 623 -> 666
- Процессор: хост (VBoxHeadless) 35 - 117%, хост (iperf -s) 5 - 17%, клиент (iperf -c) 50 - 100%
Тест 10 = Тест 5 с использованием Intel 82545EM -> не удается установить соединение
- Сценарий: Virtualbox eth0 Intel 82545EM соединен с хостом eth1 -> Другая физически подключенная машина через коммутатор
- Команда: iperf -c 192.168.0.2 -B 192.168.0.14 -i 60 -t 600
- Пропускная способность (Мбит / с):
- Процессор: хост (VBoxHeadless) 30-60%, клиент (iperf -c) 3%
Тест 11 = Тест 5 с использованием Intel 82543GC, начинается хорошо, а затем уменьшается до доли !?
- Сценарий: Virtualbox eth0 Intel 82543GC подключен к хосту eth1 -> другая физически подключенная машина через коммутатор
- Команда: iperf -c 192.168.0.2 -B 192.168.0.14 -i 60 -t 600
- Пропускная способность (Мбит / с): 935 941 909 936 941 940 941 339 219 216 -> 732
- Процессор: хост (VBoxHeadless) 100%, клиент (iperf -c) 60%
Q1: Почему тест Loopback (4) в виртуальной машине в три раза медленнее, чем тот же тест на хосте? Разве это не должно быть около родной скорости?
Q2: Почему обычная мостовая сеть, использующая virtio, вызывает такую большую нагрузку на стороне хоста и не достигает 1 Гбит / с? Тест (5)
Q3: Почему тест моста (6) в виртуальной машине в восемь раз медленнее, чем тест петли на хосте (в три раза медленнее, чем петля на виртуальной машине)?
Q4: Почему тест только для хоста (7) в виртуальной машине в двенадцать раз медленнее, чем тест с обратной связью на хосте (в четыре раза медленнее, чем тест с обратной связью на виртуальной машине)?
Я ожидаю, что некоторые аспекты виртуализации повлияют на Q1-Q4. virtio, кажется, вызывает Q2-Q4 - но я понятия не имею, где исследовать или подправить.
Все это звучит не так уж плохо. Но проблема возникла при использовании сети только для хоста для iSCSI. Это привело к передаче HDD всего 10 МБ / с и высокой загрузке ЦП - жесткие диски поддерживают 147 МБ / с. Что-то определенно не так ...