Sicher verstaut - Deduplizierung spart Platz, Cloud-Backup für Windows, Areca sichert kostenlos. ADMIN 01/14 stellt Backups für Profis mit und ohne Cloud ... (mehr)

Virtualisierung

Mit der neuen Version des Betriebssystems bietet FreeBSD eine eigene Virtualisierungslösung an: Bhyve [6], eine Virtualisierungssoftware vom Typ 2. Das bedeutet, es setzt auf einem vollwertigen Betriebssystem auf und nutzt dessen Gerätetreiber. Im Gegensatz dazu setzt ein Hypervisor vom Typ 1 direkt auf der Hardware auf.

Bei Bhyve (Abbildung 2) handelt es sich um eine Hardware Virtual Machine (HVM). Der Hypervisor verwendet bislang ausschließlich Intels VT-x-Technik, die Unterstützung für Secure Virtual Machine (SVM) von AMD steht noch aus. Bhyve nutzt die von Intel als Extended Page Tables bezeichnete Verwaltung von Speicheradressen virtueller Maschinen.

Abbildung 2: Der Aufbau des neuen FreeBSD-Hypervisors Bhyve.

Der FreeBSD-Hypervisor emuliert I/O-APIC (Advanced Programmable Interrupt Controllers) und unterstützt damit unter anderem APIC für Gastsysteme und eine momentan allerdings nur teilweise funktionierende AHCI-Emulation. Die Entwickler arbeiten derzeit vor allem an nicht gesperrten Schreib- und Lesezugriffen und der Unterstützung für Suspend und Resume.

Bhyve besteht aus dem Kernel-Modul »vmm.ko« , der Bibliothek »libvmmapi.so« sowie den Anwendungen »bhyve(8)« , »bhyveload(8)« und »byhvectrl(8)« . Die Komponenten kommen mit nur etwa 250 KByte Speicher zurecht.

Das Tool »bhyveload(8)« lädt einen FreeBSD-Gast direkt in die virtuelle Maschine. Das ist mit einem einfachen Befehl schnell ausgeführt, der FreeBSD von einem ISO-Image startet:

bhyveload -m 1024 -d \
 ./freebsd.iso freebsd-vm

Die Performance von FreeBSD als Gast in virtualisierten Umgebungen verbessert das Treiberpaket Virtio, das in der neuen FreeBSD-Version von den Ports ins Basissystem übersiedelt. Das im Virtio-Paket enthaltene Kernel-Modul »virtio-kmod« bietet einem virtualisierten FreeBSD durch paravirtualisierte APIs direkten Zugriff auf die Ressourcen des Host. Ohne »virtio-kmod« müsste der Host dem Gastbetriebssystem Netzwerkkarte, Festplattencontroller und andere Hardware-Komponenten vorgaukeln. Die Emulation der Funktionalität und die Umsetzung für die Backends verbraucht Zeit und Ressourcen und drosselt somit die Geschwindigkeit des Gastes.

Daneben unterstützt Virtio das sogenannte Memory-Ballooning. Diese Technik stellt vom Gastsystem freigegebenen Arbeitsspeicher anderen Gäste zur Verfügung.

Listing 1 zeigt die Einträge in der Datei »/boot/loader.conf« , die Virtio aktivieren. Danach ist zu beachten, dass sich die Bezeichnungen der virtuellen Festplatten und Netzwerkkarten, beispielsweise in »/dev/vtbd0« und »/dev/vtnet0« ändern, was Anpassungen in der Datei »/etc/fstab« nach sich zieht. Abbildung 3 zeigt die typischen Boot-Meldungen des Kernels.

Listing 1

Virtio in /boot/loader.conf

 

Abbildung 3: Boot-Meldungen des Kernels beim Einsatz von Virtio mit einer Netzwerkkarte.

Auch VirtualBox funktioniert mit Virtio. Dazu aktiviert man im VirtualBox-Manager bei den erweiterten Einstellungen für Netzwerk als Adaptertyp »paravirtualisiertes Netzwerk (virtio-net)« (Abbildung 4).

Abbildung 4: Mit der Option paravirtualisiertes Netzwerk funktioniert Virtio auch in VirtualBox.

