Тестирование производительности сетевой подсистемы KVM

Материал из First-Leon
Перейти к навигации Перейти к поиску

Тестирование производительности сетевой подсистемы [KVM]

Оборудование

Гигабитный свитч Cisco 2960G

Сервер 1

Операционная система
Debian Squeeze AMD64
Процессор

processor  : 3 vendor_id  : AuthenticAMD cpu family  : 16 model  : 4 model name  : AMD Phenom(tm) II X4 925 Processor stepping  : 2 cpu MHz  : 800.000 cache size  : 512 KB physical id  : 0 siblings  : 4 core id  : 3 cpu cores  : 4 apicid  : 3 initial apicid  : 3 fpu  : yes fpu_exception  : yes cpuid level  : 5 wp  : yes flags  : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt bogomips  : 5600.34 TLB size  : 1024 4K pages clflush size  : 64 cache_alignment : 64 address sizes  : 48 bits physical, 48 bits virtual power management: ts ttp tm stc 100mhzsteps hwpstate

Сетевая плата

02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 03)

Сервер 2

Операционная система
Debian Squeeze AMD64
KVM Version: 1:0.12.5+dfsg-3
libvirt-bin Version: 0.8.3-3

К сети машина подключена через 1 физический ethernet интерфейс. В хостовой системе создано 5 интерфесов в разные vlan. На каждый из 5 интерфейсов повешан бридж. К каждой виртуалке подключаем нужный бридж - имеем нужный vlan в виртуалке. На момент тестирования, кроме той виртуалки, на которой проводились тесты, крутилась еще одна с выделенным 1-им ядром (загрузка не более 2%). Погрешность непременно должна создавать, но не думаю что более -1%

Процессор

Два четырех ядерных процессора

processor       : 7
vendor_id       : GenuineIntel
cpu family      : 6
model           : 26
model name      : Intel(R) Xeon(R) CPU           E5506  @ 2.13GHz
stepping        : 5
cpu MHz         : 2133.260
cache size      : 4096 KB
physical id     : 1
siblings        : 4
core id         : 3
cpu cores       : 4
apicid          : 22
initial apicid  : 22
fpu             : yes
fpu_exception   : yes
cpuid level     : 11
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts
                  rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm tpr_shadow vnmi flexpriority ept vpid
bogomips        : 4266.74
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:
Сетевая карта
01:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)

Сервер 3 (виртуальный на сервере 2)

Операционная система
Debian Squeeze AMD64
Процессор

Выделено два ядра:

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 2
model name      : QEMU Virtual CPU version 0.12.5
stepping        : 3
cpu MHz         : 2133.260
cache size      : 4096 KB
fpu             : yes
fpu_exception   : yes
cpuid level     : 4
wp              : yes
flags           : fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx lm rep_good pni cx16 popcnt hypervisor lahf_lm
bogomips        : 4266.52
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

Тестирование

Методика тестирования

Тест проводится утилитой iperf в 1 и в 4 потока. Время проведения каждого теста 3 раза по 60 секунд. Серверная часть:

iperf -s -w 65536 -p 12345

Клиентская:

iperf -c hostname -w 65536 -p 12345 -t 60 -P 1
iperf -c hostname -w 65536 -p 12345 -t 60 -P 4

Тест 1 (хостовые системы 1,2)

Между сервером 1 и сервером 2 (реальные машины)

В один поток:
916 Mbits/sec, 912 Mbits/sec, 918 Mbits/sec
Загрузка CPU на 1 сервере: 40 одного ядра%
Загрузка CPU на 2 сервере: 7% одного ядра.
В четыре поток:
938 Mbits/sec, 938 Mbits/sec, 938 Mbits/sec
Загрузка CPU на 1 сервере: 4% 4% 5% 6% на четырех ядрах
Загрузка CPU на 2 сервере: 4% 4% 4% 4% на четырех ядрах

Тест 2 (virtio 1,3)

Между сервером 1 и сервером 3. Сетевая карта на виртуальной машине определена как:

<interface type='bridge'>
 <mac address='00:16:3e:27:97:4d'/>
 <model type='virtio'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</interface>
В один поток:
688 Mbits/sec, 684 Mbits/sec, 687 Mbits/sec
Загрузка CPU на 1 сервере: 30% на одном ядре
Загрузка CPU на 2 сервере: 18% 35% 53% на трех ядрах
Загрузка CPU на 3 сервере: 30% на одном ядре
В четыре потока:
922 Mbits/sec, 924 Mbits/sec, 924 Mbits/sec
Загрузка CPU на 1 сервере: 8% 8% 8% 8% каждом ядре
Загрузка CPU на 2 сервере: 65% 38% 38% на трех ядрах
Загрузка CPU на 3 сервере: 50% 52% на каждом ядре

Тест 3 (virtio 2,3)

