В этой статье описывается настройка ограничения скорости входящего трафика для интерфейса Data Plane Development Kit (DPDK) в Open vSwitch (OVS) с DPDK. Эта статья предназначена для сетевых администраторов, которые могут использовать ограничение скорости Open vSwitch, чтобы обеспечить гарантированную скорость приема для портов DPDK на развернутых серверах Open vSwitch. Эта статья дополняет статью Настройка и использование качества обслуживания для Open vSwitch* с DPDK, поскольку ограничение скорости и качество обслуживания действуют соответственно в трактах приема и передачи, используя уникальные команды API для настройки и работы.
Примечание. На момент написания этой статьи ограничение скорости OVS с DPDK было доступно только в основной ветви OVS. Загрузить ZIP-архив основной ветви OVS можно здесь. Действия по установке OVS с DPDK описаны здесь.
Ограничение скорости в OVS с DPDK
Перед настройкой ограничения скорости следует рассказать об отличиях от качества обслуживания и о взаимодействии с трафиком в vSwitch.
Качество обслуживания применяется к исходящему трафику, то есть к данным, передаваемым из порта OVS. Ограничение скорости, напротив, действует только для входящего трафика, то есть для данных, принимаемых портом vSwitch. Ограничение скорости реализовано в OVS с DPDK с помощью ограничителя входящего трафика (аналогичного ограничителю исходящего трафика для качества обслуживания, поддерживаемого в OVS с DPDK). Ограничитель входящего трафика начинает просто отбрасывать пакеты после превышения определенной скорости приема в интерфейсе (алгоритм буфера маркеров). Для физического устройства ограничитель входящего трафика будет отбрасывать трафик, поступающий извне системы через сетевой адаптер. Для виртуального интерфейса, то есть порта vhost-user DPDK, ограничитель будет отбрасывать трафик, передаваемый с гостевой машины на vSwitch. По сути, ограничивается скорость передачи данных с гостевой машины на этот порт. Это показано на рис. 1.
Рис. 1. Ограничение скорости с помощью ограничения входящего трафика для порта vhost-user
Тестовая среда
Рис. 2. Тестовая среда
Примечание. И главный компьютер, и виртуальные машины (ВМ), используемые в этой среде, работают под управлением 64-разрядной версии Fedora* 23 Server с ядром Linux* 4.4.6. Каждая ВМ имеет виртуальный сетевой адаптер, подключенный к мосту vSwitch через интерфейс vhost-user DPDK. Виртуальный сетевой адаптер отображается в качестве устройства ядра Linux (например, ens0) в операционной системе виртуальной машины. Убедитесь, что между виртуальными машинами есть подключение (например, отправьте эхо-запрос к ВМ2 с ВМ1).
Настройка и тестирование ограничения скорости
Для тестирования настройки установите iPerf* на обе ВМ. Убедитесь в том, что версия rpm соответствует версии гостевой ОС. В этом данном случае следует использовать 6564-разрядную версию Fedora. Если в Fedora 23 используется диспетчер пакетов, например dnf в Fedora 23, то можно автоматически установить iPerf с помощью следующей команды:
dnf install iperf
Для проверки настройки убедитесь, что iPerf установлен на обе виртуальные машины. iPerf можно запускать в режиме клиента и в режиме сервера. В этом примере мы запустим клиент iPerf на ВМ1 и сервер iPerf на ВМ2.
Тест без ограничителя входящего трафика
На ВМ2 выполните следующую команду, чтобы развернуть сервер iPerf в режиме UDP на порту 8080:
iperf –s –u –p 8080
На ВМ1 выполните следующую команду, чтобы развернуть клиент iPerf в режиме UDP на порту 8080 с пропускной скоростью передачи данных 100 Мбит/с:
iperf -c 7.7.7.2 -u -p 8080 -b 100m
В этом случае ВМ1 будет пытаться передавать данные на ВМ2 по протоколу UDP со скоростью 100 Мбит/с. Через 10 секунд проявится набор значений. Выполните эти команды до настройки ограничения скорости. Вы увидите результаты, аналогичные показанным на рис. 3. В отчете сервера нас интересует столбец Bandwidth (пропускная способность).
Рис. 3. Выходные данные без ограничения входящего трафика
Данные, показанные на рис. 3, свидетельствуют о том, что пропускная способность подключения между виртуальными машинами составляет 100 Мбит/с.
Тест с настроенным ограничителем входящего трафика
Теперь настроим ограничение скорости с помощью ограничителя входящего трафика vhost-user1 до 10 Мбит/с, используя следующую команду:
ovs-vsctl set interface vhost-user1 ingress_policing_rate=10000 ingress_policing_burst=1000
Параметры описаны ниже.
- ingress_policing_rate: максимальная скорость (Кбит/с), разрешенная для этой виртуальной машины. Это значение обязательно для создания ограничителя входящего трафика. Если значение не указано, существующая настройка ограничения скорости останется без изменений.
- ingress_policing_burst: размер буфера маркеров в килобайтах. Минимальное значение этого параметра должно быть равно наибольшему предполагаемому размеру пакета. Если значение не указано, используется значение по умолчанию, равное 8000 КБ.
Если снова запустить тест пропускной способности UDP iPerf, результаты будут схожи с показанными на рис. 4.
Рис. 4. Выходные данные с ограничением входящего трафика
Обратите внимание, что теперь, при настроенном ограничителе трафика, доступная пропускная способность составляет 9,59 Мбит/с, а не 100 Мбит/с. Программа iPerf отправила трафик по протоколу UDP с клиента ВМ1 на сервер ВМ2 со скоростью 100 Мбит/с, но скорость трафика была снижена, поскольку на входящем тракте портов vhost-user1 vSwitch действует ограничитель входящего трафика. За счет этого скорость трафика, передаваемого с клиента iPerf ВМ1, была снижена приблизительно до 10 Мбит/с.
Отметим, что если используется трафик TCP, то значение параметра ingress_policing_burst должно составлять существенную долю значения параметра ingress_policing_rate; рекомендуется, чтобы оно превышало 10%. Это обусловлено снижением производительности протокола TCP при отбрасывании пакетов и возникновением проблем с повторной передачей пакетов.
Существующую настройку ограничения скорости для vhost-user1 можно получить с помощью следующей команды:
ovs-vsctl list interface vhost-user1
Чтобы отменить ограничения скорости трафика vhost-user1, установите для параметра ingress_policing_rate значение 0, как показано ниже (настраивать значение параметра ingress_policing_burst не нужно):
ovs-vsctl set interface vhost-user1 ingress_policing_rate=0
Заключение
В этой статье мы показали простой пример, в котором трафик передается между двумя виртуальными машинами через Open vSwitch* с DPDK с настроенным ограничителем входящего трафика. Мы продемонстрировали команды для настройки ограничения скорости для заданного порта DPDK, для получения сведений о текущей настройке ограничения скорости и для отмены ограничения скорости.
Дополнительные сведения
Дополнительные сведения об использовании ограничения скорости, параметрах и многом другом см. в разделах, посвященных ограничению скорости, в vswitch.xml и ovs-vswitchd.conf.db.
Есть вопрос? Запросы относительно Open vSwitch можно отправлять в почтовое обсуждение.
Дополнительные сведения об Open vSwitch* с DPDK см. в следующих видеороликах и статьях на сайтах Intel Developer Zone и Intel Network Builders University.
- Настройка и использование качества обслуживания для Open vSwitch* с DPDK
- Open vSwitch* с DPDK: подробное описание архитектуры
- DPDK Open vSwitch*: ускорение подключения к гостевой системе
Переведенные статьи на Хабрахабре
- Использование Open vSwitch с DPDK для передачи данных между виртуальными машинами с виртуализацией сетевых функций
- Data Plane Development Kit (DPDK): приступая к работе
Автор: Intel