29
© 2009 Oracle – Proprietary and Confidential 1

© 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

Embed Size (px)

Citation preview

Page 1: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

© 2009 Oracle – Proprietary and Confidential 1

Page 2: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

„Best Practices” für Solaris ZFSFranz HaberhauerChief TechnologistHardware PresalesOracle Deutschland B.V. & Co. KG

Page 3: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

© 2009 Oracle – Proprietary and Confidential 3

Oracle Solaris ZFS

128-Bit DateisystemKompressionSolaris 11 Express: Deduplication

Prüfsummen und Copy-on-Write Transaktionen.Integrierte Fehlerbehandlung überAbstraktionsebenen.RAID-Z2, RAID-Z3

Pooled Storage Architektur – Kein Volume Manager.Snapshots, Clones, Kompression,Filesystem Quota and ReservierungenUser und Group Quota.OpenSolaris Timeslider

Performance in der Architektur – entworfen für Charakteristika heutiger Platten.Ermöglicht die transparente Nutzung von SSDs.

End-to-EndData Integrität

Performance-Potential

Software Developer

Einfache Administration

ImmenseKapazität

Storage Pool

ZFS ZFS ZFS

Teil von Solaris 10 – auch für das root Filesystem

BestFile System

Page 4: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

ZPool-Konfigurationen und Performance

• Für beste Antwortzeiten: mirror– Bei hohen Lese-Anforderungen: mehrfacher Spiegel

• Kompression kann durch reduzierte # IOs Performance verbessern

• Mehr Kapazität erhält man mit raidz, raidz2, raidz3– Eine logische I/O triggert mehrere Platten-IOs– Dynamische Full-Stripe Writes– Worst Case: Charakteristik von einer Platte

• bei Anzahl von Kopfbewegungen• bei Anzahl von IOs

• Extrem breite raidz-Stripes– z.B: x4500: raidz2: 44+2– Sequentielles Lesen und Schreiben ok– Random Lesen oder Schreiben problematisch

Page 5: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

Wieviele Platten in RAID-Z(2,3)?

• Nicht zu viele (3-9) – insbesondere bei Random I/O!– Beispiel: 100 Platten mit je 100GB, 200 IOPS

http://blogs.sun.com/roch/entry/when_to_and_not_to

– Beispiel: X4500 – 48 Platten % 2 Boot-Platten 5x(7+2), 1 hot spare, 17.5 TB 4x(9+2), 2 hot spares, 18.0 TB 6x(5+2), 4 hot spares, 15.0 TB

Config Blocks Available Random FSBlocks /sec ------------ --------------------- ------------------------------- Z 1 x (99+1) 9900 GB 200 Z 2 x (49+1) 9800 GB 400 Z 5 x (19+1) 9500 GB 1000 Z 10 x (9+1) 9000 GB 2000 Z 20 x (4+1) 8000 GB 4000 Z 33 x (2+1) 6600 GB 6600

M 2 x (50) 5000 GB 20000 S 1 x (100) 10000 GB 20000

Page 6: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

Konfiguration von RAIDZ-Pools

zpool create rzpool raidz2 c0t1d0 c1t1d0 c4t1d0 c5t1d0 c6t1d0 c7t1d0 c0t2d0 c1t2d0 c4t2d0 c5t2d0 c6t2d0 c7t2d0 c0t3d0 c1t3d0 c4t3d0 c5t3d0 c6t3d0 c7t3d0

versuszpool create rzpool raidz2 c0t1d0 c1t1d0 c4t1d0 c5t1d0 c6t1d0 c7t1d0 raidz2 c0t2d0 c1t2d0 c4t2d0 c5t2d0 c6t2d0 c7t2d0 raidz2 c0t3d0 c1t3d0 c4t3d0 c5t3d0 c6t3d0 c7t3d0

Page 7: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

Sizing von ZPools

• Nutzung des ZPools bis zu 80% empfohlen– ZFS macht Copy-On-Write– Der COW-Mechanismus braucht freien Platz– ZFS funktioniert auch bei über 80%

• Änderungen wegen anderer Allokierungs-Algorithmen evtl. langsamer

• Schwellwert ist konfigurierbar: metaslab_df_free_pct

– Evtl. Quota-Mechanismen nutzen

Page 8: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

The Need for Triple Parity RAID

http://blogs.sun.com/ahl/entry/acm_triple_parity_raid

Page 9: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

Konsistenz: Copy-On-Write Transaktionen

1. Konsistenter Zustand 2. Dateien schreiben

4. Schreiben uberblock (= Commit)3. Zufügen Metadaten

Page 10: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

Synchrone SchreiboperationenZFS Intent Logfwrite() mit O_SYNC, O_DSYNC, fsync(), sync() )

im zpool oder separiertGröße des ZIL– Datenrate für die Zeit der nächsten 2 COW TA – z.B. 200 MB/s, TAs alle 5 Sek (Default)

• 2 * 5 * 200 = 2 GB

Page 11: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

ZFS Schreibverhalten

