This describes the buffer system, which handles temporary storing in SDRAM, and bandwidth shaping of frames transferred over the host interface to the allocated buffers in the host memory.
Number of buffers
The number of host buffers used depends on the HostBuffersRx and HostBuffersTx parameters in the ntservice.ini file (see ntservice.ini file in DN-0449). The maximum number of RX host buffers per system is 256 or 128 with dynamic segment size and 128 or 64 with static segment size. The maximum number of TX host buffers per system is 256 or 128 with dynamic segment size and 128 or 64 with static segment size.
- NT400D11 SmartNICs running on the 2 × 100 Gbit/s TM1 image.
- NT400D11 SmartNICs running on the 2 × 100 Gbit/s FM1 image.
The RX host buffer segment size is determined by the HostBufferSegmentSizeRx parameter in the ntservice.ini file (see ntservice.ini file in DN-0449). With dynamic RX segment size the segment size changes every time a segment is delivered. This together with packet-based interface gives the best performance. If a fixed RX segment length is required and a static RX segment size is selected, extra memory is used for handling segment meta data.
The TX host buffer segment size can be set to 1 MB, 2 MB or 4 MB.
The minimum RX buffer size is 16 Mbytes and the minimum TX buffer size is 4 Mbytes. The maximum host buffer size is 1 Tbyte. The buffer size can be set in increments of 4 Mbytes. A maximum of 1 Tbyte host buffer memory per system is supported for RX host buffers, with an additional 1 Tbyte supported for TX host buffers.
The hostBufferAllowance parameter in the NT_NetRxOpen function (see DN-0449) allows different applications to share host buffers in such a way that a slow application does not occupy all of the host buffers and thereby causes a faster application to lose packets. This applies especially to capture applications.
Tuning throughput, CPU load and latency
The HostBufferPollInterval parameter determines how often in μs the
ntservice daemon polls for new
data in the host buffers. The parameter can take these values: default,
100, 250, 500 and
1000. Changing the value from default results in a higher
latency, but a lower CPU utilization, which allows
ntservice more time to service
the host buffers.
The HostBufferSegmentTimeOut
parameter determines how often in
μs the FPGA releases segments that are not full. The parameter can take these values:
default, 100, 250,
500, 1000, 10000, 25000,
50000 and 100000. Changing the value from
default results in a higher latency, but a lower CPU utilization, which
allows ntservice more time to
service the host buffers.