Pagina 1 di 1

[RISOLTO]tc e QoS

Inviato: sab 17 gen 2009, 21:26
da ksniffer
Salve, mi è capitato di dover configurare il Quality of Sevice, ovvero dover limitare la banda in uscita da un PC su certi servizi. Tipo dei 10 Mbps vorrei dedicare 1 Mbps a NFS e i restanti 9 Mbps a tutti gli altri servizi. Ho raccolto un po' di materiale da http://lartc.org/ , ma ci ho capito poco. L'agomento non è affatto facile, almeno credo. Qualcuno di voi si è mai cimentato? Ci sono vari esempi, ma non quello di dedicare max tot Mbps al servzio X, tot2 Mbps al servizio Y, ecc...
Chi mi da na mano?
Grazie.

Re: tc e QoS

Inviato: dom 18 gen 2009, 3:22
da pardo
Imparare la sintassi e` complicato e bisogna entrare un po' per cosi` dire nella forma mentis del traffic control, ma e` fattibile...
Mentre stai imparando considera che esiste il qdisc HTB che fa circa le stesse cose ma e` decisamente piu` facile del CBQ che viene di solito spiegato per primo nelle guide.
Inoltre se sai gia` usare benino iptables puoi tranquillamente ignorare tutte le parti relative al sistema di selezione e filtering di tc, tanto c'e` il target CLASSIFY di iptables che permette di assegnare i pacchetti selezionati da iptables alle classi di tc.

Per il tuo caso, che comunque e` minimale quindi semplice, ti serve un qdisc classful qualsiasi per creare 2 classi di traffico, nfs e "tutto il resto".
Ci sono varie possibilita`, la piu` banale e` usare un PRIO(+TBF), altrimenti c'e` HTB che e` concettualmente piu` complesso ma da` una funzionalita` ottimale.

Con PRIO puoi creare una semplice suddivisione, in cui nfs -tramite TBF- avra` inflessibilmente fino a 1 mega e l'altra classe avra` automaticamente tutto il resto.
Il fatto che PRIO assegni priorita` alle classi e` irrilevante in questo caso, basta che la classe di nfs sia la prioritaria sull'altra (tanto e` limitata). Ho scelto PRIO perche` e` il qdisc classful piu` semplice!

Invece con HTB si puo` anche far si` che nfs sia limitato soltanto nel caso in cui gli altri 9 mega siano effettivamente utilizzati dall'altra classe. Altrimenti, se la rete e` libera, anche nfs puo` avere tutta la banda. In altre parole HTB permette che le classi abbiano la loro banda garantita, ma non imponendo a nessuno un limite assoluto in caso di banda libera, cosi` in sostanza la banda si sfrutta sempre al massimo.

Codice: Seleziona tutto

tc qdisc add dev eth0 root handle 1: htb default 10
tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbit burst 15k #banda totale
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 9mbit ceil 10mbit burst 15k #default
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 1mbit ceil 10mbit burst 15k #nfs
Non includo il codice per selezionare il flusso nfs perche` avendolo usato molto poco non ricordo le caratteristiche della connessione. Principalmente se usa una porta fissa o meno.

Re: tc e QoS

Inviato: mar 20 gen 2009, 12:37
da ksniffer
Grazie per le tue indicazioni.

Ho sbagliato a scrivere. Quei 10 Mbps in realtà sono 10 MByte/s. Ho provato a vedere che succedeva usando quelle impostazioni comunque (anche se è scritto sulla documentazione che la banda deve coincidere con quella della scheda e quindi 100 e non 10). Trasferisce a un massimo di ~220 kbps.
In effetti il pc ha una scheda di rete da 100 Mbps, quindi non sono 10, ma 100.
Applicando le righe che mi hai dato usando un 100 al posto di 10 e rispettivamente 10 e 90 tc si lamenta dicendo che le classi hanno un quantum troppo elevato e che si deve usare r2q... In parole povere devo dirgli io che valori usare per quantum ed r2q? E che valori potrei dare?

Poi aggiungo anche una domanda. E se ho 100 Mbps e voglio dedicare solo 10 Mbps e soltanto quelli a NFS anche quando non ci sono altri servizi sulla macchina? Voglio dire, ho questa necessità perché sulla rete la macchina può dare fastidio a tutte le altre. C'è un'applicazione di video sorveglianza che produce tipo 16 GByte di dati in poco e un trasferimento degli stessi a 100 Mbps nella rete... ovviamente non si riesce mai ad andare a 100 Mbps lo so. Dico solo che vorrei che la macchina su cui ho NFS non deve spedire a più di 10 Mbps~1Mbyte/s per non intasare la rete per altri motivi. Qual è la soluzione in questo caso?

Re: tc e QoS

Inviato: mar 20 gen 2009, 16:33
da ksniffer
Allora, dopo aver letto altri documenti ho capito che il rate che si da è la banda che si vuole assegnare a una classe e non si lega alla banda della scheda di rete. Posso anche dare un rate di 1 Mbit o di 512 kbit, il traffico non supererà mai quel valore. È ovvio che se avessi una scheda di rete di 10 Mbps e assegno a una classe un rate superiore sto andando incontro a problemi di incoerenza.

Ora resta da chiarire per me se c'è un metodo per fissare sempre e comunque la banda massima per un servizio indipendentemente dagli altri, ovvero se ho 2-3 servizi che al momento sono scarichi voglio che la banda sia comunque ripartita tipo 20% il primo, 30% il secondo e 50% il terzo anche se in pratica posso sfruttarla al 100%. È solo una mia curiosità più che un problema di utilità pratica. Ma mi sa che sta cosa si fa semplicemente assegnando una classe con una banda e un solo servizio. Mi sa di si. È una gran cosa quasto QoS su Linux. :)