Portál AbcLinuxu, 20. května 2024 11:00

Xen vs. KVM: Souboj v extrémních podmínkách 2010

24. 8. 2010 | Jirka Bourek
Články - Xen vs. KVM: Souboj v extrémních podmínkách 2010  

Před několika měsíci zde vyšel článek Xen vs. KVM: Souboj v extrémních podmínkách. Od pořízení dat pro tento článek (září 2009) uplynul téměř rok, během kterého vyšly nové stabilní verze KVM i Xenu a v jádře se objevilo několik vlastností podporujících virtualizaci. Nadešel tedy čas na další kolo souboje.

Obsah

V tomto článku se budeme výrazně odkazovat na článek předchozí, tam najdete stručný popis testovaných virtualizačních technologií i jejich loňské výsledky, se kterými se v tomto testu budeme srovnávat.

Testy a testovací sestava

link

Hardware

link

Pro testování byl použit server se základní deskou Intel S5520UR osazený následujícími komponentami:

Procesor:2× Quad-Core Intel Xeon E5506 (2.13GHz)
Paměť:12× 2GB DIMM (800MHz)
Pevné disky:2×500GB Seagate (ST3500320NS)
2×1000GB Seagate (ST31000340NS)

Z disků byla sestavena 2 pole RAID1 (softwarový RAID), na menším poli byl nainstalován hostitelský operační systém, nad větším polem bylo vytvořeno LVM, logické svazky sloužily jako disky virtuálních strojů.

Stroj disponuje dvěma síťovými kartami. První – eth0 – sloužila jako rozhraní do fyzické sítě, zároveň byla pomocí bridge spojena se síťovými kartami strojů, aby se z hostitele bylo možné pomocí SSH přihlásit na hosty. eth1 se nepoužívala.

Za zapůjčení testovacího stroje děkuji společnosti THINline interactive s.r.o, provozovateli služeb Český hosting a Spolehlivé servery.

Software

link

Jako operační systém byl tentokrát zvolen Debian Squeeze – stabilní verze (Lenny) neobsahuje ani aktuální verzi Xenu, ani KVM.

Testům byly opět podrobeny dvě výkonnostní varianty virtuálních strojů. První varianta měla k dispozici celé CPU a 2048 MB paměti, druhá měla k dispozici 1/4 CPU a 512 MB paměti (tyto varianty budou v textu nadále podle využitelného času CPU označovány jako 1/1 a 1/4.) Při všech testech bylo hostitelskému systému ponecháno k dispozici jedno jádro CPU, které hosty nesměly využívat.

Co se disků týče, tentokrát byly pro každý virtuální stroj vytvořeny pouze dva logické svazky, jeden pro systém a jeden pro datový oddíl, na kterém se prováděly testy – vzhledem k tomu, že při minulých testech hosty nikdy nevyužívaly swap, nebyl tentokrát žádnému z nich swapovací oddíl přidělen. Na systémovém oddílu byl použit souborový systém ext3, na datovém xfs.

Kompletní nastavení Xenu je možné vyčíst z konfiguračního souboru:

memory = 2048
maxmem = 2048
name = "virtual1"
cpus= "^0"
vif = ['ip=192.168.150.11,mac=00:00:10:01:23:01,bridge=br0']
disk = ['phy:mapper/obrazy2-vsys1,xvda,w','phy:mapper/obrazy2-vdata1,xvdb,w']
kernel = "/boot/vmlinuz-2.6.32-5-xen-amd64"
ramdisk = "/boot/initrd.img-2.6.32-5-xen-amd64"
root = "/dev/xvda1 ro"

KVM hosty se spouštěly následujícím skriptem:

#!/bin/bash

tunctl -t tap1_01
ip l s tap1_01 up
brctl addif br0 tap1_01

kvm -drive file="/dev/mapper/obrazy2-vsys1",index=0,if=virtio,boot=on -boot c -m 2048 \
 -drive file="/dev/mapper/obrazy2-vdata1",index=1,if=virtio,boot=off,cache=none \
 -net nic,vlan=0,macaddr=00:00:10:01:23:01,model=virtio -net tap,vlan=0,ifname=tap1_01,script=no \
 -monitor tcp::44001,server,nowait -vnc :1

