ссылки:
1 2 3 4 |
https://www.openvswitch.org/ https://docs.openvswitch.org/en/latest/faq/issues/ https://www.openvswitch.org/support/dist-docs/ovs-vswitchd.conf.db.5.html https://docs.openvswitch.org/en/latest/intro/install/dpdk/ |
Информация о бридже:
1 2 3 |
ovs-vsctl show ovs-vsctl list port ovs-ofctl show ovsbr0 |
Создание бриджа и добавление сетевой карты:
1 2 3 4 |
ovs-vsctl add-br ovsbr0 ovs-vsctl add-port ovsbr0 eth0 ovs-vsctl add-port ovsbr0 eth1 ovs-vsctl add-port ovsbr0 wlan0 |
Назначение IP адреса на бридж:
1 2 3 |
ip addr flush dev eth0 ip addr add 192.168.128.5/24 dev ovsbr0 ip link set ovsbr0 up |
Создание бриджа ovsbr0 и сделать bond:
1 2 3 4 |
ovs-vsctl add-br ovsbr0 ovs-vsctl add-bond ovsbr0 bond0 eth0 eth1 #mode active-backup, balance-slb, or balance-tcp ovs-vsctl add-bond ovsbr0 bond0 eth1 eth2 bond_mode=active-backup |
Включить STP:
1 2 3 4 |
ovs-vsctl add-br ovsbr0 ovs-vsctl set bridge ovsbr0 stp_enable=true ovs-vsctl add-port ovsbr0 eth0 ovs-vsctl add-port ovsbr0 eth1 |
Создание внутреннего устройства:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
!!! так работать не будет: ## tunctl -t tap0 ## ip addr add 192.168.0.123/24 dev tap0 ## ip link set tap0 up ## ovs-vsctl add-br br0 ##ovs-vsctl add-port br0 tap0 Почему: Ответ в том, что Open vSwitch перехватывает только полученные пакеты, но это уже передаваемый пакет. То же самое происходит и со всеми остальными типами сетевых устройств, кроме «внутренних» портов Open vSwitch. Если вы, например, добавите физический порт Ethernet к мосту OVS, настроите IP-адрес на физическом порту Ethernet, а затем отправите «ping» на адрес в этой подсети, произойдет то же самое: ARP будет передан на физический порт Ethernet и Open vSwitch его никогда не видят. Обратите внимание, что в таком случае на «отводном» устройстве не настраивается IP-адрес (обычно IP-адрес настроен в виртуальном сетевом адаптере внутри виртуальной машины, но он не виден ядру хоста Linux или Open vSwitch). А вот так все заработает: ovs-vsctl add-br ovsbr0 ovs-vsctl add-port ovsbr0 int0 -- set Interface int0 type=internal ip addr add 192.168.0.123/24 dev int0 ip link set int0 up |
Потеря пакетов в начале тестов RFC2544
1 2 3 |
В случае OVS кэш очищается быстро, и чтобы учесть задержку генератора трафика между фазой обучения и тестирования, настройки максимального времени ожидания простоя следует изменить на 50000 мс: ovs-vsctl --no-wait set Open_vSwitch . other_config:max-idle=50000 |
MTU
1 2 3 4 5 |
Установить mtu: ovs-vsctl set int ovsbr0 mtu_request=1450 Вернуть mtu по умолчанию: ovs-vsctl set int br0 mtu_request=[] |
Добавление VLAN
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
Одним из больших плюсов работы с OpenVSwitch является поддержка VLAN. Для этого нужно обозначить теги на виртуальных портах и настроить сетевую карту как транковый интерфейс. Создадим новый виртуальный коммутатор: ovs-vsctl add-br ovsbr0 Добавляем реальную сетевую карту к виртуальному коммутатору: ovs-vsctl add-port ovsbr0 eth0 Делаем порт коммутатора транковым и описываем теги, которые будут проходить через коммутатор: ovs-vsctl set port eth0 trunks=10,20,300,400,1000 Добавляем виртуальный сетевой интерфейс и присваиваем ему тег: ovs-vsctl add-port ovsbr0 testvlan20 tag=20 -- set interface testvlan20 type=internal Теперь можно посмотреть конфигурацию: ovs-vsctl show Еще примеры: обычное использование без vlan: ovs-vsctl show - показывает информацию по свитчу, проверяем работу и заодно узнаем какая у нас версия ovs ovs-vsctl add-br br0 - добавляем свитч с именем br0 ovs-vsctl add-port br0 eth0 - добавляем интерфейс eth0 в свитч br0 пример с vlan: ovs-vsctl add-br ovs0 - добавляем свитч openvswitch с именем br0 ovs-vsctl add-port ovs0 eth0 - добавляем интерфейс eth0 в свитч ovs0 ovs-vsctl set port eth0 vlan_mode=native-untagged tag=2 trunks=2,3,4 - вешаем trunk на интерфейс eth0 ovs-vsctl add-port ovs0 ovs0-vlan2 tag=2 -- set Interface ovs0-vlan2 type=internal - добавляем порт и вешаем access (tag=2) на интерфейс ovs0-vlan2 ovs-vsctl add-port ovs0 ovs0-vlan4 tag=4 -- set Interface ovs0-vlan4 type=internal - добавляем порт и вешаем access (tag=4) на интерфейс ovs0-vlan2 ovs-vsctl add-port ovs0 ovs0-vlan3 tag=3 -- set Interface ovs0-vlan3 type=internal - добавляем порт и вешаем access (tag=3) на интерфейс ovs0-vlan2 ovs-vsctl set port ovsbr0 tag=29 удаление портов и коммутатора: ovs-vsctl del-port ovs0-vlan2 - удалить порт (ovs0-vlan2) из коммутатора ovs-vsctl del-br ovs0 - удалить коммутатор ovs0 |
Включение Netflow на виртуальном коммутаторе OpenVSwitch:
1 2 3 4 5 6 7 8 9 |
Если возникает необходимость вести учет сетевого трафика, проходящего через интерфейсы, то заставить OpenVSwitch отправлять пакеты Netflow на адрес коллектора можно одной командой: ovs-vsctl -- set Bridge ovsbr0 netflow=@nf -- --id=@nf create NetFlow targets="IP_ADDRESS:PORT" active-timeout=30 Изменить время: ovs-vsctl set Netflow ovsbr0 active_timeout=60 Чтобы прекратить отправлять данные на Netflow коллектор, достаточно очистить настройки Netflow для виртуального коммутатора: ovs-vsctl clear Bridge ovsbr0 netflow |
dpdk
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
Выделение памяти: numa0 mem: ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem="1024,0" или numa ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem="1024" Выделение процессоров: Установленный бит в маске означает, что поток pmd создается и закрепляется за соответствующим ядром ЦП. Например, чтобы запустить потоки pmd на ядрах 1 и 2: ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x6 Проверка доступности dpdk: ovs-vsctl get Open_vSwitch . dpdk_initialized Проверка версии ovs: ovs-vswitchd --version Проверка версии dpdk: ovs-vsctl get Open_vSwitch . dpdk_version "DPDK 17.11.0" Добавление сетевых карт в бридж ovs dpdk: ovs-vsctl add-br ovsbr0 -- set bridge br0 datapath_type=netdev ovs-vsctl add-port ovsbr0 eth0_name -- set Interface myportnameone type=dpdk options:dpdk-devargs=0000:06:00.0 ovs-vsctl add-port ovsbr0 eth1_name -- set Interface myportnametwo type=dpdk options:dpdk-devargs=0000:06:00.1 Очереди dpdk: ovs-vsctl set Interface <DPDK interface> options:n_rxq=<integer> ovs-vsctl set Interface dpdk0 options:n_rxq_desc=<integer> ovs-vsctl set Interface dpdk0 options:n_txq_desc=<integer> Различные конфигурации n_rxq_desc и n_txq_desc дают разные преимущества с точки зрения пропускной способности и задержки для разных сценариев. Как правило, меньшие размеры очередей могут оказать положительное влияние на задержку за счет пропускной способности. Обратное часто справедливо для очередей большего размера. Примечание. Увеличение количества дескрипторов rx, например. до 4096 может отрицательно повлиять на производительность из-за того, что могут использоваться невекторизованные функции DPDK rx. Это зависит от используемого драйвера, но справедливо для часто используемых драйверов DPDK i40e и ixgbe. |