HPDP Spickzettel

IDB-Connect

 

Windows Journal vom CM aus steuern

Pool anlegen

Library anlegen

Device anlegen

Repository auflisten

Medium initialisiren

Meine optimierungen zu ZFS on Linux

Hier will ich nicht darauf eingehen was ZFS on Linux oder ZoL ist, sondern nur beschreiben mit welchen Tweaks meine Systeme wieder Luft zum atmen bekamen und sogar performancesteigerungen erfuhren.

Ich bastel an zwei Systemen…
KVM-Host (kvm-pool):

NAS-Server (nas-pool):

ARC

In der Theorie nimmt sich ZoL die hälfte des gesamten RAM für den ARC und ein viertel davon für Metadaten. In der Praxis ist es aber mehr… viel mehr… soviel das regelmäßt auf beiden Maschinen geswapt wurde.
Ohne optimierung hat sich ARC mehr als die hälfte gekrallt. Einmal weil die Regel nicht wirklich greift und weil Zol extrem verschwenderisch mit slabs umgeht – kmalloc-256 (da landen die Metadaten) hat teilweise nur 28% des reservierten Platzes genutzt – Also wenn ZoL denkt, dass es 280MB RAM nutzt, verbraucht es in wirklichkeit 1GB RAM.
Die Slabverschwendung konnte ich nicht in griff kriegen (Die ZoL-Entwickler sind aber an dem Thema dran), das SWAPen aber schon. Hierür muss man den ARC händisch auf die Hälfte des RAMs setzen:

Damit das noch Rebootsicher wird:

Prefetch

Prefetch ist beim kvm-pool sinnlos und beim nas-pool total super. Der kvm-pool macht extrem viel random-IO. Sequentielle IOs gibt es bei den VMs praktisch garnicht – Prefetching macht also nur überflüssige IOps.

Damit das noch Rebootsicher wird:

Im nas-pool habe ich viele große Dateien, dort macht sich das Prefetching sehr positiv bemerkbar.

xattr
In ZFS kann extendet attributes setzen. rsync sucht exzessiv nach diesen Attributen, was mehr IOPs als nötig bedeuten kann. Per default sind xattr angeschalten.

Damit werden Attribute in ein unsichtbaren Extraordner innerhalb des Filesystems abgelegt. Wenn jetzt rsync daherkommt und nach xattr sucht, bedeutet das extra IOPs – Datei X listen + völlig woanders nach xattr suchen:

Man kann ZoL dazu bringen, xattr in die Inodes zu schreiben – vorrausgesetzt in der Inode ist noch genug Platz, sonst geht xattr wieder in den Spezialordner:

Diese Option hat bei meinen rsyncs extrem viel gebracht. Wo früher rsync ~10 Min gebraucht hat, braucht es heute nurnoch ~6-7 Min.
xattr=sa ist nicht der default, da es in der Vergangenheit noch div. Probleme gegeben hat. Die Option ist bei mir 2 Monate (seit Mai 2014) gesetzt, ohne einen Amoklauf zu verursachen.

atime
Zu guter letzt habe ich die atime überall deaktiviert, da ich nichts habe was wirklich darauf angewiesen wäre.

zfs snapshot scheduler

Snapshots sind eine tolle Sache. Snapshot erstellen, im Dateisystem soviel rumspielen bis man was aus versehen löscht oder kaputt macht und dann einfach die Datei aus dem Snapshot wiederholen.
Oder bei Dateien bei denen sich ständig etwas ändert kann man sich mit Snapshots super die Änderungen anschauen. Da beim anlegen eines Snapshots in ZFS quasi nur die Inode-Tabelle kopiert, sind sie sehr platzsparend.
Deswegen habe ich anfangs stündlich Snapshots angelegt und alles was älter als X Tage war per cron löschen lassen. Hat super geklappt und war sehr einfach. Wenn man Dinge von vor ein oder zwei Wochen wiederherstellen muss, ist diese Methode ein graus. Wenn einem 168 Snapshots anlachen ist das nurnoch unübersichtlich =/
Jeden Xten Snapshot nicht löschen war auch nicht befriedigend, also etwas eigenes bauen…

Endlich kann ich mich auch zu denen gesellen, die das Rad neu erfunden haben. Ich habe also ein Script geschrieben um die Anzahl an Snapshots möglichst übersichtlich zu halten und trotzdem auf einen Stand von vor paar Stunden und von vor Tagen, Wochen oder Monaten zurückgreifen zu können.

So sieht das Ergebnis aus:

Der cron läuft jede Stunde:

Als Übergabeparameter sage ich wieviele Snapshottypen ich von einem bestimmten Filesystem haben will. Zuerst die Monate dann Wochen, Tage und die Stunden.
Braucht man einen bestimmten Typ nicht, kommt eine 0 an die Entsprechende stelle.

Wem das Script gefällt kann es hier downloaden/anschauen.

vi(m) in cygwin

Cygwin nimmt keine bedienungsfreundlichen anpassungen an vi oder vim vor, so wie es Debian oder Ubuntu machen.
vim (vi nicht!!!) liest .vimrc im Homeverzeichnis ein. Ich habe mir div. Einstellungen aus einem Ubuntu-Server kopiert und daraus eine .vimrc gebaut.
U.a. wird Syntax-Higlightning aktiviert und man kann im Editiermodus die Cursor-Tasten benutzen.

Zusätzlich habe ich dashier noch in meine .bashrc eingetragen (da ich tippfaul bin…):

ssh-agent in cygwin automatisch starten

Damit müsst ihr das Passwort eures ssh-keys nur noch einmal nach dem booten eintippen, wenn ihr Cygwin öffnet.
Fügt ihr den Codeschnippsel am ende der $HOME/.bashrc an, wird bei bedarf ein ssh-agent gestartet der gleich alle ssh-keys einliest.
Öffnet man weitere Cygwin-Fenster, benutzen diese einfach den bereits laufenden agent.