Какова взаимосвязь кольцевого буфера DMA и кольца TX/RX для сетевой карты?

Я знаю, что для сетевой карты ОС должна выделить для нее кольца tx/rx, чтобы, когда ОС хочет получать/передавать пакеты, сетевая карта знала, где находятся пакеты и какие пакеты должны быть переданы.

И когда я читаю о DMA, я вижу нечто, называемое кольцевым буфером DMA. Кольцо DMA и кольцо tx/rx — это одно и то же? Или какова связь?


person 4va1anch3    schedule 23.11.2017    source источник


Ответы (3)


Короткий ответ: это одно и то же.

Подробнее: во-первых, см. этот пост, который очень связан с ваш вопрос.

В этой статье говорится:

Вариант асинхронного подхода часто встречается с сетевыми картами. Эти карты часто ожидают увидеть циклический буфер (часто называемый кольцевым буфером DMA), установленный в памяти, совместно используемой с процессором; каждый входящий пакет помещается в следующий доступный буфер в кольце, и сигнализируется прерывание. Затем драйвер передает сетевые пакеты остальной части ядра и помещает в кольцо новый буфер DMA.

Кольцо DMA позволяет сетевой карте напрямую обращаться к памяти, используемой программным обеспечением. Программное обеспечение (драйвер сетевой карты в случае ядра) выделяет память для колец, а затем отображает ее как память DMA, чтобы сетевая карта знала, что может получить к ней доступ. Пакеты TX будут создаваться в этой памяти программным обеспечением и будут считываться и передаваться сетевым адаптером (обычно после того, как программное обеспечение сигнализирует сетевому адаптеру, оно должно начать передачу). Пакеты RX будут записываться в эту память сетевым адаптером, а затем считываться и обрабатываться программным обеспечением (обычно после выдачи прерывания, сигнализирующего о наличии работы).

Надеюсь это поможет.

person Tgilgul    schedule 23.11.2017
comment
поэтому кольцевой буфер размещается в памяти, а не в хранилище сетевой карты, и сетевая карта знает, где находятся кольца. Насколько я знаю, формат кольца зависит от аппаратного обеспечения, и в сетевой карте есть некоторый регистр местоположения кольца, поэтому сетевая карта просто найдет кольцо и прочитает его в соответствии со своим собственным форматом, а затем найдет пакеты? - person 4va1anch3; 23.11.2017
comment
Да, формат данных в кольцах должен соответствовать API для сетевой карты. У каждого поставщика обычно есть PRM (Справочное руководство программиста), в котором объясняется, как должны быть построены данные. - person Tgilgul; 23.11.2017
comment
Понятно. Мне это очень помогает. СПАСИБО! - person 4va1anch3; 23.11.2017
comment
Я хочу спросить, если кольцо очередь, в чем разница, спасибо! - person LinconFive; 01.07.2019
comment
Кольцо представляет собой очередь RX/TX устройства. Он используется для передачи данных между стеком ядра и устройством. - person Tgilgul; 10.07.2019

  1. Кольцевой буфер Содержит начальный и конечный адреса буфера в ОЗУ. TX Ring будет содержать адреса буфера в ОЗУ, который содержит данные для передачи. Кольцо RX будет содержать адрес буфера в ОЗУ, куда сетевая карта будет помещать данные.

    Эти кольца присутствуют в оперативной памяти.

  2. Буфер TX и буфер RX находятся в ОЗУ, на которые указывают кольца TX/RX.

  3. Теперь реестр сетевой карты имеет буфер расположения колец в оперативной памяти.

Теперь 1 и 2 могут быть буфером с поддержкой DMA, они называются кольцом DMA TX/RX и буфером DMA TX/RX. Теперь, поскольку кольцо RX/TX должно оставаться на всем протяжении, они сделаны как непротиворечивый/когерентный тип памяти DMA. В то время как буферы делаются потоковыми/памяти типа Single DMA

введите описание изображения здесь введите здесь описание изображения < img src="https://i.stack.imgur.com/m7MU6.png" alt="введите здесь описание изображения"> введите здесь описание изображения

person Alok Prasad    schedule 26.12.2019
comment
Хорошие рисунки @Alok. Просто любопытно, вы их скопировали из какого-то источника или сделали своими руками :) - person QnA; 31.01.2020
comment
@QnA нет, они взяты из разных источников и мне они не принадлежат - person Alok Prasad; 20.02.2020
comment
Знаете ли вы, как указатель начала и конца связан с кольцевым буфером Rx, считывающим и записывающим пакеты между устройством NIC и драйвером? Я запутался в этой части. - person django_moose; 25.07.2020

Кольцевой буфер DMA и кольца TX/RX — это одно и то же.
DMA имеет два типа кольцевых буферов.

  • Кольцевой буфер TX — используется для передачи данных от ядра к устройству.
  • Кольцевой буфер RX — используется для приема данных от устройства к ядру.
person swayamraina    schedule 18.07.2020