Précédent Remonter Suivant

Chapitre 5  Garanties de délai
sans état par flot

5.1  Introduction du chapitre

Dans le chapitre précédent, nous avons utilisé une approche basée sur un changement d'échelle du modèle classique de gestion par flot de la qualité de service. Comme toutes les solutions basées sur le principe de l'agrégation, elle entraîne intrinsèquement une perte de flexibilité puisqu'on ne peut plus faire de gestion par flot. L'exemple le plus évident de ce manque de flexibilité est l'impossibilité de traiter le multicast. De même, dans le cas des flots GS nous étions obligés de fournir le même délai à tous ou de gérer un b-flot pour chaque délai.

L'approche que nous nous proposons d'étudier dans ce chapitre est similaire dans ses grandes lignes à celle présentée dans le chapitre 4 : des réseaux mettant en oeuvre le modèle IntServ/RSVP sont interconnectés par un backbone utilisant un modèle différent mais capable de fournir le même type de garanties.

Nous proposons une méthode permettant de résoudre les problèmes de scalabilité sans pour autant diminuer la flexibilité. Le but est de conserver une granularité minimale dans la gestion des flots, mais en réduisant la nécessité de maintenir des états pour chaque flot à l'intérieur du backbone qui devient une ``zone sans état''.

Nous commençons par situer notre travail dans le cadre des garanties de délai dures, et décrivons les différences entre les disciplines de service weighted fair queuing et virtual clock. Puis nous décrivons rapidement une proposition pour le plan de contrôle, c'est à dire une méthode pour faire un contrôle d'admission par flot sans maintenir d'état pour chaque flot. Nous discutons ensuite le plan de données et montrons que le trafic étant contraint en entrée, on peut supprimer les états par flot et prévoir les effets de cette suppression sur les garanties. Cependant, les outils analytiques ne pouvant nous donner des bornes sur ces effets que dans des cas pires, nous utilisons des simulations pour obtenir des estimations plus réalistes.

5.2  Préliminaires

5.2.1  Gestion des garanties dures

Plusieurs types de services doivent être proposés dans un réseau à intégration de services. Certaines applications ont besoin de garanties dures alors que d'autres peuvent se contenter de garanties statistiques. Un autre ``service'' hautement désirable pour le trafic best-effort est le partage équitable de la bande passante. Tous ces services doivent pouvoir être proposés dans l'ensemble du réseau.

Nous plaçons notre travail dans le contexte de garanties de délai ``dures'', par exemple le service GS de l'IntServ. Nous pensons en effet que c'est le cas le plus difficile, et celui pour lequel on a le plus besoin de flexibilité. Pour des services du type controlled load, des solutions comme SRP peuvent être suffisantes. Pour l'aspect partage équitable de bande passante, des mécanismes du type RED (Random Early Detection) nous semblent bien plus intéressants car ils peuvent fournir une équité globale par opposition aux techniques d'ordonnancement qui ne peuvent fournir qu'une équité locale à chaque noeud.

5.2.2  Virtual Clock et Fair Queuing

Nous avons déjà dit au chapitre 2 que Virtual Clock et Weighted Fair Queuing avaient des caractéristiques communes du point de vue de l'implémentation, et fournissaient les mêmes garanties de délai.

