Новый API


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

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

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

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

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

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