• “lazy write batches”– Daten: verzögert, jeweils mit Abschluss einer Transaktionsgruppe– Log: gleichmäßig

Beispiel: 2 Disks (Daten: sd1, Log: sd2)

Page 12: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

ZFS logbias Property

• In Solaris 10 9/10 und S7000 – zfs set logbias=latency

• nutzt das schnelle sequentielle Schreiben des Logs• Ist durch die sequentielle Schreibgeschwindigkeit einer Platte limitiert

– zfs set logbias=throughput– Daten der sync writes werden direkt geschrieben (d.h. nur einmal)– Log-Einträge nur als Referenz, ohne die Daten selbst– Verbesserung bei hohen Schreibraten– Latenz wird aber verschlechtert

• Kein Problem bei NVRAM gepufferten Daten

• Möglicher Workaround (Details siehe Evil Tuning Guide)– zfs_immediate_write_sz unter I/O-Größe reduzieren

– Allerdings global für alle Datasets, daher möglicherweise negativ

Page 13: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

ZFS und Flash Storage (SSD)

• ZIL kann auf ein eigenes Device gelegt werden (Logzilla)– SSD mit hoher Zahl von IOs / Sekunde bei Schreiben

• Nicht jedes SSD optimal (Enterprise Grade)– Wirkt dann wie ein Storage Subsystem mit Cache– Günstiger, da Einsatz der SSD am Sweetspot

• ZFS kann einen Lese-Cache steuern (L2ARC, Readzilla)– SSD mit Kapazität, keine Kopfbewegungen– Enthält Kopie genutzter Daten auf den Platten des Zpools– Schnellere Antwortzeit beim wiederholtem Lesen

= Hybrid Storage Pool

Page 14: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

Der Hybride Storage Pool

Speicher wird transparent verwaltet als ein Pool mit einer optimierten Hierarchie

ZFS verbindet Speichermedien mit unterschiedlichen Eigenschaften zu einer optimierten Einheit

Page 15: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

ZFS Caches - ARC

• ARC Cache– Im Hauptspeicher– Daten (Blöcke der Dateien)– Metadaten (Pointerblöcke, Attribute)– Default: max. 75% bzw. (Hauptspeicher – 1GB)

• Größe kann beschränkt werden – für Anwendungen, die selbst viel RAM verwalten

• DBMS, z.B. Oracle SGA– Hauptspeicher – SGA – 1-2 GB

- im /etc/system: zfs_arc_max

• Pufferung im ARC kann für Datasets deaktiviert werden– zfs set primarycache = on | metadata | off

Page 16: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

ZFS und Direct IO

• UFS Direct IO ist eine Sammlung von Optimierungen– nicht nur “Direct IO” = “am Filebuffer vorbei”

• zfs set primarycache= on | metadata | off– Seit Solaris 10 10/09 (Update 8)– on ist default: alles in den Cache – metadata: Pointer und Attribute in den Cache– off: am Cache vorbei

• Cache-Aspekt von Direct IO– zfs set primarycache=metadata

Page 17: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

ZFS Caches - L2ARC

• optionaler Level 2 Cache– Externe Platte (schnell lesen)– Empfehlung: SSD / Flash Storage– Achtung: benötigt RAM zur Verwaltung

• ~200 Bytes/Record im L2ARC-Directory im ARC– 150 GB L2ARC

• @ 128k (default recordsize) ca. 120MB• @ 8k → 3,75 GB im ARC (2.5%)

Page 18: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

Was kommt in den ZFS L2ARC?

• zfs set secondarycache = on | metadata | off– Einstellung für welche ZFS der L2ARC da sein soll

• secondarycache=metadata in speziellen Fällen:– Metadaten (Pointer) sind ca. 1/1000 der Datenmenge

• Wenn: Metadaten eines ZFS nicht in den Hauptspeicher passen• Und: Random Zugriff schnell sein soll• Und: L2ARC zu klein für Daten und Metadaten ist• Und: Metadaten in L2ARC passen• Dann ist secondarycache=metadata sinnvoll

– Dann liegen die Metadaten irgendwann alle im L2ARC• Pointer können schnell aus dem SSD des L2ARC geholt werden

– Zugriff auf Datenseite ist mit einem Plattenzugriff möglich

Page 19: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

ZFS und (NV)RAM-Caches• ZFS aktiviert (flüchtige) Write-Caches von Platten

– falls Platte als ganzes im Zpool (keine Slices), ansonsten “as-is”

• Konsistenz durch force-write-cache SCSI-Kommando– beim Schreiben des Uberblock, bei synchronen Schreiboperationen

• Storage Systeme mit NVRAM sollten force-write ignorieren– teilweise konfigurierbar (SS61x0,65x0)– Solaris 10 ab 5/09 versucht NVRAM-Devices zu erkennen und

schickt an diese keine force-write-cache• für einzelne Devices via sd.conf konfigurierbar

– ZFS_Evil_Tuning_Guide#Cache_Flushes• Für F20/F5100

