Was bedeutet "Die E / A-Operation an der logischen Blockadresse # für Datenträger # wurde wiederholt", wenn sie im Windows Server-Systemereignisprotokoll angezeigt wird?

22

Ich habe einen mit Multipath-E / A konfigurierten Server 2012-Blade, der während eines MPIO-Pfadfehlers Warnungen wie die folgenden anzeigt:

Die E / A-Operation an der logischen Blockadresse 0 für Datenträger 7 wurde wiederholt.

Ich weiß, was die Warnung verursacht, daher suche ich nicht nach der Ursache, aber was bedeutet diese Meldung tatsächlich?

Bedeutet dies, dass der Server tatsächlich Daten verloren hat, die er zu schreiben versuchte, wenn es sich bei dieser E / A um eine Schreiboperation handelte?

Vielen Dank für jedes Licht, das Sie auf die Bedeutung dieser Warnmeldung werfen können.

Chris Magnuson
quelle

Antworten:

28

Nein, das bedeutet nicht, dass die Daten verloren gegangen sind. Es bedeutet einfach, dass das Zeitlimit für das IRP (IO Request Packet) abgelaufen ist, während das IO-System auf den Abschluss gewartet hat, und dass es erneut versucht wurde. Wenn ein Thread eine E / A-Operation startet, erstellt der E / A-Manager einen IRP, der die Operation darstellt, die das System durchläuft.

Das IRP wird im Ausgangszustand in einer Puffer- / Look-Aside-Liste gespeichert, sodass es erneut versucht werden kann, wenn es das erste Mal fehlschlägt. Dies bietet die Atomizität, die man von jedem Transaktionssystem erwarten würde, sodass wir sicherer sein können, dass Sie nicht eine Reihe von beschädigten oder unvollständigen Daten auf Ihre Festplatte schreiben.

Dieses Ereignis ist im Falle eines MPIO-Ausfalls absolut sinnvoll. Angenommen, Windows liest oder schreibt etwas aus dem SAN-Speicher. Die Anfrage wird versandt, und im selben Moment schneide ich eines der Kabel zum SAN. Diese Anforderung wird niemals abgeschlossen, und Windows versucht die Anforderung erneut. Diesmal folgt die Anforderung jedoch dem anderen Pfad.

Diese Ereignisse treten auch auf, wenn die Festplatten überlastet oder nur sehr langsam sind. Möglicherweise stellen Sie fest, dass diese Meldungen mit geplanten Sicherungen usw. übereinstimmen. Die Festplatte ist möglicherweise nur langsam und ausgelastet, und bei einigen zufälligen IRP-Ereignissen ist eine Zeitüberschreitung aufgetreten. Sie mussten es erneut versuchen. Das IRP könnte in einer Interrupt-Serviceroutine oder einem verzögerten Prozeduraufruf oder was auch immer hängen bleiben.

Ich konnte feststellen, dass viele IO-Filtertreiber in Ihrem Stack dieses Problem ebenfalls verschlimmern.

Es ist nicht so, dass dieses Verhalten in früheren Versionen von Windows nicht so aufgetreten ist, es ist nur so, dass Microsoft anscheinend beschlossen hat, diese Ereignisse in Win8 / Server 2012 zu melden.

Bearbeiten: Sie können die ausstehenden IRPs eines Threads mit einem Kernel-Debugger suchen: kd> !irp 1a2b3c4dWo Sie zuvor diese Adresse gefunden haben, indem Sie den Befehl ausgeben, der kd> !process 8f7d6c4aalle IRPs auflistet, die den diesem Prozess zugeordneten Threads zugeordnet sind. kd> !process 0 0um alle laufenden Prozesse aufzulisten.

Sobald Sie die Informationen zu einem IRP mit dem Befehl! Irp aufgelistet haben, können Sie leicht erkennen, welcher Treiber das IRP zuletzt verarbeitet hat, da >in der Liste ein Verweis darauf angezeigt wird . Um weitere Informationen darüber zu erhalten, was dieser Treiber mit diesem IRP getan hat, führen Sie einen Befehl aus, kd> !devobj 1a2b3c4d5e6fbei dem es sich um die tatsächliche Adresse des Geräteobjekts handelt.

Dann hat eine kd> dt 0x1a2b3c3c2b1a _CLASS_PRIVATE_FDO_DATAStruktur mit der Adresse der PrivateFdoData Sie.

Jetzt können Sie die von PrivateFdoData gelieferte Datenstruktur von "Vollständiger TransferPacketsList" sichern.

Die Idee ist, dass Sie aufspüren, welcher Treiber was mit dem IRP getan hat, als es das letzte Mal gesehen wurde. Wenn das IRP zu lange AWOL ist, tritt eine Zeitüberschreitung auf und es wird von Anfang an ein neuer Versuch unternommen. Dies kann durch so viele Dinge verursacht werden ... sogar durch einen kosmischen Streustrahl. Wichtig ist jedoch, dass die Transaktion von Anfang an wiederholt wird und erst dann als abgeschlossen betrachtet wird, wenn der E / A-Manager dies bestätigt.

Oh, und es gibt auch thread-agnostische E / A, bei denen es sich um eine völlig andere Dose von Würmern handelt. :)

Für weitere Informationen zu diesem Thema empfehle ich dringend Kapitel 8, I / O-System, der 6. Ausgabe von Windows Internals von Mark Russinovich, Margosis, et al.

** Edit: ** Ich habe endlich die offizielle KB für diesen Fehler gefunden: http://support.microsoft.com/kb/2819485/EN-US

Der E / A-Vorgang sollte achtmal pro Minute wiederholt werden, bis Windows aufgibt.

Bearbeiten: Wie versprochen: http://blogs.msdn.com/b/ntdebugging/archive/2013/04/30/interpreting-event-153-errors.aspx

Ryan Ries
quelle
1
Vielen Dank, Ryan. Ich hatte gehofft, dass die Anforderung zurückgezogen wurde, die Daten jedoch nicht verloren gingen und eine weitere Anforderung erstellt wurde, um erneut zu versuchen, die Daten zu schreiben. Können Sie auf eine der Quellen für Ihre Antwort verweisen (Bücher, Artikel, eine Notiz, die angibt, dass Sie Zugriff auf den Windows-Quellcode haben, weil Sie ein großer EA-Kunde sind und einen Debug-Trace durchgeführt haben, um diese Informationen zu finden usw.)? Ich würde das gerne weiter verstehen.
Chris Magnuson
2
Mein Beitrag wurde bearbeitet, um Ihre Anschlussfragen zu beantworten. Es besteht die Möglichkeit, dass ich später weitere Informationen hinzufügen kann.
Ryan Ries
2
Jeder, der sich zum Windows-Debugger begeben kann, um seinen Standpunkt zu untermauern, verdient in meinem Buch ein großes Lob. Konnte die Antwort nicht noch einmal abstimmen, so dass das Hochstimmen des Kommentars genügen muss. Ich habe die Windows Internals 6. Edition Teil 1 und möchte jetzt Teil 2 mit Kapitel 8 kaufen. Vielen Dank
Chris Magnuson
6

Nein, es würde eine andere Meldung geben, und (hoffentlich) eine der Anwendungsebenen würde eine Ausnahme auslösen, wenn die Daten nicht erfolgreich gespeichert werden konnten.

Vor Windows Server 2012 (oder vor Hotfix 2819485 unter Windows Server 2008 R2) versuchte das System im Hintergrund erneut, wenn diese Zeitüberschreitungen auftraten. Der Zweck der Nachricht besteht darin, die Sichtbarkeit dieser Vorkommnisse zu erhöhen. Sie können auf ein Kapazitätsproblem oder einen Treiberfehler hinweisen, und im Fall von iSCSI können andere Betriebssystemfehler auf die Verzögerung zurückzuführen sein.

Bei externem (nicht direkt angeschlossenem) Speicher haben einige Anbieter in der Vergangenheit das Zeitlimit auf beispielsweise 60 Sekunden erhöht. Angesichts der Standardanzahl von Wiederholungsversuchen durch Komponenten höherer Ebenen, wie z. B. den iSCSI-Initiator, kann dies jedoch dazu führen, dass einige Minuten vergehen, bevor das System ein Failover initiiert. Das wäre natürlich ein suboptimales Verhalten.

Mehr Informationen:

Registrierungseinträge für SCSI-Miniport-Treiber
http://msdn.microsoft.com/en-us/library/windows/hardware/ff563970%28v=vs.85%29.aspx

https://blogs.msdn.com/b/san/archive/2011/09/01/the-windows-disk-timeout-value-understanding-why-this-should-be-set-to-a-small- value.aspx


Microsoft hat ein Update veröffentlicht, mit dem der Schwellenwert für storport.sys-Vorgänge angegeben werden kann.

Nach der Installation dieses Updates können Sie ein Ereignis protokollieren, wenn die Wartezeit für die E / A-Speicherung mindestens einem Schwellenwert entspricht. Der Schwellenwert kann vom Benutzer eingestellt werden. Dieser Vorgang wird auf Adaptertreiberebene ausgeführt, damit Sie feststellen können, ob im SAN ein Leistungsproblem vorliegt. Anschließend können Sie sich an einen Speicheranbieter wenden, um das Problem zu beheben.

Hinweis: Dieses Update stellt die in Windows 7 und Windows Server 2008 R2 bereitgestellten Funktionen wieder her. Wenn die Funktionalität aktiviert ist, wird der Schwellenwert in 100 Nanosekunden (0,0001 Millisekunden) gemessen. Darüber hinaus werden die folgenden Werte in dem Ereignis protokolliert:

BuildIoDuration : Länge der Zeit , dass der Miniport in der Build - I / O - Funktion für diese Anforderung ausgegeben hat StartIoDuration : Länge der Zeit , dass der Miniport verbracht hat , in der Start - I / O - Funktion für diese Anforderung DataTransferLength : Größe der Übertragung in Bytes

Update zur Verbesserung der Protokollierungsfunktionen des Storport.sys-Treibers in Windows Server 2012
http://support.microsoft.com/kb/2819476

Kumulatives Update für Windows 8 und Windows Server 2012: April 2013
http://support.microsoft.com/kb/2822241

Greg Askew
quelle
4

Könnte ein später Beitrag sein, aber ich habe festgestellt, dass es mit VSS verursacht werden kann. Wir hatten einen Client, der veeam ausführte, aber vergessen hatte, den Windows-Server wieder auszuschalten (die Festplatte wurde entfernt). Dies verursachte eine Menge Probleme und dieser Fehler war der Hauptfehler.

Hielt das Back-up und wham keine Fehler.

Dale Wright
quelle