The buffer management provided in the Win32 DLC is different than the buffer management provided in other implementations. However, the buffer headers are as defined in the IBM DLC interface specification.
The Win32 DLC buffers are allocated from a single virtual memory block. The DLC driver defines the buffer segment sizes. For each frame the driver receives, it allocates a minimal combination of 256, 512, 1024, 2048, and 4096 buffer segments (at most, one of each size). This minimizes the amount of nonpaged memory needed for different buffer segment headers. It also allocates the minimal number of buffers for the received frame. Applications can request the fixed size buffers or an optimal number of buffers for a frame size.
The DLC buffer pools are dynamically expanded during LLC_READ, LLC_DLC_FLOW_CONTROL, and LLC_BUFFER_GET commands if the size of the free buffers is less than the specified minimum threshold size for the application. However, the system cannot increase the buffer pool beyond the application-specified maximum size.
An application can use its own buffers for transmitting data or send data directly from the buffer pool. Because the DLC driver locks all transmit buffers that are not in the buffer pool, you should avoid using a large number of small buffers for transmitting data.
To improve performance, use the following techniques: