Professional Documents
Culture Documents
Le principe de la QoS
$e guide du vo#ageur intergalacti+ue ,merci '. &dams- dfinit la 1oS comme la capacit ( envo#er dans de bonnes conditions un ensemble de trafic, en prenant en compte des param%tres de disponibilit, dbit, taux de perte de pa+uets, dlai de transmission,... Architecture Linux et trafic control trafic control, aussi connu sous le doux nom de tc est le mcanisme +ui est utilis sous linux afin de contr6ler l envoi de pa+uets par la carte rseau. Pour $inux, la gestion du rseau passe par plusieurs lments. ' un cot, la pile protocolaire, IP le plus souvent, et de l autre, la carte rseau. $ors+u une application dsire envo#er une donne, elle passe d abord par la pile IP et arrive ensuite sur le pilote de la carte rseau. $a beaut du s#st%me 7 trafic control vient s intercaler entre IP et le pilote de la carte. 4rafic control intercepte les pa+uets ( envo#er lors de l appel ( la fonction no#au dev_queue_xmit(). 8u pour 3tre plus prcis, tc intercepte les lments de t#pe sk_buff reprsentant les pa+uets au niveau du no#au, et passs en param%tre ( dev_queue_xmit(). sk_buff est une structure asse" complexe mais +ui offre l avantage d 3tre tr%s largement accessible au niveau du no#au. 'e plus, de tr%s nombreuses fonctions permettent de modifier le pa+uet par l intermdiaire de sk_buff. 'onc, trafic control g%re des lments de t#pe sk9buff. Il les place dans des +ueues d envoi ,une qdisc ,+ueue discipline-, galement rfrence par sk_buff-. Par dfaut, il n # a +u une seule +ueue. :n arbre est cr si d autres +ueues sont a*outes. Plusieurs niveaux peuvent exister dans ;<=
l arbre pour dfinir des classes et sous>classes. ?ha+ue branche peut recevoir une priorit propre ,plus la valeur est faible, plus la priorit et importante-. $es qdiscs se trouvent au niveau des feuilles. )nfin, il est possible d utiliser un algorithme d ordonnancement pour pouvoir vider les qdisc. Marquer les paquets Pour +ue tc puisse diriger un pa+uet vers une +ueue particuli%re, la mani%re la plus simple est de recourir au mar+uage du pa+uet. )t pour ce faire, netfilter peut nous aider. 'ans d autres cas, il est galement possible de se fier au champ t#pe of service ,4oS- d IP.
iptables -t mangle -A OUTPUT -o eth -p tcp --spo!t " -# $A%& --set-ma!k "
?ette ligne permet va placer une mar+ue @ AB C sur les pa+uets sortants ( destination du port http par dfaut.
iptables -' OUTPUT -t mangle -v
?ette ligne permet d afficher les mar+ues dfinies. 4raffic control va pouvoir lire ces mar+ues. 0este ( savoir comment dfinir la +disc vers la+uelle envo#er le pa+uet. Cration de l'arbre de qdisc. $es +discs peuvent 3tre organises sous une forme arborescente. Par dfaut, $inux implmente une seule +disc ressemblant ( une !I!8 ,first in, first out-. $e principe de la 1oS suppose de remplacer cette +disc par une ou des autres plus mallables.
tc qdisc add dev eth !oot handle ( ) htb default (
?ette ligne demande un peu d explications... )lle permet de crer une +ueue < classe ,class add-, un nDud de l arbre *uste sous la racine ,parent ;7B-. $e nom de cette classe est ;7;B. 8n utilisera l algorithme htb pour ordonnancer notre +ueue. Eotre +ueue a un dbit d envoi garanti ( FBBkbps. /ais s il existe des ressources rseau disponibles, il sera possible d envo#er avec un dbit maximal de ;BFG kbps ,valeur de ceil-. $e priorit de cette +ueue est dfinie par prio. Plus la valeur est faible, plus la +ueue est importante. )nfin, mtu dfini une taille limite de pa+uet ( envo#er. Si un pa+uet de plus de ;=BB octets essaie d 3tre mis, il ne pourra pas l 3tre. ;=BB correspond ( la mtu )thernet par dfaut. Liaison marqueurs / qdisc /aintenant, nous avons des mar+ues sur les pa+uets et des +disc. $a derni%re tape +ui nous attend 7 lier les deux. ?eci se fait par la commande suivante 7
tc filte! add dev eth pa!ent (p!otocol ip p!io ( handle " f. flo.id ()(
F<=
$es pa+uets mar+us @ AB C seront envo#s vers la racine de l arbre +ue nous avons cr prcdemment, vers la branche ;7;B avec une priorit de ; ,max-.
I<=
$o%en buc%et filter "tbf# ?a # est, maintenant, nous allons essa#er de contr6ler l envoi... )nfin J Eous allons encore une fois utiliser des seaux pour contr6ler l envoi dans un ensemble de +discs. ?ha+ue +disc poss%de un bucket. 4bf utilise un algorithme round robin, mais pas pour vider les +discs. 0ound robin est utilis pour remplir les buckets. K cha+ue passage de *eton, un nombre de points est a*out au bucket concern par le *eton. $ors+u un pa+uet arrive en t3te dans une +disc ,fifo amliore-, tbf regarde s il existe asse" de points dans le bucket au passage du *eton dans la file concerne. :n point par bit ( envo#er. Si c est le cas, le pa+uet est envo# vers la carte rseau, et le sceau est vid du nombre de points correspondants ( la longueur du pa+uet. Sinon, le pa+uet reste dans la +disc et attend d avoir asse" de points. $a vitesse de remplissage des buckets ,rate- doit donc 3tre ( la hauteur du dbit total souhait. Llment ( noter 7 tbf a*oute des points aux buckets +u il # ait des pa+uets en attente ou non. ?eci signifie +ue parfois un ensemble de pa+uets peuvent arriver dans une +disc dont le bucket est plein. Selon l algorithme de tbf, ces pa+uets devraient 3tre envo#s de suite. ? est ce +u on appelle un burst 7 un grand nombre de pa+uets envo#s par la m3me +disc. Pour limiter l impact de ces burst, tbf utilise un second mcanisme... )n fait, cha+ue +disc dispose d un second bucket, plus petit +ue le premier. $a taille du second pa+uet correspond ( la taille du burst d envoi +ue l administrateur *uge acceptable. $e second bucket re2oit des points en provenance du premier bucket ( une vitesse peakrate suprieure ( la vitesse rate de remplissage rate du premier. )n d autre termes, le second bucket est plus petit +ue le premier, mais le robinet +ui le remplit a plus de dbit +ue le robinet +ui remplit le premier bucket. )n prati+ue, lors+u un pa+uet veut 3tre mis, on regarde s il # a asse" de points dans le second bucket, pas le premier. )t c est ce second bucket +ui sera vid. :ne fois vide, le *eton passe ( la +disc suivante. Probl%mes... :n gros pa+uet entre dans une file et il est suivi par plusieurs petits pa+uets dans la m3me file. &lors, les petits pa+uets devront attendre +u asse" de points soient amasss dans le bucket pour @ dgager C le gros pa+uet. )t si un pa+uet plus gros +ue le second bucket entre dans la file, alors celui>ci blo+uera la file compl%tement ,il ne sera pas possible de l envo#er-. &ierarchical to%en buc%et "htb# $e dernier algo pour au*ourd hui... +ui est celui correspondant ( l exemple donn au dbut. Pour simplifier, hbt est une version amliore de tbf. $a grande diffrence ici est +u une +disc peut recevoir l autorisation d emprunter des points ( une autre +disc. Mtb introduit galement la notion de priorit entre les +disc. $es valeurs faibles montrent les +disc les plus importantes. 4rafic control utilise les mar+ueurs des pa+uets pour les associer ( des +discs spcifi+ues. 0eprenons l exmple prsent au dbut 7
tc qdisc add dev eth tc class add dev eth p!io ( mtu (, !oot handle ( ) htb default ( pa!ent () classid ()( htb !ate * kbit ceil ( *+kbit
G<=
$e param%tre !ate dfinit le dbit garanti ceil dfinit le dbit maximal possible, avec emprunt aux classes sDurs. p!io permet de dfinir la priorit mtu permet de dfinir la taille maximale du pa+uet la diffrence entre ceil et rate nous donne le nombre de points +ui peuvent 3tre emprunts aux classes soeurs.
=<=