Новый API

Новый API (также называемый NAPI ) — это интерфейс для использования методов смягчения прерываний для сетевых устройств в ядре Linux . Такой подход призван сократить накладные расходы на прием пакетов. Идея заключается в том, чтобы отложить обработку входящих сообщений до тех пор, пока их не накопится достаточное количество, чтобы стоило обрабатывать их все сразу.

Мотивация

Простой метод реализации сетевого драйвера — прерывание ядра путем выдачи запроса на прерывание (IRQ) для каждого входящего пакета. Однако обслуживание IRQ требует больших затрат ресурсов процессора и времени. Поэтому простая реализация может быть очень неэффективной в высокоскоростных сетях, постоянно прерывая ядро ​​тысячами пакетов в секунду. В результате может пострадать общая производительность системы, а также пропускная способность сети.

Опрос является альтернативой обработке на основе прерываний. Ядро может периодически проверять поступление входящих сетевых пакетов без прерываний, что устраняет накладные расходы на обработку прерываний. Однако важно установить оптимальную частоту опроса. Слишком частый опрос тратит ресурсы ЦП, многократно проверяя входящие пакеты, которые еще не поступили. С другой стороны, слишком редкий опрос вносит задержку, снижая реактивность системы на входящие пакеты, и может привести к потере пакетов, если буфер входящих пакетов заполнится до обработки.

В качестве компромисса ядро ​​Linux по умолчанию использует режим прерываний и переключается в режим опроса только тогда, когда поток входящих пакетов превышает определенный порог, известный как «вес» сетевого интерфейса.

Соответствующие требованиям водители

Драйвер, использующий интерфейс NAPI, будет работать следующим образом:

  • Прерывания приема пакетов отключены.
  • Драйвер предоставляет метод опроса ядру. Этот метод извлечет все доступные входящие пакеты на сетевой карте или кольце DMA , чтобы затем они были обработаны ядром.
  • При наличии разрешения ядро ​​вызывает метод опроса устройства, чтобы по возможности обрабатывать несколько пакетов одновременно.

Преимущества

  • Нагрузка, вызванная прерываниями, снижается, даже несмотря на то, что ядру приходится выполнять опрос.
  • Пакеты с меньшей вероятностью будут переупорядочены, в то время как обработка пакетов, не соответствующих порядку, в противном случае может стать узким местом. [ необходима цитата ]
  • В случае, если ядро ​​не может обработать все входящие пакеты, ядру не нужно выполнять никаких действий, чтобы отбросить их: они просто перезаписываются во входящем кольцевом буфере сетевой карты . Без NAPI ядру приходится обрабатывать каждый входящий пакет независимо от того, есть ли время на его обслуживание, что приводит к пробуксовке .

История

NAPI был более чем трехлетним усилием Алексея Кузнецова, Джамаля Хади Салима и Роберта Олссона. Первоначальные усилия по включению NAPI были встречены сопротивлением некоторых членов сообщества, однако Дэвид Миллер упорно трудился, чтобы обеспечить включение NAPI.

Перед включением в сеть университета Уппсалы было проведено множество реальных испытаний . Фактически, www.slu.se была первой промышленной ОС на базе NAPI и до сих пор работает на маршрутизаторах Bifrost/Linux на базе NAPI. Генератор трафика pktgen также появился примерно в это же время. Pktgen широко использовался для тестирования сценариев NAPI, не вызванных реальным трафиком.

Ссылки

Дальнейшее чтение

  • Джамал Хади Салим; Роберт Олссон; Алексей Кузнецов (10.11.2001). Beyond softnet (PDF) . 5 - я ежегодная выставка и конференция Linux (ALS '01). стр.  165–172 . Получено 06.03.2011 .Классическая статья NAPI.
  • Джонатан Корбет (28.04.2003). "Перенос драйверов: сетевые драйверы". LWN.net . Получено 06.03.2011 .
  • Джонатан Корбет (18.12.2006). "Переработка NAPI". LWN.net . Получено 06.03.2011 .
  • Джонатан Корбет; Алессандро Рубини; Грег Кроа-Хартман (февраль 2005 г.). "Глава 17: Сетевые драйверы" (PDF) . Драйверы устройств Linux (3-е изд.). O'Reilly Media. ISBN 978-0-596-00590-0. Получено 2011-03-06 .
  • Ранняя работа NAPI [ мертвая ссылка ‍ ]
  • Описание NAPI на Linux Foundation. Архивировано 11 июня 2016 г. на Wayback Machine.
  • Обзор сети, 19 ноября 2009 г., The Linux Foundation, Рами Розен (архивировано из оригинала 30 октября 2011 г.)
Retrieved from "https://en.wikipedia.org/w/index.php?title=New_API&oldid=1169799715"