ip l s tap1_01 down
brctl delif br0 tap1_01
tunctl -d tap1_01

Jako minule KVM využívá ovladač disků virtio a přidělený výkon CPU je omezován pomocí řídích skupin [control groups]. Omezení využívaného výkonu pro Xen hosty je zajištěno pomocí

xm sched-credit -d virtual1 -c 25

Testy

link

Pro srovnání výkonu strojů oproti hostiteli a také pro porovnání výkonu jednotlivých výkonnostních variant hostů byla použita obdobná sada testů jako loni. Připomeňme, že testy se příliš nepodobají reálnému provozu a v některých případech jsou příliš náročné na to, aby taková zátěž byla provozována na jediném hostitelském stroji.

Následuje popis jednotlivých testů a dosažené výsledky:

Výkon CPU

link

Výkon CPU byl testován zašifrováním 5 GB nul pomocí openssl, výsledek se zahazoval. Nuly se načítaly z /dev/zero a výsledná zašifrovaná data směřovala do /dev/null:

time dd if=/dev/zero bs=1048576 count=5120 | openssl \
enc -aes-256-cbc -salt -S "0123456789abcdef" -pass pass:opravduhloupeheslo >/dev/null

Pomocí time se měřila doba, za kterou se daná úloha dokončila.

1. Test s jediným běžícím procesem.

link

Testovací proces byl postupně spuštěn na hostiteli, na jednom KVM 1/1 hostu a jednom Xen 1/1 hostu. Ve všech případech byl test třikrát opakován. V tabulce jsou uvedeny minimální, průměrné a maximální doby běhu testovacího procesu. V závorce je uveden nárůst doby běhu na příslušném virtuálním stroji oproti hostiteli v procentech.

HostitelKVM 1/1Xen 1/1
minimum53,303 s57,366 s (+7,6 %)1m 3,076 s (+18,3 %)
průměr53,336 s57,459 s (+7,7 %)1m 3,104 s (+18,3 %)
maximum56,400 s57,592 s (+2,1%)1m 3,145 s (+12,0 %)

2. Sedm paralelně běžících procesů

link

V tomto testu bylo na hostiteli spuštěno sedm testovacích procesů zároveň, doba běhu byla porovnávána s během sedmi testovacích procesů, z nichž každý běžel na jednom testovacím stroji varianty 1/1.

HostitelKVM 1/1Xen 1/1
minimum 56,013 s 57,715 s (+3,0 %) 1m 3,688 s (+13,7 %)
průměr 56,183 s 58,136 s (+3,5 %) 1m 3,970 s (+13,9 %)
maximum 56,509 s 58,492 s (+3,5 %) 1m 4,366 s (+13,9 %)

3. 28 paralelně běžících procesů

link

Tentokrát bylo na hostiteli spuštěno 28 testovacích procesů paralelně (pomocí řídících skupin bylo zajištěno, že tyto procesy mohly využívat pouze 7 jader CPU). Doba běhu je opět porovnávána se stejným počtem testovacích procesů, každý běžel na vlastním testovacím stroji varianty 1/4.

HostitelKVM 1/4Xen 1/4
minimum 3m 3,835 s 2m 58,637 s (-2,8 %) 4m 17,554 s (+40,1 %)
průměr 3m 31,126 s 3m 34,414 s (+1,6 %) 4m 18,069 s (+22,2 %)
maximum 3m 51,438 s 3m 59,753 s (+3,6 %) 4m 19,044 s (+11,9 %)

4. Test na strojích o různém výkonu.

link

Celkem bylo paralelně spuštěno 19 testovacích procesů, 16 z nich na hostech 1/4 a tři na hostech 1/1 (na hostiteli byly procesy omezeny pomocí řídících skupin – 16 procesů mělo k dispozici 4 CPU a zbývající tři procesy každý po jednom CPU).

V tomto testu není srovnáván poměr výkonu hostitele a hostů, ale poměr výkonů mezi jednotlivými výkonnostními variantami (a jeho dodržování). V tabulce jsou uvedeny průměrné hodnoty doby běhu testů a poměr jejich doby trvání.

