DPC (Software Interrupt) Partitioning
In an environment with a large volume of network processing, you might want to control DPCs that arise from interrupts generated by your network adapters. The default handling of these DPCs might not allow you to attain optimal performance for your SMP configuration if you have a network-intensive workload.
Depending on the processor platform detected by the HAL, the operating system might configure different default settings to handle DPC distribution. If Windows 2000 detects that your system supports symmetric interrupt distribution (this includes Pentium Pro or later processors), the network DPCs associated with an interrupt remain on the processor that handled the interrupt. By doing so, the system improves processor cache locality and reduces interprocessor interrupts.
I/O completion ports are synchronization mechanisms defined in the Microsoft® Win32 API that are used with asynchronous I/O to limit the number of active threads that service I/O on the completion port. By limiting the number of active threads, I/O completion ports allow a pool of threads to be used such that the number of threads that share memory or hold a lock are minimized, thereby improving SMP scaling. The value defining that limit is called the concurrency value. When the concurrency value is set to 0, the completion port allows the number of active threads to be equal to the number of processors on a system. When there is one active thread per processor, there is no need for context switching or memory sharing. If a thread becomes blocked, the completion port allows another thread to be activated. On completion of a work item, the thread returns to the completion port for more work, thereby reducing context switching and improving locality of reference.
On a system with a relatively light network load, keeping the DPC processing on a single processor will improve the cache locality for the network DPCs and prevent network interrupts from occurring while a running thread has a lock on most of the processors. However, this distribution does not work well on systems with significant amounts of network traffic.
You can also add network adapters so that you have one network adapter for each processor. Generally, you should only add a network adapter if you also need the bandwidth, because each additional network adapter has some intrinsic overhead.
However, if one of the processors is nearly always active (if Processor\% Processor Time consistently equals 100 percent) and more than half of its time is spent servicing DPCs (that is, if Processor\% DPC Time exceeds 50 percent), then adding a network card is likely to improve system performance.
If you are adding or upgrading network adapters, choose adapters with drivers that support interrupt moderation or interrupt avoidance. Interrupt moderation allows a processor to process interrupts more efficiently by grouping several interrupts to a single hardware interrupt. Interrupt avoidance allows a processor to continue processing interrupts without new interrupts queued until all pending interrupts are complete.
If your network adapter does not use NDIS miniport drivers, you cannot modify the distribution of DPCs for better performance. For this reason, and because other NDIS optimizations might be unavailable, you might want to consider upgrading your network adapter.
By default, DPCs for disk interrupts remain on the processor that took the interrupt.