LINUX.ORG.RU
ФорумAdmin

Сверхкриво работает приоритизация tc


0

0

Софтвейный роутер. Использую tc для приоритизации трафика. В идеале: работает торрент или ещё что-то, жрёт весь канал, как только пошел пакет по icmp, web или udp - на весь другой трафик сразу забиваем и обслуживаем только этот (icmp, web или udp) (или отдаём ему 90-95% канала). Используется pptp для доступа в инет. ppp0 - для доступа в инет (12мбит, со скачками до 15), eth1 - кабель провайдера, через него идёт ppp0, eth0 - локалка. Маны по tc (из набора iproute2) читал, просто htb, prio, tbf, sqf, встроенный fifo тоже (поэтому не тыкать меня в статьи на манулы). При текущем скрипте (ниже) всё работает идеально только первую минуту-две (после страрта торрента и набора полной скорости), производительность web тестирую через speetest.net. Через минуты 3 от старта торрентов уже результаты спидтеста скатываются к 5-8мбитам (чем дальше, тем меньше), через 5 минут примерно уже вообще 1-2 мбита, причём к концу теста до 4 поднимается, а через 2-4 минуты после этого меньше мегабита вообще и почти не поднимается. В общем ^%$# !!! Скрипт взят из одного бложека хабры, немного модифицирован, ибо изначально там вообще приоритизация почти не работала. Полностью обственные «творения» тоже были, но работали только чуть лучше. Так что вот этот злосчастный скрипт:

#!/bin/bash

#«Очищаем» интерфейс eht0

/sbin/tc qdisc del dev eth0 root

#Создаем заново дисциплину и указываем дефолтный класс

/sbin/tc qdisc add dev eth0 root handle 1: htb default 15 r2q 1

#Создаем общий для клиентов класс

/sbin/tc class add dev eth0 parent 1: classid 1:1 htb rate 13Mbit ceil 13Mbit burst 15k quantum 1

#Создаем корневой класс клиента

/sbin/tc class add dev eth0 parent 1:1 classid 1:10 htb rate 13Mbit ceil 13Mbit burst 15k

#Создаем 4 подкласса для каждого из видов трафика

/sbin/tc class add dev eth0 parent 1:10 classid 1:11 htb rate 13Mbit ceil 13Mbit prio 0 burst 150k

/sbin/tc class add dev eth0 parent 1:10 classid 1:12 htb rate 13Mbit ceil 13Mbit prio 3 burst 150k

/sbin/tc class add dev eth0 parent 1:10 classid 1:13 htb rate 13Mbit ceil 13Mbit prio 0 burst 150k

/sbin/tc class add dev eth0 parent 1:10 classid 1:14 htb rate 1kbit ceil 13Mbit prio 9999 burst 1k cburst 1k

/sbin/tc class add dev eth0 parent 1:10 classid 1:15 htb rate 1kbit ceil 13Mbit prio 9999 burst 1k cburst 1k

#Создаем дисциплины шейпирования для конечных классов (закомментированна часть - это то, что я пробывал первоначально, ещё htb для конечных классов пробывал)

#/sbin/tc qdisc add dev eth0 parent 1:11 handle 11: sfq perturb 1

#/sbin/tc qdisc add dev eth0 parent 1:12 handle 12: sfq perturb 1

#/sbin/tc qdisc add dev eth0 parent 1:13 handle 13: sfq perturb 1

#/sbin/tc qdisc add dev eth0 parent 1:14 handle 14: sfq perturb 1

#/sbin/tc qdisc add dev eth0 parent 1:15 handle 15: sfq perturb 1

/sbin/tc qdisc add dev eth0 parent 1:11 handle 11: htb

/sbin/tc qdisc add dev eth0 parent 1:12 handle 12: htb

/sbin/tc qdisc add dev eth0 parent 1:13 handle 13: htb

/sbin/tc qdisc add dev eth0 parent 1:14 handle 14: tbf rate 13000kbit latency 1ms burst 2000

/sbin/tc qdisc add dev eth0 parent 1:15 handle 15: tbf rate 13000kbit latency 1ms burst 2000

#Создаем 4 фильтра, для каждого из видов трафика

/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip protocol 1 0xff flowid 1:11

/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 2 u32 match ip protocol 17 0xff flowid 1:12

/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 3 u32 match ip protocol 6 0xff match ip sport 80 0xffff flowid 1:13

/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 4 u32 match ip dst 192.168.4.0/24 flowid 1:14

Предполагаю, что в каком-то месте начинает создаваться очередь, а потом она становится настолько эпических масштабов, что только она (а следовательно и только торрент) обслуживается нормально. И htb приоритизует уж очень криво обычно (мягкая приоритизация !??????).

☆☆☆

Последнее исправление: ktulhu666 (всего исправлений: 1)

Из всего этого не видно, как ты отделяешь web-трафик от остального.
Торрент-трафик запросто может быть и web-трафиком.
И без ipp2p (или подобных классификаторов) ты его никак не выделишь.
Когда-то давно поступал так: маркировал пакеты, относящиеся к p2p, и давал им соответствующий приоритет, а то и просто выделял фиксированную полосу.

Myp3ik ★★
()
Ответ на: комментарий от Myp3ik

да, тут я считаю web-трафиком любой, который к 80-порту обращается. поэтому я смотрел, чтобы торрент не использовал пиры с 80 портом открытым (да их и не было). так что проблема, в любом случае, не в фильтрах.

ktulhu666 ☆☆☆
() автор топика
Ответ на: комментарий от ktulhu666

>/sbin/tc class add dev eth0 parent 1:1 classid 1:10 htb rate 13Mbit ceil 13Mbit burst 15k

#Создаем 4 подкласса для каждого из видов трафика

/sbin/tc class add dev eth0 parent 1:10 classid 1:11 htb rate 13Mbit ceil 13Mbit prio 0 burst 150k


/sbin/tc class add dev eth0 parent 1:10 classid 1:12 htb rate 13Mbit ceil 13Mbit prio 3 burst 150k


/sbin/tc class add dev eth0 parent 1:10 classid 1:13 htb rate 13Mbit ceil 13Mbit prio 0 burst 150k



ну если советовать «что-нибудь», то меня очень напряг данный участок, когда к классу в 13 Мбит, строятся 3 класса, каждый из которых имеет 13 гарантированных Мбит, должно вести себя очень странно.

slavad
()
Ответ на: комментарий от slavad

гм... почему? если udp и icmp я почти никогда не передаю (только пинги вручную и скайп 6-7 раз в месяц)? и тут ceil такой сделан специально для того, чтобы задавить всесь останой трафик (который не на 80 порт, не udp, не icmp)

ktulhu666 ☆☆☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.