LINUX.ORG.RU
ФорумAdmin

tc u32 htb


0

1

Добрый день. Решил не создавать новую тему, тк вопросы похожи.

Имеется роутер на linux. Необходимо шейпепить юзеров.

Часть конфига шейпера, в котором абоненты фильтруются по последнему октету в ip и их пакеты попадают в свой класс для обработки :

tc q a dev eth0 root handle 1: htb
tc c a dev eth0 parent 1: classid 1:1 htb rate 100 Mbit

tc f a dev eth0 parent 1:0 prio 5 protocol ip u32
tc f a dev eth0 parent 1:0 prio 5 handle 2: protocol ip u32 divisor 256

tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 800:: match ip dst ххх.ххх.206.0/23 hashkey mask 0x000000ff at 16 link 2:
tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 800:: match ip src ххх.ххх.206.0/23 hashkey mask 0x000000ff at 12 link 2:	

#для примера привел один ip
tc c a dev eth0 parent 1:1 classid 1:ce7b htb rate 9Mbit ceil 10Mbit
tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 2:7b: match ip dst ххх.ххх.206.123 flowid 1:ce7b
tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 2:7b: match ip src ххх.ххх.206.123 flowid 1:ce7b

Правильно ли использование одного класса для исходящего/входящего трафика? Или лучше будет разнести потоки по разным классам?

Тест скорости на яндексе показывает ~9Mbit в обоих направлениях, как понимаю, подобное тестирование синтетическое/однобокое. Попробовать ftp транзакции в различные направления одновременно?

Трафик входящий на интерфейс eth0 не будет попадать в эти классы совсем. Заверните ингресс дисциплину eth0 в ifb устройство и там организуйте шейпинг.

ventilator ★★★
()
Ответ на: комментарий от ventilator
tc -s f s dev eth0
filter parent 1: protocol ip pref 5 u32
filter parent 1: protocol ip pref 5 u32 fh 2: ht divisor 256
filter parent 1: protocol ip pref 5 u32 fh 2:7b:800 order 2048 key ht 2 bkt 7b flowid 1:ce7b  (rule hit 168305 success 89911)
  match d9c5ce7b/ffffffff at 16 (success 89911 )
filter parent 1: protocol ip pref 5 u32 fh 2:7b:801 order 2049 key ht 2 bkt 7b flowid 1:cf7b  (rule hit 78394 success 5557)
  match d9c5cf7b/ffffffff at 16 (success 5557 )
filter parent 1: protocol ip pref 5 u32 fh 2:7b:802 order 2050 key ht 2 bkt 7b flowid 1:ce7b  (rule hit 72837 success 72837)
  match d9c5ce7b/ffffffff at 12 (success 72837 )
filter parent 1: protocol ip pref 5 u32 fh 800: ht divisor 1
filter parent 1: protocol ip pref 5 u32 fh 800::800 order 2048 key ht 800 bkt 0 link 2:  (rule hit 100532205 success 0)
  match d9c5ce00/fffffe00 at 16 (success 39651320 )
    hash mask 000000ff at 16
filter parent 1: protocol ip pref 5 u32 fh 800::801 order 2049 key ht 800 bkt 0 link 2:  (rule hit 99934224 success 0)
  match d9c5ce00/fffffe00 at 12 (success 60527381 )
    hash mask 000000ff at 12

вроде, попадает. + писал выше про результаты теста скорости в рамках rate.

честно перед юзером его трафик обрабатывать одним классом?

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

Матчить пакеты вы можете по любому полю. Вот если входящий на интерфейс трафик у вас еще и шейпится сразу на этом интерфейсе, то вероятнее всего это фича, про которую не знают даже авторы tc.

PS:Если вы пишете что даете симметричный/дуплексный канал то конечно это некоторый обман. Либо пишите, что вы предоставляете полудуплексный канал.

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

попробовал разделить потоки:

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

tc q a dev eth0 root handle 1: htb
tc c a dev eth0 parent 1: classid 1:1 htb rate 100Mbit

tc f a dev eth0 parent 1:0 prio 5 protocol ip u32
tc f a dev eth0 parent 1:0 prio 5 handle 2: protocol ip u32 divisor 256

tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 800:: match ip dst 217.197.206.0/23 hashkey mask 0x000000ff at 16 link 2:
tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 800:: match ip src 217.197.206.0/23 hashkey mask 0x000000ff at 12 link 2:    

tc c a dev eth0 parent 1:1 classid 1:ce7b htb rate 9Mbit ceil 10Mbit
tc c a dev eth0 parent 1:1 classid 1:cd7b htb rate 9Mbit ceil 10Mbit
tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 2:7b: match ip dst 217.197.206.123 flowid 1:ce7b
tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 2:7b: match ip src 217.197.206.123 flowid 1:cd7b

получилось по фильтрам:

tc -s f s dev eth0
filter parent 1: protocol ip pref 5 u32 
filter parent 1: protocol ip pref 5 u32 fh 2: ht divisor 256 
filter parent 1: protocol ip pref 5 u32 fh 2:7b:800 order 2048 key ht 2 bkt 7b flowid 1:ce7b  (rule hit 818459 success 454303)
  match d9c5ce7b/ffffffff at 16 (success 454303 ) 
filter parent 1: protocol ip pref 5 u32 fh 2:7b:801 order 2049 key ht 2 bkt 7b flowid 1:cd7b  (rule hit 364156 success 363757)
  match d9c5ce7b/ffffffff at 12 (success 363757 ) 
filter parent 1: protocol ip pref 5 u32 fh 800: ht divisor 1 
filter parent 1: protocol ip pref 5 u32 fh 800::800 order 2048 key ht 800 bkt 0 link 2:  (rule hit 7384336 success 0)
  match d9c5ce00/fffffe00 at 16 (success 3034157 ) 
    hash mask 000000ff at 16 
filter parent 1: protocol ip pref 5 u32 fh 800::801 order 2049 key ht 800 bkt 0 link 2:  (rule hit 6930033 success 0)
  match d9c5ce00/fffffe00 at 12 (success 4343857 ) 
    hash mask 000000ff at 12 

по классам в момент передачи данных по ssh (upload/download больших файлов):

tc -s c s dev eth0
class htb 1:cd7b parent 1:1 prio 0 rate 9000Kbit ceil 10000Kbit burst 1598b cburst 1600b 
 Sent 302539337 bytes 344864 pkt (dropped 230, overlimits 0 requeues 0) 
 rate 8454Kbit 917pps backlog 0b 76p requeues 0 
 lended: 324412 borrowed: 20376 giants: 0
 tokens: -17109 ctokens: -18909

class htb 1:1 root rate 100000Kbit ceil 100000Kbit burst 1600b cburst 1600b 
 Sent 779392156 bytes 783779 pkt (dropped 0, overlimits 0 requeues 0) 
 rate 14621Kbit 1885pps backlog 0b 0p requeues 0 
 lended: 53826 borrowed: 0 giants: 0
 tokens: 813 ctokens: 813

class htb 1:ce7b parent 1:1 prio 0 rate 9000Kbit ceil 10000Kbit burst 1598b cburst 1600b 
 Sent 476943387 bytes 438991 pkt (dropped 368, overlimits 0 requeues 0) 
 rate 6160Kbit 968pps backlog 0b 0p requeues 0 
 lended: 405541 borrowed: 33450 giants: 0
 tokens: 21218 ctokens: 19110

есть одно НО. в момент одновременной передачи процентов 90 времени на ssh клиенте (нетбук) видел преобладание исходящего трафика, над входящим, т.е. заливаем со скоростью 10Мбит, скачиваем со сколько 1-2Мбит, редко потоки сравниваются, затем снова деградирует download поток.

tc -s c s dev eth0
class htb 1:cd7b parent 1:1 prio 0 rate 9000Kbit ceil 10000Kbit burst 1598b cburst 1600b 
 Sent 290965755 bytes 333739 pkt (dropped 215, overlimits 0 requeues 0) 
 rate 9645Kbit 861pps backlog 0b 0p requeues 0 
 lended: 314241 borrowed: 19498 giants: 0
 tokens: 21218 ctokens: 19110

class htb 1:1 root rate 100000Kbit ceil 100000Kbit burst 1600b cburst 1600b 
 Sent 755543282 bytes 759630 pkt (dropped 0, overlimits 0 requeues 0) 
 rate 11603Kbit 1557pps backlog 0b 0p requeues 0 
 lended: 51988 borrowed: 0 giants: 0
 tokens: 110 ctokens: 110

class htb 1:ce7b parent 1:1 prio 0 rate 9000Kbit ceil 10000Kbit burst 1598b cburst 1600b 
 Sent 464660733 bytes 425960 pkt (dropped 360, overlimits 0 requeues 0) 
 rate 1941Kbit 695pps backlog 0b 69p requeues 0 
 lended: 393401 borrowed: 32490 giants: 0
 tokens: -3728 ctokens: -18947
