This shows you the differences between two versions of the page.
saisp:labs:11:contents:07 [2014/05/18 13:46] mihai.carabas |
saisp:labs:11:contents:07 [2014/05/18 14:28] (current) mihai.carabas |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 07. HTB - u32 hashing tables ==== | + | ==== 07. [10p] HTB - observarea consumului de resurse ==== |
Ștergeți qdisc-ul root adăugat anterior. | Ștergeți qdisc-ul root adăugat anterior. | ||
Line 5: | Line 5: | ||
Creați un script ce adaugă o limită de 1mbps pentru toate adresele IP din clasa 10.0.0.0/21 (trebuie să creați câte o clasă și câte un filtru pentru fiecare adresă IP). La finalul scriptului adăugați limita de 1mbps și pentru adresele IP asociate stațiilor ''client1'' și ''client2''. | Creați un script ce adaugă o limită de 1mbps pentru toate adresele IP din clasa 10.0.0.0/21 (trebuie să creați câte o clasă și câte un filtru pentru fiecare adresă IP). La finalul scriptului adăugați limita de 1mbps și pentru adresele IP asociate stațiilor ''client1'' și ''client2''. | ||
- | Realizați un transfer între stația ''client2'' și stația ''gateway'' folosind ''iperf''. Utilizați 5 thread-uri pe partea de client a ''iperf'' (Hint: ''-P''). În timpul transferului observați încărcarea stației ''gateway'' (în mod special thread-urile kernel ''ksoftirq''). Acest lucru se datorează faptului că fiecare pachet trebuie să parcurgă toate filtrele adăugate secvențial. Clasificatoul ''u32'' a venit cu o soluție pentru acest lucru: folosirea unor tabele de hash, stocând filtrele sub forma unui arbore. Cheia hash-ului este dată de un octet al adresei IP destinație (mai multe detalii în curs | + | Realizați un transfer între stația ''client2'' și stația ''gateway'' folosind ''iperf''. Utilizați 5 thread-uri pe partea de client a ''iperf'' (Hint: ''-P''). În timpul transferului observați încărcarea stației ''gateway'' (în mod special thread-urile kernel ''ksoftirq''). Acest lucru se datorează faptului că fiecare pachet trebuie să parcurgă toate filtrele adăugate secvențial. Clasificatoul ''u32'' a venit cu o soluție pentru acest lucru: folosirea unor tabele de hash, stocând filtrele sub forma unui arbore. Cheia hash-ului este dată de un octet al adresei IP destinație (mai multe detalii în curs și la exercițiul de la BONUS). |
- | <solution -hidden | + | |
+ | <solution -hidden> | ||
+ | <file bash htb.sh> | ||
+ | #!/bin/bash | ||
+ | |||
+ | tc qdisc del dev eth0 root | ||
+ | tc qdisc add dev eth0 root handle 1: htb | ||
+ | tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit burst 128k | ||
+ | |||
+ | 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 | ||
+ | tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dst 10.0.$j.$i flowid 1:$classid | ||
+ | done | ||
+ | done | ||
+ | |||
+ | classid=$(($classid + 1)) | ||
+ | tc class add dev eth0 parent 1:1 classid 1:$classid htb rate 100mbit burst 128k | ||
+ | tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dst 192.168.1.1 flowid 1:$classid | ||
+ | echo $classid | ||
+ | |||
+ | classid=$(($classid + 1)) | ||
+ | tc class add dev eth0 parent 1:1 classid 1:$classid htb rate 100mbit burst 128k | ||
+ | tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dst 192.168.1.2 flowid 1:$classid | ||
+ | </file> | ||
+ | </solution> |