Открыть сервис

Poll Mode Drivers

Poll Mode Drivers (PMD, драйверы с опросным режимом) — это класс сетевых драйверов, работающих по принципу активного опроса (polling) сетевых интерфейсов вместо традиционного механизма прерываний (interrupt-driven). В отличие от классических драйверов, которые ожидают прерывания от сетевой карты при поступлении пакета, PMD постоянно циклически проверяет состояние очередей приёма и передачи, что позволяет минимизировать задержки и снизить накладные расходы на обработку прерываний. Данная технология широко применяется в высокопроизводительных системах обработки сетевого трафика, таких как программно-конфигурируемые сети (SDN), виртуализация сетевых функций (NFV) и приложения с жёсткими требованиями к пропускной способности и задержкам (например, в телекоммуникационном оборудовании и финансовых торговых системах).

История

Идея опросного режима в сетевых драйверах возникла как ответ на рост пропускной способности сетей (от 1 Гбит/с до 100 Гбит/с и выше) и увеличение числа пакетов в секунду. Традиционные драйверы, основанные на прерываниях, не справлялись с нагрузкой: при высокой интенсивности трафика частота прерываний становилась чрезмерной, что приводило к перегрузке процессора, снижению производительности и увеличению задержек.

Первые реализации PMD появились в начале 2000-х годов в рамках проектов по созданию высокопроизводительных сетевых стеков, таких как Intel DPDK (Data Plane Development Kit), запущенный в 2010 году. DPDK стал одной из первых открытых платформ, предоставивших библиотеку PMD для различных сетевых адаптеров. Позднее аналогичные подходы были реализованы в других проектах, включая PF_RING (разработка ntop), Snabbswitch, Netmap и Open vSwitch с поддержкой DPDK.

Принцип работы

Основное отличие PMD от прерываемых драйверов заключается в механизме получения данных. В традиционном драйвере:

  1. Сетевая карта получает пакет.
  2. Карта генерирует аппаратное прерывание (IRQ) процессору.
  3. Обработчик прерывания сохраняет контекст, копирует пакет в память и передаёт его в стек протоколов.
  4. Процессор возвращается к прерванной задаче.

В PMD процессор (или выделенное ядро) постоянно выполняет цикл опроса:

  1. Драйвер проверяет очередь приёма сетевой карты на наличие новых пакетов.
  2. Если пакеты есть, они извлекаются и передаются приложению без участия ядра ОС.
  3. Если пакетов нет, цикл повторяется немедленно или с минимальной задержкой.

Ключевые особенности:

  • Отсутствие прерываний: исключаются накладные расходы на переключение контекста и обработку прерываний.
  • Прямой доступ к памяти (DMA): пакеты передаются напрямую из памяти сетевой карты в буферы приложения, минуя ядро.
  • Выделение ядер: для опроса обычно выделяются отдельные ядра процессора, которые не выполняют другие задачи, что гарантирует предсказуемую задержку.
  • Пакетная обработка (batch processing): PMD часто обрабатывают пакеты группами, что повышает пропускную способность за счёт уменьшения числа операций ввода-вывода.

Классификация

PMD можно классифицировать по нескольким признакам:

По типу реализации

  • Пользовательские PMD (userspace PMD): работают в пространстве пользователя, минуя ядро ОС. Примеры: драйверы DPDK, PF_RING ZC (Zero Copy). Обеспечивают максимальную производительность, но требуют выделения ядер и монопольного доступа к сетевым интерфейсам.
  • Ядерные PMD (kernel-space PMD): реализованы как модули ядра, но используют опрос вместо прерываний. Примеры: драйверы с поддержкой NAPI (New API) в Linux, которые могут переключаться между режимами прерываний и опроса в зависимости от нагрузки.

По способу опроса

  • Активный опрос (busy polling): ядро процессора постоянно занято проверкой очередей, даже при отсутствии трафика. Это даёт минимальную задержку, но приводит к 100% загрузке ядра.
  • Гибридный опрос (adaptive polling): драйвер переключается между режимами прерываний и опроса в зависимости от интенсивности трафика. Например, при низкой нагрузке используется прерывание, при высокой — опрос.