HostitelKVMXen
1/1 56,206 s 58,275 s 1m 10,277 s
1/4 3m 49,335 s 3m 26,637 s 4m 21,106 s
po měr 4.,80 3.,46 3.,15

Shrnutí

link

Oproti minule si v tomto testu Xen pohoršil – průměrná doba zpracování úlohy byla o 18 % větší než u hostitele; Xen se zde propadl pod úroveň KVM, které oproti hostiteli potřebovalo jenom o necelých 8 % více času. Paralelní běh procesů tak, že každý proces měl pro sebe jedno CPU, ukazuje pro obě možnosti virtualizace lepší výsledky v procentech, ty jsou nicméně dány zhoršením celkového času hostitele, nikoliv zlepšením času hostů.

U třetího testu, kde se hosty či úlohy musí o CPU dělit, dosáhlo KVM výkonu téměř srovnatelného s hostitelem (úloha na hostovaném stroji běžela pouze o 1,6 % času déle), Xen se naopak ještě více propadl a potřeboval o 22 % času navíc. I zde tedy Xen měl horší výsledky než loni, KVM naopak lepší.

Na rozdíl od výsledků z loňska KVM tentokrát příliš nerespektovalo nastavené výkonnostní varianty. Navíc se značně zvětšil rozptyl časů zpracování testovací úlohy na hostech varianty 1/4 – hostitelský stroj totiž jednotlivé virtuální stroje neumístil rovnoměrně na dostupné procesory, takže například zatímco na jednom CPU běžely tři virtuální stroje, na jiném jich běželo šest.

Xen dodržoval nastavení výkonnostních variant o něco lépe.

Přestože by úlohy na výpočetní výkon neměly být ve virtualizovaném prostředí nijak problematické, režie Xenu je zde poněkud vysoká. KVM si naopak vedlo lépe než v loňském testu, což s největší pravděpodobností souvisí s tím, že použitý procesor tentokrát disponuje technologií EPT (extended page tables), která urychluje operace s pamětí virtuálního stroje.

Práce s diskem

link

Čistá práce s diskem byla testována zápisem velkého souboru pomocí dd:

dd if=/dev/zero of=soubor.bin bs=1048576 count=16384

Testována byla doba běhu testu (a tím rychlost zápisu na disk).

1. Test bez paralelizace

link

Aby se omezil vliv diskové cache, v tomto testu se na hostiteli místo jednoho souboru postupně zapisovalo souborů sedm, každý na samostatný LVM oddíl1. Zápis na hostiteli trval 1126,696 s, což dělá 101,79 MB/s. Výsledky hostů (průměrné hodnoty ze tří běhů a zpomalení nebo zrychlení oproti hostiteli v procentech) jsou uvedeny v tabulce:

KVM 1/1 (writeback) KVM 1/1 (writethrough) KVM 1/1 (none) Xen 1/1
průměr 161,591 s (101,39 MB/s) 348,446 s (47,02 MB/s) 153,952 s (106,42 MB/s) 219,043 s (74,79 MB/s)
odchylka -0,4 % -53,8 % +4,5 % -26,5 %

Test byl pro KVM proveden několikrát, pokaždé s jiným nastavením cachování pro disk (LVM oddíl), na kterém test probíhal. Nejlepšího výsledku bylo dosaženo pro cache=none, což je i režim, který doporučují vývojáři KVM v případě, že se jako disk používá přímo diskový (LVM) oddíl. V dalších testech se tedy bude vždy používat cache=none

2. Sedm paralelně běžících procesů

link

Na hostiteli se tentokrát zapisovalo sedm souborů o velikosti 16 GB paralelně, každý z nich na samostatný souborový systém o velikosti 20 GB.

Hostitel KVM 1/1 Xen 1/1
minimum 1143,320 s (14,33 MB/s) 1203,410 s (13.61 MB/s … -5,0 %) 2308,070 s (7.10 MB/s … -50,5 %)
průměr 1053,727 s (15,55 MB/s) 1171.,90 s (13.98MB/s … -10,1 %) 2210,690 s (7.41 MB/s … -52,3 %)
maximum 841,041 s (19,48 MB/s) 1143,380 s (14.33 MB/s … -26,4 %) 2089,870 s (7.84 MB/s … -59,8 %)

Shrnutí

link

