====== Lokales Caching ======
bwLehrpool überträgt alle zur Laufzeit benötigten Daten über Netzwerk. Das betrifft sowohl das Linux-Grundsystem (Mini-/MaxiLinux) als auch anschließend gestartete VMs. Allein beim Boot einer virtuellen Windows Maschine fallen dabei schnell mehrere hundert Megabyte an.
In manchen Fällen kann dies im Vergleich zu lokal installierten Systemen zu verlängerten Bootzeiten führen - bspw. bei:
* langsamer Netzanbindung
* langsamem Storage
* großer Anzahl gleichzeitig startender Clients
Durch die Verwendung von [[satellite:dnbd3|DNBD3]]-Proxys können diese Abhängigkeiten reduziert werden. Außerdem besteht somit ein automatisches Failover, falls der Hauptstorage ausfallen sollte. DNBD3-Proxyserver allein sind jedoch nicht immer ausreichend oder gewünscht. Insbesondere, wenn viele Räume von einer langsamen Anbindung betroffen sind.
Der nächste logische Schritt liegt daher in der Umsetzung von lokalem Caching. Clients speichern angefragte Daten(-Blöcke) auf einer speziell vorbereiteten Partition auf der lokalen Festplatte und können diese bei späteren Bootvorgängen direkt vom lokalen Speicher lesen. Die über Netzwerk zu übertragenden Daten sinken somit deutlich. Damit kann Netzwerk sowie Storage effektiv entlastet und die Bootgeschwindigkeit erhöht werden. Die Vorteile von bwLehrpool - u.a. sauberes System bei jedem Neustart, sofortige Verfügbarkeit neuer VMs, Raumunabhängigkeit - bleiben dennoch erhalten.
===== Voraussetzungen =====
==== Server ====
Es muss mindestens der Satellitenserver in **Version 3.8b** und **MiniLinux 25** verwendet werden. Außerdem muss DNBD3 aktiviert sein. Es ist zu empfehlen mindestens einen DNBD3-Proxy zu verwenden, damit nicht der komplette Traffic vom VM-Storage über den Satellitenserver geleitet wird.
**Mini/Maxi-Linux 27** enthalten zudem eine verbesserte Caching-Mechanik, sodass hier noch einmal mit besserer Performance zu rechnen ist.
==== Client ====
Clients benötigen eine lokale Festplatte sowie eine entsprechend eingerichtete Partition zur Speicherung der Daten. Für bwLehrpool-Clients empfehlen wir immer den Einsatz einer sogenannten [[wiki:id44|ID44-Partition]]. Diese wird für temporäre Schreibzugriffe verwendet und bei jedem Bootvorgang frisch formatiert.
Für das lokale Caching sollte daher eine weitere, persistente Partition eingerichtet werden ([[wiki:id45|ID45-Partition]]), die auch nach einem Neustart die gecachten Daten enthält.
Diese Partition wird von bwLehrpool automatisch erkannt und unter "/opt/openslx/persistent" eingebunden.
Für die ID44-Partition empfehlen wir i.d.R. eine Größe von 30-50GB, bei der ID45-Partition gilt "je mehr desto besser", besonders, wenn viele unterschiedliche VMs genutzt werden. Als Untergrenze empfiehlt sich hier 50GB, für das unten erwähnte "Hashblock-Verfahren" 120GB.
Denken Sie daran, dass es von der Geschwindigkeit der Festplatte abhängt, ob lokales Caching überhaupt Vorteile bringt. Erste Messergebnisse in einer 10G Uplink/1G Client-Umgebung scheinen darauf hinzuweisen, dass **nur bei Verwendung von SSDs** lokales Caching einen Geschwindigkeitszuwachs bedeutet.
===== Konfiguration =====
Im Satellitenserver finden Sie zwei Konfigurationsvariablen. Diese steuern die Aktivierung und das Verhalten des lokalen Cachings. Die Variablen lassen sich wie üblich pro Raum überschreiben.
| SLX_DNBD3_MIN_GB | Mindestgröße der ID45-Partition (in Gigabyte), damit ein Client überhaupt anfängt lokal zu cachen. |
| SLX_DNBD3_MIN_GB_HASH | Mindestgröße der ID45-Partition (in Gigabyte), damit angefragte Daten immer auf 16MB Blöcke aufgefüllt werden (Hashblock). |
Standardmäßig wird zwischengespeichert, was der Client vom Server beim Start oder Betrieb einer VM anfragt. Werden 100KB angefragt, werden genau diese übertragen und lokal gespeichert.
Intern arbeitet DNBD3 aus Performanzgründen allerdings mit 16MB großen Blöcken, über die jeweils Hashsummen für Integritätschecks gebildet werden. Mit SLX_DNBD3_MIN_GB_HASH können Sie daher steuern, wie groß die erkannte ID45-Partition sein muss, damit angefragte Daten immer auf 16MB Blöcke aufgefüllt werden (backgroundReplication=hashblock). Der Vorteil ist, dass DNBD3 dadurch die erhaltenen Blöcke mit den Hashes auf dem Server vergleichen kann und somit sichergestellt ist, dass die Daten konsistent sind. Nachteilig ist jedoch, dass lokal deutlich mehr Speicherplatz benötigt wird und zusätzliche, eigentlich nicht angefragte Daten, übers Netzwerk übertragen werden müssen. Wenn beispielsweise eine 100KByte große Datei angefragt wird, die auf 10 verschiedene 16MB-Blöcke verteilt ist, werden eben nicht nur 100KB übertragen und gecachet, sondern gleich 160MB (10*16MByte). Diverse Tests haben gezeigt, dass Daten, die zum Start einer VM benötigt werden, häufig ziemlich verteilt im Image liegen.
**__Beispiel:__**
Beim erstmaligen Boot unserer "Windows 10 Standard Vorlage" mit lokalem Caching bis zum vollständig geladenenen Desktop werden etwa **800-900MB** gecachet. Wird die Hashblock-Methode verwendet (Caching kompletter 16MB-Blöcke), wächst der Cache (wieder beim erstmaligen Boot) dagegen auf ca. **11GB**.
Sie sollten SLX_DNBD3_MIN_GB_HASH daher auf einen relativ hohen Wert setzen oder ggf. komplett deaktivieren (Wert = 0), da bei der Verwendung unterschiedlicher VMs auf einem Client dessen ID45-Speicher sehr schnell voll laufen wird! Auf Grund der bisher noch sehr simplen Verdrängungsstrategie kann es dadurch passieren, dass das lokale Caching nur geringe Vorteile bietet oder sogar kontraproduktiv ist.
Momentan empfehlen wir SLX_DNBD3_MIN_GB_HASH nicht zu nutzen, also auf "0" zu setzen, da der erste Boot damit noch sehr zäh abläuft.
===== Aktuelle Probleme/Einschränkungen =====
* Gecachet werden derzeit ausschließlich VMs. Das MiniLinux wird daher momentan immer noch bei jedem Start komplett übers Netzwerk (~350MB) übertragen.
* Der **erste Boot einer VM ist i.d.R. zunächst langsamer**, da die Daten parallel auf die Festplatte geschrieben werden müssen. Bei weiteren Boots der gleichen VM sollte sich die Geschwindigkeit aber (in Abhängigkeit der Geschwindikeit der Festplatte) wieder normalisieren.
* Derzeit gibt es noch keine intelligente Verdrängungsstrategie. Wenn der Speicher der ID45 voll ist und eine neue VM angefragt wird, werden alle Blöcke der am längsten nicht verwendeten VM verworfen, um Platz zu schaffen. Sie sollten den Speicherbereich der ID45 daher nicht zu stark begrenzen (vor allem nicht wenn wie Hashblock-Methode verwendet wird).