Что такое аппаратная очередь Rx / Tx в контроллере Ethernet - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть очень простой вопрос, касающийся аппаратных очередей Rx / Tx в контроллере Ethernet, для чего он используется?

Если посмотреть на следующий драйвер в ядре Linux, кажется, что он используется для переноса дескрипторов DMA?

https://github.com/torvalds/linux/blob/master/drivers/net/ethernet/broadcom/genet/bcmgenet.c#L2276

1 Ответ

1 голос
/ 02 ноября 2019

Вы правы, очереди rx / tx содержат дескрипторы DMA для входящих и исходящих пакетов.

Если вам интересно, как работают сетевые драйверы, я рекомендую взглянуть на сетевой драйвер ixy userpace: https://github.com/emmericp/ixy

Код относительно прост и очень хорошо прокомментирован, и есть статья, которая объясняет, как он работает: https://www.net.in.tum.de/fileadmin/bibtex/publications/papers/ixy-writing-user-space-network-drivers.pdf

См. Раздел 4.1 NIC Ring API в документедля объяснения очередей приема (rx) и передачи (tx):

NIC предоставляют множество циклических буферов, называемых очередями или кольцами для передачи пакетов. Самая простая настройка использует только одну очередь приема и одну очередь передачи. Множество очередей передачи объединяются на сетевой карте, входящий трафик разделяется в соответствии с фильтрами или алгоритмом хеширования, если настроено несколько очередей приема. Кольца приема и передачи работают аналогичным образом: драйвер программирует физический базовый адрес и размер кольца. Затем он заполняет область памяти дескрипторами DMA , то есть указателями на физические адреса, где данные пакета хранятся с некоторыми метаданными. Отправка и получение пакетов осуществляется путем передачи владения дескрипторами DMA между драйвером и оборудованием через головной и хвостовой указатели. Водитель управляет хвостом, железо - головой. Оба указателя хранятся в регистрах устройств, доступных через MMIO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...