Limitando o rendimento da rede de um processo já iniciado? (Linux / FreeBSD)

10

Existe algum utilitário para limitar a taxa de transferência de um processo após o lançamento? Exemplo simples: observe que um usuário utiliza toda a largura de banda de upload usando scp e deseja limitar a taxa ou diminuir a prioridade da transferência.

Eu acho que eu poderia usar uma combinação de iptables / tc ou pf para conseguir isso, mas eu queria saber se existe uma ferramenta "one-shot" disponível (como trickle com uma opção --pid ^^)?

jbdenis
fonte
Você quis dizer "trickle"?
halp
Edit: Eu assumi que "trickle" foi intencional.
Steven segunda-feira

Respostas:

3

Infelizmente, não existe uma solução para o FreeBSD. Existem muitas soluções, como dummynet / ipfw ou altq / pf, que são usadas para limitar o uso da rede com base em padrões diferentes, mas não em pids.

No Linux, há uma maneira de limitar o uso da rede com base no usuário:

iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner test -j MARK --set-mark 1

Eu acho que não há solução para limitar a utilização da rede com base no pid.

Istvan
fonte
2
O ipfw do FreeBSD também pode combinar o tráfego por uid
gelraen
0

No Linux, mesmo a combinação de iptables e tc pode ser um problema difícil, pois a opção "--pid-owner" foi abandonada do módulo iptables "owner" (veja a nota abaixo da tabela aqui ). De fato, apenas essa associação (pacote - processo) parece complicada, enquanto podemos fazer o resto facilmente, ou seja, filtrar e limitar pacotes com bastante eficiência.

pitr
fonte
0

Eu não acho que exista uma solução pronta para isso. Mas, usando ferramentas padrão do Linux, você pode hackear um script que fará a coisa certa.

Primeiro, você pode obter uma lista de todas as conexões de processos específicos com lsof. Em seguida, você pode criar políticas de entrada com tc para essas conexões.

thor
fonte
0

De maneira grosseira, se você reduzir o processo para +20, qualquer outra coisa em execução no sistema terá prioridade e o trabalho será agendado com menos frequência; portanto, será mais difícil preencher os buffers ou pacotes de processo, o que deve levar a algum TCP. estrangulamento. Será esporádico, mas pode ajudar o suficiente.

# renice 20 -p $pid
Phil P
fonte
1
Esta é uma maneira muito indireta de tentar controlar a largura de banda e realmente funcionará apenas se o sistema estiver muito carregado - em um sistema inativo, mesmo com um processo renegado a -20, a CPU sempre entrará na CPU quantas vezes quiser.
voretaq7
Certo, mas se essa largura de banda não for compartilhada com outros computadores locais, se a máquina estiver ociosa, você geralmente não se importa se esse processo obtém toda a largura de banda. É apenas quando há outro processo que tenta usar a largura de banda que isso importa. Podemos ter definições diferentes de "muito carregado" - se houver outro processo tentando executar, ele terá prioridade e, se a média de carga for> = 1 por núcleo, isso poderá ajudar. Eu notei que é bruto, mas se é a única ferramenta disponível (FreeBSD), vale a pena tentar.
Phil P