Например, если я бегу ethtool -g eth0
в моей системе я получаю следующий результат:
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
4096 - это размер буфера в байтах, выделенный для одного кадра, при наличии нескольких таких буферов или это количество буферов?
Буферы Tx / Rx - это области памяти, выделенные сетевым адаптером для обработки пакетов трафика. Буферизация происходит, когда объем трафика превышает физическую емкость сетевого адаптера. Увеличение размера буфера поможет избежать потери пакетов при перегрузке адаптера.
Я нашел эту статью, которая помогает проиллюстрировать функцию кольцевого буфера, также известного как. (очередь драйверов), что может помочь понять ее назначение / функцию. Статья называется, Очередь в сетевом стеке Linux.
Этот раздел представляет интерес:
Очередь драйверов (также известная как кольцевой буфер)
Между стеком IP и контроллером сетевого интерфейса (NIC) находится очередь драйверов. Эта очередь обычно реализуется как кольцевой буфер FIFO (first-in, first-out) (http://en.wikipedia.org/wiki/Circular_buffer) - просто думайте об этом как о буфере фиксированного размера. Очередь драйвера не содержит пакетных данных. Вместо этого он состоит из дескрипторов, которые указывают на другие структуры данных, называемые буферами ядра сокетов (SKB, http://vger.kernel.org/%7Edavem/skb.html), которые содержат пакетные данные и используются во всем ядре.
На этой диаграмме показано, где кольцевой буфер соответствует архитектуре:
Согласно этой статье, размер кольцевого буфера контролирует количество SKB (буферы ядра сокета) дескрипторы. Вы можете узнать больше о SKB по предоставленным ссылкам, они показывают структуры данных C, которые составляют SKB.
Просматривая эту документацию, не кажется, что кольцевой буфер связан с просто буферами кадров, а скорее указывает на гораздо более сложную структуру данных ядра, связанную с пакетом.