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 ^^)?


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.


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.


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.


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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.