LINUX.ORG.RU
ФорумAdmin

TC HTB шейпинг трафика на клиента


0

1

Разбираюсь с шейпированием трафика, написал пару строк правил, ничего более, но проблема в том что как только включаешь правила шейпировать начинает но не с указанной скоростью, а если указать rate 100Mbit то скорость закачки с этого сервера колеблется от 10кбит до 8мегабит, постоянной скорости нету. Правила выглядят так:

tc qdisc del dev $dev_lan root
tc qdisc del dev $dev_lan ingress
tc qdisc add dev $dev_lan root handle 1: htb default 900
tc class add dev $dev_lan parent 1: classid 1:1 htb rate 10Mbit
tc filter add dev $dev_lan parent 1:0 protocol ip prio 10 u32 match ip dst 192.168.0.0/16 flowid 1:1

Больше ничего лишнего.

[root@gw ~]#  tc -s -d class show dev eth0.1000
class htb 1:1 root prio 0 quantum 125000 rate 10000Kbit ceil 10000Kbit burst 2850b/8 mpu 0b overhead 0b cburst 2850b/8 mpu 0b overhead 0b level 0
 Sent 119196904 bytes 116002 pkt (dropped 16992, overlimits 0 requeues 0)
 rate 1890Kbit 277pps backlog 0b 1p requeues 0
 lended: 116001 borrowed: 0 giants: 0
 tokens: -2956 ctokens: -2956
[root@gw ~]#  tc -s -d class show dev eth0.1000
class htb 1:1 root prio 0 quantum 125000 rate 10000Kbit ceil 10000Kbit burst 2850b/8 mpu 0b overhead 0b cburst 2850b/8 mpu 0b overhead 0b level 0
 Sent 134116463 bytes 127463 pkt (dropped 20105, overlimits 0 requeues 0)
 rate 4351Kbit 435pps backlog 0b 0p requeues 0
 lended: 127463 borrowed: 0 giants: 0
 tokens: 1021 ctokens: 1021

OS CentOS 5.5

Linux gw.localnet 2.6.18-238.9.1.el5 #1 SMP Tue Apr 12 18:10:56 EDT 2011 i686 i686 i386 GNU/Linux

Куда копать, подскажите правильный путь? а то получается все дальнейшие дисциплины просто не работают.

1. default 900 можно опустить, т.к. у тебя всё равно нет этого класса

2. добавь дисциплину к 1:1

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

Сделал, но ничего не изменилась. Та же проблема, скорость прыгает, и даже приблизительно не соответствует установленной в шейпере.

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

попробуй просто ужать весь исходящий, напр., вот так:

$TC qdisc del dev $DEV_LAN root >/dev/null 2>&1
$TC qdisc add dev $DEV_LAN root handle 1: htb default 99
  $TC class add dev $DEV_LAN parent 1: classid 1:99 htb rate 10Mbit
    $TC qdisc add dev $DEV_LAN parent 1:99 pfifo

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

а да, попробуй заменить protocol ip на protocol 802.1q в фильтре

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

Моя проблема была что не указал SFQ дисциплину, после неё все стало на свои места. Сейчас сделал вот так:

# Корневой обработчик очереди на интерфейсе
/sbin/tc qdisc add dev $dev_lan root handle 1: htb default 900

# Дочерний класс с общей шириной канала
/sbin/tc class add dev $dev_lan parent 1: classid 1:1 htb rate 100Mbit burst 15k

# Дочерний класс с общей скоростью доступа в интернет
/sbin/tc class add dev $dev_lan parent 1:1 classid 1:100 htb rate 20Mbit burst 15k

# Устанавливаем SFQ дисциплину для класа 1:100
/sbin/tc qdisc add dev $dev_lan parent 1:100 handle 10: sfq perturb 10

### SSH трафик
/sbin/tc filter add dev $dev_lan protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip sport 22 0xffff flowid 1:100

### WWW трафик пришедший с tcp порта 80 отправляется в класс 100
/sbin/tc filter add dev $dev_lan protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip sport 80 0xffff flowid 1:100

### Трафик не соответсвующий не одному условию имеет низший приоретет в очереди
/sbin/tc filter add dev $dev_lan protocol ip parent 1:0 prio 10 u32 match ip dst 192.168.0.0/16 flowid 1:100

Но, пробовал тянуть два файла на одном компе, один файл по http, другой по ftp, FTP при этом качалось значительно быстрее, 800кб FTP против 100КБ HTTP в секунду, получается что не срабатывает приоритезация достаточно хорошо, что еще можно сделать?

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

попробовал заменить, толку нету, трафик тогда перестает попадать в фильтры. делал так:

/sbin/tc filter add dev $dev_lan protocol 802.1q parent 1:0 prio 10 u32 match ip dst 192.168.0.0/16 flowid 1:100

возник еще вопрос, можно ведь в одни и том же классе приоретезировать трафик за счет разных фильтров, или надо создавать много классов, и к каждому классу привязывать свои фильтры?

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

