Dela via


Simulering av låga resurser

När alternativet Simulering av begränsade resurser (kallas Simulering av slumpmässiga lågresurser i Windows 8.1) är aktivt, orsakar drivrutinsverifieraren slumpmässiga fel i drivrutinens minnesallokeringar, vilket kan inträffa om drivrutinen körs på en dator med otillräckligt minne. Detta testar drivrutinens förmåga att svara korrekt på låg minnesanvändning och andra lågresursförhållanden.

Simuleringstestet för låga resurser misslyckas med allokeringar som begärs av anrop till flera olika funktioner, inklusive ExAllocatePoolWithXXX, MmGetSystemAddressForMdlSafe, MmProbeAndLockPages, MmMapLockedPagesSpecifyCacheoch MmMapIoSpace.

Från och med Windows Vista genomför lågresurssimuleringstestet också felinsprutning i IoAllocateIrp, IoAllocateMdl, IoAllocateWorkItem, IoAllocateErrorLogEntry, MmAllocateContiguousMemory, MmAllocateContiguousMemorySpecifyCache, MmAllocatePagesForMdloch MmAllocatePagesForMdlEx. Dessutom, när simulering med låga resurser är aktiverad, kan anrop till KeWaitForMultipleObjects eller KeWaitForSingleObject med parametern Alertable inställd på TRUE returnera STATUS_ALERTED när de körs i kontexten av icke-privilegierade processer. Detta simulerar en möjlig trådavisering som kommer från en annan tråd i samma icke-privilegierade program.

Testet för simulering av låga resurser injicerar också fel i följande GDI-funktioner: EngAllocMem, EngAllocUserMem, EngCreateBitmap, EngCreateDeviceSurface, EngCreateDeviceBitmap, EngCreatePalette, EngCreateClip, EngCreatePath, EngCreateWnd, EngCreateDriverObj, BRUSHOBJ_pvAllocRbrushoch CLIPOBJ_ppoGetPath.

I Windows 7 och senare versioner av Windows-operativsystemet stöder alternativet Simulering av låga resurser minne som allokerats med hjälp av följande kernel-API:er:

Från och med Windows 8.1 misslyckas allokeringar även när de begärs av anrop till MmAllocateNodePagesForMdlEx. För vissa funktioner fyller drivrutinsverifieraren nu det allokerade minnet med ett slumpmässigt mönster. Men bara i situationer där funktionen returnerar oinitierat minne. Dessa funktioner omfattar:

anpassade inställningar för simulering med låga resurser

I Windows Vista och senare versioner av Windows kan du ange följande anpassade inställningar.

  • Sannolikhet att en viss allokering misslyckas. Standardvärdet är 6%.

  • Applikationer påverkas. Den här inställningen begränsar de inmatade misslyckade allokeringarna till de angivna programmen. Som standard påverkas alla allokeringar.

  • Pooltaggar påverkas. Den här inställningen begränsar de inmatade felen till allokeringar med de angivna pooltaggar. Som standard påverkas alla allokeringar.

  • Fördröj (i minuter) innan allokeringen misslyckas. Den här fördröjningen gör att systemet kan startas och stabiliseras innan fel matas in. Standardvärdet är åtta minuter.

På operativsystem före Windows Vista kan du inte anpassa de här inställningarna. Operativsystemet använder standardvärdena.

simulering av låga resurser utan omstart

Du kan aktivera simulering med låga resurser i Windows 2000 och senare versioner av Windows utan att starta om datorn med hjälp av parametern /volatile. Inställningarna gäller omedelbart, men går förlorade om du stänger av eller startar om datorn.

Du kan också lagra inställningarna för simulering av låga resurser i registret genom att utelämna parametern /volatile. De här inställningarna gäller endast när du startar om datorn, men de gäller tills du ändrar dem.

aktivera det här alternativet

