Newsgroup: it.comp.os.linux.sys
Titolo: Limitare banda con picchi orari

Ciao a tutti
Qualche idea su dove andare a sbattere la testa per limitare la banda
di un ip (o di una intera eth) ad un determinato valore (ad esempio
1mbit) potendo definire anche un picco massimo (ad esempio orario) di
2mbit?
Ho la necessità di limitare un ip a 1mbit ma in caso di sovrautilizzo
deve poter andare a 2mbit per max 1 ora continuativa (i valori sono di
esempio).
Sto leggendo varie documentazioni (in praticolare linux adv routing) ma
se qualcuno sapesse già come fare o cosa consigliarmi piu di preciso
mi farebbe un gran favore e ne sarei molto grato.
Grazie a tutti.

 mi farebbe un gran favore e ne sarei molto grato.
afaik la profilazione e' duretta sotto linux. invece mi hanno detto che
e' piu' facile da fare sotto openbsd e ci sono molti esempi. Prova a
vedere se ti puo' aiutare.

 
ftp://ftp.openbsd.org/pub/OpenBSD/doc/pf-faq.pdf
Innanzi tutto grazie. Sto leggendo ma non mi pare faccia proprio al
caso mio.
Continuo a pensare ad un doppo shaper.uno per il tetto massimo oltre il
quale non si va e uno un po piu elastico.
shaper0 = 2mbit/s
shaper1 = 1mbit/s
Shaper0 non si può superare per nessun motivo mentre shaper1 può
'sforare' per max 1 ora e prendere banda da shaper0.
Il problema però resta. come fare shaper1?
con cbq.init o tc in genere sembrerebbe possibile fare 2 classi, ma non
riesco a capire come limitare il burst (se si chiama cosi) ad un ora
massimo.

Ho fatto dei 'progressi' ma non riesco a spiegare alcune cose.
Ho fatto questo semplice script
----------
DEV="eth1"
tc qdisc add dev $DEV root handle 1: cbq avpkt 1000 bandwidth 256kbit
tc class add dev $DEV parent 1: classid 1:1 cbq rate 128kbit allot 1500
prio 5 bounded isolated
tc filter add dev $DEV parent 1: protocol ip prio 16 u32 match ip dst
123.456.789.123 flowid 1:1
-----------
Teoricamente tutto il traffico con destinazione 123.456.789.123
dovrebbe essere limitato a 128kbit in quanto gli viene assegnata la
classe 1:1
Apparentemente funziona. un grosso download viene limitato a circa
15kb/s (128 kbit) ma dopo un po sfora fino a 40-60kb/s (superiore
addirittura alla classe root da 256kbit) inoltre, è presente 'bounded'
che dovrebbe impedire l'utilizzo di banda dalla classe parent.....
Qualcuno sa spiegarmi perchè?
Potrebbe essere la soluzione al mio problema: fare una classe parent da
2mbit e una sotto classe da 1mbit SENZA bounded

 vedere se ti puo' aiutare.
Non credo che mi possa aiutare. Ho un gateway linux ed ho bisogno di
limitare la banda a seconda del cliente.
Non sono pratico di ip route ma provo a sparare un po di idee:
1:
creo classe con limite a 2mbit
creo sottoclasse con limite a 1mbit che può 'succhiare' banda da
quella superiore.
Il problema è: come sapere quanta banda ha 'succhiato' e come
limitarla nel tempo...'succhiare' massimo per 1 ora o altro tempo...
2:
Oppure un altra soluzione è fare shaping fisso a 2mbit (in questo modo
piu di 2mbit non va) ma poi come sapere quante volte usa 1mbit e quante
ne usa 2mbit?Qualche programma che genera un report di banda per gli
ip?
Non c'è nessuno che fa dei filtri di sto tipo?
Voi come limitate la banda ai clienti?
Molti (aruba ed altri provider) mettono a disposizione banda con un
tetto massimo di Xmbit ed un burst(dico bene?) di X+1mbit.
Come fanno a calcolare questo burst?


consiglio di leggere meglio..
con pf lo puoi fare, eccome.. e molto bene, per giunta..
consiglio la lettura di: "Building Firewalls with OpenBSD and PF" di Jacek
Artymiak;
Saluti
-- 
Stefano Zamboni - 
zam...@freemail.it
Legge di Tussman:
Niente č inevitabile come un errore il cui momento č giunto.

 Artymiak;
Leggero meglio (effettivamente gli ho dato solo un occhiata) ma il
problema resta: non posso usare bsd. il bridge/gw dove dovrò fare
questa cosa è linux.

 con pf lo puoi fare, eccome.. e molto bene, per giunta..
Be', il problema che pone alessandro e' talmente mal definito che
dire che "lo puoi fare eccome" mi sembra un tantino eccessivo :-)
In ogni caso, con obsd puoi gestire solo le discipline cbq e priq
e, quindi, i casi gestibili sarebbero, al piu', un sottinsieme di
quelli gestibili con linux.
Fabio

 mi farebbe un gran favore e ne sarei molto grato.
