0% ont trouvé ce document utile (0 vote)
144 vues38 pages

Limitations de l'ordonnancement en ligne

Transféré par

Mohamed Es-Sedraty
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
144 vues38 pages

Limitations de l'ordonnancement en ligne

Transféré par

Mohamed Es-Sedraty
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

3- Programmes temps réel

3.4- Limitations de l’ordonnancement en ligne

3.4- Limitations de l’ordonnancement en ligne


3- Programmes temps réel
3.4- Limitations de l’ordonnancement en ligne

Ordonnancement en ligne vs hors-ligne

Ordonnancement hors ligne


� Généralement pour ordonnancement contrôlé par le temps, temps réel dur
� Peut générer des cédules complexes, avec optimisation sophistiquée et exigeante en calcul
� Exige de connaître à l’avance toutes les tâches et leurs contraintes
� Manque manifeste de flexibilité
� Ne gère pas situations où nouvelle tâche imprévue doit être créée
� Ajustements difficiles face aux variations du déroulement
Ordonnancement en ligne
� Décisions prises sans connaître tâches futures
� Prise de décisions myope
� Ne fait pas nécessairement le meilleur usage des ressources
� Utilisé pour ordonnancement contrôlé par les évènements, souvent pour temps réel doux
� Seule option possible lorsque charge de travail future n’est pas prévisible
� Gère bien les variabilités dans le déroulement des opérations
� Algorithmes utilisés usuellement sont assez légers en traitement
3- Programmes temps réel
3.4- Limitations de l’ordonnancement en ligne

Exemples d’anomalies

Exemple illustrant anomalies avec ordonnancement en ligne


� Deux processeurs
� Tâches peuvent être assignées à n’importe quel processeur
� Tâches préemptibles
� Une fois assignées, tâches ne migrent pas (système statique)
� Tâche de durée déterminée, sauf J2 avec temps d’exécution variant entre 2 et 6
ri di ei
J1 0 10 5
J2 0 10 [2, 6]
J3 4 15 8
J4 0 20 10
3- Programmes temps réel
3.4- Limitations de l’ordonnancement en ligne

Exemples d’anomalies

Pour J2 = 6, ordonnancement optimal

Pour J2 = 2, ordonnancement sous-optimal


� Tâche J3 arrive après lancement de J4

Inspiré de Jane W.S. Liu. Real-time systems. Prentice-Hall, 2000.


3- Programmes temps réel
3.4- Limitations de l’ordonnancement en ligne

Exemples d’anomalies

Pour J2 = 3, ordonnancement toujours sous-optimal

Pour J2 = 5, ordonnancement optimal

Tiré de Jane W.S. Liu. Real-time systems. Prentice-Hall, 2000.

Pour identifier pire et meilleur cas, simulations exhaustives nécessaires


3- Programmes temps réel
3.4- Limitations de l’ordonnancement en ligne

Manquement des échéances


Parfois, on peut manquer l’échéance d’une tâche
� Temps réel dur : impact peut être catastrophique (ex. centrale nucléaire, cardiostimu-
lateur)
� Temps réel doux : impact moins important (ex. manquement frame video)
Valeur d’une tâche lorsque échéance est manquée dépend de l’application et du
retard encouru

Tiré de Jane W.S. Liu. Real-time systems. Prentice-Hall, 2000.


3- Programmes temps réel
3.4- Limitations de l’ordonnancement en ligne

Gérer manquement des échéances

Quoi faire lors de manquement d’échéance ?


� Arrêter la tâche pour laquelle il y a manquement
� Tâche courante n’a pas ou peu de valeur (ex. frame vidéo)
� Reprendre le contrôle pour poursuivre l’exécution
� Laisser la tâche se compléter avant de lancer la prochaine
� Tâche courante a une certaine valeur
� Tâches suivantes dépendent de la tâche actuelle
� Risque de perte de contrôle par effet domino
� Ne pas lancer la prochaine itération de la tâche
� Pertinence limitée, seulement pour certains contextes spécifiques de tâches périodiques
3- Programmes temps réel
3.4- Limitations de l’ordonnancement en ligne

Utilisation des tâches

Utilisation
� Utilisation ui d’une tâche temps réel périodique :
ei
i u =pi
� ei : durée d’exécution de la tâche i (valeur maximale possible, pire cas)
� pi : période d’exécution de la tâche i , c’est-à-dire délai minimum entre deux lancements
� Utilisation totale :
U= ui

� Supposons M, le nombre de processeurs


� Si U > M, il n’existe pas de cédule faisable, qui respecte toutes les échéances
� Si U < M, il existe une cédule faisable (assumant préemption et migration)
3- Programmes temps réel
3.4- Limitations de l’ordonnancement en ligne

Densité des tâches


Densité d’une tâche :
ei
ρi =
Δi − p i
� Δi = di − ri : échéance relative d’une tâche (différence en échéance absolue et temps
de lancement)
Densité de toutes les tâches :
ρ=

ρi
i
Pour un processeur (M = 1), cédule faisable si ρ ≤ 1
� EDF est capable trouver une telle cédule
� Condition suffisante mais non nécessaire, il peut exister des cédules faisables avec ρ > 1
Pour plus d’un processeur (M > 1)
� Si Δi = pi , une condition suffisante est :
ei
ρ ≤ M − (M − 1)Umax , oùUmax = max
i pi
3- Programmes temps réel
3.5- Tâches périodiques, apériodiques et sporadiques

3.5- Tâches périodiques, apériodiques et sporadiques


3- Programmes temps réel
3.5- Tâches périodiques, apériodiques et sporadiques

Acceptation de tâches apériodiques et sporadiques

Tâches apériodiques vs sporadiques


� Tâche apériodique : sans échéancier ou manquement d’échéancier toléré
� Faire un meilleur effort pour exécuter la tâche
� Tâche sporadique : éhéancier ferme, à respecter
� Si tâche sporadique est acceptée, on doit respecter les contraintes
Peut-on accepter de nouvelles tâches sporadiques ?
� Avant d’accepter, il faut vérifier si l’on peut faire le travail
� Définir un test d’acceptation peut établir si une tâche sporadique peut être traitée
� Acceptation peut être assez simple
1 Est-ce que l’on a des trous dans la planification actuelle suffisants pour exécuter tâche
avant son échéance ?
2 Si oui, est-ce qu’accepter nouvelle tâche sporadique n’empêchera pas d’autres tâches
sporadiques déjà acceptées de respecter leurs échéances ?
� Si durée d’exécution des tâches en cours peut varier, accepter selon le pire cas
3- Programmes temps réel
3.5- Tâches périodiques, apériodiques et sporadiques

Cédule de tâches périodiques, apériodiques et sporadiques


3- Programmes temps réel
3.5- Tâches périodiques, apériodiques et sporadiques

Tâches non planifiées dans ordonnancement hors ligne

Comment gérer tâches non planifiées (apériodiques ou sporadiques) dans ordon-


nancement hors ligne ?
� Cédule des tâches déjà calculées
� Tâche cédulées généralement d’une durée fixe et connue
� Pas nécessaire d’exécuter ces tâches à l’avance, seul respect des échéances importe
Slack stealing
� Insérer les tâches imprévues dans les « trous » de la cédule
� Test d’acceptation : s’assurer que les trous sont suffisants pour compléter la tâche à
temps
� Si test d’acceptation positif, réordonnancer tâches prévues et imprévues avec EDF
3- Programmes temps réel
3.5- Tâches périodiques, apériodiques et sporadiques

Exemple de slack stealing


3- Programmes temps réel
3.6- Ordonnancement et priorités dans Linux

3.6- Ordonnancement et priorités dans Linux


3- Programmes temps réel
3.6- Ordonnancement et priorités dans Linux

Ordonnancement dans Linux

Historique de l’ordonnancement dans Linux


� Ordonnanceur O(N) (avant version 2.6 du noyau, 1990-2004)
� Modèle simple et facile à comprendre
� Gère mal plusieurs processus et plusieurs processeurs
� Ordonnanceur O(1) (versions 2.6.1 à 2.6.23, 2004-2007)
� Ordonnancement en temps constant
� Fonctionne bien avec serveurs où charge est élevée
� Difficulté à identifier processus interactifs
� Ordonnanceur CFS (Completely Fair Scheduler) (depuis version 2.6.23, 2007)
� Ordonnancement O(logN)
� Assigne une part du temps processeur à chaque processus, selon la priorité
� Cédule processus afin de respecter autant que possible cette part de temps
� Le quantum n’est pas fixe, mais calculé à chaque fois pour chaque processus
3- Programmes temps réel
3.6- Ordonnancement et priorités dans Linux

Priorités dans Unix


Nice : priorité assignée aux processus dans Unix
� Nice variant entre -20 (plus élevée) et 19 (plus faible)
� Valeur par défaut de 0, hérité par les processus enfants
� Seul root peut réduire valeurs de nice
Modifier valeur de nice du processus courant

� inc : incrément à la valeur de nice actuelle


� Retourne nouvelle valeur de nice du processus
Autres fonctions pertinentes

� Voir le manuel pour détails d’utilisation


3- Programmes temps réel
3.6- Ordonnancement et priorités dans Linux

Commandes nice et renice


Commandes nice et renice
� nice -n PRIORITE COMMANDE : exécute programme COMMANDE avec valeur PRIORITE
ajoutée à la priorité par défaut
� renice -n PRIORITE PID : change priorité du processus PID en ajoutant valeur PRIORITE
à la priorité actuelle
� Seul root peut réduire valeurs de nice
Commande ps permet d’obtenir état des processus, incluant priorité
� Lister état des processus de l’utilisateur
$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 955 953 0 80 0 - 1523 wait pts/0 00 :00 :00 bash
0 R 1000 1174 955 0 80 0 - 1071 - pts/0 00 :00 :00 ps
� Changer priorité du processus
$ nice -n 5 ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 955 953 0 80 0 - 1523 wait pts/0 00 :00 :00 bash
0 R 1000 1175 955 0 85 5 - 1071 - pts/0 00 :00 :00 ps
Autre commande utile : top
� Moniteur textuel interactif des activités
3- Programmes temps réel
3.6- Ordonnancement et priorités dans Linux

Priorités dans Linux


Approche de Linux pour gérer les priorités : quantum variable
� Processus de plus haute priorité aura quantum plus grand qu’un processus de basse priorité
Gestion des priorités avec CFS
� Valeur du nice utilisée pour pondérer la part relative du processeur
� Différence de priorité de 5 donne une pondération 1 pour 3
� Ex. processus A (nice 0) s’exécute pour 15ms alors que processus B (nice de 5) s’exécute
pour 5ms
� CFS utilise une latence cible pour déterminer quanta
� Latence cible : temps désiré entre deux exécutions d’un processus (paramètre ajustable)
� Ex. latence cible de 20ms, deux processus actifs de priorité égale, quantum de 10ms
chacun
� Latence cible établie selon niveau de réponse désiré
� Granularité minimale : valeur plancher de latence cible (1ms par défaut), pour réduire
impact changement de contexte
Prochain processus choisi selon différence plus élevée entre quantum et temps d’exé-
cution jusqu’à présent
� CFS utilise arbre bicolore à l’interne pour choisir ce processus
3- Programmes temps réel
3.7- Ordonnancement temps réel dans Linux

3.7- Ordonnancement temps réel dans Linux


3- Programmes temps réel
3.7- Ordonnancement temps réel dans Linux

Algorithmes d’ordonnancement temps réel


CFS est algorithme d’ordonnancement générique
� Pas particulièrement adapté au temps réel
Ordonnanceurs temps réel de Linux
� Premier arrivé, premier servi (SCHED_FIFO)
� Exécute processus temps réel prioritaire jusqu’à interruption par le processus (céder
volontairement, attente sur E/S ou autre processus plus prioritaire disponible)
� Risques de famine pour autres processus de priorité égale ou inférieure
� Round robin (SCHED_RR)
� Alterne entre processus temps réel de même priorité, pour un quantum fixe
� Plus juste pour processus de même priorité, risque de famine pour processus moins
prioritaires
Processus désigné comme étant temps réel avec priorité plus basse
� Processus réguliers ont priorité entre 100 et 139
� Priorité spécifiée par le nice
� Valeur de priorité corresponds à valeur du nice + 120
� Processus temps réel ont priorité entre 0 et 99 sur Linux
3- Programmes temps réel
3.7- Ordonnancement temps réel dans Linux

