Loading...

Blog

Latest blog posts

iSCSI-Performance-Optimierung: 380 MB/s in der VM mit openfiler und ESXi

Hallo, zusammen
(english version)
Zwischen den günstigen iSCSI-Storage-Appliances (QNAP, Thecus, Buffalo, Cisco SMB und Co.) und den „großen“ Storages aus der Fiberchannel-Welt klafft eine große Lücke, sowohl in der Performance, der Features aber insbesondere im Preis. Im WorNet-Labor haben wir eine überzeugende Lösung gefunden, die diese Lücke überbrückt. Natürlich mit OpenSouce-Mitteln!
unsere TestumgebungSchon lange setzen wir den auf Linux basierenden Openfiler für unsere iSCSI-Storage-Server ein. Allerdings waren wir mit der Performance nicht so recht zufrieden. Selbst mit leistungsfähiger Hardware kommt verglichen mit günstigen Appliances (in unserem Fall von QNAP) in den virtuellen Maschinen nur wenig mehr I/O-Leistung an. Die Testphase unseres neuen ESX-Clusters kam uns da sehr gelegen um systematisch an der Performance-Schraube zu drehen.
Hier hat sich ein optimales Vorgehen bei der Optimierung herauskristallisiert, bei dem die Reihenfolge der Optimierungsschritte  entscheidend ist.
Unsere Testumgebung:

  • 1 ESXi 4.1 Server (Fujitsu RX 200 S6, 8 Cores 2,4 GHz, 48 GB RAM, 6 x GBit-Netzwerk Intel)
  • 1 Openfiler 2.3 (Supermicro 8 Cores 2,0 GHz, 8 GB RAM, 3ware 9650SE 8 Ports, 6 x GBit-Netzwerk Intel, 8 Festplatten 2 TB SATA 7200U/min)
  • 1 Switch Cisco Catalyst 2960S (24 Port GBit)

Je 4 GBit Interfaces werden für iSCSI genutzt. Dabei werden 4 VLANs mit verschiedenen IP-Bereichen definiert. Die Interfaces müssen dem iSCSI-HBA zugeordnet werden bevor die Ziele sichtbar werden.  Dann wird ein Volume mit VMFS formatiert und man erhält einen Datastore mit dem man die Tests durchführen kann. Die Verwendung der Pfade wird auf „Round Robin“ konfiguriert.
virtuelle Testmaschine:
Wir haben eine virtuelle Maschine mit 1 vCPU, 2 GB RAM mit Windows 7 installiert. Die Größe der virtuellen Festplatte sollte mindestens 15 GB + 2 * RAM des Storageservers betragen. Zusätzlich wird IOMETER und ein standardisiertes Konfigurationsfile aus dem VMware-Forum installiert. Mit diesem Test erhält man Werte die mit den Ergebnissen anderer Forumsbeiträge vergleichbar sind.
1. Schritt: Ausgangssituation
Zunächst messen wir die Performance des nicht-optimierten Systems. Dabei wählen wir die Größe des Testfiles bewusst kleiner als der Arbeitsspeicher des Storage-Servers, d.h. wir messen zwar die iSCSI-Anbindung, nicht aber das Festplattensystem.

Latency (ms) IO/s MB/s
Max Throughput-100%Read 14,6 4096,1 128,0
RealLife-60%Rand-65%Read 412,3 141,4 1,1
Max Throughput-50%Read 13,4 4302,2 134,4
Random-8k-70%Read 546,1 107,6 0,8

Für 4 GBit Speicheranbindung ist das nicht gerade beeindruckend. Das RAID-System des Storage-Servers liefert lokal im Openfiler gemessen 420 MB/s!
2. Schritt: Optimierung der iSCSI-Speicheranbindung
Jetzt optimiert aggressiv man alle Parameter, die die Speicheranbindung betreffen. Dabei ist es in Ordnung, wenn unsichere Einstellungen (z.B. Write-Cache im RAID-Controller ohne vorhandene BBU) gewählt werden. Auch wählt man die Größe der Testdatei in IOMETER kleiner als den RAM des Storage-Systems, denn wir wollen möglichst wenig Einflüsse der Platten und statt dessen nur den Weg von der virtuellen Maschine bis zum iSCSI-Daemon im Storage-System testen.
Insbesondere konfiguriert man:

  • Netzwerkkartenparameter (Jumbo Frames, TCP-Offload)
  • iSCSI-Parameter (Round-Robin-Parameter)
  • RAID-Controller (Write-Cache einschalten)