Du kan aktivera alternativet Simulering av låga resurser för en eller flera drivrutiner med hjälp av Driver Verifier Manager eller kommandoraden Verifier.exe. Mer information finns i Välja alternativ för drivrutinsverifierare.

  • På kommandoraden

    På kommandoraden representeras alternativet Simulering av låga resurser av Bit 2 (0x4). Om du vill aktivera simulering med låga resurser använder du ett flaggvärde på 0x4 eller lägger till 0x4 till flaggornas värde. Till exempel:

    verifier /flags 0x4 /driver MyDriver.sys
    

    Alternativet är aktivt efter nästa start.

    I Windows Vista och senare versioner av Windows kan du använda parametern /faults eller ett flaggvärde på 0x4 för att aktivera simulering med låga resurser. Om du vill ändra inställningarna för simulering med låga resurser måste du använda /fel. Till exempel:

    verifier /faults /driver MyDriver.sys
    

    I Windows 2000 och senare versioner av Windows kan du också aktivera och inaktivera simulering av låga resurser utan att starta om datorn genom att lägga till parametern /volatile i kommandot. Till exempel:

    verifier /volatile /flags 0x4 /adddriver MyDriver.sys
    

    Den här inställningen gäller omedelbart, men går förlorad när du stänger av eller startar om datorn. Mer information finns i Använda flyktiga inställningar.

    I Windows Vista kan du använda parametern /faults för att representera simulering med låg resurs med parametern /volatile för att representera en inställning som är effektiv utan omstart. Inställningsändringen visas. Till exempel:

    0>  verifier /volatile /faults /adddriver MyDriver.sys
    New Low Resources Simulation options:
    
    - Use default fault injection probability.
    - Allocations using any pool tag can be failed.
    - Simulate low resources conditions in any application.
    
    The new settings are in effect until you restart this computer
    or change them again.
    
  • Använda Drivrutinsverifieringshanteraren

    1. Starta hanteraren för drivrutinsverifierare. Skriv Verifier i ett kommandotolkfönster.
    2. Välj Skapa anpassade inställningar (för kodutvecklare)och klicka sedan på Nästa.
    3. Välj Välj enskilda inställningar i en fullständig lista.
    4. Välj Simulering med låga resurser.

Anpassa inställningarna (Windows Vista och senare)

Från och med Windows Vista kan du ändra standardinställningarna för egenskaperna fördröjning, sannolikhet, program och pooltaggar för alternativet Simulering med låga resurser. Du kan ändra de här inställningarna med hjälp av Drivrutinsverifierarhanteraren eller kommandoraden Verifier.exe. Mer information finns i Välja alternativ för drivrutinsverifierare.

På kommandoraden är syntaxen för de här inställningarna följande:

verifier [/volatile] /faults[Probability|PoolTags|Applikationer|DelayMins][/driver|DriverList]

Obs Parametrarna för anpassade inställningar måste visas i den ordning som visas. Om du utelämnar ett värde skriver du citattecken för att behålla dess plats.

underparametrar

  • /fel

    Aktiverar alternativet Simulering av låga resurser i drivrutinsverifieraren. (Du kan inte använda /flags 0x4 med de anpassade inställningsunderparametrarna.)

  • sannolikhet

    Anger sannolikheten för att drivrutinsverifieraren misslyckas med en viss allokering. Skriv ett tal (i decimal- eller hexadecimalt format) för att representera antalet chanser på 10 000 som drivrutinsverifieraren kommer att misslyckas med allokeringen. Standardvärdet 600 betyder 600/10000 eller 6%.

  • PoolTags

    Begränsar de allokeringar som drivrutinsverifieraren kan misslyckas med till allokeringar med de angivna pooltaggarna. Du kan använda jokertecken (*) för att representera flera pooltaggar. För att lista flera pooltaggar separerar du taggarna med blanksteg. Som standard kan alla allokeringar misslyckas.

  • Applikationer

    Begränsar de allokeringar som drivrutinsverifieraren kan misslyckas med för det angivna programmet. Ange namnet på en körbar fil. Om du vill visa en lista över program separerar du programnamnen med blanksteg. Som standard kan alla allokeringar misslyckas.

  • FördröjningsMinuter

    Anger antalet minuter efter start då drivrutinsverifieraren inte avsiktligt misslyckas med några allokeringar. Den här fördröjningen gör att drivrutinerna kan läsas in och systemet stabiliseras innan testet börjar. Skriv ett tal (i decimal- eller hexadecimalt format). Standardvärdet är 8 (minuter).

Följande kommando aktiverar till exempel lågresurssimulering med 10 %% (1000/10000) sannolikhet och en fördröjning på fem minuter för pooltaggarna Tag1 och Fred samt programmet Notepad.exe.

verifier /faults 1000 "Tag1 Fred" Notepad.exe 5

Följande kommando aktiverar simulering med låga resurser med standardvärdena, förutom att fördröjningen utökas till 10 minuter.

verifier /faults "" "" "" 0xa

Att använda drivrutinsverifierarhanteraren

  1. Starta hanteraren för drivrutinsverifierare. Skriv Verifier i ett kommandotolkfönster.

  2. Välj Skapa anpassade inställningar (för kodutvecklare)och klicka sedan på Nästa.

  3. Välj Välj enskilda inställningar i en fullständig lista.

  4. Välj Simulering av låg resursoch klicka sedan på Nästa.

  5. Ändra inställningarna för egenskaperna för fördröjning, sannolikhet, applikationer och pooltaggar efter behov.

Visa resultatet

Du kan övervaka antalet gånger drivrutinsverifieraren med avsikt försöker misslyckas med resursallokeringar genom att visa drivrutinsverifieraren Fel som matats in i den globala räknaren. Den här räknaren visar det totala antalet resursallokeringar som drivrutinsverifieraren misslyckades avsiktligt sedan den senaste starten.

Du kan visa den här räknaren i en loggfil för drivrutinsverifierare (/log), på kommandoraden (/query) eller i Driver Verifier Manager. Om du vill visa globala räknare i Windows 2000 väljer du fliken Globala räknare. I senare versioner av Windows väljer du Visa information om de för närvarande verifierade drivrutinerna uppgiften och trycker sedan på Nästa två gånger. Mer information finns i Övervakning av globala räknare.

Du kan också visa antalet avsiktligt misslyckade allokeringar och antalet totala allokeringar (för att beräkna sannolikheten) med hjälp av tillägget !verifier felsökningsprogram. I följande exempel visas ett exempel på !-verifieraren utdata.

I det här exemplet anger Inför slumpmässiga API-fel vid resursbrist att simulering av resursbrist är aktiverad. resursallokeringar misslyckades avsiktligt representerar antalet avsiktligt misslyckade allokeringar och poolallokeringar representerar totala antalet allokeringar.

!verifier

Verify Level 5 ... enabled options are:
        Special pool
        Inject random low-resource API failures

Summary of All Verifier Statistics

RaiseIrqls                             0x2c671f
AcquireSpinLocks                       0xca1a02
Synch Executions                       0x10a623
Trims                                  0x0

Pool Allocations Attempted             0x862e0e
Pool Allocations Succeeded             0x8626e3
Pool Allocations Succeeded SpecialPool 0x768060
Pool Allocations With NO TAG           0x0
Pool Allocations Failed                0x34f
Resource Allocations Failed Deliberately   0x3f5

Om du vill visa stackspårningarna för de allokeringar som senast misslyckades av drivrutinsverifieraren använder du !verifier 4 i kernelfelsökaren.

I följande exempel visas ett exempel på utdata från !verifier 4. Som standard visar !verifier 4 stackspårningar från de fyra senast misslyckade allokeringarna, men du kan använda parametern Quantity för att öka antalet stackspårningar som visas. Till exempel visar !verifier 0x80 de 128 senast misslyckade allokeringarna.

Observera i det här exemplet att Verifier har avlyssnat och ersatt drivrutinsanropet till ExAllocatePoolWithTag. En av de vanligaste orsakerna till drivrutinskrascher inträffar när en drivrutin försöker allokera minne och sedan använder pekaren som allokeringsfunktionen returnerar, innan den har kontrollerat att pekaren inte är NULL.

kd> !verifier 4
Resource fault injection history:
Tracker @ 8354A000 (# entries: 80, size: 80, depth: 8)

Entry @ 8354B258 (index 75)

    Thread: C2638220

    816760CB nt!VerifierExAllocatePoolWithTag+0x49
    A4720443 win32k!bDeleteAllFlEntry+0x15d
    A4720AB0 win32k!GreEnableEUDC+0x70
    A47218FA win32k!CleanUpEUDC+0x37
    A473998E win32k!GdiMultiUserFontCleanup+0x5
    815AEACC nt!MiDereferenceSession+0x74
    8146D3B4 nt!MmCleanProcessAddressSpace+0x112
    815DF739 nt!PspExitThread+0x603

Entry @ 8354B230 (index 74)

    Thread: 8436D770

    816760CB nt!VerifierExAllocatePoolWithTag+0x49
    A462141C win32k!Win32AllocPool+0x13
    A4725F94 win32k!StubGdiAlloc+0x10

Erfarenhet av simuleringstestet med låga resurser visar att de flesta drivrutinskrascher orsakas av den senast misslyckade allokeringen. I exemplet ovan inträffade kraschen på vägen till win32k!GreEnableEUDC. Granska koden i sökvägen till allokeringen för att hitta orsaken till kraschen.

Information om !verifierfinns i dokumentationen Felsökningsverktyg för Windows.

Om du vill visa inställningarna i registret på kommandoraden använder du alternativet /querysettings. Till exempel:

C:\>verifier /querysettings
Special pool: Disabled
Pool tracking: Disabled
Force IRQL checking: Disabled
I/O verification: Disabled
Enhanced I/O verification: Disabled
Deadlock detection: Disabled
DMA checking: Disabled
Security checks: Disabled
Force pending I/O requests: Disabled
Low resources simulation: Enabled
IRP Logging: Disabled
Miscellaneous checks: Disabled

Low Resources Simulation options:

- Fault injection probability: 1/10000.
- Fail only allocations using pool tags: Tag1 Tag2.
- Simulate low resources conditions only in applications: test1.exe test2.exe.
- Boot time delay: 2 minutes.

Verified drivers:

blah.sys