Oproti loňským testům, kde zaznamenávalo velký propad výkonu, si KVM významně polepšilo: Při běhu jednoho samostatného testovacího procesu byl dokonce host nepatrně rychlejší než hostitel. KVM si i zde s Xenem vyměnilo pozice, protože výkon Xenu se naopak snížil.

KVM si výrazně polepšilo i při paralelním běhu testovacích skriptů – oproti dřívějšímu propadu rychlosti zápisu o 80 % zde rychlost zápisu klesá o pouhých 10 % oproti hostiteli. Xen se drží na zpomalení o cca 50 %.

KVM zde překvapivě ukázalo, že dokáže poměrně dobře pracovat i v případě, že k disku přistupuje několik hostů naráz. Výkonu Xenu při paralelním přístupu je naopak na hranici použitelnosti systému; zde je nicméně dobré zopakovat, že pokud by takováto zátěž byla trvalá, zasluhovala by si více než jeden hostitelský stroj.

Poměrně zajímavé je, že vytížení hostitele (hodnota load) se při testech KVM pohybovala kolem 25, při paralelním testu sedmi KVM strojů dokonce okolo 140 – hostitel nicméně přesto reagoval bez latencí.

1 Ve všech případech, kdy se na hostiteli testuje úloha využívající souborový systém, je tento souborový systém vytvořen na stejném LVM oddílu, který používá host jako disk. V případě, že na hostiteli běží několik testovacích úloh paralelně, používá se tolik LVM oddílů, kolik úloh běží.

CPU + práce s diskem (1)

link

Výkon při využívání těchto systémových prostředků současně byl testován rozbalením zdrojových kódů jádra. Zdrojové kódy byly rozbalovány desetkrát po sobě, každá kopie do samostatného adresáře. Pomocí time bylo měřeno, za jak dlouho se rozbalování dokončí.

1. Test bez paralelní práce

link

Testovací proces byl postupně spuštěn na hostiteli, na jednom KVM 1/1 hostu a jednom Xen 1/1 hostu. Ve všech případech byl test třikrát opakován.

HostitelKVM 1/1Xen 1/1
minimum 22 m 53,633 s 23 m 37,996 s (+3,2 %) 24 m 57,020 s (+9,0 %)
průměr 23 m 5,285 s 23 m 43,299 s (+2,7 %) 25 m 5,705 s (+8,7 %)
maximum 23 m 24,293 s 23 m 48,617 s (+1,7 %) 25 m 10,790 s (+7,6 %)

2. Sedm paralelně běžících procesů

link

Test byl spuštěn sedmkrát paralelně na hostiteli, na sedmi KVM 1/1 hostech a sedmi Xen 1/1 hostech. Test byl třikrát opakován2.

HostitelKVM 1/1Xen 1/1
minimum 133m 11,251 s 129m 3,866 s (-3,1 %) 131m 48,768 s (-1,0 %)
průměr 135m 15,608 s 131m 25,420 s (-2,8 %) 133m 34,926 s (-1,2 %)
maximum 136m 36,002 s 132m 44,431 s (-2,8 %) 134m 42,039 s (-1,4 %)

Shrnutí

link

I zde zaznamenáváme výrazné zlepšení KVM oproti loňskému testu. Výkon hostů je v podstatě srovnatelný s výkonem hostitele, také se tentokrát nekonala žádná varovná hlášení v dmesg a při práci přes SSH hostitel reagoval bez prodlevy. Jak je vidět z tabulky uvedené výše, na rozdíl od loňských testů ve všech třech případech KVM podávalo rovnoměrné výkony, neopakovala se tedy situace, kdy stejný test jednou trval půl hodiny a jindy hodiny dvě.

V tomto testu si oproti minule polepšil i Xen, jehož výkon je taktéž téměř shodný s výkonem hostitele.

Časy zpracování této testovací úlohy oproti loňsku poměrně výrazně vzrostly. To je dáno tím, že souborový systém XFS byl v obou případech připojován s výchozím nastavením, které se snaží zapnout bariéry zápisu. Ve starších jádrech používaných při loňských testech tyto bariéry ale nefungovaly a práce se souborovým systémem se tak značně zrychlila (na úkor spolehlivosti při výpadku napájení/pádu systému).

