Primeiro, o caminho mais fácil: rsync
tem um parâmetro --bwlimit
. Essa é uma taxa constante, mas você pode usá-la para reduzi-la facilmente.
Agora, se você quiser a taxa adaptativa, existe a estrutura de controle de tráfego linux , que é realmente justa complicado. Existem várias referências que eu conheço:
- Roteamento avançado Linux & Controle de Tráfego
- HOWTO de controle de tráfego
- Um guia prático para o controle de tráfego do Linux
Pessoalmente, quando tenho que configurar isso, eu uso tcng para simplificar a tarefa. Aqui está um exemplo:
dev office {
egress {
class ( <$ssh> )
if ip_tos_delay == 1 && tcp_sport == PORT_SSH ;
class ( <$kyon> )
if ip_dst == 172.16.1.62; // monitoring host
class ( <$fast> )
if ip_tos_delay == 1;
class ( <$default> )
if 1;
htb() {
class ( rate 1440kbps, ceil 1440kbps ) {
$ssh = class ( rate 720kbps, ceil 1440kbps ) { sfq; };
$kyon = class ( rate 360kbps, ceil 1440kbps ) { sfq; };
$fast = class ( rate 180kbps, ceil 1440kbps ) { sfq; };
$default = class ( rate 180kbps, ceil 1440kbps ) { sfq; };
}
}
}
}
Nesse exemplo, o tráfego que está sendo enviado pela interface do escritório está sendo classificado em várias classes: ssh, kyon, fast e default. O link (um T1, quando este estava em uso) é limitado a 1440kbps (isso deve ser um pouco menor do que a taxa de link real, de modo que o armazenamento em buffer ocorra na caixa do Linux, não em um roteador). Você pode ver que o ssh é atribuído 720kbps, kyon 360, etc. Tudo pode estourar à taxa cheia (o ceil). Quando há contenção, a 'taxa' atua como uma razão, então ssh receberia 1/2, kyon 1/4, etc. O 'sfq' diz como lidar com várias sessões ssh; sfq é uma forma de round-robin.