Вопрос или проблема
Я создаю этот QoS с помощью OVS. Я заменяю intf, max и min во время выполнения
ovs-vsctl -- set port {intf} qos=@newqos -- --id=@newqos create qos type=linux-htb \
other-config:burst=1280000 other-config:max-rate={max} queues=0=@q0,1=@q1 \
-- --id=@q0 create queue other-config:burst=1280000 other_config:priority=2 other-config:max-rate={max} other-config:min-rate={min} \
-- --id=@q1 create queue other-config:burst=1280000 other_config:priority=1 other-config:max-rate={max} other-config:min-rate={min}
Проблема в том, что это создает странные конфигурации
class htb 1:1 parent 1:fffe prio 2 rate 500Mbit ceil 1Gbit burst 160000b cburst 160000b
class htb 1:fffe root rate 1Gbit ceil 1Gbit burst 1375b cburst 1375b
class htb 1:2 parent 1:fffe prio 1 rate 500Mbit ceil 1Gbit burst 160000b cburst 160000b
Обратите внимание, как у очереди родителя меньшие значения burst и cburst. Я пробовал слишком много команд, но не смог изменить это поведение.
Я попытался обновить burst и cburst очереди родителя позже с помощью этой команды
sudo tc class replace dev as1-eth2 parent 1: classid 1:fffe htb rate {min} ceil {max} burst 160000 cburst 160000
Это работает!! Но через несколько минут он вернется к старому значению!
Как преодолеть эту проблему?
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.5 LTS"
---------------------
$ uname -r
6.8.0-49-generic
--------------------------
$ ovs-vsctl --version
(Open vSwitch) 3.3.3
DB Schema 8.5.0
С уважением
Ответ или решение
Вопрос, который вы поднимаете, касается настройки качества обслуживания (QoS) в Open vSwitch (OVS) с использованием очередей. Основная проблема, с которой вы столкнулись, заключается в том, что значения burst
и cburst
у родительской очереди пересоздаются и не сохраняются после временного обновления, что создает конфликты в конфигурации. Давайте рассмотрим возможные решения данной ситуации.
1. Понимание проблемы
Ваши команды создают QoS-конфигурацию с использованием классического метода token bucket (HTB). Однако, после изменения конфигурации с помощью команды tc class replace
, значения параметров burst
и cburst
родительского класса возвращаются к прежним, неоптимальным значениям. Это происходит, скорее всего, из-за того, что Open vSwitch управляет очередями и параметрами QoS в своем внутреннем контексте, и данные, измененные через tc
, не сохраняются при следующем обновлении описания порта OVS.
2. Альтернативные подходы
2.1 Устойчивое изменение конфигурации
Существует несколько способов зафиксировать ваши изменения. Для начала, попробуйте установить параметры непосредственно в конфигурации OVS, чтобы избежать нежелательных возвратов к старым значениям:
ovs-vsctl -- set QoS {id} other-config:burst={new_burst} other-config:cburst={new_cburst}
2.2 Использование скриптов
Если ваши параметры должны регулярно изменяться или корректироваться, можно настроить автоматизированный скрипт на cron
, который будет периодически проверять и обновлять значение burst
и cburst
на состояние, соответствующее вашим требованиям.
Пример команды в скрипте:
#!/bin/bash
TARGET_BURST=160000
TARGET_CBURST=160000
current_burst=$(tc class show dev as1-eth2 classid 1:fffe | grep burst | awk '{print $4}')
if [ "$current_burst" -ne "$TARGET_BURST" ]; then
sudo tc class replace dev as1-eth2 parent 1: classid 1:fffe htb rate {min} ceil {max} burst $TARGET_BURST cburst $TARGET_CBURST
fi
3. Изучение системных логов
Также рекомендуется проверить системные логи и логи OVS на наличие ошибок или предупреждений, которые могли бы указывать на проблемы с применением структуры очередей. Это может дать полезные подсказки о том, почему значения меняются.
4. Проверка версий и обновлений
Будьте уверены, что вы используете последние стабильные версии OVS и ядра, так как ошибки в предыдущих версиях могут быть причиной неправильного управления QoS. Проверьте наличие обновлений для OVS и Ubuntu:
sudo apt update
sudo apt upgrade
5. Возвращение к классическому TC
Если проблема сохраняется, и Open vSwitch не справляется с вашей конфигурацией, рассмотрите использование традиционного инструмента tc
для настройки очередей и QoS в ядре Linux без использования OVS. Это может дать больше контроля и прозрачности над настройками.
Заключение
Проблемы, связанные с управлением параметрами QoS в OVS, требуют всестороннего подхода. Убедитесь, что вы используете верные команды и методы, проводите регулярные проверки вашей конфигурации, и рассматривайте автоматизацию для поддержания нужных значений в условиях динамичной среды. Если у вас возникают дополнительные вопросы или затруднения, могу помочь вам с их решением.