Guide d'administration du système Solaris Resource Manager 1.3

Chapitre 7 Limites de mémoire, de mémoire de processus et de comptage de processus

Solaris Resource Manager permet à un administrateur de contrôler :

Attributs pour le contrôle de la mémoire virtuelle (total)

Les attributs système qui sont utilisés pour enregistrer l'utilisation de mémoire virtuelle et lui assigner des limites sont :

memory.myusage

L'attribut memory.myusage d'un noeud limite est égal à la somme de l'utilisation de la mémoire virtuelle de tous les processus actuellement reliés à ce noeud.

memory.usage

L'attribut memory.usage d'un noeud limite est égal à la somme de son attribut memory.myusage et des attributs memory.usage de ses noeuds enfants.

memory.limit

L'attribut memory.limit est appliqué à l'attribut memory.usage. Il limite l'utilisation conjointe de la mémoire par tous les processus reliés au noeud limite et aux noeuds membres.

Attribut pour le contrôle de la mémoire de processus (par processus)

L'attribut système qui est utilisé pour enregistrer l'utilisation des processus et d'y assigner des limites est :

memory.plimit

L'attribut memory.plimit d'un noeud limite est une limite par processus appliquée séparément à l'utilisation de mémoire de chaque processus qui est relié à ce noeud ou à ses membres.

Description technique des limites de mémoire

Chaque fois qu'un processus tente d'accroître sa taille de mémoire, il est assujetti aux limites de mémoire (totale et par processus) du noeud limite auquel il est relié. Un processus dispose de cinq méthodes pour tenter d'accroître sa taille de mémoire :

  1. Appel d'une routine d'attribution telle que malloc(3C), qui lance un appel système sbrk(2). Si une limite de mémoire est dépassée, l'appel renvoie une erreur portant le code ENOMEM.

  2. Expansion d'une pile provoquant une défaillance de pile, ce qui cause normalement le transfert d'une page de mémoire additionnelle au processus. Si une limite de mémoire est dépassée, un signal SIGSEGV est envoyé au processus.

  3. Utilisation de mmap( 2).

  4. Utilisation de fork( 2). L'espace adresse enfant est dupliqué tout en demeurant la propriété du processus père. Lors de la duplication, le nouvel espace d'adressage ne dépassera pas memory.plimit puisque le père doit déjà se trouver dans cette limite.Cependant, l'attribution est tributaire de memory.plimit.

  5. Utilisation de exec( 2). Lors d'une commande exec, l'utilisation mémoire décroît lorsque l'ancien espace adresse est supprimé. Cependant, si l'espace d'adressage du nouveau programme est supérieur et entraîne le dépassement de la limite, exec peut échouer.

Reconfiguration dynamique et limites de mémoire virtuelle

La fonction de reconfiguration dynamique (RD) des systèmes Enterprise 10000, Sun Fire 15K et Sun Fire 12K a peu d'effets sur les limites de mémoire virtuelle imposées aux noeuds limites. Plus précisément, la RD permet d'ajouter ou de supprimer de la mémoire physique du système pendant son fonctionnement (le pool de mémoire virtuelle du système comprend toute la mémoire physique et l'espace d'échange configuré dans le système). De plus, la commande swap(1M) peut être exécutée sur tout système Solaris pour ajouter (- a) ou supprimer (-d) de l'espace d'échange sur le système. De cette façon, la mémoire virtuelle totale peut augmenter et diminuer pendant le fonctionnement du système.

Cette procédure a un effet indirect sur les limites de mémoire virtuelle imposées par Solaris Resource Manager. La mémoire virtuelle étant gérée en unités absolues (plutôt que par parts), les limites effectives ne changent pas lorsque les ressources du système sont modifiées pendant son fonctionnement (notez que cet effet est différent de celui de la reconfiguration dynamique des processeurs, décrite à la rubrique Reconfiguration dynamique).

Attributs pour le contrôle du comptage de processus

Les attributs système utilisés pour gérer l'utilisation des processus (nombre de processus) sont les suivants :

process.myusage

L'attribut process.myusage d'un noeud limite est égal au nombre de processus reliés à ce noeud.

process.usage

L'attribut process.usage d'un noeud limite est égal à la somme de son attribut process.myusage et des attributs process.usage de ses noeuds enfants.

process.limit

L'attribut process.limit est une limite appliquée à l'attribut process.usage d'un noeud limite, afin de limiter le nombre de processus pouvant être reliés simultanément à ce noeud et à tous les noeuds membres.

Description technique du comptage de processus

Les appels système fork(2) et vfork( 2) sont utilisés pour créer de nouveaux processus. Si la limite de processus était dépassée, l'appel système échouerait et renverrait une erreur EAGAIN. La plupart des programmes interprètent EAGAIN comme un manque temporaire de ressources système et réexécutent fork après une courte pause. Si l'échec de fork est causé par une limite de Solaris Resource Manager, cela peut générer une boucle qui sera exécutée indéfiniment du fait que EAGAIN sera renvoyé à chaque tentative jusqu'à ce que la limite fixée pour le noeud concerné soit atteinte.