По аппаратной поддержке

  • Аппаратные PMD: используют специализированные механизмы сетевых карт, такие как очереди с кольцевыми буферами (ring buffers) и аппаратное ускорение (например, Intel Flow Director, Mellanox ConnectX).
  • Программные PMD: реализуют опрос на уровне драйвера без специальной аппаратной поддержки, что снижает производительность, но упрощает совместимость.

Устройство и характеристики

Архитектура

Типичный PMD состоит из следующих компонентов:

  • Драйвер устройства: отвечает за инициализацию сетевой карты, настройку очередей и управление DMA.
  • Библиотека опроса: реализует цикл опроса, извлечение пакетов и передачу их в приложение.
  • Менеджер памяти: управляет буферами для пакетов, часто используя пулы фиксированного размера (mempool) для минимизации аллокаций.
  • Интерфейс приложения: API для передачи пакетов между драйвером и пользовательским приложением (например, rte_eth_rx_burst() в DPDK).

Ключевые характеристики

  • Пропускная способность: PMD способны обрабатывать до 10–40 млн пакетов в секунду на одном ядре (в зависимости от аппаратного обеспечения и размера пакетов).
  • Задержка (latency): типичная задержка составляет 1–5 микросекунд, что в 10–100 раз меньше, чем у прерываемых драйверов.
  • Загрузка процессора: при активном опросе ядро загружено на 100%, что требует выделения отдельных ядер.
  • Потребление энергии: из-за постоянной работы ядер PMD потребляют больше энергии, чем прерываемые драйверы, что может быть критично для мобильных или встроенных систем.

Применение

Телекоммуникации и NFV

PMD широко используются в виртуализированных сетевых функциях (NFV), таких как виртуальные маршрутизаторы, брандмауэры и системы балансировки нагрузки. Например, Open vSwitch с DPDK (OVS-DPDK) обеспечивает производительность, сравнимую с аппаратными коммутаторами.

Финансовые системы

В высокочастотной торговле (HFT) задержки в микросекундах могут решать исход сделки. PMD позволяют обрабатывать рыночные данные и отправлять ордера с минимальной задержкой.

Облачные вычисления

Виртуальные машины и контейнеры, использующие PMD (например, через SR-IOV или DPDK), получают прямой доступ к сетевым ресурсам, что повышает производительность и изоляцию.

Научные вычисления

В кластерах HPC (High-Performance Computing) PMD используются для передачи данных между узлами с минимальными накладными расходами, особенно в MPI-приложениях.

Примеры реализаций

Intel DPDK

Наиболее известная платформа с открытым исходным кодом, поддерживающая PMD для десятков сетевых адаптеров Intel, Mellanox, Broadcom и других. DPDK включает драйверы для физических и виртуальных устройств (например, virtio, vhost).

PF_RING

Разработка компании ntop, предоставляющая PMD для Linux. Поддерживает как пользовательские (PF_RING ZC), так и ядерные (PF_RING DNA) режимы.

Netmap

Проект Luigi Rizzo, реализующий быстрый сетевой ввод-вывод на основе опроса. Используется в FreeBSD и Linux.

Snabbswitch

Высокопроизводительный программный коммутатор, написанный на Lua, с собственными PMD для сетевых карт Intel.

Интересные факты

  • PMD часто используются в сочетании с технологией SR-IOV (Single Root I/O Virtualization), которая позволяет виртуальным машинам напрямую обращаться к сетевым картам, минуя гипервизор.
  • В некоторых реализациях PMD поддерживают нулевое копирование (zero-copy), когда пакеты передаются из памяти сетевой карты в приложение без копирования через ядро.
  • Разработка PMD является сложной задачей, так как требует глубокого понимания архитектуры сетевых карт и процессоров, а также оптимизации для конкретных аппаратных платформ.

Критика

Несмотря на высокую производительность, PMD имеют ряд недостатков:

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

Источники

  • Intel DPDK Documentation: "Poll Mode Drivers" (Intel Corporation)
  • Luigi Rizzo, "Netmap: A Novel Framework for Fast Packet I/O" (USENIX ATC 2012)
  • ntop, "PF_RING: High-Speed Packet Capture and Analysis" (ntop.org)
  • Open vSwitch with DPDK: Performance and Architecture (Linux Foundation)
  • Сетевые технологии в высокопроизводительных вычислениях (статья в журнале "Вычислительные методы и программирование", 2020)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →