Après avoir déterminé la façon dont les ressources sont utilisées par les charges de travail sur votre système, tel que décrit au Chapitre 4Comptabilisation étendue (présentation), il est important de fixer des limites pour éviter une surexploitation des ressources. L'utilitaire de contrôle des ressources permet justement de mettre en place un mécanisme de contraintes.
Ce chapitre se compose des sections suivantes :
Pour plus d'informations sur le mode d'administration des contrôles de ressources, reportez-vous au Chapitre 7Administration des contrôles des ressources (tâches).
Le jeu de contrôles de ressources suivant remplace les paramètres réglables de communication interprocessus (IPC) System V /etc/system :
project.max-shm-ids
project.max-msg-ids
project.max-sem-ids
project.max-shm-memory
process.max-sem-nsems
process.max-sem-ops
process.max-msg-qbytes
Les contrôles de ressources de port d'événement suivants ont été ajoutés :
project.max-device-locked-memory
project.max-port-ids
process.max-port-events
Le contrôle de ressource cryptographique suivant a été ajouté :
project.max-crypto-memory
Les contrôles de ressources supplémentaires suivants ont été ajoutés :
project.max-lwps
project.max-tasks
project.max-contracts
Pour plus d'informations, reportez-vous à la section Contrôles de ressources disponibles.
Vous trouverez une liste complète des nouvelles fonctionnalités de Solaris 10 et la description des différentes versions de Solaris dans le guide Nouveautés apportées à Oracle Solaris 10 9/10.
Dans le système d'exploitation Solaris, le concept de limitation de ressources par processus a été étendu aux entités tâche et projet décrites au Chapitre 2Projets et tâches (présentation). Ces améliorations sont liées à l'utilitaire de contrôle des ressources (rctls). De plus, les allocations définies par le biais des paramètres réglables /etc/system sont désormais automatiques ou configurées également via le mécanisme de contrôle des ressources.
Un contrôle de ressource est identifié par le préfixe zone, project, task ou process. Les contrôles de ressources peuvent être observés à l'échelle d'un système. Il est possible de mettre à jour les valeurs des contrôles de ressources sur un système en cours d'exécution.
Pour afficher la liste des contrôles de ressources standard disponibles dans cette version, reportez-vous à la section Contrôles de ressources disponibles. Pour plus d'informations sur les contrôles de ressources disponibles à l'échelle d'une zone, reportez-vous à la section Propriétés des types de ressources.
Pour connaître les contrôles de ressources standard disponibles dans cette version, reportez-vous à la section Contrôles de ressources disponibles.
Les systèmes UNIX proposent, par tradition, un utilitaire de limitation des ressources (rlimit). L'utilitaire rlimit permet aux administrateurs de prévoir une ou plusieurs limites numériques quant à l'utilisation des ressources mises à la disposition d'un processus. Ces limites concernent aussi bien le temps CPU par processus que la taille du fichier Core par processus et la taille du tas maximum par processus. La taille du tas correspond à la quantité de mémoire de travail allouée au segment de données du processus.
L'utilitaire de contrôle des ressources fournit des interfaces de compatibilité à l'utilitaire de limitation des ressources. Les applications existantes auxquelles des contraintes d'utilisation des ressources ont déjà été appliquées continuent de fonctionner normalement. Ces applications peuvent être observées de la même manière que les applications modifiées dans le but de tirer parti de l'utilitaire de contrôle des ressources.
Les processus peuvent communiquer entre eux en utilisant l'un des différents types de communication interprocessus (IPC). Le protocole de communication interprocessus (IPC) assure le transfert ou la synchronisation des informations entre les processus. Avant la version Solaris 10, les paramètres réglables IPC étaient définis en ajoutant une entrée au fichier /etc/system. L'utilitaire de contrôle des ressources propose désormais des contrôles de ressources qui régissent le comportement des utilitaires IPC du noyau. Ces contrôles de ressources remplacent les paramètres réglables /etc/system.
Des paramètres obsolètes peuvent être inclus dans le fichier /etc/system sur ce système Solaris. Dans ce cas, ces paramètres sont utilisés pour initialiser les valeurs par défaut de contrôle de ressource comme dans les versions précédentes de Solaris. Toutefois, l'utilisation des paramètres obsolètes est déconseillée.
Pour identifier les objets IPC qui participent au projet, exécutez la commande ipcs avec l'option -J. Pour obtenir un exemple, reportez-vous à la section Mode d'utilisation d'ipcs Pour plus d'informations au sujet de la commande ipcs, voir la page de manuel ipcs(1).
Pour plus d'informations sur le réglage du système Solaris, reportez-vous au Oracle Solaris Tunable Parameters Reference Manual.
Les contrôles de ressources offrent un mécanisme de contrainte des ressources système. Vous pouvez empêcher les processus, les tâches, les projets et les zones d'utiliser une quantité donnée des ressources système spécifiées. Ce mécanisme permet de gérer plus efficacement le système en empêchant une surexploitation des ressources.
Les mécanismes de contrainte peuvent servir à gérer les processus à planification de la capacité. La contrainte rencontrée peut fournir des indications sur les besoins en ressource de l'application sans refuser nécessairement la ressource à l'application.
Les contrôles de ressources peuvent également faire office de simple mécanisme d'attribut pour les utilitaires de gestion des ressources. Par exemple, le nombre de parts de CPU mises à la disposition d'un projet dans la classe de programmation de l'ordonnanceur FSS est défini par le contrôle de ressource project.cpu-shares. Étant donné qu'un nombre fixe de parts est attribué au projet par le contrôle, les diverses actions qui entrent en jeu en cas de dépassement d'un contrôle ne sont pas applicables. Dans ce contexte, la valeur actuelle du contrôle project.cpu-shares est considérée comme un attribut pour le projet spécifié.
Un autre type d'attribut de projet est utilisé pour réglementer la façon dont les ensembles de processus associés à un projet utilisent la mémoire physique. Ces attributs sont reconnaissables à leur préfixe rcap : rcap.max-rss , par exemple. Comme pour un contrôle de ressource, ce type d'attribut est configuré dans la base de données project. Cependant, à la différence des contrôles de ressources qui sont synchronisés par le noyau, les limitations des ressources sont appliquées de façon asynchrone au niveau utilisateur par le démon d'allocation restrictive rcapd . Pour plus d'informations sur la commande rcapd, reportez-vous au Chapitre 10Contrôle de la mémoire physique à l'aide du démon d'allocation restrictive (présentation) et à la page de manuel rcapd (1M).
L'attribut project.pool sert à spécifier une liaison de pool pour un projet. Pour plus d'informations sur les pools de ressources, reportez-vous au Chapitre 12Pools de ressources (présentation).
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).
Chaque contrôle de ressource répertorié dans le Tableau 6–1 peut être assigné à un projet au moment de la connexion ou lors de l'appel de la commande newtask, su ou des autres lanceurs at, batch ou cron. Chaque commande démarrée est exécutée dans une tâche distincte avec le projet par défaut de l'utilisateur à l'origine de l'appel. Pour plus d'informations, reportez-vous aux pages de manuel login(1), newtask(1), at(1), cron(1M) et su(1M).
Les mises à jour des entrées dans la base de données project, apportées au fichier /etc/project ou à une représentation de la base de données dans un service d'attribution de noms du réseau, ne sont pas appliquées aux projets actuellement actifs. Elles le sont dès lors qu'une nouvelle tâche rejoint le projet via une connexion ou la commande newtask.
Les valeurs modifiées dans la base de données project prennent effet uniquement pour les nouvelles tâches démarrées dans un projet. Vous pouvez, cependant, vous servir des commandes rctladm et prctl pour actualiser les contrôles de ressources sur un système en cours d'exécution.
La commande rctladm a une incidence sur l'état de consignation global de chaque contrôle de ressource à l'échelle d'un système. Elle est pratique pour afficher l'état global et configurer le niveau de consignation de syslog en cas de dépassement des contrôles.
Il est possible d'afficher et de modifier temporairement les valeurs des contrôles de ressources et les actions par processus, par tâche ou par projet en utilisant la commande prctl. La commande, basée sur l'entrée fournie par un ID de projet, de tâche ou de processus, s'applique au contrôle de ressource au niveau où le contrôle a été défini.
Les modifications apportées aux valeurs et aux actions prennent effet immédiatement. Cependant, ces modifications s'appliquent uniquement au processus, à la tâche ou au projet en cours. Elles ne sont pas consignées dans la base de données project. Elles sont donc automatiquement perdues au redémarrage du système. Pour qu'ils aient un caractère permanent, les changements des contrôles de ressources doivent être enregistrés dans la base de données project.
Tous les paramètres des contrôles de ressource susceptibles d'être changés dans la base de données project peuvent également être modifiés avec la commande prctl. Il est possible d'ajouter ou de supprimer aussi bien les valeurs de base que les valeurs privilégiées. Leurs actions peuvent aussi être modifiées. Par défaut, le type de base s'applique à toutes les opérations définies, mais les processus et les utilisateurs dotés des privilèges de superutilisateur sont également à même de modifier les contrôles de ressources privilégiés. Il est impossible de changer, en revanche, les contrôles de ressources système.
Les commandes s'appliquant aux contrôles de ressources sont présentées dans le tableau suivant.
Aide-mémoire des commandes |
Description |
---|---|
Permet d'identifier les objets IPC contribuant à l'utilisation d'un projet. |
|
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. |
|
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 page de manuel resource_controls(5) décrit les contrôles de ressources disponibles par l'intermédiaire de la base de données project, y compris les unités et les facteurs d'échelle.