• Aucun résultat trouvé

Équité d’accès aux ressources

2.3 Conclusion

3.1.1 Équité d’accès aux ressources

Avec les premiers systèmes à temps partagé sont venus les deux manières na-turelles de partager le processeur et les entrées/sorties : le round-robin et les files d’attente FCFS, First Come First Serve. Le round-robin, utilisé initia-lement pour le partage du temps processeur, maintient une liste cyclique des concurrents d’une ressource, et la parcourt de manière séquentielle, servant une requête de chacun, ou offrant un service exclusif pour un quantum de temps donné, tour à tour. Pour le réseau, c’est une approche FCFS qui a d’abord été retenue, afin de réduire les tâches algorithmiques et donc de maximiser l’effica-cité des noeuds réseau. Ces solutions ne sont cependant pas équitables, puisque

FCFS va offrir une bande passante directement liée à la fréquence des requêtes de chaque client, et que le round-robin va offrir plus de temps aux utilisateurs intensifs qu’à ceux qui rendent la main avant la fin de leur quantum.

Files d’attente équitables pour les noeuds réseau. La première expres-sion du besoin d’algorithmes d’équité des systèmes à base de files d’attente vient de Nagle [Nag87]. Nagle a au préalable montré que le modèle FCFS uti-lisé dans les routeurs pouvait causer une grande disparité dans l’attribution de la bande passante aux différentes sources, en fonction notamment de la taille et de la fréquence d’arrivée des paquets, dépendant elle-même de l’implémen-tation et de l’efficacité de la pile réseau de la source [Nag84]. Nagle a ainsi proposé d’adapter le round-robin naturel du CPU à la gestion des flux réseaux par les routeurs : chaque flux, identifié par le couple source/destination, utilise ainsi une file d’attente distincte de taille fixe, et le routeur transmet un paquet de chaque flux tour à tour.

Cette première solution a une faiblesse essentielle : la probable disparité dans la taille des paquets. En effet, pour deux sources concurrentes N1 et N2 envoyant respectivement des paquets de taille moyenne S1 et S2, la bande passante attribuée à N1 sera S1

S2 celle de N2, ce rapport n’étant borné que par celui entre les tailles extrêmes SMax/SMin. Cette solution a cependant permis la naissance des files d’attente équitables, ou fair queuing (FQ), propo-sées par Demers et al. [DKS89]. Afin de résoudre la faiblesse de l’algorithme de Nagle, Demers et al. proposent un algorithme théorique idéal qui fait un round-robin bit-à-bit et non paquet par paquet. De cette manière, chaque flux reçoit une bande passante équitable. Cet algorithme n’est cependant pas implé-mentable en pratique, et les auteurs proposent une approximation pratique par simulation : le routeur calcule, en fonction de la taille des paquets en attente, la date à laquelle chaque paquet aurait été transmis si l’algorithme théorique était exécuté, et utilise cette information afin d’insérer les paquets dans une file d’attente ordonnée par date de transmission estimée. Demers et al. soulignent également la possibilité d’ajouter un ratio arbitraire à chaque flux, lorsque cer-tains noeuds ont besoin d’une bande passante plus grande, permettant ainsi une équité pondérée, nommée Weighted Fair Queuing (WFQ).

FQ a cependant une complexité algorithmique non satisfaisante pour des noeuds comme les routeurs basés sur l’efficacité, à cause notamment du nombre de flux potentiellement infini. Diverses extensions ont ainsi été proposées afin d’approximer l’algorithme théorique idéal tout en ayant de meilleures propriétés d’implémentation. Les files d’attente équitables stochastiques (SFQ) [McK90] maintiennent un nombre de files restreint, et chaque flux est assigné à une file par hashage, d’où une complexité d’accès en O(1). L’équité des SFQ n’est donc pas garantie, mais se base sur la faible probabilité de plusieurs flux distincts à se retrouver simultanément dans la même file d’attente.

Shreedhar et Varghese ont également proposé une technique avec une com-plexité algorithmique en O(1), le Deficit Round Robin [SV95]. Leur technique se base sur les files d’attente stochastiques, mais ajoute au round-robin

em-ployé pour servir les différentes files la notion de déficit : lorsqu’une file n’a pas consommé toute sa bande passante allouée à un certain tour du round-robin car le prochain paquet à envoyer était trop gros, elle se voit attribuer un déficit, égal à la bande passante non consommée, qu’elle pourra utiliser dans ses prochains tours. Le Deficit Round Robin introduit ainsi notamment l’idée d’un ordonnancement basé sur les évènements passés, afin de viser une équité globale sur la durée, et non pas sur un seul tour du round-robin.

Transposition aux autres ressources. Ces algorithmes issus de la théorie des files d’attente se sont ensuite transposés naturellement à la gestion des ressources partagées dans un système. Linux implémente depuis 2004 et sa version 2.6.10 le Completely Fair Queuing (CFQ) pour la gestion des requêtes sur les périphériques à blocs comme les disques durs [Axb04]. CFQ est une adaptation directe de SFQ à la gestion des requêtes disque, avec un nombre de files fini (64 par défaut), ordonnancées en round-robin. Les requêtes de chaque processus sont insérées dans une file en fonction d’un hashage de leur PID.

Ces algorithmes ont aussi été adaptés à l’ordonnancement CPU. Le micro-noyau Fiasco.OC [LW09] permet par exemple l’utilisation de WFQ comme algorithme équitable permettant un partage pondéré du temps processeur. Li-nux implémente le Completely Fair Scheduling (CFS) pour son ordonnancement CPU [Pab09]. CFS se base sur un temps virtuel, commun à tous les processus du système, et ordonnance les processus en privilégiant ceux ayant le plus at-tendus le processeur par le passé. Contrairement au round-robin qui effectue ses décisions d’ordonnancement de manière périodique, CFS a besoin de maintenir une facturation à grain fin du temps virtuel consommé par chaque processus. Il doit notamment prendre en compte tous les évènements où un processus rend la main, que ce soit de manière explicite ou lors d’entrées/sorties par exemple. CFS ordonne la file d’attente des processus en fonction du temps pendant lequel ils auraient dû avoir le CPU avec un ordonnancement FQ idéal, permet-tant de choisir le processus qui a eu le moins de CPU dans les tours passés en O(1). CFS implique une très bonne réactivité pour les processus interactifs et utilisateurs d’entrées/sorties, faiblesse principale du round-robin. De la même manière, l’ordonnanceur à crédit de Xen garde en mémoire les déficits de temps de chaque machine virtuelle qui rend la main avant la fin de son quota de temps, afin de lui autoriser une consommation plus importante du CPU dans les tours futurs [CGV07]. Ces deux algorithmes sont donc des applications directes de FQ et du Deficit Round Robin au partage équitable du temps processeur. L’or-donnanceur à crédit de Xen maintient cependant une facturation qui n’évalue l’utilisation du CPU que de manière périodique, et non pas à grain fin comme CFS. Cet échantillonnage discret peut ainsi être exploité par un attaquant pour fausser la facturation et monopoliser le processeur [ZGDS11].

Répartition dynamique équitable. D’autres algorithmes efficaces adoptent une approche différente pour le partage équitable, notamment les ordonnance-ments loterie et pas à pas de Waldspurger [WW94]. L’ordonnancement loterie

se base sur une répartition statistique afin de garantir l’équité en nombre de requêtes traitées sur une période de temps donné. L’ordonnanceur distribue à chaque client potentiel un nombre de tickets égal au poids arbitraire attri-bué à chacun. Il sélectionne ensuite en boucle et de manière aléatoire un ticket gagnant, puis traite une requête du client concerné. Cette technique simple per-met de respecter naturellement la proportion de traitement des requêtes pour chaque client en compétition et de manière efficace. La répartition initiale des tickets et la période de renouvellement sont cependant difficiles à paramétrer de manière générique.

Le deuxième algorithme est l’allocation "pas à pas", où le système estime l’intervalle de temps virtuel, le pas, qu’un client doit attendre entre deux al-locations d’une ressource. Ce pas peut être finalement vu comme un poids d’utilisation pour chaque client, où le poids le plus faible est le plus prioritaire. Pour chaque client est maintenue une valeur d’utilisation, la passe, initialisée à son pas. A chaque allocation, le client avec la plus petite passe est servi, et sa passe est incrémentée par son pas. Cet algorithme, pouvant être considéré comme une amélioration algorithmique de WFQ, propose ainsi une allocation proportionnelle aux pas de chaque client, tout en gérant de manière dynamique le problème de priorité. Ces deux algorithmes partagent cependant la faiblesse de ne s’intéresser qu’à l’équité sur le nombre de requêtes, qui ne saurait être suffisante puisque indépendante de la taille des paquets ou des particularités de traitement de certaines requêtes par les périphériques.