[Перевод] OvS, DPDK и Intel HT: 12-кратное ускорение виртуального коммутатора

Сегодня расскажем об Open vSwitch, интегрированном с Data Plane Development Kit (OvS-DPDK). Это — высокопроизводительный виртуальный многоуровневый коммутатор с открытым исходным кодом, доступный по лицензии Apache 2.0. Интеграция OvS с DPDK позволяет значительно повысить скорость обработки сетевых пакетов.
image

Open vSwitch нашёл практическое применение во множестве проектов. Коммутатор поддерживает протокол OpenFlow, подходит для работы в программно-определяемых сетях (Software Defined Network, SDN). OvS можно конфигурировать с помощью протокола управления OVSDB.

Высокоуровневая архитектура OvS-DPDK


Обычный Open vSwitch занимается передачей сетевых пакетов через пространство ядра Linux (это показано на рисунке ниже). В канале передачи данных ядра, «быстрый путь» («fastpath») обработки данных реализуется благодаря простой таблице потоков, содержащей правила пересылки и обработки принятых пакетов. Если первый пакет в потоке не соответствует ни одной из существующих записей в таблице ядра, его отправляют для обработки демону, который работает в пространстве пользователя. Это — так называемый «медленный путь» («slow path»). После того, как в пространстве пользователя этот пакет будет обработан, демон обновляет таблицу потоков в пространстве ядра, в результате следующие пакеты в потоке могут пройти по «быстрому пути», их не нужно передавать в пространство пользователя. Следуя этому подходу, обычный Open vSwitch позволяет избавиться от ресурсоёмкой операции переключения контекста между пространствами ядра и пользователя для большого процента полученных пакетов. Однако, достижимая пропускная способность ограничена полосой пропускания сетевого стека Linux, который не подходит для вариантов использования, в которых необходима высокая скорость обработки пакетов. Например — в телекоммуникационных компаниях.

DPDK — это набор библиотек, работающих в пространстве пользователя Linux, которые позволяют создавать высокопроизводительные приложения для обработки сетевых пакетов. Фактически, он предлагает набор драйверов опрашиваемого режима (Poll Mode Driver, PMD) для различных физических и виртуальных устройств, которые позволяют осуществлять прямую передачу пакетов между пространством пользователя и сетевым интерфейсом, минуя сетевой стек ядра. Это даёт значительный рост производительности по сравнению с передачей данных через ядро. Подобное происходит благодаря избавлению от необходимости обработки прерываний и от необходимости пользоваться сетевым стеком ядра. При интеграции OvS с DPDK, «быстрый путь» коммутации проходит через пространство пользователя, а «путь первого пакета» — это тот же путь в пространстве пользователя, по которому проходят пакеты в обычном OvS, когда «быстрый путь» пролегает через ядро.

Вот общая схема интеграции DPDK с OvS:

e129cb3cc4a69536eede1fdf1ef02358.png
Интеграция плоскости передачи данных DPDK с обычным Open vSwitch

На рисунке ниже показана высокоуровневая архитектура OvS-DPDK. Порты коммутации OvS представлены сетевыми устройствами (netdevs). Netdev-dpdk — это сетевое устройство, пользующееся возможностями DPDK, оно осуществляет обмен сетевыми данными через три различных интерфейса. Первый — физический интерфейс (работа с ним осуществляется с помощью библиотеки librte_eth в DPDK), далее — два виртуальных интерфейса (librte_vhost и librte_ring). Это — интерфейсы с физическими и виртуальными устройствами, подключенными к виртуальному коммутатору.

f57b3915c6decd2aea1571ffe068b2c9.png
Высокоуровневая архитектура Open vSwitch с DPDK