Между сервером 2 и сервером 3. Сетевая карта на виртуальной машине определена как:

<interface type='bridge'>
 <mac address='00:16:3e:27:97:4d'/>
 <model type='virtio'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</interface>
В один поток:
764 Mbits/sec, 762 Mbits/sec, 767 Mbits/sec
CPU на 2 сервере: 22%, 30%, 48% на трех ядрах
CPU на 3 сервере: 20% на одном ядре
В четыре потока:
1250 Mbits/sec, 1260 Mbits/sec, 1260 Mbits/sec
CPU на 2 сервере: 26%, 27%, 60% на трех ядрах
CPU на 3 сервере: 52% 54% на каждом ядре

Тест 4 (e1000 1,3)

Между сервером 1 и сервером 3. Сетевая карта на виртуальной машине определена как:

<interface type='bridge'>
 <mac address='00:16:3e:27:97:4d'/>
 <model type='e1000'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</interface>
В один поток:
528 Mbits/sec, 529 Mbits/sec, 526 Mbits/sec
CPU на 1 сервере: 31%
CPU на 2 сервере: 16%, 34%, 78% на трех ядрах.
CPU на 3 сервере: 100% одного ядра.
В четыре потока:
885 Mbits/sec, 881 Mbits/sec, 880 Mbits/sec
CPU на 1 сервере: 7%, 7%, 7%, 6% на каждом ядре
CPU на 2 сервере: 18%, 50%, 50% на трех ядрах
CPU на 3 сервере: 50%, 50% на каждом ядре

Тест 5 (e1000 2,3)

Между сервером 2 и сервером 3. Сетевая карта на виртуальной машине определена как:

<interface type='bridge'>
 <mac address='00:16:3e:27:97:4d'/>
 <model type='e1000'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</interface>
В один поток:
540 Mbits/sec, 530 Mbits/sec, 533 Mbits/sec, 
CPU на 2 сервере: по 17%, 52%, 60% на двух ядрах. На остальных плавающая
CPU на 3 сервере: 100% 60% каждом ядре
В четыре потока:
891 Mbits/sec, 911 Mbits/sec, 913 Mbits/sec
CPU на 2 сервере: по 50%, 50%, 15% на двух ядрах. На остальных плавающая.
CPU на 3 сервере: по 50%, 62% каждом ядре

Тест 6 (rtl8139 1,3)

Между сервером 1 и сервером 3. Сетевая карта на виртуальной машине определена как:

<interface type='bridge'>
 <mac address='00:16:3e:27:97:4d'/>
 <model type='rtl8139'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</interface>
В один поток:
265 Mbits/sec, 270 Mbits/sec, 269  Mbits/sec
CPU на 1 сервере: 16% на одном ядре
CPU на 2 сервере: 16%, 43%, 84% на трех ядрах.
CPU на 3 сервере: 100%, 60% на двух ядрах.
В четыре потока:
363 Mbits/sec, 364 Mbits/sec, 366 Mbits/sec
CPU на 1 сервере: 5%, 4%, 4%, 4% на всех ядрах
CPU на 2 сервере: 17%, 60%, 62% на трех ядрах.
CPU на 3 сервере: 80%, 72% на двух ядрах.

Тест 7 (rtl8139 2,3)

Между сервером 2 и сервером 3. Сетевая карта на виртуальной машине определена как:

<interface type='bridge'>
 <mac address='00:16:3e:27:97:4d'/>
 <model type='rtl8139'/>
 <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</interface>
Для одного потока:
253 Mbits/sec, 265 Mbits/sec
CPU на 2 сервере: 19%, 50%, 90% на двух ядрах
CPU на 3 сервере: 80%, 100% на двух ядрах.
Для четырех потоков:
324 Mbits/sec, 327 Mbits/sec
CPU на 2 сервере: 20%, 60%, 60% на двух ядрах
CPU на 3 сервере: 75%, 80% на двух ядрах.

Итог

В итоге можем сказать, что virtio, в много поточном случае, практически не уступает по скорости хостовым системам. Как и ожидалось, заметно возрастает нагрузка на процессор. Для e1000 ситуция несколько хуже, как по скорости, так и по нагрузке на процессор. Хотя при отсутствии поддержки паравиртуальных драйверов гостевой системой, работать она будет вполне достойно. А вот третий участник не удостоен медали. rtl8139 намного больше утилизирует процессор, при том скорость передачи потоков падает в сравнении с хостовыми системами практически в три раза. В принципе результаты для rtl8139 вполне ожидаемы. Как таковой надобности в эмуляции третьего адаптера нет, соответственно его оптимизацией разработчики занимаются меньше всего.

Для себя сделал вывод: сетевая подсистема KVM показала себя с хорошей стороны в плане производительности.

Обсудить статью

Вопросы, пожелания, предложения