фильтры нужны только для раскидывания пакетов по классам, а классы уже «сжимают» ширину канал и являются как бы очередями с разными приоритетами. т.е. хочешь две очереди с разными приоритетами - создавай два класса; а приоритет фильтров влияет на их положение: чем ниже цифра, тем выше фильтр
пара нюансов:
- prio класса должен быть в диапазоне от 0 до 7 включительно, если будет больше - сбрасывается в 0
- если у класса есть дочерний класс - приоритет родительского удаляется, т.е. приоритеты могут быть только у leaf-классов

попробуй раскидывать трафик по классам не фильтрами, а при помощи iptables

cac2s
()

Проблема в ведре(я так думал), не помню симптомы, но на 5.4 шейпер тоже работал не правильно, и на nag.ru валили на ядро 2.6.18, я просто собрал iproute для ядра 32, и все заработало как положено.

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

Пока перешел на Debian 6.0.1 c ядром

Linux gateway 2.6.32-core2 #1 SMP Tue May 31 19:49:51 EEST 2011 i686 GNU/Linux
Пересобрал его с kernel_hz=1000

Нарезал правила:

# Удаляем все обработчики на интерфейсе
/sbin/tc qdisc del dev $dev_lan root
#/sbin/tc qdisc del dev $dev_lan ingress

# Корневой обработчик очереди на интерфейсе
/sbin/tc qdisc add dev $dev_lan root handle 1: htb default 900 r2q 100 

# Дочерний класс с общей шириной канала
/sbin/tc class add dev $dev_lan parent 1: classid 1:1 htb rate 100Mbit

### Клсс интернета
/sbin/tc class add dev $dev_lan parent 1:1 classid 1:10 htb rate 15Mbit

# Дочерний класс с общей скоростью доступа в интернет
/sbin/tc class add dev $dev_lan parent 1:10 classid 1:110 htb rate 1Mbit ceil 15Mbit prio 0 ### SSH RDP
/sbin/tc class add dev $dev_lan parent 1:10 classid 1:120 htb rate 1Mbit ceil 8Mbit prio 2  ### UKRTELECOM PROXY
/sbin/tc class add dev $dev_lan parent 1:10 classid 1:130 htb rate 1Mbit ceil 3Mbit prio 3 ### PROXY SERVER
/sbin/tc class add dev $dev_lan parent 1:10 classid 1:140 htb rate 1Mbit ceil 10Mbit prio 4  ### ADMIN2
/sbin/tc class add dev $dev_lan parent 1:10 classid 1:150 htb rate 1Mbit ceil 8Mbit prio 7 ### ATS1 ITAPP4
/sbin/tc class add dev $dev_lan parent 1:10 classid 1:160 htb rate 1Mbit ceil 8Mbit prio 7 ### LOCALNETWORK 

# Устанавливаем SFQ дисциплину для класа 
/sbin/tc qdisc add dev $dev_lan parent 1:110 handle 10: sfq perturb 10
/sbin/tc qdisc add dev $dev_lan parent 1:120 handle 20: sfq perturb 10
/sbin/tc qdisc add dev $dev_lan parent 1:130 handle 30: sfq perturb 10
/sbin/tc qdisc add dev $dev_lan parent 1:140 handle 40: sfq perturb 10
/sbin/tc qdisc add dev $dev_lan parent 1:150 handle 50: sfq perturb 10
/sbin/tc qdisc add dev $dev_lan parent 1:160 handle 60: sfq perturb 10

### SSH трафик
/sbin/tc filter add dev $dev_lan protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip sport 22 0xffff flowid 1:110
/sbin/tc filter add dev $dev_lan protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip dport 22 0xffff flowid 1:110
/sbin/tc filter add dev $dev_lan protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip sport 2222 0xffff flowid 1:110
/sbin/tc filter add dev $dev_lan protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip dport 2222 0xffff flowid 1:110
/sbin/tc filter add dev $dev_lan protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip sport 3389 0xffff flowid 1:110
/sbin/tc filter add dev $dev_lan protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip dport 3389 0xffff flowid 1:110

### Прокси сервера имеют приоретет выше чем SSH и RDP но ниже всех других зверей
/sbin/tc filter add dev $dev_lan protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.0.117/32 flowid 1:120

### Дочерний прокси
/sbin/tc filter add dev $dev_lan protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.5/32 flowid 1:130
/sbin/tc filter add dev $dev_lan protocol ip parent 1:0 prio 2 u32 match ip dst 192.168.1.7/32 flowid 1:130

### ADMIN2 самое наглое создание 
/sbin/tc filter add dev $dev_lan protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.5.129/32 flowid 1:140

#### Класс найнизшего приоретета для торентов
/sbin/tc filter add dev $dev_lan protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.0.10/32 flowid 1:150
/sbin/tc filter add dev $dev_lan protocol ip parent 1:0 prio 2 u32 match ip dst 192.168.5.87/32 flowid 1:150

# Вся остальная подсеть идет суюда лесом
/sbin/tc filter add dev $dev_lan protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.0.0/16 flowid 1:160

Но проблема в том что когда качает 192.168.5.129, class 140, все остальные нервно курят в сторонке. Поправьте пожалуйста, как будет правильно. Общий канал порядка 15мегабит.

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

Кто конкретно курит? админ оставляет как минимум 5 мбит всем остальным, да и ты же сам поставил localnetwork приоритет ниже админовского, потому и курят.

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