SATA-Festplatten, die Schreibcache richtig behandeln?


15

Es wird häufig empfohlen, den Schreibcache für einzelne Datenträger zu deaktivieren, die für Datenbanken verwendet werden, da andere Datenträger Schreibvorgänge bestätigen, die noch nicht auf der Datenträgeroberfläche ausgeführt wurden.

Dies impliziert, dass einige Datenträger Schreibvorgänge erst bestätigen, wenn sie es auf der Datenträgeroberfläche geschafft haben (Update: oder dass sie genau berichten, wenn sie aufgefordert werden, den Cache zu leeren. Wo finde ich solche Datenträger oder wo kann ich nach autorisierenden Informationen suchen? Wo finde ich solche Datenträger?

Ich richte einige DB-Server ein, die von der Verwendung des Schreibcaches wirklich profitieren würden, aber die Anwendung ist preiskritisch, und ich möchte die Kosten meines Festplattensubsystems für einen RAID-Cachecontroller lieber nicht verdoppeln, da ich nicht genügend Informationen dazu habe weiß, ob ich dem Cache in jedem Laufwerk vertrauen kann.


Unter Linux kann der Schreibcache von Laufwerk zu Laufwerk über hdparam deaktiviert werden. Für SATA-Laufwerke muss meines Erachtens ein Skript erstellt werden, damit es bei jedem Neustart erneut angewendet wird. Ich kann diesen Weg gehen, wenn ich immer noch unsere Leistungsanforderungen erfüllen kann, ohne einen batteriegepufferten RAID-Controller zu verwenden. Ich bevorzuge die Verwendung von Software-RAID, wenn dies möglich ist, da dies einfacher und billiger ist. Auf jeden Fall werde ich eine UPS haben.
eas

Antworten:


15

Als direkte Antwort auf Ihre Frage sind mir im Allgemeinen keine großen Marken von SATA-Laufwerken bekannt, bei denen auf dem Laufwerk selbst Fehler im Hinblick auf den ordnungsgemäßen Betrieb mit aktiviertem Schreibcache aufgetreten sind. Dies bedeutet, dass das Laufwerk nur aus Laufwerkssicht das tut, was es aus Caching-Sicht tun soll. Ich würde auch beachten , dass selbst dann , wenn die Schreib - Caching wird aktiviert, dass die Verzögerung von einer Plattenschreib auf den SATA - Kabeln an die rotierenden Medien physisch aktualisierten noch sehr kurz ist (~ 50 bis 100 ms typisch). Es ist nicht so, als ob die schmutzigen Cachedaten nur Sekunden auf einmal dort sitzen würden. Das Laufwerk versucht ständig, schmutzige Daten aus dem Cache zu holenauf das physische Medium, sobald es möglich ist. Dies ist nicht nur eine Frage der Datensicherheit, sondern auch der Bereitschaft, zukünftige Schreibvorgänge ohne Verzögerung zu akzeptieren (z. B. das Schreiben eines Beitrags).

Das Problem, das bei aktiviertem Caching auftritt, ist, dass die Schreibreihenfolge für das Laufwerk über das SATA-Kabel und die Schreibreihenfolge für das rotierende Medium nicht identisch sind. Dies kann niemals zu Problemen führen, es sei denn, Sie haben einen Stromausfall oder einen Systemabsturz, bevor alle Inhalte des Caches auf die Festplatte gelangen. Warum? ->

Das Problem, das hier auftreten kann, bezieht sich auf die Transaktionsstabilität des Dateisystems und / oder des Inhalts der Datenbankdatei in Bezug auf diese in der Reihenfolge verlorenen Schreibvorgänge. Tatsächlich können solche möglicherweise nicht ordnungsgemäßen Schreibvorgänge die Integrität der Transaktionslogik beschädigen, die andernfalls durch die Festplattenschreibvorgänge auf dem Datenträger in einer ganz bestimmten Reihenfolge garantiert worden wäre.

Die Entwickler des Dateisystems, der Datenbanken, RAID-Controller usw. sind sich dieses Phänomens im Zusammenhang mit dem Schreib-Caching bewusst (oder sollten es auf jeden Fall wissen). Das Schreib-Caching ist unter dem Gesichtspunkt der Leistung in den meisten E / A-Szenarien mit wahlfreiem Zugriff äußerst wünschenswert. Tatsächlich ist die Verfügbarkeit des Schreibcaches ein Schlüsselelement, um einen echten Nutzen für das fortschrittlichere Native Command Queuing ( NCQ) zu erzielen), die auf neueren SATA- und PATA-Implementierungen der letzten Generation unterstützt werden. Um zu bestimmten kritischen Zeiten Ordnung auf dem physischen Datenträger zu gewährleisten, kann das Dateisystem und / oder die Anwendung usw. speziell ein Leeren der Schreibcaches auf dem Datenträger anfordern. Nach Abschluss dieser Synchronisierungsanforderung befindet sich alles, was von (potenziellen) Dateipuffern, OS-Platten-Caching, physischem Platten-Caching usw. ansteht, gemäß dem Transaktionssystemdesign bei den richtigen kritischen Vorgängen auf dem Medium. Das heißt, dies geschieht korrekt, wenn die Programmierer die richtigen Aufrufe oben ausführen UND jedes Element dieser Kette von Software- und Hardwareschichten seinen Job korrekt ausgeführt hat. Dh: Es gibt diesbezüglich keine Fehler im Laufwerk, den RAID-Controllern, den Festplattentreibern, den OS-Caches, dem Dateisystem, der Datenbank-Engine usw. Dies ist eine Menge Software, die genau richtig funktionieren muss. Darüber hinaus ist die Überprüfung der Richtigkeit in dieser Hinsicht sehr schwierig, da in fast jeder Situation die Schreibreihenfolge keine Rolle spielt. Stromausfall- und Absturzszenarien sind schwierig zu konstruierende Tests. Am Ende hat "Deaktivieren des Schreib-Cachings" in einer oder mehreren der verschiedenen Ebenen und / oder Bedeutungen dieses Begriffs den Ruf, bestimmte Arten von Problemen zu "beheben". Das Abschalten des Schreib-Caching-Verhaltens des RAID-Controllers oder des Betriebssystem-Disk-Caches oder des Laufwerks usw. vermeidet in der Tat einen oder mehrere Fehler im System ..... und die Quelle solcher Überlieferungen. Stromausfall- und Crash-Szenarien sind schwierig zu konstruierende Tests. Am Ende hat "Deaktivieren des Schreib-Cachings" in einer oder mehreren der verschiedenen Ebenen und / oder Bedeutungen dieses Begriffs den Ruf, bestimmte Arten von Problemen zu "beheben". Das Abschalten des Schreib-Caching-Verhaltens des RAID-Controllers oder des Betriebssystem-Disk-Caches oder des Laufwerks usw. vermeidet in der Tat einen oder mehrere Fehler im System ..... und die Quelle solcher Überlieferungen. Stromausfall- und Crash-Szenarien sind schwierig zu konstruierende Tests. Am Ende hat "Deaktivieren des Schreib-Cachings" in einer oder mehreren der verschiedenen Ebenen und / oder Bedeutungen dieses Begriffs den Ruf, bestimmte Arten von Problemen zu "beheben". Das Abschalten des Schreib-Caching-Verhaltens des RAID-Controllers oder des Betriebssystem-Disk-Caches oder des Laufwerks usw. vermeidet in der Tat einen oder mehrere Fehler im System ..... und die Quelle solcher Überlieferungen.

