Новый API
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти сообщения )
|
Новый API (также называемый NAPI ) — это интерфейс для использования методов предотвращения прерываний для сетевых устройств в ядре Linux . Такой подход предназначен для уменьшения накладных расходов на прием пакетов. Идея состоит в том, чтобы отложить обработку входящих сообщений до тех пор, пока их не накопится достаточное количество, чтобы можно было обработать их все сразу.
Мотивация
[ редактировать ]Простой метод реализации сетевого драйвера — прервать работу ядра, выдав запрос на прерывание (IRQ) для каждого входящего пакета. Однако обслуживание IRQ требует больших затрат с точки зрения ресурсов процессора и времени. Следовательно, простая реализация может быть очень неэффективной в высокоскоростных сетях, постоянно прерывающих работу ядра тысячами пакетов в секунду. В результате может пострадать общая производительность системы, а также пропускная способность сети.
Опрос является альтернативой обработке на основе прерываний. Ядро может периодически проверять поступление входящих сетевых пакетов без прерывания, что устраняет накладные расходы на обработку прерываний. Однако важно установить оптимальную частоту опроса. Слишком частый опрос тратит ресурсы ЦП на повторную проверку входящих пакетов, которые еще не прибыли. С другой стороны, слишком редкий опрос приводит к задержке из-за снижения реактивности системы на входящие пакеты и может привести к потере пакетов, если буфер входящих пакетов заполнится до их обработки.
В качестве компромисса ядро Linux по умолчанию использует режим управления прерываниями и переключается в режим опроса только тогда, когда поток входящих пакетов превышает определенный порог, известный как «вес» сетевого интерфейса.
Совместимые драйверы
[ редактировать ]Драйвер, использующий интерфейс NAPI, будет работать следующим образом:
- Прерывания приема пакетов отключены.
- Драйвер предоставляет ядру метод опроса. Этот метод будет извлекать все доступные входящие пакеты на сетевой карте или в кольце DMA , чтобы затем они были обработаны ядром.
- Когда это разрешено, ядро вызывает метод опроса устройства, чтобы, возможно, обрабатывать множество пакетов одновременно.
Преимущества
[ редактировать ]- Нагрузка, вызванная прерываниями, снижается, хотя ядру приходится выполнять опрос.
- Пакеты с меньшей вероятностью будут переупорядочены, а в противном случае обработка неупорядоченных пакетов может стать узким местом. [ нужна ссылка ]
- В случае, если ядро неспособно обработать все входящие пакеты, ядру не нужно выполнять никакой работы для их отбрасывания: они просто перезаписываются во сетевой карты входящем кольцевом буфере . Без NAPI ядру приходится обрабатывать каждый входящий пакет независимо от того, есть ли время на его обслуживание, что приводит к перегрузке .
История
[ редактировать ]NAPI — это более чем трехлетний проект Алексея Кузнецова, Джамаля Хади Салима и Роберта Олссона. Первоначальная попытка включить NAPI встретила сопротивление со стороны некоторых членов сообщества, однако Дэвид Миллер приложил немало усилий, чтобы обеспечить включение NAPI.
было проведено множество реальных испытаний Перед включением в сеть университетов Упсалы . Фактически, www.slu.se была первой серийной ОС на базе NAPI и по сей день работает на маршрутизаторах Bifrost/Linux на базе NAPI. генератор pktgen трафика Примерно в это же время родился . Pktgen широко использовался для тестирования сценариев NAPI, не вызванных реальным трафиком.
Ссылки
[ редактировать ]Дальнейшее чтение
[ редактировать ]- Джамал Хади Салим; Роберт Олссон; Алексей Кузнецов (10 ноября 2001 г.). За пределами программной сети (PDF) . 5-я ежегодная выставка и конференция Linux (ALS '01) . стр. 165–172 . Проверено 6 марта 2011 г. Классическая бумага NAPI.
- Джонатан Корбет (28 апреля 2003 г.). «Портирование драйверов: Сетевые драйверы» . LWN.net . Проверено 6 марта 2011 г.
- Джонатан Корбет (18 декабря 2006 г.). «Переработка НАПИ» . LWN.net . Проверено 6 марта 2011 г.
- Джонатан Корбет; Алессандро Рубини; Грег Кроа-Хартман (февраль 2005 г.). «Глава 17: Сетевые драйверы» (PDF) . Драйверы устройств Linux (3-е изд.). О'Рейли Медиа. ISBN 978-0-596-00590-0 . Проверено 6 марта 2011 г.
Внешние ссылки
[ редактировать ]- Ранняя работа NAPI [ мертвая ссылка ]
- Описание NAPI в Linux Foundation. Архивировано 11 июня 2016 г. на Wayback Machine.
- Обзор сети , 19 ноября 2009 г., The Linux Foundation, Рами Розен (архивировано из оригинала 30 октября 2011 г.)