Skip to content

SoniaMalki/Codethesis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

649 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Documentation du code

1. Génération de Tasksets

Le processus de génération de tasksets vise à créer des ensembles de tâches réalistes pour tester les algorithmes d'assignation et d'ordonnancement.

1.1. Paramètres de génération

Les paramètres clés pour la génération de tasksets sont définis dans le fichier tasksets.json. Ils sont ensuite utilisés par la classe TasksetSetGenerator pour créer les tasksets.

  • taskset_repetition: Nombre de tasksets Ă  gĂ©nĂ©rer. Permet de rĂ©pĂ©ter une expĂ©rience plusieurs fois avec les mĂŞme paramètre de gĂ©nĂ©ration, pour faire des moyennes. (choix entre : 10)
  • tasks_per_taskset: Nombre de tâches dans chaque taskset. (choix entre: 10 ou 20)
  • interference_factor: Facteur utilisĂ© pour calculer l'interfĂ©rence entre les tâches. L'interfĂ©rence est dĂ©fini comme un pourcentage du WCET. (choix entre: 0.2 ou 0.8)
  • probability_factor: ProbabilitĂ© qu'une interfĂ©rence se produise entre deux tâches. (choix entre: 0.1 ou 0.4)
  • max_utilization: Utilisation maximale autorisĂ©e pour chaque taskset. (choix entre: 0.2 Ă  1 par incrĂ©ment de 0.2. Cela est multipliĂ© par le nombre de coeurs disponibles)
  • taskset_options Options spĂ©cifiques Ă  l'algorithme de generation de taskset si nĂ©cessaire.
    • deadline_option: Option pour la gĂ©nĂ©ration des deadlines.
      • eq_period: La deadline est Ă©gale Ă  la pĂ©riode de la tâche.
      • leq_period: La deadline est un nombre alĂ©atoire entre le WCET et la pĂ©riode de la tâche.
    • max_hyperperiod: HyperpĂ©riode maximale autorisĂ©e pour les tasksets gĂ©nĂ©rĂ©s. Permet de ne pas avoir une explosion de paramètres. (choix entre: 1000, 10 000, 100 000, 1 000 000, 10 000 000)
    • max_prime: Nombre premier maximal utilisĂ© pour gĂ©nĂ©rer les pĂ©riodes des tâches. (choix entre: diffĂ©rents premiers jusque 23)
    • gen_limit_exponent: Exposant utilisĂ© pour limiter l'hyperpĂ©riode maximale lors de la gĂ©nĂ©ration de la matrice de nombres premiers. (choix entre: 2, 3, 4 ou 5)

1.2. Génération des paramètres des tâches

Les paramètres de chaque tâche (wcet, deadline, period, interference, single_interference, utilization, hyperperiod, N, activation, absolute_deadline) sont générés par les modules suivants :

  • UtilizationGenerator: GĂ©nère les utilisations des tâches en s'assurant que la somme des utilisations des tâches d'un mĂŞme taskset ne dĂ©passe pas l'utilisation maximale spĂ©cifiĂ©e (max_utilization). Utilise la mĂ©thode dĂ©crite dans [1] (Emberson, Stafford, & Davis, 2010)
  • PrimeMatrixGenerator: GĂ©nère une matrice de nombres premiers utilisĂ©e pour crĂ©er des pĂ©riodes de tâches uniques et Ă©viter les explosions d'hyperpĂ©riode. Utilise la mĂ©thode dĂ©crite dans [2] (Goossens & Macq, 2001). Les matrices sont gĂ©nĂ©rĂ©s si elles n'existent pas, elles sont ensuite sauvegardĂ©es pour ĂŞtre rĂ©utilisĂ©es. On diffĂ©rencie les diffĂ©rentes matrice par leur paramètres qui sont ajoutĂ©s au nom du fichier.
  • PeriodGenerator: Utilise la matrice de nombres premiers pour gĂ©nĂ©rer les pĂ©riodes des tâches. Utilise la mĂ©thode dĂ©crite dans [2] (Goossens & Macq, 2001).
  • WCETCalculator: Calcule le WCET de chaque tâche en fonction de sa pĂ©riode et de son utilisation. (WCET = utilization * period)
  • DeadlineGenerator: GĂ©nère les deadlines des tâches en fonction de l'option spĂ©cifiĂ©e deadline_option.
  • InterferenceGenerator: GĂ©nère les interfĂ©rences entre les tâches d'un mĂŞme taskset en utilisant le facteur d'interfĂ©rence (interference_factor) et la probabilitĂ© d'interfĂ©rence (probability_factor). Si une interference a lieu (probability_factor), elle est calculĂ©e en fonction de interference_factor et du wcet.
  • TasksetSetGenerator: Calcule l'hyperpĂ©riode, le nombre d'activations (N), les activations et les deadlines absolues de chaque tâche. (ces donnĂ©es sont utilisĂ©es par RHMA).