U novějších jader tyto bariéry fungují a zpomalení některých operací se tak poměrně výrazně projevilo na výsledcích. Používání bariér je možné vypnout a v takovém případě se výsledky vrací na úroveň těch loňských, tj. cca 5 minut běhu bez paralelizace, cca 20 minut při paralelním běhu. S intenzivnějším využíváním disků výkon hostů oproti hostiteli klesá – například pro paralelně běžící procesy jsou výsledky následující:

HostitelKVM 1/1Xen 1/1
minimum 21 m 21,146 s 26 m 17,339 s (23,1 %) 33 m 29,624 s (56,9 %)
průměr 22 m 34,113 s 29 m 51,730 s (32,3 %) 35 m 58,357 s (59,4 %)
maximum 23 m 40,744 s 33 m 2,031 s (39,5 %) 38 m 0,297 s (60,5 %)

Výsledek KVM – zpomalení o cca 30 % – je za těchto okolností stále lepší než loňský; zpomalení o 60 % u Xenu naopak představuje zhoršení.

2 Kromě Xenu, kde při druhém běhu testu zhavaroval hostitelský stroj.

CPU + práce s diskem (2)

link

Tento test byl proveden překladem jádra (výchozí konfigurace pro architekturu amd64). Jádro bylo přeloženo třikrát po sobě, každý překlad ze samostatné kopie zdrojových kódů. Na rozdíl od předchozího testu, který značně vytěžoval hlavně disky, je v tomto případě více využíván procesor a úložiště spíše okrajově.

Měřena byla doba běhu testu, tj. celková doba překladu ze tří kopií zdrojových kódů.

1. Test bez paralelizace

link

Test byl proveden na hostiteli a porovnáván s během na hostu KVM 1/1 a Xen 1/1

HostitelKVM 1/1Xen 1/1
real 27 m 48,667 s 30 m 50,461 s (+10,9 %) 32 m 27,040 s (+16,7 %)

2. Test sedmi paralelně běžících procesů

link

Na hostiteli byl proveden test sedmi paralelně běžících testovacích procesů, které byly omezeny na používání pouze sedmi CPU v systému. Výsledek byl porovnáván s během na hostech varianty 1/1.

HostitelKVM 1/1Xen 1/1
minimum 29 m 44,016 s 34 m 13,551 s (+15,1 %) 34 m 51,304 s (+17,2 %)
průměr 32 m 0,349 s 34 m 43,744 s (+8,5 %) 37 m 14,287 s (+16,3 %)
maximum 35 m 43,761 s 35 m 9,168 s (-1,6 %) 40 m 31,374 s (+13,4 %)

3. Test 28 paralelně běžících procesů

link

Tento test byl míněn víceméně jako zátěžový, cílem bylo zjistit, jestli nedojde k pádu/zatuhnutí některého z hostů. Na hostiteli se netestovalo, testována byla varianta hostů 1/4.

KVM 1/4Xen 1/4
minimum 148 m 33,887 s 163 m 30,013 s
průměr 168 m 31,165 s 173 m 47,092 s
maximum 172 m 12,143 s 176 m 4,901 s

4. Test na strojích o různém výkonu

link

Obdobně jako u podobného testu využívání CPU bylo spuštěno 19 testovacích procesů, z toho 16 na hostech 1/4 a 3 na hostech 1/1. Opět bylo cílem zjistit, jak dobře dokáží jednotlivá virtualizační řešení zajistit rozdíly ve výkonu, když je požadujeme.

KVMXen
1/1 46 m 6,961 s 48 m 26,857 s
1/4 149m 18,316 s 146m 56,358 s
po měr 3.,37 3.,32

Shrnutí

link

Na rozdíl od minula podává KVM lepší výkony než Xen – vzhledem k podstatnému zlepšení práce KVM s diskem se zlepšil i výsledek v tomto testu. Při překladu na jediném hostu si Xen o něco pohoršil, při paralelním běhu si pohoršil o něco více.

U obou virtualizačních řešení se zhoršilo udržování nastaveného výkonu, zátěžový test hosty opět zvládly bez problémů.

Práce se sítí

link

Práce se sítí byla testována nástrojem netperf (verze 2.4.4-5 z repozitáře Debianu). Provedeny byly test počtu transakcí, které je možné uskutečnit mezi dvěma stroji (test TCP_CRR, výsledkem je počet transakcí za sekundu), a test propustnosti mezi těmito hosty (test TCP_STREAM, výsledek je udán v milionech bitů za sekundu). Všechny testy byly pětkrát opakovány.

ssh 192.168.150.1$a "sleep 5 ; netperf -t TCP_CRR -H 192.168.150.1$((a+1))" &

Test začíná pětivteřinovým čekáním, aby se hostitel stihl připojit na testované hosty bez čekání a tedy aby se všechny testy spustily pokud možno naráz. Za a je ve for cyklu dosazováno podle počtu testovaných strojů.

1. Tři paralelně běžící testy

link

Test proběhl na šesti 1/1 hostech, testovalo se v párech, tzn. první host se připojoval na druhý, třetí host na čtvrtý atd.

TCP_CRR KVM 1/1 Xen 1/1
minimum 618,10 0,00
průměr 631,59 1007,48
maximum 649,20 2204,25
TCP_STREAM KVM 1/1 Xen 1/1
minimum 831,58 1265,56
průměr 919,37 1357,36
maximum 988,27 1470,03

2. 14 paralelně běžících testů

link

Test proběhl na 28 hostech 1/4, testovalo se v párech.

TCP_CRR KVM 1/4 Xen 1/4
minimum 453,89 3,20
průměr 585,68 451,67
maximum 681,80 500,49
TCP_STREAM KVM 1/4 Xen 1/4
minimum 132,65 158,78
průměr 155,69 182,67
maximum 262,21 227,39

3. Test na různých variantách hostů

link

V tomto případě byl testován jeden pár hostů 1/1 proti 8 párům 1/4.

TCP_CRR KVM 1/1 Xen 1/1 KVM 1/4 Xen 1/4
minimum 710,70 825,38 627,69 655,49
průměr 717,86 833,31 656,36 714,75
maximum 725,50 839,48 682,70 768,58
TCP_STREAM KVM 1/1 Xen 1/1 KVM 1/4 Xen 1/4
minimum 796,81 339,10 104,59 67,68
průměr 850,83 479,00 157,95 284,11
maximum 997,91 864,74 292,01 397,37

Shrnutí

link

V minulém testu byla práce se sítí jednou slabinou Xenu oproti KVM. V nové verzi některé z problémů zmizely:

Na druhou stranu u testu TCP_CRR byly výsledky Xenu stále špatné – během až tří z pěti opakování testu přestala na hostech dočasně fungovat síť – buď se k nim nebylo ani možné připojit přes SSH, nebo se netperf nedokázal připojit na svůj testovaný protějšek. (Při výpočtech hodnot uvedených v tabulkách nebyly tyto případy započítány.)

KVM podalo přibližně stejné výkony jako při minulém testu, pouze se o něco snížil objem přenesených dat.

Závěr

link

Během uplynulého roku KVM učinilo značný pokrok. Nejvážnější výkonnostní problémy zmizely a výkonnost hostů se téměř ve všech ohledech zlepšila. Nová verze Xenu 4.0 si naopak pohoršila oproti starší 3.2 testované loni. Zde by bylo možné namítnout, že použitá verze 4.0.1~rc3 je verze vývojová, nicméně v rámci stabilní řady 4.0 nelze očekávat, že by se výkonnost mezi 4.0.1~rc a 4.0.1 nějak významně měnila.

KVM se tedy během roku dokázalo vypořádat se svými slabinami a stalo se tak zdatným konkurentem Xenu i v těch oblastech, kde měl Xen donedávna navrch.

Související články

Xen vs. KVM: Souboj v extrémních podmínkách
Xen - základy virtualizácie
Xen – představení, historie, budoucnost
Seriál: Virtualizace na úrovni jádra

Další články z této rubriky

Úvod do Dockeru (1)
Paralelizace běžných činností v konzoli pomocí GNU Parallel
Unixové nástroje – 26 (triky pro práci v Bashi)
Unixové nástroje – 25 ((s,c)fdisk, gdisk, parted a findmnt)
Linux: systémové volání splice()

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.