Prova a valutare cosa potresti fare con una disciplina htb, valutando
pure, eventualmente, un possibile uso di QUOTA+MARK con netfilter.
Fabio

 pure, eventualmente, un possibile uso di QUOTA+MARK con netfilter.
Quota+mark di netfilter non lo conosco per niente.
Stavo proprio valutanto htb in questo momento. imposto la banda massima
di tutta la eth e poi per ogni client imposto il ratio (1mbit) e il
ceil (2mbit).

 Non mi sembra molto chiaro quello che vorresti fare.
Rileggendo i post in effetti non sono stato molto chiaro.
Anche perchè non credo abbia molto senso questa cosa.
Dopo 1 ora, l'utente viene shaperato a 1mbit, ma per quanto tempo?!
Se il massimo di picco è un ora continuativa, trasmesso il pacchetto
ad 1 mbit (ho raggiunto la mia ora di picco), posso ritornare
nuovamente ad 2mbit per un altra ora, dato che non è piu continuativa
ma c'è un pacchetto che separa la trasmissione.
Be chiedo scusa per il casino.

 2mbit?
Mai dovuto usare, ma mi interessa assai.
Solo 2 e ti saro`/emo grati, se alla fine ci puoi fare un breve 
riassunto di quello che hai trovato e di come e quanto fuziona:
http://freshmeat.net/search/?q=shaper&section=projects&Go.x=0&Go.y=0
http://sourceforge.net/search/?type_of_search=soft&exact=1&forum_id=0&group_id=0&atid=0&words=traffic+shaper&Search=Search
Andrea

 riassunto di quello che hai trovato e di come e quanto fuziona:
Visto che ti interessa, parliamone un po.
Secondo me non ha senso fare 1 banda massima con dei picchi usabili per
massimo un ora consecutivi (come aruba) in quanto:
1- io come cliente uso 1 mb costante.
2- oggi, giorno di punta, uso 2mbit per un ora consecutiva.
 a questo punto aruba (o il gateway) butta giu la banda in quanto ho
superato l'ora consecutiva concessami.
3- una volta buttata giu la banda, dopo 1 solo pacchetto posso
ritornare a 2mbit per un altra ora in quanto la precedente è stata
superata....
Allora o c'è qualcosa che mi sfugge o alla fine la banda massima
equivale sempre 2mbit massimi eccetto 1 pacchetto all'ora che viene
mandato a 1mbit.
Se ho 2mbit massimi per 1 ora, passata questa ora vengo limitato a
1mbit ma per quanto tempo? se non è specificato appena ricevo un
pacchetto ad 1 mbit posso ritornare subito a tutta banda in quanto ho
nuovamente a disposizione 1 ora continuativa....che senso ha?

 ti piace così tanto complicarti la vita?
Perchè lo chiami complicarsi la vita?

 quelli gestibili con linux.
Quoto (e htb è molto meglio di cbq, imho.)

 lo shaper non è così ben sviluppato come per OpenBSD
Ma anche no.
La vera difficoltà è che è tutto molto criptico, ma come potenzialità...

 esempio).
Mettiamola così: nonostante abbia letto tutto il thread, continuo a
non capire coaa tu voglia fare.
Ciò premesso, con iptables/netfilter (ed eventuali patch in patch-o-matic)
e iproute2 puoi fare praticamente tutto quello che ti pare.
Certo, la progettazione può non essere semplice, ma non mi è mai
capitato di non riuscire a fare quello di cui necessitavo.

Alessandro ha scritto:

No, cosi` non ha senso. Esistono pero` delle cose che credo vengano 
usate in finanza per prevedere gli andamenti di borsa e che mi sembra si 
possano adattare assai bene a questo problema. Si tratta delle medie 
mobili. Dato che di algortitmi si tratta e sappiamo che non sono oggetti 
estranei all'informatica, si dovrebbero poter usare anche qui. Il come 
e` un altro discorso, ma il principio non mi sembra peregrino e mi 
sembra applicabile.
Una media mobile e` una media che cambia nel tempo, dato che 
l'intervallo di tempo, poniamo un'ora, resta costante come denominatore 
per misurare in tuo throughput in quel periodo, ma cambiano i valori al 
numeratore, per cui viene sostituito al primo valore che concorre a 
formare la media, l'ultimo e cosi` via (ci sono poi diverse varianti che 
p.es
. danno maggior peso agli ultimi valori). In questo modo dovresti 
poter limitare, almeno algoritmicamnte, l'utilizzo di banda a un valore 
prefissato in un certo intervallo di tempo (e magari usando uno dei tipi 
di media mobile che assegnano > peso alle ultime rilevazioni, anche 
risolvere il problema dei throughput piu` alti della media prolungati). 
Poi credo che potrebbe anche essere cosa buona e giusta imporre comunque 
anche una soglia, oltre la quale vieni limitato comunque, onde non 
succhiare tutta la banda agli altri in caso di burst (sara` una parola 
che esiste?). Cose di questo genere credo che siano possibili e gia` 
state fatte, magari con l'ausilio di qualcuno di quei pachetti software 
che ti segnalavo (credo soprattutto quelli di freshmeat). Ce ne sono 
almeno una decina e credo che gia` altri si siano trovati a dover 
affrontare questo problema (magari anche gli stessi inventori dei 
protocolli di rete per limitare o evitare le congestioni).
Sperando di non essere stato troppo confuso, spero di leggerti ancora a 
riguardo di questo argomento.
Andrea

 più efficiente.
