Nikita Veshchikov e-mail : [email protected] téléphone : 02/650.58.56 bureau : 2N8.213 URL : http://student.ulb.ac.be/~nveshchi/ INFO-F-404 : Techniques avancées de systèmes d’exploitation Table des matières 1 Rappel théorique 1 1.1 Hypothèses et classifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Algorithmes d’ordonnancement multiprocesseurs . . . . . . . . . . . . . . . . . . . . 2 1.3 Techniques par partitionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3.2 RM partitionné . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3.3 EDF partitionné . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 Techniques globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.4.1 Optimalité impossible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.4.2 Anomalies d’ordonnancement . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.4.3 Prédictabilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 EDF(k) 6 1.4.4 Les algorithmes global EDF et 2 Exercices . . . . . . . . . . . . . . . . . . . . . . 8 1 1 Rappel théorique 1.1 Hypothèses et classifications Dans ce TP, nous allons étudier l’ordonnancement temps réel sur des plates-formes multipro- cesseurs. La première question qui se pose est : “Quel est l’intérêt d’utiliser plusieurs processeurs au lieu d’un seul ?”. Il y a plusieurs réponses à cette question : 1. La raison principale est financière. Si nous pouvions obtenir une puissance de calcul équivalente à A à l’aide de deux processeurs de puissance deux processeurs de puissance A 2 A 2, alors il est moins coûteux d’acheter qu’un unique processeur de puissance A. 2. Utiliser une plate-forme multiprocesseur présente également un avantage sur le plan de la consommation énergétique. De nombreuses études montrent que l’énergie consommée par un processeur évolue de manière exponentielle par rapport à sa fréquence de fonctionnement, c’est-à-dire sa puissance de calcul. De ce fait, utiliser deux processeurs de puissance A 2 consomme moins d’énergie que d’utiliser un unique processeur de puissance A. 3. Un comportement similaire a été décelé entre la dissipation de chaleur des processeurs et leur fréquence de fonctionnement. En ce qui concerne la société Intel, c’est cette augmentation exponentielle de la dissipation de chaleur par rapport à la fréquence de fonctionnement qui est à l’origine de la conception des processeurs Dual-core au lieu du processeur Pentium 5. Nous distinguons trois types de plates-formes multiprocesseurs : 1. les plates-formes identiques : tous les processeurs de la plate-forme sont interchangeables et ont la même puissance de calcul. 2. les plates-formes uniformes : chaque processeur Pi possède sa propre puissance de calcul si et réalise (si × t) unités de travail lorsqu’il exécute un travail durant t unités de temps. 3. les plates-formes spécialisées : un taux ri,j est associé à chaque couple ( travail Ji , processeur Pj ) avec l’interprétation suivante : Pj réalise (ri,j × t) unités de travail lorsqu’il exécute le travail Ji durant t unités de temps. Remarque : Nous avons la relation suivante entre ces différentes architectures : plates-formes identiques ⊂ plates-formes uniformes ⊂ plates-formes spécialisées. 2 Dans le cadre de ce cours, nous considérons des systèmes fortement couplés, c’est-à-dire que tous les processeurs de la plate-forme possèdent une base commune du temps et une mémoire commune. Dans la suite, nous considérerons des plates-formes identiques composées de m processeurs P1 , P2 , . . ., Pm . 1.2 Algorithmes d’ordonnancement multiprocesseurs On distingue deux types d’approche pour l’ordonnancement multiprocesseur : 1. L’ordonnancement par partitionnement. L’ensemble des n tâches est divisé en m sousensembles disjoints : τ 1 , τ 2 , . . . , τ m . Chaque sous-ensemble τ i est ensuite ordonnancé sur le processeur Pi avec une stratégie d’ordonnancement locale monoprocesseur (tel que RM, DM, EDF, etc). Lors de l’ordonnancement, les tâches appartenant à la partition τ i ne sont jamais autorisées à être exécutée sur un autre processeur que Pi . Avec ce type d’ordonnanceur, chaque processeur Pi possède sa propre file d’attente (sa propre Ready-queue) qui contient à tout moment les travaux actifs de τ i . 2. L’ordonnancement global. Il s’agit d’appliquer globalement une stratégie d’ordonnancement sur l’entièreté de la plate-forme multiprocesseur et d’attribuer à chaque instant les m processeurs aux m tâches/travaux les plus prioritaires. Dans ce cas, outre la préemption des tâches, on autorise aussi la migration de ces dernières ; c’est-à-dire qu’une tâche peut commencer son exécution sur un processeur Pi , être préemptée et reprendre son exécution ultérieurement sur un autre processeur (disons Pj ). Avec ce type d’ordonnanceur, il n’y a qu’une seule file d’attente commune à tous les processeurs. Remarque : Ces deux types d’ordonnancement sont incomparables, c’est-à-dire qu’il existe des systèmes ordonnançables avec un partitionnement et pour lesquels toute approche globale échoue, et réciproquement il existe des systèmes ordonnançables avec une approche globale et pour lesquels tout partitionnement échoue. 1.3 Techniques par partitionnement 1.3.1 Introduction Le problème de partitionnement est un problème mieux connu sous le nom de Bin Packing qui consiste à placer dans m boîtes de tailles identiques, n objets de tailles différentes. Ici, les boîtes sont les processeurs et les objets sont les tâches. Pour les systèmes périodiques à échéance sur requête, la taille des objets (des tâches) est leur facteur d’utilisation et la taille des boîtes (des processeurs) est l’utilisation maximale que l’on peut atteindre (ln 2 pour RM et 1 pour EDF). Ce 3 problème de Bin Packing est NP-Hard et on utilise dès lors des heuristiques telles que next-fit, best-fit, etc. afin d’approcher la solution optimale. 1.3.2 RM partitionné Pour créer un partitionnement 1 τ , . . . , τ m qui permette à l’algorithme RM d’ordonnancer localement ces partitions sur chaque processeur Pi ∈ {P1 , . . . , Pm }, on peut utiliser n’importe quelles heuristiques citées plus haut. Il suffit d’utiliser la condition suffisante Utot (τ i ) < ni · (21/ni − 1) afin de vérifier l’ordonnançabilité des tâches de chaque partition τ i par RM (ni dénote le nombre de tâches appartenant à la partition τ i et assignées au processeur Pi ). Il est cependant possible de démontrer qu’en utilisant cette borne, on ne peut pas garantir la faisabilité d’un système dont √ le facteur d’utilisation est supérieur à 2 − 1 ≈ 41% (cf. cours). Cette borne est très contraignante car elle ne fournit aucun résultat pour un grand nombre de systèmes. 1.3.3 EDF partitionné En ce qui concerne EDF, nous savons que Utot (τ i ) ≤ 1 est une condition nécessaire et suf fisante pour chaque partition τ i . Pour créer un partitionnement τ 1 , . . . , τ m qui respecte cette condition, Lopez et al. ont développé l’algorithme FFDU (First-Fit-Decreasing-Utilization). Le principe est le suivant : on choisit à chaque étape la première boîte (c’est-à-dire le premier processeur) qui convient en considérant les tâches par valeurs décroissantes du facteur d’utilisation. Ces mêmes chercheurs ont ensuite démontré la condition suffisante d’ordonnançabilité suivante. Theorem 1 (FFDU, EDF utilisation). Soit τ un système périodique à échéance sur requête. Ce système est ordonnançable par l’une des partitions FFDU (et EDF localement sur chaque processeur) si : Utot (τ ) < 1.4 (m + 1) et Umax (τ ) ≤ 1 2 (1) Techniques globales En ce qui concerne les stratégies d’ordonnancement globales, il existe deux résultats (très) négatifs qui sont repris ci-dessous. Heureusement, il existe également certain résultats positifs. 1.4.1 Optimalité impossible Definition 1 (Algorithmes en ligne). Les algorithmes d’ordonnancement en ligne prennent leur décision à chaque instant sur base des caractéristiques des travaux qui sont actifs, sans connais4 sance des travaux qui arriveront dans le futur. Theorem 2. Pour tout m > 1, aucun algorithme d’ordonnancement en ligne et optimal ne peut exister pour des systèmes avec deux ou plus d’échéances distinctes. F IGURE 1 – Optimalité impossible Démonstration. La démonstration se fait pour m = 2 mais il est facile de constater que la preuve reste valable pour m > 2. Supposons qu’il existe un algorithme d’ordonnancement en ligne optimal pour deux processeurs et considérons le scénario suivant. A l’instant 0, trois travaux J1 , J2 et J3 arrivent avec J1 = (e1 : 2, d1 : 4), J2 = (e2 : 2, d2 : 4) et J3 = (e3 : 4, d3 : 8). Notre ordonnanceur optimal n’a que deux choix possibles : il exécute J3 dans l’intervalle de temps [0, 2] ou pas. 1. J3 ne s’exécute pas dans l’intervalle de temps [0, 2] (cf. Figure 1, partie supérieure gauche). Dans ce cas, à l’instant 4, J3 s’est exécuté pour au plus 2 unités. Donc, à l’instant 4, le temps de calcul restant de J3 est au moins de deux unités. A présent, supposons que J4 = (e4 : 4, d4 : 8) et J5 (e5 : 4, d5 : 8) arrivent dans le système. Notre ordonnanceur n’a pas d’autres choix que d’exécuter J4 et J5 dès l’instant 4 afin de respecter leur échéance. De cette façon, J3 manquera obligatoirement son échéance à l’instant 8 et on voit qu’il aurait fallu commencer par exécuter J3 dès l’instant 0 (cf. Figure 1, partie supérieure droite), ce qui nous conduit au second scénario. 2. J3 s’exécute dans l’intervalle de temps [0, 2] (cf. Figure 1, partie inférieure gauche). Dans ce cas, au moins l’un des deux travaux J1 ou J2 n’a pas terminé son exécution à l’instant 2. Puisque J1 et J2 sont identiques, supposons que c’est J2 qui n’a pas terminé à l’instant 2. A présent, considérons le scénario où J4 = (e4 : 2, d4 : 4) et J5 = (e5 : 2, d5 : 4) arrivent à l’instant 2. Notre ordonnanceur n’a pas d’autres choix que d’exécuter J4 et J5 dès l’instant 2 afin de respecter leur échéance. Clairement, J2 ne rencontrera pas son échéance à l’instant 4 et on voit qu’il aurait fallu commencer par exécuter J2 à l’instant 0, ce qui nous ramène au premier scénario. 5 1.4.2 Anomalies d’ordonnancement Definition 2 (Anomalie). Nous disons qu’un algorithme d’ordonnancement souffre d’anomalies si un changement qui est intuitivement positif dans un système ordonnançable peut le rendre non ordonnançable. Nous entendons par “changement intuitivement positif” tout changement qui est sensé alléger la charge du système (comme par exemple réduire le facteur d’utilisation d’une tâche ou encore rajouter un processeur à la plate-forme). Attention : Les algorithmes d’ordonnancement multiprocesseurs sont sujet à des anomalies. Theorem 3. Le cas périodique synchrone ne correspond pas au pire cas pour les systèmes de tâches sporadiques en ordonnancement multiprocesseur. Démonstration. Soit le système de tâches sporadiques τ = {(1, 1, 2), (1, 1, 3), (5, 6, 6)}. L’instance particulière de τ à démarrage synchrone ayant une activation de tous les jobs dès que possible est ordonnançable sur m = 2 processeurs en assignant les priorités les plus élevées aux tâches τ1 et τ2 . Une autre instance de τ où l’activation de la seconde instance de τ1 est retardée d’une unité de temps est quant à elle malheureusement non ordonnançable, par inspection. Par conséquent, il n’est pas possible de considérer le cas périodique synchrone comme étant le pire case pour les systèmes de tâches sporadiques en ordonnancement multiprocesseur. Actuellement, le pire cas (en terme de temps de réponse) est inconnu pour l’étude des tâches sporadiques. 1.4.3 Prédictabilité Nous venons de constater que nous ne disposons pas de la notion de pire cas en ce qui concerne les tâches sporadiques. En revanche, les algorithmes d’ordonnancement pour les tâches périodiques/sporadiques sont en général prédictibles. Definition 3 (Prédictabilité). Soit J = {J1 , . . . , J` } un ensemble de travaux avec Ji = (oi , ei , di ). Soit S(Ji ) l’instant auquel Ji débute son exécution dans un ordonnancement et, de manière similaire, soit F (Ji ) l’instant auquel Ji termine son exécution dans un ordonnancement. Soit J 0 = {J10 , . . . , J`0 } un ensemble de travaux dérivé de J tel que Ji0 = (oi , e0i , di ) et e0i ≤ ei , ∀i. Un algorithme d’ordonnancement A est prédictible si et seulement si on a S(Ji0 ) ≤ S(Ji ) et F (Ji0 ) ≤ F (Ji ), ∀i (1 ≤ i ≤ `), ∀J et ∀J 0 (tel que défini précédemment). Cette définition introduit le fait que, pour un ordonnanceur prédictible, il est possible de déterminer une borne supérieure sur les temps de réponse des travaux en analysant la situation sous l’hypothèse que chaque travail prend son pire temps d’exécution pour se terminer. Le caractère 6 prédictible des algorithmes d’ordonnancement est important car il permet de vérifier l’ordonnançabilité en se focalisant uniquement sur les pire temps d’exécution des travaux/tâches et non sur les durée d’exécution exactes. Lemme 1. Tous les ordonnanceurs préemptifs, conservatifs et à priorité fixe au niveau des travaux sont prédictibles lorsqu’ils sont utilisés sur des plates-formes identiques. Remarque : Les algorithmes non préemptifs sont en général non prédictibles. 1.4.4 Les algorithmes global EDF et EDF(k) Voici un résultat préliminaire qui concerne l’algorithme “global EDF” : Theorem 4. Pour un ensemble sporadique à échéance sur requête, la condition suivante est suffisante pour l’ordonnançabilité sur m processeurs identiques avec “global EDF”. Utot (τ ) ≤ m − (m − 1) · Umax ce qui peut se réécrire : Utot (τ ) − Umax (τ ) m≥ 1 − Umax (τ ) (2) Malheureusement, lorsque Umax se rapproche de l’unité, le nombre m de processeurs nécessaires obtenu par cette expression tend vers l’infini. Cependant, nous savons qu’un système est faisable (pour autant que Ci ≤ Di ∀τi ) si le nombre de processeurs est égale au nombre de tâches. Nous avons donc : Utot (τ ) − Umax (τ ) m ≥ min n, 1 − Umax (τ ) Lorsque le système considéré n’est composé que d’une unique tâche, on a Utot (τ ) = Umax (τ ) et l’expression ci-dessus devient m ≥ 0. Il est évident que pour n’importe quel système, il doit toujours y avoir au moins un processeur et donc : Utot (τ ) − Umax (τ ) m ≥ max 1, min n, 1 − Umax (τ ) Les deux dernières remarques étant évidentes, nous ne considérerons par la suite que l’expression 2. Dans cette section, nous allons voir une variante de l’algorithme global EDF que nous appelons EDF(k) . Cette variante va notamment permettre de réduire l’Expression 2. Voici les notations que nous allons utiliser : 1. Nous supposons que les tâches sont indexées de telle sorte que U (τ1 ) ≥ U (τ2 ) ≥ . . . ≥ U (τn ). 7 2. Nous notons par τ (i) le système constitué des (n − i + 1) tâches avec les plus petites utilisations de τ : τ (i) = {τi , τi+1 , . . . , τn } Voici le fonctionnement de EDF(k) : Pour toute tâche τi avec i < k : EDF(k) attribue à τi la plus grande priorité (il suffit de fixer son échéance à −∞). Pour toute tâche τi avec i ≥ k : EDF(k) attribue la priorité de manière similaire à EDF. Theorem 5. Un système sporadique à échéance sur requête τ est ordonnançable sur m processeurs identiques par l’algorithme EDF(k) , avec & U (τ (k+1) ) m = (k − 1) + 1 − U (τk ) ' Theorem 6. Un système sporadique à échéance sur requête τ est ordonnançable sur mmin processeurs identiques par l’algorithme EDF(`) , avec mmin ( & U (τ (k+1) ) = min (k − 1) + k=1 1 − U (τk ) n où ` est la valeur de k qui minimise l’expression (k − 1) + 2 l ') U (τ (k+1) ) 1−U (τk ) (3) m . Exercices Exercice 1 : l’algorithme RM global et partitionné a) Trouver un système qui soit ordonnançable par RM global et pas par RM partitionné. b) Trouver un système qui soit ordonnançable par RM partitionné et pas par RM global. Exercice 2 : l’algorithme EDF partitionné Soit le système temps réel donné à la Table 1. Les tâches sont périodiques, à départ simultané et à échéance sur requête. Nous supposons qu’elles sont indépendantes entre elles et qu’elles sont préemptives. Nous supposons également que nous disposons d’une plate-forme composé de 3 processeurs identiques. 8 Task index Tâche τ1 Tâche τ2 Tâche τ3 Tâche τ4 Tâche τ5 Tâche τ6 Tâche τ7 Tâche τ8 WCET 10 30 10 50 20 50 250 10 Deadline = Period 50 120 100 200 100 200 300 200 TABLE 1 – Système temps réel composé de 8 tâches périodiques à départ simultané et à échéance sur requête. a) Que nous dit l’expression 1 quant à la répartition des tâches par FFDU ? b) Construisez un partitionnement par l’algorithme FFDU. Exercice 3 : l’algorithme EDF(k) Soit le système temps réel donné à la Table 2. Les tâches sont périodiques, à départ simultané et à échéance sur requête. Nous supposons qu’elles sont indépendantes entre elles et qu’elles sont préemptives. Task index Tâche τ1 Tâche τ2 Tâche τ3 Tâche τ4 Tâche τ5 WCET 14 1 2 1 1 Deadline = Period 19 3 7 5 10 TABLE 2 – Système temps réel composé de 5 tâches périodiques à départ simultané et à échéance sur requête. a) Déterminez le nombre de processeurs à utiliser si on emploie l’algorithme global EDF pour ordonnancer le système. b) Déterminez le nombre de processeurs (et donc la valeur optimale de k) à utiliser si on emploie l’algorithme EDF(k) pour ordonnancer le système. 9