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 |
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).
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.
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é :
Les quantités représentent une valeur limite.
Les index représentent l'identificateur maximum valide.
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.
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.
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 :
les chaînes d'unité qui conviennent à chaque contrôle de ressource ;
l'échelle à utiliser lors de l'interprétation des valeurs d'échelle.
Voici l'ensemble des indicateurs globaux disponibles :
Indicateur global |
Chaîne du type de contrôle de ressource |
Modificateur |
Échelle |
---|---|---|---|
RCTL_GLOBAL_BYTES |
octets |
B |
1 |
|
Ko |
210 |
|
|
Mo |
220 |
|
|
Go |
230 |
|
|
To |
240 |
|
|
Po |
250 |
|
|
EB |
260 |
|
RCTL_GLOBAL_SECONDS |
secondes |
s |
1 |
|
Ks |
103 |
|
|
Ms |
106 |
|
|
Gs |
109 |
|
|
Ts |
1012 |
|
|
Ps |
1015 |
|
|
Es |
1018 |
|
RCTL_GLOBAL_COUNT |
nombre |
aucune |
1 |
|
K |
103 |
|
|
M |
106 |
|
|
G |
109 |
|
|
T |
1012 |
|
|
P |
1015 |
|
|
E |
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)
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.
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.
De base (niveau modifiable par le propriétaire du processus d'appel)
Privilégié (niveau modifiable uniquement par des appelants privilégiés ou superutilisateurs)
Système (niveau fixé pour toute la durée de l'instance du système d'exploitation)
À 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é.
Il existe deux catégories d'actions applicables aux valeurs de contrôle de ressource : globale et locale.
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 :
Afficher l'état global des contrôles de ressources système actifs
Définir les actions de consignation globales
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 :
debug
info
notice
warning
err
crit
alert
emerg
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.
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 :
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é.
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).
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). |
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.
Il n'est pas utile de posséder des privilèges de superutilisateur pour abaisser les valeurs privilégiées pour ce contrôle.
Même en cas de dépassement des valeurs de seuil, l'accès à la ressource n'est jamais refusé.
Le signal SIGXCPU peut être envoyé lorsque les valeurs de seuil de cette ressource sont atteintes.
Valeur temporelle pour le contrôle de ressource.
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.
Il est impossible de définir une action locale de signal pour les valeurs de contrôle de ressource.
L'action globale de message syslog ne peut pas être définie pour ce contrôle de ressource.
Les requêtes de ressources sont refusées dès que les valeurs de seuil sont atteintes.
Valeur numérique (entier) pour le contrôle de ressource.
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.
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.
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).