2. Génération d'Assignments

Le processus d'assignation de tasksets vise à répartir les tâches entre différents coeurs selon certains critères.

2.1. Paramètres d'assignation

Les paramètres de l'algorithme d'assignation sont définis dans le fichier assignments.json.

  • assignment_method: Nom de l'algorithme d'assignation Ă  utiliser. (voir 2.2)
  • sorting_criterion: Critère de tri des tâches avant l'assignation.
    • wcet_ascending: Tri des tâches par WCET croissant.
    • wcet_descending: Tri des tâches par WCET dĂ©croissant.
    • period_ascending: Tri des tâches par pĂ©riode croissante.
    • period_descending: Tri des tâches par pĂ©riode dĂ©croissante.
    • utilization_ascending: Tri des tâches par utilisation croissante.
    • utilization_descending: Tri des tâches par utilisation dĂ©croissante.
    • execution_slack_ascending: Tri des tâches par marge d'exĂ©cution croissante (pĂ©riode - WCET).
    • execution_slack_descending: Tri des tâches par marge d'exĂ©cution dĂ©croissante (pĂ©riode - WCET).
    • random_order: Tri alĂ©atoire des tâches.
  • number_of_cores: Nombre de processeurs disponibles pour l'assignation des tâches. (choix entre: 2, 4 ou 8).
  • assignment_options: Options spĂ©cifiques Ă  l'algorithme d'assignation si nĂ©cessaire.
    • solving_time_limit_MILP: Limite de temps imposĂ©e au solveur MILP avant d'abandonner la recherche. (300 secondes = 5 minutes)
    • solver_name: SpĂ©cifie le solver utilisĂ© pour rĂ©soudre le problème (choix entre: glpk ou gurobi)

2.2. Algorithmes d'assignation

Le code propose plusieurs algorithmes d'assignation qui peuvent être sélectionnés dans le fichier assignments.json.

La classe AssignmentGenerator est responsable de la génération des assignations en fonction de l'algorithme spécifié (assignment_method) et des paramètres associés. Les algorithmes d'assignation suivants sont disponibles :

  • CITTA: Algorithme de partitionnement de tâches qui tient compte des interfĂ©rences de cache lors de l'assignation des tâches aux cĹ“urs. Utilise un modèle MILP pour calculer la borne supĂ©rieure de l'interfĂ©rence de cache et recherche une partition qui garantit l'ordonnançabilitĂ© sous cette contrainte.

  • WorstFitAssigner: Algorithme de partitionnement de tâches qui assigne chaque tâche au processeur ayant l'utilisation la plus faible parmi ceux pouvant encore l'accueillir. Les tâches sont prĂ©alablement triĂ©es selon le critère dĂ©fini par sorting_criterion. La validitĂ© de l'assignation est vĂ©rifiĂ©e en s'assurant que l'utilisation du processeur après l'ajout de la tâche ne dĂ©passe pas 1.

  • FirstFitAssigner: Algorithme de partitionnement de tâches qui assigne chaque tâche au premier processeur rencontrĂ© pouvant encore l'acceuillir. Les tâches sont prĂ©alablement triĂ©es selon le critère dĂ©fini par sorting_criterion. La validitĂ© de l'assignation est vĂ©rifiĂ©e en s'assurant que l'utilisation du processeur après l'ajout de la tâche ne dĂ©passe pas 1.

  • BestFitAssigner: Algorithme de partitionnement de tâches qui assigne chaque tâche au processeur ayant l'utilisation la plus Ă©levĂ©e parmi ceux pouvant encore l'accueillir. Les tâches sont prĂ©alablement triĂ©es selon le critère dĂ©fini par sorting_criterion. La validitĂ© de l'assignation est vĂ©rifiĂ©e en s'assurant que l'utilisation du processeur après l'ajout de la tâche ne dĂ©passe pas 1.

  • Wmin: Algorithme d'allocation de tâches qui vise Ă  minimiser l'interfĂ©rence maximale potentielle entre les tâches. Il utilise une formulation MILP pour modĂ©liser le problème et trouver une solution optimale en termes de minimisation de l'interfĂ©rence. Wmin utilise le facteur d'interfĂ©rence de chaque tâche pour estimer l'interfĂ©rence potentielle et l'objectif est de minimiser la somme des interfĂ©rences maximales possibles pour chaque cĹ“ur.

