5

В настоящее время я устанавливаю сервер 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 МБ / с. Что-то определенно не так ...

0