Автор Тема: tc, режет неправильно исход.  (Прочитано 3657 раз)

Оффлайн DmitriyH

  • Давно тут
  • **
  • Сообщений: 44
    • Email
Заюзал tc, скрипт ниже, входящая скорость режется правильно на ip, исходящая режется в 4 раза от указанной, с чем связано может быть? Как вариант указывать большее значение rate на ingress в 4 раза не подходит :). Использую NAT

#!/bin/bash
/sbin/tc qdisc del dev enp2s1 root
/sbin/tc qdisc del dev enp2s1 ingress

/sbin/tc qdisc add dev enp2s1 root handle 1: cbq avpkt 1000 bandwidth 100mbit
/sbin/tc qdisc add dev enp2s1 handle ffff: ingress

/sbin/tc class add dev enp2s1 parent 1: classid 1:1 cbq rate 512kbit allot 1500 prio 5 bounded isolated
/sbin/tc filter add dev enp2s1 parent 1: protocol ip prio 16 u32 match ip dst 172.31.60.110 flowid 1:1
/sbin/tc qdisc add dev enp2s1 parent 1:1 sfq perturb 10
/sbin/tc filter add dev enp2s1 parent ffff: protocol ip prio 50 u32 match ip src 172.31.60.110 police rate 512kbit burst 10k flowid 1:1

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 104
Re: tc, режет неправильно исход.
« Ответ #1 : 04.12.2013 15:06:57 »
А у меня руки никак не дойдут довести это до конца... Уж думал, что я один такой, так как тишина по поводу проблемы. Похоже http://bugzilla.altlinux.org/29614 ?

И, соответственно, версия ядра и версия iproute2 какие ? И дистрибутив.
« Последнее редактирование: 04.12.2013 15:14:14 от asy »

Оффлайн taf

  • Начинающий
  • *
  • Сообщений: 2
Re: tc, режет неправильно исход.
« Ответ #2 : 04.12.2013 15:30:22 »
Шейпер на NAT'е имеет некоторые особенности, которые надо учитывать.

Самое гдавное правило - шейпер работает ТОЛЬКО на трафик, являющийся ИСХОДЯЩИМ для конкретного интерфейса.

Пример. Интерфейс eth0 - WAN, eth1 - LAN.

tc qdisc del dev eth1 root
tc qdisc del dev eth1 ingress
tc qdisc add dev eth1 root handle 2: prio
# заворачиваем приходящие из локальной сети пакеты на виртуальный интерфейс
tc qdisc add dev eth1 ingress
tc filter add dev eth1 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
#
В итоге, правила, задающие полосу для направления Интернет->локалка вешаем на интерфейс eth1, для локалка->Интернет - на ifb0

Ну и полисинг скорость регулирует так себе, в случае с ifb можно применять более аккуратные дисциплины, без дропов пакетов.
« Последнее редактирование: 04.12.2013 17:26:26 от Skull »

Оффлайн DmitriyH

  • Давно тут
  • **
  • Сообщений: 44
    • Email
Re: tc, режет неправильно исход.
« Ответ #3 : 05.12.2013 08:25:33 »
И, соответственно, версия ядра и версия iproute2 какие ? И дистрибутив.
дистр: ALT Linux 7.0.1  Centaurus (Pholus)
ядро: 3.8.13.4-std-def-alt1.M70P.2
ip: iproute2-ss130221

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 104
Re: tc, режет неправильно исход.
« Ответ #4 : 05.12.2013 11:29:31 »
Самое гдавное правило - шейпер работает ТОЛЬКО на трафик, являющийся ИСХОДЯЩИМ для конкретного интерфейса.
Так тут и беда. В какой-то момент оно перестало работать. В баге 29614 указаны два ядра, с одним работает, с другим - нет. И там есть ссылка на расылку с небольшим описанием истории. Стденд сделать для проверки руки так и не дошли за два года, как наткнулся, просто, где надо, использую старое ядро.

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 104
Re: tc, режет неправильно исход.
« Ответ #5 : 05.12.2013 11:50:07 »
дистр: ALT Linux 7.0.1  Centaurus (Pholus)
ядро: 3.8.13.4-std-def-alt1.M70P.2
ip: iproute2-ss130221
Думаю, стоит проверить iproute2 и std-def из Сизифа, потом повесить баг.

apt-repo rm all
apt-repo add sisyphus
apt-get update
update-kernel - вот тут посмотреть, не потащит ли что-то кроме ядра и модулей. У меня сейчас не потащило, но у меня нет видеодрайверов там, где p7 есть.
apt-get install iproute2 - потащит за собой libnetlink. Пакеты iproute2 и libnetlink из p7 следует приготовить для отката заранее, если они ещё не лежат в /var/cache/apt. Для отката их можно установить посредством rpm -U --force <пакет1> <пакет2> (указывать целиком имя файла).
apt-repo rm all
apt-repo add p7
Последние две команды - чтобы не забыть и не понаставить лишнего из Сизифа потом.

Если проблема осталась, вешать баг в багзилле на Сизиф, если нет, на p7.

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 104
Re: tc, режет неправильно исход.
« Ответ #6 : 18.04.2016 10:34:02 »
Махнул рукой и обновил до p7. Шейпер не сломался. Баг 29614 закрыл тоже.

iproute2-3.8.0-alt1
kernel-image-std-def-3.14.65-alt0.M70P.1

UPD: Похоже, источник проблемы и решение нашлись: особенность поведения новых драйверов ethernet. Как минимум, касается Intel e1000e.
« Последнее редактирование: 12.11.2016 10:44:32 от asy »