truetrue
() автор топика
Ответ на: комментарий от truetrue

Ну вы то на наге написали что у вас вланы на интерфейсе, и трафик приходит в одном, а уходит через этот же интерфейс другим тегом. tcpdump не показывает никакого лишнего трафика?

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

опишу полностью ситуацию. маршрутизатор c одним eth. на нем без тега висит внешний адрес, а так же прописан vlan, который смотрит в сторону абонентов. на vlan алиасом прописано два адреса. сетевая набортная, трафика не больше 50Мбит.

03:0a.0 Ethernet controller: Intel Corporation 82541GI Gigabit Ethernet Controller

---

переделал шейпер


tc qdisc del dev eth0 root 2>/dev/null
tc qdisc del dev vlan1272 root 2>/dev/null

tc q a dev eth0 root handle 1: htb
tc c a dev eth0 parent 1: classid 1:1 htb rate 100Mbit

tc q a dev vlan1272 root handle 1: htb
tc c a dev vlan1272 parent 1: classid 1:1 htb rate 100Mbit

tc f a dev eth0 parent 1:0 prio 5 protocol ip u32
tc f a dev eth0 parent 1:0 prio 5 handle 2: protocol ip u32 divisor 256

tc f a dev vlan1272 parent 1:0 prio 5 protocol ip u32
tc f a dev vlan1272 parent 1:0 prio 5 handle 2: protocol ip u32 divisor 256

tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 800:: match ip src 217.197.206.0/23 hashkey mask 0x000000ff at 12 link 2:    
tc f a dev vlan1272 protocol ip parent 1:0 prio 5 u32 ht 800:: match ip dst 217.197.206.0/24 hashkey mask 0x000000ff at 16 link 2:

tc c a dev eth0 parent 1:1 classid 1:ce7b htb rate 9Mbit ceil 10Mbit
tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 2:7b: match ip src 217.197.206.123 flowid 1:ce7b

tc c a dev vlan1272 parent 1:1 classid 1:ce7b htb rate 9Mbit ceil 10Mbit
tc f a dev vlan1272 protocol ip parent 1:0 prio 5 u32 ht 2:7b: match ip dst 217.197.206.123 flowid 1:ce7b

результат при одновременной передаче данных по ssh:

по фильтрам

tc -s f s dev vlan1272
filter parent 1: protocol ip pref 5 u32 
filter parent 1: protocol ip pref 5 u32 fh 2: ht divisor 256 
filter parent 1: protocol ip pref 5 u32 fh 2:7b:800 order 2048 key ht 2 bkt 7b flowid 1:ce7b  (rule hit 719041 success 719041)
  match d9c5ce7b/ffffffff at 16 (success 719041 ) 
filter parent 1: protocol ip pref 5 u32 fh 800: ht divisor 1 
filter parent 1: protocol ip pref 5 u32 fh 800::800 order 2048 key ht 800 bkt 0 link 2:  (rule hit 1511820 success 0)
  match d9c5ce00/ffffff00 at 16 (success 1511816 ) 
    hash mask 000000ff at 16 



tc -s f s dev eth0
filter parent 1: protocol ip pref 5 u32 
filter parent 1: protocol ip pref 5 u32 fh 2: ht divisor 256 
filter parent 1: protocol ip pref 5 u32 fh 2:7b:800 order 2048 key ht 2 bkt 7b flowid 1:ce7b  (rule hit 838466 success 838466)
  match d9c5ce7b/ffffffff at 12 (success 838466 ) 
filter parent 1: protocol ip pref 5 u32 fh 800: ht divisor 1 
filter parent 1: protocol ip pref 5 u32 fh 800::800 order 2048 key ht 800 bkt 0 link 2:  (rule hit 3331902 success 0)
  match d9c5ce00/fffffe00 at 12 (success 1854377 ) 
    hash mask 000000ff at 12 

по классам

tc -s c s dev vlan1272
class htb 1:1 root rate 100000Kbit ceil 100000Kbit burst 1600b cburst 1600b 
 Sent 536222140 bytes 410525 pkt (dropped 0, overlimits 0 requeues 0) 
 rate 752968bit 521pps backlog 0b 0p requeues 0 
 lended: 36965 borrowed: 0 giants: 0
 tokens: 1750 ctokens: 1750

class htb 1:ce7b parent 1:1 prio 0 rate 9000Kbit ceil 10000Kbit burst 1598b cburst 1600b 
 Sent 536222140 bytes 410525 pkt (dropped 42854, overlimits 0 requeues 0) 
 rate 752968bit 521pps backlog 0b 0p requeues 0 
 lended: 373560 borrowed: 36965 giants: 0
 tokens: 19343 ctokens: 17407



tc -s c s dev eth0
class htb 1:1 root rate 100000Kbit ceil 100000Kbit burst 1600b cburst 1600b 
 Sent 174091668 bytes 454275 pkt (dropped 0, overlimits 0 requeues 0) 
 rate 9877Kbit 886pps backlog 0b 0p requeues 0 
 lended: 10174 borrowed: 0 giants: 0
 tokens: 110 ctokens: 110

class htb 1:ce7b parent 1:1 prio 0 rate 9000Kbit ceil 10000Kbit burst 1598b cburst 1600b 
 Sent 174183564 bytes 454347 pkt (dropped 131, overlimits 0 requeues 0) 
 rate 9881Kbit 886pps backlog 0b 72p requeues 0 
 lended: 444101 borrowed: 10174 giants: 0
 tokens: -3463 ctokens: -18943

при такой реализации шейпера при одновременной передачи данных по ssh скорость скачивания не поднималась выше мегабита, при этом отдача была в рамках rate/ceil. тест на internet.yandex.ru показывает download ~6.5Мбит, upload ~8.9Мбит.

лишний трафик... вопрос интересный. если смотреть ifstat'ом, то ничего лишнего нет. tcpdump'ом не смотрел... для чистоты эксперимента могу включить второй eth и на него повесить vlan, либо сделать акцес, пока есть возможность.

есть мысли почему при такой, вроде бы правильной реализации, download у абонент еще сильнее деградировал?

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

А вы попробуйте для чистоты эксперимента чтоб и приходил и уходил тегированный трафик, и шейпинг сделайте на vlan1272&vlan1273 к примеру, а eth0 не трогайте. Вообще включить еще один интерфейс более правильное решение имхо.

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

сделал два vlan на одном eth.

шейпер

tc qdisc del dev vlan1017 root 2>/dev/null
tc qdisc del dev vlan1272 root 2>/dev/null

tc q a dev vlan1017 root handle 1: htb
tc c a dev vlan1017 parent 1: classid 1:1 htb rate 100Mbit

tc q a dev vlan1272 root handle 1: htb
tc c a dev vlan1272 parent 1: classid 1:1 htb rate 100Mbit

tc f a dev vlan1017 parent 1:0 prio 5 protocol ip u32
tc f a dev vlan1017 parent 1:0 prio 5 handle 2: protocol ip u32 divisor 256

tc f a dev vlan1272 parent 1:0 prio 5 protocol ip u32
tc f a dev vlan1272 parent 1:0 prio 5 handle 2: protocol ip u32 divisor 256

tc f a dev vlan1017 protocol ip parent 1:0 prio 5 u32 ht 800:: match ip src 217.197.206.0/23 hashkey mask 0x000000ff at 12 link 2:    
tc f a dev vlan1272 protocol ip parent 1:0 prio 5 u32 ht 800:: match ip dst 217.197.206.0/24 hashkey mask 0x000000ff at 16 link 2:

tc c a dev vlan1017 parent 1:1 classid 1:ce7b htb rate 9Mbit ceil 10Mbit
tc f a dev vlan1017 protocol ip parent 1:0 prio 5 u32 ht 2:7b: match ip src 217.197.206.123 flowid 1:ce7b

tc c a dev vlan1272 parent 1:1 classid 1:ce7b htb rate 9Mbit ceil 10Mbit
tc f a dev vlan1272 protocol ip parent 1:0 prio 5 u32 ht 2:7b: match ip dst 217.197.206.123 flowid 1:ce7b

результаты работы при одновременной передаче данных по ssh:

mmm-cow:~# tc -s c s dev vlan1272
class htb 1:1 root rate 100000Kbit ceil 100000Kbit burst 1600b cburst 1600b 
 Sent 676899179 bytes 487263 pkt (dropped 0, overlimits 0 requeues 0) 
 rate 9663Kbit 801pps backlog 0b 0p requeues 0 
 lended: 48015 borrowed: 0 giants: 0
 tokens: 110 ctokens: 110

class htb 1:ce7b parent 1:1 prio 0 rate 9000Kbit ceil 10000Kbit burst 1598b cburst 1600b 
 Sent 676900693 bytes 487264 pkt (dropped 51720, overlimits 0 requeues 0) 
 rate 9662Kbit 801pps backlog 0b 1p requeues 0 
 lended: 439248 borrowed: 48015 giants: 0
 tokens: -8071 ctokens: -18909

mmm-cow:~# tc -s c s dev vlan1017
class htb 1:1 root rate 100000Kbit ceil 100000Kbit burst 1600b cburst 1600b 
 Sent 95845041 bytes 493720 pkt (dropped 0, overlimits 0 requeues 0) 
 rate 524288bit 815pps backlog 0b 0p requeues 0 
 lended: 5062 borrowed: 0 giants: 0
 tokens: 1907 ctokens: 1907

class htb 1:ce7b parent 1:1 prio 0 rate 9000Kbit ceil 10000Kbit burst 1598b cburst 1600b 
 Sent 95845041 bytes 493720 pkt (dropped 3593, overlimits 0 requeues 0) 
 rate 524288bit 815pps backlog 0b 0p requeues 0 
 lended: 488658 borrowed: 5062 giants: 0
 tokens: 21109 ctokens: 19000

mmm-cow:~# tc -s f s dev vlan1272
filter parent 1: protocol ip pref 5 u32 
filter parent 1: protocol ip pref 5 u32 fh 2: ht divisor 256 
filter parent 1: protocol ip pref 5 u32 fh 2:7b:800 order 2048 key ht 2 bkt 7b flowid 1:ce7b  (rule hit 555549 success 555549)
  match d9c5ce7b/ffffffff at 16 (success 555549 ) 
filter parent 1: protocol ip pref 5 u32 fh 800: ht divisor 1 
filter parent 1: protocol ip pref 5 u32 fh 800::800 order 2048 key ht 800 bkt 0 link 2:  (rule hit 859843 success 0)
  match d9c5ce00/ffffff00 at 16 (success 859843 ) 
    hash mask 000000ff at 16 
mmm-cow:~# tc -s f s dev vlan1017
filter parent 1: protocol ip pref 5 u32 
filter parent 1: protocol ip pref 5 u32 fh 2: ht divisor 256 
filter parent 1: protocol ip pref 5 u32 fh 2:7b:800 order 2048 key ht 2 bkt 7b flowid 1:ce7b  (rule hit 509684 success 509684)
  match d9c5ce7b/ffffffff at 12 (success 509684 ) 
filter parent 1: protocol ip pref 5 u32 fh 800: ht divisor 1 
filter parent 1: protocol ip pref 5 u32 fh 800::800 order 2048 key ht 800 bkt 0 link 2:  (rule hit 951792 success 0)
  match d9c5ce00/fffffe00 at 12 (success 937334 ) 
    hash mask 000000ff at 12 

наглядная картинка: http://s002.radikal.ru/i197/1102/2f/5c0642c8447dt.jpg

как видно, ситуация изменилась с точностью наоборот... :)

включать второй eth?

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

вообще, довольно странная ситуация... откинул часть шейпера отвечающую за vlan1017, начал уже привычную проверку через ssh, аплоад снова значительно просел, порядка 10 раз.

вернул шейпер для этого vlan. включил для проверки торрент клиент, разница в скорости потоков небольшая, в пользу download.

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

с такой реализацией шейпера:

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

tc q a dev eth0 root handle 1: htb
tc c a dev eth0 parent 1: classid 1:1 htb rate 100Mbit

tc f a dev eth0 parent 1:0 prio 5 protocol ip u32
tc f a dev eth0 parent 1:0 prio 5 handle 2: protocol ip u32 divisor 256

tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 800:: match ip dst 217.197.206.0/23 hashkey mask 0x000000ff at 16 link 2:
tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 800:: match ip src 217.197.206.0/23 hashkey mask 0x000000ff at 12 link 2:    

tc c a dev eth0 parent 1:1 classid 1:ce7b htb rate 9Mbit ceil 10Mbit
tc c a dev eth0 parent 1:1 classid 1:cd7b htb rate 9Mbit ceil 10Mbit
tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 2:7b: match ip dst 217.197.206.123 flowid 1:ce7b
tc f a dev eth0 protocol ip parent 1:0 prio 5 u32 ht 2:7b: match ip src 217.197.206.123 flowid 1:cd7b

торррент клиент по обоим направлениям достиг скорости в рамках сeil. при все остальных вариантах процентов на 20 меньше rate. аналогичные результаты на тестах скорости на яндексе и своем mini speedtest.

буду вводить в тестирование. о результатах отпишусь.

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