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 818d85c9STACK_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Å‚.

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ł