BSD Hypervisor BHyVe

Niemand geringerer als NetApp selbst steckt hinter dem FreeBSD Projekt BHyVe.

Dabei steht BHyVe für „BSD Hypervisor“. Ziel ist es einen Type 2 Hypervisor (aka hostes hypervisor) mit FreeBSD als Host OS zu schaffen.

Der Quellcode wird von NetApp unter der BSD Lizenz veröffentlicht und basiert derzeit auf FreeBSD 8.1. Das Hostsystem soll unter FreeBSD/amd64 mit einem unmodifizierten GENERIC Kernel laufen. Am Guest (FreeBSD/amd64 7.2 und 8.2) sind kleinere Kernelmodifikationen erforderlich.

Erste Benchmarks zeigen sich vielversprechend. Künftig sollen auch Windows, Linux und andere *BSD Guests möglich sein.

Technische Details findet man in der Slide zur BSDCan 2011:

http://wiki.freebsd.org/201105DevSummit?action=AttachFile&do=get&target=BHyVe.pdf

MySQL Performance unter ZFS auf FreeBSD

FreeBSD hat sich zwischenzeitlich auch in einer reinen ZFS Installation im Produktiveinsatz bewährt. Zahlreiche Funktionen wie ZFS-Snapshots, zfs send/zfs receive u.v.a. erleichtern dem Administrator das tägliche Leben mit FreeBSD.

Zuletzt haben sich aber erhebliche Performanceprobleme in Kombination FreeBSD, ZFS und MySQL ergeben. Grundsätzlich haben wir mit gewissen Abstrichen gerechnet und diese erwartet, aber der Import einer ~6 MB MySQL Dump Datei (1 INSERT-Statement je Row) in 4 Minuten 42 Sekunden mit MySQL 5.5 unter FreeBSD ZFS anstatt in 4 Sekunden unter FreeBSD mit UFS2 waren uns dann doch zuviel.

Also Zeit sich einmal mit dem Thema ZFS Tuning auseinanderzusetzen. Wir wollen hier die wichtigsten ZFS Tuning Parameter zum Thema MySQL unter FreeBSD mit ZFS zusammenfassen:

 

/boot/loader.conf:

vfs.zfs.cache_flush_disable=1
vfs.zfs.txg.timeout=5

Der Parameter vfs.zfs.cache_flush_disable stellte sich als der wesentliche in Zusammenhang mit unserem größten Problem dar. MySQL führt bei jeder Transaktion ein Flush auf seine Datenbankdateien durch, dies führt unter ZFS dazu, dass ein Flush tatsächlich die Daten auf die Festplatte schreibt. Das bringt uns zwar erhebliche Datensicherheit, aber auch extreme Performanceverluste im Vergleich zu UFS, welches sich bei einem Flush anders verhält. Um ZFS hier überhaupt „konkurrenzfähig“ zu machen und nicht Äpfel mit Rosinen zu vergleichen, muss man den ZFS-Cache-Flush deaktivieren.

 

/etc/sysctl.conf:

vfs.zfs.prefetch_disable=1
kern.maxvnodes=250000

Der Parameter kern.maxvnodes muss an die eigenen Anforderungen angepasst werden. Die Zahl der aktuell benötigten VNodes kann mit sysctl vfs.numvnodes ermittelt werden. Wenn vfs.numvnodes sich in die Nähe von kern.maxvnodes bewegt, sinkt die Performance.

 

Beim Erstellen der Filesystem für MySQL zu beachten:

# Filesystem für MyISAM Datenbanken, Blocksize auf 8k, in unserem Fall /var/db/mysql
zfs create -o mountpoint=/var/db/mysql tank/mysql
zfs set recordsize=8k

# Filesystem für InnoDB Logs, Default Blocksize
zfs create -o mountpoint=/var/db/mysql/iblog tank/iblog

# Filesystem für InnoDB Tablespace, Blocksize auf 16k
zfs create -o mountpoint=/var/db/mysql/ibdata tank/ibdata
zfs set primarycache=metadata tank/ibdata
zfs set recordsize=16k

Die Änderung der Blocksize/Recordsize muss vor dem Erzeugen der Datenbankdateien erfolgen!

 

Anpassungen my.cnf:

innodb_data_home_dir = /var/db/mysql/ibdata
innodb_log_group_home_dir = /var/db/mysql/iblog
innodb_flush_method = O_DIRECT
skip-innodb_doublewrite

 

Vom Tuning des ARC wurde Abstand genommen und war in unserem Fall nicht erforderlich. Eventuell wird künftig eine SSD für den L2ARC eingesetzt.

Diese Konfiguration ist eine Zusammenfassung aus folgenden Quellen:

http://wiki.freebsd.org/ZFSTuningGuide
http://blogs.oracle.com/realneel/entry/mysql_innodb_zfs_best_practices
http://www.solarisinternals.com/wiki/index.php/ZFS_for_Databases
http://www.solarisinternals.com/wiki/index.php/ZFS_Evil_Tuning_Guide
http://assets.en.oreilly.com/1/event/21/Optimizing%20MySQL%20Performance%20with%20ZFS%20Presentation.pdf

Rückblick BSD Boot Camp am Grazer Linuxtag 2011

Am 09.04.2011 wurde im Rahmen der Veranstaltung des Grazer Linuxtages 2011 erstmalig ganztägig das BSD Boot Camp durchgeführt. Das Rahmenprogramm rund um FreeBSD wurde vom Team des Grazer BSD Stammtisches, sowie Daniel Seuffert und Benedict Reuschling organisiert und durchgeführt.

Die Slides der einzelnen Präsentationen gibt es hier zum Download.

Die beiden Beiträge von Michael Ranner, azedo IT Consulting & Services KG hier:

Zahlreiche Interessierte fanden in den Raum des BSD Boot Camps und nutzten die Möglichkeit auf eigens dafür zur Verfügung gestellten PCs PC-BSD und FreeBSD kennenzulernen.

Fotos des BSD Boot Camps gibt es im entsprechenden Album der azedo Facebookseite zu sehen.

ZFS Snapshots unter FreeBSD

Ein kurzer Artikel, der die Einrichtung periodischer ZFS Snapshots unter FreeBSD mit sysutils/freebsd-snapshot aus den Ports beschreibt:

ZFS Snapshots unter FreeBSD mit freebsd-snapshot

azedo auf den „Grazer Linuxtagen 2011“

Auch wenn der Schwerpunkt der Grazer Linuxtage 2011 auf Linux liegt, azedo IT Consulting ist am Samstag, dem 09. April 2011, im Rahmen des BSD Boot Camp mit zwei Vorträgen über FreeBSD dabei:

Den ganzen Tag gibt es natürlich auch weitere Vorträge zu FreeBSD, sowie die Möglichkeit der BSDA-Zertifizierung.