Другие архитектурные уровни OvS дают дополнительную функциональность и организацию взаимодействия, например, с SDN-контроллером. Dpif-netdev предоставляет услуги передачи данных в пространстве пользователя, ofproto — это библиотека OvS, которая реализует коммутатор стандарта OpenFlow. Она взаимодействует с OpenFlow-контроллерами по сети и с программным или аппаратным обеспечением коммутатора через провайдера ofproto. Сервер ovsdb поддерживает актуальную информацию в таблицах коммутации для данного экземпляра OvS и взаимодействует с SDN-контроллером.

Подробности об архитектуре OvS можно найти на openvswitch.org.

Теперь поговорим о таблицах коммутации OvS-DPDK.

Таблицы коммутации OvS-DPDK


Пакет, поступающий в OvS-DPDK с физического или виртуального интерфейса, получает уникальный идентификатор, или хэш, основанный на полях его заголовка, который затем сравнивают с записями, которые имеются в трёх основных таблицах коммутации. Это — таблица точного совпадения (Exact Match Cache, EMC), таблица классификатора маршрута передачи данных (Data Path Classifier, dpcls), и таблица классификатора ofproto (Ofrproto Classifier).

Идентификатор пакета сравнивают с cодержимым таблиц, в том порядке, в котором они здесь приведены, до тех пор, пока не будет найдено совпадение. Если совпадение найдено, будет выполнено действие, на которое указывает запись в таблице, содержащая правило обработки для пакета. После завершения всех действий над пакетом, он покидает коммутатор. Этот процесс показан на рисунке ниже.

aa44c7df186b31108c5493d91b800142.png
Иерархия таблиц коммутации в Open vSwitch с DPDK

У этих трёх таблиц разные характеристики пропускной способности и задержек. Таблица EMC предлагает самую быструю обработку для ограниченного числа записей. Идентификатор пакета должен точно совпасть с записью в таблице. Среди сравниваемых данных имеются точный IP-адрес источника и порт, адрес и порт назначения, протокол. Совпадение всего этого с записью в EMC даст самую высокую скорость обработки. В противном случае совпадение найдено не будет и начнётся поиск в таблице dpcls.

В dpcls имеется гораздо больше записей (они организованы во множестве подтаблиц), она поддерживает сравнение идентификаторов с использованием шаблонов. Например, с её помощью можно обработать пакеты, для которых в ней задан целевой IP-адрес и порт, но при этом разрешён любой источник такого пакета. При использовании dpcls приходится обслуживать гораздо больший набор записей таблиц, в результате, если решение об обработке пакета принимается на основе этой таблицы, можно достичь примерно половины пропускной способности EMC. Если в dpcls найдено подходящее правило, оно записывается в EMC, в результате, следующие пакеты с тем же идентификатором могут быть обработаны на более высокой скорости.

Если же правило для идентификатора пакета не найдено и в dpcls, начинается проверка по таблице классификатора ofproto, в результате контроллер OpenFlow может решить, как именно обрабатывать пакет. Это — самый медленный путь прохождения данных, он более чем в 10 раз медленнее, чем в случае, когда совпадение найдено в таблице EMC. Когда совпадение находят в классификаторе ofproto, это ведёт к созданию новых записей в более быстрых таблицах коммутации, в результате последующие пакеты того же потока можно обработать быстрее.

О возможностях и производительности OvS-DPDK


В тот момент, когда был написан этот материал, в ветке master проекта OvS-DPDK были доступны следующие высокоуровневые возможности:
  • Поддержка DPDK 16.07 (при выходе новых релизов DPDK обновляется и поддерживаемая OvS версия)
  • Поддержка портов vHost-user.
  • Поддержка восстановления соединения vHost.
  • Поддержка нескольких очередей vHost.
  • Встроенная поддержка туннелирования: VxLAN, GRE, Geneve
  • Поддержка VLAN
  • Поддержка MPLS
  • Поддержка QOS-политик Ingress/egress
  • Поддержка jumbo-кадров
  • Отслеживание соединений
  • Статистические сведения: данные DPDK vHost и расширенная статистика DPDK
  • Отладка: поддержка DPDK pdump
  • Агрегирование каналов
  • Сведения о состоянии каналов
  • Поддержка VFIO
  • Обнаружение ODL/OpenStack портов DPDK
  • Учёт особенностей NUMA при работе с портами vHost-user

