Analisi del QoS di ZeroShell mediante il

Download Report

Transcript Analisi del QoS di ZeroShell mediante il

Il QoS di ZeroShell di Renato Morano ®GPL3 1
Analisi del QoS di ZeroShell
mediante il generatore di traffico
Ostinato
Premessa
Il seguente documento presenta le mie considerazioni sul QoS utilizzato da ZeroShell. Le prove
sono state effettuate con un generatore di traffico software (www.ostinato.org). Effettuerò più prove
cambiando le condizioni iniziali di traffico entrante e le configurazioni di ZeroShell per verificare
come il QoS influisce sul traffico uscente. Il documenti di riferimento sono: LARC How To e
“HTB Linux queuing discipline manual - user guide”.
In genere non vi è nessun motivo per un flusso di dati di ricevere un trattamento differente rispetto
ad un altro nell’attraversamento di una interfaccia di rete. L’unica condizione che ne può cambiare
il comportamento è il flusso per unità di tempo. Le tipologie di traffico con una portata maggiore in
ingresso verranno riportate in uscita in maniera proporzionale. Questo comportamento lo
ritroviamo anche nel QoS di ZeroShell quando non vi è nessuna impostazione di “banda massima”
e di “banda assegnata”, sino a quando la banda totale in ingresso non supera la Global
assegnata. Superata la Global dal traffico in ingresso il QoS comincerà ad eseguire il drop dei
pacchetti per mantenere il traffico sotto la soglia imposta dalla Global.
Le verifiche sono effettuate sempre – a meno di eccezioni volute - in condizione di saturazione
della portata massima. Il flusso in ingresso è sempre maggiore o uguale al valore di banda massima
configurato tramite GUI di ZeroShell.
Per avere un’idea della differenza tra il traffico generato da Ostinato e quello misurato dalle
statistiche di ZeroShell, riportate in seguito, effettuiamo una prima serie di test. Definiamo su
ZeroShell una banda massima, una classe di traffico oltre a quella di default. A questo punto
generiamo con Ostinato un volume di traffico al di sotto della banda massima e vediamo come
questo traffico imposto venga registrato dalle statistiche di ZeroShell.
Il QoS di ZeroShell di Renato Morano ®GPL3 2
Classe Default Classe RDP
Traffico complessivo (Kbps)
Traffico generato
1024 Kbps
1024 Kbps
2048
Traffico misurato
977376 bps
978872 bps
1956
Differenza
92
Potremmo ipotizzare questa differenza di 100 Kbps come un errore introdotto dalle varie
approssimazioni tra bit e Kbit tra i vari strumenti (tc, ZeroShell, Ostinato, Task Manager). Per avere
un’idea di misura considereremo questa differenza come un errore da introdurre nelle misure.
Considererò un errore nelle misure pari al 5% del valore del traffico in ingresso.
Il task manager di Windows dove è installato Ostinato riporta un flusso complessivo di 2,1 Mbps.
Le statistiche grafiche di ZeroShell, così come il risultato del comando tc, riportano un rate
misurato complessivo differente pari a di 1956 Kbps per il comando tc e 1962 Kbit per le statistiche
grafiche.
root@ZeroShell ~> tc -s -d class show dev ETH00
class htb 1:10 parent 1:1 leaf 10: prio 0 quantum 1500 rate 8bit ceil 3000Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 47654749 bytes 792604 pkt (dropped 0, overlimits 0 requeues 0)
rate 977376bit 2036pps backlog 0b 0p requeues 0
lended: 9 borrowed: 792595 giants: 0
tokens: -248182838 ctokens: 62570
Il QoS di ZeroShell di Renato Morano ®GPL3 3
class htb 1:1 root rate 3000Kbit ceil 3000Kbit burst 1599b/1 mpu 0b overhead 0b cburst 1599b/1
mpu 0b overhead 0b level 7
Sent 95520121 bytes 1585055 pkt (dropped 0, overlimits 0 requeues 0)
rate 1956Kbit 4072pps backlog 0b 0p requeues 0
lended: 1585037 borrowed: 0 giants: 0
tokens: 58517 ctokens: 58517
class htb 1:28 parent 1:1 leaf 28: prio 0 quantum 1500 rate 8bit ceil 3000Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 47865372 bytes 792451 pkt (dropped 0, overlimits 0 requeues 0)
rate 978872bit 2036pps backlog 0b 0p requeues 0
lended: 9 borrowed: 792442 giants: 0
tokens: -248183477 ctokens: 62127
Illustration 1: QoS Statistics
La tabella precedente la possiamo riformulare indicando il numero di pacchetti per secondo, in
questo modo osserviamo che il numero di pacchetti complessivo è proprio pari alla somma dei
pacchetti per secondo della classe default con la classe RDP
Classe Default Classe RDP
Traffico complessivo
Traffico generato
1024 Kbps
1024 Kbps
2048 Kbps
Traffico misurato
2036 pps
2036 pps
4072 pps
Come ulteriore esempio raddoppiamo il traffico generato entrante per entrambe le tipologie di
traffico
Il QoS di ZeroShell di Renato Morano ®GPL3 4
Il traffico misurato dal Task Manager di Windows indica un valore di 4,2 Mbps,
Il QoS di ZeroShell di Renato Morano ®GPL3 5
Il comando tc restituisce come valore complessivo un rate di 2926 Kbps, direttamente connesso al
valore limite della banda globale, e le singole classi registrano un flusso identico pari a 1463 Kbit
root@ZeroShell ~> tc -s -d class show dev ETH00
class htb 1:10 parent 1:1 leaf 10: prio 0 quantum 1500 rate 8bit ceil 3000Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 10344286 bytes 172200 pkt (dropped 53678, overlimits 0 requeues 0)
rate 1463Kbit 3043pps backlog 0b 127p requeues 0
lended: 4 borrowed: 172196 giants: 0
tokens: -612919001 ctokens: 63350
class htb 1:1 root rate 3000Kbit ceil 3000Kbit burst 1599b/1 mpu 0b overhead 0b cburst 1599b/1
mpu 0b overhead 0b level 7
Sent 20690011 bytes 344382 pkt (dropped 0, overlimits 0 requeues 0)
rate 2926Kbit 6091pps backlog 0b 0p requeues 0
lended: 344374 borrowed: 0 giants: 0
tokens: -1809 ctokens: -1809
class htb 1:28 parent 1:1 leaf 28: prio 0 quantum 1500 rate 8bit ceil 3000Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 10345785 bytes 172183 pkt (dropped 53656, overlimits 0 requeues 0)
rate 1463Kbit 3047pps backlog 0b 118p requeues 0
lended: 4 borrowed: 172179 giants: 0
tokens: -740507768 ctokens: 63595
class sfq 10:34a parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 7620b 127p requeues 0
class sfq 28:3c7 parent 28:
(dropped 0, overlimits 0 requeues 0)
backlog 7200b 120p requeues 0
Con questi primi esempi abbiamo la conferma che il traffico si suddivide in proporzione al flusso
entrante e che il valore della banda massima viene rispettata.
Il QoS di ZeroShell di Renato Morano ®GPL3 6
Traffico con stessa priorità
Generiamo per ogni classe a pari priorità la stessa quantità di traffico circa - 768 Kbps - tale da
saturare la massima banda consentita (768*4=3072Kbps). Il traffico è generato tramite il software
Ostinato (www.ostinato.org) che è presente su di un server Windows.
Il QoS di ZeroShell di Renato Morano ®GPL3 7
Le statistiche riportano come il traffico si ripartisce.
Maggiori dettagli li ritroviamo attraverso il comando tc eseguito direttamente su una shell di
“ZeroShell”. In evidenza i campi che consentono l’interpretazione dei risultati del QoS.
class htb : HTB - Hierarchy Token Bucket
prio: In the round-robin process, classes with the lowest priority field are tried for packets first.
rate : Maximum rate this class and all its children are guaranteed
ceil : Maximum rate at which a class can send, if its parent has bandwidth to spare. Defaults to the
configured rate, which implies no borrowing.
pps: pacchetti per secondo
dropped: numero di pacchetti eliminati
Il QoS di ZeroShell di Renato Morano ®GPL3 8
La suddivisione gerarchica delle classi è riportata nel grafico seguente.
1:1
root
1:10
default
1:26
SMB
1:28
RDP
1:30
LPR
La classe root rappresenta l’interfaccia virtuale su cui viene fissata la banda globale massima e al di
sotto le varie classi di traffico che condividono la banda messa a disposizione dalla classe root.
root@ZeroShell ~> tc -s -d class show dev ETH00
class htb 1:1 root rate 3000Kbit ceil 3000Kbit burst 1599b/1 mpu 0b overhead 0b cburst 1599b/1
mpu 0b overhead 0b level 7
Sent 39151455 bytes 649722 pkt (dropped 0, overlimits 0 requeues 0)
rate 2940Kbit 6107pps backlog 0b 0p requeues 0
lended: 649707 borrowed: 0 giants: 0
tokens: 50588 ctokens: 50588
class htb 1:10 (default) parent 1:1 leaf 10: prio 0 quantum 1500 rate 8bit ceil 3000Kbit burst
4096Mb/1 mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 9805274 bytes 162638 pkt (dropped 0, overlimits 0 requeues 0)
rate 739400bit 1531pps backlog 0b 0p requeues 0
lended: 3 borrowed: 162635 giants: 0
tokens: -172851655 ctokens: 62596
class htb 1:28 (RDP) parent 1:1 leaf 28: prio 0 quantum 1500 rate 8bit ceil 3000Kbit burst
4096Mb/1 mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 9867306 bytes 162436 pkt (dropped 188, overlimits 0 requeues 0)
rate 735768bit 1525pps backlog 0b 0p requeues 0
lended: 2 borrowed: 162434 giants: 0
tokens: -162906730 ctokens: 62140
class htb 1:30 (LPR) parent 1:1 leaf 30: prio 0 quantum 1500 rate 8bit ceil 3000Kbit burst
4096Mb/1 mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 9739380 bytes 162323 pkt (dropped 0, overlimits 0 requeues 0)
rate 732192bit 1525pps backlog 0b 0p requeues 0
Il QoS di ZeroShell di Renato Morano ®GPL3 9
lended: 5 borrowed: 162318 giants: 0
tokens: -888130102 ctokens: 62206
class htb 1:26 (SMB) parent 1:1 leaf 26: prio 0 quantum 1500 rate 8bit ceil 3000Kbit burst
4096Mb/1 mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 9739495 bytes 162325 pkt (dropped 0, overlimits 0 requeues 0)
rate 732200bit 1525pps backlog 0b 0p requeues 0
lended: 5 borrowed: 162320 giants: 0
tokens: -888129002 ctokens: 62177
Il traffico viene suddiviso in parti uguali. Il numero di pacchetti per secondo - pps - di ciascuna
classe è confrontabile ed inoltre, la loro somma, coincide con il valore conteggiato dalla “ root
class”. Il comando tc “fotografa” il traffico nel momento in cui viene eseguito il comando stesso.
Traffico con la stessa priorità ma con valori di flusso differenti
Raddoppiamo il traffico generato da una classe e vediamo come questa cresce rispetto alle altre.
Generiamo 1536 Kbps di traffico RDP mantenendo invariata la priorità High e il traffico generato
sulle altre classi ( DEFAULT=LPR=SMB 768Kbps)
Vediamo che la classe RDP è solo leggermente in vantaggio rispetto alle altre. Dobbiamo
considerare che il volume di traffico è tale da saturare il limite di banda imposto all’interfaccia
Il QoS di ZeroShell di Renato Morano ®GPL3 10
ETH00 dal QoS. Il dettaglio lo si scorge osservando il valore di pacchetti “ dropped” nella classe
1:28 corrispondente al traffico RDP.
root@ZeroShell ~> tc -s -d class show dev ETH00
class htb 1:1 root rate 3000Kbit ceil 3000Kbit burst 1599b/1 mpu 0b overhead 0b cburst 1599b/1
mpu 0b overhead 0b level 7
Sent 266506196 bytes 4398517 pkt (dropped 0, overlimits 0 requeues 0)
rate 2982Kbit 6202pps backlog 0b 0p requeues 0
lended: 4398454 borrowed: 0 giants: 0
tokens: -2414 ctokens: -2414
class htb 1:10 parent 1:1 leaf 10: prio 0 quantum 1500 rate 8bit ceil 3000Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 65785110 bytes 1093487 pkt (dropped 135, overlimits 0 requeues 0)
rate 736352bit 1530pps backlog 0b 18p requeues 0
lended: 18 borrowed: 1093469 giants: 0
tokens: -792334792 ctokens: 62985
class htb 1:28 (RDP) parent 1:1 leaf 28: prio 0 quantum 1500 rate 8bit ceil 3000Kbit burst
4096Mb/1 mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 69635666 bytes 1120273 pkt (dropped 688413, overlimits 0 requeues 0)
rate 780704bit 1620pps backlog 0b 116p requeues 0
lended: 15 borrowed: 1120258 giants: 0
tokens: -120820900 ctokens: 62782
class htb 1:30 parent 1:1 leaf 30: prio 0 quantum 1500 rate 8bit ceil 3000Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 65541960 bytes 1092366 pkt (dropped 0, overlimits 0 requeues 0)
rate 732424bit 1526pps backlog 0b 33p requeues 0
lended: 15 borrowed: 1092351 giants: 0
tokens: -86399504 ctokens: 61396
class htb 1:26 parent 1:1 leaf 26: prio 0 quantum 1500 rate 8bit ceil 3000Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 65543460 bytes 1092391 pkt (dropped 0, overlimits 0 requeues 0)
rate 732504bit 1526pps backlog 0b 9p requeues 0
lended: 15 borrowed: 1092376 giants: 0
tokens: -86277930 ctokens: 63276
class sfq 10:17c parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 1080b 18p requeues 0
class sfq 30:61 parent 30:
(dropped 0, overlimits 0 requeues 0)
backlog 1980b 33p requeues 0
class sfq 28:207 parent 28:
(dropped 0, overlimits 0 requeues 0)
backlog 6840b 114p requeues 0
class sfq 26:3fa parent 26:
Il QoS di ZeroShell di Renato Morano ®GPL3 11
(dropped 0, overlimits 0 requeues 0)
backlog 540b 9p requeues 0
La spiegazione che mi sono dato è la seguente:
le classi che compongono il traffico concorrono alla pari al raggiungimento della banda massima
ma in maniera proporzionale al loro flusso nell’unità di tempo. Raggiunta la banda massima il
traffico in uscita sarà regolato dal QoS che scarterà i pacchetti in eccesso per mantenere il flusso
costante e in proporzione scarterà i pacchetti che sono più numerosi.
Il QoS di ZeroShell di Renato Morano ®GPL3 12
Traffico con priorità differenti
Eseguiamo una prova di traffico mantenendo lo stesso traffico iniziale - 768Kbps - per ciascuna
classe ma con la priorità diverse. Per la DEFAULT e LPR imponiamo un valore Low e per RDP e
SMB un valore High. Ci aspettiamo che le classi a più alta priorità si contendano la maggior parte
del traffico in parti uguali. Questo perché avendo una priorità più alta vengono servite prima dal
QoS rispetto alle classi a bassa priorità. Il risultato sarà visibile nel throughput delle classi.
I valori ottenuti riportano scostamenti molto piccoli e non apprezzabili da un traffico generato di
768Kbps. Le due classi a bassa priorità registrano un rate che oscilla tra 715 Kbps e 720 Kbps
mentre quelle ad alta priorità presentano valori leggermente superiori – 722Kbps - ed un un caso
pari a quello a bassa priorità – 715 Kbps -.
Per rendere evidente il comportamento del QoS aumentiamo per tutte le classi il valore del traffico
prodotto da Ostinato a 868 Kbps ed osserviamo i valori che si ottengono.
Questi valori possono essere compresi se prendiamo in considerazione il dettaglio fornito dal
comando tc. Dove le classi ad alta priorià (prio 0) non presentano nessun packetto “dropped” al
contrario delle classi a bassa priorità (prio 2).
Il QoS di ZeroShell di Renato Morano ®GPL3 13
root@ZeroShell ~> tc -s -d class show dev ETH00
class htb 1:1 root rate 3000Kbit ceil 3000Kbit burst 1599b/1 mpu 0b overhead 0b cburst 1599b/1
mpu 0b overhead 0b level 7
Sent 210275838 bytes 3497758 pkt (dropped 0, overlimits 0 requeues 0)
rate 2982Kbit 6202pps backlog 0b 0p requeues 0
lended: 3497709 borrowed: 0 giants: 0
tokens: -1950 ctokens: -1950
class htb 1:10 parent 1:1 leaf 10: prio 2 quantum 1500 rate 8bit ceil 3000Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 48870148 bytes 811370 pkt (dropped 125765, overlimits 0 requeues 0)
rate 661984bit 1373pps backlog 0b 122p requeues 0
lended: 12 borrowed: 811358 giants: 0
tokens: -697631587 ctokens: 63113
class htb 1:28 parent 1:1 leaf 28: prio 0 quantum 1500 rate 8bit ceil 3000Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 56443515 bytes 937018 pkt (dropped 0, overlimits 0 requeues 0)
rate 830320bit 1726pps backlog 0b 1p requeues 0
lended: 11 borrowed: 937007 giants: 0
tokens: -755541332 ctokens: 64156
class htb 1:30 parent 1:1 leaf 30: prio 2 quantum 1500 rate 8bit ceil 3000Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 48779340 bytes 812989 pkt (dropped 123263, overlimits 0 requeues 0)
rate 661816bit 1379pps backlog 0b 124p requeues 0
lended: 13 borrowed: 812976 giants: 0
tokens: -574702020 ctokens: 64156
class htb 1:26 parent 1:1 leaf 26: prio 0 quantum 1500 rate 8bit ceil 3000Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 56182835 bytes 936381 pkt (dropped 0, overlimits 0 requeues 0)
rate 827920bit 1725pps backlog 0b 0p requeues 0
lended: 13 borrowed: 936368 giants: 0
tokens: -574641854 ctokens: 64114
class sfq 10:1d5 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 7320b 122p requeues 0
class sfq 30:287 parent 30:
(dropped 0, overlimits 0 requeues 0)
backlog 7440b 124p requeues 0
class sfq 26:2a6 parent 26:
(dropped 0, overlimits 0 requeues 0)
backlog 120b 2p requeues 0
Riportiamo i risultati in formato tabellare
Il QoS di ZeroShell di Renato Morano ®GPL3 14
CLASSE Rete int
priorità Descrizione pps
dropped
Rate out
(bit)
Rate out
Kbit
htb 1:1
3,6 Mbps
ROOT
6202 pps
2982 Kbit
htb 1:10
868 Kbps 2
DEFAULT
1373 pps
125765
661984
646,47
htb 1:28
868 Kbps 0
RDP
1726 pps
0
830320
810,86
htb 1:30
868 Kbps 2
LPR
1379 pps
123263
661816
646,3
htb 1:26
868 Kbps 0
SMB
1725 pps
0
827920
808,52
htb 1:28 p0
htb 1:26 p0
rate in
rate out
htb 1:30 p2
hbt 1:10 p2
0
100
200
300
400
500
600
700
800
900
1000
La spiegazione che mi sono dato è la seguente:
i pacchetti a bassa priorità entrando – o meglio uscendo - della coda per ultimi vengono
“dropped” dal QoS per mantenere il valore della banda pari ai 3 Mbps.
Il QoS di ZeroShell di Renato Morano ®GPL3 15
Ora enfatizziamo il traffico ad alta priorità raddoppiandolo e riportando il flusso delle altre due
classi a 768 Kbps:
- rate RDP è pari al rate SMB con un valore di 1536Kbps
- rate DEFAULT è pari al rate LPR con un valore di 768 Kbps
Il traffico complessivo a monte generato è ora di 4.7Mbps
CLASSE Rate in
htb 1:1
4.7 Mbps
htb 1:10
768 Kbps
htb 1:28
priorità Descrizione
pps
dropped Rate out
ROOT
6108
DEFAULT
44
914149 21776
1536 Kbps 0
RDP
2966
25473
htb 1:30
768 Kbps
2
LPR
45
912091 21736
htb 1:26
1536 Kbps 0
SMB
3053
2
Rate out
(Kbit)
2982 Kbit
0
21,27
1473 Kbit
1465 Kbit
21,23
Il QoS di ZeroShell di Renato Morano ®GPL3 16
htb 1:26 p0
htb 1:28 p0
rate in
rate out
htb 1:30 p2
htb 1:10 p2
0
200
400
600
800
1000
1200
1400
1600
1800
Osserviamo un valore elevato di pacchetti “dropped” per le classi a bassa priorità e con rate basso
mentre un valore di pacchetti “dropped” inferiore per le classi ad alta priorità e con un rate tale da
saturare la banda disponibile.
root@ZeroShell ~> tc -s -d class show dev ETH00
class htb 1:1 root rate 3000Kbit ceil 3000Kbit burst 1599b/1 mpu 0b overhead 0b cburst 1599b/1
mpu 0b overhead 0b level 7
Sent 640631794 bytes 10585968 pkt (dropped 0, overlimits 0 requeues 0)
rate 2982Kbit 6108pps backlog 0b 0p requeues 0
lended: 10585843 borrowed: 0 giants: 0
tokens: -2097 ctokens: -2097
class htb 1:10 parent 1:1 leaf 10: prio 2 quantum 1500 rate 8bit ceil 3000Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 104530686 bytes 1735763 pkt (dropped 914149, overlimits 0 requeues 0)
rate 21776bit 44pps backlog 0b 127p requeues 0
lended: 31 borrowed: 1735732 giants: 0
tokens: -563569595 ctokens: 62406
class htb 1:28 parent 1:1 leaf 28: prio 0 quantum 1500 rate 8bit ceil 3000Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 217901668 bytes 3546881 pkt (dropped 25473, overlimits 0 requeues 0)
rate 1473Kbit 2966pps backlog 0b 1p requeues 0
lended: 30 borrowed: 3546851 giants: 0
tokens: -560561611 ctokens: 64009
class htb 1:30 parent 1:1 leaf 30: prio 2 quantum 1500 rate 8bit ceil 3000Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Il QoS di ZeroShell di Renato Morano ®GPL3 17
Sent 104168520 bytes 1736142 pkt (dropped 912091, overlimits 0 requeues 0)
rate 21736bit 45pps backlog 0b 127p requeues 0
lended: 32 borrowed: 1736110 giants: 0
tokens: -522237110 ctokens: 64156
class htb 1:26 parent 1:1 leaf 26: prio 0 quantum 1500 rate 8bit ceil 3000Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 214030920 bytes 3567182 pkt (dropped 0, overlimits 0 requeues 0)
rate 1465Kbit 3053pps backlog 0b 2p requeues 0
lended: 32 borrowed: 3567150 giants: 0
tokens: -522214810 ctokens: 63776
class sfq 10:394 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 52b 1p requeues 0
class sfq 10:3b8 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 7560b 126p requeues 0
class sfq 30:48 parent 30:
(dropped 0, overlimits 0 requeues 0)
backlog 7620b 127p requeues 0
class sfq 28:213 parent 28:
(dropped 0, overlimits 0 requeues 0)
backlog 120b 2p requeues 0
class sfq 26:fe parent 26:
(dropped 0, overlimits 0 requeues 0)
backlog 120b 2p requeues 0
root@ZeroShell ~>
Il QoS di ZeroShell di Renato Morano ®GPL3 18
Nelle stesse condizioni di traffico, RDP=SMB 1536Kbps e DEFAULT=LPR a 768 Kbps ,
cambiamo in “Medium” la priorità della classe SMB e vediamo i risultati nelle statistiche.
CLASSE Rate in
priorit Descrizion pps
à
e
ROOT
dropped
htb 1:1
4.7 Mbps
htb 1:10
768 Kbps
htb 1:28
1536 Kbps 0
RDP
3045
htb 1:30
768 Kbps
2
LPR
43
802277
20664
htb 1:26
1536Kbps 1
SMB
2939
45455
1411 Kbit
2
6535
Rate
Rate in Kbit
2982 Kbit
DEFAULT 8
809658
352
21320
20,82
1529 Kbit
20,18
htb 1:28 p0
htb 1:26 p1
rate in
rate out
htb 1:30 p2
htb 1:10 p2
0
200
400
600
800
1000
1200
1400
1600
1800
Il QoS di ZeroShell di Renato Morano ®GPL3 19
root@ZeroShell ~> tc -s -d class show dev ETH00
class htb 1:1 root rate 3000Kbit ceil 3000Kbit burst 1599b/1 mpu 0b overhead 0b cburst 1599b/1
mpu 0b overhead 0b level 7
Sent 202680303 bytes 3311824 pkt (dropped 0, overlimits 0 requeues 0)
rate 2982Kbit 6035pps backlog 0b 0p requeues 0
lended: 3311776 borrowed: 0 giants: 0
tokens: -2432 ctokens: -2432
class htb 1:10 parent 1:1 leaf 10: prio 2 quantum 1500 rate 8bit ceil 3000Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 1528717 bytes 18017 pkt (dropped 809658, overlimits 0 requeues 0)
rate 21320bit 8pps backlog 0b 126p requeues 0
lended: 12 borrowed: 18005 giants: 0
tokens: -529169833 ctokens: 64156
class htb 1:28 (RDP) parent 1:1 leaf 28: prio 0 quantum 1500 rate 8bit ceil 3000Kbit burst
4096Mb/1 mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 103069946 bytes 1659113 pkt (dropped 352, overlimits 0 requeues 0)
rate 1529Kbit 3045pps backlog 0b 0p requeues 0
lended: 12 borrowed: 1659101 giants: 0
tokens: -657630442 ctokens: 63128
class htb 1:30 parent 1:1 leaf 30: prio 2 quantum 1500 rate 8bit ceil 3000Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 1506780 bytes 25113 pkt (dropped 802277, overlimits 0 requeues 0)
rate 20664bit 43pps backlog 0b 127p requeues 0
lended: 12 borrowed: 25101 giants: 0
tokens: -658225845 ctokens: 64156
class htb 1:26 (SMB) parent 1:1 leaf 26: prio 1 quantum 1500 rate 8bit ceil 3000Kbit burst
4096Mb/1 mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 96574860 bytes 1609581 pkt (dropped 45455, overlimits 0 requeues 0)
rate 1411Kbit 2939pps backlog 0b 4p requeues 0
lended: 12 borrowed: 1609569 giants: 0
tokens: -657643140 ctokens: 64156
class sfq 10:117 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 104b 2p requeues 0
class sfq 10:18c parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 2894b 3p requeues 0
class sfq 10:1c6 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 4256b 4p requeues 0
class sfq 10:2de parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 200b 2p requeues 0
class sfq 10:2f6 parent 10:
(dropped 0, overlimits 0 requeues 0)
Il QoS di ZeroShell di Renato Morano ®GPL3 20
backlog 8583b 9p requeues 0
class sfq 10:30d parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 110b 1p requeues 0
class sfq 10:3fb parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 6300b 105p requeues 0
class sfq 30:1a0 parent 30:
(dropped 0, overlimits 0 requeues 0)
backlog 7620b 127p requeues 0
class sfq 26:101 parent 26:
(dropped 0, overlimits 0 requeues 0)
backlog 180b 3p requeues 0
root@ZeroShell ~>
Il QoS di ZeroShell di Renato Morano ®GPL3 21
In questo caso la classe RDP con priorità massima mantiene un rate - 1529 Kbps - pari a quello
generato, poi segue la classe SMB con priorità Medium e con un rate paragonabile a quello
generato. Infine a seguire le due classi a priorità più bassa che presentano un elevato valore di
pacchetti “dropped” che vanno a saturare la banda resa disponibile dalle altre due classi.
L’interpretazione attraverso il numero di pacchetti per secondo (pps) mette in evidenza la relazione
priorità e flusso che attraversa la ETH00
CLASSE
Rate in
htb 1:1
4.7 Mbps
htb 1:10
768 Kbps
htb 1:28
priorità
Descrizione
pps
Rate
ROOT
6035
2982 Kbit
2
DEFAUT
8
21320 bit
1536 Kbps
0
RDP
3045
1529 Kbit
htb 1:30
768 Kbps
2
LPR
43
20664 bit
htb 1:26
1536Kbps
1
SMB
2939
1411 Kbit
Il QoS di ZeroShell di Renato Morano ®GPL3 22
Infine ridistribuiamo banda e priorità delle classi come segue:
- aumentiamo il traffico LPR a bassa priorità raddoppiandolo
- riduciamo il flusso della classe SMB con priorità Medium
- manteniamo invariato il flusso della classe RDP.
CLASSE
Rate in
input
htb 1:1
4.7 Mbps
htb 1:10
768 Kbps
htb 1:28
priorit Descrizione pps
à
Rate in output
Rate out in Kbit
ROOT
6179
2981Kbit
DEFAUT
795
388448
1536 Kbps 0
RDP
3053
1473 Kbit
htb 1:30
1536 Kbps 2
LPR
808
388048
378,95
htb 1:26
768 Kbps
SMB
1523
730928
713,8
2
1
Il traffico complessivo a monte generato da Ostinato è di 4.7 Mbps
379,34
Il QoS di ZeroShell di Renato Morano ®GPL3 23
htb 1:28 p0
htb 1:26 p1
rate in
rate out
htb 1:30 p2
htb 1:10 p2
0
200
400
600
800
1000
1200
1400
1600
1800
root@ZeroShell ~> tc -s -d class show dev ETH00
class htb 1:1 root rate 3000Kbit ceil 3000Kbit burst 1599b/1 mpu 0b overhead 0b cburst 1599b/1
mpu 0b overhead 0b level 7
Sent 326687166 bytes 5354987 pkt (dropped 0, overlimits 0 requeues 0)
rate 2981Kbit 6179pps backlog 0b 0p requeues 0
lended: 5354915 borrowed: 0 giants: 0
tokens: -2005 ctokens: -2005
class htb 1:10 (DEFAULT) parent 1:1 leaf 10: prio 2 quantum 1500 rate 8bit ceil 3000Kbit burst
4096Mb/1 mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 11787751 bytes 187900 pkt (dropped 1147402, overlimits 0 requeues 0)
rate 388448bit 795pps backlog 0b 125p requeues 0
lended: 18 borrowed: 187882 giants: 0
tokens: -29364790 ctokens: 64156
class htb 1:28 (RDP) parent 1:1 leaf 28: prio 0 quantum 1500 rate 8bit ceil 3000Kbit burst
4096Mb/1 mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 165419495 bytes 2675755 pkt (dropped 352, overlimits 0 requeues 0)
rate 1473Kbit 3053pps backlog 0b 0p requeues 0
lended: 18 borrowed: 2675737 giants: 0
tokens: -282823205 ctokens: 64036
class htb 1:30 (LPR) parent 1:1 leaf 30: prio 2 quantum 1500 rate 8bit ceil 3000Kbit burst
4096Mb/1 mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 11764140 bytes 196069 pkt (dropped 1455211, overlimits 0 requeues 0)
rate 388048bit 808pps backlog 0b 127p requeues 0
lended: 18 borrowed: 196051 giants: 0
Il QoS di ZeroShell di Renato Morano ®GPL3 24
tokens: -282893839 ctokens: 64156
class htb 1:26 (SMB) parent 1:1 leaf 26: prio 1 quantum 1500 rate 8bit ceil 3000Kbit burst
4096Mb/1 mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 137715780 bytes 2295263 pkt (dropped 58182, overlimits 0 requeues 0)
rate 730928bit 1523pps backlog 0b 1p requeues 0
lended: 18 borrowed: 2295245 giants: 0
tokens: -282829490 ctokens: 64156
class sfq 10:182 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 7500b 125p requeues 0
class sfq 30:271 parent 30:
(dropped 0, overlimits 0 requeues 0)
backlog 7620b 127p requeues 0
class sfq 26:5f parent 26:
(dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
root@ZeroShell ~>
Esaminiamo nel dettaglio:
La presenza del QoS risulta evidente, a fronte di un traffico doppio della classe LPR –1536 Kbpsla differenza di priorità fa in modo che il flusso SMB uscente sia paragonabile a quello generato da
Ostinato.
CLASSE
Rate in input
htb 1:1
4.7 Mbps
htb 1:10
768 Kbps
htb 1:28
priorità
Descrizione pps
Rate in output
ROOT
6179
2981Kbit
2
DEFAUT
795
379 Kbit
1536 Kbps
0
RDP
3053
1473 Kbit
htb 1:30
1536 Kbps
2
LPR
808
379 Kbit
htb 1:26
768 Kbps
1
SMB
1523
714 Kbit
Il QoS di ZeroShell di Renato Morano ®GPL3 25
class htb 1:26 (SMB) parent 1:1 leaf 26: prio 1 quantum 1500 rate 8bit ceil 3000Kbit burst
4096Mb/1 mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 139377120 bytes 2322952 pkt (dropped 0, overlimits 0 requeues 0)
rate 732584bit 1526pps backlog 0b 2p requeues 0
lended: 18 borrowed: 2322934 giants: 0
tokens: -91998852 ctokens: 64156
Il flusso del traffico con priorità inferiore LPR risulta minore di quello generato da Ostinato (1536
Kbps) e presenta un numero elevato di pacchetti “dropped”
CLASSE
Rate in input
htb 1:1
4.7 Mbps
htb 1:10
768 Kbps
htb 1:28
priorità
Descrizione pps
Rate in output
ROOT
6179
2981 Kbit
2
DEFAUT
795
379 Kbit
1536 Kbps
0
RDP
3053
1473 Kbit
htb 1:30
1536 Kbps
2
LPR
808
379 Kbit
htb 1:26
768 Kbps
1
SMB
1523
714 Kbit
class htb 1:30 (LPR) parent 1:1 leaf 30: prio 2 quantum 1500 rate 8bit ceil 3000Kbit burst
4096Mb/1 mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 13789140 bytes 229819 pkt (dropped 1485272, overlimits 0 requeues 0)
rate 390408bit 813pps backlog 0b 127p requeues 0
lended: 18 borrowed: 229801 giants: 0
tokens: -91524080 ctokens: 63625
Il QoS di ZeroShell di Renato Morano ®GPL3 26
Infine la classe RDP con priorità più elevata, prio 0, mantiene il rate generato e non presenta alcun
dropped
class htb 1:28 parent 1:1 leaf 28: prio 0 quantum 1500 rate 8bit ceil 3000Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 219952466 bytes 3658618 pkt (dropped 0, overlimits 0 requeues 0)
rate 1467Kbit 3053pps backlog 0b 0p requeues 0
lended: 24 borrowed: 3658594 giants: 0
tokens: -895400816 ctokens: 63824
Il QoS di ZeroShell di Renato Morano ®GPL3 27
Banda garantita
Uno dei valori aggiunti del QoS e anche quello più ricercato è quello di assicurare un valore di
banda garantita ad una determinata classe. Per come può essere configurato il QoS mediante
ZeroShell e a meno di una mia cattiva interpretazione, la parola garantita è da intendere in questa
maniera:
fissando un valore di banda garantita per una classe questa viene ad essere imposta ( Assigned) dal
QoS quando si verificano le seguenti condizioni:
- Il flusso che attraversa la classe garantita deve essere maggiore o uguale a quella imposta come
garantita
- Le altre classi devono essere a loro volta attraversate da un flusso di traffico maggiore o uguale di
quello assegnato e/o garantito
- Il valore complessivo del traffico deve essere maggiore o uguale a quello massimo assegnato alla
classe ROOT
Se queste condizioni vengono tutte rispettate ritroveremo la parola “ garantita” rispondente all’idea
che questa ci suggerisce: il traffico per ciascuna classe sarà garantita e pari a quella assegnata.
Quando le condizioni precedenti non sono tutte rispettate e in particolare quando non tutte le classi
hanno una banda assegnata, la banda in eccesso viene suddivisa tra le altre classi che ne fanno
richiesta.
La domanda è come questa banda in eccesso viene suddivisa.
Il QoS di ZeroShell di Renato Morano ®GPL3 28
Primo scenario:
Ad una classe assegniamo un valore di banda garantita che è minore di quella che è generata
attraverso Ostinato. Generiamo inoltre traffico per un’altra classe che non ha valorizzato il
parametro garantito e il traffico generato, ma tale da saturare la banda massima. Nota: se non viene
valorizzato il parametro di banda garantita, attraverso la GUI di ZeroShell, il comando tc riporta il
valore di 8bps per il rate “assegnato”. Eseguiamo un test aumentando di volta in volta il traffico
generato sino ad un valore quattro volte superiore e ne prendiamo i dati. Concentriamo l’attenzione
solo su due classi di traffico.
In tabella riportiamo i valori che compongono il flussi. In particolare il rate in input così come
prodotto da Ostinato e i valori di rate in output come registrato dalle statistiche del comando tc
CLASSE
x1
Rate in input priorità
Descrizione Ceil
htb 1:1
3,3 Mbps
ROOT
2700
2684 Kbit
5586 pps
htb 1:10
3 Mbps
0
DEFAULT
2700
2443 Kbit
5088 pps
htb 1:28
250Kbps
0
RDP
2700
241144 bit
498 pps
htb 1:30
htb 1:26
Rate banda Rate
garantita misurato
500 Kbps
pps
Il QoS di ZeroShell di Renato Morano ®GPL3 29
htb 1:10
generato
assegnato
misurato
htb 1:28
0
500
1000
1500
2000
2500
3000
3500
root@ZeroShell ~> tc -s -d class show dev ETH00
class htb 1:1 root rate 2700Kbit ceil 2700Kbit burst 1599b/1 mpu 0b overhead 0b cburst 1599b/1
mpu 0b overhead 0b level 7
Sent 337455586 bytes 3837562 pkt (dropped 0, overlimits 0 requeues 0)
rate 2684Kbit 5586pps backlog 0b 0p requeues 0
lended: 2799137 borrowed: 0 giants: 0
tokens: -2366 ctokens: -2366
class htb 1:10 parent 1:1 leaf 10: prio 0 quantum 1500 rate 8bit ceil 2700Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 110864651 bytes 1840211 pkt (dropped 870248, overlimits 0 requeues 0)
rate 2443Kbit 5088pps backlog 0b 126p requeues 0
lended: 605 borrowed: 1839606 giants: 0
tokens: -856346033 ctokens: 71269
class htb 1:28 parent 1:1 leaf 28: prio 0 quantum 1500 rate 500000bit ceil 2700Kbit burst 1600b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 226590935 bytes 1997351 pkt (dropped 3405, overlimits 0 requeues 0)
rate 241144bit 498pps backlog 0b 0p requeues 0
lended: 1037820 borrowed: 959531 giants: 0
tokens: 371657 ctokens: 70164
class htb 1:30 parent 1:1 leaf 30: prio 2 quantum 1500 rate 8bit ceil 2700Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: -2147483648 ctokens: 74062
Il QoS di ZeroShell di Renato Morano ®GPL3 30
class htb 1:26 parent 1:1 leaf 26: prio 2 quantum 1500 rate 8bit ceil 2700Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: -2147483648 ctokens: 74062
class sfq 10:33e parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 7620b 127p requeues 0
Il QoS di ZeroShell di Renato Morano ®GPL3 31
Ora generiamo per la classe garantita un flusso triplo di quello assegnato
CLASSE
x3
Rate in input priorità
Descrizione Ceil
Rate banda Rate
garantita misurato
htb 1:1
3,7 Mbps
ROOT
2700
2684 Kbit
5589 pps
htb 1:10
3 Mbps
0
DEFAULT
2700
1967 Kbit
4098 pps
htb 1:28
750 Kbps
0
RDP
2700
716888 bit
1491 pps
500 Kbps
pps
htb 1:30
htb 1:26
htb 1:10
generato
assegnato
misurato
htb 1:28
0
500
1000
1500
2000
2500
3000
3500
root@ZeroShell ~> tc -s -d class show dev ETH00
class htb 1:1 root rate 2700Kbit ceil 2700Kbit burst 1599b/1 mpu 0b overhead 0b cburst 1599b/1
mpu 0b overhead 0b level 7
Sent 597816547 bytes 8169279 pkt (dropped 0, overlimits 0 requeues 0)
rate 2684Kbit 5589pps backlog 0b 0p requeues 0
lended: 6488777 borrowed: 0 giants: 0
Il QoS di ZeroShell di Renato Morano ®GPL3 32
tokens: -1896 ctokens: -1896
class htb 1:10 parent 1:1 leaf 10: prio 0 quantum 1500 rate 8bit ceil 2700Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 319165929 bytes 5310570 pkt (dropped 2027128, overlimits 0 requeues 0)
rate 1967Kbit 4098pps backlog 0b 126p requeues 0
lended: 618 borrowed: 5309952 giants: 0
tokens: -525946173 ctokens: 71284
class htb 1:28 parent 1:1 leaf 28: prio 0 quantum 1500 rate 500000bit ceil 2700Kbit burst 1600b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 278650618 bytes 2858709 pkt (dropped 3405, overlimits 0 requeues 0)
rate 716888bit 1491pps backlog 0b 2p requeues 0
lended: 1679884 borrowed: 1178825 giants: 0
tokens: -13886 ctokens: 71284
class htb 1:30 parent 1:1 leaf 30: prio 2 quantum 1500 rate 8bit ceil 2700Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: -2147483648 ctokens: 74062
class htb 1:26 parent 1:1 leaf 26: prio 2 quantum 1500 rate 8bit ceil 2700Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: -2147483648 ctokens: 74062
class sfq 10:394 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 7620b 127p requeues 0
class sfq 28:2cf parent 28:
(dropped 0, overlimits 0 requeues 0)
backlog 180b 3p requeues 0
Il QoS di ZeroShell di Renato Morano ®GPL3 33
Infine generiamo per la classe garantita un flusso quadruplo di quello assegnato
CLASSE
x4
Rate in input priorità
Descrizione Ceil
Rate banda Rate
garantita misurato
htb 1:1
4,1 Mbps
ROOT
2700
2684 Kbit
3203 pps
htb 1:10
3 Mbps
0
DEFAULT
2700
1647 Kbit
1190 pps
htb 1:28
1024 Kbps
0
RDP
2700
1037 Kbit
2013 pps
500 Kbps
pps
htb 1:30
htb 1:26
htb 1:10
generato
assegnato
misurato
htb 1:28
0
500
1000
1500
2000
2500
3000
3500
Il QoS di ZeroShell di Renato Morano ®GPL3 34
root@ZeroShell ~> tc -s -d class show dev ETH00
class htb 1:1 root rate 2700Kbit ceil 2700Kbit burst 1599b/1 mpu 0b overhead 0b cburst 1599b/1
mpu 0b overhead 0b level 7
Sent 907775296 bytes 12856869 pkt (dropped 0, overlimits 0 requeues 0)
rate 2684Kbit 3203pps backlog 0b 0p requeues 0
lended: 10239626 borrowed: 0 giants: 0
tokens: -19409 ctokens: -19409
class htb 1:10 parent 1:1 leaf 10: prio 0 quantum 1500 rate 8bit ceil 2700Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 529692534 bytes 8415832 pkt (dropped 4435803, overlimits 0 requeues 0)
rate 1647Kbit 1190pps backlog 0b 127p requeues 0
lended: 635 borrowed: 8415197 giants: 0
tokens: -885643417 ctokens: 3969
class htb 1:28 parent 1:1 leaf 28: prio 0 quantum 1500 rate 500000bit ceil 2700Kbit burst 1600b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 378082762 bytes 4441037 pkt (dropped 22842, overlimits 0 requeues 0)
rate 1037Kbit 2013pps backlog 0b 5p requeues 0
lended: 2616608 borrowed: 1824429 giants: 0
tokens: -14519 ctokens: 71284
class htb 1:30 parent 1:1 leaf 30: prio 2 quantum 1500 rate 8bit ceil 2700Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: -2147483648 ctokens: 74062
class htb 1:26 parent 1:1 leaf 26: prio 2 quantum 1500 rate 8bit ceil 2700Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: -2147483648 ctokens: 74062
class sfq 10:103 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 3600b 60p requeues 0
class sfq 10:2f6 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 52990b 35p requeues 0
class sfq 10:38f parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 48448b 32p requeues 0
class sfq 28:366 parent 28:
(dropped 0, overlimits 0 requeues 0)
backlog 360b 6p requeues 0
root@ZeroShell ~>
Il QoS di ZeroShell di Renato Morano ®GPL3 35
Riassumiamo le tre tabelle
CLASSE
x1
Rate in input priorità
Descrizione Ceil
Rate banda Rate
garantita misurato
htb 1:1
3,3 Mbps
ROOT
2700
2684 Kbit
5586 pps
htb 1:10
3 Mbps
0
DEFAULT
2700
2443 Kbit
5088 pps
htb 1:28
250 Kbps
0
RDP
2700
235 Kbit
498 pps
CLASSE
x2
Rate in input priorità
Descrizione Ceil
htb 1:1
3,7 Mbps
ROOT
2700
2684 Kbit
5589 pps
htb 1:10
3 Mbps
0
DEFAULT
2700
1967 Kbit
4098 pps
htb 1:28
750 Kbps
0
RDP
2700
700 Kbit
1491 pps
CLASSE
x3
Rate in input priorità
Descrizione Ceil
htb 1:1
4,1 Mbps
ROOT
2700
2684 Kbit
3203 pps
htb 1:10
3 Mbps
0
DEFAULT
2700
1647 Kbit
1190 pps
htb 1:28
1024 Kbps
0
RDP
2700
1037 Kbit
2013 pps
500 Kbps
Rate banda Rate
garantita misurato
500 Kbps
Rate banda Rate
garantita misurato
500 Kbps
pps
pps
pps
Nel primo caso il traffico entrante è minore di quello garantito e la banda in eccesso, 2700 - (500 –
250), viene messa a disposizione delle altre classi ma solo la DEFAULT ne può usufruire perché la
RDP non ha un flusso entrante sufficiente.
Nel secondo caso il traffico è maggiore di quello garantito. La banda che abbiamo a disposizione è
quella che si ottiene come differenza tra la massima (ceil) e quella assegnata alla classe RDP:
2700 – 500 = 2200
questa sarà suddivisa tra le classi in maniera proporzionale al traffico entrante. Mediante una
proporzione troviamo le percentuali di traffico che si possono suddividere le classi a patto che
richiedano la banda disponibile.
Per la classe di default le percentuali sono
(3072+250):3072=100:x1 , x1= 100*3072/3322=92%
(3072+750):3072=100:x2 , x2= 100*3072/3822=80%
(3072+1024):3072=100:x3 , x2= 100*3072/4096=75%
le percentuali per RDP saranno il complemento a 100.
Il QoS di ZeroShell di Renato Morano ®GPL3 36
% del flusso di
Banda a
Banda a
traffico a disposizione disposizione disposizio
della classe default
della classe ne della
default
classe rdp
Banda in
generata
per RDP
Banda
assegnata
per RDP
Banda out Banda out
misurata misurata
per RDP
per
DEFAULT
92
2024
176
250
500
235
2443
80
1760
440
750
500
700
1967
75
1650
550
1024
500
1037
1647
Di seguito il grafico che mostra come al crescere del traffico RDP in ingresso il valore del rate di
DEFAULT diminuisce.
3000
2500
2000
1500
1000
500
0
rate in RDP
rate out RDP
rate out DEFAULT
Il QoS di ZeroShell di Renato Morano ®GPL3 37
La crescita del flusso di una classe (RDP) si ripercuote sull’altra (DEFAULT). Il valore totale del
flusso in uscita è quello imposto dalla banda massima.
Assegniamo anche all’altra classe un valore di banda garantita e vediamo i cambiamenti indotti dal
QoS.
Alla classe default assegniamo 1024Kbit nelle stesse condizioni di traffico generato precedenti.
CLASSE
Rate in input priorità
Descrizione Ceil
Rate banda Rate
garantita misurato
htb 1:1
4,1 Mbps
ROOT
2700
2684 Kbit
5585 pps
htb 1:10
3 Mbps
0
DEFAULT
2700
1024 Kbit 1704 Kbit
3548 pps
htb 1:28
1024 Kbps
0
RDP
2700
500 Kbps
2037 pps
957 Kbit
pps
htb 1:10
generato
assegnato
misurato
htb 1:28
0
500
1000
1500
2000
2500
3000
3500
Il QoS di ZeroShell di Renato Morano ®GPL3 38
root@ZeroShell ~> tc -s -d class show dev ETH00
class htb 1:1 root rate 2700Kbit ceil 2700Kbit burst 1599b/1 mpu 0b overhead 0b cburst 1599b/1
mpu 0b overhead 0b level 7
Sent 86805822 bytes 1443731 pkt (dropped 0, overlimits 0 requeues 0)
rate 2684Kbit 5585pps backlog 0b 0p requeues 0
lended: 628604 borrowed: 0 giants: 0
tokens: -4807 ctokens: -4807
class htb 1:10 parent 1:1 leaf 10: prio 0 quantum 1500 rate 1024Kbit ceil 2700Kbit burst 1599b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 55064058 bytes 917118 pkt (dropped 624370, overlimits 0 requeues 0)
rate 1704Kbit 3548pps backlog 0b 127p requeues 0
lended: 547906 borrowed: 369212 giants: 0
tokens: -6862 ctokens: 70424
class htb 1:28 parent 1:1 leaf 28: prio 0 quantum 1500 rate 500000bit ceil 2700Kbit burst 1600b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 31741884 bytes 526615 pkt (dropped 0, overlimits 0 requeues 0)
rate 979752bit 2037pps backlog 0b 3p requeues 0
lended: 267222 borrowed: 259393 giants: 0
tokens: -14876 ctokens: 71284
class htb 1:30 parent 1:1 leaf 30: prio 2 quantum 1500 rate 8bit ceil 2700Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: -2147483648 ctokens: 74062
class htb 1:26 parent 1:1 leaf 26: prio 2 quantum 1500 rate 8bit ceil 2700Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: -2147483648 ctokens: 74062
class sfq 10:1fd parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 7620b 127p requeues 0
class sfq 28:1bc parent 28:
(dropped 0, overlimits 0 requeues 0)
backlog 240b 4p requeues 0
root@ZeroShell ~>
Il QoS di ZeroShell di Renato Morano ®GPL3 39
La banda che abbiamo a disposizione è quella che si ottiene come differenza tra la massima (ceil) e
quella assegnata alle classi RDP e DEFAULT : 2700 – (1024+500) = 1176
La banda di 1176 Kbit sarà suddivisa tra le classi in maniera proporzionale al traffico entrante.
Mediante una proporzione troviamo le percentuali di traffico che si possono suddividere le classi a
patto che richiedano questa banda disponibile. Per la default le percentuali sono
(3072+1024):3072=100:x1 , x1= 100*3072/4096=75%
% del flusso di
Banda a
Banda a
traffico a disposizione disposizione disposizio
della classe default
della classe ne della
default
classe rdp
75
882
294
Banda in
generata
per RDP
Banda
assegnata
per RDP
1024
500
Il grafico riporta come la banda viene ripartita fra le classi
1024+882
1024 Kbps
500Kbps
500+294
Banda out Banda out
misurata misurata
per RDP
per
DEFAULT
957
1704
Il QoS di ZeroShell di Renato Morano ®GPL3 40
Aggiungiamo un’altra classe con banda garantita: la classe LPR con una banda garantita pari a
500 Kbps
CLASSE
Rate in input priorità
Descrizione Ceil
htb 1:1
4,1 Mbps
ROOT
2700
htb 1:10
2 Mbps
0
DEFAULT
2700
htb 1:28
1024 Kbps
0
RDP
htb 1:30
1024 Kbps
0
htb 1:26
Rate banda Rate
garantita misurato
pps
2684 Kbit
5585 pps
1024 Kit
1704 Kbit
3548 pps
2700
500 Kbps
957 Kbit
2037 pps
LPR
2700
500 Kbps
SMB
2700
La banda in eccesso che abbiamo a disposizione è quella che si ottiene come differenza tra la
massima (ceil) e quella assegnata alle classi RDP, DEFAULT, LPR : 2700 – (1024+500+500) =
652
La banda di 652 Kbit sarà suddivisa tra le classi in maniera proporzionale al traffico entrante.
Mediante una proporzione troviamo le percentuali di traffico che si possono suddividere le classi a
patto che richiedano la banda disponibile. Per la classe di default la percentuali è
4096:2048=100:x1 , x1= 100*2048/4096 pari al 50% il restante 50% è suddiviso tra RDP e LPR
CLASSE
% del flusso Banda a
di traffico a disposizione
disposizione
della classe
Banda in
generata
Banda
assegnata
Banda out
misurata
pps
DEFAULT
50
326
2048
1024
1242 Kbit
2584 pps
RDP
25
163
1024
500
704 Kbit
1497 pps
LPR
25
163
1024
500
704Kbit
1502 pps
Il QoS di ZeroShell di Renato Morano ®GPL3 41
htb 1:30
generato
assegnato
misurato
htb 1:10
htb 1:28
0
500
1000
1500
2000
2500
root@ZeroShell ~> tc -s -d class show dev ETH00
class htb 1:1 root rate 2700Kbit ceil 2700Kbit burst 1599b/1 mpu 0b overhead 0b cburst 1599b/1
mpu 0b overhead 0b level 7
Sent 44191333 bytes 731740 pkt (dropped 0, overlimits 0 requeues 0)
rate 2684Kbit 5583pps backlog 0b 0p requeues 0
lended: 183060 borrowed: 0 giants: 0
tokens: -3941 ctokens: -3941
class htb 1:10 parent 1:1 leaf 10: prio 0 quantum 1500 rate 1024Kbit ceil 2700Kbit burst 1599b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 20418946 bytes 338752 pkt (dropped 195391, overlimits 0 requeues 0)
rate 1242Kbit 2584pps backlog 0b 126p requeues 0
lended: 277697 borrowed: 61055 giants: 0
tokens: -6120 ctokens: 71284
class htb 1:28 parent 1:1 leaf 28: prio 0 quantum 1500 rate 500000bit ceil 2700Kbit burst 1600b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Il QoS di ZeroShell di Renato Morano ®GPL3 42
Sent 11950057 bytes 195949 pkt (dropped 71351, overlimits 0 requeues 0)
rate 720736bit 1497pps backlog 0b 122p requeues 0
lended: 135120 borrowed: 60829 giants: 0
tokens: -12730 ctokens: 71284
class htb 1:30 parent 1:1 leaf 30: prio 0 quantum 1500 rate 500000bit ceil 2700Kbit burst 1600b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 11822220 bytes 197037 pkt (dropped 69798, overlimits 0 requeues 0)
rate 721064bit 1502pps backlog 0b 126p requeues 0
lended: 135861 borrowed: 61176 giants: 0
tokens: -14441 ctokens: 71284
class htb 1:26 parent 1:1 leaf 26: prio 2 quantum 1500 rate 8bit ceil 2700Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 110 bytes 2 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 2 borrowed: 0 giants: 0
tokens: 1288108648 ctokens: 71515
class sfq 10:2 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 7560b 126p requeues 0
class sfq 30:180 parent 30:
(dropped 0, overlimits 0 requeues 0)
backlog 7560b 126p requeues 0
class sfq 28:2be parent 28:
(dropped 0, overlimits 0 requeues 0)
backlog 7320b 122p requeues 0
Aggiungiamo l’ultima classe con banda garantita: la classe SMB con una banda garantita pari a 500
Kbps
CLASSE
Rate in input priorità
Descrizione Ceil
Rate banda Rate misurato
garantita
htb 1:1
5,1 Mbps
ROOT
2700
htb 1:10
2 Mbps
0
DEFAULT
2700
1024Kbit
1704Kbit
htb 1:28
1024 Kbps
0
RDP
2700
500 Kbps
957Kbit
htb 1:30
1024 Kbps
0
LPR
2700
500 Kbps
htb 1:26
1024 Kbps
0
SMB
2700
500 Kbps
2684Kbit
La banda in eccesso che abbiamo a disposizione è quella che si ottiene come differenza tra la
massima (ceil) e quella assegnata alle classi RDP, DEFAULT, LPR e SMB: 2700 –
(1024+500+500+500)= 176
La banda di 176 Kbit sarà suddivisa tra le classi in maniera proporzionale al traffico entrante.
Mediante una proporzione troviamo le percentuali di traffico che si possono suddividere le classi a
patto che richiedano la banda disponibile. Per la classe default la percentuale è
Il QoS di ZeroShell di Renato Morano ®GPL3 43
5120:2048=100:x1, x1= 100*2048/5120 apri al 40%, il restante 60% è suddiviso tra RDP, LPR e
SMB in parti uguali perché hanno priorità uguale
CLASSE
% del flusso Banda a
di traffico a disposizione
disposizione
della classe
Banda in
generata
Banda
assegnata
Banda out misurata
DEFAULT
40
70,4
2048
1024
1062 Kbit
RDP
20
35,2
1024
500
528 Kbit
LPR
20
35,2
1024
500
528 Kbit
SMB
20
35,2
1024
500
528 Kbit
htb 1:26
htb 1:30
generato
assegnato
misurato
htb 1:10
htb 1:28
0
500
1000
1500
2000
2500
Il QoS di ZeroShell di Renato Morano ®GPL3 44
root@ZeroShell ~> tc -s -d class show dev ETH00
class htb 1:1 root rate 2700Kbit ceil 2700Kbit burst 1599b/1 mpu 0b overhead 0b cburst 1599b/1
mpu 0b overhead 0b level 7
Sent 138341682 bytes 2301510 pkt (dropped 0, overlimits 0 requeues 0)
rate 2684Kbit 5580pps backlog 0b 0p requeues 0
lended: 149938 borrowed: 0 giants: 0
tokens: -6255 ctokens: -6255
class htb 1:10 parent 1:1 leaf 10: prio 0 quantum 1500 rate 1024Kbit ceil 2700Kbit burst 1599b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 54691925 bytes 910712 pkt (dropped 766475, overlimits 0 requeues 0)
rate 1062Kbit 2203pps backlog 0b 127p requeues 0
lended: 873213 borrowed: 37499 giants: 0
tokens: -6413 ctokens: 71284
class htb 1:28 parent 1:1 leaf 28: prio 0 quantum 1500 rate 500000bit ceil 2700Kbit burst 1600b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 27945052 bytes 462386 pkt (dropped 376414, overlimits 0 requeues 0)
rate 540504bit 1124pps backlog 0b 126p requeues 0
lended: 424992 borrowed: 37394 giants: 0
tokens: -14905 ctokens: 71284
class htb 1:30 parent 1:1 leaf 30: prio 0 quantum 1500 rate 500000bit ceil 2700Kbit burst 1600b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 27854220 bytes 464237 pkt (dropped 374200, overlimits 0 requeues 0)
rate 540768bit 1127pps backlog 0b 127p requeues 0
lended: 426711 borrowed: 37526 giants: 0
tokens: -14442 ctokens: 71284
class htb 1:26 parent 1:1 leaf 26: prio 0 quantum 1500 rate 500000bit ceil 2700Kbit burst 1600b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 27854205 bytes 464237 pkt (dropped 374203, overlimits 0 requeues 0)
rate 540792bit 1127pps backlog 0b 126p requeues 0
lended: 426711 borrowed: 37526 giants: 0
tokens: -3249 ctokens: 71284
class sfq 10:2de parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 7620b 127p requeues 0
class sfq 30:150 parent 30:
(dropped 0, overlimits 0 requeues 0)
backlog 7620b 127p requeues 0
class sfq 28:356 parent 28:
(dropped 0, overlimits 0 requeues 0)
backlog 7560b 126p requeues 0
class sfq 26:21a parent 26:
(dropped 0, overlimits 0 requeues 0)
backlog 7620b 127p requeues 0
root@ZeroShell ~>
Il QoS di ZeroShell di Renato Morano ®GPL3 45
Assegniamo il 100% della banda tra le classi. Il risultato atteso è che ogni classe si attesti sulla sua
banda garantita.
CLASSE
Rate in input priorità
Descrizione Ceil
Rate banda Rate misurato
garantita
htb 1:1
5,1 Mbps
ROOT
2700
2684 Kbit
htb 1:10
2 Mbps
0
DEFAULT
2700
1024 Kbit 1018 Kbit
htb 1:28
1024 Kbps
0
RDP
2700
800 Kbps
776 Kbit
htb 1:30
1024 Kbps
0
LPR
2700
500 Kbps
485 Kbit
htb 1:26
1024 Kbps
0
SMB
2700
500 Kbps
485 Kbit
Le statistiche confermano la suddivisione del traffico
htb 1:26
htb 1:30
generato
assegnato
misurato
htb 1:10
htb 1:28
0
500
1000
1500
2000
2500
Il QoS di ZeroShell di Renato Morano ®GPL3 46
root@ZeroShell ~> tc -s -d class show dev ETH00
class htb 1:1 root rate 2700Kbit ceil 2700Kbit burst 1599b/1 mpu 0b overhead 0b cburst 1599b/1
mpu 0b overhead 0b level 7
Sent 46412391 bytes 772336 pkt (dropped 0, overlimits 0 requeues 0)
rate 2807Kbit 5838pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: -94556047 ctokens: -94556047
class htb 1:10 parent 1:1 leaf 10: prio 0 quantum 1500 rate 1024Kbit ceil 2700Kbit burst 1599b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 16828726 bytes 279844 pkt (dropped 258376, overlimits 0 requeues 0)
rate 1018Kbit 2111pps backlog 0b 127p requeues 0
lended: 279844 borrowed: 0 giants: 0
tokens: -6423 ctokens: 71284
class htb 1:28 parent 1:1 leaf 28: prio 0 quantum 1500 rate 800000bit ceil 2700Kbit burst 1599b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 13147750 bytes 218560 pkt (dropped 50514, overlimits 0 requeues 0)
rate 795152bit 1656pps backlog 0b 126p requeues 0
lended: 218560 borrowed: 0 giants: 0
tokens: -8803 ctokens: 71284
class htb 1:30 parent 1:1 leaf 30: prio 0 quantum 1500 rate 500000bit ceil 2700Kbit burst 1600b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 8217960 bytes 136966 pkt (dropped 132032, overlimits 0 requeues 0)
rate 496944bit 1035pps backlog 0b 126p requeues 0
lended: 136966 borrowed: 0 giants: 0
tokens: -14215 ctokens: 71284
class htb 1:26 parent 1:1 leaf 26: prio 0 quantum 1500 rate 500000bit ceil 2700Kbit burst 1600b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 8217955 bytes 136966 pkt (dropped 132032, overlimits 0 requeues 0)
rate 496952bit 1035pps backlog 0b 127p requeues 0
lended: 136966 borrowed: 0 giants: 0
tokens: -14965 ctokens: 71284
class sfq 10:1fd parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 7620b 127p requeues 0
class sfq 30:1ce parent 30:
(dropped 0, overlimits 0 requeues 0)
backlog 7560b 126p requeues 0
class sfq 28:274 parent 28:
(dropped 0, overlimits 0 requeues 0)
backlog 7560b 126p requeues 0
class sfq 26:27b parent 26:
(dropped 0, overlimits 0 requeues 0)
backlog 7620b 127p requeues 0
Il QoS di ZeroShell di Renato Morano ®GPL3 47
Osserviamo che solo in questo caso il valore misurato del flusso delle varie classi di traffico è
minore del valore assegnato.
Secondo scenario:
La classe di default è attraversata da un flusso di 1 Mbps e la classe RDP attraversata da una flusso
di 3.2 Mb
Assegniamo come banda garantita alla classe RDP tutta la banda
CLASSE
Rate in input priorità
Descrizione Ceil
htb 1:1
4,2 Mbps
ROOT
2700
htb 1:10
1 Mbps
0
DEFAULT
2700
null
1,05 Kbit
htb 1:28
3 Mbps
0
RDP
2700
3 Mbps
2683 Kbit
verifichiamo in due istanti diversi i valori delle statistiche
Illustration 2: statistiche al tempo t1
Illustration 3: statistiche al tempo t2
Rate banda Rate misurato
garantita
2683 Kbit
Il QoS di ZeroShell di Renato Morano ®GPL3 48
root@zeroshell ~> tc -s -d class show dev ETH00
class htb 1:10 parent 1:1 leaf 10: prio 0 quantum 1500 rate 8bit ceil 2700Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 124322511 bytes 1844672 pkt (dropped 7627474, overlimits 0 requeues 0)
rate 1184bit 2pps backlog 0b 127p requeues 0
lended: 908 borrowed: 1843764 giants: 0
tokens: -379898365 ctokens: 71284
class htb 1:1 root rate 2700Kbit ceil 2700Kbit burst 1599b/1 mpu 0b overhead 0b cburst 1599b/1
mpu 0b overhead 0b level 7
Sent 805610618 bytes 13075354 pkt (dropped 0, overlimits 0 requeues 0)
rate 2607Kbit 5430pps backlog 0b 0p requeues 0
lended: 1843764 borrowed: 0 giants: 0
tokens: -77397 ctokens: -77397
class htb 1:28 parent 1:1 leaf 28: prio 0 quantum 1500 rate 3000Kbit ceil 2700Kbit burst 1599b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 681288107 bytes 11230682 pkt (dropped 857113, overlimits 0 requeues 0)
rate 2606Kbit 5429pps backlog 0b 126p requeues 0
lended: 11230682 borrowed: 0 giants: 0
tokens: 64156 ctokens: -2312
class sfq 10:1b parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 4380b 73p requeues 0
class sfq 10:28 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 120b 2p requeues 0
class sfq 10:2a parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 94b 1p requeues 0
class sfq 10:44 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 101b 1p requeues 0
class sfq 10:d1 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 1461b 2p requeues 0
class sfq 10:d2 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 101b 1p requeues 0
class sfq 10:e6 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 561b 8p requeues 0
class sfq 10:107 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 735b 7p requeues 0
class sfq 10:181 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 102b 1p requeues 0
Il QoS di ZeroShell di Renato Morano ®GPL3 49
class sfq 10:1c3 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 977b 9p requeues 0
class sfq 10:1f7 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 188b 2p requeues 0
class sfq 10:276 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 498b 1p requeues 0
class sfq 10:2b5 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 90b 1p requeues 0
class sfq 10:2c3 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 440b 8p requeues 0
class sfq 10:2e5 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 364b 7p requeues 0
class sfq 10:384 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 53b 1p requeues 0
class sfq 10:3d9 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 62b 1p requeues 0
class sfq 10:3e3 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 97b 1p requeues 0
class sfq 28:18f parent 28:
(dropped 0, overlimits 0 requeues 0)
backlog 7560b 126p requeues 0
I risultati confermano come il QoS assegni tutta la banda alla classe RDP e consente alla default il
solo traffico di “sopravvivenza” anche in presenza di un suo flusso consistente in ingresso.
Rendiamo pari i due flussi in ingresso e vediamo che la proporzionalità ora non viene più ad essere
rispettata nel traffico di uscita e proprio per merito del QoS.
CLASSE
Rate in input priorità
Descrizione Ceil
Rate banda Rate misurato
garantita
htb 1:1
6,6 Mbps
ROOT
2700
htb 1:10
3 Mbps
0
DEFAULT
2700
null
272
htb 1:28
3 Mbps
0
RDP
2700
3 Mbps
2678 Kbit
2678 Kbit
Il QoS di ZeroShell di Renato Morano ®GPL3 50
root@zeroshell ~> tc -s -d class show dev ETH00
class htb 1:10 parent 1:1 leaf 10: prio 0 quantum 1500 rate 8bit ceil 2700Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 123150107 bytes 1842383 pkt (dropped 6415930, overlimits 0 requeues 0)
rate 272bit 1pps backlog 0b 127p requeues 0
lended: 899 borrowed: 1841484 giants: 0
tokens: -364833728 ctokens: 71284
class htb 1:1 root rate 2700Kbit ceil 2700Kbit burst 1599b/1 mpu 0b overhead 0b cburst 1599b/1
mpu 0b overhead 0b level 7
Sent 726358742 bytes 11774797 pkt (dropped 0, overlimits 0 requeues 0)
rate 2678Kbit 5577pps backlog 0b 0p requeues 0
lended: 1841484 borrowed: 0 giants: 0
tokens: -77427 ctokens: -77427
class htb 1:28 parent 1:1 leaf 28: prio 0 quantum 1500 rate 3000Kbit ceil 2700Kbit burst 1599b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 603208635 bytes 9932414 pkt (dropped 738993, overlimits 0 requeues 0)
rate 2678Kbit 5577pps backlog 0b 124p requeues 0
lended: 9932414 borrowed: 0 giants: 0
tokens: 64156 ctokens: -2386
class sfq 10:3b parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 135b 3p requeues 0
class sfq 10:84 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 108b 2p requeues 0
class sfq 10:d1 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 9813b 8p requeues 0
class sfq 10:143 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 1144b 22p requeues 0
class sfq 10:24e parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 430b 5p requeues 0
class sfq 10:29a parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 86b 1p requeues 0
class sfq 10:318 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 9813b 8p requeues 0
class sfq 10:347 parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 360b 6p requeues 0
class sfq 10:39a parent 10:
(dropped 0, overlimits 0 requeues 0)
backlog 86b 1p requeues 0
class sfq 10:3eb parent 10:
Il QoS di ZeroShell di Renato Morano ®GPL3 51
(dropped 0, overlimits 0 requeues 0)
backlog 4260b 71p requeues 0
class sfq 28:e parent 28:
(dropped 0, overlimits 0 requeues 0)
backlog 7380b 123p requeues 0
Anche in questo caso a fronte di un traffico in ingresso dei due flussi uguali solo il traffico
“garantito” vien ritrovato in uscita.
I grafici riportano i valori delle due tabelle precedenti.
3500
3000
2500
2000
rate in
rate assegnato
rate out
1500
1000
500
0
hbt 1:10
hbt 1:28
Il QoS di ZeroShell di Renato Morano ®GPL3 52
3500
3000
2500
2000
rate in
rate assegnato
rate out
1500
1000
500
0
hbt 1:10
hbt 1:28
Il QoS di ZeroShell di Renato Morano ®GPL3 53
Banda garantita e priorità
Il cambio di priorità ad una classe ci dà la possibilità di assegnare attraverso il QoS la banda in
eccesso seguendo questo criterio. Ci è utile nel momento in cui vogliamo privilegiare una classe che
non ha abbastanza traffico in ingresso e che quindi beneficerebbe della banda in eccesso solo
proporzionalmente al suo traffico in ingresso.
La prova la facciamo nelle condizioni riportate in tabella
Ripetiamo le prove di traffico e riassumiamo i risultati nelle tabelle seguenti.
CLASSE
Rate in input priorità Descrizione
Ceil
Rate banda Rate misurato
garantita
htb 1:1
3,6 Mbps
ROOT
2700
htb 1:10
1Mbps
2
DEFAULT
2700
1000 Kbps 959 Kbit
htb 1:28
500 Kbps
2
RDP
2700
100 Kbps
htb 1:30
1Mbps
2
LPR
2700
1000 Kbps 954 Kbit
htb 1:26
1Mbps
2
SMB
2700
null
2684 Kbit
402 Kbit
305 Kbit
Il QoS di ZeroShell di Renato Morano ®GPL3 54
htb 1:26
htb 1:30
generato
assegnato
misurato
htb 1:10
htb 1:28
0
200
400
600
800
1000
1200
root@ZeroShell ~> tc -s -d class show dev ETH00
class htb 1:1 root rate 2700Kbit ceil 2700Kbit burst 1599b/1 mpu 0b overhead 0b cburst 1599b/1
mpu 0b overhead 0b level 7
Sent 54191891 bytes 898673 pkt (dropped 0, overlimits 0 requeues 0)
rate 2684Kbit 5572pps backlog 0b 0p requeues 0
lended: 209817 borrowed: 0 giants: 0
tokens: -54506 ctokens: -54506
class htb 1:10 parent 1:1 leaf 10: prio 2 quantum 1500 rate 1000Kbit ceil 2700Kbit burst 1600b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 19784962 bytes 328169 pkt (dropped 0, overlimits 0 requeues 0)
rate 982384bit 2039pps backlog 0b 0p requeues 0
lended: 327884 borrowed: 285 giants: 0
tokens: 186623 ctokens: 70130
class htb 1:28 parent 1:1 leaf 28: prio 2 quantum 1500 rate 100000bit ceil 2700Kbit burst 1599b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 8441579 bytes 137748 pkt (dropped 22530, overlimits 0 requeues 0)
rate 412136bit 847pps backlog 0b 122p requeues 0
lended: 33367 borrowed: 104381 giants: 0
tokens: -41295 ctokens: 19108
class htb 1:30 parent 1:1 leaf 30: prio 2 quantum 1500 rate 1000Kbit ceil 2700Kbit burst 1600b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 19655940 bytes 327599 pkt (dropped 0, overlimits 0 requeues 0)
rate 976760bit 2035pps backlog 0b 0p requeues 0
Il QoS di ZeroShell di Renato Morano ®GPL3 55
lended: 327599 borrowed: 0 giants: 0
tokens: 186157 ctokens: 69663
class htb 1:26 parent 1:1 leaf 26: prio 2 quantum 1500 rate 8bit ceil 2700Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 6309410 bytes 105157 pkt (dropped 222318, overlimits 0 requeues 0)
rate 312560bit 651pps backlog 0b 127p requeues 0
lended: 6 borrowed: 105151 giants: 0
tokens: -39800597 ctokens: 71264
class sfq 28:118 parent 28:
(dropped 0, overlimits 0 requeues 0)
backlog 7320b 122p requeues 0
class sfq 26:391 parent 26:
(dropped 0, overlimits 0 requeues 0)
backlog 7620b 127p requeues 0
Il QoS di ZeroShell di Renato Morano ®GPL3 56
Ripetiamo la prova cambiando la priorità della sola classe RDP
CLASSE
Rate in input priorità Descrizione
Ceil
Rate banda Rate misurato
garantita
htb 1:1
3,6 Mbps
ROOT
2700
htb 1:10
1Mbps
2
DEFAULT
2700
1000 Kbps 961 Kbit
htb 1:28
500 Kbps
0
RDP
2700
100 Kbps
htb 1:30
1Mbps
2
LPR
2700
1000 Kbit 954 Kbit
htb 1:26
1Mbps
2
SMB
2700
null
2684 Kbit
468 Kbit
238 Kbit
htb 1:26 p2
htb 1:30 p2
htb 1:10 p2
htb 1:28 p0
0
200
400
600
800
1000
1200
Il QoS di ZeroShell di Renato Morano ®GPL3 57
root@ZeroShell ~> tc -s -d class show dev ETH00
class htb 1:1 root rate 2700Kbit ceil 2700Kbit burst 1599b/1 mpu 0b overhead 0b cburst 1599b/1
mpu 0b overhead 0b level 7
Sent 76074844 bytes 1264389 pkt (dropped 0, overlimits 0 requeues 0)
rate 2684Kbit 5575pps backlog 0b 0p requeues 0
lended: 294791 borrowed: 0 giants: 0
tokens: -6739 ctokens: -6739
class htb 1:10 parent 1:1 leaf 10: prio 2 quantum 1500 rate 1000Kbit ceil 2700Kbit burst 1600b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 27788273 bytes 461809 pkt (dropped 0, overlimits 0 requeues 0)
rate 983992bit 2038pps backlog 0b 0p requeues 0
lended: 461575 borrowed: 234 giants: 0
tokens: 184355 ctokens: 69794
class htb 1:28 parent 1:1 leaf 28: prio 0 quantum 1500 rate 100000bit ceil 2700Kbit burst 1599b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 13671981 bytes 225670 pkt (dropped 0, overlimits 0 requeues 0)
rate 479592bit 995pps backlog 0b 2p requeues 0
lended: 46580 borrowed: 179090 giants: 0
tokens: -58795 ctokens: 71284
class htb 1:30 parent 1:1 leaf 30: prio 2 quantum 1500 rate 1000Kbit ceil 2700Kbit burst 1600b/1
mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 27686160 bytes 461436 pkt (dropped 0, overlimits 0 requeues 0)
rate 976784bit 2035pps backlog 0b 0p requeues 0
lended: 461436 borrowed: 0 giants: 0
tokens: 186033 ctokens: 69539
class htb 1:26 parent 1:1 leaf 26: prio 2 quantum 1500 rate 8bit ceil 2700Kbit burst 4096Mb/1 mpu
0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 0
Sent 6928430 bytes 115474 pkt (dropped 345836, overlimits 0 requeues 0)
rate 243472bit 507pps backlog 0b 127p requeues 0
lended: 7 borrowed: 115467 giants: 0
tokens: -893140847 ctokens: 71284
class sfq 28:60 parent 28:
(dropped 0, overlimits 0 requeues 0)
backlog 60b 1p requeues 0
class sfq 26:8e parent 26:
(dropped 0, overlimits 0 requeues 0)
backlog 7620b 127p requeues 0
Il QoS di ZeroShell di Renato Morano ®GPL3 58
Il cambiamento di priorità implica un aumento di più 60 Kbit di traffico RDP grazie all’eccesso di
banda ripartito. In percentuale l’aumento di banda a seguito della priorità maggiore è del 16,4%
600
500
400
rate in
rate assigned
rate out
300
200
100
0
htb 1:28 p2
htb 1:28 p0
Il QoS di ZeroShell di Renato Morano ®GPL3 59
Banda garantita e banda massima
La possibilità di assegnare una banda massima all’interno del QoS è utile nelle condizioni in cui
vogliamo che una determinata classe non abbia la possibilità di “divorare” tutta la banda disponibile
non assegnata ad altre classi. In questo modo la crescita di una classe è limitata nell’uso della banda
non assegnata o non utilizzata dalle altre classi .
Un caso particolare
Abbiamo la necessità di “tutelare” il traffico di un’applicazione RDP che ha un traffico incapsulato
in un tunnel vpn. Assumiamo il traffico suddiviso nelle classi default ed rdp. Inoltre la quantità di
banda richiesta dall’applicazione in rdp è molto minore di quella richiesta dalla classe default.
internet
dc
vpn
t
aul
def
client
Le classi si contendono la banda disponibile sino a saturare la banda a disposizione. Il QoS può
intervenire in questa situazione attraverso il cambio della priorità tra le due classi. Per assicurare al
traffico vpn una “riserva” di banda tale da assicurare un canale privilegiato dobbiamo imporre alla
classe di default un limite massimo. In questo modo anche in assenza di traffico vpn la banda usata
dalla default non potrà superare il limite imposto. Potremmo stimare questo limite da asseganre in
percentuale alla banda massima. Per esempio fissando al 80% della banda globale massima il valore
della massima banda consentita alla classe di default. In questo modo abbiamo a disposizione per la
classe rdp un valore di banda disponibile che non potrà mai essere minore di quella lasciata libera
dalla classe di default. Le condizioni migliorano quanto più si riesce a categorizzare il traffico con
le classi. Il vantaggio di avere più classi di traffico è la selettività: il poter decidere su quale
tipologia di traffico effettuare il taglio di banda.
Il questo scenario come gestire la banda garantita ?
Il QoS di ZeroShell di Renato Morano ®GPL3 60
Assegnare una banda garantita alla classe vpn non ha un grande vantaggio se non nella previsione
di una saturazione della banda in cui il traffico viene imposto dal QoS. Poichè il traffico rdp è di
gran lunga inferiore al resto del traffico di default e l’assegnare una grande banda al vpn non ha
effetto. Di questa banda assegnata la classe VPN ne richiederà solo una parte e la non utilizzata
verrà comunque ripartita anche alla default. La configurazione ottimale è quella che prevede un
limite nella banda massima della default e assegnare alla VPN una banda pari alla massima
possibile, in modo che in caso di saturazione abbiamo un valore imposto dal QoS. Più il traffico
sarà “categorizzato” attraverso le classi di traffico, più sarà possibile effettuare un taglio selettivo
della banda a vantaggio della categoria di traffico da privilegiare.
Il QoS di ZeroShell di Renato Morano ®GPL3 61
QoS e traffico di upload
Tutti gli esempi precedenti si riferiscono ad una configurazione in cui il traffico su cui è abilitato il
QoS è l’interfaccia EH00 di download. La configurazione può essere applicata anche ad un traffico
di upload attraverso una configurazione di ZeroShell in bridge tra ETH00 ed ETH01,
configurazione che
rimando alla documentazione di Fulvio Ricciardi. Valgono le stesse
considerazioni fatte per il traffico di download.
Il QoS di ZeroShell di Renato Morano ®GPL3 62
Table of Contents
Analisi del QoS di ZeroShell mediante il generatore di traffico Ostinato............................................1
Premessa.......................................................................................................................................... 1
Traffico con stessa priorità...............................................................................................................6
Traffico con la stessa priorità ma con valori di flusso differenti..................................................... 9
Traffico con priorità differenti....................................................................................................... 12
Banda garantita.............................................................................................................................. 27
Banda garantita e priorità...............................................................................................................53
Banda garantita e banda massima.................................................................................................. 59
QoS e traffico di upload.................................................................................................................61