W poszukiwaniu błędu

Pewnego chłodnego jesiennego dnia zdarzyło mi się doświadczyć bardzo niemiłej niespodzianki ze strony nowo zakupionego komputera. Był to świeży, jeszcze ciepły komputer Dell Optiplex 740, wprost z Limerick, na którym zainstalowałem Windows Server 2003 R2 EE z zamiarem wykorzystania pudełka jako hosta do wirtualnych maszyn działających na Virtual Server 2005 R2.

Instalacja systemu, konfiguracja, później instalacja VS przebiegły bez zakłóceń. Dopiero, gdy zacząłem instalować pierwszego gościa na serwerze wirtualnym, mój komputer znieruchomiał. Nie reagował na żadne klawisze, myszka zastygła bez ruchu tam gdzie ją zostawiłem, tzw. stan zamrożenia (freeze).

Powtórzyłem więc operację w celu otrzymania chociaż BSOD (Blue Screen Of Death, czyli po polsku niebieski ekran). Znów ta sama reakcja. Powtórzyłem próbę jeszcze kilka razy wciąż bez spodziewanego niebieskiego ekranu błędu. Zacząłem szukać po Intra- i Internecie materiałów na podstawie których mógłbym zlokalizować błąd. Niestety rozrzut tematyki był na tyle duży, że aż nieprzydatny.

Eliminując z łamigłówki poszczególne klocki układanki postanowiłem zainstalować gościa na Virtual PC 2007. Efekt był dokładnie ten sam - zamrożenie systemu. Wypadło jeszcze kilka innych czynników, łącznie ze sprzętem - klawiatura, myszka, inne urządzenia USB; wyeliminowanie systemu operacyjnego już nie było takie proste.

Zainstalowałem Windows Vista Enterprise i Virtual PC 2007. Za pierwszym razem efekt był podobny do tego otrzymanego na Windows Server 2003, ale już za drugim podejściem dostałem to, czego szukałem - BSOD.

Oto wycinek z windbg:

BugCheck 101, {61, 0, 8a4c7120, 1}
PEB is paged out (Peb.Ldr = 7ffd300c).  Type “.hh dbgerr001″ for details
PEB is paged out (Peb.Ldr = 7ffd300c).  Type “.hh dbgerr001″ for details
Probably caused by : ntkrpamp.exe ( nt!KeFlushProcessWriteBuffers+5f )
Followup: MachineOwner

Dalsza analiza z użyciem !analyze -v pokazała mi już nieco więcej szczegółów:

CLOCK_WATCHDOG_TIMEOUT (101)
An expected clock interrupt was not received on a secondary processor in an
MP system within the allocated interval. This indicates that the specified
processor is hung and not processing interrupts.
Arguments:
Arg1: 00000061, Clock interrupt time out interval in nominal clock ticks.
Arg2: 00000000, 0.
Arg3: 8a4c7120, The PRCB address of the hung processor.
Arg4: 00000001, 0.

I dalej:

PEB is paged out (Peb.Ldr = 7ffd300c).  Type “.hh dbgerr001″ for details
PEB is paged out (Peb.Ldr = 7ffd300c).  Type “.hh dbgerr001″ for details
DEFAULT_BUCKET_ID:  VISTA_DRIVER_FAULT
BUGCHECK_STR:  0×101
PROCESS_NAME:  SearchProtocolH
CURRENT_IRQL:  1c
LAST_CONTROL_TRANSFER:  from 81828448 to 818d85c9

STACK_TEXT:  
[cut] nt!KeBugCheckEx+0×1e
[cut] nt!KeUpdateRunTime+0xd4
[cut] nt!KeUpdateSystemTime+0xed
[cut] nt!KeFlushProcessWriteBuffers+0×5f
[cut] nt!KeSetPriorityAndQuantumProcess+0×6a
[cut] nt!PsSetProcessPriorityByClass+0×20
[cut] nt!NtSetInformationProcess+0×219
[cut] nt!KiFastCallEntry+0×12a
WARNING: Frame IP not in any known module. Following frames may be wrong. 
[cut]