Modifier algorithme d’ordonnancement


Modifier algorithme d’ordonnancement d’un processus

� pid : ID processus dont algorithme change, 0 si processus courant


� policy : algorithme d’ordonnancement à utiliser
� SCHED_NORMAL : CFS
� SCHED_FIFO : premier arrivé, premier servi (temps réel)
� SCHED_RR : round robin (temps réel)
� param : dénir paramètre, pour l’instant seul param->sched_priority est défini
Pour connaître algorithme d’ordonnancement actuel d’un processus

Pour EDF, il faut préciser ordonnanceur SCHED_DEADLINE en appelant la fonc-


tion sched_setattr (présentée plus loin)
3- Programmes temps réel
3.7- Ordonnancement temps réel dans Linux

Priorité temps réel des processus

Valeurs de priorités temps réel


� Interval de valeur n’est pas portable
� Pour connaître intervalle de la plateforme courante

� Retourne priorité max/min de l’algorithme d’ordonnancement policy


Assigner priorité lors ajout du processus à l’ordonnanceur temps réel
� Assigner priorité du processus à la variable sched_priority de l’argument param (struct
sched_param*) lors appel à fonction sched_setscheduler ou sched_setparam
Priorités héritées par processus enfants
3- Programmes temps réel
3.7- Ordonnancement temps réel dans Linux

Changer priorités temps réel

Appels système pertinents

� pid : ID du processus pour lequel on change paramètre, 0 pour processus courant


� param : paramètres modifiés
Pour SCHED_FIFO et SCHED_RR, seule priorité des processus est pertinente
3- Programmes temps réel
3.7- Ordonnancement temps réel dans Linux

Obtenir priorités temps réel

Obtenir priorité des processus temps réel


$ ps -eo pid, class, pri, nice, rtprio, comm
———————————————————————
PID CLS PRI NI RTPRIO COMMAND
1 TS 19 0 - systemd
2 TS 19 0 - kthreadd
3 TS 19 0 - ksoftirqd/0
4 FF 41 - 1 ktimersoftd/0
6 TS 39 -20 - kworker/0 :0H
———————————————————————
...
3- Programmes temps réel
3.7- Ordonnancement temps réel dans Linux

Attributs de processus temps réel

Fonctions lire et modifier attributs de processus

� pid : ID du processus, 0 si processus courant


� attr : pointeur à structure des attributs
� flags : doit âtre égal à 0 (pour expansion future)
� size : taille (en octet) de la structure pointée par attr
� Peut être calculé simplement par sizeof(*attr)
Si ordonnancement de tâches n’est pas possible, fonction retourne EBUSY
� Peut être assez commun selon tâches temps réel et politique (ex. EDF)
3- Programmes temps réel
3.7- Ordonnancement temps réel dans Linux

Struct sched_attr

Éléments de la struct sched_attr


3- Programmes temps réel
3.8- Ordonnanceur SCHED_DEADLINE

3.8- Ordonnanceur SCHED_DEADLINE


3- Programmes temps réel
3.8- Ordonnanceur SCHED_DEADLINE

Ordonnanceur SCHED_DEADLINE

Ordonnanceur SCHED_DEADLINE implanté depuis Linux 3.14 (2014)


� Implémente ordonnanceur EDF vu précédemment
N’implémente pas de dépendances entre processus
� Calculer préalablement temps de lancement et échéance effectifs, comme présenté
précédemment
Paramètres tâches EDF spécifiés par fonction sched_setattr
� sched_runtime : durée d’exécution (pire cas pour temps réel dur ou valeur moyenne
pour temps réel doux)
� sched_deadline : échéance relative relativement au temps de lancement
� sched_period : période à laquelle la tâche se répète
Variables définies comme entiers non signées sur 64 bits (uint64, typiquement un-
signed long)
� Unité des variables : 1ns (sched_period=10000 équivaut à période de 10µs)
3- Programmes temps réel
3.8- Ordonnanceur SCHED_DEADLINE

