This is an old revision of the document!
În Linux, strategiile de QoS se inspectează și configurează folosind comanda tc. Termenul folosit pentru strategiile de QoS este qdisc (de la queueing discipline).
Afisați detalii despre qdisc-ul implicit, asociat interfeței eth0 de pe stația gateway:
# tc qdisc show dev eth0 qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Observați că qdisc-ul implicit este pfifo_fast (strategia implicită de QoS):
priority FIFO.0 conține pachete, cozile 1 si 2 NU vor fi servite.
Ce reprezintă priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1? În Linux, kernel-ul asociază fiecărui pachet o prioritate, în functie de campul TOS (Type of Service) din header-ul IP. Prioritatea ne selectează una din cele 3 (sub)cozi din pfifo_fast: coada 0, 1 sau 2. Asocierile se fac după următorul tabel:
TOS Means Linux Priority Band ------------------------------------------------------- 0x0 Normal-Service 0 Best Effort 1 0x2 Minimize-Monetary Cost 1 Filler 2 0x4 Maximize-Reliability 0 Best Effort 1 0x6 mmc+mr 0 Best Effort 1 0x8 Maximize-Throughput 2 Bulk 2 0xa mmc+mt 2 Bulk 2 0xc mr+mt 2 Bulk 2 0xe mmc+mr+mt 2 Bulk 2 0x10 Minimize-Delay 6 Interactive 0 0x12 mmc+md 6 Interactive 0 0x14 mr+md 6 Interactive 0 0x16 mmc+mr+md 6 Interactive 0 0x18 mt+md 4 Int. Bulk 1 0x1a mmc+mt+md 4 Int. Bulk 1 0x1c mr+mt+md 4 Int. Bulk 1 0x1e mmc+mr+mt+md 4 Int. Bulk 1
Observăm că pachetele normale (cu TOS 0x00) sunt introduse în (sub)coada 1. La punctul anterior, fluxul UDP avea o pierdere semnificativă de pachete. O primă soluție ar fi marcarea pachetelor de voce și video cu un ToS favorabil (de exemplu, 0x10), pentru a avea prioritate mai mare față de pachetele. Marcarea se realizează folosind lanțul mangle al comenzii iptables:
root@gateway:~# iptables -t mangle -A OUTPUT -p udp --dport 6000:8000 -j TOS --set-tos Minimize-Delay
Comanda anterioară marchează toate pachetele UDP cu porturile în intervalul 6000 și 8000 cu tag-ul Minimize-Delay. Se observă că se poate folosi numele tag-ului în loc de valoare (0x10).
Rulați din nou scriptul iperf-gateway.sh pe stația gateway și observați că procentele pierdute s-au diminuat foarte puțin. Nu e suficientă doar o prioritizare a pachetelor.