Como posso limitar a largura de banda de download de um processo existente? (iptables, tc,?)

1

Estou feliz em limitar a velocidade de upload por porta, mas quero limitar o download por processo.

Parece que o iptables tinha funcionalidade para correspondência e marcação de pacotes por processo na forma de --pid-owner ou --cmd-owner - mas ambos foram removidos agora?

$ iptables -m owner --help
...
owner match options:
[!] --uid-owner userid[-userid]      Match local UID
[!] --gid-owner groupid[-groupid]    Match local GID
[!] --socket-exists                  Match if socket exists

parece que há opções para combinar por usuário ou grupo, mas não processa.

Estou ciente de trickle e wondershaper - mas nenhum dos dois permite a formatação de um processo já em execução

    
por Chozabu 06.12.2016 / 02:14

1 resposta

3

Coloque o processo em um net_cls cgroup, use o cgroup para definir a classe dos pacotes e, em seguida, use um filtro classful em tc para classificar pacotes de limite nessa classe. Por exemplo:

cgcreate -g net_cls:slow
echo 0x10001 > /sys/fs/cgroup/net_cls/slow/net_cls.classid
cgclassify -g net_cls:slow <pid of the process you want to limit>
tc qdisc add dev eth0 root handle 1: htb
tc filter add dev eth0 parent 1: handle 1: cgroup
tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbps

Isso deve significar que o processo especificado por você (e qualquer um de seus processos filho) está limitado a 1 megabyte por segundo de largura de banda - ajuste o parâmetro para o último comando para qualquer largura de banda desejada.

    
por 06.12.2016 / 07:38