На рисунке ниже даны свежие результаты тестирования производительности обычного OvS и OvS-DPDK. Здесь показана пропускная способность (пакетов в секунду) для сценария использования, когда данные поступают в OvS с физического порта, обрабатываются и передаются на другой физический порт (Phy-OvS-Phy). Можно видеть, что OvS-DPDK работает примерно в 10 раз быстрее, чем обычный OvS. При этом, если на сервере включен режим Intel Hyper-Threading, OvS-DPDK оказывается примерно в 12 раз быстрее обычного OvS. На диаграмме этот вариант помечен как »1С2T», что означает одно физическое ядро с двумя потоками.
b2451fb0e149ed120f2a4ed633ca269a.png

Сравнение производительности обычного OvS и OvS-DPDK

Похожие результаты получены в более сложном сценарии использования: (Phy-OvS-VM-OvS-Phy), когда данные с физического интерфейса поступают в OvS, потом идут в виртуальную машину, дальше — возвращаются в OvS, и, в итоге, снова передаются на физический интерфейс. А именно, здесь OvS-DPDK позволяет достичь примерно 9-кратного роста производительности.

Сведения о конфигурации аппаратного и программного обеспечения, на котором были проведены испытания, результаты которых упомянуты выше, можно найти в этом отчёте. Там же есть и данные по испытаниям для других сценариев использования.

Где взять OvS-DPDK


OvS-DPDK можно найти в upstream-ветви репозитория openvswitch.org, он имеется в различных дистрибутивах Linux. Последний стабильный релиз — OvS 2.6. Он выпущен в сентябре 2016-го года. Подобные релизы выходят раз в полгода.

Обратите внимание на то, что вы можете загрузить ZIP-файл с веткой master OVS, или ветвь версии 2.6. Так же имеются инструкции по установке для ветки master и для версии 2.6. Пакеты OvS с SPDK доступны в следующих репозиториях:

  • Red Hat OpenStack Platform
  • Ubuntu
  • Mirantis OpenStack
  • Open Platform for NFV

Обычный Open vSwitch можно загрузить на openvswitch.org, на GitHub, его можно найти и в дистрибутивах Linux.

Итоги и дополнительные материалы


Мы представили краткий обзор OvS-DPDK — виртуального коммутатора, который отличается высокой производительностью и надёжностью. Интеграция с DPDK позволяет значительно ускорить обычный Open vSwitch. Если вы хотите больше узнать об OvS, вот список полезных материалов на английском.

Руководства для пользователей:

  • Using OvS with DPDK for inter-VM NFV applications
  • Using OvS with DPDK on Ubuntu

Руководства для разработчиков:
  • OvS with DPDK installation guide
  • OvS with DPDK advanced performance tuning guide

Статьи:
  • Rate limiting configuration and usage for OvS with DPDK
  • QoS configuration and usage for OvS with DPDK
  • Configure vHost User multiqueue for OvS with DPDK
  • vHost User NUMA awareness in OvS with DPDK
  • DPDK Pdump in OvS with DPDK
  • Enabling OvS with DPDK in OpenStack
  • Jumbo Frames in Open vSwitch* with DPDK
  • vHost User Client Mode in Open vSwitch* with DPDK
  • OVS-DPDK Datapath Classifier

Вебинары по стабильным релизам OvS с DPDK:
  • OvS with DPDK in OvS 2.5.0
  • OvS with DPDK in OvS 2.4.0

Материалы университета INB:
  • Open vSwitch with DPDK Architectural Deep Dive
  • DPDK Open vSwitch: Accelerating the Path to the Guest

Техническая документация:
  • OvS with DPDK enables SDN and NFV transformation

Комментарии (0)

© Habrahabr.ru