The amount of DPC activity generated by any user-mode program is directly proportional to the amount of device I/O it generates. Network access, disk access, video access. If it's not causing device I/O, an application cannot be generating or affecting DPCs in the system.
<QUOTE> I do not think you fully understand what a DPC actually is because a co-processor board would not solve the DPC problem... As an example, an application requests data from a hardware device like a network card or disk drive or sends data to a hardware device, like a video card. While that hardware device is fulfilling the request, the operating system waits momentarily for the hardware to complete it's task. A poorly written hardware driver will keep the operating system in this "wait state" for a long time until the task is completed and that is the reason for long duration DPCs. </QUOTE> Your description is not correct. Not at all. People are already confused enough without having incorrect information. To correct your simplified example: As an example, an application requests data from a hardware device like a network card or disk drive or sends data to a hardware device, like a video card. While that request is in progress the only thing that waits is the user application that requested the operation (and, even at that, the wait is optional). The operating system and the driver definitely DO NOT wait. When the request is completed on the hardware, the hardware device generates an interrupt to indicate that something about its state has changed. Windows services this interrupt at VERY HIGH priority, temporarily interrupting almost anything else happening on the system at the time, and calls the Interrupt Service Routine of the driver responsible for the device. In its Interrupt Service Routine, the driver examines the hardware, determines the reason that the device interrupted, and -- if there is more work to do -- tells the operating system to call him (the driver) back at a LOWER priority level so he can finish attending to the device's needs without blocking everything else on the system. This call back is a Deferred Procedure Call (DPC). All requests for DPC callbacks are placed on a queue. Before returning to execute user applications the OS will remove one DPC request at a time and call the requesting back so the driver can complete the servicing of its hardware device. Within its DPC, the driver for the hardware device does whatever is necessary to service its device. This might mean moving data from a disk controller or a network card to a user data buffer and completing a request. But, it COULD (and most of the time WILL) mean completing SEVERAL such requests. The problem occurs when there are multiple devices, each with multiple requests, that generate interrupts within a short period of time. The DPC queue can grow long... and the amount of time that a given driver has to wait, from the time he requests his DPC callback from his ISR to when his DPC callback is actually run, depends on (a) the number of DPCs in the queue ahead of him, and (b) how much time each of those drivers spends in their DPC callbacks. A poorly written driver will spend an unacceptably long amount of time in its DPC, thus causing devices with DPC requests behind his in the queue to wait an unusually long time... thus causing "excessive DPC latency" for that waiting driver. To give you an idea of the timeframes we're talking about: The (currently) suggested maximum amount of time any driver should spend in either its ISR or DPC is 10us. In my experience, this is wishful thinking by Microsoft... there are LOTS of drivers that spend far more than 10us in their DPC callback routines -- There are Microsoft drivers that exceed this guideline and I know that I've written several drivers that routinely violate it as well. But, a well-written driver servicing a nicely designed piece of modern hardware should be able to get close to this guideline in most circumstances. Peter K1PGV _______________________________________________ FlexRadio Systems Mailing List FlexRadio@flex-radio.biz http://mail.flex-radio.biz/mailman/listinfo/flexradio_flex-radio.biz Archives: http://www.mail-archive.com/flexradio%40flex-radio.biz/ Knowledge Base: http://kc.flex-radio.com/ Homepage: http://www.flex-radio.com/