3. Génération d'Ordonnancements

L'ordonnancement des tâches sur les processeurs est la dernière étape du processus de simulation.

3.1. Paramètres d'ordonnancement

Les paramètres de l'algorithme d'ordonnancement sont définis dans le fichier schedulings.json.

  • scheduling_algorithm: Nom de l'algorithme d'ordonnancement Ă  utiliser. (voir 3.2)
  • scheduling_options: Options spĂ©cifiques Ă  l'algorithme d'ordonnancement si nĂ©cessaire.
    • non_preemption_time_variant_2: Option disponible pour dĂ©terminer le facteur de non-preemption pour les variants 2 de EDF et DM. (choix entre: number_of_tasks, wcet_of_tasks ou system_utilization) dĂ©finie selon [3] (Aceituno et al., 2022).
    • solving_time_limit_MILP: Limite de temps imposĂ©e au solveur MILP avant d'abandonner la recherche. (300 secondes = 5 minutes)
    • solver_name: SpĂ©cifie le solver utilisĂ© pour rĂ©soudre le problème (choix entre: glpk ou gurobi)

3.2. Algorithmes d'ordonnancement

Le code propose plusieurs algorithmes d'ordonnancement qui peuvent être sélectionnés dans le fichier schedulings.json.

La classe SchedulingGenerator est responsable de la génération des ordonnancements en fonction de l'algorithme spécifié (scheduling_algorithm) et des paramètres associés. Les algorithmes d'ordonnancement suivants sont disponibles :

  • EarliestDeadlineFirst: Algorithme "Earliest Deadline First" qui donne la prioritĂ© aux tâches ayant les deadlines relatives les plus proches.
  • EarliestDeadlineFirstVariant1: Variante d'Earliest Deadline First qui gère l'inversion de prioritĂ© en favorisant la tâche en cours d'exĂ©cution si son temps d'exĂ©cution restant est infĂ©rieur Ă  celui de la tâche de plus haute prioritĂ© qui veut la preempter.
  • EarliestDeadlineFirstVariant2: Variante d'Earliest Deadline First qui introduit un temps de non-prĂ©emption pour chaque tâche selon certains critères. (voir non_preemption_time_variant_2)
  • DeadlineMonotonic: Algorithme "Deadline Monotonic" qui donne la prioritĂ© aux tâches ayant les deadlines absolues les plus courtes.
  • DeadlineMonotonicVariant1: Variante de Deadline Monotonic qui gère l'inversion de prioritĂ© comme EarliestDeadlineFirstVariant1.
  • DeadlineMonotonicVariant2: Variante de Deadline Monotonic qui introduit un temps de non-prĂ©emption comme EarliestDeadlineFirstVariant2.
  • CombinedScheduler: Algorithme qui combine plusieurs algorithmes d'ordonnancement simples pour trouver le meilleur ordonnancement possible pour chaque pĂ©riode occupĂ©e. Algorithme qui crĂ©e des busy periods (voir 3.3), des periodes divisĂ©es par des temps idle pour tous les coeurs.
  • Rhma: Algorithme qui utilise un modèle MILP pour trouver un ordonnancement qui minimise Ă  la fois les temps de rĂ©ponse et les interfĂ©rences.

