1boris Опубликовано 21 июля, 2021 (изменено) · Жалоба Всем привет Имеется 10G интерфейс с двумя вланами 100 и 200. Возможно ли завернуть трафик с двух интерфейсов eth0.100 и eth0.200 в ifb0? Делаю: tc qdisc add dev eth0.100 handle ffff: ingress tc qdisc add dev eth0.200 handle ffff: ingress tc filter add dev eth0.100 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0 tc filter add dev eth0.200 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0 Трафик заворачивается, но на ifb0 трафик упирается в 1гбит/сек (если суммарная нагрузка на eth0.100 и eth0.200 больше 1гбита/сек) Ресурсов вроде хватает, прерывания по ядрам раскиданы, нагрузка на процессор около 3% Пробовал завернуть eth0.100 в ifb0, а eth0.200 в ifb1. В данном случае всё упирается в 1гбит на ifb0 и 1гбит на ifb1, но в сумме уже 2гбита/сек. Возможно ли завернуть трафик с разных вланов в ifb0 и преодолеть ограничение в 1гбит/сек? Вообще с чем может быть связано такое ограничение? Изменено 21 июля, 2021 пользователем zervu1boris Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vop Опубликовано 21 июля, 2021 · Жалоба ip link show dev ifb1 Что показывает qlen? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
1boris Опубликовано 21 июля, 2021 · Жалоба 3 минуты назад, vop сказал: ip link show dev ifb1 Что показывает qlen? 32 Я крутил это значение, ставил 100, 1000 - без результатов Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 21 июля, 2021 · Жалоба 3 часа назад, zervu1boris сказал: Всем привет Имеется 10G интерфейс с двумя вланами 100 и 200. Возможно ли завернуть трафик с двух интерфейсов eth0.100 и eth0.200 в ifb0? Делаю: tc qdisc add dev eth0.100 handle ffff: ingress tc qdisc add dev eth0.200 handle ffff: ingress tc filter add dev eth0.100 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0 tc filter add dev eth0.200 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0 Трафик заворачивается, но на ifb0 трафик упирается в 1гбит/сек (если суммарная нагрузка на eth0.100 и eth0.200 больше 1гбита/сек) Ресурсов вроде хватает, прерывания по ядрам раскиданы, нагрузка на процессор около 3% Пробовал завернуть eth0.100 в ifb0, а eth0.200 в ifb1. В данном случае всё упирается в 1гбит на ifb0 и 1гбит на ifb1, но в сумме уже 2гбита/сек. Возможно ли завернуть трафик с разных вланов в ifb0 и преодолеть ограничение в 1гбит/сек? Вообще с чем может быть связано такое ограничение? А что с шейпером на ifb0 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
1boris Опубликовано 21 июля, 2021 · Жалоба 56 минут назад, ne-vlezay80 сказал: А что с шейпером на ifb0 Это происходит до добавления правил шейпера Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 21 июля, 2021 · Жалоба 6 минут назад, zervu1boris сказал: Это происходит до добавления правил шейпера а ядро какое? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
1boris Опубликовано 21 июля, 2021 · Жалоба 3 минуты назад, ne-vlezay80 сказал: а ядро какое? 3.10.0-1160.25.1.el7.x86_64 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 21 июля, 2021 (изменено) · Жалоба На новых ядрах редирект можно делать так: tc qdisc add dev eth0 handle ffff: ingress tc filter add dev eth0 parent ffff: protocol 802.1Q flower vlan id 100 action mirred egress resirect dev ifb0 tc filter add dev eth0 parent ffff: protocol 802.1Q flower vlan id 200 action mirred egress resirect dev ifb0 15 минут назад, zervu1boris сказал: 3.10.0-1160.25.1.el7.x86_64 Могу подобное попробывать сделать на veth Изменено 21 июля, 2021 пользователем ne-vlezay80 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 21 июля, 2021 · Жалоба у меня всё работает Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
1boris Опубликовано 21 июля, 2021 · Жалоба 2 часа назад, ne-vlezay80 сказал: На новых ядрах редирект можно делать так: tc qdisc add dev eth0 handle ffff: ingress tc filter add dev eth0 parent ffff: protocol 802.1Q flower vlan id 100 action mirred egress resirect dev ifb0 tc filter add dev eth0 parent ffff: protocol 802.1Q flower vlan id 200 action mirred egress resirect dev ifb0 Могу подобное попробывать сделать на veth 1)Сделал как вы написали, на ifb0 трафик упёрся в 1гбит/сек, нагрузка на процессор примерно 3% 2)На всякий случай ещё раз увеличил txqueuelen на ifb0 до 1000, трафик упёрся в 1.6гбит/сек, нагрузка на процессор поднялась до 80% 3)На ifb0 и ifb1 установил txqueuelen = 32 (по дефолту) eth0.100 направил в ifb0, а eth0.200 в ifb1 И там и там нагрузка примерно 1гбит/сек, нагрузка на процессор 1% Когда трафик летит с разных вланов в разные ifb, то всё нормально Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 21 июля, 2021 · Жалоба 2 минуты назад, zervu1boris сказал: 1)Сделал как вы написали, на ifb0 трафик упёрся в 1гбит/сек, нагрузка на процессор примерно 3% 2)На всякий случай ещё раз увеличил txqueuelen на ifb0 до 1000, трафик упёрся в 1.6гбит/сек, нагрузка на процессор поднялась до 80% 3)На ifb0 и ifb1 установил txqueuelen = 32 (по дефолту) eth0.100 направил в ifb0, а eth0.200 в ifb1 И там и там нагрузка примерно 1гбит/сек, нагрузка на процессор 1% Когда трафик летит с разных вланов в разные ifb, то всё нормально У меня посему-то ничего не уперается, когда я направляю трафик на ifb. Правда делал я на veth и netns. Ядро у меня 5.12.14. Может, с ядром что-то? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
1boris Опубликовано 21 июля, 2021 · Жалоба 1 минуту назад, ne-vlezay80 сказал: У меня посему-то ничего не уперается, когда я направляю трафик на ifb. Правда делал я на veth и netns. Ядро у меня 5.12.14. Может, с ядром что-то? Тоже думаю, что дело с ядром. Завтра подниму тестовый роутер с новым ядром и сделаю тесты Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
1boris Опубликовано 23 июля, 2021 (изменено) · Жалоба В 22.07.2021 в 00:16, ne-vlezay80 сказал: У меня посему-то ничего не уперается, когда я направляю трафик на ifb. Правда делал я на veth и netns. Ядро у меня 5.12.14. Может, с ядром что-то? Пробовал разные ядра от 3.10 до 5.13, разницы никакой. Начал экспериментировать с разным железом: 1)На сервере с двумя AMD Opteron 6172, на котором прерывания раскиданы на шесть ядер одной нума ноды, трафик упирается в 1 гбит/сек 2)На сервере с четырьмя Intel Xeon x7560, на котором прерывания раскиданы на восемь ядер одного процессора, трафик упирается в 1.5 гбит/сек 3)На 2 ядерном тазике i3-3220, на котором прерывания раскиданы между двумя ядрами, трафик упирается в 1.8 гбит/сек Во всех тестах были одинаковые условия, но разное железо: 1)На все сервера ставил сетевую x520 2)На всех серверах стояла одна и та же ОС, с одним и тем же ядром и с настройками из коробки 3)Генерил один и тот же синтетический трафик для каждого сервера Не понимаю почему 2-ядерный тазик показывает наилучший результат. Пробовал на нём в два раза урезать частоту процессора и частоту озу, показывает всё те же 1.8гбит/сек. Если не заворачивать трафик в ifb, то Opteron 6172 и Xeon x7560 спокойной пропускают через себя 10гбит/сек. Данная проблема у меня возникла ещё год назад, тогда не было времени разбираться с ней, и я перешёл на полисер ipt-ratelimit. Но в полисере меня не всё устраивает, хотелось бы вернуться к шейперу... Изменено 23 июля, 2021 пользователем zervu1boris Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vop Опубликовано 23 июля, 2021 · Жалоба А зачем вам ifb в шейпере? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 23 июля, 2021 · Жалоба 31 минуту назад, zervu1boris сказал: Пробовал разные ядра от 3.10 до 5.13, разницы никакой. Начал экспериментировать с разным железом: 1)На сервере с двумя AMD Opteron 6172, на котором прерывания раскиданы на шесть ядер одной нума ноды, трафик упирается в 1 гбит/сек 2)На сервере с четырьмя Intel Xeon x7560, на котором прерывания раскиданы на восемь ядер одного процессора, трафик упирается в 1.5 гбит/сек 3)На 2 ядерном тазике i3-3220, на котором прерывания раскиданы между двумя ядрами, трафик упирается в 1.8 гбит/сек Во всех тестах были одинаковые условия, но разное железо: 1)На все сервера ставил сетевую x520 2)На всех серверах стояла одна и та же ОС, с одним и тем же ядром и с настройками из коробки 3)Генерил один и тот же синтетический трафик для каждого сервера Не понимаю почему 2-ядерный тазик показывает наилучший результат. Пробовал на нём в два раза урезать частоту процессора и частоту озу, показывает всё те же 1.8гбит/сек. Если не заворачивать трафик в ifb, то Opteron 6172 и Xeon x7560 спокойной пропускают через себя 10гбит/сек. Данная проблема у меня возникла ещё год назад, тогда не было времени разбираться с ней, и я перешёл на полисер ipt-ratelimit. Но в полисере меня не всё устраивает, хотелось бы вернуться к шейперу... А что все-таки за конфиг? Не могли бы вы его показать? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 23 июля, 2021 · Жалоба 35 минут назад, vop сказал: А зачем вам ifb в шейпере? А что вместо него? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
1boris Опубликовано 23 июля, 2021 · Жалоба 3 часа назад, vop сказал: А зачем вам ifb в шейпере? Завернуть в него трафик от нескольких аплинков 2 часа назад, ne-vlezay80 сказал: А что все-таки за конфиг? Не могли бы вы его показать? Нет никакого конфига, ставлю чистый centos 7, выключаю iptables и NetworkManager, настраиваю статическую маршрутизацию, заворачиваю трафик с двух вланов в ifb0, генерю синтетический трафик. Если два влана заворачиваю в разные ifb, то всё нормально, если в один ifb0, то появляется какое-то ограничение по пропускной способности. Самое интересное, что ни на одном интефрейсе нет ни дропов ни ошибок, на коммутаторе аналогично - все счётчики показывают нули. Такое ощущение, что в ядре есть какой-то параметр, который отвечает за это... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
1boris Опубликовано 23 июля, 2021 (изменено) · Жалоба Завтра попробую veth и netns, сейчас документацию изучаю... Изменено 23 июля, 2021 пользователем zervu1boris Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vop Опубликовано 23 июля, 2021 · Жалоба 6 hours ago, ne-vlezay80 said: А что вместо него? 1. Классификация через ipset. 2. Виртуальный роутер через netns. PS А, про nrtns уже написали. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
1boris Опубликовано 24 июля, 2021 · Жалоба В 22.07.2021 в 00:16, ne-vlezay80 сказал: У меня посему-то ничего не уперается, когда я направляю трафик на ifb. Правда делал я на veth и netns. Ядро у меня 5.12.14. Может, с ядром что-то? Подскажите, пожалуйста, как вы это делали? Никак не могу понять какая связь между ifb, veth и netns Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 24 июля, 2021 (изменено) · Жалоба 4 часа назад, zervu1boris сказал: Подскажите, пожалуйста, как вы это делали? Никак не могу понять какая связь между ifb, veth и netns 4 часа назад, zervu1boris сказал: Подскажите, пожалуйста, как вы это делали? tc qdiac add dev vlan100 parent ffff: ingress tc filter add dev vlan100 parent ffff: matchall action mirred egress redirect dev ifb0 tc qdiac add dev vlan101 parent ffff: ingress tc filter add dev vlan101 parent ffff: matchall action mirred egress redirect dev ifb0 vlan'ы созданны на veth в netns? А можно взглянуть подробнее на настройки всех интерфейсов и правила шейпера? Изменено 24 июля, 2021 пользователем ne-vlezay80 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
1boris Опубликовано 24 июля, 2021 · Жалоба 7 минут назад, ne-vlezay80 сказал: tc qdiac add dev vlan100 parent ffff: ingress tc filter add dev vlan100 parent ffff: matchall action mirred egress redirect dev ifb0 tc qdiac add dev vlan101 parent ffff: ingress tc filter add dev vlan101 parent ffff: matchall action mirred egress redirect dev ifb0 vlan'ы созданны на veth в netns? Нужно перенести vlan`ы в netns? ip link set eth0.100 netns test ip link set eth0.200 netns test Или можно каким-то образом с помощью veth пробросить vlan`ы в netns? Ничего кроме создания пары veth и проброса одного из них в netns я не нашёл: ip link add dev virt0 type veth peer name virt1 ip link set virt1 netns test ifb0 тоже нужно перенести в netns? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 24 июля, 2021 (изменено) · Жалоба 5 минут назад, zervu1boris сказал: Нужно перенести vlan`ы в netns? ip link set eth0.100 netns test ip link set eth0.200 netns test Или можно каким-то образом с помощью veth пробросить vlan`ы в netns? Ничего кроме создания пары veth и проброса одного из них в netns я не нашёл: ip link add dev virt0 type veth peer name virt1 ip link set virt1 netns test ifb0 тоже нужно перенести в netns? ничего не нужно. veth и netns я просто привёл в пример, чтобы показать, как у меня это устроено. Просто создать vlan'ы и завернуть в них трафик как я показал. Изменено 24 июля, 2021 пользователем ne-vlezay80 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
1boris Опубликовано 24 июля, 2021 · Жалоба 23 минуты назад, ne-vlezay80 сказал: ничего не нужно. veth и netns я просто привёл в пример, чтобы показать, как у меня это устроено. Просто создать vlan'ы и завернуть в них трафик как я показал. Я так и делал, возникает проблема с пропускной способностью Думал можно как-то с помощью veth и netns решить... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
ne-vlezay80 Опубликовано 24 июля, 2021 (изменено) · Жалоба Я инициализировал тестовый namespace так: ip netns add router ip netns add host1 ip netns add host2 ip netns add host3 ip netns add host4 ip link add bridge0 up mtu 16384 type bridge ageing_time 0 ip link add dev ns-router.0 up mtu 16384 master bridge0 type veth peer name eth0 netns router mtu 16384 ip link add dev ns-host1.0 up mtu 16384 master bridge0 type veth peer name eth0 netns host1 mtu 16384 ip link add dev ns-host2.0 up mtu 16384 master bridge0 type veth peer name eth0 netns host2 mtu 16384 ip link add dev ns-host3.0 up mtu 16384 master bridge0 type veth peer name eth0 netns host3 mtu 16384 ip link add dev ns-host4.0 up mtu 16384 master bridge0 type veth peer name eth0 netns host4 mtu 16384 tc qdisc add dev ns-host1.0 ingress tc qdisc add dev ns-host2.0 ingress tc qdisc add dev ns-host3.0 ingress tc qdisc add dev ns-host4.0 ingress tc qdisc add dev ns-host1.0 handle 1: htb default 10 tc qdisc add dev ns-host1.0 handle 1: root htb default 10 tc qdisc add dev ns-host2.0 handle 1: root htb default 10 tc qdisc add dev ns-host3.0 handle 1: root htb default 10 tc qdisc add dev ns-host4.0 handle 1: root htb default 10 ip link set dev bridge0 type bridge max_age 0 tc filter add dev ns-host1.0 ingress matchall action vlan push id 100 tc filter add dev ns-host2.0 ingress matchall action vlan push id 101 tc filter add dev ns-host3.0 ingress matchall action vlan push id 103 tc filter add dev ns-host4.0 ingress matchall action vlan push id 104 tc filter add dev ns-host1.0 parent 1: prio 1 protocol 802.1Q flower vlan id 100 action vlan pop help tc filter add dev ns-host1.0 parent 1: prio 1 protocol 802.1Q flower vlan_id 100 action vlan pop help tc filter add dev ns-host1.0 parent 1: prio 1 protocol 802.1Q flower vlan_id 100 action vlan pop goto chain 1 tc filter add dev ns-host2.0 parent 1: prio 1 protocol 802.1Q flower vlan_id 101 action vlan pop goto chain 1 tc filter add dev ns-host3.0 parent 1: prio 1 protocol 802.1Q flower vlan_id 102 action vlan pop goto chain 1 tc filter add dev ns-host4.0 parent 1: prio 1 protocol 802.1Q flower vlan_id 103 action vlan pop goto chain 1 ip netns exec router bash tc filter del dev ns-host3.0 ingress tc filter del dev ns-host4.0 ingress tc filter add dev ns-host3.0 ingress matchall action vlan push id 102 tc filter add dev ns-host4.0 ingress matchall action vlan push id 103 ip netns exec router iperf3 -s tc filter add dev ns-host1.0 parent 1: prio 65535 protocol all matchall protocol drop tc filter add dev ns-host1.0 parent 1: prio 65535 protocol all matchall action drop tc filter add dev ns-host2.0 parent 1: prio 65535 protocol all matchall action drop tc filter add dev ns-host3.0 parent 1: prio 65535 protocol all matchall action drop tc filter add dev ns-host4.0 parent 1: prio 65535 protocol all matchall action drop Теперь виртуальный роутер: ip link set dev eth0 up echo 1 >/proc/sys/net/ipv4/conf/all/forwarding echo 1 >/proc/sys/net/ipv6/conf/all/forwarding ip link add link eth0 name vlan100 type vlan id 100 ip link add link eth0 name vlan101 type vlan id 101 ip link add link eth0 name vlan102 type vlan id 102 ip link add link eth0 name vlan103 type vlan id 103 ip link set dev vlan100 up ip link set dev vlan101 up ip link set dev vlan102 up ip link set dev vlan103 up ip addr add 169.254.255.255/32 dev vlan100 ip addr add 169.254.255.255/32 dev vlan101 ip addr add 169.254.255.255/32 dev vlan102 ip addr add 169.254.255.255/32 dev vlan103 ip route add 172.16.1.250/32 dev vlan100 ip route add 172.16.1.251/32 dev vlan101 ip route add 172.16.1.252/32 dev vlan102 ip route add 172.16.1.253/32 dev vlan103 tc filter del dev ns-host3.0 ingress tc filter del dev ns-host3.0 ingress ip link set dev ifb0 ip link add dev ifb0 up mtu 16384 type ifb tc qdisc add dev vlan100 ingress matchall action mirred egress redirect dev ifb0 tc filter add dev vlan100 ingress matchall action mirred egress redirect dev ifb0 tc filter add dev vlan100 ingress tc qdisc add dev vlan100 ingress tc qdisc add dev vlan101 ingress tc qdisc add dev vlan102 ingress tc qdisc add dev vlan103 ingress tc filter add dev vlan100 ingress matchall action mirred egress redirect dev ifb0 tc filter add dev vlan101 ingress matchall action mirred egress redirect dev ifb0 tc filter add dev vlan102 ingress matchall action mirred egress redirect dev ifb0 tc filter add dev vlan103 ingress matchall action mirred egress redirect dev ifb0 tc filter add dev vlan104 ingress matchall action mirred egress redirect dev ifb0 Скорость: root@live:/home/live# iperf3 -c 172.16.1.253 Connecting to host 172.16.1.253, port 5201 [ 5] local 172.16.1.251 port 36768 connected to 172.16.1.253 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 1.49 GBytes 12.8 Gbits/sec 16 447 KBytes [ 5] 1.00-2.00 sec 1.51 GBytes 13.0 Gbits/sec 0 447 KBytes [ 5] 2.00-3.00 sec 1.48 GBytes 12.7 Gbits/sec 1 447 KBytes [ 5] 3.00-4.00 sec 1.48 GBytes 12.7 Gbits/sec 0 447 KBytes [ 5] 4.00-5.00 sec 1.45 GBytes 12.4 Gbits/sec 0 447 KBytes [ 5] 5.00-6.00 sec 1.52 GBytes 13.0 Gbits/sec 0 447 KBytes [ 5] 6.00-7.00 sec 1.51 GBytes 13.0 Gbits/sec 0 590 KBytes [ 5] 7.00-8.00 sec 1.49 GBytes 12.8 Gbits/sec 3 590 KBytes [ 5] 8.00-9.00 sec 1.43 GBytes 12.3 Gbits/sec 0 590 KBytes [ 5] 9.00-10.00 sec 1.46 GBytes 12.5 Gbits/sec 18 590 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 14.8 GBytes 12.7 Gbits/sec 38 sender [ 5] 0.00-10.00 sec 14.8 GBytes 12.7 Gbits/sec receiver iperf Done. Без IFB столько же. Изменено 24 июля, 2021 пользователем ne-vlezay80 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...