Ein Ingenieur von Clyso fasste die Erfahrung in der Erstellung eines Speicherclusters auf Basis des fehlertoleranten verteilten Systems Ceph zusammen, dessen Bandbreite mehr als ein Terabyte pro Sekunde beträgt. Es wird vermerkt, dass dies der erste Ceph-Cluster ist, der einen solchen Wert erreicht hat, jedoch mussten die Ingenieure vor dem Erreichen des präsentierten Ergebnisses eine Reihe von weniger offensichtlichen Herausforderungen überwinden.
Um die Leistung um 10-20 % zu steigern, genügte es, auf den Servern im BIOS-Energiesparmodus nur den Maximalleistungsmodus zu aktivieren und den c-state zu deaktivieren (c-state ändert die Energieeinstellungen je nach Last, was sich auf Ceph auswirkt). Außerdem stellte sich heraus, dass der Linux-Kernel bei der Verwendung von NVMe-Laufwerken erheblich Zeit mit der Verarbeitung von Spinlocks beim Aktualisieren der IOMMU-Mapping verbringt. Das Deaktivieren von IOMMU im Kernel führte zu einem signifikanten Anstieg der Leistung in Tests für das Lesen und Schreiben von Blöcken mit einer Größe von 4 MB.
Das Deaktivieren von IOMMU hat das Problem mit der Leistungseinbuße bei zufälligen Schreibvorgängen von 4KB großen Blöcken nicht gelöst. Bei der Untersuchung stießen die Ingenieure auf Korrekturen in den Build-Skripten von Ceph von den Projekten Gentoo und Ubuntu, die eine Kompilierung mit der Option RelWithDebInfo beinhalteten. Diese führte in GCC zum Einsatz des Optimierungsmodus „-O2“, was die Leistung von Ceph spürbar steigerte. Auch die Kompilierung mit der TCMalloc-Bibliothek reduzierte die Leistung. Durch die Anpassung der Compiler-Flags und das Abstellen von TCMalloc konnte die Zeit für die Kompaktierung um das Dreifache gesenkt und die Leistung bei zufälligen 4K-Schreibvorgängen verdoppelt werden. Abschließend wurden zudem Optimierungen der Einstellungen von Reef RocksDB und der Platzierungsgruppen (PG) vorgenommen.
Der Cluster besteht aus 68 Knoten auf Basis von Server Dell PowerEdge R6615 mit CPU AMD EPYC 9454P 48C/96T. Jeder Knoten ist mit 10 NVMe-Speicherlösungen Dell 15,36 TB, zwei 100GbE Ethernet-Adaptern Mellanox ConnectX-6 und 192 GB RAM ausgestattet. Die Software basiert auf Ubuntu 20.04.6 und Ceph 17.2.7. Im Cluster mit 63 Knoten sind 630 OSD (Object Storage Daemon, ein Hintergrundprozess, der die Datenspeicherung im lokalen Speicher verwaltet, wobei ein OSD auf jedem NVMe-Speicher vorhanden ist), drei MON-Prozesse (Monitor, überwacht den Zustand des Clusters) und ein MGR-Prozess (Manager, verwaltet den Service) aktiv. Die Speicherkapazität beträgt 8,2 PB.
Die Durchsatzrate bei sequenziellen 4MB Lesevorgängen betrug 1025 GiB/s, beim Schreiben 270 GiB/s. Bei zufälligem Lesen von 4KB-Blöcken lag die Leistung bei 25,5 Millionen Leseoperationen pro Sekunde und 4,9 Millionen beim Schreiben. Die Aktivierung der Verschlüsselung reduzierte die Durchsatzrate beim Lesen auf etwa 750 GiB/s. Mit der Verwendung von Fehlerkorrekturcodes EC62 betrug der Durchsatz 547 GiB/s beim Lesen und 387 GiB/s beim Schreiben (die Schreibgeschwindigkeit war höher als ohne Fehlerkorrektur), während bei zufälligen Zugriffen 3,4M IOPS beim Lesen und 936K IOPS beim Schreiben erzielt wurden.


Zusätzlich kann erwähnt werden, dass im September ein ähnlicher Grenzwert bei der Durchsatzrate in Tebibyte pro Sekunde im Exabyte-Speichercluster des CERN erreicht wurde, das auf dem offenen verteilten Speicher EOS basiert, das unter Verwendung des XRootD-Protokolls implementiert wurde.
Quelle: opennet.ru