Wie auch immer, kommen wir zum Kern der Frage zurück: Unter SATA ist die spezifische Behandlung aller Lese- / Schreibbefehle für die Festplatte und der Cache-Leerbefehle in den SATA-Spezifikationen genau definiert . Darüber hinaus sollten die Laufwerkhersteller eine detaillierte Dokumentation für jedes Laufwerksmodell oder jede Laufwerksfamilie haben, in der die Implementierung und Einhaltung dieser Regeln beschrieben wird, wie in diesem Beispiel für Seagate Barracuda- Laufwerke. Siehe insbesondere Einzelheiten zu den SATA- SET-FUNKTIONENDer Befehl zur Steuerung des Betriebsmodus des Laufwerks und insbesondere die Option 82h können verwendet werden, um das Zwischenspeichern von Festplatten auf Laufwerksebene zu deaktivieren, da die Standardeinstellung mit Sicherheit das Aktivieren des Schreibzwischenspeichers auf allen mir bekannten Laufwerken ist. Wenn Sie den Cache wirklich deaktivieren möchten, muss dieser Befehl zu Beginn jedes Zurücksetzens oder Hochfahrens des Laufwerks ausgeführt werden und wird normalerweise von den Festplattentreibern für Ihr Betriebssystem gesteuert. Möglicherweise können Sie Ihren Betriebssystemtreiber dazu ermutigen, diesen Modus über eine IOCTL- und / oder Registrierungseinstellung festzulegen. Dies ist jedoch sehr unterschiedlich.


