TS16 & Windows IO Completion Port

we are developing a server application (under Windows 2003 Server OS) in which we use 10 TS16s. Most of these 160 ports run @9600bps, some @300bps. 300bps ports use RTS toggle since these communicate via modems. The server issues, in round robin fashion, short 6 byte poll messages to all ports (remotes) in very quick succession (2-3polls/ms) because it is imperative to minimize latency of remote response.

We have implemented one IO Completion Port (IOCP) to handle all 160 serial ports tx/rx data flow. The problem we are facing is that after some time of running the server starts eating up nonpaged kernel memory. The MS Poolmem program (from DDK) helped us to determine that offending drivers are io!nt IO driver together with the driver handing the IRPs (I/O Request Packets). The name of this driver showed as “unknown”.

An obvious conclusion, I guess, would be that we are overloading the IOCP queue by feeding it with too much data too fast although my opinion is that we do not ask more than should be attainable. When we run the server say with 10 serial ports we obtain same results, i.e. kernel drivers not releasing nonpaged memory, only after proportionally longer time. Is it possible that the Digi RealPort driver and Windows IO subsystem have problem working together? Eagerly awaiting your comments.