[RISOLTO]tc e QoS

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
ksniffer
Linux 3.x
Linux 3.x
Messaggi: 540
Iscritto il: lun 30 lug 2007, 13:18
Kernel: 2.6.34
Desktop: KDE 4.4.4
Distribuzione: ArchLinux
Contatta:

[RISOLTO]tc e QoS

Messaggio 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.
Ultima modifica di ksniffer il mar 20 gen 2009, 17:21, modificato 1 volta in totale.

pardo
Linux 0.x
Linux 0.x
Messaggi: 55
Iscritto il: dom 5 ott 2008, 10:02
Slackware: 14.1
Kernel: 3.10
Desktop: xfce
Località: italy

Re: tc e QoS

Messaggio 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.

Avatar utente
ksniffer
Linux 3.x
Linux 3.x
Messaggi: 540
Iscritto il: lun 30 lug 2007, 13:18
Kernel: 2.6.34
Desktop: KDE 4.4.4
Distribuzione: ArchLinux
Contatta:

Re: tc e QoS

Messaggio 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?

Avatar utente
ksniffer
Linux 3.x
Linux 3.x
Messaggi: 540
Iscritto il: lun 30 lug 2007, 13:18
Kernel: 2.6.34
Desktop: KDE 4.4.4
Distribuzione: ArchLinux
Contatta:

Re: tc e QoS

Messaggio 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. :)

Rispondi