Zu den Hauptinhalten
  • Bestellungen schnell und einfach aufgeben
  • Bestellungen anzeigen und den Versandstatus verfolgen
  • Profitieren Sie von exklusiven Prämien und Rabatten für Mitglieder
  • Erstellen Sie eine Liste Ihrer Produkte, auf die Sie jederzeit zugreifen können.
  • Verwalten Sie mit der Unternehmensverwaltung Ihre Dell EMC Seiten, Produkte und produktspezifischen Kontakte.

Dell EMC Ready-Lösungen für HPC-BeeGFS Storage mit hoher Leistung

Zusammenfassung: PowerEdge R740xd, PowerEdge R640, PowerSwitch S3048-ON, Mellanox SB7890, BeeGFS v7.1.3, HPC and AI Innovation Lab, HPC, BeeGFS High Performance Storage Solution, IOzone, Sequentielle Lese- und Schreibleistung, zufällige Lese- und Schreibleistung ...

Dieser Artikel wurde möglicherweise automatisch übersetzt. Wenn Sie eine Rückmeldung bezüglich dessen Qualität geben möchten, teilen Sie uns diese über das Formular unten auf dieser Seite mit.

Artikelinhalt


Symptome

Artikel geschrieben von Nirmala Sundararajan vom Dell EMC HPC and AI Innovation Lab im November 2019

Ursache

Dell EMC Ready-Lösungen für HPC-BeeGFS Storage mit hoher Leistung

Lösung

Inhaltsverzeichnis

  1. Einführung
  2. Lösungsreferenzarchitektur
  3. Hardware- und Softwarekonfiguration
  4. Details zur Lösungskonfiguration
  5. R740xd, 24x NVMe-Laufwerke, Details zur CPU-Zuordnung
  6. Performance-Charakterisierung
  7. Schlussfolgerungen und zukünftige Arbeiten
     

Einführung

Das Dell EMC HPC-Team freut sich, die Veröffentlichung von „Dell EMC Ready Solutions for HPC BeeGFS Storage“ ankündigen zu dürfen, der neuesten Ergänzung des HPC-Storage-Portfolios. Diese Lösung verwendet R740xd-Server mit jeweils 24 Laufwerke vom Typ Intel P4600 1.6TB NVMe, Mixed Use Express Flash und zwei InfiniBand-EDR-Adapter vom Typ Mellanox ConnectX-5. In dieser Konfiguration mit 24 NVMe-Laufwerken werden 12 NVMe-SSDs mit einem PCIe-Switch verbunden und jeder Switch ist über eine x16-PCIe-Extender-Karte mit einer CPU verbunden. Darüber hinaus ist jede IB-Schnittstelle mit einer CPU verbunden. Eine solche ausgewogene Konfiguration, bei der jede CPU mit einem InfiniBand-Adapter verbunden ist und 12 NVMe-SSDs verarbeitet, bietet maximale Leistung und gewährleistet, dass die Prozessoren bei der Verarbeitung von I/O-Anforderungen an und von den NVMe-Laufwerken gleichmäßig belegt sind.

Der Schwerpunkt der Lösung liegt auf leistungsfähigen E/A-Vorgängen, sie wurde als Hochgeschwindigkeits-Scratch-Lösung entwickelt.  Im Mittelpunkt der Lösung steht die Verwendung von Hochgeschwindigkeits-NVMe-SSDs, die eine sehr hohe Bandbreite und niedrige Latenz bieten, indem der Scheduler entfernt und Engpässe beim Einreihen in die Warteschlange aus der Blockschicht vermieden werden. Das BeeGFS-Dateisystem unterstützt außerdem einen hohen aggregierten E/A-Durchsatz.

Lösungsreferenzarchitektur

Abbildung 1 zeigt die Referenzarchitektur der Lösung. Der Managementserver ist nur über Ethernet mit den Metadaten- und Storage-Servern verbunden. Jeder Metadaten- und Storage-Server verfügt über zwei InfiniBand-Verbindungen und ist über Ethernet mit dem privaten Netzwerk verbunden. Die Clients verfügen über einen InfiniBand-Link und sind über Ethernet mit der privaten Schnittstelle verbunden.
Dell EMC Ready-Lösungen für HPC-BeeGFS-Storage – Referenzarchitektur
Abbildung 1:  Dell EMC Ready-Lösungen für HPC-BeeGFS-Storage – Referenzarchitektur