5
Ein Leitartikel zu meiner Antwort: Hardware-RAID-Controller sind in Bezug auf eine Vielzahl von Problemen, einschließlich der internen Implementierung des Schreib-Caching, bekanntermaßen fehlerhaft. Ich habe keine Ahnung warum, aber anekdotisch gesehen scheint RAID-Controller eine der fehlerhaftesten Software zu sein, die jemals in Bezug auf etwas geschrieben wurde, das eine so weit verbreitete Verwendung hat. Es lohnt sich auf jeden Fall, sehr gängige, gut etablierte und weit verbreitete RAID-Hardware von sehr angesehenen Anbietern zu verwenden ... und selbst dann scheinen Patches für nicht-triviale Probleme allzu häufig zu sein!
Tall Jeff

Vielen Dank, Jeff. Ich habe viel darüber gelesen und bin genauso verwirrt wie je zuvor. Ich denke, das Problem, mit dem ich mich derzeit beschäftige, hat mit "Schreibbarrieren" zu tun, mit denen Anwendungen und Dateisysteme die Blockebene anweisen können, eine ordnungsgemäße Schreibreihenfolge unter Verwendung der verschiedenen verfügbaren Mechanismen zu gewährleisten. Leider gibt es bei der Umsetzung von Barrieren allerlei Probleme. LVM unterstützt sie anscheinend nicht, selbst wenn zugrunde liegende Geräte dies tun. Auch scheint es mir , dass sysadmins die Möglichkeit , mit haben sollte fsync einen Flush des Antriebs Cache zu erzwingen
eas

@eas - Der Begriff "Write Barriers", auf den Sie sich beziehen, ist vermutlich derselbe grundlegende Mechanismus, den ich in meiner obigen Antwort als "Sync" oder "Flush" der Caches bezeichnet habe. Bis zu Ihrem Punkt kann dies auf verschiedenen Ebenen im Dateizugriff "Stapel" ausgelöst werden. Um eine echte Schreibsperre aufzubauen, müssen alle Ebenen mit ausstehenden Schreibdaten (dreckige Caches oder Rückschreibpuffer) auf den physischen Datenträger übertragen werden, damit sie tatsächlich wie beabsichtigt funktionieren. Jedes nicht verbundene Glied in dieser Kette führt zu potenziellen Problemen, wenn Schreibvorgänge neu angeordnet werden.
Tall Jeff

Datenträger können die Schreibvorgänge auf den Datenträger um einige Sekunden verzögern. Wenn jedoch viele weitere Schreibvorgänge den Datenträger-Cache überlaufen, wird ein Schreibvorgang auf den Datenträger erzwungen. NCQ benötigt den Schreibcache nicht unbedingt, es können jedoch viele Schreib- und Lesebefehle anstehen und in der Reihenfolge ausgegeben werden, in der die Festplatte die beste Leistung erwartet. Auch bei NCQ hat die Reihenfolge der Schreibvorgänge keine Bedeutung Dateisysteme und Datenbanken müssen IO-Barrieren verwenden.
Baruch Even

