Guide d'administration système : Gestion des ressources des conteneurs et des zones Oracle Solaris

Configuration des contrôles de ressources et des attributs

L'utilitaire de contrôle des ressources se configure via la base de données project . Reportez-vous au Chapitre 2Projets et tâches (présentation). Les contrôles de ressources et les autres attributs sont définis dans le dernier champ de l'entrée de la base de données project. Les valeurs associées à chaque contrôle de ressource sont mises entre parenthèses et affichées sous forme de texte simple séparé par des virgules. Les valeurs entre parenthèses représentent une clause d'action. Chaque clause d'action est définie par un niveau de privilège, une valeur de seuil et une action associée au seuil en question. À chaque contrôle de ressource peuvent correspondre plusieurs clauses d'action (séparées également par des virgules). L'entrée suivante fixe une valeur limite de processus léger par tâche et le temps CPU maximum par processus au niveau d'une entité de projet. Dans cette configuration, le contrôle process.max-cpu-time se chargerait d'envoyer un signal SIGTERM au processus au bout d'une heure d'exécution et un signal SIGKILL si le processus avait continué à fonctionner pendant une durée totale de 1 heure et 1 minute. Voir le Tableau 6–3.


development:101:Developers:::task.max-lwps=(privileged,10,deny);
  process.max-cpu-time=(basic,3600,signal=TERM),(priv,3660,signal=KILL)
typed as one line

Remarque –

Sur les systèmes dont les zones sont activées, les contrôles de ressources à l'échelle des zones sont spécifiés dans la configuration de zone sous un format légèrement différent. Pour plus d'informations, reportez-vous à la section Données de configuration de zones.


La commande rctladm permet de procéder à des interrogations d'exécution et à des modifications de l'utilitaire de contrôle des ressources, en fonction d'un champ d'application global. La commande prctl permet de procéder à des interrogations d'exécution et à des modifications de l'utilitaire de contrôle des ressources, en fonction d'un champ d'application local.

Pour plus d'informations, reportez-vous à la section Actions globales et locales applicables aux valeurs de contrôle de ressource et aux pages de manuel rctladm(1M) et prctl(1).


Remarque –

Sur un système sur lequel des zones sont installées, il n'est pas possible d'appliquer la commande rctladm à une zone non globale pour modifier des paramètres. Vous pouvez vous servir de la commande rctladm dans une zone non globale pour afficher l'état de consignation globale de chaque contrôle de ressource.


Contrôles de ressources disponibles

Le tableau suivant présente la liste des contrôles de ressources standard disponibles dans cette version.

Il décrit la ressource à laquelle chaque contrôle s'applique. Il identifie également les unités par défaut utilisées par la base de données project pour cette ressource. On distingue deux types d'unité :

project.cpu-shares indique, par exemple, le nombre de parts auquel le projet a droit. process.max-file-descriptor spécifie le numéro de fichier le plus élevé attribuable à un processus par l'appel système open(2).

Tableau 6–1 Contrôles de ressources standard

Nom de la commande 

Description 

Unité par défaut 

project.cpu-cap

Solaris 10 8/07 : limite absolue des ressources de la CPU pouvant être consommées par un projet. La valeur 100 représente 100 % d'une CPU pour le paramètre project.cpu-cap. La valeur 1,25 équivaut à 125 %, car 100 % correspond à une capacité de CPU complète sur le système.

Quantité (nombre de CPU) 

project.cpu-shares

Nombre de parts de CPU accordées à ce projet et susceptibles d'être utilisées par l'ordonnanceur FSS (voir la page de manuel FSS(7)).

Quantité (partages) 

project.max-crypto-memory

Quantité totale de mémoire du noyau utilisable par libpkcs11 pour l'accélération matérielle cryptographique. Les valeurs prévues pour les tampons du noyau et les structures liées à la session sont allouées conformément à ce contrôle de ressource.

Taille (octets) 

project.max-locked-memory

Quantité totale de mémoire physique verrouillée autorisée. 

Lorsque le contrôle priv_proc_lock_memory est appliqué à un utilisateur, pensez également à définir ce contrôle de ressource pour empêcher cet utilisateur de verrouiller toute la mémoire.

Solaris 10 8/07 : notez que dans cette version, ce contrôle de ressources a remplacé project.max-device-locked-memory, lequel a été supprimé.

Taille (octets) 

project.max-port-ids

Nombre maximum autorisé de ports pairs. 

Quantité (nombre de ports pairs)  

project.max-sem-ids