Paramètres tâches avec SCHED_DEADLINE


3- Programmes temps réel
3.8- Ordonnanceur SCHED_DEADLINE

Exécution d’une tâche avec SCHED_DEADLINE


État d’une tâche
� Échéance planifiée : échéance absolue du cycle courant
� Durée d’exécution restante : temps restant pour compléter tâche dans cycle courant
Tâche non faisable au cycle courant si :

temps courant + durée d’exécution restante < échéance planifiée

ou
durée d’exécution restante durée d’exécution
>
échéance planifiée − temps courant période
Dans ce cas, on réinitialise le cycle :

échéance planifiée = temps courant + échéance relative

durée d’exécution restante = durée d’exécution


3- Programmes temps réel
3.8- Ordonnanceur SCHED_DEADLINE

Exécution d’une tâche avec SCHED_DEADLINE

Lorsque tâche s’exécute pour une durée t et ensuite cède la main, alors

durée d’exécution restante = durée d’exécution restante − t

Lorsque durée d’exécution restant ≤ 0, alors la tâche est mise de côté jusqu’au
prochain cycle
Au début d’un nouveau cycle :

échéance planifiée = échéance planifiée + période

durée d’exécution restante = durée d’exécution restante + période


3- Programmes temps réel
3.9- Gestion de l’ordonnancement temps réel

3.9- Gestion de l’ordonnancement temps réel


3- Programmes temps réel
3.9- Gestion de l’ordonnancement temps réel

Cohabitation des processus

Assignation des ressources selon ordonnanceur


� Différents processus s’exécutant avec différents ordonnanceurs, qu’est-ce qui se passe ?
� Ordre de traitement
1 SCHED_DEADLINE : EDF
2 SCHED_RR : round robin
3 SCHED_FIFO : premier arrivé, premier servi
4 SCHED_NORMAL : CFS
� Famine pour processus réguliers si toutes ressources consommées par processus temps
réel
Faire cohabiter processus réguliers et temps réel est important
� Maintenance et traitement de base (ex. répondre à la ligne de commande)
3- Programmes temps réel
3.9- Gestion de l’ordonnancement temps réel

Ajustement du débit

Ajustement du débit des processus temps réel (real-time throttling)


� Assigner part du CPU au processus réguliers (ordonnanceur CFS)
� Valeurs configurées via « fichiers » dans /proc
� /proc/sys/kernel/sched_rt_period_us : valeur d’une période de référence en µs (par
défaut, 1000000µs = 1s)
� /proc/sys/kernel/sched_rt_runtime_us : débit pour processus temps réel en µs (par
défaut 950000µs = 0, 95s)
� Donc, par défaut, jusqu’à 95% des processeurs assignés aux processus temps réel, au
minimum 5% aux processus réguliers
3- Programmes temps réel
3.9- Gestion de l’ordonnancement temps réel

Association de processus à processeurs

Dans Linux, processus peuvent migrer entre processeurs


� Système dynamique sur multiprocesseur, selon nomenclature vue auparavant
Fonctions de l’API

� pid : ID du processus, si 0 processus courant


� cpusetsize : taille en octet de variable mask
� mask : masque (vecteur de bits) donnant l’affinité entre le processus et les processeurs
3- Programmes temps réel
3.9- Gestion de l’ordonnancement temps réel

Céder l’exécution
Lorsque processus temps réel a terminé sa tâche temps réel, il devrait céder la main
d’exécution
Appel système pour céder la main

Fonction très importante pour assurer bon fonctionnement


� Libérer ressources pour les autres processus
� Éviter famine
� Comportement lorsque sched_yield est appelé :
� SCHED_FIFO et SCHED_RR : processus placé en fin de file
� SCHED_DEADLINE : ordonnanceur considère cycle d’exécution terminé, tâche sera
lancée seulement à prochaine période, assigne 0 à durée d’exécution restante
Appels E/S bloquants (ex. read/write) cèdent également main d’exécution
� Faire attention à ce point pour éviter des surprises
3- Programmes temps réel
3.9- Gestion de l’ordonnancement temps réel

Fin de Séance
Vos Questions ?

Vous aimerez peut-être aussi