Transmit queues
For transmit, the device drivers can provide a transmit queue limit.
There can be both hardware queue and software queue limits, depending on the driver and adapter. Some drivers have only a hardware queue; some have both hardware and software queues. Some drivers internally control the hardware queue and only allow the software queue limits to be modified. Generally, the device driver will queue a transmit packet directly to the adapter hardware queue. If the system CPU is fast relative to the speed of the network, or on an SMP system, the system may produce transmit packets faster than they can be transmitted over the network. This will cause the hardware queue to fill.
After the hardware queue is full, some drivers provide a software queue and they will then queue to the software queue. If the software transmit queue limit is reached, then the transmit packets are discarded. This can affect performance because the upper-level protocols must then time out and retransmit the packet. At some point, however, the adapter must discard packets as providing too much space can result in stale packets being sent.
| Adapter Type | Feature Code | ODM attribute | Default value | Range |
|---|---|---|---|---|
| IBM® 10/100 Mbps Ethernet PCI Adapter | 2968 | tx_que_size | 8192 | 16-16384 |
| 10/100 Mbps Ethernet Adapter II | 4962 | tx_que_sz | 8192 | 512-16384 |
| Gigabit Ethernet PCI (SX or TX) | 2969, 2975 | tx_que_size | 8192 | 512-16384 |
| Gigabit Ethernet PCI (SX or TX) | 5700, 5701, 5706, 5707 | tx_que_sz | 8192 | 512-16384 |
| 10 Gigabit Ethernet PCI-X (LR or SR) | 5718, 5719 | tx_que_sz | 8192 | 512-16384 |
| ATM 155 (MMF or UTP) | 4953, 4957 | sw_txq_size | 2048 | 50-16384 |
| ATM 622 (MMF) | 2946 | sw_txq_size | 2048 | 128-32768 |
| FDDI | 2741, 2742, 2743 | tx_queue_size | 256 | 3-2048 |
For adapters that provide hardware queue limits, changing these values will cause more real memory to be consumed on receives because of the control blocks and buffers associated with them. Therefore, raise these limits only if needed or for larger systems where the increase in memory use is negligible. For the software transmit queue limits, increasing these limits does not increase memory usage. It only allows packets to be queued that were already allocated by the higher layer protocols.