Once your user-mode driver has been written and debugged, you might find that certain modules in your code do not operate fast enough (for example: an interrupt handler or accessing I/O-mapped regions). If this is the case, try to improve performance in one of the following ways:
Use the following checklist to determine how to best improve the performance of your driver.
The following checklist will help you determine how to improve the performance of your driver:
|ISA Card — accessing an I/O-mapped range on the card||
When transferring a large amount of data, use block (string) transfers
and/or group several data transfer function calls into a single
multi-transfer function call, as explained in
|PCI Card — accessing an I/O-mapped range on the card||Avoid using I/O ranges in your hardware design. Use Memory mapped ranges instead as they are accessed significantly faster.|
|Accessing a memory-mapped range on the card||
Try to access memory directly instead of using function calls, as explained
If the problem persists, then there is a hardware design problem. You will not be able to increase performance by using any software design method, writing a Kernel PlugIn, or even by writing a full kernel driver.
|Interrupt latency — missing interrupts, receiving interrupts too late||
Handle the interrupts in the kernel mode by writing a Kernel PlugIn
driver, as explained in |
|PCI target access vs. master access||
PCI target access is usually slower than PCI master access (bus-master
DMA). For large data transfers, bus-master DMA access is preferable.