Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Scheduling et gestion des ressources CPU sous Solaris

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.

  • Be the first to comment

  • Be the first to like this

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>

×