Jump to content
Калькуляторы

tc mirred egress

Всем привет
Имеется 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гбит/сек?
Вообще с чем может быть связано такое ограничение?

Edited by zervu1boris

Share this post


Link to post
Share on other sites

ip link show dev ifb1

 

Что показывает qlen?

Share this post


Link to post
Share on other sites
3 минуты назад, vop сказал:

ip link show dev ifb1

 

Что показывает qlen?

32
Я крутил это значение, ставил 100, 1000 - без результатов

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
56 минут назад, ne-vlezay80 сказал:

А что с шейпером на ifb0

Это происходит до добавления правил шейпера

Share this post


Link to post
Share on other sites
6 минут назад, zervu1boris сказал:

Это происходит до добавления правил шейпера

а ядро какое?

Share this post


Link to post
Share on other sites
3 минуты назад, ne-vlezay80 сказал:

а ядро какое?

3.10.0-1160.25.1.el7.x86_64

 

Share this post


Link to post
Share on other sites

На новых ядрах редирект можно делать так:
 

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

Edited by ne-vlezay80

Share this post


Link to post
Share on other sites
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, то всё нормально

Share this post


Link to post
Share on other sites
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. Может, с ядром что-то?

Share this post


Link to post
Share on other sites
1 минуту назад, ne-vlezay80 сказал:

У меня посему-то ничего не уперается, когда я направляю трафик на ifb. Правда делал я на veth и netns. Ядро у меня 5.12.14. Может, с ядром что-то?

Тоже думаю, что дело с ядром. Завтра подниму тестовый роутер с новым ядром и сделаю тесты

Share this post


Link to post
Share on other sites
В 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.
Но в полисере меня не всё устраивает, хотелось бы вернуться к шейперу...

Edited by zervu1boris

Share this post


Link to post
Share on other sites

А зачем вам ifb в шейпере?

Share this post


Link to post
Share on other sites
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.
Но в полисере меня не всё устраивает, хотелось бы вернуться к шейперу...

 

А что все-таки за конфиг? Не могли бы вы его показать?

Share this post


Link to post
Share on other sites
35 минут назад, vop сказал:

А зачем вам ifb в шейпере?

А что вместо него?

Share this post


Link to post
Share on other sites
3 часа назад, vop сказал:

А зачем вам ifb в шейпере?

Завернуть в него трафик от нескольких аплинков

 

2 часа назад, ne-vlezay80 сказал:

А что все-таки за конфиг? Не могли бы вы его показать?

Нет никакого конфига, ставлю чистый centos 7, выключаю iptables и NetworkManager, настраиваю статическую маршрутизацию, заворачиваю трафик с двух вланов в ifb0, генерю синтетический трафик.
Если два влана заворачиваю в разные ifb, то всё нормально, если в один ifb0, то появляется какое-то ограничение по пропускной способности.
Самое интересное, что ни на одном интефрейсе нет ни дропов ни ошибок, на коммутаторе аналогично - все счётчики показывают нули.
Такое ощущение, что в ядре есть какой-то параметр, который отвечает за это...

Share this post


Link to post
Share on other sites

Завтра попробую veth и netns, сейчас документацию изучаю...

Edited by zervu1boris

Share this post


Link to post
Share on other sites
6 hours ago, ne-vlezay80 said:

А что вместо него?

1. Классификация через ipset.

2. Виртуальный роутер через netns.

 

PS А, про nrtns уже написали.

Share this post


Link to post
Share on other sites
В 22.07.2021 в 00:16, ne-vlezay80 сказал:

У меня посему-то ничего не уперается, когда я направляю трафик на ifb. Правда делал я на veth и netns. Ядро у меня 5.12.14. Может, с ядром что-то?

Подскажите, пожалуйста, как вы это делали?
Никак не могу понять какая связь между ifb, veth и netns

Share this post


Link to post
Share on other sites
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?

 

А можно взглянуть подробнее на настройки всех интерфейсов и правила шейпера?

Edited by ne-vlezay80

Share this post


Link to post
Share on other sites
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?

Share this post


Link to post
Share on other sites
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'ы и завернуть в них трафик как я показал.

Edited by ne-vlezay80

Share this post


Link to post
Share on other sites
23 минуты назад, ne-vlezay80 сказал:

ничего не нужно. veth и netns я просто привёл в пример, чтобы показать, как у меня это устроено. Просто создать vlan'ы и завернуть в них трафик как я показал.

 

Я так и делал, возникает проблема с пропускной способностью
Думал можно как-то с помощью veth и netns решить...

Share this post


Link to post
Share on other sites

Я инициализировал тестовый 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  столько же.

Edited by ne-vlezay80

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this