Co oznacza „Operacja we / wy pod logicznym adresem bloku nr dla dysku nr” została ponowiona. ”, Gdy jest widoczna w dzienniku zdarzeń systemu Windows Server?

22

Mam wielościeżkowy serwer skonfigurowany we / wy na serwerze 2012, który wyświetla następujące ostrzeżenia podczas awarii ścieżki MPIO:

Operacja We / Wy pod logicznym adresem bloku 0 dla dysku 7 została ponowiona.

Wiem, co powoduje ostrzeżenie, więc nie szukam przyczyny, ale co tak naprawdę oznacza ta wiadomość?

Czy to oznacza, że ​​jeśli to IO było operacją zapisu, to serwer faktycznie stracił dane, które próbował zapisać?

Dziękujemy za każde światło, które możesz rzucić na sens tego komunikatu ostrzegawczego.

Chris Magnuson
źródło

Odpowiedzi:

28

Nie, nie oznacza to, że dane zostały utracone. Oznacza to po prostu, że upłynął limit czasu dla pakietu IRP (IO Request Packet), podczas gdy system IO czekał na jego zakończenie, więc próbowano go ponownie. Gdy wątek rozpoczyna dowolną operację we / wy, menedżer we / wy tworzy IRP, który reprezentuje operację przechodzącą przez system.

IRP zostaje zapisany w stanie początkowym na liście buforów / listy przeglądowej, dzięki czemu można go ponowić, jeśli zawiedzie po raz pierwszy. Zapewnia to atomiczność, jakiej można się spodziewać po każdym systemie transakcyjnym, dzięki czemu możemy być bardziej pewni, że nie dostaniesz wielu uszkodzonych lub niekompletnych danych zapisanych na dysku.

To zdarzenie ma idealny sens w przypadku awarii MPIO. Powiedzmy, że Windows idzie czytać lub pisać coś z pamięci SAN. Żądanie zostało wysłane, a jednocześnie przeciąłem jeden z kabli do sieci SAN. Żądanie nigdy się nie zakończy, więc system Windows spróbuje je ponownie, tylko tym razem wniosek podąży inną ścieżką.

Te zdarzenia występują również, gdy dyski są przeciążone lub po prostu bardzo wolne. Możesz zauważyć, że te wiadomości pokrywają się z zaplanowanymi kopiami zapasowymi itp. Dysk może być po prostu wolny i zajęty, a niektóre losowe IRP przekroczyły limit czasu i musiały spróbować ponownie. IRP może utknąć w procedurze obsługi przerwań, odroczonym wywołaniu procedury lub cokolwiek innego.

Widziałem, że na twoim stosie jest wiele sterowników filtrów we / wy, co dodatkowo pogarsza ten problem.

Nie chodzi o to, że takie zachowanie nie występowało tak jak we wcześniejszych wersjach systemu Windows, po prostu Microsoft najwyraźniej postanowił ujawnić te zdarzenia w Win8 / Server 2012.

Edycja: Możesz znaleźć zaległe IRP wątku z debuggerem jądra:, kd> !irp 1a2b3c4dgdzie wcześniej znalazłeś ten adres, wydając polecenie, kd> !process 8f7d6c4aktóre wyświetli wszystkie IRP powiązane z wątkami powiązanymi z tym procesem. kd> !process 0 0aby wyświetlić listę wszystkich uruchomionych procesów.

Po wyświetleniu informacji o IRP za pomocą polecenia! Irp można łatwo zauważyć, który sterownik ostatnio obsługiwał IRP, ponieważ będzie on >wskazywał na niego na liście. Następnie, aby uzyskać więcej informacji o tym, co ten sterownik robił z tym IRP, zrób to, kd> !devobj 1a2b3c4d5e6fgdzie jest rzeczywisty adres obiektu urządzenia.

Następnie kd> dt 0x1a2b3c3c2b1a _CLASS_PRIVATE_FDO_DATAużyj adresu otrzymanej struktury PrivateFdoData.

Teraz możesz zrzucić strukturę danych AllTransferPacketsList, którą otrzymałeś od PrivateFdoData.

Chodzi o to, że śledzisz, co kierowca robił, co zrobił z IRP podczas ostatniej wizyty. Jeśli IRP zbyt długo AWOL, jest przekroczony limit czasu i ponawiane od początku. Przyczyną może być tak wiele rzeczy ... nawet zbłąkany promień kosmiczny. Ale ważne jest to, że transakcja zostanie ponowiona od początku i nie zostanie uznana za zakończoną, dopóki menedżer IO nie powie, że jest.

Aha, jest też niezależne od wątku IO, które jest zupełnie inną puszką robaków. :)

Do dalszej lektury na ten temat bardzo polecam rozdział 8, System I / O, Windows Wewnętrzne wydanie 6, Mark Russinovich, Margosis i in.

** Edycja: ** W końcu znalazłem oficjalną KB dla tego błędu: http://support.microsoft.com/kb/2819485/PL

Operację We / Wy należy ponowić 8 razy, raz na minutę, aż system Windows się podda.

Edycja: zgodnie z obietnicą: http://blogs.msdn.com/b/ntdebugging/archive/2013/04/30/interpreting-event-153-errors.aspx

Ryan Ries
źródło
1
Dziękuję Ryan, miałem nadzieję, że oznaczałoby to wycofanie żądania, ale dane nie zostały utracone i utworzono kolejne żądanie ponownego zapisania danych. Czy możesz podać jedno ze źródeł swojej odpowiedzi (książki, artykuły, notatkę wskazującą, że masz dostęp do kodu źródłowego systemu Windows, ponieważ jesteś ogromnym klientem EA i czy debugowanie umożliwiło znalezienie tych informacji itp.)? Bardzo chciałbym to zrozumieć.
Chris Magnuson
2
Zredagowałem mój post, aby odpowiedzieć na twoje dalsze pytania. Są szanse, że będę miał więcej informacji do dodania później.
Ryan Ries
2
Każdy, kto może wpaść do debugera systemu Windows, aby wesprzeć swój punkt, zarabia w mojej książce poważne uznanie. Nie można ponownie zagłosować na odpowiedź, więc głosowanie na komentarz będzie musiało wystarczyć. Mam wersję wewnętrzną systemu Windows 6 część 1 i mam zamiar kupić teraz część 2 z rozdziałem 8. Dzięki
Chris Magnuson
Zgodnie z obietnicą: blogs.msdn.com/b/ntdebugging/archive/2013/04/30/…
Ryan Ries
6

Nie, pojawi się inny komunikat i (miejmy nadzieję) jedna z warstw aplikacji zgłosi wyjątek, jeśli nie uda się zapisać danych.

Przed Windows Server 2012 (lub poprawką 2819485 w Windows Server 2008 R2) system po cichu ponawiałby próbę wystąpienia tych przekroczeń czasu. Celem komunikatu jest zwiększenie widoczności tych zdarzeń. Mogą wskazywać na problem z pojemnością lub wadą sterownika, aw przypadku iSCSI inne wady systemu operacyjnego mogą przypisywać opóźnienie.

W przypadku pamięci zewnętrznej (niepołączonej bezpośrednio) niektórzy dostawcy w przeszłości zwiększali wartość limitu czasu, na przykład do 60 sekund. Jednak biorąc pod uwagę domyślną liczbę ponownych prób przez składniki wyższej warstwy, takie jak inicjator iSCSI, może to oznaczać, że może upłynąć kilka minut, zanim system zainicjuje przełączenie awaryjne. To byłoby oczywiście zachowanie nieoptymalne.

Więcej informacji:

Wpisy rejestru dotyczące sterowników SCSI Miniport
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- wartość.aspx


Firma Microsoft wydała aktualizację, która umożliwia określenie progu dla operacji storport.sys.

Po zainstalowaniu tej aktualizacji można zarejestrować zdarzenie, gdy czas oczekiwania dla pamięci I / O do przechowywania jest równy lub większy niż próg. Wartość progową może ustawić użytkownik. Ta operacja jest wykonywana na poziomie sterownika karty, dzięki czemu można sprawdzić, czy występuje problem z wydajnością w sieci SAN. Następnie możesz skontaktować się z dostawcą magazynu, aby rozwiązać problem.

Uwaga: Ta aktualizacja przywraca funkcjonalność systemu Windows 7 i Windows Server 2008 R2. Gdy funkcja jest włączona, wartość progowa jest mierzona w 100 nanosekundach (0,0001 milisekund). Ponadto w zdarzeniu rejestrowane są następujące wartości:

BuildIoDuration : Długość czasu, jaki MINIPORT spędził w funkcji kompilacji I / O dla tego żądania StartIoDuration : Długość czasu, który MINIPORT spędził w funkcji początkowej I / O dla tego żądania DataTransferLength : Rozmiar transferu w bajtach

Aktualizacja, która poprawia możliwości rejestrowania sterownika Storport.sys w systemie Windows Server 2012
http://support.microsoft.com/kb/2819476

Aktualizacja zbiorcza systemów Windows 8 i Windows Server 2012: kwiecień 2013
http://support.microsoft.com/kb/2822241

Greg Askew
źródło
4

Może to być spóźniony post, ale odkryłem, że może to być spowodowane przez VSS. Mieliśmy klienta, który działał na veeam, ale zapomniał wyłączyć kopię zapasową serwera Windows (dysk został usunięty). Spowodowało to zmniejszenie ilości problemów i ten błąd był główny.

Zatrzymałem tworzenie kopii zapasowych i nie ma błędów.

Dale Wright
źródło