J'ai lu l'original Document PostScript de SIGCOMM '97 sur HFSC, c'est très technique, mais je comprends le concept de base. Au lieu de donner une courbe de service linéaire (comme avec à peu près tous les autres algorithmes d'ordonnancement), vous pouvez spécifier une courbe de service convexe ou concave et il est donc possible de découpler la bande passante et le délai. Cependant, même si cet article mentionne les différents types d'algorithmes d'ordonnancement utilisés (temps réel et partage de liens), il ne mentionne toujours qu'UNE seule courbe par classe d'ordonnancement (le découplage se fait en spécifiant cette courbe, une seule courbe est nécessaire pour cela).
Maintenant, HFSC a été implémenté pour BSD (OpenBSD, FreeBSD, etc.) en utilisant la fonction Cadre d'ordonnancement ALTQ et il a été implémenté sous Linux en utilisant le Cadre d'ordonnancement des TC (partie de iproute2). Les deux implémentations ont ajouté deux courbes de service supplémentaires, qui étaient PAS dans le document original ! Une courbe de service en temps réel et une courbe de service de limite supérieure. Encore une fois, veuillez noter que l'article original mentionne deux algorithmes d'ordonnancement (temps réel et partage de liens), mais dans cet article, les deux fonctionnent avec une seule courbe de service. Il n'y a jamais eu deux courbes de service indépendantes pour l'un ou l'autre comme on le trouve actuellement dans BSD et Linux.
Pire encore, certaines versions d'ALTQ semblent ajouter une priorité de file d'attente supplémentaire à HSFC (la priorité n'existe pas non plus dans le document original). J'ai trouvé plusieurs HowTo BSD mentionnant ce paramètre de priorité (même si la page de manuel de la dernière version d'ALTQ ne connaît pas un tel paramètre pour HSFC, donc officiellement il n'existe même pas).
Tout cela rend l'ordonnancement HFSC encore plus complexe que l'algorithme décrit dans l'article original et il existe des tonnes de tutoriels sur Internet qui se contredisent souvent, l'un affirmant le contraire de l'autre. C'est probablement la principale raison pour laquelle personne ne semble vraiment comprendre comment fonctionne réellement l'ordonnancement HFSC. Avant de pouvoir poser mes questions, nous avons besoin d'une sorte d'exemple de configuration. J'en utiliserai une très simple, comme le montre l'image ci-dessous :
texte alternatif http://f.imagehost.org/0177/hfsc-test-setup.png
Voici quelques questions auxquelles je ne peux pas répondre car les tutoriels se contredisent :
-
Pourquoi ai-je besoin d'une courbe en temps réel ? En supposant que A1, A2, B1, B2 sont tous des liens partagés à 128 kbit/s (pas de courbe en temps réel pour l'un ou l'autre), alors chacun d'entre eux recevra 128 kbit/s si la racine a 512 kbit/s à distribuer (et A et B sont tous deux à 256 kbit/s bien sûr), n'est-ce pas ? Pourquoi donnerais-je en plus à A1 et B1 une courbe en temps réel avec 128 kbit/s ? À quoi cela servirait-il ? Pour donner à ces deux-là une plus grande priorité ? Selon l'article original, je peux leur donner une priorité plus élevée en utilisant une courbe de temps réel de 128 kbit/s. courbe C'est la raison d'être du HFSC après tout. En donnant aux deux classes une courbe de [256kbit/s 20ms 128kbit/s], elles ont automatiquement deux fois plus de priorité que A2 et B2 (qui ne reçoivent toujours que 128 kbit/s en moyenne).
-
La bande passante en temps réel est-elle prise en compte dans la bande passante de partage de lien ? Par exemple, si A1 et B1 ont tous deux une bande passante de 64kbit/s en temps réel et de 64kbit/s en partage de lien, cela signifie-t-il qu'une fois qu'ils sont servis à 64kbit/s en temps réel, leur besoin en partage de lien est également satisfait (ils peuvent obtenir une bande passante excédentaire, mais ignorons cela pour une seconde) ou cela signifie-t-il qu'ils obtiennent 64kbit/s supplémentaires en partage de lien ? Ainsi, chaque classe a une "exigence" de bande passante en temps réel plus le partage de lien ? Ou est-ce qu'une classe n'a un besoin plus élevé que la courbe en temps réel que si la courbe de partage de liens est plus élevée que la courbe en temps réel (le besoin actuel de partage de liens est égal au besoin de partage de liens spécifié moins la bande passante en temps réel déjà fournie à cette classe) ?
-
La courbe de limite supérieure s'applique-t-elle également au temps réel, uniquement au partage de liens, ou peut-être aux deux ? Certains tutoriels disent une chose, d'autres disent l'autre. Certains affirment même que la limite supérieure est le maximum de la bande passante en temps réel + la bande passante du partage de lien ? Quelle est la vérité ?
-
En supposant que A2 et B2 soient tous deux à 128 kbit/s, cela fait-il une différence si A1 et B1 sont à 128 kbit/s en partage de lien uniquement, ou à 64 kbit/s en temps réel et à 128 kbit/s en partage de lien, et si oui, quelle différence ?
-
Si j'utilise la courbe séparée en temps réel pour augmenter les priorités des classes, pourquoi aurais-je besoin de "courbes" ? Pourquoi le temps réel n'est-il pas une valeur plate et le partage de lien également une valeur plate ? Pourquoi les deux sont des courbes ? Le besoin de courbes est clair dans le document original, car il n'y a qu'un seul attribut de ce type par classe. Mais maintenant, avec trois attributs (temps réel, partage des liens et limite supérieure), pourquoi ai-je encore besoin de courbes pour chacun d'eux ? Pourquoi voudrais-je que les courbes forme (pas la bande passante moyenne, mais leurs pentes) à être différentes pour le trafic en temps réel et le trafic de partage de liens ?
-
D'après le peu de documentation disponible, les valeurs des courbes en temps réel sont totalement ignorées pour les classes internes (classe A et B), elles ne sont appliquées qu'aux classes de feuilles (A1, A2, B1, B2). Si c'est le cas, pourquoi la fonction Exemple de configuration de l'ALTQ HFSC (recherche de 3.3 Exemple de configuration ) fixe des courbes en temps réel sur les classes intérieures et prétend que celles-ci fixent le taux garanti de ces classes intérieures ? N'est-ce pas complètement inutile ? (note : pshare définit la courbe de partage de liens dans ALTQ et grate la courbe en temps réel ; vous pouvez le voir dans le paragraphe au-dessus de l'exemple de configuration).
-
Certains didacticiels disent que la somme de toutes les courbes en temps réel ne peut être supérieure à 80% de la vitesse de la ligne, d'autres disent qu'elle ne doit pas être supérieure à 70% de la vitesse de la ligne. Lequel des deux a raison ou les deux ont-ils tort ?
-
Un tutoriel a dit que vous devez oublier toute la théorie. Peu importe la façon dont les choses fonctionnent réellement (ordonnanceurs et distribution de la bande passante), imaginez les trois courbes selon le "modèle mental simplifié" suivant : le temps réel est la bande passante garantie que cette classe obtiendra toujours. le partage de liens est la bande passante que cette classe souhaite obtenir pour être pleinement satisfaite, mais la satisfaction ne peut être garantie. En cas d'excédent de bande passante, la classe peut même se voir offrir plus de bande passante que nécessaire pour être satisfaite, mais elle ne peut jamais utiliser plus que la limite supérieure. Pour que tout cela fonctionne, la somme de toutes les largeurs de bande en temps réel ne doit pas dépasser xx% de la vitesse de la ligne (voir question ci-dessus, le pourcentage varie). Question : Est-ce plus ou moins précis ou est-ce une incompréhension totale de HSFC ?
-
Et si l'hypothèse ci-dessus est vraiment exacte, où est la priorisation dans ce modèle ? Par exemple, chaque classe peut avoir une bande passante en temps réel (garantie), une bande passante de partage de lien (non garantie) et peut-être une limite supérieure, mais certaines classes ont des besoins plus prioritaires que d'autres. Dans ce cas, je dois quand même établir des priorités d'une manière ou d'une autre, même parmi le trafic en temps réel de ces classes. Est-ce que j'établirais les priorités en fonction de la pente des courbes ? Et si oui, quelle courbe ? La courbe en temps réel ? La courbe de partage de lien ? La courbe de limite supérieure ? Toutes ces courbes ? Dois-je leur donner à toutes la même pente ou à chacune une pente différente et comment trouver la bonne pente ?
Je n'ai toujours pas perdu l'espoir qu'il existe au moins une poignée de personnes dans ce monde qui ont vraiment compris le HFSC et sont capables de répondre à toutes ces questions avec précision. Et le faire sans se contredire dans les réponses serait vraiment bien ;-)