# Настройка QoS в Open vSwitch

**Данная инструкция описывает процесс настройки ограничений пропускной способности (QoS) для SAN-VLAN и основной сети на базе <span class="s1">Open vSwitch (OVS)</span>.**

**Используется драйвер очередей <span class="s1">linux-htb</span>, позволяющий задавать максимальные скорости на уровне портов.**

### **🟦 1. Ограничение пропускной способности SAN-порта (VLAN 25)**

##### **1.1. Создать очередь с максимальной скоростью 4.2 Гбит/с**

```bash
ovs-vsctl -- --id=@q0 create queue other-config:max-rate=4509715661 \
          -- --id=@qos create qos type=linux-htb other-config:max-rate=4509715661 queues:0=@q0 \
          -- set port san25 qos=@qos
```

В этой команде выполняется сразу три действия:

- создаётся очередь <span class="s1">**q0**</span> с лимитом **4 509 715 661<span class="s1"> бит/с</span>**;
- создаётся объект QoS, привязанный к этой очереди;
- QoS назначается на порт <span class="s1">san25</span> (внутренний порт VLAN 25).

##### **1.2. Проверка конфигурации SAN-QoS**

Показать все политики QoS:

```bash
ovs-vsctl list qos
```

Показать все очереди:

```bash
ovs-vsctl list queue
```

Проверить настройки порта SAN-VLAN:

```bash
ovs-vsctl list port san25
```

## **2. Ограничение пропускной способности основной сети (vmbr0)**

Для всех остальных сетей задаётся ограничение <span class="s1">**1 Гбит/с**</span>.

##### **2.1. Создать очередь и назначить QoS на vmbr0**

```bash
ovs-vsctl -- --id=@q1 create queue other-config:max-rate=1073741824 \
          -- --id=@qos1 create qos type=linux-htb other-config:max-rate=1073741824 queues:0=@q1 \
          -- set port vmbr0 qos=@qos1
```

Создаётся:

- <span class="s1">очередь </span>**q1**<span class="s1"> с лимитом **1 073 741 824**</span> **бит/с**<span class="s1">;</span>
- объект QoS с тем же ограничением;
- привязка QoS к порту <span class="s1">vmbr0</span>.

##### **2.2. Проверка конфигурации QoS для vmbr0**

Просмотр параметров порта:

```bash
ovs-vsctl list port vmbr0
```

Список QoS-объектов:

```bash
ovs-vsctl list qos
```

Список очередей:

```bash
ovs-vsctl list queue
```

### **3. Скрипт для автозапуска qos**

<span class="s1">расположение </span>/usr/local/sbin/ovs-qos.sh<span class="s1">:</span>

```bash

#!/bin/bash
#Основной вариант
# Ожидание запуска Open vSwitch
for i in {1..10}; do
    ovs-vsctl show >/dev/null 2>&1 && break
    echo "OVS not ready, retrying..."
    sleep 2
done

# Если OVS так и не поднялся — выход
ovs-vsctl show >/dev/null 2>&1 || exit 1

# Проверка: существует ли уже QoS на san25
EXIST_SAN=$(ovs-vsctl get port san25 qos 2>/dev/null)
if [[ "$EXIST_SAN" == "[]" ]]; then
    echo "Applying QoS for san25..."
    ovs-vsctl -- --id=@q0 create queue other-config:max-rate=4509715661 \
        -- --id=@qos create qos type=linux-htb other-config:max-rate=4509715661 queues:0=@q0 \
        -- set port san25 qos=@qos
fi

# Проверка: существует ли QoS на vmbr0
EXIST_MGMT=$(ovs-vsctl get port vmbr0 qos 2>/dev/null)
if [[ "$EXIST_MGMT" == "[]" ]]; then
    echo "Applying QoS for vmbr0..."
    ovs-vsctl -- --id=@q1 create queue other-config:max-rate=1073741824 \
        -- --id=@qos1 create qos type=linux-htb other-config:max-rate=1073741824 queues:0=@q1 \
        -- set port vmbr0 qos=@qos1
fi

exit 0




```

```bash
#-------------------------------------------------------------------------------------------
#или этот

#!/bin/bash
# Скрипт для применения QoS к портам OVS после перезагрузки

# QoS для SAN сети
ovs-vsctl -- --id=@q0 create queue other-config:max-rate=4509715661 \
          -- --id=@qos create qos type=linux-htb other-config:max-rate=4509715661 queues:0=@q0 \
          -- set port san25 qos=@qos

# QoS для management сети
ovs-vsctl -- --id=@q1 create queue other-config:max-rate=1073741824 \
          -- --id=@qos1 create qos type=linux-htb other-config:max-rate=1073741824 queues:0=@q1 \
          -- set port vmbr0 qos=@qos1

exit 0
```

Сделаем скрипт исполняемым

<span class="s1">chmod +x /usr/local/sbin/ovs-qos.sh</span>

##### **3.1. Создаём systemd unit**

<span class="s1">Файл: </span>/etc/systemd/system/ovs-qos.service

```bash
[Unit]
Description=Apply OVS QoS after boot
After=network.target openvswitch-switch.service
Requires=openvswitch-switch.service

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/ovs-qos.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
```

##### **3.2. Включаем автозапуск**

```bash
systemctl daemon-reload
systemctl enable ovs-qos.service
systemctl start ovs-qos.service
```