http://wikis.sun.com/display/Performance/Tuning+ZFS+for+the+F5100– Globaler Parameter zfs_noflushcache (ggf. für Performance-Test)

• Dynamisch mit mdb: echo zfs_nocacheflush/W0t1 | mdb -kw

• Permanent im/etc/system: set zfs:zfs_noflushcache=1

• Gefahr von Dateninkonsistenz für Pools ohne NVRAM-Cache!

Page 20: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

ZFS mit Storage Systemen

• z.B. mit HDS, LSI, EMC, ...• ZFS sollte eine redundante Konfiguration erhalten

– um Self-Healing Features nutzen zu können– funktioniert aber auch auf einer einzelnen LUN

• ZFS optimiert IO im Hinblick auf verfügbare HW• # virtueller LUNs ~ # Laufwerke unterstützt Heuristiken

22

Storage Subsystem Raid 5

11 33 PP Hot SpareHot Spare

Solaris Host

lun1

Page 21: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

ZFS mit Storage Systemen

• SAN: Storage Subsysteme werden evtl. von mehreren genutzt• Gängige Praxis:

– Drosselung der angeschlossenen Systeme (throttle)• /etc/system: set sd:sd_max_throttle=8

• heisst: maximal 8 ausstehende Requests pro Platte– Einstellung analog auch im ZFS:

• /etc/system: set zfs:zfs_vdev_max_pending=8

– Werte sollten gleich sein

Page 22: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

NFS und ZFS

...

NFS Server

NFS Client

ZIL Daten

Async I/OSync I/O

Sync I/O

Sliding WindowCOMMIT

Separierter ZIL!Idealerweise auf Flash/SSD

zil_disable

Page 23: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

DBMS

Wie schreibt ein DBMS?

asynchrones Schreiben(mit synchronen Schreiboperationen!)

...

Datenbank

Applikation

Log Writer Database Writer

synchron Schreiben(Integrität)

Page 24: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

Datenbank auf ZFS

Datenbank

Applikation

Log Writer Database Writer

.

.

.

Data Management Unit

ZFS Posix Layer

ZFS Intent Log Storage Pool Allocator

• Doppelte Implementierung von– Asynchrones Schreiben– Logging Funktion

• “Raw-”Optimierte DB– Oracle, Informix, DB/2, Adabas C, ..– Modell von Platte und Kopf– Stimmt nicht mehr auf ZFS– Das Performance-Modell der DB

entspricht nicht unbedingt der Realität

• Filesystem-orientierte DB– Sybase, MySQL, PostGreSQL, MaxDB, SQLite– ZFS implementiert IO-Optimierung

Page 25: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

ZFS: ZVOLs und Performance

• ZVOLs sind raw devices im ZFS– Erscheinen unter /dev/zvol/rdsk bzw. /dev/zvol/dsk– Verwendung für iSCSI (FC mit OpenSolaris)– …

• Gleicher Mechanismus wie bei Dateien– insbesondere: kein Überschreiben, immer COW– in der Regel nicht sequentiell auf der Platte!

• Daher:– gut für iSCSI, FC, Device-Emulation (lofi), …– kann thin-provisioning– gleiche Performance wie eine Datei im ZFS

Page 26: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

ZFS und DBMS

• Separaten zpool für Datenbank Log einrichten– COW für Daten und Log sind dann unabhängig– separate Disks (= eigener Plattenkopf!)

• Attribut recordsize Daten einstellen– Für Daten die Blockgröße des DBMS

• Bei vielen Full Table Scans, Direct Path Sorts 128KB (Default)– Für Logs default (128KB)

Page 27: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

Zusammenfassung

• ZFS versucht die Notwendigkeit manuellen Tunings zu vermeiden– Aktuelle Solaris-Version/Patchstand empfohlen:– April 2010: Solaris 10 SPARC: 141444-09; x86: 141445-09– Sun Unified Storage S7000 Systeme für neueste Funktionalitäten

• Anpassungen da, wo – Performance-Modell und -Realität auseinander laufen

• Storage Systeme mit vielen Disks hinter einer LUN, NVRAM etc.– keine klassische Filesystem-Semantik im Vordergrund steht

• synchrone I/Os• DBMS mit “Raw”-Optimierung

Page 28: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

Weitere Informationen

• System and Application Performance, Monitoring, and Tuning– http://wikis.sun.com/display/Performance/Home#Home-ZFS

• Configuring Oracle Solaris ZFS for an Oracle Database– http://developers.sun.com/solaris/howtoguides/wp-

oraclezfsconfig-0510_ds_ac2.pdf

• solarisinternals.com– ZFS Best Practices Guide

• ZFS for Databases– ZFS Configuration Guide– ZFS Evil Tuning Guide

[email protected]– http://www.opensolaris.org/jive/forum.jspa?forumID=80

Page 29: © 2009 Oracle – Proprietary and Confidential 1 · • Für beste Antwortzeiten: mirror – Bei hohen Lese-Anforderungen: mehrfacher Spiegel ... • solarisinternals.com – ZFS

© 2009 Oracle – Proprietary and Confidential 29