如何增加Windows中断延迟以对驱动程序进行压力测试?

时间:2011-08-24 10:24:10

标签: windows interrupt

我有一个司机&当用户执行任何数量的复杂事物(打开大字文档,一次打开大量文件等)时,似乎行为异常的设备 - 但在重复任何一件事情时都不会出错。我相信这是因为它无法优雅地处理高中断延迟情况。

是否有一种可靠的方法来增加Windows XP上的中断延迟来测试这一理论?

我更喜欢在python中编写我的测试程序,但是c ++& WinAPI也很好......

2 个答案:

答案 0 :(得分:1)

我对没有具体答案感到抱歉,但是要探索的想法是使用c ++或cython来挂钩定时器中断(时钟滴答一个)并在那里浪费时间。这将有效地增加延迟。

答案 1 :(得分:0)

我不知道是否有现成的解决方案。但你可以自己创建一个。

在Windows上,所有中断都被优先处理。因此,如果在高IRQL上运行驱动程序代码,则如果其级别较低,则驱动程序将无法为您的中断提供服务。至少它不能在同一个处理器上运行。

我会做以下事情:

  1. 将驱动程序配置为在单个处理器上运行(不记得如何执行此操作,但肯定存在这样的选项)。
  2. 向您的驱动程序添加I / O控制代码。
  3. 在您的驱动程序的Dispatch例程中,在高IRQL上进行繁忙等待(稍后会详细介绍)
  4. 致电您的司机(通过DeviceIoControl)以模拟压力。
  5. 繁忙的等待可能看起来像这样:

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