3

Ich habe die Erfahrung gemacht, dass ein batteriegepufferter Caching-Festplattencontroller den Cache auf dem Laufwerk deaktiviert. Mir ist keine Möglichkeit bekannt, den Festplatten-Cache anderweitig zu deaktivieren. Selbst wenn Sie den Festplatten-Cache deaktivieren könnten, würde die Leistung erheblich leiden.

Für eine kostengünstige Option können Sie eine kostengünstige USV verwenden, die Ihrem System ein ordnungsgemäßes Herunterfahren signalisiert.


Mein Kommentar oben hätte hier hinzugefügt werden sollen. Ich lerne immer noch diese Seite.
eas

Einige RAID-Controller deaktivieren den Festplatten-Cache ständig, andere nicht und manche haben eine Einstellung. Dieses Verhalten hängt im Wesentlichen von der Implementierung der Cache-Strategie des RAID-Controllers ab. In einigen Implementierungen möchten sie die Schreibreihenfolge auf die Festplatte wirklich steuern. In anderen ist dies weniger wichtig. In meiner Antwort spiele ich auf einige der hier angesprochenen Fragen an.
Tall Jeff

Bei meinen zugegebenermaßen kleinen Tests (LSI 9261-RAID-Controller, SATA-, NL-SAS- und SAS-Laufwerke) stellte ich fest, dass das Aktivieren des Schreibcaches des Laufwerks, wenn das Laufwerk mit einem RAID-Controller mit batterie- / kapazitätsgesichertem Cache verbunden war, keinen Unterschied zu machte Leistung über den Cache des RAID-Controllers hinaus. Ich würde noch nicht sagen, dass dies eine harte und schnelle Regel ist, aber mir ist definitiv klar, dass der RAID-Controller, der den Laufwerk-Cache deaktiviert, nicht unbedingt ein Problem ist.
Daniel Lawson

2

Ich verwende ein RAID-System mit einem Superkondensator anstelle einer Batterie, um den Cache zu verwalten. Batterien sind verbraucht, müssen überwacht, ausgetauscht werden und stellen in dieser Hinsicht eine potenzielle Fehlerquelle dar. Ein Kondensator wird beim Start aufgeladen, der Cache wird geleert, wenn die Stromversorgung der USV ausfällt, praktisch für immer besteht, keine Überwachung erforderlich ist usw. Sie sollten jedoch eine USV haben, es sei denn, Sie betreiben ein Unternehmen im Armutsbereich (heutzutage keine Seltenheit) und Software, die das System bei einem Ausfall sauber herunterfährt - ich gebe ihr normalerweise 5-15 Minuten Zeit (abhängig von der USV-Last und der verfügbaren Batterie), bevor sie herunterfährt, falls die Stromversorgung wiederhergestellt wird.

Während eines Gewitters können Sie (oder haben Sie vielleicht - Stromversorgungssysteme werden besser) sehen, dass die Lichter flackern, manchmal kurz bevor sie ausgehen. Dies ist ein Gerät, das als Wiedereinschaltgerät bezeichnet wird. Es handelt sich um einen Leistungsschalter, der bei Auslösung versucht, den geöffneten Schalter zu schließen, falls die Überlastung vorübergehend war, was die meisten sind. Wenn es nach etwa drei Versuchen nicht geschlossen bleibt, bleibt es geöffnet. Der eine arme Kerl muss im Regen rausgehen und sich darum kümmern. Tu ihm nicht zu leid, wenn du nur zweimal das machst, was du und ich tun, und zweimal, wenn es Überstunden sind, ist es gefährliche Arbeit.


2

