The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Порезка канала для обеспечения минимальной задержки некоторо..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"Порезка канала для обеспечения минимальной задержки некоторо..."  
Сообщение от одиш email(ok) on 07-Дек-06, 17:01 
Привет всем. Есть локальная сеть, выходящая в интернет через линукс, с каналом 512мб. Есть задача: обеспечить минимальную задержку для определенного трафика. Правила такие:
tc qdisc del dev eth0 root    2> /dev/null > /dev/null

tc qdisc add dev eth0 root handle 1: htb default 10

tc class add dev eth0 parent 1: classid 1:1 htb rate 90mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 10kbit ceil 100kbit prio 50 #allanother
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 10kbit ceil 90mbit prio 50 #from local to lan
tc class add dev eth0 parent 1:1 classid 1:30 htb rate 50kbit ceil 100kbit prio 50 #from local to ex
tc class add dev eth0 parent 1:1 classid 1:40 htb rate 30kbit ceil 100kbit prio 50 #from local to 405
tc class add dev eth0 parent 1:1 classid 1:50 htb rate 400kbit ceil 500kbit prio 1 #from spider
tc class add dev eth0 parent 1:1 classid 1:60 htb rate 10kbit ceil 100kbit prio 20 #from nikolaev1
tc class add dev eth0 parent 1:1 classid 1:70 htb rate 10kbit ceil 100kbit prio 20 #from nikolaev2
tc class add dev eth0 parent 1:1 classid 1:80 htb rate 1mbit ceil 90mbit prio 10 #from my
tc class add dev eth0 parent 1:1 classid 1:90 htb rate 1mbit ceil 90mbit prio 50 #from local
tc class add dev eth0 parent 1:1 classid 1:100 htb rate 10kbit ceil 32kbit prio 50 #from local to msq1
tc class add dev eth0 parent 1:1 classid 1:110 htb rate 10kbit ceil 32kbit prio 50 #from local to msq2
tc class add dev eth0 parent 1:1 classid 1:120 htb rate 10kbit ceil 32kbit prio 50 #from local to msq3
tc class add dev eth0 parent 1:1 classid 1:130 htb rate 10kbit ceil 32kbit prio 50 #from local to msq4
tc class add dev eth0 parent 1:1 classid 1:140 htb rate 10kbit ceil 32kbit prio 50 #from local to msq5
tc class add dev eth0 parent 1:1 classid 1:150 htb rate 10kbit ceil 32kbit prio 50 #from local to msq6
tc class add dev eth0 parent 1:1 classid 1:160 htb rate 10kbit ceil 32kbit prio 50 #from local to msq7
tc class add dev eth0 parent 1:1 classid 1:170 htb rate 10kbit ceil 32kbit prio 50 #from local to msq8
tc class add dev eth0 parent 1:1 classid 1:180 htb rate 10kbit ceil 32kbit prio 50 #from local to msq9
tc class add dev eth0 parent 1:1 classid 1:190 htb rate 10kbit ceil 32kbit prio 50 #from local to msq10
tc class add dev eth0 parent 1:1 classid 1:200 htb rate 10kbit ceil 32kbit prio 50 #from local to msq11
tc class add dev eth0 parent 1:1 classid 1:210 htb rate 50kbit ceil 300kbit prio 40 #to sync


tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev eth0 parent 1:30 handle 30: sfq perturb 10
tc qdisc add dev eth0 parent 1:40 handle 40: sfq perturb 10
tc qdisc add dev eth0 parent 1:50 handle 50: tbf rate 256kbit latency 10ms burst 3000
tc qdisc add dev eth0 parent 1:60 handle 60: sfq perturb 10
tc qdisc add dev eth0 parent 1:70 handle 70: sfq perturb 10
tc qdisc add dev eth0 parent 1:80 handle 80: sfq perturb 10
tc qdisc add dev eth0 parent 1:90 handle 90: sfq perturb 10
tc qdisc add dev eth0 parent 1:100 handle 100: sfq perturb 10
tc qdisc add dev eth0 parent 1:110 handle 110: sfq perturb 10
tc qdisc add dev eth0 parent 1:120 handle 120: sfq perturb 10
tc qdisc add dev eth0 parent 1:130 handle 130: sfq perturb 10
tc qdisc add dev eth0 parent 1:140 handle 140: sfq perturb 10
tc qdisc add dev eth0 parent 1:150 handle 150: sfq perturb 10
tc qdisc add dev eth0 parent 1:160 handle 160: sfq perturb 10
tc qdisc add dev eth0 parent 1:170 handle 170: sfq perturb 10
tc qdisc add dev eth0 parent 1:180 handle 180: sfq perturb 10
tc qdisc add dev eth0 parent 1:190 handle 190: sfq perturb 10
tc qdisc add dev eth0 parent 1:200 handle 200: sfq perturb 10
tc qdisc add dev eth0 parent 1:210 handle 210: sfq perturb 10

U32="tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32"

$U32 match ip src $ON flowid 1:20
$U32 match ip dst $EX flowid 1:30
$U32 match ip dst $CHP flowid 1:40
$U32 match ip src $SPIDER flowid 1:50
$U32 match ip src $NIKOLAEV1 flowid 1:60
$U32 match ip src $NIKOLAEV2 flowid 1:70
$U32 match ip src $MY flowid 1:80
$U32 match ip src $LOCAL flowid 1:90
$U32 match ip dst $MSQ1 flowid 1:100
$U32 match ip dst $MSQ2 flowid 1:110
$U32 match ip dst $MSQ3 flowid 1:120
$U32 match ip dst $MSQ4 flowid 1:130
$U32 match ip dst $MSQ5 flowid 1:140
$U32 match ip dst $MSQ6 flowid 1:150
$U32 match ip dst $MSQ7 flowid 1:160
$U32 match ip dst $MSQ8 flowid 1:170
$U32 match ip dst $MSQ9 flowid 1:180
$U32 match ip dst $MSQ10 flowid 1:190
$U32 match ip dst $MSQ11 flowid 1:200
$U32 match ip src $SYNC flowid 1:210


#OUT

tc qdisc del dev eth1 root    2> /dev/null > /dev/null

tc qdisc add dev eth1 root handle 1: htb default 10

tc class add dev eth1 parent 1: classid 1:1 htb rate 90mbit
tc class add dev eth1 parent 1:1 classid 1:10 htb rate 10kbit ceil 100kbit prio 50 #allanother
tc class add dev eth1 parent 1:1 classid 1:20 htb rate 10kbit ceil 120kbit prio 50 #from localhost to inet
tc class add dev eth1 parent 1:1 classid 1:30 htb rate 60kbit ceil 200kbit prio 30 #mail from localhost to inet
tc class add dev eth1 parent 1:1 classid 1:40 htb rate 400kbit ceil 500kbit prio 1 #from voip to spider
tc class add dev eth1 parent 1:1 classid 1:50 htb rate 50kbit ceil 150kbit prio 20 #to nikolaev1
tc class add dev eth1 parent 1:1 classid 1:60 htb rate 50kbit ceil 150kbit prio 20 #to nikolaev2
tc class add dev eth1 parent 1:1 classid 1:70 htb rate 2mbit ceil 3mbit prio 10 #to my
tc class add dev eth1 parent 1:1 classid 1:80 htb rate 10kbit ceil 100kbit prio 40 #to sync


tc qdisc add dev eth1 parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev eth1 parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev eth1 parent 1:30 handle 30: sfq perturb 10
tc qdisc add dev eth1 parent 1:40 handle 40: tbf rate 256kbit latency 10ms burst 3000
tc qdisc add dev eth1 parent 1:50 handle 50: sfq perturb 10
tc qdisc add dev eth1 parent 1:60 handle 60: sfq perturb 10
tc qdisc add dev eth1 parent 1:70 handle 70: tbf rate 1mbit latency 30ms burst 15000
tc qdisc add dev eth1 parent 1:80 handle 80: sfq perturb 10

U32="tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32"

$U32 match ip src $MY flowid 1:20
$U32 match ip dport 25 0xffff flowid 1:30
$U32 match ip dst $SPIDER flowid 1:40
$U32 match ip dst $NIKOLAEV1 flowid 1:50
$U32 match ip dst $NIKOLAEV2 flowid 1:60
$U32 match ip dst $MY flowid 1:70
$U32 match ip dst $SYNC flowid 1:80

Грубо говоря самое важное здесь, это при возникновении траффика от spider или к нему, отдать ему весь канал, обеспечив минимальную задержку.
Проблема в следующем: При стандартных дисциплинах, без навешивания этого добра, пинг на нужный хост на не нагруженном канале около 10~15мс, это приемлемо. При загруженном канале могут быть задержки до 5 секунд. Эту задержку я и пытаюсь убрать. Когда все эти правила работают наблюдается такая ситуация, даже на не нагруженном канале, непонятно почему, задержки на нужный хост прыгают до тех же 5 секунд.
Что я делаю не так? В какую сторону смотреть?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Порезка канала для обеспечения минимальной задержки некоторо..."  
Сообщение от Z0termaNN email(ok) on 07-Дек-06, 18:54 
я тебе полностью эту хрень расписывать не буду, но смысл примерно такой

