Как увеличить задержку прерывания Windows для стресс-теста водителя? - PullRequest
3 голосов
/ 24 августа 2011

У меня есть драйвер и устройство, которые, кажется, плохо себя ведут, когда пользователь выполняет множество сложных операций (открытие документов большого размера, одновременное открытие большого количества файлов и т. Д.), Но при этом не всегда происходит сбойповторяетсяЯ полагаю, это потому, что он не обрабатывает ситуации с высокой задержкой изящно.

Существует ли надежный способ увеличить задержку прерывания в Windows XP для проверки этой теории?

Я бы предпочел написать своютестировать программирование на python, но c ++ и WinAPI тоже подойдут ...

Ответы [ 2 ]

1 голос
/ 06 сентября 2011

Я приношу свои извинения за то, что не имею конкретного ответа, но идея для изучения состояла бы в том, чтобы использовать или c ++, или cython, чтобы подключиться к прерыванию таймера (часы тикают один) и тратить там время.Это эффективно увеличит задержку.

0 голосов
/ 06 сентября 2011

Я не знаю, существует ли существующее решение.Но вы можете создать свой собственный.

В Windows все прерывания имеют приоритет.Таким образом, если код драйвера работает на высоком уровне IRQL, ваш драйвер не сможет обслуживать ваше прерывание, если его уровень ниже.По крайней мере, он не сможет работать на том же процессоре.

Я бы сделал следующее:

  1. Настройте драйвер для работы на одном процессоре (непомните, как это сделать, но такая опция определенно существует).
  2. Добавьте управляющий код ввода-вывода в свой драйвер.
  3. В процедуре Dispatch вашего драйвера выполняйте занятое ожиданиевысокий IRQL (подробнее об этом позже)
  4. Позвоните своему водителю (через DeviceIoControl) для имитации стресса.

Ожидание при занятости может выглядеть примерно так:

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);
...