Le Weighted Fair Queuing émule la discipline de service idéale GPS. Le Virtual Clock (VC) a lui éte pensé comme émulation du TDM (Time Division Multiplexing), une discipline bien réelle mais utilisable uniquement dans les réseaux à commutation de circuit. Dans [FP95], Figueira et Pasquale proposent une autre interprétation de la discipline VC et montrent les propriétés de délais identiques à celles de PGPS (démonstration d'ailleurs très similaire à celle faite dans [PG93] pour PGPS). Leur interprétation consiste à considérer que VC émule une discipline dans laquelle chacun des flots est servi par son propre serveur FCFS à un débit fixé. Par convention, nous appellerons TDM cette discipline.

Un serveur GPS partage la bande passante équitablement entre tous les flots de manière dynamique, en fonction de leurs poids fi. Pour obtenir une garantie de débit pour un flot, il faut limiter le nombre de flots. Chaque flot i reçoit alors un débit garanti égal à (fi / å fj) · C, C étant la capacité du serveur. C'est à partir de cette garantie de débit que l'on déduit des garanties de délais pour les flots dont le trafic est contraint par un seau percé.

Dans la discipline TDM, chaque flot se voit également garanti une bande passante égale à (fi / åfj) · C et les mêmes garanties de délai s'appliquent dans les mêmes conditions. Dans le cas du WFQ cependant, le débit effectivement alloué à chaque flot est au minimum égal à (fi / åfj) · C. Dès qu'un ou plusieurs flots ne sont pas actifs, la bande passante qui leur est allouée est immédiatement partagée équitablement entre les autres flots, qui recoivent alors un débit plus élevé et, en conséquence, des délais plus faibles.

Dans le cas du VC, lorsque certains flots sont inactifs le débit en surplus est alloué aux autres flots (la discipline conserve le travail -- work conserving) mais de manière arbitraire ; il n'est donc pas possible de garantir un accroissement du débit disponible pour un flot donné.

Néanmoins, comme les délais maxima sont basés sur le cas où le flot dispose du minimum garanti de bande passante, les bornes de délais sont les mêmes pour les deux disciplines. En fait, dans le cas où l'on n'est intéressé que par les garanties de délai, VC se révèle un meilleur choix car le calcul réalisé pour l'estampillage des paquets est plus simple, et surtout, il ne dépend pas de l'état des autres flots.

Dans la suite, nous appellerons donc TDM la discipline de service fluide équivalente au GPS quand tous les flots sont actifs. En ce sens, virtual clock est une émulation de TDM de la même façon que weighted fair queuing est une émulation de GPS.

5.3  Plan de contrôle

Le problème du plan de contrôle se ramène à la question de comment réaliser un contrôle d'admission sans maintenir d'état par flot. Nous ne détaillerons pas le problème mais décrirons seulement les grands principes d'une solution acceptable.

5.3.1  CAC local

On conserve dans chaque noeud la somme Rsom des réservations allouées pour tous les flots. Localement, le contrôle d'admission pour un flot i demandant une réservation Ri teste si Rsom+Ri £ C (C étant la capacité du lien). Si le test réussit, Rsom est mis à jour en Rsom+Ri. Sinon, la réservation est refusée. Quand un flot se termine, sa réservation doit être soustraite du total Rsom-=Ri.

5.3.2  CAC global

De la même façon que ce que nous avons proposée au chapitre 4, l'ensemble de la zone sans état doit être perçu comme un seul élément par les réseaux périphériques. L'interfaçage au niveau du contrôle d'admission sera donc similaire. La réalisation du contrôle d'admission dans la zone sans état sera par contre très différente. Deux approches sont possibles, utiliser une architecture répartie ou un gestionnaire de contrôle d'admission centralisé (broker). Dans les deux cas, il est impératif d'assurer qu'aucun changement de route ne se produise.

Architecture répartie

Si on utilise une architecture répartie, chaque noeud gérant sa valeur de Rsom il est alors primordial d'assurer la fiabilité de transmission des messages, aussi bien d'ajout (message ADD) que d'effacement (message DEL) de réservation. Il faut également gérer la ``remontée d'un échec'', c'est à dire annuler les réservations faites en amont du noeud où le CAC échoue. Pour cela, le message ADD peut accumuler la liste des noeuds parcourus. Un message CANCEL pourrait alors remonter jusqu'à l'ingress en annulant la réservation. Ceci est décrit plus formellement dans le tableau 5.1. Les notations car, cdr et cons représentent les fonctions classiques de manipulation de liste du langage Lisp.

Message reçu Traitement
ADD(Ri, liste) si Rsom+Ri £ C Rsom+=Ri
  envoie ADD(Ri,cons(noeud,liste)) ® suivant
  sinon envoie CANCEL(Ri,cdr(liste)) ® car(liste)
CANCEL(Ri,liste)   Rsom-=Ri
  envoie CANCEL(Ri,cdr(liste)) ® car(liste)
DEL(Ri)   Rsom-=Ri
  envoie DEL(Ri) ® suivant

Table 5.1 : Traitement des messages pour le contrôle d'admission


Comme nous l'avons dit, il faut assurer une fiabilité absolue de la transmision de ces messages, sans quoi les valeurs Rsom stockées dans les noeuds finiraient par diverger. Même si des procédures de contrôle et retransmission des messages sont mises en place, on ne peut pas éviter des pertes de paquets dans des cas extrêmes, par exemple la chute d'un lien. Il est donc impératif de disposer d'un moyen de rétablir les valeurs des Rsom de manière cohérente. Nous proposons de permettre aux noeuds de mesurer la bande passante réservée (et non pas utilisée) par observation du trafic, selon une idée proposée dans [SZ99].

Pour cela, un bit est utilisé dans l'en-tête des paquets. Au niveau des ingresses, ce bit est mis à 1 pour un paquet de chaque flot sur un intervalle de temps fixé T. Sur l'intervalle de temps, chaque noeud ajoute à son compteur Rmes la valeur Ri stockée dans tout paquet marqué (ayant le bit à 1) qu'il traite. À la fin de l'intervalle de temps, Rmes vaudra la somme des réservations faites dans ce noeud divisée par la longueur de l'intervalle1. Pour éviter que les variations de délai fassent qu'un paquet soit compté dans le mauvais intervalle, on peut synchroniser tous les noeuds (en utilisant par exemple NTP [Mil92]) et marquer les paquets à peu prés au milieu de l'intervalle.

Architecture centralisée

Une solution centralisée consiste à utiliser un broker connaissant la topologie du réseau et gérant la valeur Rsom pour chaque noeud. Le contrôle d'admission n'étant plus réparti, les problèmes de fiabilité de transmission ne se posent plus. La structure de données à maintenir ne pose pas à priori de problème de scalabilité, sa taille ne dépendant que de la taille de la zone sans état. La limite sera plutôt liée à la puissance de calcul nécessaire pour traiter tous les contrôles d'admission, qui dépendra de la dynamicité du trafic.

Le multicast

Le problème du multicast est particulier (et difficile) car la signalisation et les états liés au routage multicast peuvent eux mêmes poser des problèmes de scalabilité. La gestion de la qualité de service pour le multicast dépendra fortement, et pourrait éventuellement être associée avec, la signalisation liée au routage multicast. Cela sort du cadre de notre travail et nous ne discuterons donc pas ce problème.

5.4  Plan de données

5.4.1  L'implémentation du WFQ/VC

Comme nous l'avons vu en 2.5 l'implémentation d'un ordonnanceur du type weighted fair queuing ou virtual clock consiste typiquement à maintenir une file de paquets triés selon une estampille calculée par la formule suivante (Fik est l'estampille de Pik, le kieme paquet du flot i) :
  Fik = max(Aik, Fik-1) +
Lik
Ri
    (5.1)

Aik est la date d'arrivée du paquet (exprimée en temps virtuel pour le WFQ et temps réel pour le VC), Lik sa taille et Ri la réservation allouée au flot i.

De cette formule il apparaît que pour chaque flot on a besoin de connaître les valeurs de Fik-1 et Ri. L'état à maintenir par flot dans chaque noeud se réduit donc au couple (Fik-1, Ri). Nous ne prenons pas en compte la gestion de tampons mémoire réservés au flot pour assurer un taux de perte nul. Ceci sera justifié en 5.4.3.

Il est facile de se débarrasser de l'état Ri : celui-ci étant constant dans l'espace (c'est à dire qu'il a la même valeur sur chacun des noeuds du chemin), on peut le transporter simplement dans les paquets, dans un champ d'en-tête réservé à cet effet. Si à un moment donné la réservation associée à un flot change, il suffit de le refléter dans la valeur de Ri codée dans les prochains paquets du flot (sous réserve que le contrôle d'admission ait précédement accepté le changement de réservation).