3.3. Busy period

Les algorithmes CombinedScheduler et Rhma utilisent le concept de busy period pour découper l'hyperpériode en intervalles de temps plus petits et indépendants. La classe BusyPeriodGenerator est responsable de la génération des busy period.

  • generate_monocore_busy_periods_timeslice(): Trouve les busy period sur un seul processeur (MBP).
  • generate_busy_periods_timeslice(): Fusionne les pĂ©riodes occupĂ©es de tous les processeurs pour obtenir les pĂ©riodes occupĂ©es globales.
  • generate_busy_periods_from_schedule(): CrĂ©e un objet BusyPeriod Ă  partir d'un objet Scheduling en utilisant les pĂ©riodes occupĂ©es globales.
  • generate_busy_periods(): Combine les fonctions prĂ©cĂ©dentes pour gĂ©nĂ©rer un objet BusyPeriod Ă  partir d'un objet Scheduling.
  • generate_scheduling_length(): Calcule la durĂ©e totale des pĂ©riodes occupĂ©es d'un ordonnancement. Cela permet de comparer les Busy Period et choisir l'algorithme qui permet d'obtenir la plus courte BP.

Analyse des résultats

1. Analyse de l'assignation seule

1.1 Objectif :

Evaluer les performances des algorithmes d'assignation (WorstFitAssigner, FirstFitAssigner, BestFitAssigner, CITTA, Wmin) en termes de taux de succès, de temps de calcul et d'impact des paramètres de génération des tasksets et des critères de tri.

1.2 Mesures de performance :

  • Taux de succès : Pourcentage de tasksets pour lesquels l'algorithme trouve une assignation rĂ©ussie.
  • Temps de calcul : Temps (en secondes) nĂ©cessaire Ă  l'algorithme pour trouver une solution (calculĂ© seulement pour les assignations rĂ©ussies.)

1.3 Paramètres à analyser :

  • Critères de tri : WCET (croissant et dĂ©croissant), pĂ©riode (croissante et dĂ©croissante), utilisation (croissante et dĂ©croissante), marge d'Ă©xecution (croissante et dĂ©croissante), ordre alĂ©atoire (uniquement pour WorstFitAssigner, FirstFitAssigner, BestFitAssigner et CITTA).
  • Paramètres de gĂ©nĂ©ration des tasksets :
    • Facteur d'interfĂ©rence (IF)
    • ProbabilitĂ© d'interfĂ©rence (P)
    • Utilisation du système (Utot)
    • Ratio tâches/cĹ“urs (n/M)

1.4 Graphiques :

  1. Taux de succès global : Diagramme en barres pour comparer les taux de succès de tous les algorithmes.
  2. Temps de calcul global : Boxplot pour comparer les distributions des temps de calcul de tous les algorithmes.

Pour chaque algorithme d'assignation (WorstFitAssigner, FirstFitAssigner, BestFitAssigner, CITTA) :

  1. Taux de succès en fonction du critère de tri : Diagramme en barres groupées pour comparer les taux de succès pour chaque critère de tri.
  2. Temps de calcul en fonction du critère de tri : Boxplots groupées pour comparer les distributions des temps de calcul pour chaque critère de tri.

Pour chaque paramètre de génération des tasksets :

  1. Taux de succès en fonction du paramètre :
    • Graphique linĂ©aire (pour Utot, n/M) avec une courbe pour chaque algorithme d'assignation.
    • Heatmaps multiples (une pour chaque algorithme) pour IF et P.
  2. Temps de calcul moyen en fonction du paramètre :
    • Graphique linĂ©aire (pour Utot, n/M) avec une courbe pour chaque algorithme d'assignation.
    • Heatmaps multiples (une pour chaque algorithme) pour IF et P.

2. Analyse du scheduling seul

2.1 Objectif :