Hardware- und Softwarekonfiguration

Tabelle 1 und 2 beschreiben die Hardwarespezifikationen des Managementservers bzw. des Metadaten-/Storage-Servers. Tabelle 3 beschreibt die für die Lösung verwendeten Softwareversionen.

 

Tabelle 1: PowerEdge R640-Konfiguration (Managementserver)
Server Dell EMC PowerEdge R640
Prozessor 2-mal Intel Xeon Gold 5218 CPU mit 2,3 GHz, 16 Kerne
Arbeitsspeicher 12-mal 8-GB-DDR4-DIMMs mit 2.666 MT/s – 96 GB
Lokale Festplatten 6-mal 2,5-Zoll-SAS-HDDs mit 300 GB und 15.000 RPM
RAID-Controller PERC H740P integrierter RAID Controller
Out-of-Band-Management iDRAC9 Enterprise mit Lifecycle Controller
Netzteile Zwei 1.100-W-Netzteile
BIOS-Version 2.2.11
Betriebssystem CentOS™ 7.6
Kernel-Version 3.10.0-957.27.2.el7.x86_64

 

Tabelle 2: PowerEdge R740xd-Konfiguration (Metadaten- und Storage-Server)
Server Dell EMC PowerEdge R740xd
Prozessor 2-mal Intel Xeon Platinum 8268 CPU mit 2,90 GHz, 24 Kerne
Arbeitsspeicher 12-mal 32-GB-DDR4-DIMMs mit 2.933 MT/s – 384 GB
BOSS-Karte 2mal M.2-SATA-SSDs mit 240 GB in RAID 1 für Betriebssystem
Lokale Laufwerke 24-mal Dell Express Flash NVMe P4600 1,6 TB 2,5 Zoll U.2
Mellanox EDR-Karte 2-mal EDR-Karte Mellanox ConnectX-5 (Steckplätze 1 und 8)
Out-of-Band-Management iDRAC9 Enterprise mit Lifecycle Controller
Netzteile Zwei 2.000-W-Netzteile

 

Tabelle 3: Softwarekonfiguration (Metadaten- und Storage-Server)
BIOS 2.2.11
CPLD 1.1.3
Betriebssystem CentOS™ 7.6
Kernel-Version 3.10.0-957.el7.x86_64
iDRAC 3.34.34.34
Systemmanagement-Tool OpenManage Server Administrator 9.3.0-3407_A00
Mellanox OFED 4.5-1.0.1.0
NVMe-SSDs QDV1DP13
*Intel ® Data Center Tool  3.0.19
BeeGFS 7.1.3
Grafana 6.3.2
InfluxDB 1.7.7
IOzone-Benchmark 3.487
* Für Management- und Firmwareupdates von Intel P4600NVMe-SSDs

Details zur Lösungskonfiguration

Die BeeGFS-Architektur besteht aus vier Hauptservices:
  • Management-Service
  • Metadatenservice
  • Storage-Service
  • Client-Service
Mit Ausnahme des Client-Services, der ein Kernel-Modul ist, sind die Management-, Metadaten- und Storage-Services Nutzerspeicherprozesse. Abbildung 2 zeigt, wie die Referenzarchitektur von Dell EMC Ready Solutions for HPC BeeGFS Storage der allgemeinen Architektur des BeeGFS-Dateisystems zugeordnet ist.
BeeGFS-Dateisystem auf PowerEdge R740xd mit NVMe-SSDs
Abbildung 2:  BeeGFS-Dateisystem auf PowerEdge R740xd mit NVMe-SSDs

Management-Service

Jedes BeeGFS-Dateisystem oder jeder Namespace verfügt nur über einen Managementservice. Der Managementservice ist der erste Service, der eingerichtet werden muss, da bei der Konfiguration aller anderen Services diese beim Managementservice registriert werden müssen.  Ein PowerEdge R640 wird als Managementserver verwendet. Neben dem Hosten des Managementservices (beegfs-mgmtd.service) wird auch der Monitoringservice (beegfs-mon.service) gehostet, der Statistiken vom System erfasst und NutzerInnen mithilfe der Zeitreihendatenbank InfluxDB bereitstellt. Zur Visualisierung von Daten bietet beegfs-mon vordefinierte Grafana-Bereiche, die sofort verwendet werden können. Der Managementserver verfügt über 6-mal 300-GB-HDDs, die in RAID 10 für das Betriebssystem und die InfluxDB konfiguriert sind.

Metadatenservice

Der Metadatenservice ist ein Scale-out-Service, was bedeutet, dass es viele Metadatenservices in einem BeeGFS-Dateisystem geben kann. Allerdings verfügt jeder Metadatenservice über genau ein Metadatenziel zum Speichern von Metadaten.  Auf dem Metadatenziel erstellt BeeGFS eine Metadatendatei pro nutzererstellter Datei. BeeGFS-Metadaten werden pro Verzeichnis verteilt. Der Metadatenservice stellt die Daten-Striping-Informationen für die Clients bereit und ist nicht am Datenzugriff zwischen Öffnen/Schließen der Datei beteiligt.

Ein PowerEdge R740xd mit 24 Laufwerken vom Typ Intel P4600 1,6 TB NVMe wird als Metadaten-Storage verwendet. Da die Speicherkapazitätsanforderungen für BeeGFS-Metadaten sehr klein sind, wurden statt eines dedizierten Metadatenservers nur die 12 Laufwerke in NUMA-Zone 0 zum Hosten der MetaData Targets (MDTs) verwendet, während die verbleibenden 12 Laufwerke in der NUMA-Zone Storage Targets (STs) hosten.

Abbildung 3 zeigt den Metadatenserver. Die 12 Laufwerke im gelben Rechteck sind die MDTs in der NUMA-Zone 0, während die 12 Laufwerke im grünen Rechteck die STs in der NUMA-Zone 1 sind. Diese Konfiguration vermeidet nicht nur NUMA-Probleme, sondern bietet auch genügend Metadaten-Storage, um die Skalierung der Kapazität und Performance nach Bedarf zu erleichtern.

Metadatenserver

Abbildung 3:  Metadatenserver

Abbildung 4 zeigt die RAID-Konfiguration des Metadatenservers. Dadurch wird deutlich, wie auf dem Metadatenserver die Laufwerke in der NUMA-Zone 0 die MDTs hosten und die Laufwerke in NUMA-Zone 1 die Storage-Daten hosten, während die Storage-Server die STs in beiden NUMA-Zonen hosten.

Konfiguration von Laufwerken im Metadatenserver

Abbildung 4:  Konfiguration von Laufwerken im Metadatenserver

Die 12 Laufwerke, die für Metadaten verwendet werden, werden als 6-mal RAID-1-Laufwerksgruppe von 2 Laufwerken konfiguriert, die jeweils als MDT dienen. Es gibt 6 Metadatendienste, auf denen jeweils ein MDT verarbeitet wird. Die verbleibenden 12 Storage-Laufwerke werden in 3 RAID-0-Laufwerksgruppen mit jeweils 4 Laufwerken konfiguriert. Es werden drei Storage-Services in der NUMA-Zone 1 ausgeführt, ein Service für jedes ST. Der Server, der die Metadaten und Storage Targets gemeinsam hostet, verfügt über 6 MDTs und 3 STs. Außerdem werden 6 Metadatenservices und drei Storage-Services ausgeführt. Jedes MDT ist ein ext4-Dateisystem, das auf einer RAID-1-Konfiguration basiert. Die STs basieren auf dem in RAID 0 konfigurierten XFS-Dateisystem.
 

Storage-Service

Wie der Metadatenservice ist auch der Storage-Service ein Scale-out-Service. Es können viele Instanzen des Storage-Services in einem BeeGFS-Dateisystem vorhanden sein. Im Gegensatz zum Metadatenservice können jedoch mehrere Storage Targets pro Storage-Service vorhanden sein.  Der Storage-Service speichert die Inhalte der Striped-Nutzerdatei, auch als Datenblockdateien bezeichnet.

Abbildung 5 zeigt die 5 PowerEdge R740xd-Server, die als Storage-Server verwendet werden.
Dedizierte Storage-Server
Abbildung 5:  Dedizierte Storage-Server

Jeder Storage-Server ist mit 6 RAID-0-Gruppen konfiguriert, jeweils mit 4 Laufwerken, sodass 6 STs pro Server gehostet werden (3 pro NUMA-Zone), wie in Abbildung 6 unten dargestellt:
Konfiguration von Laufwerken in den Speicherservern
Abbildung 6:  Konfiguration von Laufwerken in den Storage-Servern

Insgesamt umfasst die Basiskonfiguration der Referenzarchitektur die Hosts 6 MDTs und 33 STs. Fünf dedizierte Storage-Server bieten eine Rohkapazität von 211 TB und eine nutzbare Kapazität von 190 TiB. Die geschätzte nutzbare Kapazität in TiB = Anzahl der Laufwerke x Kapazität pro Laufwerk in TB x 0,99 (Dateisystemoverhead) x (10^12/2^40). Dies wäre ideal als Midrange-Scratch-Lösung mit genügend Metadaten-Storage, um das Hinzufügen von mehr Storage-Servern zu erleichtern, wenn die Kapazitätsanforderungen steigen.

Angesichts der folgenden Faktoren wurde eine RAID-0-Konfiguration für Speicherziele statt einer RAID-10-Konfiguration ausgewählt.
  1. Die Schreibleistung wurde mit dd-Befehlen gemessen, indem eine 10-GiB-Datei mit einer Blockgröße von 1 MiB und direktem E/A-Vorgang für die Daten erstellt wurde. Bei RAID-0-Geräten lag der Durchschnitt bei 5,1 GB/s für jedes Gerät, während für RAID 10-Geräte der Durchschnitt bei 3,4 GB/s für jedes Gerät lag.
  2. StorageBench-Benchmarktests zeigten einen maximalen Durchsatz von 5,5 Gbit/s für die RAID-0-Konfiguration, wohingegen dieser bei einer RAID-10-Konfiguration bei 3,4 Gbit/s lag. Diese Ergebnisse entsprechen dem, was mit dd-Befehlen erzielt wurde.
  3. RAID 10 bietet 50 % Auslastung der Festplattenkapazität und eine ähnliche Reduzierung der Schreibleistung um 50 %. Die Verwendung von RAID 10 ist eine teure Möglichkeit für Storage-Redundanz.
  4. NVMe-Laufwerke sind teuer und bieten Geschwindigkeiten, die am besten in einer RAID-0-Konfiguration zur Geltung kommen.
 

Client-Service

Das BeeGFS-Clientmodul muss auf alle Hosts geladen werden, die auf das BeeGFSs-Dateisystem zugreifen müssen. Wenn der beegfs-client geladen wird, hängt er die Dateisysteme ein, die in der Datei /etc/beegfs/beegfs-mounts.conf definiert sind, anstelle des üblichen Ansatzes, der auf /etc/fstab basiert.  Durch die Einführung dieses Ansatzes wird der beegfs-client wie jeder andere Linux-Service über das Servicestartskript gestartet. Dies ermöglicht auch die automatische Neukompilierung des BeeGFS-Clientmoduls nach Systemupdates. 

Wenn das Clientmodul geladen wird, werden die Dateisysteme eingehängt, die in beegfs-mounts.conf definiert sind. Es ist möglich, mehrere Beegfs-Instanzen auf demselben Client einzuhängen, wie unten gezeigt:

$ cat /etc/beegfs/beegfs-mounts.conf
/mnt/beegfs-medium /etc/beegfs/beegfs-client-medium.conf
/mnt/beegfs-small /etc/beegfs/beegfs-client-small.conf

Das obige Beispiel zeigt zwei verschiedene Dateisysteme, die auf demselben Client eingehängt sind. Für diese Tests wurden 32 C6420-Nodes als Clients verwendet.

R740xd, 24x NVMe-Laufwerke, Details zur CPU-Zuordnung


In der Konfiguration mit 24 NVMe des PowerEdge R740xd-Servers gibt es zwei x16-NVMe-Bridge-Karten, die den PCIe-Switch auf der Rückwandplatine versorgen, der eine Verbindung zur Vorderseite hat und die Laufwerke (es sind 4 Laufwerke) dort speist, wie in Abbildung 7 unten dargestellt:

R740xd, 24x NVMe Details zur CPU-Zuordnung
Abbildung 7:  R740xd, 24 NVMe – Details zur CPU-Zuordnung

In NUMA (Non-Uniform Memory Access) wird der Systemspeicher in Zonen unterteilt, die als Nodes bezeichnet werden und CPUs oder Sockeln zugewiesen sind. Der Zugriff auf den lokalen Arbeitsspeicher einer CPU ist schneller als der Arbeitsspeicher, der mit Remote-CPUs auf dem System verbunden ist. Eine Thread-Anwendung ist in der Regel am besten geeignet, wenn die Threads auf den Arbeitsspeicher auf demselben NUMA-Node zugreifen. Die Auswirkungen von NUMA-Fehlern auf die Performance sind erheblich, in der Regel beginnend mit Leistungseinbußen von 10 % oder mehr. Um die Performance zu verbessern, sind die Services so konfiguriert, dass sie bestimmte NUMA-Zonen verwenden, um eine unnötige Verwendung von UPI-übergreifenden Verbindungen zu vermeiden, wodurch die Latenz verringert wird. Jede NUMA-Zone verarbeitet 12 Laufwerke und verwendet eine der beiden InfiniBand-EDR-Schnittstellen auf den Servern. Diese NUMA-Trennung wird durch die manuelle Konfiguration des NUMA-Load-Balancings durch Erstellen von benutzerdefinierten systemd-Einheitsdateien und durch die Konfiguration von Multihoming erreicht. Daher ist der automatische NUMA-Ausgleich deaktiviert, wie unten dargestellt:

# cat /proc/sys/kernel/numa_balancing
0

Abbildung 8 zeigt die Testumgebung, in der die InfiniBand-Verbindungen zur NUMA-Zone hervorgehoben sind.  Jeder Server verfügt über zwei IP-Verbindungen und der Datenverkehr über die NUMA-Zone 0 wird über die Schnittstelle IB0 übergeben, während der Datenverkehr über die NUMA-Zone 1 von Schnittstelle IB1 verarbeitet wird.
Testumgebungskonfiguration
Abbildung 8:  Testumgebungskonfiguration
 

Performance-Charakterisierung

In diesem Abschnitt wird die Performancebewertung vorgestellt, die zur Charakterisierung der Dell EMC Ready Solution for HPC BeeGFS High Performance Storage Solution beiträgt. Weitere Details und Updates finden Sie in einem Whitepaper, das später veröffentlicht wird. Die Systemperformance wurde mithilfe des IOzone-Benchmarks bewertet. Die Lösung wird auf sequenziellen Lese- und Schreibdurchsatz und zufällige Lese- und Schreib-IOPS getestet. Tabelle 4 beschreibt die Konfiguration der C6420-Server, die als BeeGFS-Clients verwendet wurden, für die in diesem Blog vorgestellten Leistungsstudien.
 
Tabelle 4: Client-Konfiguration
Clients 32 Dell EMC PowerEdge C6420 Serverknoten
BIOS 2.2.9
Prozessor 2 Intel Xeon Gold 6148 CPU bei 2,40 GHz mit 20 Kernen pro Prozessor
Arbeitsspeicher  12-mal 16 GB DDR4-DIMMs mit 2.666 MT/s – 192 GB
BOSS-Karte 2-mal 120 GB M.2-Startlaufwerke in RAID 1 für Betriebssystem
Betriebssystem Red Hat Enterprise Linux Server Version 7.6
Kernel-Version 3.10.0-957.el7.x86_64
Interconnect 1 Mellanox ConnectX-4 EDR-Karte
OFED-Version 4.5-1.0.1.0

Sequenzielle Schreib- und Lesevorgänge N-N