Bei uns machte sich das deutlich bemerkbar:

Latency (ms) IO/s MB/s
Max Throughput-100%Read 4,69 12624,71 394,52
RealLife-60%Rand-65%Read 318,66 181,52 1,42
Max Throughput-50%Read 8,08 7030,93 219,72
Random-8k-70%Read 369,51 150,26 1,17

Damit sind wir sehr nahe am theoretischen Maximum (4 GBit entspricht ca. 440 MB/s inkl. iSCSI-Overhead).
Wichtig: Machen sie nicht weiter wenn Sie mit diesen Werten nicht 100%ig zufrieden sind. Ab hier wird es wieder schlechter!
Wenn man im vShpere-Client unter Leistung die Nutzung der iSCSI-Pfade bei sequentiellem Zugriff ansieht müssen die Pfade gleichmäßig mit je 1 GBit ausgelastet sein (Bild rechts).
Stolperfallen in unserem Test:

  • fehlerhafte Jumbo-Frame-Konfiguration (Test: Ping mit großen Paketen und Dont-Fragment-Bit), hierbei auch an den Switch (Cisco 2960S: „set mtu jumbo 9000“) denken!
  • Der Round-Robin-Algorithmus bei ESXi wechselt den Pfad im default nur nach 1000 IO-Operationen. Das muss man mit einem esxcli-Befehl umstellen.

3. Schritt: Optimierung der Storageparameter
Jetzt stellt man sinnvolle Werte für den Produktivbetrieb ein und  erhöht die Größe des Testfiles für IOMETER auf das doppelte des RAM des Storageservers. Aufpassen die „Maximum Disk Size“ wird in Blocks angegeben, ein Block hat 512 Bytes.
In unserem Fall haben wir nun verschiedene Raid-Level und Spindelzahlen verglichen.
Raid-10 mit 4 Platten zu je 2 TB (SATA, 7200 U/min):

Latency (ms) IO/s MB/s
Max Throughput-100%Read 4,93 12089,4 377,79
RealLife-60%Rand-65%Read 333,02 171,66 1,34
Max Throughput-50%Read 8,15 6857,19 214,29
Random-8k-70%Read 454,2 129,76 1,01

Raid-10 mit 8 Platten:

Latency (ms) IO/s MB/s
Max Throughput-100%Read 4,8 12331,0 385,3
RealLife-60%Rand-65%Read 443,6 138,0 1,1
Max Throughput-50%Read 9,1 6305,3 197,0
Random-8k-70%Read 504,0 121,4 0,9

Die Erhöhung der Anzahl der Festplatten von 4 auf 8 bei RAID-10 hat sich erstaunlicherweise nicht signifikant ausgewirkt. Da ist besser zwei unabhängige Datastores mit je 4 Platten anzulegen.
Ein Test mit einem RAID-6 aus 8 Festplatten ergab noch schlechtere Werte, insbesondere beim Random-Zugriff.
Fazit:
Mit knapp 400 MB/s und >10.000 IOPS sind wir absolut glücklich. Unser x86-Server mit Openfiler (ca. 4.000 Euro) schließt die Lücke zwischen den „kleinen“ (ca. 1.000 Euro und 70 MB/s und 2.000 IOPS) und den „großen“ jenseits der 10 k€.
Eine weitere Verbesserung der IOPS oder Latenzen ist mit schnelleren Festplatten, SSDs oder SAS-Platten sicher realisierbar. Eine Storage-Replikation ist mit „drbd“ machbar, wurde aber in diesem Test nicht untersucht.
Dieser Artikel basiert auf den Testreihen und Erfahrungen von Christian Eich, Richard Schunn und Toni Eimansberger.
IT bleibt spannend,
Christian Eich

