Projekt »Virtueller hochverfügbarer Linux-Server«, Teil 10
Optimierungen und Einrichtung von Heartbeat mit CRM
Virtio
Unter dem Schlagwort »virtio« firmieren verschiedene Treiber, die spezielle virtuelle Geräte in einer VM ansteuern. Dass diese Methode schneller ist, als ein reales Gerät zu simulieren, dürfte einleuchten. Wir beschränken uns für heute auf virtuelle Netzwerk- und Blockgeräte.
Wir ersetzen die emulierte Netzwerkkarte rtl8139 durch virtio, indem wir - nach Installation des neuen Kernels - in die Datei /etc/modules die Treiber virtio_net und virtio_pci eintragen. In der Startdatei /etc/kvm/[vm] ersetzen wir die Option -net nic,macaddr=66:66:66:66:66:00,model=rtl8139
durch -net nic,macaddr=66:66:66:66:66:00,model=virtio
. Beim nächsten Start der VM sollte die virtuelle Schnittstelle aktiv sein.
Ähnlich ist die Vorgehensweise beim Blockgerätetreiber. Hier müssen wir uns im Klaren sein, dass sich der Gerätename der virtuellen Festplatte von sda
auf vda
ändern wird (auch mehr als eine Festplatte ist möglich, die Bezeichnung ist dann vdb usw.). Wenn man in /etc/fstab mit Labels oder UUIDs gearbeitet hat, ist man aus dem Schneider, da sich dann nichts ändert. In der Startdatei /etc/kvm/[vm] ist auf jeden Fall eine Anpassung nötig. Die Option -hda /mnt/vm100/vm100.image
wird durch -drive file=/mnt/vm100/vm100.image,if=virtio,boot=on
ersetzt, und die Option -append "root=/dev/sda1 ro"
ändert sich zu -append "root=/dev/vda1 ro"
.
Eine erste Geschwindigkeitsmessung der virtuellen Festplatte zeigt für virtio fast durchweg große Geschwindigkeitsvorteile. Lediglich beim sequenziellen Schreiben war der Durchsatz aus ungeklärten Gründen niedrig. Die Ergebnisse schwankten allerdings in jedem Testlauf erheblich, obwohl die VM die einzige auf dem Server war.
Die erste Messung wurde noch mit Linux 2.6.26.3 als Host-Kernel und KVM 82 durchgeführt. Die VM mit virtio hatte Kernel 2.6.28. Die letzte der drei Messsungen fand unter einem Host mit Linux 2.6.28.5 statt. Tests mit dd
bestätigten die Messung im Wesentlichen.
Ohne virtio
/usr/sbin/bonnie++ -s 512m:256k -n 128k:0:1999:1 -f -q Version 1.03 ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size:chnk K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP krakatau 512M:256k 34652 21 9513 14 25233 31 102.3 17 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 128 815 24 20565 66 869 15 706 18 15759 68 265 5
Mit virtio
bonnie++ -s 512m:256k -n 128k:0:1999:1 -f -q Version 1.03 ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size:chnk K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP vm100 512M:256k 8541 10 16348 27 40613 62 168.4 32 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 128 1796 41 165854 89 3173 54 1458 46 10627 75 1753 29
Mit virtio und Kernel 2.6.28.5
bonnie++ -s 512m:256k -n 128k:0:1999:1 -f -q Version 1.03 ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size:chnk K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP vm100 512M:256k 18836 8 13773 10 35079 18 142.2 15 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 128 834 19 79013 85 1362 23 827 19 19092 72 593 12