Создайте очереди OVS и назначьте их уже созданным очередям с TC.

Вопрос или проблема

Я использую OVS и Mininet для некоторых экспериментов. При добавлении ссылок в Mininet, используя параметры bw, max_queue_size и другие настройки, связанные со ссылками, фактически используется TC под капотом. Теперь я добавляю небольшое изменение в код, чтобы иметь возможность добавлять подсистемы с TC для родительской очереди, контролируя пропускную способность.

cmds += [
    f"tc class add dev %s parent 5:1 classid 5:10 htb rate {bw // 2}Mbit ceil {bw} prio 7",  # по умолчанию
    f"tc class add dev %s parent 5:1 classid 5:20 htb rate {bw bw //4}Mbit ceil {bw} prio 1",  # высокая приоритетность
    "tc qdisc add dev %s parent 5:10 handle 10: htb",
    "tc qdisc add dev %s parent 5:20 handle 20: htb",
]

Код для создания родительской очереди


cmds += [ 'tc qdisc add dev %s root handle 5:0 htb default 10',
          f'tc class add dev %s parent 5:0 classid 5:1 htb rate {bw}Mbit burst 15k']

Теперь, после создания этих двух подсистем, я хочу привязать их к очередям OVS. Единственный способ, который я нашел, это

cmd = (f"ovs-vsctl -- set port %s qos=@newqos "
       f"-- --id=@newqos create qos type=linux-htb other-config:max-rate={max_rate} queues=10=@q0,20=@q1 "
       f"-- --id=@q0 create queue other-config:min-rate={min_rate} other-config:max-rate={max_rate} other_config:priority=7 "
       f"-- --id=@q1 create queue other-config:min-rate={min_rate} other-config:max-rate={max_rate} other_config:priority=1")

Самая команда OVS использует TC под капотом, который переопределяет оригинально созданные очереди для интерфейса. Есть ли какие-либо предложения по созданию очередей в OVS, но с использованием уже созданных очередей с TC?

Спасибо

Ответ или решение

Создание и управление очередями в Open vSwitch (OVS) с использованием Traffic Control (TC) – это важная задача для оптимизации сетевой производительности. Ваша цель заключается в том, чтобы интегрировать уже созданные очереди с TC в OVS, используя базовые механизмы управления пропускной способностью и приоритетами трафика.

Шаг 1: Создание родительской очереди с TC

Для начала вы уже правильно создали родительскую очередь с использованием команды TC. Как видно из вашего кода:

cmds += [ 'tc qdisc add dev %s root handle 5:0 htb default 10',
          f'tc class add dev %s parent 5:0 classid 5:1 htb rate {bw}Mbit burst 15k']

Здесь вы создаете распределение пропускной способности для интерфейса с помощью HTB (Hierarchical Token Bucket). Не забудьте заменить %s на имя вашего сетевого интерфейса.

Шаг 2: Создание подочередей

Вы правильно создали подочереди. Тем не менее, необходимо обратить внимание на корректность задания параметров, чтобы они не влияли на родительскую очередь. Ваше использование команды:

cmds += [
    f"tc class add dev %s parent 5:1 classid 5:10 htb rate {bw // 2}Mbit ceil {bw} prio 7",  # default
    f"tc class add dev %s parent 5:1 classid 5:20 htb rate {bw // 4}Mbit ceil {bw} prio 1",  # high prio
    "tc qdisc add dev %s parent 5:10 handle 10: htb",
    "tc qdisc add dev %s parent 5:20 handle 20: htb",
]

здесь все выглядит правильно. Вы можете дополнительно регулировать значения rate и ceil в зависимости от ваших потребностей и целей эксперимента.

Шаг 3: Интеграция с OVS

Для интеграции созданных очередей TC с OVS есть несколько подходов. Проблема, с которой вы столкнулись, заключается в том, что OVSQos переопределяет политики, созданные через TC. Чтобы избежать этого, необходимо использовать механизм "обертки" или "передачи".

Рекомендуется применять такую конструкцию:

  1. Создание OVS QoS и привязка к существующим очередям TC:

Чтобы создать экземпляр QoS в OVS и привязать его к уже созданным очередям TC, используйте следующую команду:

cmd = (f"ovs-vsctl -- set port %s qos=@newqos "
       f"-- --id=@newqos create qos type=linux-htb other-config:max-rate={max_rate} "
       f"queues=10=@q0,20=@q1 "
       f"-- --id=@q0 create queue other-config:min-rate={min_rate} other-config:max-rate={max_rate} other_config:priority=7 "
       f"-- --id=@q1 create queue other-config:min-rate={min_rate} other-config:max-rate={max_rate} other_config:priority=1")
  1. Подход "обертывания" для предотвращения переопределения:

Если Qos в OVS автоматически переопределяет задаваемые вами TC параметры, вам следует реализовать механизм "обертывания", который добавит поддерживающую логику. Такой подход позволяет сохранить управление очередями.

Заключение

Для успешного управления очередями OVS с уже созданными очередями TC необходимо учитывать взаимодействие между OVS и TC. Используйте предоставленный алгоритм интеграции и корректируйте параметры в зависимости от необходимых требований вашей сети. Не забывайте тестировать каждую настройку, чтобы удостовериться в ее эффективности и корректности функционирования.

Кроме того, избегайте конфликта настроек, в противном случае ваши усилия по оптимизации могут быть сведены на нет. Разработка и тестирование сети – это итеративный процесс, требующий внимания к деталям и готовности вносить изменения по мере необходимости.

Оцените материал
Добавить комментарий

Капча загружается...