FreeBSD 10 bringt auch bei der Verwaltung von Speichermedien Neuerungen. Neben Performance-Optimierungen wandern nützliche Tools aus den Ports ins Basissystem.

Dazu zählt das Kommando »growfs(8)« . Es erlaubt die Änderung der Größe eines UFS2-Dateisystems, dem Standard unter FreeBSD. Dieses Werkzeug ist besonders hilfreich, um ein Backup von einem kleineren Slice auf ein größeres zu überspielen. »growfs« bietet dann die Möglichkeit, das Dateisystem bis zur Slice-Grenze ohne Unmount zu vergrößern. Natürlich empfiehlt sich auch hier eine Datensicherung vor der Änderung.

Auch das iSCSI-System (Internet Small Computer System Interface) hat den Weg ins Basissystem in Form eines Kernel-Moduls geschafft. Das System besteht aus iSCSI-Target und -Initiator.

iSCSI transportiert SCSI-Daten über IP-Netze, verpackt in TCP/IP-Pakete und unter Verwendung der Ports 860 und 3260. iSCSI ermöglicht den Zugriff auf ein Speichernetz über eine virtuelle Punkt-zu-Punkt-Verbindung, ohne eigene Speichergeräte aufzustellen. Vorhandene Netzwerk-Switche lassen sich auch für iSCSI nutzen; iSCSI benötigt keine spezielle Hardware für die Knotenverbindungen.

Der Zugriff auf die Festplatten erfolgt blockweise und ist daher auch für Datenbanken geeignet. Der Zugriff über iSCSI ist darüber hinaus transparent: Beispielsweise zeigen sich iSCSI-Geräte unter FreeBSD wie normale SCSI-Blockdevices (»/dev/da*« ) und lassen sich wie lokale SCSI-Festplatten nutzen.

Auch das den Ports entstammende Fuse (Filesystem in Userspace) migriert ins Basissystem. Dabei handelt es sich um ein Kernel-Modul, das Dateisystem-Treiber aus dem Kernel-Mode in den User-Mode verlagert. Das gestattet nicht-privilegierten Benutzern, eigene Dateisysteme zu mounten.

Aufgrund der Verwendung des auch für normale Anwendungsprogramme üblichen User-Mode ist eine Vielzahl von Treibern entstanden. Einige dieser Dateisystem-Treiber bilden statt Festplatten und anderen Speichermedien ganz andere Datenstrukturen in Form eines Dateisystems ab.

Fuse bindet unter FreeBSD unter anderem die folgenden Dateisysteme ein:

Windows NTFS-3G: Dabei handelt es sich um eine Fuse-Implementierung des Windows-NTFS-Dateisystems, wie es unter anderem unter Windows XP und Windows Server 2003 zum Einsatz kommt. Der Fuse-Treiber unterstützt Lese- und Schreiboperationen sowie fast alle POSIX-Dateisystemfunktionen. Nur die Änderung von Dateizugriffsrechten und -besitzern ist nicht vorgesehen.

Linux-Ext4: Auch das unter Linux verbreitete Dateisystem Ext4 steuert FreeBSD mit Fuse an, allerdings bietet das Modul bislang nur Lesezugriff.

FUSEPod: Mit dieser Erweiterung lässt sich ein Apple iPod oder iPhone mounten und man erhält dadurch Zugriff auf alle Dateien des Geräts.

ZFS

ZFS als Dateisystem mit integrierter Volumenverwaltung gehört bereits seit Version 7 zu FreeBSD und eignet sich seit Längerem für den Produktiveinsatz [7]. Mit FreeBSD 10 hält die Funktion ZFS-NOP (No Write Operation) Einzug, die die Geschwindigkeit des Dateisystems deutlich erhöht.

Der Performance-Gewinn ergibt sich durch eingesparte Schreiboperationen. Ohne NOP bildet ZFS beim Schreibvorgang für jeden Datenblock eine Prüfsumme, auch wenn der Inhalt des Datenblocks gleich bleibt. Mit NOP hingegen vergleicht das System die Prüfsumme des zu schreibenden Blocks mit dem auf der Festplatte existierenden Block. Sind die Prüfsummen identisch, schreibt es den Datenblock nicht. Hierbei kommen kryptografische Verfahren zur Prüfsummenbildung zum Einsatz, um die Datensicherheit zu gewährleisten.

Weiterhin haben die ZFS-Entwickler Datenkompression im Level-2-Cache eingebaut. Der Level-2-Cache (L2ARC) sorgt für schnelle Lese- und Schreibzugriffe. Um einen ZPool optimal abzudecken, unter ZFS eine Art virtuelle Zusammenfassung mehrerer Blockgeräte, wächst die Größe des L2ARC proportional zur ZPool-Größe. Das führt bei sehr großen Systemen allerdings schnell zu Engpässen bei der Speicherkapazität. Aus diesem Grund komprimiert FreeBSD 10 die Daten im Cache und reduziert somit dessen Größe.

Die gespeicherten Daten komprimiert ZFS bereits in früheren FreeBSD-Versionen auf Wunsch, bisher mit dem Lempel-Ziv-Jeff-Bonwick-Verfahren (LZJB). FreeBSD 10 setzt den schnelleren LZ4-Algorithmus ein, der deutliche Performance-Steigerungen ermöglicht: Bei leicht komprimierbaren Daten ergibt sich eine um fünfzig Prozent höhere Kompressionsgeschwindigkeit, bei der Dekomprimierung zeigt sich eine achtzigprozentige Beschleunigung gegenüber LZJB. Bei der Verarbeitung nicht komprimierbarer Daten ist der neu implementierte Algorithmus immer noch etwa dreimal schneller. Gerade auf Systemen mit schwächerer CPU macht sich der Geschwindigkeitsgewinn deutlich bemerkbar.

Das folgende Kommando aktiviert die Kompression nach dem neuen Standard für den ZPool namens users:

# zfs set compression=lz4 pool/users

Besonders gut eignen sich die schnellen Solid State Disks (SSDs) fürs Caching. Um diese Laufwerke optimal zu nutzen, implementiert ZFS die Unterstützung für das ATA-Kommando »Trim« . Damit teilt ZFS einer Solid State Disk mit, dass gelöschte oder anderweitig freigewordene Blöcke nicht mehr benutzt werden. Ohne Trim vermerkt ZFS nur in den Verwaltungsstrukturen, dass die entsprechenden Bereiche wieder zur Verfügung stehen; der SSD-Controller erhält diese Informationen dann jedoch nicht.

Das ATA-Kommando Trim teilt dem Laufwerk beim Löschen von Dateien mit, die betroffenen Blöcke als ungültig zu markieren und dass die enthaltenen Daten obsolet sind. Diese werden somit nicht mehr geschrieben, was die Zugriffe auf die SSD verringert und damit auch deren Abnutzungseffekte. Die markierten Blöcke werden dann beim nächsten Löschen endgültig freigegeben.

Die ZFS-Unterstützung von Trim bringt folgende Konfigurationsoptionen (Sysctl-MIBs, Management Information Base) mit:

»vfs.zfs.trim.enabled« : Steht dieser Sysctl-MIB auf Null, wird die Trim-Unterstützung deaktiviert. Standardmäßig ist sie aktiv.

»vfs.zfs.trim.max_interval« : Dieser Sysctl-MIB definiert, wie viele Sekunden zwischen zwei Trim-Aufrufen vergehen dürfen.

»vfs.zfs.trim.timeout« : Dieser Parameter setzt einen Verzögerungswert in Sekunden bis zur ersten Ausführung von Trim.

»vfs.zfs.trim.txg_delay« : Gibt die Zeitspanne an, wie lange die Daten einer Transaction Group (TXG) höchstens im Speicher bleiben, bevor sie geschrieben werden. Das ist für ZFS ein wichtiger Wert, da das Dateisystem Schreiboperationen verzögert, bis genügend Daten bereitstehen. Anfangs war dieser Wert auf dreißig Sekunden voreingestellt, was allerdings auf langsamen Systemen mit nur einer Festplatten zu Problemen führte: Das Schreiben von Daten und das Abarbeiten der Trim-Kommandos fielen häufig zusammen und blockierten so das System.

Ähnliche Artikel

comments powered by Disqus

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2020