Eines der Missverständnisse beim Zurückschreiben von Caches ist, dass sie nur bei Stromausfall Daten verlieren. Dies ist insbesondere bei sATA-Geräten nicht immer der Fall. Wenn auf einem sATA-Gerät ein Fehler aufgetreten ist (z. B. ein FW-Fehler in einem Eckgehäuse oder ein Controller-Fehler) und es von außen zurückgesetzt oder zurückgesetzt wird, kann nicht garantiert werden, dass die Daten im Write-Back-Cache nach dem Aufhängen noch verfügbar sind.

Dies kann zu Szenarien führen, in denen ein Gerät einen vorübergehenden Fehler aufweist, zurückgesetzt wird, ein Datenverlust beim Verlust eines verschmutzten Caches auftritt und dies über der Blockebene von Treibern stumm bleibt.

Schlimmer noch, das Deaktivieren des Laufwerk-Cache über OS-Tools geht auch beim Zurücksetzen des Geräts verloren. Selbst wenn der Cache eines Geräts zu Beginn des Tages deaktiviert ist, wird beim Zurücksetzen des Geräts das Write-Back-Caching erneut aktiviert. Bei einem erneuten Reset verliert das Gerät dann Daten.

SCSI- / SAS-Laufwerke und einige SATA-Laufwerke können den Status des Rückschreibprofils speichern, um sicherzustellen, dass bei allen Zurücksetzungen die Eigenschaft nicht verloren geht. In der Praxis wird dies jedoch nur selten verwendet.

RAID-Controller, die die Blockschicht in die oberen Schichten integrieren, können ein Zurücksetzen des Laufwerks feststellen und den Write-Back-Cache wieder deaktivieren. Standard-SATA- und SAS-Controller tun dies jedoch nicht.

Diese Einschränkung gilt auch für andere SET FEATURE-Parameter und ähnliche Parameter, die für Leistung und Zuverlässigkeit konfiguriert sind.


1

Wie Sie sagen, ein ordnungsgemäßer batteriegepufferter RAID-Controller ist teuer, aber Sie können Dell Perc5 / i-Controller bei eBay für 100 GBP (150 USD) finden, und besonders bei RAID5 wird Sie die Geschwindigkeit eines Controllers wie des Perc5 / i in Erstaunen versetzen. Ich habe mehrere Server mit Perc5 / is und sechs Festplatten-RAID5-Arrays und sie gehören zu den schnellsten Festplatten, die ich je gesehen habe. Insbesondere für Datenbankanwendungen verbessern schnelle Datenträger die Leistung erheblich.

Ich würde die Kugel beißen und einen RAID-Controller kaufen.

JR


1

Soweit ich weiß, ist fsync () eine Eigenschaft von batteriegepufferten RAID-Controllern, nicht von Laufwerken. Der RAID-Controller enthält eine Batterie, die den Schreibcache mit Strom versorgt, bis das Laufwerk wieder mit Strom versorgt und der Schreibvorgang sicher auf die Festplatte übertragen werden kann. Auf diese Weise kann der Controller sofort zum Betriebssystem zurückkehren, da eine gewisse Garantie dafür besteht, dass der Schreibvorgang auf die Festplatte geschrieben wird.

Wenn der Writeback-Cache des Laufwerks voll ist, werden Schreibvorgänge blockiert, bis der Cache auf das Laufwerk zurückgeschrieben wurde. Dies bedeutet, dass der Cache bei dauerhaften Schreibvorgängen im Allgemeinen nicht so effektiv ist.

Wie viele IOPS benötigt Ihre Anwendung? Sind Sie sicher, dass Sie durch den Schreibcache der Laufwerke eingeschränkt werden, oder dass ein kleiner (im Vergleich zum Arbeitsspeicher Ihres Servers) auf dem Laufwerk von Vorteil ist?


Der Test, den ich jetzt mache, besteht darin, die Leistungshülle unserer Anwendung zu bestimmen, damit wir herausfinden können, wie wir am besten skalieren können. Der Laufwerk-Cache ist möglicherweise relativ klein, aber mit dem Schreib-Caching kann das Laufwerk Schreibvorgänge neu anordnen (falls erforderlich), was den anhaltenden Schreibdurchsatz verdoppeln kann.
Eas
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.