Zur Auswertung sequenzieller Lese- und Schreibvorgänge wurde der Benchmarktest IOzone im sequenziellen Lese- und Schreibmodus verwendet. Diese Tests wurden mit verschiedenen Threadanzahlen durchgeführt, beginnend mit einem Thread und Erhöhungen um die Potenzen von 2, bis zu 1024 Threads. Bei jeder Threadanzahl wurde eine entsprechende Anzahl von Dateien generiert, da dieser Test auf eine Datei pro Thread oder den N-N-Fall (n Clients zu n Dateien) ausgelegt ist. Die Prozesse wurden auf 32 physische Client-Nodes in umlaufender oder zyklischer Weise aufgeteilt, sodass die Anforderungen gleichmäßig verteilt sind und ein Load-Balancing erfolgt. Es wurde eine aggregierte Dateigröße von 8 TB ausgewählt, die gleichmäßig auf die Anzahl der Threads innerhalb eines bestimmten Tests aufgeteilt wurde. Die aggregierte Dateigröße wurde groß genug gewählt, um die Auswirkungen des Caching von den Servern sowie von BeeGFS-Clients zu minimieren. IOzone wurde in einem kombinierten Modus aus Schreiben und anschließendem Lesen ausgeführt (-i 0, -i 1), damit die Grenzen zwischen den Vorgängen koordiniert werden können. Für diese Tests und Ergebnisse haben wir eine Datensatzgröße von 1 MiB für jede Ausführung verwendet. Die Befehle, die für sequenzielle N-N-Tests verwendet werden, sind unten angegeben:

Sequenzielle Schreib- und Lesevorgänge: iozone -i 0 -i 1 -c -e -w -r 1m -I -s $Size -t $Thread -+n -+m /path/to/threadlist

BS-Caches wurden auch auf den Client-Nodes zwischen Iterationen sowie zwischen Schreib- und Lesetests gelöscht oder bereinigt, indem dieser Befehl ausgeführt wurde:

# sync & echo 3 > /proc/sys/vm/drop_caches

Die Standard-Stripe-Anzahl für Beegfs ist 4. Die Blockgröße und die Anzahl der Ziele pro Datei können jedoch auf Verzeichnisbasis konfiguriert werden. Für alle diese Tests wurde die BeeGFS-Stripe-Größe als 2 MB und die Stripe-Anzahl als 3 ausgewählt, da wir drei Ziele pro NUMA-Zone haben, wie unten dargestellt:

$ beegfs-ctl --getentryinfo --mount=/mnt/beegfs /mnt/beegfs/benchmark --verbose
EntryID: 0-5D9BA1BC-1
ParentID: root
Metadata node: node001-numa0-4 [ID: 4]
Stripe-Musterdetails:
+ Typ: RAID0
+ Chunksize: 2M
+ Number of storage targets: desired: 3

+ Storage Pool: 1 (Default)
Inode hash path: 7/5E/0-5D9BA1BC-1

Die transparenten riesigen Seiten wurden deaktiviert und die folgenden Tuningoptionen auf den Metadaten- und Storage-Servern festgelegt:

  • vm.dirty_background_ratio = 5 
  • vm.dirty_ratio = 20 
  • vm.min_free_kbytes = 262144 
  • vm.vfs_cache_pressure = 50
  • vm.zone_reclaim_mode = 2 
  • kernel.numa_balancing = 0

Zusätzlich zu den oben genannten Optionen wurden die folgenden BeeGFS-Tuningoptionen verwendet: 

  • Der Parameter tuneTargetChooser wurde in der Metadatenkonfigurationsdatei auf roundpoolin festgelegt. 
  • Der Parameter tuneNumWorkers wurde für Metadaten auf 24 und für Storage auf 32 festgelegt. 
  • Der Parameter connMaxInternodeNum wurde für Metadaten auf 32 und für Speicher auf 12 und für Clients auf 24 festgelegt.

Sequenzielle aggregierte IOzone-Dateigröße von 8 TB
Abbildung 9:  Sequenzielle aggregierte IOzone-Dateigröße von 8 TB


