Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Network and Device Configuration

Number of RX

...

& TX Buffers to Configure

The number of large receive, small transmit and large transmit buffers configured for a specific interface depend on several factors.

  1. Desired level of performance.
  2. Amount of data to be either transmitted or received.
  3. Ability of the target application to either produce or consume transmitted or received data.
  4. Average CPU utilization.
  5. Average network utilization.
  6. Type of connection (UDP or TCP)
  7. Number of simultaneous connection.
  8. Application/connection priorities

The discussion on the bandwidth-delay product is always valid. In general, the more buffers the better. However, the number of buffers can be tailored based on the application. For example, if an application receives a lot of data but transmits very little, then it may be sufficient to define a number of small transmit buffers for operations such as TCP acknowledgements and allocate the remaining memory to large receive buffers. Similarly, if an application transmits and receives little, then the buffer allocation emphasis should be on defining more transmit buffers. However, there is a caveat:

...

Specifying too few transmit or receive buffers may lead to stalls in communication and possibly even dead-lock. Care should be taken when configuring the number of buffers. µC/TCP-IP is often tested with configurations of 10 or more small transmit, large transmit, and large receive buffers.All device configuration structures and declarations are in the provided files named net_dev_cfg.c and net_dev_cfg.h. Each configuration structure must be completely initialized in the specified order. The following listing shows where to define the number of buffers per interface as calculated 

Number of DMA Descriptors to Configure

...

LF-2(8) Number of transmit descriptors. For DMA-based devices, this value is utilized by the device driver during initialization in order to allocate a fixed-size pool of transmit descriptors to be used by the device. For best performance, the number of transmit descriptors should be equal to the number of small, plus the number of large transmit buffers configured for the device. Non DMA based devices may configure this value to zero.

Anchor
Configuring

...

Once number and size of the transmit and receive buffers are configured, as explained in the previous section, the last thing that need to be done is to configure the TCP Transmit and Receive Window sizes. These parameters are found in the net_cfg.h file in the TRANSMISSION CONTROL PROTOCOL LAYER CONFIGURATION section.

 

Window sizes
Configuring Window sizes
Configuring Window Sizes

Receive and transmit queue size must be properly configured to optimize performance. It represents the number of bytes that can be queued by one socket. It's important that all socket are not able to queue more data than what the device can hold in its buffers. The size should be also a multiple of the maximum segment size (MSS) to optimize performance. UDP MSS is 1470 and TCP MSS is 1460. 

RX and TX maximum queue size is configured using #define in net_cfg.h, see Socket Layer Configuration.

RX and TX queue size can be reduce at run time using socket option API (NetTCP_ConnCfgRxWinSize and NetTCP_ConnCfgTxWinSize).

the following listing shows a calculation example: 

    Number of TCP connection  : 2
    Number of UDP connection  : 0
    Number of RX large buffer : 10
    Number of TX Large buffer : 6
    Number of TX small buffer : 2
    Size of RX large buffer   : 1518
    Size of TX large buffer   : 1518
    Size of TX small buffer   : 60
 
    TCP MSS RX                = 1460
    TCP MSS TX large buffer   = 1460
    TCP MSS TX small buffer   = 0
 
    Maximum receive  window   = (10 * 1460)           = 14600 bytes
    Maximum transmit window   = (6  * 1460) + (2 * 0) = 8760  bytes
 
 
    RX window size per socket = (14600 / 2) =  7300 bytes
    TX window size per socket = (8760  / 2) =  4380 bytes

Reducing the Number of Transitory Errors (NET_ERR_TX)

The number of transmit buffer should be increased. Additionally, it may be helpful to add a short delay between successive calls to socket transmit functions.

TODO Tx suspend ??

Writing or Obtaining Additional Device Drivers

Contact Micrium for information regarding obtaining additional device drivers. If a specific driver is not available, Micrium may develop the driver by providing engineering consulting services.

Alternately, a new device driver may be developed by filling in a template driver provided with the µC/TCP-IP source code.

See Chapter 7, “Device Driver Implementation” for more information.