What does the ring parameter in ethtool -g output signify?

For instance, if I run ethtool -g eth0 on my system, I get the following output:

Ring parameters for eth0:
Pre-set maximums:
RX:             4096
RX Mini:        0
RX Jumbo:       0
TX:             4096
Current hardware settings:
RX:             4096
RX Mini:        0
RX Jumbo:       0
TX:             4096

Is 4096 the buffer size in bytes allocated for one frame, there being multiple number of such buffers or is it the number of buffers?


Solution 1:

Tx/Rx buffers are memory spaces allocated by a network adapter to handle traffic bursts. Buffering takes place when the traffic exceeds physical capacity of network adapter. Increasing the buffer size would help to avoid packet loss when adapter is overloaded.

Solution 2:

I found this article which helps to illustrate the function that the ring buffer aka. (driver queue) serves, which may help in understanding its purpose/function. The article is titled, Queueing in the Linux Network Stack.

This section is the one that's of interest:

Driver Queue (aka Ring Buffer)

Between the IP stack and the network interface controller (NIC) lies the driver queue. This queue typically is implemented as a first-in, first-out (FIFO) ring buffer (http://en.wikipedia.org/wiki/Circular_buffer)—just think of it as a fixed-sized buffer. The driver queue does not contain the packet data. Instead, it consists of descriptors that point to other data structures called socket kernel buffers (SKBs, http://vger.kernel.org/%7Edavem/skb.html), which hold the packet data and are used throughout the kernel.

This diagram shows where the ring buffer fits in architecturally:

                    ss1

According to this article, the size of the ring buffer controls the number of SKBs (socket kernel buffers) descriptors. You can read more about SKBs at the links provided, they show the C data structures which make up an SKB.

Looking through that documentation, it does not appear that the ring buffer is simply frame buffers related, but rather pointers to a much more complex kernel data structure related to the packet.