Depuis la création de l'entreprise en 2011, nous utilisons diverses technologies de virtualisation. Les bénéfices de ces technologies sont plutôt indiscutables: réduction des coûts et facilité de gestion (sauvegarde, migration, clonage, etc.) D'ailleurs, la virtualisation est devenue un incontournable dans le domaine des technologies de l'information.
Bien que nous ayons une bonne expérience avec les technologies de virtualisation telles que VirtualBox et VMWare, notre utilisation de KVM et LXC est assez récente. Depuis un moment déjà, nous avons migré l'ensemble de notre infrastructure vers Proxmox, une solution de virtualisation tout-en-un.
Afin de tirer le meilleur partir de cette nouvelle infrastructure, nous désirons vérifier quelles sont les bonnes configurations pour obtenir les meilleures performances possibles de nos machines virtuelles.
Pour commencer notre analyse, nous désirons comparer les performances entre les deux technologies de virtualisation disponible avec Proxmox, soit KVM et LXC:
Vu la nature de LXC, on s'attend à ce qu'il surpasse KVM. C'est ce que l'on désire vérifier avec nos tests.
Pour effectuer l'ensemble de nos tests de performance de manière fiable et reproductible, nous avons utilisé Phoronix Test Suite.
Voici les spécifications techniques du serveur physique et des deux machines virtuelles.
Hôte physique | LXC | KVM | |
---|---|---|---|
CPU | 2 x Intel Xeon E5620 @ 2.40GHz (16 Cores) | 2 Cores | 2 Cores |
Motherboard | Supermicro X8DTL | Supermicro X8DTL | QEMU Standard PC (i440FX + PIIX 1996) |
Chipset | Intel 5500 I/O + ICH10R | N/A | Intel 440FX- 82441FX PMC |
Mémoire | 24576MB | 512MB | 512MB |
Disques | 4 x 250GB Seagate ST250DM000-1BD14 | 8GB subvol (recordsize=128K) | 8GB zvol (volblocksize=8K) |
Carte réseau | Intel 82574L Gigabit Connection | N/A | Red Hat Virtio device |
Système d'exploitation | Debian GNU/Linux 8 (Proxmox VE) | Debian 8.7 | Debian 8.7 |
Kernel | 4.4.35-2-pve (x86_64) | 4.4.35-2-pve (x86_64) | 3.16.0-4-amd64 (x86_64) |
Compilateur | GCC 4.9.2 | GCC 4.9.2 | GCC 4.9.2 |
Système de fichier | zfs | ext4 | ext4 |
Dans ce test qui permet de vérifier la puissance du CPU en effectuant des calculs d'alignement d'ADN (pas de multi-thread), on voit que KVM a une avance considérable sur LXC. La grande différence entre l'hôte physique et KVM s'explique par le nombre de CPU alloué : 16 CPU pour l'hôte vs 2 CPU pour KVM.
Ce test permet aussi de vérifier la performance d'un seul CPU en effectuant des calculs de cryptographie (pas de multi-thread). Les trois tests donnent des résultats similaires. On note que LXC a une légère avance sur KVM.
Ce test vérifie la performance d'un seul CPU en simulant une partie d'échecs (pas de multi-thread). Les trois tests donnent des résultats similaires. On note que LXC a une légère avance sur KVM.
Ce test vérifie aussi la performance d'un seul CPU en résolvant des équations linéaires (pas de multi-thread). Les trois tests donnent des résultats similaires. On note que LXC a une légère avance sur KVM.
Ce test vérifie essentiellement la performance du CPU en compressant des données (avec multi-thread). L'hôte physique a une grande avance qui s'explique par le nombre de CPU alloué : 16 CPU pour l'hôte vs 2 CPU pour KVM. On note que LXC a une légère avance sur KVM.
Ce test vérifie la performance du CPU en calculant des lancers de rayons. Ce test permet de vérifier la performance du CPU dans le calcul des nombres flottants (avec multi-thread). L'hôte physique a une grande avance qui s'explique par le nombre de CPU alloué : 16 CPU pour l'hôte vs 2 CPU pour KVM. On note que LXC a une légère avance sur KVM.
Ce test vérifie la performance d’un seul CPU en convertissant un fichier de musique du format WAV à FLAC (pas de multi-thread). Les trois tests donnent des résultats similaires. On note que LXC a une légère avance sur KVM.
Ce test vérifie la performance d’un seul CPU en convertissant un fichier de musique du format WAV à MP3 (pas de multi-thread). Les trois tests donnent des résultats similaires. On note que LXC a une légère avance sur KVM.
Ce test représente une utilisation typique d'un serveur ce qui teste le CPU, les disques et la mémoire. L'hôte physique fournit évidemment de meilleures performances, suivie de LXC et KVM.
Les résultats de ce test confirment bien notre hypothèse initiale: LXC est plus performant que KVM.
Ce test peut s'apparenter à l'utilisation d'une base de données qui fait beaucoup d'écriture sur disque. Étonnamment, KVM a une légère avance sur LXC.
Ce test vérifie la lecture aléatoire sur disque. Les résultats fournis par ce test ne sont pas représentatifs. Les disques présents dans le serveur ne sont pas en mesure de fournir 1300MB/s. Il faut en déduire que la cache du système accroit considérablement les résultats.
Ce qu'il faut en conclure: LXC est en mesure de tirer le maximum de performance de la cache système, alors que KVM n'arrive pas à en tirer parti probablement parce qu'il n'a pas autant de mémoire que l'hôte.
Ce test vérifie l'écriture aléatoire sur disque. Ici aussi, il faut comprendre que l'on mesure la mise en cache des données. Les résultats fournis par ce test ne sont pas représentatifs.
Ce test simule une requête dans une base de données. Sans surprise, KVM est toujours le dernier en ligne, mais offre des performances raisonnables.
Ce test vérifie essentiellement la performance d'un seul CPU en compressant des données avec l'algorithme LZMA. Je n'arrive pas à expliquer l'avance de KVM dans ce test.
Ce test vérifie essentiellement la performance d'un seul CPU en exécutant des scripts PHP. Les trois tests donnent des résultats très similaires. LXC a toujours une petite avance sur KVM.
Ce test vérifie la performance du CPU en calculant des trajectoires de lumière pour générer une image. L'hôte physique a une grande avance qui s'explique par le nombre de CPU alloué : 16 CPU pour l'hôte vs 2 CPU pour KVM. On note que LXC a une légère avance sur KVM.
Hôte physique | LXM | KVM | |
---|---|---|---|
mafft: Multiple Sequence Alignment (seconds) | 6.75 | 25.14 | 20.71 |
gcrypt: CAMELLIA256-ECB Cipher (microseconds) | 3473 | 3493 | 3540 |
tscp: AI Chess Performance (nodes/sec) | 545872 | 544252 | 559410 |
himeno: Poisson Pressure Solver (MFLOPS) | 1109.26 | 1111.99 | 1054.58 |
compress-7zip: Compress Speed Test (MIPS) | 23825 | 5034 | 4271 |
c-ray: Total Time (sec) | 19.48 | 76.85 | 79.2 |
compress-pbzip2: 256MB File Compression (sec) | 7.94 | 208.31 | |
encode-flac: WAV To FLAC (sec) | 13.22 | 13.14 | 14.7 |
encode-mp3: WAV To MP3 (sec) | 22.22 | 22.18 | 22.39 |
apache: Static Web Page Serving (request/sec) | 15595.2 | 7008.57 | 5381.83 |
aio-stress: Random Write (MB/s) | 646.06 | 309.01 | 314.95 |
iozone: Size: 4GB - Disk Test: Read Performance (MB/s) | 1370.47 | 1319.17 | 375.62 |
iozone: Size: 4GB - Disk Test: Write Performance (MB/s) | 334.74 | 351.66 | 257.11 |
hmmer: Pfam Database Search (sec) | 13.63 | 38.99 | 43.43 |
compress-lzma: 256MB File Compression (sec) | 456.85 | 455.46 | 524.6 |
phpbench: PHP Benchmark Suite (score) | 101832 | 103100 | 101481 |
smallpt: Global Illumination Renderer; 100 Samples (sec) | 80 | 409 | 418 |
Avec ces résultats, on observe que les tests liés au CPU fournissent des résultats comparables dans LXC et KVM si le nombre de CPU alloué aux machines virtuelles est le même. On observe aussi que la performance de l'hôte physique, de LXC et KVM sont très similaire quand le test vérifie la performance d'un seul CPU. Il faut toutefois noter que LXC revient gagnant avec une petite avance dans la majorité des tests.
Pour ce qui est des tests reliés aux disques, on note une différence notable entre LXC et KVM. KVM étant plus lent que LXC dans tous les tests d'écriture ou lecture sur disque.
On peut en conclure que KVM et LXC fournissent des performances similaires si votre application est strictement liée au CPU. LXC et KVM profitent au maximum des CPU qui leur sont alloués. En fait, il n'y a quasiment aucune perte de performance en comparaison avec l'hôte physique.
Par contre, quand l'écriture ou la lecture sur disque est impliquée, KVM et LXC performent moins bien que l'hôte physique. La lecture et l'écriture sur disque sont donc le talon d'Achille de la virtualisation. C'est donc dans cette direction qu'il faut travailler si l'on veut améliorer la performance de nos machines virtuelles.
De façons générales, LXC fournit manifestement de meilleures performances que KVM. Cela dit, KVM n'est pas très loin derrière.
Suivant ces résultats, devriez-vous convertir tout votre environnement vers LXC ? Peut-être pas. L'effort requis pour convertir plusieurs machines virtuelles en comparaison au petit gain de performance n'en veut probablement pas la peine. De plus, la performance n'est que l'un des facteurs parmi plusieurs autres dans votre prise de décision entre KVM et LXC. De plus, dans les prochains articles, on va déterminer quels sont les meilleurs paramètres de configuration pour améliorer les performances en écriture et lecture sur disque de KVM et LXC.
Publier originalement le 25 février, 2012