interface_speed=512kbit

tc qdisc add dev eth0 root handle 1: hfsc default 20
tc class add dev eth0 parent 1:0 classid 1:1 hfsc sc rate 512kbit ul rate 512kbit
tc class add dev eth0 parent 1:1 classid 1:10 hfsc rt rate 512kbit
tc class add dev eth0 parent 1:1 classid 1:20 hfsc ls m2 512kbit ul m2 512kbit
#
# а затем добавляй свой htb, хотя в принципе иерархию классов можно нагородить
# и при помощи hfsc, но там нет приоритетов. в общем объяснять долго.
#
tc qdisc add dev eth0 parent 1:20 htb default xxxx
.......

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Порезка канала для обеспечения минимальной задержки некоторо..."  
Сообщение от одиш email(ok) on 07-Дек-06, 21:04 
>я тебе полностью эту хрень расписывать не буду, но смысл примерно такой
>
>
>interface_speed=512kbit
>
>tc qdisc add dev eth0 root handle 1: hfsc default 20
>tc class add dev eth0 parent 1:0 classid 1:1 hfsc sc rate
>512kbit ul rate 512kbit
>tc class add dev eth0 parent 1:1 classid 1:10 hfsc rt rate
>512kbit
>tc class add dev eth0 parent 1:1 classid 1:20 hfsc ls m2
>512kbit ul m2 512kbit
>#
># а затем добавляй свой htb, хотя в принципе иерархию классов можно
>нагородить
># и при помощи hfsc, но там нет приоритетов. в общем объяснять
>долго.
>#
>tc qdisc add dev eth0 parent 1:20 htb default xxxx
>.......

Пока я далек от того, что ты предложил, ничего не понял. Не мог бы ты раскрыть подробнее, если есть время? А я пока почитаю про hfsc.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Порезка канала для обеспечения минимальной задержки некоторо..."  
Сообщение от Skif (??) on 08-Дек-06, 12:23 
что происходит при чистом канале если слать ping -s 1500 (ставь свое MTU), если большие задержки 3-5 секунд либо вообще потери выше 10% - это уже несколько не твоя проблема, а проблема прова которого надо пинать.
В общем на мой взгляд проблема не в фаере, который надо конечно настроить, а в самом канале, так как 5 сек на незагруженном канале - это ненормально. И скорее всего вас кидают без особонго шейпа  вместе со всеми клиентами в кучу, а там куда кривая судьбы выведет.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Порезка канала для обеспечения минимальной задержки некоторо..."  
Сообщение от одиш email(ok) on 08-Дек-06, 12:42 
>что происходит при чистом канале если слать ping -s 1500 (ставь свое
>MTU), если большие задержки 3-5 секунд либо вообще потери выше 10%
>- это уже несколько не твоя проблема, а проблема прова которого
>надо пинать.
>В общем на мой взгляд проблема не в фаере, который надо конечно
>настроить, а в самом канале, так как 5 сек на незагруженном
>канале - это ненормально. И скорее всего вас кидают без особонго
>шейпа  вместе со всеми клиентами в кучу, а там куда
>кривая судьбы выведет.

Нет. Потому что когда мы выгребаем, без шейпа на нашем роутере, наш лимит у прова, пинги 5 секунд, но это понятно. При это когда лимит не выгребаем, они нормальные. Если же включен шейп у нас, правила которого приведены выше, даже при не нагруженном канале...пинги периодически по 10секунд. Я думаю что какаято лажа в моих правилах, но у меня мало опыта в таких делах, не могу найти ошибки.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Порезка канала для обеспечения минимальной задержки некоторо..."  
Сообщение от Z0termaNN email(ok) on 08-Дек-06, 13:11 
>
>Пока я далек от того, что ты предложил, ничего не понял. Не
>мог бы ты раскрыть подробнее, если есть время? А я пока
>почитаю про hfsc.

hfsc единственная дисциплина, которая позволяет обрабатывать трафик реального времени,
в примере создана корневая дисциплина hfsc (скрорость интерфейса 512 кбит взял от балды).

класс 1:10 занимается обработкой трафика реального времени и отдает под него всю полосу
пропускания,
класс 1:20 обрабатывает обычный трафик и ты можешь к нему подцепить htb, хотя смысла
особого такой бутерброд городить нет, т.к. тоже самое можно сделать и при помощи hfsc.
я опустил подробности того, как пакеты будут попадпть в эти классы.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру