LINUX.ORG.RU

tc (Trafic Control): ограничение скорости неверно действует

 


2

1

Приветствую!

Есть две машины. Между машинами канал 300mbit, который они с удовольствие занимают полностью. Нужно ограничить скорость передачи с одной машины (на ней крутится Proxmox, с нее передаются бекапы виртуалок) на другую до, например, 50mbit.

Делаю так:

#!/bin/bash
ETH=vmbr99
tc qdisc del dev $ETH root
tc qdisc add dev $ETH root handle 1:  htb default 3
tc class add dev $ETH parent 1: classid 1:1 htb rate 50mbit
tc filter add dev $ETH protocol ip parent 1: prio 1 u32 match ip dst IP_куда_передаются_данные flowid 1:1

Смотрю вывод watch tc -s -d class show dev vmbr99

Every 2.0s: tc -s -d class show dev vmbr99                                                                                                                            Tue Jul 25 13:33:25 2017

class htb 1:1 root prio 0 quantum 200000 rate 50Mbit ceil 50Mbit linklayer ethernet burst 1575b/1 mpu 0b overhead 0b cburst 1575b/1 mpu 0b overhead 0b level 0
 Sent 1100847288 bytes 782450 pkt (dropped 52463, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
 lended: 534635 borrowed: 0 giants: 0
 tokens: 1273 ctokens: 1273

Очевидно, дисциплина активна.

Но при этом реальная скорость передачи файлов не превышает примерно 20mbit!

Что делать, товарищи?

Во-первых,

echo 1 >/sys/module/sch_htb/parameters/htb_rate_est

Это покажет rate нормально, вместо нулей.

Во-вторых, не вижу листовой(leaf) дисциплины. Например сделай так:

tc class add dev $ETH parent 1:1 handle 10: pfifo limit 1000

Остальное не трогай, фильтр сделан верно. А, и еще - rate будет показываться ЕМНИП только для тех классов htb, которые создан после включения rate_est. Так что не забудь пересоздать там всё.

Pinkbyte ★★★★★ ()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от Pinkbyte

htb_rate_est включил.

Получаю вот такую ошибку при попытке выполнить команду:

tc class add dev vmbr99 parent 1:1 handle 10: pfifo limit 1000
Error: try "classid" instead of "handle"
Выполняю в таком порядке:

#!/bin/bash
ETH=vmbr99
tc qdisc del dev $ETH root
tc qdisc add dev $ETH root handle 1:  htb default 3
tc class add dev $ETH parent 1: classid 1:1 htb rate 50mbit
tc class add dev $ETH parent 1:1 handle 10: pfifo limit 1000
tc filter add dev $ETH protocol ip parent 1: prio 1 u32 match ip dst IP_куда_передаются_данные flowid 1:1
dpronyaev ()