You are on page 1of 5

QoS

La Qualit de Service sous Linux.


Joe et Jack essaient de discuter par le biais de VoIP. Ils sont en train de prparer leur prochain coup. William, de sont cot, essaie de suivre un cours de Stanford en streaming, afin de mieux comprendre l impact de la !u""# $ogic sur les s#st%mes bancaires. &vec leur petite connexion &'S$, ces diffrents flux arrivent ( cohabiter sans trop de probl%mes. )nfin... *us+u ( ce +u &verell dcide de tlcharger sur un site ,lgal- la derni%re saison de .ame of Stools. )t l(, tout s croule. /ais fort heureusement, 0antanplan a derni%rement aval un ouvrage ,au sens propre- sur la 1ualit de Service, et se dcide donc d expli+uer ( nos *o#eux drilles la beaut du principe. $e temps +u un gar2on vacher solitaire ne dbar+ue en ville, ou +ue le s#st%me digestif de 0antanplan ne fasse son oeuvre. )t moi, il est temps +ue * arr3te d crire des 4Ps apr%s avoir lu une 5'.

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 cre la racine de notre arbre.


tc class add dev eth p!io ( mtu (, pa!ent ( ) classid ()( htb !ate * kbit ceil ( *+kbit

?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-.

Les al orithmes utilisables pour ordonnancer les queues


!i!o pfifo9fast est l algorithme dHordonnancement par dfaut sous linux. $e principe est simple. Pfifo dfinit I +disc ,B, ; et F-, associes ( la valeur du champ 4oS IP. 4ant +ue la +ueue B n est pas vide, on ne dpile pas la ;. )t tant +ue la ; n est pas vide, on ne dpile pas la F. &utant dire +ue du point de vue 1oS, nous sommes ici aux balbutiements. Il n est pas possible de dfinir de classes particuli%res avec pfifo9fast. ? est un algorithme @ classless. C Pour information, /s0s/class/net/eth /tx_queue_len permet de dfinir le nombre de pa+uets dans cha+ue +ueue. $e probl%me 7 le champ 4oS est rarement utilis correctement. Stochastic fariness queuin "sfq# $e but de cet algorithme n est pas tant de favoriser un flux par rapport ( un autre +ue de s assurer +ue tous les flux puissent se partager le rseau de mani%re +uitable. Eous ne sommes pas encore dans une opti+ue de contr6le des flux, plut6t dans une opti+ue de lissage des flux. $e principe de base est simple. 8n dfinit des @ buckets C d envoi ,un bucket par +disc d envoi-. Par exemple ;BFG buckets pour ;BFG +discs ,valeurs par dfaut-. Par la suite, lors+u un pa+uet doit 3tre mis, sf+ calcule une valeur de hash du pa+uet, en fonction de son en>t3te IP ,et donc de ses param%tres de connexion-. ?e hash permet de placer le pa+uet dans un bucket. $es valeurs de hash allant de x ( # iront dans le bucket n, etc...Voil( comment remplir les buckets. Pour les vider, on utilise un *eton ,round robin-. $e *eton passe rguli%rement d un bucket ( l autre. $e bucket a#ant le *eton peut 3tre vid. $es autres attendent. )n thorie, deux pa+uets issus de connexions diffrentes finiront dans des buckets diffrents. /ais dans de rares cas, il est possible +ue plusieurs connexions donnent la m3me valeur de hash ,la poisse-. $e bucket li aura donc deux fois plus de pa+uets ( envo#er, ce +ui fausse le principe @ d galit C d envoi. Pour viter +ue cela ne se produise trop souvent, sf+ change le mode de calcule du hash toutes les dix secondes. 'onc, au pire, deux connexions partageront le m3me bucket d envoi pendant dix secondes. 4raffic control peut utiliser sf+ avec certains param%tres 7 limit dfinit la taille des buckets pe!tu!b dfinit le temps entre deux changements de modes de calcul de hash quantum dfinit le nombre d octets +ui peuvent 3tre dpils dans un bucket avant de passer le *eton au bucket suivant.

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.

$ravail ' raliser (


Faire des diagrames correspondants au fonctionnement des ordonnanceurs fifo, Crer une configuration permettant de grer l'aide de htb des flux de type SIP / !P / !CP a"ec une grande priorit, SS# a"ec une priorit secondaire et tout le reste a"ec le tout "enant$ %ous pourre& tester "os configurations l'aide de netcat pour gnrer un flux et iptraf$ ' (uoi sert le param)tre r*( dans la configuration de htb +

=<=

You might also like