Mithilfe von virtio-kmod kann ein unter dem Linux KVM Hypervisor eingesetztes Betriebssystem durch direkte paravirtualisierte APIs Ressourcen des Hosts nutzen. Ist dies nicht möglich, muss dem OS eine Netzwerkkarte / IDE Festplattencontroller usw. vorgegaukelt, deren Funktionen emuliert und für das Storagebackend umgesetzt werden, was Zeit und Ressourcen kostet und somit die Geschwindigkeit des Gastes einschränkt.

Seit FreeBSD 8.2  gibts virtio-kmod in der offiziellen Ports-Sammlung. Mit dem gerade erschienenen Release von FreeBSD 9 soll dessen Geschwindigkeit aber deutlich gestiegen und nun sinnvoll einsetzbar sein.

Um diese Vorteile nun unter auch auf einem FreeBSD 9 Gast nutzen zu können, muss der entsprechende Port installiert werden. Damit die Kernel Module sauber durchcompilieren, sind die src-base und src-sys Pakete erforderlich und sollten unter /usr/src/sys vorhanden sein.

# portinstall virtio-kmod

Nun editieren wir /boot/loader.conf. Um die eben gebauten Module beim booten zu laden, fügen wird diese Zeilen vorzugsweise am Anfang der Datei ein:

virtio_load="YES"
virtio_pci_load="YES"
virtio_blk_load="YES"
if_vtnet_load="YES"
virtio_balloon_load="YES"

Nun müssen wir dem System sagen, wie die paravirtualisierten Geräte nach Umstellung auf virtio heißen. Virtuelle HDDs werden dann vtbdX (z. B. vtbd0) und Netzwerkkarten vtnetX (z. B. vtnet0) heißen. Dies müssen wir entsprechend in der /etc/rc.conf ändern, wenn wir dort das Netzwerk konfigurieren und die Laufwerke in der /etc/fstab sollten natürlich auch passend ersetzt werden, sofern wir nicht nach diesem Howto zfs-on-root eingerichtet haben, dann entfallen Änderungen an der (ohnehin leeren) fstab.

Nun können wir den FreeBSD Gast mit shutdown -p now herunterfahren und die HDD/Netzwerkhardware im Hypervisor auf “virtio” umstellen. Dies kann bei Einsatz von libvirt wahlweise mithilfe eines Programms wie virsh, virt-manager, Archipel oder dem Editieren der .xml Gastdefinition unter /etc/libvirt/qemu/ geschehen. In letzterem Fall muss libvirt neu gestartet werden (was keinen Neustart laufender Gäste zur Folge hat).

Unter Debian/Ubuntu:

# /etc/init.d/libvirt-bin restart

Nun starten wir das FreeBSD wieder und erfreuen uns an deutlich schnelleren Festplatten- und Netzwerkzugriffen sowie den weiteren Annehmlichkeiten, die die KVM Paravirtualisierung bietet.