The message first passes through the application message queue to the TCP transmit queue. A scheduler then selects it from the TCP transmit queues and places the message into a TCP send queue.
The act of enqueuing the message triggers the TCP stack to evaluate if the connection can send more data from that queue. If the TCP stack determines that it is acceptable to send data on the TCP connection, then data from the message is copied to a per-port transmit queue on the way to the Ethernet interface. The data remains on the TCP queue until it is acknowledged by the client through a TCP ACK message.
The per-client TCP transmit queues have a configurable maximum depth, measured in bytes. When a transmit queue is full, no more data is taken from the message queues.
The per-client message queues also have a configurable maximum depth, measured in work units of 2048 bytes. When these queues become full, messages are discarded, and the dataplane statistic for Transmit Congestion--Slow Consumer is incremented.
Before messages are placed in the TCP queue, the current depth of the TCP queue is checked against its configured maximum. If the current depth of the TCP queue is less than its maximum, the entire message is placed on the queue. This can cause the TCP queue to temporarily exceed its configured maximum depth. If the depth is at or greater than the maximum depth, the message is left on the per-client message queues. When a message is placed on the TCP queue, the exact byte length of that message is added to its current depth.
Each active client has one transmit queue for message delivery. The transmit queue holds data that is waiting on the hardware to send data out of one of the four Ethernet ports.
While the size of the per-port transmit queues is not configurable, the P-7500 ensures that ingress traffic cannot be affected by too many buffers in this queuing point.