Привет всем. У меня возникла проблема с настройкой НТВ для локальной сети. Суть вот в чём: сам НТВ работает и делит полосу пропускания канала как следует, но при перераспределении полос получается небольшая задержка (порядка 1-2 сек), в результате чего он-лайновая игрушка LineAge III тормозит. Также подозреваю (но не уверен) что происходит и некоторая потеря пакетов. Траффик игрушки имеет приоритет выше чем остальной траффик (кроме интерактивного, типа SSH, а он мало потребляет и вообще мало используется), но всё равно тормоза наблюдаются.Для более детальной информации:
gate:~ # uname -a
Linux gate 2.6.16.5 #1 Fri Apr 21 21:21:51 EEST 2006 i686 i686 i386 GNU/Linux
gate:~ #
Система: SuSE Linux Enterprise Server 9.0Вот список основных классов траффика:
tc class add dev eth0 parent 1:1 classid 1:2 htb rate 6kbit ceil 128kbit burst 15k prio 0 #class "interactive"
tc class add dev eth0 parent 1:1 classid 1:3 htb rate 64kbit ceil 128kbit burst 15k prio 1 #class "games"
tc class add dev eth0 parent 1:1 classid 1:4 htb rate 40kbit ceil 128kbit burst 15k prio 2 #class "browsing"
tc class add dev eth0 parent 1:1 classid 1:5 htb rate 12kbit ceil 128kbit burst 15k prio 5 #class "downloads"
tc class add dev eth0 parent 1:1 classid 1:6 htb rate 1kbit ceil 128kbit burst 15k prio 7 #class "default"Согласно данному раскладу, каждому классу выделяется гарантированный минимум (параметр rate) и максимум, равный ширине канала (параметр ceil). Если кто-то начинает закачку, то она занимает свой гарантированный минимум, и часть незанятой полосы канала, если таковая есть. Игрушка LineAge потребляет траффик не постоянно, а всплесками. Соответственно, часть полосы, выделенной для игрушки между всплесками траффика перераспределяется между полосами, которые потребляют траффик непрерывно (закачки). При последующем всплеске игрушки, полоса снова перекраивается, но с протормаживанием, которое для игры критично - она не только тормозит, но и коннет к игровому серверу рвёт.
Если уменьшить параметр ceil для всех классов, кроме игрушки, то всё нормально. Однако, это решение неприемлемо: при этом значительная часть канала будет простаивать, особенно когда никто в игру не играет.
Пробовал "поиграть" с параметром burst - есть некоторое улучшение, но полностью проблему не снимает.Если кто-то стыкался с такой проблемой - подскажите, пожалуйста, возможные варианты её решения. Заранее благодарен.
С уважением,
Андрей
В твоем случае, я бы
- уменьшил bust в районе 2к
- уменьшил r2q до 1
>В твоем случае, я бы
>- уменьшил bust в районе 2к
>- уменьшил r2q до 1
Это я тоже делал. Эффект минимальный.
>>В твоем случае, я бы
>>- уменьшил bust в районе 2к
>>- уменьшил r2q до 1
>
>
>Это я тоже делал. Эффект минимальный.
1. Вышли полностью описание дисциплины и фильтров
2. Вышли tc -d -s qdisc sh dev XXX
3. Т.к. у тебя структура класса не иерархическая, то вполне возможно ее заменить,
например на prio + tc reclassify.
>1. Вышли полностью описание дисциплины и фильтров
>2. Вышли tc -d -s qdisc sh dev XXX
>3. Т.к. у тебя структура класса не иерархическая, то вполне возможно ее
>заменить,
> например на prio + tc reclassify.1.
Вот дисциплина шейпинга и вся структура классов (она-таки иерархическая, но я это не упоминал в первом сообщении), а также все фильтры:#root qdisc
tc qdisc add dev eth0 root handle 1: htb default 6 r2q 1#root HTB class
tc class add dev eth0 parent 1: classid 1:1 htb rate 128kbit ceil 2048mbit#HTB classes for traffic categories
tc class add dev eth0 parent 1:1 classid 1:2 htb rate 6kbit ceil 128kbit burst 1k prio 0 #class "interactive"
tc class add dev eth0 parent 1:1 classid 1:3 htb rate 64kbit ceil 128kbit burst 1k prio 1 #class "games"
tc class add dev eth0 parent 1:1 classid 1:4 htb rate 40kbit ceil 64kbit burst 1k prio 2 #class "browsing"
tc class add dev eth0 parent 1:1 classid 1:5 htb rate 12kbit ceil 12kbit burst 1k prio 5 #class "downloads"
tc class add dev eth0 parent 1:1 classid 1:6 htb rate 1kbit ceil 12kbit burst 1k prio 7 #class "default"#HTB subclasses for traffis subcategories
#subclasses for class "interactive"
tc class add dev eth0 parent 1:2 classid 1:21 htb rate 4kbit ceil 128kbit burst 1k prio 0 #subclass for RDP
tc class add dev eth0 parent 1:2 classid 1:22 htb rate 1kbit ceil 128kbit burst 1k prio 0 #subclass for SSH
tc class add dev eth0 parent 1:2 classid 1:23 htb rate 1kbit ceil 128kbit burst 1k prio 0 #subclass for ICQ#subclasses for class "games"
tc class add dev eth0 parent 1:3 classid 1:302 htb rate 16kbit ceil 128kbit burst 1k prio 1
tc class add dev eth0 parent 1:3 classid 1:303 htb rate 16kbit ceil 128kbit burst 1k prio 1
tc class add dev eth0 parent 1:3 classid 1:304 htb rate 16kbit ceil 128kbit burst 1k prio 1
tc class add dev eth0 parent 1:3 classid 1:306 htb rate 16kbit ceil 128kbit burst 1k prio 1#subclasses for class "browsing"
tc class add dev eth0 parent 1:4 classid 1:402 htb rate 4kbit ceil 64kbit burst 1k prio 2
tc class add dev eth0 parent 1:4 classid 1:403 htb rate 4kbit ceil 64kbit burst 1k prio 2
tc class add dev eth0 parent 1:4 classid 1:404 htb rate 4kbit ceil 64kbit burst 1k prio 2
tc class add dev eth0 parent 1:4 classid 1:405 htb rate 4kbit ceil 64kbit burst 1k prio 2
tc class add dev eth0 parent 1:4 classid 1:406 htb rate 4kbit ceil 64kbit burst 1k prio 2
tc class add dev eth0 parent 1:4 classid 1:407 htb rate 4kbit ceil 64kbit burst 1k prio 2
tc class add dev eth0 parent 1:4 classid 1:408 htb rate 4kbit ceil 64kbit burst 1k prio 2
tc class add dev eth0 parent 1:4 classid 1:409 htb rate 4kbit ceil 64kbit burst 1k prio 2
tc class add dev eth0 parent 1:4 classid 1:410 htb rate 4kbit ceil 64kbit burst 1k prio 2#HTB filters
#filters for class "interactive"
tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 506 fw flowid 1:21 #RDP for machine 05
tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 705 fw flowid 1:22 #SSH for machine 07
tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 207 fw flowid 1:23 #ICQ for machine 02
tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 307 fw flowid 1:23 #ICQ for machine 03
tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 407 fw flowid 1:23 #ICQ for machine 04
tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 507 fw flowid 1:23 #ICQ for machine 05
tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 607 fw flowid 1:23 #ICQ for machine 06
tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 707 fw flowid 1:23 #ICQ for machine 07
tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 807 fw flowid 1:23 #ICQ for machine 08
tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 907 fw flowid 1:23 #ICQ for machine 09
tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 1007 fw flowid 1:23 #ICQ for machine 10#filters for class "games"
tc filter add dev eth0 parent 1:0 prio 1 protocol ip handle 208 fw flowid 1:302 #LineAge for machine 02
tc filter add dev eth0 parent 1:0 prio 1 protocol ip handle 308 fw flowid 1:303 #LineAge for machine 03
tc filter add dev eth0 parent 1:0 prio 1 protocol ip handle 408 fw flowid 1:304 #LineAge for machine 04
tc filter add dev eth0 parent 1:0 prio 1 protocol ip handle 608 fw flowid 1:306 #LineAge for machine 06#filters for class "browsing"
tc filter add dev eth0 parent 1:0 prio 2 protocol ip handle 3128 fw flowid 1:4 #HTTP/HTTPS/FTP from Squid
tc filter add dev eth0 parent 1:0 prio 2 protocol ip handle 201 fw flowid 1:402 #HTTP for machine 02
tc filter add dev eth0 parent 1:0 prio 2 protocol ip handle 202 fw flowid 1:402 #HTTPS for machine 02
tc filter add dev eth0 parent 1:0 prio 2 protocol ip handle 301 fw flowid 1:403 #HTTP for machine 03
tc filter add dev eth0 parent 1:0 prio 2 protocol ip handle 302 fw flowid 1:403 #HTTPS for machine 03
tc filter add dev eth0 parent 1:0 prio 2 protocol ip handle 401 fw flowid 1:404 #HTTP for machine 04
tc filter add dev eth0 parent 1:0 prio 2 protocol ip handle 402 fw flowid 1:404 #HTTPS for machine 04
tc filter add dev eth0 parent 1:0 prio 2 protocol ip handle 501 fw flowid 1:405 #HTTP for machine 05
tc filter add dev eth0 parent 1:0 prio 2 protocol ip handle 502 fw flowid 1:405 #HTTPS for machine 05
tc filter add dev eth0 parent 1:0 prio 2 protocol ip handle 601 fw flowid 1:406 #HTTP for machine 06
tc filter add dev eth0 parent 1:0 prio 2 protocol ip handle 602 fw flowid 1:406 #HTTPS for machine 06
tc filter add dev eth0 parent 1:0 prio 2 protocol ip handle 701 fw flowid 1:407 #HTTP for machine 07
tc filter add dev eth0 parent 1:0 prio 2 protocol ip handle 702 fw flowid 1:407 #HTTPS for machine 07
tc filter add dev eth0 parent 1:0 prio 2 protocol ip handle 801 fw flowid 1:408 #HTTP for machine 08
tc filter add dev eth0 parent 1:0 prio 2 protocol ip handle 802 fw flowid 1:408 #HTTPS for machine 08
tc filter add dev eth0 parent 1:0 prio 2 protocol ip handle 901 fw flowid 1:409 #HTTP for machine 09
tc filter add dev eth0 parent 1:0 prio 2 protocol ip handle 902 fw flowid 1:409 #HTTPS for machine 09
tc filter add dev eth0 parent 1:0 prio 2 protocol ip handle 1001 fw flowid 1:410 #HTTP for machine 10
tc filter add dev eth0 parent 1:0 prio 2 protocol ip handle 1002 fw flowid 1:410 #HTTPS for machine 10#filters for class "downloads"
tc filter add dev eth0 parent 1:0 prio 5 protocol ip handle 203 fw flowid 1:5 #FTP data for machine 02
tc filter add dev eth0 parent 1:0 prio 5 protocol ip handle 204 fw flowid 1:5 #FTP ctrl for machine 02
tc filter add dev eth0 parent 1:0 prio 5 protocol ip handle 303 fw flowid 1:5 #FTP data for machine 03
tc filter add dev eth0 parent 1:0 prio 5 protocol ip handle 304 fw flowid 1:5 #FTP ctrl for machine 03
tc filter add dev eth0 parent 1:0 prio 5 protocol ip handle 403 fw flowid 1:5 #FTP data for machine 04
tc filter add dev eth0 parent 1:0 prio 5 protocol ip handle 404 fw flowid 1:5 #FTP ctrl for machine 04
tc filter add dev eth0 parent 1:0 prio 5 protocol ip handle 503 fw flowid 1:5 #FTP data for machine 05
tc filter add dev eth0 parent 1:0 prio 5 protocol ip handle 504 fw flowid 1:5 #FTP ctrl for machine 05
tc filter add dev eth0 parent 1:0 prio 5 protocol ip handle 603 fw flowid 1:5 #FTP data for machine 06
tc filter add dev eth0 parent 1:0 prio 5 protocol ip handle 604 fw flowid 1:5 #FTP ctrl for machine 06
tc filter add dev eth0 parent 1:0 prio 5 protocol ip handle 703 fw flowid 1:5 #FTP data for machine 07
tc filter add dev eth0 parent 1:0 prio 5 protocol ip handle 704 fw flowid 1:5 #FTP ctrl for machine 07
tc filter add dev eth0 parent 1:0 prio 5 protocol ip handle 803 fw flowid 1:5 #FTP data for machine 08
tc filter add dev eth0 parent 1:0 prio 5 protocol ip handle 804 fw flowid 1:5 #FTP ctrl for machine 08
tc filter add dev eth0 parent 1:0 prio 5 protocol ip handle 903 fw flowid 1:5 #FTP data for machine 09
tc filter add dev eth0 parent 1:0 prio 5 protocol ip handle 904 fw flowid 1:5 #FTP ctrl for machine 09
tc filter add dev eth0 parent 1:0 prio 5 protocol ip handle 1003 fw flowid 1:5 #FTP data for machine 10
tc filter add dev eth0 parent 1:0 prio 5 protocol ip handle 1004 fw flowid 1:5 #FTP ctrl for machine 10
А вот правила iptables, которые помечают пакеты каждого типа траффика:iptables -A PREROUTING -s 172.16.0.2 -p tcp --dport 80 -t mangle -j MARK --set-mark 201
iptables -A PREROUTING -s 172.16.0.2 -p tcp --dport 443 -t mangle -j MARK --set-mark 202
iptables -A PREROUTING -s 172.16.0.2 -p tcp --dport 20 -t mangle -j MARK --set-mark 203
iptables -A PREROUTING -s 172.16.0.2 -p tcp --dport 21 -t mangle -j MARK --set-mark 204
iptables -A PREROUTING -s 172.16.0.2 -p tcp --dport 5190 -t mangle -j MARK --set-mark 207
iptables -A PREROUTING -s 172.16.0.2 -p tcp --dport 7777 -t mangle -j MARK --set-mark 208iptables -A PREROUTING -s 172.16.0.3 -p tcp --dport 80 -t mangle -j MARK --set-mark 301
iptables -A PREROUTING -s 172.16.0.3 -p tcp --dport 443 -t mangle -j MARK --set-mark 302
iptables -A PREROUTING -s 172.16.0.3 -p tcp --dport 20 -t mangle -j MARK --set-mark 303
iptables -A PREROUTING -s 172.16.0.3 -p tcp --dport 21 -t mangle -j MARK --set-mark 304
iptables -A PREROUTING -s 172.16.0.3 -p tcp --dport 5190 -t mangle -j MARK --set-mark 307
iptables -A PREROUTING -s 172.16.0.3 -p tcp --dport 7777 -t mangle -j MARK --set-mark 308iptables -A PREROUTING -s 172.16.0.4 -p tcp --dport 80 -t mangle -j MARK --set-mark 401
iptables -A PREROUTING -s 172.16.0.4 -p tcp --dport 443 -t mangle -j MARK --set-mark 402
iptables -A PREROUTING -s 172.16.0.4 -p tcp --dport 20 -t mangle -j MARK --set-mark 403
iptables -A PREROUTING -s 172.16.0.4 -p tcp --dport 21 -t mangle -j MARK --set-mark 404
iptables -A PREROUTING -s 172.16.0.4 -p tcp --dport 5190 -t mangle -j MARK --set-mark 407
iptables -A PREROUTING -s 172.16.0.4 -p tcp --dport 7777 -t mangle -j MARK --set-mark 408iptables -A PREROUTING -s 172.16.0.5 -p tcp --dport 80 -t mangle -j MARK --set-mark 501
iptables -A PREROUTING -s 172.16.0.5 -p tcp --dport 443 -t mangle -j MARK --set-mark 502
iptables -A PREROUTING -s 172.16.0.5 -p tcp --dport 20 -t mangle -j MARK --set-mark 503
iptables -A PREROUTING -s 172.16.0.5 -p tcp --dport 21 -t mangle -j MARK --set-mark 504
iptables -A PREROUTING -s 172.16.0.5 -p tcp --dport 22 -t mangle -j MARK --set-mark 505
iptables -A PREROUTING -s 172.16.0.5 -p tcp --dport 3389 -t mangle -j MARK --set-mark 506
iptables -A PREROUTING -s 172.16.0.5 -p tcp --dport 5190 -t mangle -j MARK --set-mark 507iptables -A PREROUTING -s 172.16.0.6 -p tcp --dport 80 -t mangle -j MARK --set-mark 601
iptables -A PREROUTING -s 172.16.0.6 -p tcp --dport 443 -t mangle -j MARK --set-mark 602
iptables -A PREROUTING -s 172.16.0.6 -p tcp --dport 20 -t mangle -j MARK --set-mark 603
iptables -A PREROUTING -s 172.16.0.6 -p tcp --dport 21 -t mangle -j MARK --set-mark 604
iptables -A PREROUTING -s 172.16.0.5 -p tcp --dport 5190 -t mangle -j MARK --set-mark 607
iptables -A PREROUTING -s 172.16.0.6 -p tcp --dport 7777 -t mangle -j MARK --set-mark 608iptables -A PREROUTING -s 172.16.0.7 -p tcp --dport 80 -t mangle -j MARK --set-mark 701
iptables -A PREROUTING -s 172.16.0.7 -p tcp --dport 443 -t mangle -j MARK --set-mark 702
iptables -A PREROUTING -s 172.16.0.7 -p tcp --dport 20 -t mangle -j MARK --set-mark 703
iptables -A PREROUTING -s 172.16.0.7 -p tcp --dport 21 -t mangle -j MARK --set-mark 704
iptables -A PREROUTING -s 172.16.0.7 -p tcp --dport 22 -t mangle -j MARK --set-mark 705
iptables -A PREROUTING -s 172.16.0.7 -p tcp --dport 3389 -t mangle -j MARK --set-mark 706
iptables -A PREROUTING -s 172.16.0.7 -p tcp --dport 5190 -t mangle -j MARK --set-mark 707iptables -A PREROUTING -s 172.16.0.8 -p tcp --dport 80 -t mangle -j MARK --set-mark 801
iptables -A PREROUTING -s 172.16.0.8 -p tcp --dport 443 -t mangle -j MARK --set-mark 802
iptables -A PREROUTING -s 172.16.0.8 -p tcp --dport 20 -t mangle -j MARK --set-mark 803
iptables -A PREROUTING -s 172.16.0.8 -p tcp --dport 21 -t mangle -j MARK --set-mark 804
iptables -A PREROUTING -s 172.16.0.8 -p tcp --dport 5190 -t mangle -j MARK --set-mark 807iptables -A PREROUTING -s 172.16.0.9 -p tcp --dport 80 -t mangle -j MARK --set-mark 901
iptables -A PREROUTING -s 172.16.0.9 -p tcp --dport 443 -t mangle -j MARK --set-mark 902
iptables -A PREROUTING -s 172.16.0.9 -p tcp --dport 20 -t mangle -j MARK --set-mark 903
iptables -A PREROUTING -s 172.16.0.9 -p tcp --dport 21 -t mangle -j MARK --set-mark 904
iptables -A PREROUTING -s 172.16.0.9 -p tcp --dport 5190 -t mangle -j MARK --set-mark 907iptables -A PREROUTING -s 172.16.0.10 -p tcp --dport 80 -t mangle -j MARK --set-mark 1001
iptables -A PREROUTING -s 172.16.0.10 -p tcp --dport 443 -t mangle -j MARK --set-mark 1002
iptables -A PREROUTING -s 172.16.0.10 -p tcp --dport 20 -t mangle -j MARK --set-mark 1003
iptables -A PREROUTING -s 172.16.0.10 -p tcp --dport 21 -t mangle -j MARK --set-mark 1004
iptables -A PREROUTING -s 172.16.0.10 -p tcp --dport 5190 -t mangle -j MARK --set-mark 1007(для справки: порт 5190 - ICQ, 7777 - игрушка LineAge III).
iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner 31 -j MARK --set-mark 3128
(здесь uid-owner 31 соответствует юзеру squid (юзаем транспарент прокси); в иерархии классов он использует тот же класс, что и веб-траффик (1:4); вообще-то при использовании транспарент прокси нет нужды опередлять веб-траффик для каждой машины; здесь это сделано только на случай если возникнет необходимость пустить какую-либо машину в инет напрямую, а не через прокси; в таком случае она будет использовать свой субкласс под общим классом 1:4 (это чтоб траффик, который не идёт через прокси тоже шейпался)).
2.
gate:~ # tc -d -s qdisc show dev eth0
qdisc htb 1: r2q 1 default 6 direct_packets_stat 0 ver 3.17
Sent 2264277 bytes 28123 pkts (dropped 0, overlimits 2947)
gate:~ #3. Ну, на счёт неиерархичности классов вопрос, кажется снят :-)
>1.
>Вот дисциплина шейпинга и вся структура классов (она-таки иерархическая, но я это
>не упоминал в первом сообщении), а также все фильтры:
>
>#root qdisc
>tc qdisc add dev eth0 root handle 1: htb default 6 r2q
>1
r2q оставь 10 - default
>
>#root HTB class
>tc class add dev eth0 parent 1: classid 1:1 htb rate 128kbit
>ceil 2048mbit
канал 128kbit или 2Gbit ?
если канал 128kbit то :
rate 128kbit ceil 128kbit
>
>#HTB classes for traffic categories
>
..skip..
>tc class add dev eth0 parent 1:1 classid 1:5 htb rate 12kbit
>ceil 12kbit burst 1k prio 5 #class "downloads"
>tc class add dev eth0 parent 1:1 classid 1:6 htb rate 1kbit
>ceil 12kbit burst 1k prio 7 #class "default"
для class-ов с rate < 15kbit используй quantum 1500
1. в parent 1: - измени ceil на 128kbit, проблема скорее всего здесь, т.к. родительская
дисциплина ждет наполнения токенов, отсюда и задержки.
2. burst & cburst установи соотвественно в 60kbit & 12kbit
3. к делу это не относится, но можно убрать tc filter и классифицировать пакеты прямо
из iptables -m classify --jump CLASSIFY --set-class x:y