Hvordan øger jeg Windows interrupt latency til stress test en driver?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en chauffør & enhed, der synes at fejle sig, når brugeren gør et antal komplekse ting (åbner store orddokumenter, åbner masser af filer på en gang osv.) - men går pålideligt ikke galt, når en ting gentages. Jeg tror, ​​det er fordi det ikke håndterer høje interrupt latency situationer yndefuldt.


Er der en pålidelig måde at øge afbrydelsestid på Windows XP for at teste denne teori?


Jeg foretrækker at skrive min testprogram i python, men c ++ og WinAPI er også fint ...

Bedste reference


Jeg undskylder for ikke at have et konkret svar, men en ide at udforske ville være at bruge enten c ++ eller cython til at koble til timeren afbryde (klokken tick one) og spilde tid derinde. Dette vil effektivt øge latency.

Andre referencer 1


Jeg ved ikke, om der er en eksisterende løsning. Men du kan skabe din egen.


I Windows prioriteres alle afbrydelser. Så hvis der er en førerkode, der kører på en høj IRQL, vil din chauffør ikke kunne betjene din afbrydelse, hvis niveauet er lavere. I det mindste vil det ikke være muligt at køre på samme processor.


Jeg gør følgende:



  1. Konfigurer din driver til at køre på en enkelt processor (husk ikke hvordan du gør dette, men sådan en mulighed findes absolut).

  2. Tilføj en I/O-kontrolkode til din driver.

  3. I rutinen skal du have en travl ventetid på en høj IRQL (mere om dette senere) i din chauffør

  4. Ring til din driver (via DeviceIoControl) for at simulere et stress.



Den travle ventetid kan se sådan ud:


KIRQL oldIrql;
\_\_int64 t1, t2;

KeRaiseIrql(31, &oldIrql);

KeQuerySystemTime((LARGE\_INTEGER*) &t1);

while (1)
{
    KeQuerySystemTime((LARGE\_INTEGER*) &t2);

    if (t1 - t1 > /* put the needed time interval */)
        break;
}

KeLowerIrql(oldIrql);