Je me suis acheté un nouvel ordinateur pour développer et pour lancer plusieurs machines virtuelles en même temps :

  • CPU : Intel i7-2600, 64 bits, 8 coeurs (4 coeurs avec hyper threading) à 3.4 GHz
  • RAM : Kingston 12 Go à 1066 MHz
  • Carte mère ASUS P8P67LE
  • 2 disques Western Digital, "Caviar blue", de 1 To en SATA
  • GPU : Radeon HD 5500
  • Boîtier Antec Sonata IV

J'ai tenté de configurer les deux disques en RAID 0 avec le RAID matériel, mais j'ai appris que le chipset Intel P67 ne fait que du RAID logiciel. Il y a un chipset SATA supplémentaire (Marvell), mais je n'ai pas essayé de m'en servir. L'installeur de Fedora 15 m'a permis simplement de créer un RAID 0 logiciel. Puisque j'aime vivre dangereusement, j'ai choisi de créer une seule partition de 2 To dans le système de fichier btrfs (encore qualifié d'expérimental). Au passage, /proc/mdstat permet de voir l'état actuel du RAID logiciel.

J'ai acheté cette machine pour lancer plusieurs machines virtuelles, et j'ai donc installé rapidement virt-manager pour gérer facilement plusieurs machines virtuelles KVM. Problème : les installeurs étaient vraiment très lents. J'ai installé Debian Testing, OpenBSD 4.9, OpenBSD 5.0, FreeBSD 8, OpenIndiana et Windows Vista. J'ai d'abord remarqué que c'était QEMU (émulation logicielle) et non pas KVM (émulation matérielle) qui était utilisé. La virtualisation matérielle était desactivée dans le BIOS, arf. J'ai du supprimer mes VMs pour les recréer, je n'ai pas trouver comment passer de qemu à kvm pour une VM existante, et de toute façon j'avais arrêté les installations en cours (c'était vraiment trop lent).

Mais ça n'a pas changé grand chose, l'installation était encore vraiment très lente. En fait, au début c'était très rapide, puis tout à coup, les performances s'effondraient : 1 Mo/sec, 700 Ko/sec, ... 3 Ko/sec ! J'ai mesuré les performances de mon système de fichier avec bonnie++ : les performances brutes étaient autour de 234 Mo/sec, très supérieur à ce qu'indiquait l'installeur FreeBSD.

J'ai contacté les développeurs KVM qui m'ont conseillé de voir du côté de btrfs. J'ai alors contacté les développeurs btrfs qui m'ont demandé des détails. Je leur ai indiqué que je ne constatais pas de problème de performance avec Virtualbox. Ils m'ont alors parlé de l'option de cache du disque KVM. Voici la vitesse indiquée au cours de l'installation de FreeBSD selon le mode de cache :

  • writethrough (par défaut) : 1 Ko/sec
  • none : 40 Ko/sec
  • writeback : 1 400 Ko/sec
  • unsafe : 1 500 Ko/sec

L'option unsafe n'est pas accessible depuis virt-manager. La différence entre ces modes est l'interaction avec le système de fichier de l'hôte (btrfs dans mon cas) :

  • writethrough est le mode le plus sûr mais le plus lent : il appelle fsync() après chaque écriture
  • none utilise O_DIRECT et n'appelle jamais fsync(), or btrfs ne supporte pas encore O_DIRECT
  • writeback appelle fsync() quand le système invité utilise une barrière (s'assure que les données sont écrites sur le disque)
  • unsafe n'utilise pas O_DIRECT et n'appelle jamais fsync()

VirtualBox utilise l'équivalent du mode writeback par défaut.

En résumé : si vous utilisez KVM et que le système de fichier qui stocke les images disques est btrfs, changez le mode de cache du disque dur KVM avant l'installation du fichier pour le mode writeback.