Limitare il throughput di rete di un processo già avviato? (Linux / FreeBSD)


10

Esiste qualche utilità per limitare il throughput di rete di un processo dopo che è stato avviato? Esempio semplice: noti che un utente prende tutta la larghezza di banda del tuo caricamento utilizzando scp e desideri limitare la velocità o ridurre la priorità del trasferimento.

Immagino di poter usare una combinazione di iptables / tc o pf per raggiungerlo, ma mi chiedevo se fosse disponibile uno strumento "one-shot" (come il gocciolamento con un'opzione --pid ^^)?


Intendevi "gocciolare"?
halp

Modifica: ho pensato che fosse inteso "gocciolamento".
Steven lunedì

Risposte:


3

Sfortunatamente non esiste una soluzione del genere per FreeBSD. Esistono molte soluzioni come dummynet / ipfw o altq / pf che vengono utilizzate per limitare l'utilizzo della rete in base a modelli diversi ma non a pid.

Su Linux esiste un modo per limitare l'utilizzo della rete in base all'utente:

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

Penso che non ci sia soluzione per limitare l'utilizzo della rete in base al pid.


2
L'ipfw di FreeBSD può anche abbinare il traffico tramite uid
gelraen,


0

In Linux, anche la combinazione di iptables e tc potrebbe essere un problema difficile, poiché l'opzione "--pid-owner" è stata abbandonata dal modulo iptables "owner" (vedere la nota sotto la tabella qui ). In effetti, solo questa associazione (pacchetto-processo) sembra essere complicata, mentre possiamo facilmente fare il resto, ovvero filtrare e limitare i pacchetti in modo abbastanza efficiente.


0

Non penso che ci sia una soluzione pronta per questo. Ma, usando strumenti Linux standard, puoi hackerare uno script che farà la cosa.

Innanzitutto, puoi ottenere un elenco di tutte le connessioni di un processo specifico con lsof. Quindi, è possibile creare criteri di ingresso con tc per tali connessioni.


0

A malincuore, se il processo è gradevole fino a +20, qualsiasi altra cosa in esecuzione sul sistema avrà la priorità e il lavoro verrà programmato meno spesso, quindi sarà più difficile riempire i buffer o i pacchetti di processo, il che dovrebbe portare a un po 'di TCP strozzamento. Sarà sporadico, ma potrebbe aiutare abbastanza.

# renice 20 -p $pid

1
Questo è un modo molto indiretto di provare a controllare la larghezza di banda e funzionerà davvero solo se il sistema è caricato in modo molto pesante - Su un sistema inattivo, tuttavia, un processo rinominato a -20 entrerà comunque nella CPU tutte le volte che lo desidera.
voretaq7,

Giusto, ma se questa non è la larghezza di banda condivisa con altri computer locali, quindi se la macchina è inattiva, per lo più non ti importa se questo processo ottiene tutta la larghezza di banda. È solo quando c'è un altro processo che cerca di usare la larghezza di banda che conta. Potremmo avere diverse definizioni di "carico molto pesante" - se c'è un altro processo che sta tentando di eseguire, ha la priorità e quindi se la media del carico è> = 1 per core, questo può aiutare. Ho notato che è rozzo ma se è l'unico strumento disponibile (FreeBSD) allora vale almeno la pena provare.
Phil P,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.