Potrebbero esserci 100.000 ragioni valide per *doverlo* fare con Linux.
Un'esempio potrebbe essere il fatto che non si vuole aggiungere alcuna
macchina e quella presente è e deve restare Linux.
Non sempre la soluzione migliore è praticabile; a volte bisogna scendere
a compromessi.
Flavio

 qualcosa mi è più congeniale
Ma certamente, ci mancherebbe altro.
Dire però che con OBSD lo fai e con Linux no è fuorviante.

 capitato di non riuscire a fare quello di cui necessitavo.
Al momento ho risolto (non uso il burst ma limito la banda ad un valore
prefissato e basta).
Comunque vai su aruba, server dedicati e guarda in che modo ti vendono
la banda flat......Dovevo fare esattamente quello. 1mbit di banda
massima con possibilità di 2mbit di picco per massimo 1 ora.

mi sono perso un po di post per strada.
Mi sembrava di averlo specificato ma non posso usare altri OS
differenti da linux in quanto il bridge dove devo fare questo lavoro E'
e DEVE restare linux e non ho la possibilità di aggiungere una
macchina.
Comunque ok per il borrowing dalla classe parent (questo è
relativamente semplice e banale), ma il problema vero e proprio è come
limitare questo borrowing nel tempo.
La classe figlia deve prendere banda (nel caso la sua non fosse
sufficente in quel momento) dalla padre per un massimo di X minuti
consecutivi (magari 60) dopo di che non può piu farlo e si ritrova
isolata.
Il problema è proprio la gestione del borrowing nel tempo.....
Specificare i 60 minuti di borrowing e specificare anche per quanto
tempo la classe figlia si deve ritrovare isolata (magari per le 23 ore
successive dopo aver usato i 60 minuti) in modo da limitare il
borrowing a 60 minuti consecutivi al giorno.
Comunque al momento credo di aver risolto nel metodo piu semplice:
niente borrowing. (questa cosa non è urgentissima, era piu una
curiosità personale al momento, in quanto mi servirà -forse- molto
piu avanti)

 limitare questo borrowing nel tempo.
Ribadisco che con patch-o-matic si può fare.
Utilizzando, in varie combinazioni e non necessariamente altogheter,
connbytes, connrate, quota ed account, creando due classi htb distinte,
figlie di uno stesso padre, l'una con rate ad 1 mbit e ceiling a 2 mbit
e l'altra con rate e ceiling a 1 mbit, e tenendo conto che byte=rate*time
ne esci.
Le info sulle varie patch citate le trovi qui:
http://www.netfilter.org/patch-o-matic/
HTH (e se vuoi la soluzione preconfezionata, allora paghi. ;-D)

Mandi! Alessandro
  In chel dí si favelave...
A> Sto leggendo varie documentazioni (in praticolare linux adv routing) ma
A> se qualcuno sapesse già come fare o cosa consigliarmi piu di preciso
A> mi farebbe un gran favore e ne sarei molto grato.
..se non ricordo male l'anno scorso sul LinuxJournal
(
www.linuxjournal.com
) è passato un articolo che, ovviamente con tc,
faceva una cosa molto simile a questa. Ma vado a memoria.
-- 
  Ventiquattromilapensierialsecondofluisconoinarrestabili
  alimentando voglie e necessita`.			(CSI)

 HTH (e se vuoi la soluzione preconfezionata, allora paghi. ;-D)
Niente di confezionato, che gusto c'è se no?

 faceva una cosa molto simile a questa. Ma vado a memoria.
Ricordi bene: proprio qui: 
http://www.linuxjournal.com/article/3369
Grazie

 Niente di confezionato, che gusto c'è se no?
Ottima risposta. :-)
-- 
Chaos A.D.		|	Raging crowd
Tanks on the streets	|	Burning cars
Confronting police	|	Bloodshed starts
Bleeding the Plebs	|	Who'll be alive?

Mandi! Alessandro
  In chel dí si favelave...
A> Grazie
..oh, di nulla! ;)
-- 
  Sorry, non uso Emacs, sono già sposato... ;-)
							(Alvise Belotti)