Evaluer les performances des algorithmes de scheduling (EarliestDeadlineFirst, DeadlineMonotonic, variantes, Combined Scheduler, RHMA) en termes de taux de succès, de temps de calcul, d'augmentation d'utilisation et d'impact du paramètre non_preemptive_time_variant_2 (pour EarliestDeadlineFirstVariant2 et DeadlineMonotonicVariant2).

2.2 Mesures de performance :

  • Taux de succès : Pourcentage de tasksets jugĂ©s "schedulables" par l'algorithme.
  • Temps de calcul : Temps (en secondes) nĂ©cessaire Ă  l'algorithme pour gĂ©nĂ©rer le planning.
  • Augmentation d'utilisation : DiffĂ©rence (en pourcentage) entre l'utilisation rĂ©elle du système (en tenant compte de l'interfĂ©rence) et l'utilisation thĂ©orique.

2.3 Paramètres à analyser :

  • Paramètre non_preemptive_time_variant_2: wcet_of_tasks, system_utilization, number_of_tasks (uniquement pour EarliestDeadlineFirstVariant2, DeadlineMonotonicVariant2, Combined Scheduler et RHMA).
  • Paramètres de gĂ©nĂ©ration des tasksets :
    • Facteur d'interfĂ©rence (IF)
    • ProbabilitĂ© d'interfĂ©rence (P)
    • Utilisation du système (Utot)
    • Ratio tâches/cĹ“urs (n/M)

2.4 Graphiques :

  1. Taux de succès global : Diagramme en barres pour comparer les taux de succès de tous les algorithmes.
  2. Temps de calcul global : Boxplot pour comparer les distributions des temps de calcul de tous les algorithmes.
  3. Augmentation d'utilisation globale : Boxplot pour comparer les distributions des augmentations d'utilisation de tous les algorithmes.

Pour EarliestDeadlineFirstVariant2, DeadlineMonotonicVariant2, Combined Scheduler et RHMA:

  1. Taux de succès en fonction de non_preemptive_time_variant_2: Diagramme en barres groupées (un groupe pour chaque algorithme) pour comparer les taux de succès pour chaque valeur du paramètre.
  2. Temps de calcul moyen en fonction de non_preemptive_time_variant_2: Boîtes à moustaches groupées pour comparer les temps de calcul moyens pour chaque valeur du paramètre.
  3. Augmentation d'utilisation moyenne en fonction de non_preemptive_time_variant_2: Boîtes à moustaches groupées pour comparer les augmentations d'utilisation moyennes pour chaque valeur du paramètre.

Pour chaque paramètre de génération des tasksets:

  1. **Taux de succès en fonction

du paramètre :** - Graphique linéaire (pour Utot, n/M) avec une courbe pour chaque algorithme de scheduling. - Heatmaps multiples (une pour chaque algorithme) pour IF et P. 8. Temps de calcul moyen en fonction du paramètre : - Graphique linéaire (pour Utot, n/M) avec une courbe pour chaque algorithme de scheduling. - Heatmaps multiples (une pour chaque algorithme) pour IF et P. 9. Augmentation d'utilisation en fonction du paramètre : Boxplots groupées pour chaque valeur du paramètre, avec un groupe pour chaque algorithme de scheduling.

Références

  • [1] Emberson, P., Stafford, R., & Davis, R. I. (2010). Techniques for the synthesis of multiprocessor tasksets.

  • [2] Goossens, J., & Macq, C. (2001). Limitation of the hyper-period in real-time periodic task set generation. In Proceedings of the 9th International Conference on Real-Time Systems (pp. 133–148). Teknea.

  • [3] Aceituno, J. M., Guasque Ortega, A., Balbastre Betoret, P., SimĂł Ten, J., & Crespo Lorente, A. (2022). Planificador combinado: una estrategia para mejorar el rendimiento de los sistemas de tiempo real crĂ­tico. In XLIII Jornadas de Automática: libro de actas: 7, 8 y 9 de septiembre de 2022, Logroño (La Rioja) (pp. 870–876). Servizo de PublicaciĂłns da UDC. doi:10.17979/spudc.9788497498418.0870

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors