Lustre Grundlagen
Aus HPC@HU
Lustre Grundlagen
Als zentrales paralleles Dateisystem steht ein Lustre mit insgesamt 1.6PB Speicherplatz zu Verfügung. Dieses ist unter /lustre
erreichbar und bildet in seiner Struktur standardmäßig das Home-Directory nach, sprich die Pfade entsprechen /lustre/<Fachbereich>/<Nutzername>/
, wobei Ordner für Gruppen innerhalb der Fachbereiche auch willkommen sind.
Technisch besteht das Lustre aus :
- 1 Management Server
- 2 Metadaten Servern (MGS)
- mit insgesamt 4 MDTs (initiale Konfiguration + Ausbaut) auf SSDs
- 4 Storage Servern (OSS)
- mit je 4 OSTs, bestehend aus je 8 Festplatten zu 16TB in RAID 6
Angebunden ist es über 100GBit/s Ethernet.
Die Lustre Clients kommunizieren hier mit mit dem Management Server um initial Informationen über das Lustre zu erhalten.
Nach dem ersten Verbindungsaufbau involviert zukünftige Kommunikation nur noch die Metadaten sowie Storage Server. Hierfür wird beim Zugriff auf das Lustre zuerst der Metadatenserver angefragt, welcher dann einen Storage Server zuweist (zum Lesen oder Schreiben von Dateien).
Aus diesem Grund sollte das Lustre bevorzugt für größere Dateien genutzt werden, da die Kommunikation zu einem relativ hohen "Overhead" bei kleinen Dateien (im KB-Bereich) führt. Die schlechte Leistung eines Lustre bei kleinen Dateien sind bekannt und werden anderweitig gut erläutert und erklärt. Hier lohnt sich die Nutzung eines lokalen temporären Speichers in den Servern selbst unter /tmp
. Dieser wird jedoch nach Ende eines Jobs gelöscht und ist nicht persistent. Lösungen für einen besseren Datendurchsatz sind vonseiten der Lustre Server und Client Software verfügbar und an deren Implementierung wird gearbeitet.
Standardmäßig werden Dateien auf jeweils ein OST geschrieben (Stripe = 1), was den maximalen Datendurchsatz auf den eines OST beschränkt. Dabei gilt die Verteilung auf OSTs pro Datei, nicht pro Ordner: Sprich, es ist möglich dass verschiedene Dateien in einem Ordner auf verschiedenen OSTs liegen, was den globalen Datendurchsatz erhöht.
Werden sehr große Dateien geschrieben, kann es von Interesse sein diese über mehrere OSTs zu verteilen. Hierbei ist es nur Möglich diese Einstellung für neue Dateien zu verändern. mit lfs setstripe
kann dieser Parameter für einen Ordner gesetzt oder gelöscht werden - oder auch eine Datei mit der entsprechenden Einstellung erstellt werden.
Nehmen wir an, wir möchen eine Datei oder einen Ordner über 2 OSTs verteilen, so lässt sich die Einstellung für einen Ordner wie folgt setzen:
lfs setstripe -c 2
Für das erstellen einer neue Datei mit zwei Stripes wäre der folgende Befehl erforderlich:
lfs setstripe -c 2 NeueDatei
Hierbei ist anzumerken dass es nicht möglich ist die Verteilung einer Datei nachträglich zu ändern. Für Änderungen muss eine neue Datei geschrieben werden, was demnach bedeutet dass die Datei kopiert werden muss und nicht verschoben werden kann um Einstellungen am Striping zu verändern. In Ordnern können die Einstellungen angepasst werden, wobei die jeweils aktuelle Einstellung alle zukünftigen Dateien betrifft.
Die Einstellungen für einen Ordner lassen sich auch mit folgendem Befehl löschen, danach wird wieder ein Stripe pro Datei genutzt:
lfs setstripe --delete
Ob sich die Nutzung mehrerer OSTs für einen Job im HPC-Betrieb lohnt, hängt hier stark von den Dateimengen und den Zugriffsmustern ab.
Die Butzung von Stripes - der Verteilung von Daten über mehrere OSTs führt nicht zwingend zu einem höheren Datendurchsatz und ist vom Nutzungsprofil abhängig. Mehrere OSTs kann bedeuten dass Daten auch von mehreren Storage Servern (OSS) angefragt werden müssen. In diesem Fall kann bei kleinen Dateien der Kommunikationsaufwand höher sein als der Gewinn an zusätzlichem Datendurchsatz. Dazu erhöht sich der "Arbeitsaufwand" für die Metadatenserver bei Dateien welche über mehrere OSTs verteilt sind. Sind Dateien jedoch hinreichen groß, kann die Verteilung zu einem erhöhten Datendurchsatz führen und dadurch die Leistung steigern.