In Abbildung 9 sehen wir, dass die Spitzenleistung beim Lesevorgang bei 1024 Threads 132 GBit/s und bei 256 Threads 121 Gbit/s beträgt. Jedes Laufwerk bietet eine Spitzenleseleistung von 3,2 GB/s und eine Spitzenschreibleistung von 1,3 GB/s, was eine theoretische Spitzenleistung von 422 GB/s für Lesevorgänge und 172 GB/s für Schreibvorgänge ermöglicht. Hier ist jedoch das Netzwerk der einschränkende Faktor. Wir haben insgesamt 11 InfiniBand EDR-Links für die Storage-Server im Set-up. Jeder Link kann eine theoretische Spitzenleistung von 12,4 Gbit/s bereitstellen, was eine theoretische Spitzenleistung von 136,4 Gbit/s ermöglicht. Die erzielte Spitzenleistung bei Lese- und Schreibvorgängen beträgt 97 % bzw. 89 % der theoretischen Spitzenleistung.

Die Single-Thread-Schreibleistung liegt bei ca. 3 Gbit/s und beim Lesevorgang ebenfalls bei ca. 3 Gbit/s. Die Schreibleistung skaliert linear, mit einem Spitzenwert bei 256 Threads und dann abnehmend. Bei niedrigeren Threadanzahlen ist die Lese- und Schreibleistung identisch. Denn bei bis zu 8 Threads schreiben 8 Clients 8 Dateien auf 24 Ziele, was bedeutet, dass nicht alle Speicherziele vollständig ausgelastet sind. Wir haben 33 Speicherziele im Computer und daher sind mindestens 11 Threads erforderlich, um alle Server vollständig zu nutzen. Die Leseleistung weist eine stetige lineare Steigerung mit der Zunahme der Anzahl gleichzeitiger Threads auf und zeigt eine nahezu ähnliche Performance bei 512 und 1024 Threads.

Die Leseleistung ist außerdem niedriger als die Schreibleistung bei Thread-Anzahlen von 16 bis 128, danach beginnt die Leseleistung zu skalieren. Dies liegt daran, dass ein PCIe-Lesevorgang zwar ein „Non-Posted“ Vorgang ist, aber sowohl eine Anfrage als auch einen Abschluss erfordert, während ein PCIe-Schreibvorgang ein Fire-and-Forget-Vorgang ist. Sobald das TLP (Transaction Layer Packet) an den DLL (Data Link Layer) übergeben wurde, wird der Vorgang abgeschlossen. Ein Schreibvorgang ist ein „Posted“ Vorgang, der nur aus einer Anfrage besteht.

Der Lesedurchsatz ist in der Regel niedriger als der Schreibdurchsatz, da Lesevorgänge zwei Transaktionen anstelle eines einzigen Schreibvorgangs für dieselbe Datenmenge erfordern. PCI Express verwendet ein Split-Transaktionsmodell für Lesevorgänge. Die Lesetransaktion sollte folgende Schritte umfassen:

  • Der Requester sendet ein MRR (Memory Read Request).
  • Der Completer sendet die Bestätigung auf den MRR.
  • Der Completer gibt eine Completion mit den Daten zurück.

Der Lesedurchsatz hängt von der Verzögerung zwischen dem Zeitpunkt, zu dem die Leseanfrage ausgegeben wird, und dem Zeitpunkt ab, an dem der Completer die Daten zurückgegeben hat. Wenn die Anwendung jedoch genügend Leseanfragen stellt, um diese Verzögerung abzudecken, wird der Durchsatz maximiert. Das ist der Grund dafür, dass die Leseleistung von 16 bis 128 Threads zwar geringer ist als die Schreibleistung, wir aber einen höheren Durchsatz messen, wenn die Anzahl der Anfragen steigt.  Ein niedrigerer Durchsatz wird gemessen, wenn der Requester auf den Abschluss wartet, bevor nachfolgende Anfragen gestellt werden. Ein höherer Durchsatz wird registriert, wenn mehrere Anfragen ausgegeben werden, um die Verzögerung nach der Rückgabe der ersten Daten zu amortisieren.


Zufällige Schreib-und Lesevorgänge N-N