Nombre maximum d'ID de sémaphore autorisé pour ce projet. 

Quantité (ID de sémaphore) 

project.max-shm-ids

Nombre maximum d'ID de mémoire partagée autorisé pour ce projet. 

Quantité (ID de mémoire partagée) 

project.max-msg-ids

Nombre maximum d'ID de file d'attente des messages autorisé pour ce projet. 

Quantité (ID de file d'attente des messages) 

project.max-shm-memory

Quantité totale de mémoire partagée System V autorisée pour ce projet. 

Taille (octets) 

project.max-lwps

Nombre maximum de LWP accessibles simultanément par ce projet. 

Quantité (LWP) 

project.max-tasks

Nombre maximum de tâches autorisé dans ce projet. 

Quantité (nombre de tâches) 

project.max-contracts

Nombre maximum de contrats autorisé dans ce projet. 

Quantité (contrats) 

task.max-cpu-time

Temps CPU maximum disponible pour les processus de cette tâche. 

Temps (secondes) 

task.max-lwps

Nombre maximum de LWP accessibles simultanément par les processus de cette tâche. 

Quantité (LWP) 

process.max-cpu-time

Temps CPU maximum disponible pour ce processus. 

Temps (secondes) 

process.max-file-descriptor

Index de descripteur de fichier maximum disponible pour ce processus. 

Index (descripteur de fichier maximum) 

process.max-file-size

Décalage de fichier maximum accessible en écriture par ce processus. 

Taille (octets) 

process.max-core-size

Taille maximum d'un fichier Core créé par ce processus. 

Taille (octets) 

process.max-data-size

Mémoire du tas maximum disponible pour ce processus. 

Taille (octets) 

process.max-stack-size

Segment de mémoire du tas maximum disponible pour ce processus. 

Taille (octets) 

process.max-address-space

Quantité d'espace d'adressage maximum (résultant de la somme des tailles de segment), disponible pour ce processus. 

Taille (octets) 

process.max-port-events

Nombre maximum d'événements autorisé par port pair. 

Quantité (nombre d'événements)  

process.max-sem-nsems

Nombre maximum de sémaphores autorisé par jeu de sémaphores. 

Quantité (sémaphores par jeu) 

process.max-sem-ops

Nombre maximum d'opérations de sémaphore autorisé par appel semop (valeur copiée à partir du contrôle de ressource au moment semget()).

Quantité (nombre d'opérations) 

process.max-msg-qbytes

Nombre maximum d'octets de messages dans une file d'attente de messages (valeur copiée à partir du contrôle de ressource au moment msgget()).

Taille (octets) 

process.max-msg-messages

Nombre maximum de messages dans une file d'attente de messages (valeur copiée à partir du contrôle de ressource au moment msgget()).

Quantité (nombre de messages) 

Vous pouvez afficher les valeurs par défaut des contrôles de ressources sur un système pour lequel aucun contrôle de ressource n'a été défini ou modifié. Un tel système contient les entrées autres que celles par défaut dans le fichier /etc/system ou dans la base de données project . Pour afficher les valeurs, servez-vous de la commande prctl.

Contrôles des ressources à l'échelle d'une zone

L'intérêt de ces contrôles est de limiter l'utilisation des ressources totales pour l'ensemble des entités processus à l'intérieur d'une zone. Ils peuvent également être configurés en utilisant des noms de propriétés globales comme cela est décrit dans les sections Paramétrage des contrôles de ressources à l'échelle d'une zone et Configuration d'une zone.

Tableau 6–2 Contrôles des ressources à l'échelle d'une zone

Nom de la commande 

Description 

Unité par défaut 

zone.cpu-cap

Solaris 10 5/08 : limite absolue des ressources de la CPU pouvant être consommées par une zone non globale. La valeur 100 représente 100 % d'une CPU pour le paramètre project.cpu-cap. La valeur 1,25 équivaut à 125 %, car 100 % correspond à une capacité de CPU complète sur le système.

Quantité (nombre de CPU) 

zone.cpu-shares

Nombre de partages CPU de l'ordonnanceur FSS pour cette zone. 

Quantité (partages) 

zone.max-locked-memory

Quantité totale de mémoire physique verrouillée accessible par une zone. 

Lorsque le contrôle priv_proc_lock_memory est appliqué à une zone, pensez également à définir ce contrôle de ressource pour empêcher cette zone de verrouiller toute la mémoire.

Taille (octets) 

zone.max-lwps

Nombre maximum de LWP accessibles simultanément par cette zone. 

Quantité (LWP) 

zone.max-msg-ids

Nombre maximum d'ID de file d'attente des messages autorisé pour cette zone. 

Quantité (ID de file d'attente des messages) 

zone.max-sem-ids

Nombre maximum d'ID de sémaphore autorisé pour cette zone. 

Quantité (ID de sémaphore) 

zone.max-shm-ids

Nombre maximum d'ID de mémoire partagée autorisé pour cette zone. 

Quantité (ID de mémoire partagée) 

zone.max-shm-memory

Quantité totale de mémoire partagée System V autorisée pour cette zone. 

Taille (octets) 

zone.max-swap

Quantité totale de swap utilisable par les mappages d'espace d'adressage des processus utilisateur et les montages tmpfs pour cette zone.

Taille (octets) 

Pour plus d'informations sur la configuration des contrôles de ressources à l'échelle d'une zone, reportez-vous aux sections Propriétés des types de ressources et Configuration d'une zone. Pour tirer parti des contrôles de ressources à l'échelle d'une zone dans les zones marquées lx, reportez-vous à la section Configuration, vérification et validation de la zone marquée lx.

Notez qu'il est possible d'appliquer à la zone globale un contrôle de ressource à l'échelle d'une zone. Pour obtenir des informations supplémentaires, reportez-vous au Chapitre 17Configuration des zones non globales (présentation) et à la section Utilisation de l'ordonnanceur FSS sur un système Solaris doté de zones.

Prise en charge des unités

Les indicateurs globaux permettant d'identifier les types de contrôles de ressources sont définis pour l'ensemble des contrôles de ressources. Le système utilise ces indicateurs pour communiquer des informations de type de base aux applications telles que la commande prctl. Les applications se servent de ces informations pour déterminer :

Voici l'ensemble des indicateurs globaux disponibles :

Indicateur global 

Chaîne du type de contrôle de ressource 

Modificateur 

Échelle 

RCTL_GLOBAL_BYTES 

octets 

 

Ko 

210

 

Mo 

220

 

Go 

230

 

To 

240

 

Po 

250

 

EB 

260

RCTL_GLOBAL_SECONDS 

secondes 

 

Ks 

103

 

Ms 

106

 

Gs 

109

 

Ts 

1012

 

Ps 

1015

 

Es 

1018

RCTL_GLOBAL_COUNT 

nombre 

aucune 

 

103

 

106

 

109

 

1012

 

1015

 

1018

Les valeurs d'échelle peuvent être employées avec des contrôles de ressources. L'exemple suivant illustre une valeur de seuil à l'échelle :

task.max-lwps=(priv,1K,deny)

Remarque –

Les modificateurs d'unité sont acceptés par les commandes prctl, projadd et projmod. Vous ne pouvez pas utiliser des modificateurs d'unité dans la base de données project elle-même.


Valeurs des contrôles de ressources et niveaux de privilège

Une valeur de seuil appliquée à un contrôle de ressource constitue le seuil de déclenchement d'actions locales ou de mise en œuvre d'actions globales telles que la consignation.

Chaque valeur de seuil d'un contrôle de ressource doit être associé à un niveau de privilège. Trois niveaux de privilège sont aurtorisés.

À chaque contrôle de ressource correspond une seule et même valeur système définie par le système ou par le fournisseur de ressource. La valeur système représente la quantité de ressource susceptible d'être fournie par l'implémentation actuelle du système d'exploitation.

Il est possible de définir un nombre quelconque de valeurs privilégiées, mais une seule valeur de base est autorisée. Un privilège de base par défaut est assigné aux opérations pour lesquelles aucune valeur privilégiée n'a été prévue.

Le niveau de privilège pour une valeur de contrôle de ressource est défini dans le champ correspondant du bloc de contrôle de ressource sous la forme RCTL_BASIC, RCTL_PRIVILEGED ou RCTL_SYSTEM. Pour plus d'informations, voir setrctl(2) Vous pouvez faire appel à la commande prctl pour modifier les valeurs associées au niveau de base et au niveau privilégié.

Actions globales et locales applicables aux valeurs de contrôle de ressource

Il existe deux catégories d'actions applicables aux valeurs de contrôle de ressource : globale et locale.

Actions globales applicables aux valeurs de contrôle de ressource

Les actions globales s'appliquent aux valeurs de chaque contrôle de ressource du système. Vous pouvez également faire appel à la commande ctladm décrite dans la page de manuel rctladm(1M) pour réaliser les actions suivantes :

Vous avez la possibilité d'activer ou de désactiver l'action de consignation globale pour les contrôles de ressources. Vous pouvez configurer l'action syslog jusqu'à un degré spécifique en assignant un niveau de gravité, syslog=niveau. Voici les différents paramètres sélectionnables pour le niveau :

Par défaut, les violations de contrôle de ressource ne font pas l'objet d'une consignation globale. Dans la version Solaris 10 5/08, le niveau n/a a été ajouté pour les contrôles de ressources sur lesquels aucune action globale ne peut être configurée.

Actions locales applicables aux valeurs de contrôle de ressource

Les actions locales s'exercent dans le cadre d'un processus qui essaie de dépasser la valeur de contrôle. Il est possible d'associer une ou plusieurs actions à chaque valeur de seuil appliquée à un contrôle de ressource. Il existe trois types d'action locale : none, deny et signal=. Ces trois actions sont utilisées dans les conditions suivantes :

none

Les demandes de ressources d'une quantité supérieure au seuil fixé ne sont suivies d'aucune action. Cela est pratique pour contrôler l'utilisation des ressources sans perturber le déroulement des applications en cours. Vous pouvez également prévoir l'affichage d'un message global en cas de dépassement du contrôle de ressource, même si cela n'a aucune incidence sur le processus concerné.

deny

Les demandes de ressources d'une quantité supérieure au seuil fixé sont refusées. Ainsi, un contrôle de ressource task.max-lwps pour lequel vous avez choisi l'action deny provoque l'échec de l'appel système fork si le nouveau processus dépasse la valeur de contrôle. Voir la page de manuel fork(2).

signal=

Vous pouvez demander l'émission d'un signal en cas de dépassement du contrôle de ressource. Le signal est alors transmis au processus. Aucun autre signal n'est envoyé si le processus utilise des ressources supplémentaires. Les signaux disponibles sont répertoriés dans le Tableau 6–3.

Ces actions ne sont pas toutes applicables à chaque contrôle de ressource. Un processus n'est pas en mesure, par exemple, de dépasser le nombre de parts de CPU allouées au projet dont il est membre. L'action deny n'est, par conséquent, pas applicable au contrôle de ressource project.cpu-shares.

En raison des restrictions liées à l'implémentation, les propriétés globales de chaque contrôle peuvent limiter le champ d'actions programmables pour la valeur de seuil. Voir la page de manuel rctladm(1M). Le tableau suivant récapitule les actions ayant pour effet d'émettre un signal. Pour plus d'informations au sujet des signaux, voir la page de manuel signal(3HEAD).

Tableau 6–3 Signaux disponibles pour les valeurs des contrôles de ressources

Signal 

Description 

Remarques 

SIGABRT 

Met fin au processus. 

 

SIGHUP 

Envoie un signal de déconnexion. Cela se produit en cas d'abandon de la porteuse sur une ligne. Le signal est transmis au groupe de processus qui contrôle le terminal. 

 

SIGTERM 

Met fin au processus. Signal d'interruption envoyé par le logiciel. 

 

SIGKILL 

Met fin au processus et interrompt le programme. 

 

SIGSTOP 

Arrête le processus. Signal de contrôle du travail. 

 

SIGXRES 

Signal envoyé en cas de dépassement de la limite de contrôle de ressource. Généré par l'utilitaire de contrôle des ressources. 

 

SIGXFSZ 

Met fin au processus. Signal envoyé en cas de dépassement de la limite de taille de fichier. 

Concerne uniquement les contrôles de ressources possédant la propriété RCTL_GLOBAL_FILE_SIZE (process.max-file-size). Pour plus d'informations, voir la page de manuel rctlblk_set_value(3C).

SIGXCPU 

Met fin au processus. Signal envoyé en cas de dépassement de la limite du temps CPU. 

Concerne uniquement les contrôles de ressources possédant la propriété RCTL_GLOBAL_CPUTIME (process.max-cpu-time). Pour plus d'informations, voir la page de manuel rctlblk_set_value(3C).

Indicateurs et propriétés des contrôles de ressources

Chaque contrôle de ressource sur le système est associé à un jeu de propriétés bien précis. Ce jeu de propriétés correspond à un ensemble d'indicateurs lesquels sont associés à toutes les instances gérées de cette ressource. Vous ne pouvez pas modifier les indicateurs globaux, mais il est possible de récupérer les indicateurs à l'aide de l'appel système rctladm ou getrctl.

Les indicateurs locaux définissent le comportement et la configuration par défaut pour une valeur de seuil donnée du contrôle de ressource appliqué à un processus particulier ou à un ensemble de processus. Les indicateurs locaux prévus pour une valeur de seuil n'ont pas d'incidence sur le comportement des autres valeurs de seuil définies pour le même contrôle de ressource. En revanche, les indicateurs globaux changent le comportement de chacune des valeurs associées à un contrôle particulier. Il est possible de modifier les indicateurs locaux (en respectant les contraintes fournies par les indicateurs globaux correspondants) au moyen de la commande prctl ou de l'appel système setrctl. Voir la page de manuel setrctl(2).

Pour obtenir la liste complète des indicateurs locaux, des indicateurs globaux et de leurs définitions, voir la page de manuel rctlblk_set_value(3C).

Pour déterminer le comportement du système lorsqu'une valeur de seuil d'un contrôle de ressource est atteint, exécutez la commande rctladm pour afficher les indicateurs globaux du contrôle de ressource qui vous intéresse. Pour afficher, par exemple, les valeurs de process.max-cpu-time, entrez l'instruction suivante :


$ rctladm process.max-cpu-time
	process.max-cpu-time  syslog=off  [ lowerable no-deny cpu-time inf seconds ]

Les indicateurs globaux ont la signification suivante.

lowerable

Il n'est pas utile de posséder des privilèges de superutilisateur pour abaisser les valeurs privilégiées pour ce contrôle.

no-deny

Même en cas de dépassement des valeurs de seuil, l'accès à la ressource n'est jamais refusé.

cpu-time

Le signal SIGXCPU peut être envoyé lorsque les valeurs de seuil de cette ressource sont atteintes.

seconds

Valeur temporelle pour le contrôle de ressource.

no-basic

Il est impossible de définir une valeur de contrôle de ressource avec un privilège de type basic. Seules les valeurs de privilège élevé sont autorisées.

no-signal

Il est impossible de définir une action locale de signal pour les valeurs de contrôle de ressource.

no-syslog

L'action globale de message syslog ne peut pas être définie pour ce contrôle de ressource.

deny

Les requêtes de ressources sont refusées dès que les valeurs de seuil sont atteintes.

count

Valeur numérique (entier) pour le contrôle de ressource.

bytes

Unité de taille pour le contrôle de ressource.

Servez-vous de la commande prctl pour afficher les valeurs et actions locales pour le contrôle de ressource.


$ prctl -n process.max-cpu-time $$
	process 353939: -ksh
	NAME    PRIVILEGE    VALUE    FLAG   ACTION              RECIPIENT
 process.max-cpu-time
         privileged   18.4Es    inf   signal=XCPU                 -
         system       18.4Es    inf   none 

L'indicateur max (RCTL_LOCAL_MAXIMAL) est défini pour les deux valeurs de seuil et l'indicateur inf (RCTL_GLOBAL_INFINITE) s'applique à ce contrôle de ressource. Une valeur inf représente une quantité infinie. La valeur n'est jamais imposée. Telles qu'elles sont configurées, les deux quantités limites représentent des valeurs infinies qui ne sont jamais dépassées.

Mise en œuvre des contrôles de ressources

Il est possible d'appliquer plusieurs contrôles de ressources à une même ressource. Vous pouvez définir un contrôle de ressource à chaque niveau d'imbrication dans le modèle de processus. Si des contrôles de ressources sont appliqués à la même ressource à différents niveaux d'imbrication, c'est le contrôle du plus petit conteneur qui est mis en œuvre en premier. Ainsi, l'action serait appliquée à process.max-cpu-time avant d'être appliquée à task.max-cpu-time si les deux contrôles sont découverts en même temps.

Figure 6–1 Collections de processus, relations entre conteneurs et jeux de contrôles de ressources correspondants

Cette illustration montre la façon dont chaque contrôle de ressource est mis en œuvre à son niveau d'imbrication.

Contrôle global des événements de contrôle de ressource

La quantité de ressources utilisée par les processus est bien souvent inconnue. Pour obtenir des informations supplémentaires, essayez d'utiliser les actions globales de contrôle de ressource auxquelles la commande rctladm donne accès. Exécutez la commande rctladm pour établir une action syslog sur un contrôle de ressource. Si une entité gérée par ce contrôle de ressource rencontre une valeur de seuil, un message système est consigné dans le journal au niveau de consignation configuré. Pour plus d'informations, reportez-vous au Chapitre 7Administration des contrôles des ressources (tâches) et à la page de manuel rctladm(1M).