<ul><ul><li>Association GUSES
http://www.guses.org
PHILIPPE Bruno
19/05/2010 </li></ul></ul>Scheduling : cas pratique
<ul><li>Notions de base
Dispatcher
Classes d'ordonancement
Outils d'analyses et de configuration
Cas pratique : applications cadencées
Cas pratique : mutualisation
Conclusion </li></ul>Plan de la présentation
Notions de base <ul><li>Fonction principale du système </li></ul><ul><ul><ul><li>Partie complexe du système
Evolution constante avec le hardware </li></ul></ul></ul><ul><li>Objectifs antagonistes </li></ul><ul><ul><ul><li>Temps de...
Bon débit pour les travaux d'arrière plan (fournir)
Processus de base et de haute priorités (jongler) </li></ul></ul></ul><ul><li>Système à temps partagé </li></ul><ul><ul><u...
Ordonnancement en fonction des ticks d'horloge </li></ul></ul></ul>
Notions de base <ul><li>Classification des processus </li></ul><ul><ul><ul><li>Priorité pour chaque processus
Algorithmes complexes mis en oeuvre (sélection, ordonnancement, etc...) </li></ul></ul></ul><ul><li>Consommation des proce...
Consommation d'entrée / sortie </li></ul></ul></ul><ul><li>Catégories de processus </li></ul><ul><ul><ul><li>Processus int...
Processus de commandes
Processus temps réel </li></ul></ul></ul>
Notions de base <ul><li>Préemption des processus </li></ul><ul><ul><ul><li>Processus de priorité supérieur
Expiration de son quantum
Interruption matérielle </li></ul></ul></ul><ul><li>Durée du quantum </li></ul><ul><ul><ul><li>Paramètre critique pour les...
Compromis entre un temps court et long </li></ul></ul></ul><ul><li>Préemption des processus </li></ul><ul><ul><ul><li>Proc...
Expiration de son quantum de temps </li></ul></ul></ul>
Notions de base  (états des threads)
Dispatcher <ul><li>Fonctions principales </li></ul><ul><ul><ul><li>Management de la queue (insertion et suppression des th...
Sélection des threads
Sélection des cpu/core
Gestion des contextes switches </li></ul></ul></ul><ul><li>Fonctions secondères </li></ul><ul><ul><ul><li>Initialisation e...
Prochain SlideShare
Chargement dans…5
×

Scheduling et gestion des ressources CPU sous Solaris

1 444 vues

Publié le

Afin de mieux appréhender la gestion des ressources CPU, il est nécessaire de mieux cerner le système et notamment l\'ordonnancement des processus. A ce titre j\'ai eu l\'occasion de faire une petite présentation pour l\'association Guses sur l\'ordonnencement dans Solaris/Opensolaris en m\'appuyant sur des cas pratiques où l\'optimisation des ressources CPU est nécessaire.

0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 444
Sur SlideShare
0
Issues des intégrations
0
Intégrations
9
Actions
Partages
0
Téléchargements
11
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Scheduling et gestion des ressources CPU sous Solaris

  1. 1. <ul><ul><li>Association GUSES
  2. 2. http://www.guses.org
  3. 3. PHILIPPE Bruno
  4. 4. 19/05/2010 </li></ul></ul>Scheduling : cas pratique
  5. 5. <ul><li>Notions de base
  6. 6. Dispatcher
  7. 7. Classes d'ordonancement
  8. 8. Outils d'analyses et de configuration
  9. 9. Cas pratique : applications cadencées
  10. 10. Cas pratique : mutualisation
  11. 11. Conclusion </li></ul>Plan de la présentation
  12. 12. Notions de base <ul><li>Fonction principale du système </li></ul><ul><ul><ul><li>Partie complexe du système
  13. 13. Evolution constante avec le hardware </li></ul></ul></ul><ul><li>Objectifs antagonistes </li></ul><ul><ul><ul><li>Temps de réponse rapide (assurer)
  14. 14. Bon débit pour les travaux d'arrière plan (fournir)
  15. 15. Processus de base et de haute priorités (jongler) </li></ul></ul></ul><ul><li>Système à temps partagé </li></ul><ul><ul><ul><li>Division du temps en tranche (quantum)
  16. 16. Ordonnancement en fonction des ticks d'horloge </li></ul></ul></ul>
  17. 17. Notions de base <ul><li>Classification des processus </li></ul><ul><ul><ul><li>Priorité pour chaque processus
  18. 18. Algorithmes complexes mis en oeuvre (sélection, ordonnancement, etc...) </li></ul></ul></ul><ul><li>Consommation des processus </li></ul><ul><ul><ul><li>Consommation CPU
  19. 19. Consommation d'entrée / sortie </li></ul></ul></ul><ul><li>Catégories de processus </li></ul><ul><ul><ul><li>Processus interractifs
  20. 20. Processus de commandes
  21. 21. Processus temps réel </li></ul></ul></ul>
  22. 22. Notions de base <ul><li>Préemption des processus </li></ul><ul><ul><ul><li>Processus de priorité supérieur
  23. 23. Expiration de son quantum
  24. 24. Interruption matérielle </li></ul></ul></ul><ul><li>Durée du quantum </li></ul><ul><ul><ul><li>Paramètre critique pour les performances du systèmes
  25. 25. Compromis entre un temps court et long </li></ul></ul></ul><ul><li>Préemption des processus </li></ul><ul><ul><ul><li>Processus de priorité supérieur
  26. 26. Expiration de son quantum de temps </li></ul></ul></ul>
  27. 27. Notions de base (états des threads)
  28. 28. Dispatcher <ul><li>Fonctions principales </li></ul><ul><ul><ul><li>Management de la queue (insertion et suppression des threads)
  29. 29. Sélection des threads
  30. 30. Sélection des cpu/core
  31. 31. Gestion des contextes switches </li></ul></ul></ul><ul><li>Fonctions secondères </li></ul><ul><ul><ul><li>Initialisation et ordonnancement des classes
  32. 32. Gestion des préemptions
  33. 33. Gestion des commandes d'administration (lié à l'ordonnancement) </li></ul></ul></ul>
  34. 34. Dispatcher <ul><li>Gestion de deux types d'objects </li></ul><ul><ul><ul><li>Objects de type threads
  35. 35. Objects de type processors </li></ul></ul></ul><ul><li>Flexibilité du programme </li></ul><ul><ul><ul><li>Gestion de plusieurs classes d'ordonnancement
  36. 36. Modification des priorités d'un thread dynamiquement </li></ul></ul></ul><ul><li>Diverses influences </li></ul><ul><ul><ul><li>Architecture matérielle (SMP, CMP, CMT, MPO)
  37. 37. Management des ressources (processor bind, processor sets, pool, zones) </li></ul></ul></ul>
  38. 38. Dispatcher <ul><li>Facteurs pour la sélection des threads </li></ul><ul><ul><ul><li>Niveau de priorité du thread
  39. 39. Lgroup maison
  40. 40. Binding du thread ou pas (processor set ou pbind)
  41. 41. Balancement dynamique par le code du dispatcher </li></ul></ul></ul><ul><li>Synchronisation d'un thread </li></ul><ul><ul><ul><li>Cohérence nécessaire
  42. 42. Ressource non disponible (placement dans une queue spécifique) </li></ul></ul></ul><ul><li>Interruptions </li></ul><ul><ul><ul><li>Mécanisme pour les devices et les fonctions spécifiques du noyau
  43. 43. Priorité les plus haute </li></ul></ul></ul>
  44. 44. Dispatcher (fonctionnement)
  45. 45. Dispatcher (priorités)
  46. 46. Classes d'ordonancement <ul><li>Timeshare (TS) </li></ul><ul><ul><ul><li>Classe par défaut
  47. 47. Priorités ajustées en fonction de la consommation CPU </li></ul></ul></ul><ul><li>Interactive (IA) </li></ul><ul><ul><ul><li>Identique à la classe TS (dérivé)
  48. 48. Optimisation pour les tâches exécutées dans des fenêtres actives </li></ul></ul></ul><ul><li>Fixed Prioriy (FX) </li></ul><ul><ul><ul><li>Classe disponible sous Opensolaris et Solaris 10
  49. 49. Priorité fixe lors de l'exécution du thread
  50. 50. Valeur à 60 permet d'utiliser la classe SYS </li></ul></ul></ul>
  51. 51. Classes d'ordonancement <ul><li>Real Time (RT) </li></ul><ul><ul><ul><li>Niveau de priortité le plus important (sauf interruptions)
  52. 52. Varience de temps minimale entre deux exécutions
  53. 53. Utilisation en nombre à éviter </li></ul></ul></ul><ul><li>System (SYS) </li></ul><ul><ul><ul><li>Uniquement pour les threads du systèmes
  54. 54. Affectation d'une priorité selon l'importance des travaux </li></ul></ul></ul><ul><li>Fair Share (FSS) </li></ul><ul><ul><ul><li>Classe disponible sous Opensolaris et Solaris 10
  55. 55. Gestion particulière des processeurs (part) </li></ul></ul></ul>
  56. 56. Classes TS
  57. 57. Classes FSS <ul><li>Fonctionnement </li></ul><ul><ul><ul><li>Partage des ressources CPU en part
  58. 58. Importance relative d'une charge par rapport à une autre
  59. 59. Valeur de la part non importante (quantité relative)
  60. 60. Intérêt des parts uniquements en cas de contention
  61. 61. Intégration aux projects et aux zones </li></ul></ul></ul><ul><li>Remarques </li></ul><ul><ul><ul><li>Utilisation des autres classes déconseillée
  62. 62. Possibilité de combiner la classe FSS et les processors set
  63. 63. Possibilité de combiner la classe FSS et les zones </li></ul></ul></ul>
  64. 64. Classes FSS (exemples)
  65. 65. Outils d'analyses <ul><li>Outils d'analyse courants </li></ul><ul><ul><ul><li>Utlisation des cpu/core (psrinfo, vmstat, uptime, sar, mpstat)
  66. 66. Analyse des process (prstat, truss, pstack)
  67. 67. Analyse des projects (prstat, projects, prctl, rctladm)
  68. 68. Classes d'ordonnancement (dispadmin, ps, priocntl) </li></ul></ul></ul><ul><li>Outils d'analyse à connaitre </li></ul><ul><ul><ul><li>Statistiques/Types des cpu/core (kstat, mdb, cpustack, cputrack, corestat)
  69. 69. Analyse des locks (mdb, lockstat)
  70. 70. Statistiques des interruptions (intrstat, corestat, cpustack, cputrack)
  71. 71. Statistiques des lgroups (mdb, kstat, lgrpinfo) </li></ul></ul></ul>
  72. 72. Outils d'analyses (dtrace) <ul><li>Compréhension des évènements </li></ul><ul><ul><ul><li>Dispatcher : évènements, monitoring des queues, utilisation des cores
  73. 73. Threads : priorité, changement, préemption
  74. 74. Lgroups : ordonnancement, utilisation
  75. 75. etc... </li></ul></ul></ul><ul><li>Scripts Dtrace en pagaille </li></ul><ul><ul><ul><li>Scripts disponibles sur le système (/usr/demo/dtrace)
  76. 76. Scripts disponibles dans le DtraceToolkits
  77. 77. Scripts disponibles sur opensolaris </li></ul></ul></ul>
  78. 78. Outils de configuration <ul><li>Priorité des threads (nice, priocntl)
  79. 79. Gestion des interruptions (psrset, psradm)
  80. 80. Gestion des cpu/core (psradm)
  81. 81. Allocation de cpu à un thread (pbind)
  82. 82. Gestion des groupes de cpu/core (psrset)
  83. 83. Configuration des projects (newtask, projadd, projmod, projdel)
  84. 84. Ressources pools (pooladm, poolcfg)
  85. 85. Gestion des zones (zonecfg) </li></ul>
  86. 86. Cas pratique (application cadencée) <ul><li>Objectifs </li></ul><ul><ul><ul><li>Temps d'exécution toujours garantie
  87. 87. Influence minimale du système </li></ul></ul></ul><ul><li>Mise en oeuvre </li></ul><ul><ul><ul><li>Processus à binder sur un core (pbind et/ou psrset)
  88. 88. Interruptions matérielles à supprimer sur ce(s) core(s)
  89. 89. Modification de la classe du processus (classe FX)
  90. 90. Optimisation de la résolution d'horloge (tuning hires_xxx)
  91. 91. Modification de l'algorithme du dispatcher (tuning rechoose_interval)
  92. 92. Modification du quantum (attention aux conséquences) </li></ul></ul></ul>
  93. 93. Cas pratique (application cadencée) <ul><li>Remarques </li></ul><ul><ul><ul><li>Influence forte du hardware
  94. 94. Classe RT déconseillée si l'application n'est pas codée pour
  95. 95. Mutualisation possible dans certains cas (voir même conseillée) </li></ul></ul></ul><ul><li>Exemples d'applications </li></ul><ul><ul><ul><li>Applications flux bancaires : Tibco, RMDS
  96. 96. Applications flux type streaming </li></ul></ul></ul>
  97. 97. Cas pratique (mutualisation sans zone) <ul><li>Objectifs </li></ul><ul><ul><ul><li>Gestion de différents types d'applications
  98. 98. Temps CPU suffisant (ou fixe) pour chaque application </li></ul></ul></ul><ul><li>Mise en oeuvre </li></ul><ul><ul><ul><li>Configuration des ressources pools
  99. 99. Configuration des projects (un project par application)
  100. 100. Configuration de la classe FSS si pas de contraintes CPU </li></ul></ul></ul><ul><li>Remarques </li></ul><ul><ul><ul><li>Allocation du pool par défaut
  101. 101. Identification stricte des applications </li></ul></ul></ul>
  102. 102. Cas pratique (mutualisation sans zone)
  103. 103. Cas pratique (mutualisation avec zones) <ul><li>Objectifs </li></ul><ul><ul><ul><li>Gestion de différents types d'applications dans des zones
  104. 104. Temps CPU fixe pour chaque zone </li></ul></ul></ul><ul><li>Mise en oeuvre </li></ul><ul><ul><ul><li>Configuration des ressources pools
  105. 105. Configuration d'un pool par zone
  106. 106. Politique d'ordonnancement différent par zone si besoin </li></ul></ul></ul><ul><li>Remarques </li></ul><ul><ul><ul><li>Allocation du pool par défaut à la globale
  107. 107. Mutualisation limitée (forte contrainte) </li></ul></ul></ul>
  108. 108. Cas pratique (mutualisation avec zones)
  109. 109. Cas pratique (mutualisation avec zones)
  110. 110. Cas pratique (mutualisation avec zones) <ul><li>Objectifs </li></ul><ul><ul><ul><li>Gestion de différents types d'applications dans des zones
  111. 111. Temps CPU suffisant pour chaque zone </li></ul></ul></ul><ul><li>Mise en oeuvre </li></ul><ul><ul><ul><li>Configuration de la classe d'ordonnacement FSS
  112. 112. Configuration des ressources type cpu.shares pour chaque zone </li></ul></ul></ul><ul><li>Remarques </li></ul><ul><ul><ul><li>Allocation de cpu.shares à la globale
  113. 113. Optimisation de la consolidation
  114. 114. Fluctuation des temps de traitements applicatifs </li></ul></ul></ul>
  115. 115. Cas pratique (mutualisation avec zones)
  116. 116. Conclusion <ul><li>Bon sens </li></ul><ul><ul><ul><li>Minimiser les classes d'ordonnancement
  117. 117. Mutualisation suivant le type d'application (même workload)
  118. 118. Identification des besoins </li></ul></ul></ul><ul><li>Choix et configuration correct du hardware </li></ul><ul><ul><ul><li>Sélection de la bonne architecture matérielle
  119. 119. Utilisation maximum des lgroups </li></ul></ul></ul><ul><li>Optimisation des applications à la source </li></ul><ul><ul><ul><li>Optimisation du code suivant le hardware
  120. 120. Favorisation du codage multithread
  121. 121. Utilisation d'outils d'audit de code (Oracle Sun Studio) </li></ul></ul></ul>
  122. 122. Questions ?
  123. 123. <ul><li>Book : Solaris Internals
  124. 124. Book : Solaris Performance and Tools
  125. 125. Book : Solaris Application Programming
  126. 126. Docs : 820-2318 & 816-5137
  127. 127. Web : http://www.solarisinternals.com
  128. 128. Web : http://hub.opensolaris.org
  129. 129. Web : http://www.sun.com/bigadmin/home/index.jsp
  130. 130. Web : http://www.sun.com/blueprints/browsedate.html </li></ul>

×