STACK_COMMAND:  kb
FOLLOWUP_IP:
nt!KeFlushProcessWriteBuffers+5f
81811c63 8b08            mov     ecx,dword ptr [eax]
SYMBOL_STACK_INDEX:  3
SYMBOL_NAME:  nt!KeFlushProcessWriteBuffers+5f
FOLLOWUP_NAME:  MachineOwner
MODULE_NAME: nt
IMAGE_NAME:  ntkrpamp.exe
DEBUG_FLR_IMAGE_TIMESTAMP:  4549ae00
FAILURE_BUCKET_ID:  0×101_nt!KeFlushProcessWriteBuffers+5f

Pozwoliłem sobie powycinać co dłuższe kawałki z powyższego tesktu z windbg dla jasności obrazu.

PoszukaÅ‚em co to takiego jest ten bugcheck 0×101: The specified processor is not processing interrupts. Typically, this occurs when the processor is nonresponsive or is deadlocked.

Procesor nie odpowiadał? Z uwagi na już drugi sprawdzany system operacyjny, wyglądało to dla mnie całkiem sprzętowo. Nie pierwszy i zapewne nie ostatni raz widziałem nowe komputery (serwery) z błędami sprzętowymi. Niestety nie miałem okazji sprawdzić tego zachownia na innych Optiplexach 740 z identyczną konfiguracją, ale postanowiłem szukać szczęścia na stronach pomocy technicznej Della, mojego poprzedniego pracodawcy.

Niespodziewanie okazało się, że istniała nowa wersja BIOSu, która uaktualniła wersję 1.1.8 do 1.2.2. Z samych cyferek widać, że to dość duży skok.

ZainstalowaÅ‚em nowÄ… wersjÄ™ BIOS’u i … jak rÄ™kÄ… odjÄ…Å‚. Na nowym komputerku już dziaÅ‚ajÄ… sobie dwie maszyny wirtualne radoÅ›nie komunikujÄ…c siÄ™ miÄ™dzy sobÄ….

Nie po raz pierwszy byÅ‚em cierpliwy w poszukiwaniu błędu, choć tym razem moja cierpliwość byÅ‚a posuniÄ™ta do granic. Niestety Dell nie precyzuje dokÅ‚adnie w czym różniÅ‚a siÄ™ nowa wersja BIOS’u od pozostaÅ‚ych poza ulepszeniem kompatybilnoÅ›ci z niektórymi urzÄ…dzeniami USB i poprawnieniem zarzÄ…dzania energiÄ…. JeÅ›li jednak to byÅ‚ problem z USB, to zastanawiajÄ…ce czemu błąd rodziÅ‚ siÄ™ tylko podczas instalacji maszyn wirtualnych? JeÅ›li ktoÅ› drążyÅ‚ ten temat głębiej, chÄ™tnie postiudujÄ™ materiaÅ‚.

1 Response to “W poszukiwaniu błędu”


  1. Gravatar Icon 1 Rafał

    Z tego co wiem ani MS Virtual PC 2007, ani Virtual Server 2005 R2 nie wspierają USB (poza myszą i klawiaturą), więc to chyba niekoniecznie był problem z USB.

    Pozdrawiam,
    Rafał

Leave a Reply




Disclaimer

All postings are provided "AS IS" with no warranties, and confer no rights. This weblog does not represent the thoughts, intentions, plans or strategies of Microsoft or any other company or organization. Because a weblog is intended to provide a semi-permanent point-in-time snapshot, you should not consider out of date posts to reflect current thoughts and opinions.
All rights reserved. Quotations from this blog require author's written approval.
PL: Wszelkie prawa zastrzeżone. Cytaty z tego bloga wymagają pisemnego zezwolenia autora.

Add to Technorati Favorites