Введение

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

Мотивация

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

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

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

История

НАПИ - это более чем трехлетняя работа Алексея Кузнецова, Джамала Хади Салима и Роберта Олссона. Первоначальные усилия по включению NAPI встретили сопротивление со стороны некоторых членов сообщества, однако Дэвид Миллер упорно работал, чтобы обеспечить включение NAPI. Перед включением в сеть университета Уппсала было проведено много реальных испытаний. На самом деле, www. - Я не знаю. se была первой производственной ОС на базе NAPI и до сих пор используется на базе NAPI маршрутизаторами Bifrost/Linux. Генератор трафика pktgen также появился примерно в это время. Pktgen широко использовался для тестирования сценариев NAPI, не вызванных реальным мировым трафиком.