Cache-Tiering bei Ceph via Benchmark - Starline Computer: Storage und Server Lösungen von erfahrenen Experten

Wie funktioniert das Cache-Tiering unter Ceph?

Ambedded Experten zeigen hier anhand einer Benchmark-Testserie, wie sie über das Ceph-Cache-Tiering per NVMe die Leistung eines HDD-Pools verbesserten.

Was ist überhaupt ein Cache Tier unter Ceph?

Cache Tiering ermöglicht es, dass schnelle Speicher für langsamere als Cache einspringen. Dies beinhaltet die Erstellung eines Pools von schnellen/teuren Speichergeräten (wie NVMe-SSDs), die als Cache-Tier konfiguriert werden. 

Dem gegenüber steht der langsamere/günstigere Backing-Pool von entweder löschcodierten oder langsameren Geräten (wie HDDs) als Storage-Tier. Die Cache-Ebene speichert häufig abgerufene Daten aus der Backing-Ebene und bedient Lese- und Schreibanforderungen von Clients. 

Der Cache-Tiering-Agent löscht oder entfernt – Richtlinien basiert – Objekte aus dem Cache-Tier.

Ceph-Cache-Tier-Demo

In der Vergangenheit war mit SATA-SSDs als Cache-Speicher die Leistungsverbesserung durch dessen Tiering unbedeutend. Heutzutage sind die Kosten für NVMe-SSDs stark gesunken, und die Übertragungsleistung von NVMe-SSDs ist weitaus höher als die von Festplatten. Deshalb galt es herauszufinden, ob NVMe-SSDs als Cache-Tier einen HDD-Pool erheblich beschleunigen.

Um die Wirksamkeit eines NVMe-Caches zu testen, wurde ein Demo-Szenario konzipiert, das die Leistung eines HDD-basierten Speicherpools aufgreifen könnte.

Cluster Setup

Mars500 Cluster

NVME Hosts            3x Ambedded Mars500 Ceph Appliances
jeweils bestückt mit
 
  
CPU 1x Ampere Altra Arm 64-Core 3,0 GHz
Speicher 96 GiB DDR4
Netzwerk 2 Ports 25 Gbit/s Mellanox ConnectX-6
OSDs 8x Micron 7400, 960 GB

 

Mars400 Cluster

HDD Hosts            3x Ambedded Mars400 Ceph Appliances
jeweils bestückt mit
 
CPU 8 Microserver mit Quad-Core Arm64 1,2 GHz
Speicher 4 GiB pro Knoten, 32 GiB pro Appliance
Netzwerk 2x 2,5 Gbit/s pro Knoten, 2x 10 Gbit/s uplink via internen Switch
OSDs 8x 6 TB Seagate Exos HDDs

Ceph Cluster information

  • 24x OSD mit NVMe SSDs (3x Ambedded Mars500 Appliances)
  • 24x OSD mit HDDs (3x Ambedded Mars400 Appliances)
  • HDD und NVMe Server befinden sich in getrennten CRUSH-Roots

 

Test Clients

  • 2x physische Server mit 2x 25 Gbit/s NIC
  • Auf jedem Server laufen 7 VMs
  • Jede VM hat 4-Core und 8 GB Speicher

 

Einrichten des Cache-Tiers durch den Ambedded UVS Manager

 1. Erstellen Sie einen Basis-Pool mit Hilfe der HDD OSDs

 2. Erstellen Sie einen NVMe-Pool mit Hilfe der NVMe OSDs

 3. Fügen Sie den NVMe-Pool als Cache-Tier des HDD-Pools hinzu 
 

Default Konfiguration des Cache Tiers

i. Cache mode: writeback

ii. hit_set_count = 12

iii. hit_set_period = 14400 sec (4 h)

iv. target_max_byte = 2 TiB

v. target_max_objects = 1 million

vi. min_read_recency_for_promote & min_write_recency_for_promote = 2

vii. cache_target_dirty_ratio = 0.4

viii. cache_target_dirty_high_ratio = 0.6

ix. cache_target_full_ratio = 0.8

x. cache_min_flush_age = 600 sec

xi. cache_min_evict_age = 1800 sec

Der HDD-Pool wurde vor und nach dem Hinzufügen der Cache-Ebene getestet. Dabei sind bis zu 14 Clients zur Erzeugung von Testlasten verwendet worden. Jeder Client montierte ein RBD für den fio-Test. Die Testlast begann mit einem Client und die Anzahl der Clients wurde nach Abschluss jedes Testaufschlags erhöht. 

Jeder Testzyklus dauerte fünf Minuten und wurde automatisch durch Jenkins gesteuert. Die Leistung eines Testauftrags war die Summe der Ergebnisse aller Clients. Bevor das Cache-Tiering getestet wurde, schrieben die Experten Daten in die RBDs, bis der Cache-Tier-Pool über die Zielfüllquote (0,8) hinaus belegt war.

2023-04-21 09_32_32-Window

Testergebnisse im Einzelnen

Die Diagramme zeigen, dass sich die Leistung des reinen HDD-Pools nach Hinzufügen eines NVMe-Cache-Pools deutlich verbessert.

2023-04-21 09_34_56-Window
2023-04-21 09_35_15-Window
2023-04-21 09_35_30-Window
2023-04-21 09_35_49-Window
1/4

Während des Cache-Tests haben die Ingenieure die Pool-Statistiken mit dem Befehl ceph osd pool stats beobachtet. In den Cache- und Basispools fanden Flushing-, Evicting- und Promoting-Aktivitäten statt. Die Pool-Statistiken wurden während des Cache-Tests zu verschiedenen Zeitpunkten erfasst.

Data was written to the cache 
pool cache id 84 
 client io 21 MiB/s wr, 0 op/s rd, 5.49k op/s wr 

pool mars400_rbd id 86 
 nothing is going on

Cache was doing promote and evict 
pool cache id 84 
 client io 42 MiB/s wr, 0 op/s rd, 10.79k op/s wr 
 cache tier io 179 MiB/s evict, 17 op/s promote 

pool mars400_rbd id 86 
 client io 0 B/s rd, 1.4 MiB/s wr, 18 op/s rd, 358 op/s wr

Cache was flusing 
pool cache id 84 
 client io 3.2 GiB/s rd, 830 op/s rd, 0 op/s wr 
 cache tier io 238 MiB/s flush, 14 op/s promote, 1 PGs flushing 

pool mars400_rbd id 86 
 client io 126 MiB/s rd, 232 MiB/s wr, 44 op/s rd, 57 op/s wr

PG was evicting 
pool cache id 84 
 client io 2.6 GiB/s rd, 0 B/s wr, 663 op/s rd, 0 op/s wr 
 cache tier io 340 MiB/s flush, 2.7 MiB/s evict, 21 op/s promote, 1 PGs evicting (full) 

pool mars400_rbd id 86 
 client io 768 MiB/s rd, 344 MiB/s wr, 212 op/s rd, 86 op/s wr

PG Flushing and client IO direct to base pool. (clients were writing data) 
pool cache id 84 
 client io 0 B/s wr, 0 op/s rd, 1 op/s wr 
 cache tier io 515 MiB/s flush, 7.7 MiB/s evict, 1 PGs flushin 

pool mars400_rbd id 86 
 client io 613 MiB/s wr, 0 op/s rd, 153 op/s wr

Betrachtungen

Nach dem Dauertest ließen die Experten den Cluster für einige Stunden ruhen und wiederholten den 4 kB Random-Write-Test. Sie erhielten danach eine viel bessere Leistung. Dies lag daran, dass der Cache-Speicherplatz für das neue Schreiben freigegeben wurde.

Nach diesem Test waren sie überdies sicher, dass die Verwendung des NVMe-Pools als Cache-Tier eines HDD-Pools eine erhebliche Leistungssteigerung bewirken könne.

Es gilt zu beachten, dass die Leistung von Cache-Tiering jedoch nicht garantiert werden kann. Die Leistung hängt von den aktuellen Cache-Treffern ab, und die gleiche Leistung kann nicht durch Wiederholung von Tests mit derselben Konfiguration und denselben Arbeitslasten erzielt werden.

Fazit: Sollte eine Anwendung eine konstante Leistung benötigen, sollte sie über einen reinen NVMe-SSD-Pool verfügen.

Dieser Artikel ist zuerst bei Ambedded erschienen

Mehr erfahren
KB
Konrad Beyer
Technik

Unser Technikchef verfügt über ein umfassendes Wissen in allen Storage- und Server-Themen.