Um die Leistung bei zufälligen E/A-Vorgängen zu evaluieren, wurde IOzone Version 3.487 im Random-Modus verwendet. Tests wurden für Threadanzahlen von 4 Threads bis zu 1.024 Threads durchgeführt. Die Option für Direct IO (-I) wurde verwendet, um IOzone auszuführen, sodass alle Vorgänge den Puffercache umgehen und direkt an die Festplatte gehen. Eine BeeGFS-Stripe-Anzahl von 3 und Blockgröße von 2 MB wurde verwendet. In IOzone wird eine Anfragegröße von 4 KiB verwendet. Die Performance wird in E/A-Vorgängen pro Sekunde (IOPS) gemessen. Die BS-Caches wurden zwischen den Ausführungen auf den BeeGFS-Servern sowie den BeeGFS-Clients gelöscht. Der Befehl, der für die Ausführung der zufälligen Schreib- und Lesevorgänge verwendet wird, ist unten angegeben:

Zufällige Lese- und Schreibvorgänge: iozone -i 2 -w -c -O -I -r 4K -s $Size -t $Thread -+n -+m /path/to/threadlist


Zufällige Lese- und Schreibleistung mit IOzone mit einer aggregierten Dateigröße von 8 TB
Abbildung 10:  Zufällige Lese- und Schreibleistung mit 8 TB aggregierter IOzone-Dateigröße

Der Spitzenwert für zufällige Schreibvorgänge liegt bei ~3,6 Millionen IOPS bei 512 Threads und der Spitzenwert für zufällige Lesevorgänge bei ~3,5 Millionen IOPS bei 1024 Threads, wie in Abbildung 10 gezeigt. Sowohl die Schreib- als auch die Leseleistung zeigen eine höhere Performance, wenn eine höhere Anzahl von E/A-Anforderungen vorhanden ist. Der Grund dafür ist, dass der NVMe-Standard bis zu 64.000 E/A-Warteschlangen und bis zu 64.000 Befehle pro Warteschlange unterstützt. Dieser große Pool von NVMe-Warteschlangen bietet ein höheres Maß an I/O-Parallelität und daher steigen die IOPS auf mehr als 3 Millionen.


Schlussfolgerungen und zukünftige Arbeiten

In diesem Blogbeitrag wird die Veröffentlichung der Dell EMC High Performance BeeGFS Storage-Lösung angekündigt und seine Leistungsmerkmale hervorgehoben. Die Lösung bietet einer Spitzenleistung bei sequenziellen Lese- und Schreibvorgängen von ~132 GB/s bzw. ~121 GB/s und einer Spitzenleistung bei zufälligen Schreibvorgängen von ~3,6 Millionen IOPS und zufälligen Lesevorgängen bei ~3,5 Millionen IOPS.

Dieser Blogbeitrag ist Teil Eins der „BeeGFS Storage Solution“, die mit Schwerpunkt auf Scratch-Speicher mit hoher Performance entwickelt wurde. Freuen Sie sich auf Teil 2 der Blogserie, in dem beschrieben wird, wie die Lösung durch eine höhere Anzahl Server skaliert werden kann, um Performance und Kapazität zu steigern. In Teil 3 der Blogserie werden zusätzliche Funktionen von BeeGFS besprochen und die Verwendung von StorageBench, dem Benchmark für integrierte Storage Targets von BeeGFS, hervorgehoben.

Als einer der nächsten Schritte veröffentlichen wir ein Whitepaper mit der Metadatenperformance und der IOR-Performance von n Threads zu 1 Datei und zusätzlichen Details zu Designüberlegungen, Tuning und Konfiguration.


Referenzen

[1] BeeGFS-Dokumentation:  https://www.beegfs.io/wiki/
[2] So verbinden Sie zwei Schnittstellen mit demselben Subnetz:  https://access.redhat.com/solutions/30564

Artikeleigenschaften


Betroffenes Produkt

PowerSwitch S3048-ON, Mellanox SB7800 Series, PowerEdge R640, PowerEdge R740XD

Letztes Veröffentlichungsdatum

25 März 2024

Version

7

Artikeltyp

Solution