Éliminer l'état Fik-1 est plus difficile ; d'une part il a une valeur purement locale (il représente une date exprimée dans le référentiel temporel de l'interface considérée), d'autre part il est hautement dynamique : par définition, sa valeur est mise à jour pour chaque paquet du flot qui traverse le noeud. Afin de voir de quelle façon et dans quelle mesure on peut éventuellement éliminer cet état, nous allons maintenant examiner en détail sa raison d'être.

5.4.2  Le rôle du terme Fik-1

Comme nous l'avons dit en 2.5, le besoin du terme Fik-1 tient au fait qu'en GPS le paquet Pik ne peut pas commencer son service avant que le paquet Pik-1 n'ait terminé le sien, et permet donc éventuellement d'augmenter l'estampille du paquet à la valeur qu'elle aurait avec le serveur GPS.

Intuitivement, on peut dire que cela correspond à retarder2 un paquet qui arriverait ``en avance''. Nous distinguons trois causes pour lesquelles un paquet est susceptible d'arriver en avance :
  1. la source émet à un débit supérieur à sa réservation ;

  2. le paquet est plus court que le paquet précédent ;

  3. le noeud précédent a créé de la gigue.
Le premier point est évident. Le deuxième correspond au fait que le délai de paquetisation étant proportionnel à la taille du paquet, un paquet plus court subira des (aura des garanties de) délais plus faibles et aura donc tendance à rattraper un paquet plus long le précédant. Pour le troisième point, il est nécessaire d'examiner d'un peu plus près que nous ne l'avons fait jusqu'à présent le fonctionnement de l'algorithme VC.

Annulation de la gigue

Celui-ci garantit qu'un paquet Pik ne finira pas sa transmission avec un retard plus grand que Lmax/C par rapport au service fourni par le TDM. Il peut cependant très bien le finir beaucoup plus tôt. Sur la figure 5.1 on voit que la transmission du paquet Pik dure Lik/Ri en TDM et Lik/C en VC, où sa transmission peut avoir lieu (se terminer3) n'importe où dans l'intervalle [Aik+Lik/C, Aik + Lik/Ri + Lmax/C]. Il y a donc une incertitude égale à Lik/Ri + Lmax/C - Lik/C sur le moment de transmission du paquet. Pour simplifier, nous considérerons dans la suite que l'instant de transmission du paquet est situé dans l'intervalle [0, Lik/Ri], Aik étant égal à 0.

figure=fig/gps-pgps.eps,width=13cm

Figure 5.1 : Transmission des paquets en TDM et VC


Ceci implique qu'en sortie d'un noeud implémentant la politique VC, l'espacement entre les paquets ne sera pas nécessairement (et très probablement pas) constant et égal à L/R même si le flot était parfaitement lissé à l'entrée dans le noeud. Au contraire, les paquets auront tendance à ``s'agglomérer'' par paires pour former ce que nous appellerons des ``grumeaux'' de paquets (paquets 1 et 2 sur la figure 5.1).

Dans le pire des cas, le paquet Pik-1 aura subi un délai maximum égal à Li/Ri et le paquet Pik un délai nul. Les deux paquets se retrouvent alors ``collés''. Notons que la simplification que nous avons opérée sur l'intervalle d'émission possible du paquet se justifie dans la mesure où un intervalle plus grand ne peut aggraver encore l'effet d'agglomération (l'ordre des paquets ne peut pas être modifié).

5.4.3  Élimination du terme Fik-1

À partir de notre analyse du rôle joué par le terme Fik-1 dans l'algorithme du VC nous pouvons maintenant envisager comment limiter les conséquences de sa suppression. Nous avons précédement relevé trois aspects de ce rôle.

Débit trop élevé

Le premier consiste à contraindre au débit réservé un flot qui émettrait à un débit plus élevé. Ce rôle peut être assuré par un lisseur de trafic à l'entrée de la région sans état. Ce lissage systématique n'a pas d'influence sur le délai maximal des paquets, car dans le modèle classique le lissage peut de toute façon potentiellement être réalisé dans n'importe lequel des noeuds (au premier noeud congestionné, le flot ne pourra pas utiliser plus que la bande passante réservée et sera donc lissé au débit correspondant). Évidemment, il est probable que le délai moyen soit augmenté mais cela ne nous semble pas être un problème. Le corollaire est d'ailleurs une diminution de la gigue au récepteur.

De plus, le flot étant lissé à l'entrée de la zone sans état, aucun tampon autre que ceux nécessaires à l'arbitrage de la contention (donc de taille réduite) n'est requis à l'intérieur de la zone. Celle-ci étant typiquement un réseau à haut débit devant utiliser des mémoires très rapides et donc coûteuses, cela permettra des économies substantielles. Cette économie se reflète également en gestion puiqu'il n'est plus nécessaire de réserver et gérer l'occupation de tampons par flot. Il suffira au contraire de les dimensionner suffisamment pour ne pas risquer de pertes dues à la contention.

Changement de la taille de paquet

Il s'agit à notre avis d'un problème secondaire. On peut simplement se ramener au cas d'une taille de paquet constante en ``bourrant'' les paquets trop courts au niveau de l'ingress, de façon à n'avoir que des paquets de taille Li constante pour chaque flot i dans la zone sans état. Il faut alors faire l'opération inverse à la sortie. On peut néanmoins agir plus subtilement, c'est à dire faire simplement en sorte que les paquets soit traités comme s'ils avaient une taille Li fixée. Par exemple, au lieu de transporter la valeur de Ri dans le paquet, on peut transporter directement Li/Ri (la valeur de Ri n'étant utilisée dans le calcul de l'estampille que comme diviseur de Li).

Il faut cependant bien noter que dans ce cas une application ne peut pas supposer qu'elle obtiendra des délais plus faibles si à un moment donné elle réduit la taille de ses paquets.

Correction de la gigue

Une solution déterministe a été apportée à cet aspect dans [SZ99]. Brièvement, l'idée est d'utiliser une variante de Virtual Clock qui contrôle la gigue (c'est une discipline qui ne conserve pas le travail). Au moment où un paquet est émis, la différence entre les instants de départ effectif et théorique est placée dans un champ de l'en-tête du paquet. Au noeud suivant, cette valeur sera utilisée pour retarder le paquet. Ainsi la gigue ne peut s'ajouter de noeud en noeud, elle est limitée à L/R.

Nous discutons plus en détail cette solution pour la comparer avec notre proposition en section 5.6 page ??. Plutôt que d'assurer un contrôle strict de la gigue, nous prenons comme optique de prévoir et prendre en compte les effets de la gigue sur les garanties.

5.4.4  Les effets de la gigue

Si la gigue créée par le noeud précédent n'est pas corrigée par le terme Fik-1, l'estampille du paquet Pik arrivé ``en avance'' va être plus petite que ce qu'elle devrait être pour émuler correctement le TDM. Cela se traduira éventuellement par un gain de placement pour la résolution de la contention au détriment des paquets d'autres flots en contention. L'ordonnanceur n'émule plus correctement le modèle de référence puisqu'il alloue à cet instant au flot i plus de bande passante que ce qui lui est dû. Il émule alors un serveur fluide qui servirait deux paquets du flot i simultanément. Par exemple, sur la figure 5.2 le paquet 2 arrive en avance, un ordonnanceur VC classique repousse son estampille pour émuler correctement le TDM alors qu'un ordonnanceur qui ne connaît pas la valeur de Fi1 (appelons le stateless VC) commet une erreur sur le calcul de Fi2. Cette sur-consommation des ressources par le flot n'a pas d'effet sur le flot lui même (à part une augmentation de la gigue) mais peut par contre résulter en une violation des garanties dûes aux autres flots.

figure=fig/2paquets.eps,width=13cm

Figure 5.2 : Service de deux paquets du même flot en parallèle


Plus grave, les effets de la gigue peuvent s'accumuler lors des traversées de noeuds successifs. Si dans le pire des cas, on peut comme nous l'avons montré obtenir un grumeau de deux paquets complètement collés après un noeud, la taille de grumeau maximum théorique après n noeuds sera de n+1 paquets collés (figure 5.3). Évidemment, il s'agit d'un cas que nous qualifierons de pire car hautement improbable mais qu'il n'est pas possible d'exclure formellement.

figure=fig/accumg.eps,width=13cm

Figure 5.3 : Accumulation d'un grumeau


Influence de la charge

Ce phénomène d'agglomération dépend essentiellement de la charge. Soit l la charge instantanée à un moment donné sur un noeud. Le délai maximal subi par un paquet et correspondant au délai de paquetisation dans le modèle fluide est égal à l × L/R. Cela s'explique par le fait que dans l'ordonnanceur discret, ce délai correspond à la résolution de la contention entre les paquets. Ainsi, quand la charge à un instant donnée est maximale, il faut au maximum un temps égal à L/R pour ``écouler'' tout le trafic. Si la charge est réduite de x %, moins de paquets sont en contention, le temps nécessaire pour écouler toutes les données est lui aussi réduit de x %.

Cependant, la charge instantanée maximale possible sur un noeud croit avec la déformation du trafic. Des grumeaux de taille plus élevée signifient une charge instantanée potentielle plus élevée. Ainsi, la charge influe sur la déformation du trafic, et la déformation du trafic induit une charge maximale plus importante au noeud suivant. La déformation sera alors plus importante, etc...

Acceptabilité de la gigue

À nouveau la charge
Appelons charge statique le rapport de la somme des réservations allouées sur la capacité du lien :
ls =
 
å
j
Rj
C

Si ls est inférieure à un, le réseau est en fait sous provisionné. Ainsi, un flot i auquel est réservée une bande passante Ri peut en fait consommer une bande passante jusqu'à Ri/ls (puisque åj Rj/ls = C).

Dans une telle situation, une surcharge pour chaque flot (c'est à dire des grumeaux) est acceptable sans risquer de violer aucune des garanties faites aux autres flots. Pour prendre un exemple très simple, une charge de 50 % signifie que deux fois plus de bande passante que ce qui a été réservé est disponible instantanément. Des grumeaux de taille deux n'auront alors aucun effet sur les garanties ; dans le cas pire où un grumeau de taille deux pour chaque flot arrivent en même temps sur l'ordonnanceur, l'ensemble de la bande passante disponible est consommée à cet instant sans qu'aucun flot ne reçoive moins de bande passante que ce qui lui avait été réservé.

Cas des flots à faible débit
Pour les flots qui utilisent moins que leur débit réservé (flots à faible débit demandant un délai faible par exemple), les effets de l'agglomération sont retardés. Si le flot a un débit r et une réservation R, l'incertitude sur l'instant d'émission est égale à L/R < L/r.

Il s'agit en fait du même phénomène que nous venons de décrire avec la charge, mais agissant au niveau d'un flot et non pas globalement. Le flot disposant de plus de ressources qu'il n'en consomme, il dispose d'une certaine ``marge'' de déformation acceptable avant de sur-consommer des ressources, éventuellement au détriment d'autres flots.

Influence globale de la charge

En limitant la charge, nous limitons la proportion de la capacité du lien allouée aux flots GS. Le trafic best-effort (ou d'une autre classe de service moins exigeante) traité à une priorité plus faible (c'est à dire uniquement quand aucun des flots GS n'utilise les ressources) n'entre pas en compte dans cette charge. On peut donc obtenir les effets d'une charge réduite sans pour autant limiter l'utilisation du réseau, mais en limitant la charge statique (c'est à dire la somme de la bande passante réservée divisée par la bande passante du lien) en flots GS.

Ainsi, si l'on limite la charge statique en flots GS à 50 % de la capacité du réseau, on réduit le rythme de création des grumeaux tout en rendant possible le traitement de grumeaux de taille deux paquets sans risquer aucune violation des garanties.

Au premier noeud, les flots ayant été lissés à l'entrée de la zone sans état, nous considérerons qu'il n'y a aucun grumeau. La charge instantanée l1 est alors limitée par la charge statique ls. Une déformation du trafic est introduite, et dans le pire des cas des grumeaux de taille 2 sont créés. Ainsi, pour le prochain noeud la charge instantanée potentielle est doublée. L'intervalle d'incertitude sur le moment d'émission des paquets au prochain noeud double donc, et des grumeaux de quatre paquets peuvent apparaître, qui doublent la charge au noeud suivant et ainsi de suite. En fin de compte, la charge instantanée maximale après n noeuds est :
ln = 2n × ls

Et l'on veut assurer que la charge instantanée ne dépasse jamais la charge maximale acceptable pour chaque flot compte tenu du sous provisionnement du réseau, soit :
ls × Ri £
Ri
ls
ÜÞ ln £
1
ls

Donc :
2n × ls £
1
ls
ÜÞ 2n £
1
ls2
ÜÞ n £ log2
1
ls2

ce qui est représenté sur la figure 5.4.


figure=graphs/nvsl.eps,width=7cm,angle=-90

Figure 5.4 : Longueur maximum en fonction de la charge


On voit très bien qu'une faible réduction de la charge a très peu d'effet ; par contre des limitations plus importantes changent significativement la situation : jusqu'à cinq noeuds peuvent être traversés avec une charge proche de 20 %. Ce résultat n'est cependant valable que si la déformation des flots rencontrés dans les noeuds augmente progressivement le long du chemin, ce qui dépend de la topologie du réseau.

Nous insistons sur le fait que ce résultat correspond à une situation pire et hautement improbable. En pratique, on devrait donc obtenir des comportements bien meilleurs.

Nous appelons stateless VC la discipline de service inspirée de Virtual clock et ne maintenant pas l'état Fik-1. Elle utilise le calcul suivant pour le calcul de l'estampille d'un paquet :
  Fik = Aik +
Lik
Ri
    (5.2)

Évidemment, deux situations sont possibles, dans lesquelles l'algorithme émule correctement ou non le TDM.
(1) Aik ³ Fik-1 correct
(2) Aik < Fik-1 erreur

Dans le cas (1), le paquet arrive après le Fi du paquet précédent, Aik > Fik-1 et donc le fonctionnement est identique à la version avec états.

Dans le cas (2), le paquet arrive avant le Fi du paquet précédent. Il y a donc là erreur et mauvaise émulation du TDM. Néanmoins, si certaines précautions sont prises, cette erreur devrait se produire assez peu et surtout ses conséquences peuvent être contrôlées.

5.4.5  Suppression partielle du terme Fik-1

Nous venons de voir qu'il est possible dans certaines conditions de ne pas contrôler à chaque noeud la gigue prise par les paquets. Cependant on peut aussi dans une certaine mesure contrôler cette gigue sans pour autant créer un état dédié. L'idée est d'utiliser l'information déjà présente dans la file de paquets en attente.

Rappelons que les paquets en contention sont triés sur leur estampille Fik dans une file d'attente. Ils doivent être stockés avec leur estampille pour conserver une file triée lors de l'insertion de nouveaux paquets. Ainsi quand un paquet arrive, si on sait qu'un paquet du même flot est en attente, on connaît la valeur à utiliser pour le Fik-1. Évidemment, le fait qu'aucun paquet du même flot ne soit présent dans la file n'assure pas que l'on ait Aik ³ Fik-1. fik étant la date de départ effectif du kieme paquet du flot i, le calcul à appliquer est alors :
  ì
ï
ï
í
ï
ï
î
Fik = Aik +
Lik
Ri
si Aik ³ fik-1
Fik = Fik-1 +
Lik
Ri
si Aik < fik-1
    (5.3)

Trois situations sont possibles :
(1) Aik ³ Fik-1 correct
(2) Aik £ fik-1 £ Fik-1 correct
(3) Aik < Fik-1 £ fik-1 erreur

Dans le cas (1), le paquet arrive après le Fi du paquet précédent, Aik > Fik-1 et donc le fonctionnement est identique à la version avec états.

Dans le cas (2), le paquet arrive avant le Fi du paquet précédent et avant le départ effectif de ce paquet. La valeur Fik-1 est récupérée et le fonctionnement est identique à la version avec états.

Dans le cas (3), le paquet arrive avant le Fi du paquet précédent et après le départ effectif de ce paquet. La valeur Fik-1 n'est plus disponible et l'algorithme suppose que l'on se trouve dans le cas (1). Il y a donc là erreur et mauvaise émulation du TDM.

L'utilisation de cet algorithme suppose deux choses : L'identification d'un flot peut se faire de manière classique (paire d'adresses et ports source/destination) ou en utilisant un label attribué par le routeur ingress, ce qui permettrait un traitement plus simple. Ce label pourrait par exemple être constitué d'un identificateur de l'ingress et d'un numéro de flot unique pour cet ingress. Une liste des estampilles des derniers paquets de chaque flot présents dans la file peut être conservée dans une table hachée utilisant l'identificateur de flot comme clé. Ces opérations demandent un traitement supplémentaire par paquet. Leur complexité ne dépend pas du nombre total de flots mais du nombre de flots dont au moins un paquet est présent dans la file qui devrait être beaucoup plus faible à tout instant.

Nous obtenons une discipline de service située entre le statefull VC et le stateless VC, que nous appellerons reduced state VC puisqu'elle n'utilise qu'une quantité réduite d'état déjà disponible. La motivation derrière cette proposition est que cela devrait être efficace en cas de grumeaux sévères, donc limiter les effets dans les cas les plus graves. Ainsi, si des violations de garanties ont lieu du fait d'une gigue excessive, c'est qu'il y a une augmentation significative de la contention. Intuitivement, il est clair que dans cette situation la probabilité du cas (2) augmente alors que celle du cas (3) diminue.

5.4.6  L'architecture proposée

Comme au chapitre 4, nous considérons un ensemble de réseaux dans lesquels le modèle IntServ/RSVP est déployé, interconnectés par un backbone utilisant des ordonnanceurs sans état par flot. Nous nous intéressons uniquement au cas des flots GS, les flots CL étant par exemple traités par des mécanismes du type SRP [FALB98]. Les flots GS sont donc lissés à leur débit réservé R à l'entrée du backbone, par les noeuds ingress qui placent également la valeur de R dans un champ de l'en-tête du paquet. L'opération inverse est réalisée à la sortie par le routeur egress (figure 5.5). Un contrôle d'admission par flot est réalisé de façon à limiter la charge en flots GS à une valeur fixée, par exemple 80 % de la capacité sur chaque lien.

figure=fig/ch5arch.eps,width=12cm

Figure 5.5 : Architecture de la solution


Dans les noeuds internes, tous les flots autres que GS sont traités en priorité inférieure (plusieurs niveaux de priorité ou tout autre mécanisme peuvent être utilisés, par exemple pour séparer trafic best-effort et flots CL).

  Statefull VC Reduced state VC Stateless VC
1 Ri ¬ état du flot Ri ¬ paquet Ri ¬ paquet
  Fik-1 ¬ état du flot Fik-1 ¬ file si Aik < fik-1  
2 Fik = max(Aik, Fik-1) + Lik/Ri Fik = Aik+Lik/Ri si Aik ³ fik-1 Fik = Aik + Lik/Ri
    Fik = Fik-1 + Lik/Ri si Aik < fik-1  
3 insertion du paquet dans la file
4 état du flot ¬ Fik    

Table 5.2 : Les trois algorithmes VC


Nous résumons les différences des deux variantes scalable de l'algorithme virtual clock avec la version complète (statefull) dans le tableau 5.2.

5.5  Simulations

5.5.1  Scénario

Le scénario de nos simulations est représenté sur la figure 5.6. Nous considérons un ensemble de flots de référence (sur lesquels nous effectuerons des mesures) traversant un certain nombre de noeuds dans un backbone et demandant des garanties de délai. L'ordonnanceur utilisé dans les noeuds est une des trois variantes stateful/stateless/reduced state VC. À chaque noeud, des flots parasites viennent partager la bande passante du lien aval avec les flots de référence. Ces flots parasites sont supposés avoir déjà traversé un certain nombre de noeuds implémentant le stateless/reduced state VC et présentent donc des grumeaux susceptibles de perturber le service dû aux flots de référence.

Tous les flots (sauf un de référence et un parasite à chaque noeud) sont à débit constant (on suppose qu'ils ont été lissés à l'entrée du backbone) et ont des ressources réservées dans les ordonnanceurs. Les flots restant (un flot de référence et un parasite à chaque noeud) sont des flots best-effort et émettent à un débit élevé, déterminé de façon à toujours obtenir une utilisation maximale du réseau.

Dans nos simulations, nous faisons varier le nombre de noeuds -- nbcore --, les caractéristiques des flots parasites (taille -- grum -- et type des grumeaux) et la charge en flots demandant des garanties de délai. Plus exactement, c'est la capacité des liens que nous faisons varier.

figure=fig/simuls.eps,width=15cm

Figure 5.6 : Topologie simulée


Pour chaque valeur des paramètres, nous comparons les résultats obtenus avec les trois variantes de l'ordonnanceur. Pour toutes les simulations il y a 10 flots parasites à chaque noeud et 10 flots de référence. Nous avons choisi un nombre réduit de flots pour des raisons pratiques de mise en place et de temps de simulation. Cela n'est pas un problème dans la mesure où nous ne cherchons pas à montrer la scalabilité de notre solution (elle l'est car elle ne nécessite pas la gestion d'états par flot), mais plutôt à évaluer la qualité du service fourni par rapport à un modèle utilisant des états par flot.

Tous les flots ont une taille de paquet identique et égale à 1000 octets, sauf un des flots de référence qui émet des paquets de 500 octets (ce qui implique une garantie de délai plus faible). Nous effectuerons les mesures sur deux des flots de référence, le flot 1 (paquets de 1000 octets) et le flot 3 (paquets de 500 octets).

5.5.2  Réalisation

Nous utilisons le simulateur ns-2 [FVE99] développé au Lawrence Berkeley National Laboratory de l'Université de Californie à Berkeley. Celui-ci n'offre pas d'ordonnanceur Virtual Clock en standard, mais une implémentation en a été réalisée pour une ancienne version de ns par Markus A. Wischy à l'Université de l'Orégon [Wis98]. Nous avons porté cette implémentation sur la dernière version de ns et l'avons modifée de façon à obtenir un comportement soit en VC classique soit l'une de nos deux variantes sans état.

Il nous fallait ensuite générer du trafic présentant des grumeaux de façon paramétrable pour les flots parasites. Nous avons utilisé deux méthodes. Pour la première, nous avons modifié le générateur de trafic à débit constant de ns (Application/Traffic/CBR) pour obtenir de grandes variations du temps inter paquets. Ainsi modifiée la source CBR génère aléatoirement des grumeaux de taille variable. Le trafic obtenu est ensuite conditionné par un régulateur utilisant un seau de jetons (token bucket filter, TBF) de façon à limiter la taille maximum de grumeaux à la valeur désirée.

Nous avons aussi voulu observer le comportement du système dans le cas pire, c'est à dire avec des flots parasites exhibant systématiquement des grumeaux de taille fixée. Pour cela, un altérateur de trafic Clumper a été défini pour modifier le trafic généré par les sources CBR. Son fonctionnement est très simple, il retient simplement les paquets qu'il reçoit dans une file d'attente jusqu'à ce que la file atteigne une taille configurée, il émet alors tous les paquets en attente dans la file.

Nous appellerons les grumeaux générés de cette façon des grumeaux lourds (car très sévères) et ceux générés avec la première méthode des grumeaux légers. Ceux-ci correspondent à des situations plus réalistes, alors que les grumeaux lourds peuvent nous fournir des indications sur le comportement de l'algorithme en situation extrême et donc nous aider à comprendre son fonctionnement. Les caractéristiques de ces deux types de trafics parasites sont décrits dans la section suivante.

5.5.3  Caractérisation des flots parasites

Nous proposons d'utiliser comme méthode de caractérisation d'un flot parasite la représentation graphique de la distribution des temps inter paquets de ce flot. Pour cela nous prenons un groupe de deux cents paquets consécutifs du flot, calculons les temps inter paquets que nous trions et divisons par le temps nominal afin de normaliser les valeurs. Nous traçons la courbe obtenue.

Ainsi, un flot à débit constant parfait aura une caractérisation correspondant à une ligne horizontale d'ordonnée un (équation y=1). La figure 5.7 montre les courbes obtenues dans le cas des grumeaux légers pour différentes configurations du régulateur.

figure=graphs/gm_parasit.eps,width=7cm, angle=-90

Figure 5.7 : Caractérisation du trafic parasite (grumeaux légers)


Si aucun seau de jetons ne conditionne le trafic généré par la source CBR modifiée, le temps inter paquets est réparti uniformément entre 0 secondes et deux fois le temps nominal. On obtient donc un segment de droite variant entre y=0 et y=2. Quand un seau de jetons vient limiter la taille de rafale (donc la taille des grumeaux), une partie des paquets est contrainte au débit nominal (lissage) ce qui apparaît graphiquement comme un segment de droite central sur (y=1), dont la longueur est inversement liée à la profondeur du seau de jetons utilisé.

(a) source CBR ``pure''
  
(b) source CBR modifiée

Figure 5.8 : Caractérisation du trafic parasite (grumeaux lourds)


La figure 5.8 montre les caractérisations obtenues pour les grumeaux lourds. La sous figure 5.8(a) représente le cas où le clumper est appliqué au trafic issu d'une source CBR parfaite. On voit, ce qui correspond tout à fait à l'intuition, que si les grumeaux formés sont de taille 2, la moitié des paquets a un temps inter paquets nul, et l'autre moitié un temps double de la normale. Le même raisonnement s'applique pour toutes les tailles de grumeaux.

La sous figure de droite 5.8(b) correspond au cas où le clumper est appliqué au trafic issu d'une source CBR modifiée, dont la répartition des temps inter paquets est uniforme dans l'intervalle compris entre zéro et deux fois le temps nominal. C'est le cas que nous avons utilisé dans nos simulations.

Dans tous les cas, il nous paraît clair que l'effet du trafic parasite sur le comportement de l'ordonnanceur sans état dépendra de son agressivité qui correspond graphiquement à la partie de la courbe située sous la droite (y=1).

5.5.4  Mesures

Le but des simulations est de déterminer dans quelles conditions nos deux variantes du Virtual Clock, stateless VC et reduced state VC ont un comportement (et fournissent des garanties) identique ou très proche de celui de l'ordonnanceur de référence, le statefull VC.

Pour chaque configuration de simulation, nous mesurons :
  1. les délais maximaux,
  2. la caractérisation du trafic en sortie, telle que définie en 5.5.3.
Les délais permettront d'évaluer le comportement de l'ordonnanceur tandis que la caractérisation du trafic permettra de vérifier la validité du modèle de trafic utilisé pour les flots parasites.

Déviation de délai

Nous ne voulons pas mesurer le délai fourni par chacune des variantes mais plutôt la différence par rapport au délai de référence. Nous définissons donc le sur-délai dans un contexte donné comme étant le rapport du délai fourni par l'ordonnanceur sans ou avec peu d'états sur le délai fourni par l'ordonnanceur de référence. Toutes les courbes de sur-délai présentées dans la suite sont celles du flot 1, les courbes sont globalement similaires pour le flot 3.

(a) Grumeaux légers
  
(b) Grumeaux lourds
(c) Grumeaux légers -- stateless
(d) Grumeaux légers -- reduced state

Figure 5.9 : Sur-délai vs charge


Les figures 5.9(a) à (d) montrent le sur-délai de chacune des deux variantes en fonction de la charge pour les deux types de grumeaux pour différentes configurations. Dans les figures (a) et (b), le nombre de noeuds traversés est fixé à 6. La première montre très nettement que le sur-délai reste très faible tant que la charge est inférieure à 95 %, ce qui nous paraît un résultat extrêmement positif. Dans la deuxième, l'effet des grumeaux lourds se fait plus sentir et le sur-délai augmente progressivement avec la charge. Nous expliquons l'aspect de la courbe du reduced state VC plus bas, en commentant la figure 5.11. Les figures (a) et (b) correspondant à des tailles de grumeaux limitées à trois, nous montrons avec les figures (c) et (d) l'influence de cette limitation. Celle-ci ne devient sensible que quand la charge approche de très près les 100 %. On note tout particulièrement que pour le cas pire où les grumeaux ne sont pas contraints (noté ``infini'') les courbes restent dans le même ordre de grandeur.

Les figures 5.10 et 5.11 montrent le sur-délai en fonction de la taille des grumeaux des flots parasites pour différentes valeurs de la charge (le nombre de noeuds traversés est toujours fixé à 6). On voit sur la figure 5.10 qu'avec une charge de 100 %, le sur-délai augmente nettement avec la taille des grumeaux. Deux résultats intéressants sont visibles sur cette figure. Premièrement, avec une charge maximale, l'ordonnanceur reduced state VC se comporte nettement mieux que le stateless VC, ce qui s'explique par le fait que la charge maximale résulte en une contention assez forte et que la situation (2) (décrite page ??) est assez fréquente. Deuxièmement, l'effet d'une réduction même minime de la charge est très important comme le montre la courbe correspondant à une charge de 98 %. Si la charge est réduite à 90 %, le sur-délai est extrêmement faible (moins de 5 et 7 % de délai ajouté) quelle que soit la taille des grumeaux. La différence entre les deux variantes est alors très légère mais visible.

figure=graphs/gm_ddd_vs_g.eps,width=7cm,angle=-90

Figure 5.10 : Sur-délai vs taille des grumeaux


La figure 5.11 montre les mêmes courbes dans le cas de grumeaux lourds. Nous constatons que l'impact des grumeaux est beaucoup plus important et que l'effet d'une diminution de charge est nettement moins visible.

figure=graphs/gd_ddd_vs_g.eps,width=7cm,angle=-90

Figure 5.11 : Sur-délai vs taille des grumeaux


Le reduced state VC fournit alors exactement le même délai que la référence. Cela s'explique par le fait que les paquets collés dans les grumeaux lourds créent systématiquement la situation (2).

La troisième paire de figures montre le sur-délai en fonction du nombre de noeuds traversés sous diverses charges. Dans le cas de grumeaux légers (figure 5.12), on retrouve à nouveau des sur-délais très faibles tant que la charge ne dépasse pas 90 % et un avantage significatif du reduced state VC quand la charge approche 100 %, toujours pour les mêmes raisons. L'effet d'une très légère diminution de charge est à nouveau très net. On constate également que le sur-délai est globalement indépendant du nombre de noeuds, c'est à dire que le délai absolu ajouté augmente proportionnellement au nombre de noeuds traversés. La figure 5.13 montre les mêmes résultats pour des grumeaux légers non contraints, avec simplement des valeurs de surdélai un peu plus élevées.

Dans le cas de grumeaux lourds (figure 5.14), on voit à nouveau que le reduced state VC devient équivalent à un statefull VC. Avec le stateless VC, le sur-délai reste significatif tant que la charge ne descend pas au dessous de 70 %.

figure=graphs/gm_ddd_vs_core.eps,width=7cm,angle=-90

Figure 5.12 : Sur-délai vs nbre de noeuds (grumeaux légers)



figure=graphs/gm_ddd_vs_core2.eps,width=7cm,angle=-90

Figure 5.13 : Sur-délai vs nbre de noeuds (grumeaux légers) -- cas pire



figure=graphs/gd_ddd_vs_core.eps,width=7cm,angle=-90

Figure 5.14 : Sur-délai vs nbre de noeuds (grumeaux lourds)


Caractérisation du trafic en sortie

Nous comparons maintenant la caractérisation des flots de référence en sortie du réseau avec celle des flots parasites dans le cas des grumeaux légers. Nous considérons que les résultats des simulations sont valables quand les flots de référence en sortie du réseau ne sont pas plus agressifs que les flots parasites.

figure=graphs/carac1.eps,width=7cm,angle=-90

Figure 5.15 : Caractérisation du flot 1


Une première remarque que l'on peut faire à partir des figures 5.15 et 5.16 est que les caractérisations des flots de référence en sortie et des flots parasites ont une allure assez proche, bien qu'un peu différente, les flots de référence montrant une caractérisation plus ``lisse''. Il ne sera donc pas toujours possible de juger de manière catégorique de l'agressivité comparée des deux caractérisations.

La figure 5.15 montre le cas du flot 1. On constate que dans tous les cas, et à charge maximale, le flot est assez peu agressif puisque le temps inter paquets minimal ne descend pas au dessous de la moitié du temps nominal. On voit très bien qu'il est nettement moins agressif qu'un flot parasite contraint à une taille de grumeaux de trois. On peut donc considérer que les résultats obtenus avec des grumeaux de taille trois ou supérieure sont valables. La comparaison avec la courbe parasite pour des grumeaux de taille deux est plus difficile.

(a) Charge de 100 %
  
(b) Charge de 94 %

Figure 5.16 : Caractérisation du flot 3


La figure 5.16 montre le cas du flot 3. L'impact que la traversée du réseau a eu sur sa caractérisation est nettement plus élevé que pour le flot 1 (le temps inter paquets minimal approche la valeur 0), ce que nous attribuons au fait que ses paquets sont de taille nettement inférieure (moitié) à celle des flots parasites. L'aspect plus ``saccadé'' peut s'expliquer de la même façon.

La figure 5.16(b) montre l'influence d'une diminution de la charge sur la caractérisation du flot 3. Avec une charge de 94 %, les flots parasites n'étant pas contraints, le flot est très clairement moins agressif qu'un trafic parasite avec des grumeaux de taille 3.

Ainsi, les résultats obtenus en terme de délai semblent être valables dans pratiquement n'importe quelles conditions si les tailles de paquets des flots parasites et de référence sont identiques. Dans le cas de tailles de paquets différentes, on obtient des résultats similaires avec une légère diminution de la charge.

Délais absolus

Il nous paraît intéressant de montrer que même dans les cas où l'ordonnanceur sans état fournit un délai sensiblement plus important que l'ordonnanceur de référence, cela n'entraîne pas forcément une violation des délais garantis aux flots.

(a) Statefull VC
  
(b) Stateless VC

Figure 5.17 : Délais absolus


Ainsi, la figure 5.17 montre les délais en fonction de la charge obtenus avec les ordonnanceurs statefull et stateless VC. Le délai garanti de manière déterministe est de 175 ms, et l'on constate que la plupart du temps les délais maximaux effectifs sont bien inférieurs, ce qui est un résultat connu.

Conclusion

Les résultats de nos simulations montrent que notre solution semble fonctionner correctement dès que l'on réduit légèrement la charge en flots à garanties de délai. Même avec des tailles de grumeaux élevées, le délai ajouté par rapport au modèle de référence est très faible dès que la charge ne dépasse pas 90 % pour des grumeaux légers, les plus réalistes.

On peut aussi prendre en compte le fait que le modèle de référence fournit toujours des délais nettement moins élevés que ceux qui sont garantis comme montré dans les courbes de la figure 5.17. Il peut donc être parfois tout à fait acceptable d'obtenir un sur-délai significatif.

La contrainte de devoir limiter la proportion de flots à garantie de délais ne nous semble pas gênante. La plupart des applications peuvent se satisfaire de garanties moins strictes et constitueront donc une part significative du trafic transporté par le réseau.

Enfin, même dans le cas d'un réseau qui ne transporterait que ce type de flots, le sur-dimensionnement nécessaire pour limiter la charge pourrait être très raisonnable. Ainsi, la figure 5.9(a) montre des courbes pratiquement plates jusqu'à 90 % de charge.

5.6  Comparaison avec DPS

Dans [SZ99], Stoica et Zhang obtiennent des délais déterministes en utilisant la technique DPS (Dynamic Packet State) ce qui rend leur solution supérieure à la notre sur le plan théorique. Cependant, la technique qu'ils utilisent pour obtenir ce résultat est beaucoup plus complexe et nécessite un supplément de traitement par paquet important.

Ils proposent d'utiliser un ordonnanceur CJVC (Core Jitter Virtual Clock). Il s'agit d'une version sans état de Jitter Virtual Clock, une variante non work-conserving de VC qui conserve la gigue entre les paquets. Comme il est impossible de réduire les variations sur le moment d'émission d'un paquet dans un noeud (L/R+Lmax/C), l'écart entre le moment effectif (fik) et le moment théorique d'émission (Fik) est stocké dans le paquet au moment de l'émission. Cette valeur qui représente ``l'avance'' prise par le paquet dans ce noeud est ajoutée dans le calcul du Fik au noeud suivant. La gigue est ainsi compensée à chaque noeud.

Le fait d'utiliser un algorithme qui conserve la gigue leur permet aussi de traiter le cas des paquets de tailles différentes. Il suffit pour cela de compenser l'avance éventuelle prise par un paquet sur son prédécesseur en ajoutant à chaque noeud un délai adéquat. Ce délai est calculé par le noeud ingress qui le place dans un champ d'en-tête du paquet.

Au niveau du plan de contrôle, ils proposent de n'utiliser des messages (non fiables) que pour ajouter des réservations, l'annulation étant prise en compte par une technique de mesure du débit réservée semblable à notre proposition, mais nettement plus complexe.

Notre solution est résolument plus simple et légère. Nous utilisons un ordonnanceur qui conserve le travail, simple à implémenter. Aucune modification particulière du contenu des champs d'en-tête des paquets n'est nécessaire à l'intérieur de la zone sans état. Enfin nous n'avons besoin que d'un champ d'en-tête pour stocker la valeur de Ri.

En conclusion, notre proposition est plus simple à implémenter, demande moins de puissance de traitement et nécessite moins de supplément d'en-tête dans les paquets. Par contre, les garanties ne sont pas assurées de manière déterministe. Notre approche est plus basée sur des hypothèses raisonnables et vérifiables en pratique sur la déformation du trafic (création de grumeaux) et son effet sur les garanties.

5.7  Conclusion du chapitre

Dans ce chapitre, nous avons proposé une architecture permettant de fournir des garanties de délai individuelles aux flots (avec donc une flexibilité maximale) sans nécessiter le maintien d'état pour chaque flot. Les contraintes de cette solution sont de lisser les flots à l'entrée du backbone et de limiter (de façon peu drastique) la capacité allouée aux flots demandant des garanties de délai.

Les outils analytiques ne pouvant nous donner que des résultats non significatifs, nous avons eu recours à la simulation pour obtenir des données plus utilisables. L'utilisation réelle de ce modèle nécessiterait sans doute une analyse plus poussée des phénomènes entrant en jeu, en particulier : De plus, dans le cas de la variante reduced state VC de l'ordonnanceur, il serait nécessaire d'évaluer la complexité liée à la gestion des états, et en particulier la taille maximale de la file de paquets.

Nous pensons néanmoins que nos simulations ont montré, comme c'était leur but, que l'approche était utilisable dans des conditions bien moins drastiques que celles données par les résultats théoriques. Elle peut donc être présentée comme une solution possible pour la fourniture de garanties de délai strictes dans des environnements à très grand nombre de flots.


1
Sous réserve que tous les flots aient émis au moins un paquet. Cela sera généralement le cas si l'intervalle de temps choisi est suffisament grand. Les routeurs de bordure (voir la section 5.4.6) peuvent éventuellement émettre un paquet pour les flots silencieux.
2
Le retard n'est pas nécessairement effectif puisqu'il s'agit d'une estampille destinée à arbitrer la contention.
3
Nous considérons qu'un paquet a été transmis/reçu quand son dernier bit a été transmis/reçu.

Précédent Remonter Suivant