Comments (5)

  1. Quimby sagt:

    Bin beim Googeln nach Storagelösungen auf diesen Post gestossen. Einen „alten“ Server mit Openfiler zu installieren und diesen dann als SAN zu benutzen, klingt sehr verlockend. Danke für den Tipp. (Kannte Openfiler bisher nicht)

  2. Hallo Quimby,
    zu alt / leistungsschwach sollte der Server nicht sein. Wir haben mal mit Intel Atom-Servern experimentiert, aber die schaffen es bei weitem nicht 1 GBit zu liefern. Viele Cores bringen übrigens nur dann etwas wenn man viele Hosts oder iSCSI-Pfade hat. Ein Pfad wird immer nur von einem Prozess bediient.
    IT bleibt spannend,
    Christian

  3. Kai sagt:

    Danke für den guten Artikel! Und die detailierten Vergleichzahlen.
    Ich habe dennoch viele Fragen:
    1) Warum sind 4 Platten im RAID10 performanter als 8!
    Meine Vermutung: Irgendwo muss im Setup ein Wurm drin gewesen sein.
    Die Scalierung mit der Anzahl Spindels darf laut Lehrbuch nicht einbrechen.
    (übriens: Habt ihr Softwareraid oder Hardwareraid angewendet?)
    2) Neben iscsi bietet openfiler auch die Möglichkeit NAS Storgage für vmware bereitzustellen. Habt ihr das auch mal getestet?
    Die NAS Einbindung soll gegenüber iscsi erheblich vom RAM profitieren können.
    3) Interessant wäre zuletzt openfiler als virtual appliance im Test bei gleichem Setup. (Vorausgesetzt eure OF hardware ist vmware geeignet.) Wieviel performance schluckt das esxi?
    Noch als wichtiger Hinweis: OF 2.3 ist unter Umständen nicht vmware kompatibel. Als SAN Ersatz um FT/HA bereitzustellen gibt es einen bösen bug. (Die scsi spezifikation bezüglich „reservations“ wird nicht erfüllt. siehe auch vmware kb)

    1. Hallo, Kai
      zu 1) habe ich nur eine Vermutung. Statt jedes mal neu zu installieren haben wir von RAID-10 (4 Platten) über RAID-10 (6 Platten) zu RAID-10 mit 8 Platten migriert, d.h. das könnte mit frisch aufgesetzten Arrays anders aussehen. Wir verwenden das 3ware-Hardware-RAID.
      2) nein, soweit ich weiss funktioniert das Bonding nur innerhalb eines Switches. Bei iSCSI können wir die iSCSI-VLANs auf mehrere Switches verteilen und so einen SPOF vermeiden. interessant wäre es sicherlich. Die neue VMware Storage Appliance verwendet wohl auch NFS.
      3) da weiss ich ja schon was der nächste Praktikant als Aufgabe bekommt 🙂
      Danke für den Hinweis. Das deckt sich zwar nicht mit unsere Beobachtungen und der vieler Openfiler-Benutzer. Wir haben hier zumindest noch nie irgendein Problem mit der Kombination ESXi 4.0/4.1 und openfiler 2.3 gehabt.
      Ich werde eine alternative Installation mit LIO (http://linux-iscsi.org/wiki/Target) aufsetzen. Das ist sowohl technisch als auch aus Sicht der Performance eine spannende Gegenüberstellung. Mehr dazu hier im Blog 🙂
      IT bleibt spannend,
      Christian

  4. Thomas sagt:

    Ein sehr informativer Artikel, danke Christian. Uns ist auch schon der preisliche „Sprung“ aufgefallen, zudem bieten die Qnaps und Synologys dieser Welt ja meist nichtmal ECC-RAM, geschweigeden irgendwelche Notifications zu Speicherfehlern. Openfiler ist in der Tat nicht schlecht, wir haben uns dann aber doch aus zwei Gründen für eine „neue“ Lösung entschieden. Zum einen war das an sich beworbene Cluster-Feature von Openfiler nicht zuverlässig umsetzbar und zum anderen haben wir bei http://www.exomium.com eine Lösung mit Open-E auf „neuer“ Hardware gefunden die preislich noch in der genannten Lücke liegt – zugegeben teurer als die Selbstbaulösung mit Openfiler – aber dafür haben wir einen Support, 5 Jahre Hardwaregarantie und ein funktionierendes Failovercluster für iSCSI Volumes – das war einfach zu attraktiv…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*
*

Cookie Consent mit Real Cookie Banner