This shows you the differences between two versions of the page.
saisp:labs:11:contents:08 [2014/05/18 12:56] mihai.carabas created |
saisp:labs:11:contents:08 [2016/05/23 21:20] (current) alexandru.carp [08. [20p] HTB - u32 hashing tables] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 08. Colectare statistici folosind ''tc'' ==== | + | ==== 08. [20p] HTB - u32 hashing tables ==== |
- | Pe lângă controlul traficului, utilitarul ''tc'' ne furnizează și statistici despre traficul transferat de fiecare clasă:<code bash> | + | Generarea de mână a filtrelor folosind ''hash tables'' este anevoioasă și NU se recomandă. Vom folosi un program C, disponibil [[http://vcalinus.gemenii.ro/prefixtree.c||aici]]. |
- | root@gateway:~# tc -s class show dev eth0 | + | |
- | </code> | + | |
- | Scrieți un script care extrage numărul de octeți trimiși pentru una din clase. Utilizați acest script să generați un grafic folosind informațiile prezentate în [[saisp:labs:03:contents:05|]]. | + | Descărcați și compilați programul ''prefixtree'':<code bash> |
+ | root@gateway:~# wget http://vcalinus.gemenii.ro/prefixtree.c | ||
+ | root@gateway:~# make prefixtree | ||
+ | cc prefixtree.c -o prefixtree | ||
+ | root@gateway:~# ./prefixtree | ||
+ | IPv4 u32 hash filter generator - (C) 2006 Calin Velea | ||
+ | Syntax: prefixtree {prefix.in} {u32filters.out} {interface} {src/dst} [batch] | ||
+ | </code> | ||
+ | Vom scrie fișierul ''prefix.in'' care trebuie să conțină pe câte o linie adresa IP pentru care vrem să ne genereze filtrele și ''classid''-ul asociat. | ||
+ | |||
+ | Modificați scriptul de la exercițiul [[saisp:labs:11:contents:07|]] astfel încât să introducă perechea ''adresaIP classid'' în fișierul ''prefix.in'' în loc să adauge filtrul asociat. Adăugați și masca adresei IP (''/32''). | ||
<solution -hidden> | <solution -hidden> | ||
- | <code bash> | + | <file bash htbht.sh> |
- | root@gateway:~# tc -s class show dev eth0 | grep -A 4 "class htb 1:1"|grep Sent|cut -d " " -f3 | + | tc qdisc del dev eth0 root |
- | 6375340 | + | tc qdisc add dev eth0 root handle 1: htb |
+ | tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit burst 128k | ||
- | Se adaugă comanda de mai sus în scriptul din [[saisp:labs:03:contents:05|]], la variabila ''outOctets'' | + | > prefix.in |
- | </code> | + | |
+ | classid=2 | ||
+ | for j in $(seq 0 15); | ||
+ | do | ||
+ | for i in $(seq 1 254); | ||
+ | do | ||
+ | classid=$(($classid + 1)) | ||
+ | tc class add dev eth0 parent 1:1 classid 1:$classid htb rate 100mbit burst 128k | ||
+ | echo 10.0.$j.$i/32 $classid >> prefix.in | ||
+ | done | ||
+ | done | ||
+ | |||
+ | classid=$(($classid + 1)) | ||
+ | tc class add dev eth0 parent 1:1 classid 1:$classid htb rate 100mbit burst 128k | ||
+ | echo 192.168.1.1/32 $classid >> prefix.in | ||
+ | |||
+ | classid=$(($classid + 1)) | ||
+ | tc class add dev eth0 parent 1:1 classid 1:$classid htb rate 100mbit burst 128k | ||
+ | echo 192.168.1.2/32 $classid >> prefix.in | ||
+ | </file> | ||
</solution> | </solution> | ||
+ | Rulăm comanda ''prefixtree'' pe fișierul generat:<code bash> | ||
+ | root@gateway:~# ./prefixtree prefix.in filters.out eth0 dst | ||
+ | lines parsed: 4066 | ||
+ | total hashtables: 4 | ||
+ | </code> | ||
+ | Observați conținutul fișierului ''filters.out''. Aplicăm filtrele generate:<code bash> | ||
+ | root@gateway:~# chmod +x filters.out | ||
+ | root@gateway:~# ./filters.out | ||
+ | </code> | ||
+ | |||
+ | Testați din nou folosind ''iperf''. Obervați faptul că stația ''gateway'', cea care face limitările, nu mai intră în load (thread-urile kernel ''ksoftirqd'' au CPU usage foarte mic). |