Manuel de suivi dynamique Solaris

Chapitre 24 Fournisseur vminfo

Le fournisseur vminfo permet d'accéder aux sondes qui correspondent aux statistiques de noyau vm. Ces statistiques permettant d'accéder aux utilitaires de surveillance du système comme vmstat(1M), le fournisseur vminfo permet d'étudier rapidement le comportement anormal observé.

Sondes

Le fournisseur vminfo permet d'accéder aux sondes disponibles qui correspondent aux champs de statistiques de noyau nommées vm : une sonde fournie par vminfo se déclenche juste avant que la valeur vm correspondante ne soit incrémentée. Pour afficher les noms et les valeurs actuelles des statistiques de noyau nommées vm, utilisez la commande kstat(1M), comme illustré dans l'exemple suivant :


$ kstat -n vm
module: cpu                             instance: 0
name:   vm                              class:    misc
        anonfree                        13
        anonpgin                        2620
        anonpgout                       13
        as_fault                        12528831
        cow_fault                       2278711
        crtime                          202.10625712
        dfree                           1328740
        execfree                        0
        execpgin                        5541
        ...

Les sondes vminfo sont décrites dans le Tableau 24–1.

Tableau 24–1 Sondes vminfo

anonfree

Sonde qui se déclenche chaque fois qu'une page anonyme non modifiée est libérée dans le cadre de l'activité de pagination. Les pages anonymes correspondent aux pages qui ne sont pas associées à un fichier. Ces pages sont contenues dans la mémoire du tas, la mémoire de la pile ou la mémoire obtenue en mappant explicitement zero(7D).

anonpgin

Sonde qui se déclenche chaque fois qu'une page anonyme est chargée à partir d'un périphérique de swap. 

anonpgout

Sonde qui se déclenche chaque fois qu'une page anonyme modifiée est renvoyée vers un périphérique de swap. 

as_fault

Sonde qui se déclenche chaque fois qu'une erreur se produit sur une page, dès l'instant qu'il ne s'agit pas d'une erreur de protection ni d'une défaillance de copie-écriture. 

cow_fault

Sonde qui se déclenche chaque fois qu'une défaillance de copie-écriture se produit sur une page. arg0 contient le nombre de pages créées suite à la copie-écriture.

dfree

Sonde qui se déclenche chaque fois qu'une page est libérée suite à l'activité de pagination. Chaque fois que dfree se déclenche, une seule sonde anonfree, execfree ou fsfree se déclenche ultérieurement.

execfree

Sonde qui se déclenche chaque fois qu'une page exécutable non modifiée est libérée dans le cadre de l'activité de pagination. 

execpgin

Sonde qui se déclenche chaque fois qu'une page exécutable est chargée à partir de la sauvegarde de secours. 

execpgout

Sonde qui se déclenche chaque fois qu'une page exécutable modifiée est renvoyée vers la sauvegarde de secours. La pagination de la plupart des pages exécutables se produit en fonction de la sonde execfree. La sonde execpgout ne peut se déclencher que si une page exécutable est modifiée en mémoire, ce qui est rare dans la plupart des systèmes.

fsfree

Sonde qui se déclenche chaque fois qu'une page non modifiée de données système de fichiers est libérée dans le cadre de l'activité de pagination. 

fspgin

Sonde qui se déclenche chaque fois qu'une page de système de fichiers est chargée à partir de la sauvegarde de secours. 

fspgout

Sonde qui se déclenche chaque fois qu'une page de système de fichiers modifiée est renvoyée vers la sauvegarde de secours. 

kernel_asflt

Sonde qui se déclenche chaque fois qu'une erreur de page est détectée par le noyau sur une page de son propre espace d'adressage. Chaque fois que la sonde kernel_asflt se déclenche, elle est immédiatement précédée par le déclenchement de la sonde as_fault.

maj_fault

Sonde qui se déclenche chaque fois qu'une erreur de page se produit suite à une E/S à partir d'une sauvegarde de secours ou d'un périphérique de swap. Chaque fois que la sonde maj_fault se déclenche, elle est immédiatement précédée par le déclenchement de la sonde pgin.

pgfrec

Sonde qui se déclenche chaque fois qu'une page est retirée d'une liste de pages disponibles. 

pgin

Sonde qui se déclenche chaque fois qu'une page est chargée à partir d'une sauvegarde de secours ou d'un périphérique de swap. Cette sonde diffère de la sonde maj_fault en ce que maj_fault ne se déclenche que lorsqu'une page est chargée suite à une erreur de page. La sonde pgin se déclenche chaque fois qu'une page est chargée, quelle qu'en soit la raison.

pgout

Sonde qui se déclenche chaque fois qu'une page est renvoyée vers une sauvegarde de secours ou un périphérique de swap. 

pgpgin

Sonde qui se déclenche chaque fois qu'une page est chargée à partir d'une sauvegarde de secours ou d'un périphérique de swap. Les sondes pgpgin et pgin se différencient uniquement en ce que pgpgin contient le nombre de pages chargées en tant que arg0. arg0 est toujours égal à 1 avec la sonde pgin.

pgpgout

Sonde qui se déclenche chaque fois qu'une page est renvoyée vers une sauvegarde de secours ou un périphérique de swap. Les sondes pgpgout et pgout se différencient uniquement en ce que pgpgout contient le nombre de pages chargées en tant que arg0. arg0 est toujours égal à 1 avec la sonde pgout.

pgrec

Sonde qui se déclenche à chaque récupération d'une page. 

pgrrun

Sonde qui se déclenche chaque fois que le pager est programmé. 

pgswapin

Sonde qui se déclenche chaque fois que des pages d'un processus déchargé sont chargées en mémoire. Le nombre de pages chargées en mémoire est indiqué dans arg0.

pgswapout

Sonde qui se déclenche chaque fois que des pages sont déchargées dans le cadre du déchargement d'un processus. Le nombre de pages déchargées de la mémoire est indiqué dans arg0.

prot_fault

Sonde qui se déclenche chaque fois qu'une erreur de page se produit à cause d'une violation de la protection. 

rev

Sonde qui se déclenche chaque fois que la page Daemon entame une nouvelle révolution de toutes les pages. 

scan

Sonde qui se déclenche chaque fois que la page Daemon examine une page. 

softlock

Sonde qui se déclenche chaque fois qu'une page est défaillante dans le cadre du placement d'un verrou logiciel sur la page. 

swapin

Sonde qui se déclenche chaque fois qu'un processus déchargé est rechargé. 

swapout

Sonde qui se déclenche chaque fois qu'un processus est déchargé. 

zfod

Sonde qui se déclenche chaque fois qu'une page remplie de zéros est créée à la demande. 

Arguments

arg0

Valeur de laquelle les statistiques sont incrémentées. Cet argument est toujours de 1 pour la plupart des sondes, mais il peut également prendre une autre valeur avec les sondes présentées dans le Tableau 24–1.

arg1

Pointeur vers la valeur courante des statistiques à incrémenter. Cette valeur, d'une quantité de 64–bits, sera incrémentée de la valeur de arg0. Déréférencer ce pointeur permet aux utilisateurs de déterminer la valeur courante des statistiques correspondant à la sonde.

Exemple

Examinez la sortie suivante de vmstat(1M) :


kthr      memory            page            disk          faults      cpu
 r b w   swap  free  re  mf pi po fr de sr cd s0 — —   in   sy   cs us sy id
 0 1 0 1341844 836720 26 311 1644 0 0 0  0 216 0  0  0  797  817  697  9 10 81
 0 1 0 1341344 835300 238 934 1576 0 0 0 0 194 0  0  0  750 2795  791  7 14 79
 0 1 0 1340764 833668 24 165 1149 0 0 0  0 133 0  0  0  637  813  547  5  4 91
 0 1 0 1340420 833024 24 394 1002 0 0 0  0 130 0  0  0  621 2284  653 14  7 79
 0 1 0 1340068 831520 14 202 380 0 0  0  0 59  0  0  0  482 5688 1434 25  7 68

La colonne pi de la sortie ci-dessus indique le nombre de pages chargées. Le fournisseur vminfo vous permet d'obtenir davantage d'informations sur la source de ces chargements de page, comme illustré dans l'exemple suivant :


dtrace -n pgin'{@[execname] = count()}'
dtrace: description 'pgin' matched 1 probe
^C
  xterm                                                             1
  ksh                                                               1
  ls                                                                2
  lpstat                                                            7
  sh                                                               17
  soffice                                                          39
  javaldx                                                         103
  soffice.bin                                                    3065

La sortie indique qu'un processus associé au logiciel StarOfficeTM, soffice.bin, est responsable de la plupart des chargements de page. Pour vous faire une meilleure idée du comportement de soffice.bin dans la mémoire virtuelle, vous pouvez activer toutes les sondes vminfo. L'exemple suivant exécute dtrace(1M) tout en lançant le logiciel StarOffice :


dtrace -P vminfo'/execname == "soffice.bin"/{@[probename] = count()}'
dtrace: description 'vminfo' matched 42 probes
^C

  kernel_asflt                                                      1
  fspgin                                                           10
  pgout                                                            16
  execfree                                                         16
  execpgout                                                        16
  fsfree                                                           16
  fspgout                                                          16
  anonfree                                                         16
  anonpgout                                                        16
  pgpgout                                                          16
  dfree                                                            16
  execpgin                                                         80
  prot_fault                                                       85
  maj_fault                                                        88
  pgin                                                             90
  pgpgin                                                           90
  cow_fault                                                       859
  zfod                                                           1619
  pgfrec                                                         8811
  pgrec                                                          8827
  as_fault                                                       9495

L'exemple de script suivant fournit davantage d'informations sur le comportement en mémoire virtuelle du logiciel StarOffice pendant le démarrage :

vminfo:::maj_fault,
vminfo:::zfod,
vminfo:::as_fault
/execname == "soffice.bin" && start == 0/
{
	/*
	 * This is the first time that a vminfo probe has been hit; record
	 * our initial timestamp.
	 */
	start = timestamp;
}

vminfo:::maj_fault,
vminfo:::zfod,
vminfo:::as_fault
/execname == "soffice.bin"/
{
	/*
	 * Aggregate on the probename, and lquantize() the number of seconds
	 * since our initial timestamp.  (There are 1,000,000,000 nanoseconds
	 * in a second.)  We assume that the script will be terminated before
	 * 60 seconds elapses.
	 */
	@[probename] =
	    lquantize((timestamp - start) / 1000000000, 0, 60);
}

Exécutez le script tout en lançant à nouveau le logiciel StarOffice. Créez ensuite un nouveau dessin, puis une nouvelle présentation, fermez tous les fichiers et quittez l'application. Appuyez sur Control-C dans le shell dans lequel le script D est exécuté. Les résultats fournissent un aperçu du comportement en mémoire virtuelle dans le temps :


# dtrace -s ./soffice.d
dtrace: script './soffice.d' matched 10 probes
^C

 maj_fault                                         
           value  ------------- Distribution ------------- count    
               7 |                                         0        
               8 |@@@@@@@@@                                88       
               9 |@@@@@@@@@@@@@@@@@@@@                     194      
              10 |@                                        18       
              11 |                                         0        
              12 |                                         0        
              13 |                                         2        
              14 |                                         0        
              15 |                                         1        
              16 |@@@@@@@@                                 82       
              17 |                                         0        
              18 |                                         0        
              19 |                                         2        
              20 |                                         0        

  zfod                                              
           value  ------------- Distribution ------------- count    
             < 0 |                                         0        
               0 |@@@@@@@                                  525      
               1 |@@@@@@@@                                 605      
               2 |@@                                       208      
               3 |@@@                                      280      
               4 |                                         4        
               5 |                                         0        
               6 |                                         0        
               7 |                                         0        
               8 |                                         44       
               9 |@@                                       161      
              10 |                                         2        
              11 |                                         0        
              12 |                                         0        
              13 |                                         4        
              14 |                                         0        
              15 |                                         29       
              16 |@@@@@@@@@@@@@@                           1048     
              17 |                                         24       
              18 |                                         0        
              19 |                                         0        
              20 |                                         1        
              21 |                                         0        
              22 |                                         3        
              23 |                                         0        

  as_fault                                          
           value  ------------- Distribution ------------- count    
             < 0 |                                         0        
               0 |@@@@@@@@@@@@@                            4139     
               1 |@@@@@@@                                  2249     
               2 |@@@@@@@                                  2402     
               3 |@                                        594      
               4 |                                         56       
               5 |                                         0        
               6 |                                         0        
               7 |                                         0        
               8 |                                         189      
               9 |@@                                       929      
              10 |                                         39       
              11 |                                         0        
              12 |                                         0        
              13 |                                         6        
              14 |                                         0        
              15 |                                         297      
              16 |@@@@                                     1349     
              17 |                                         24       
              18 |                                         0        
              19 |                                         21       
              20 |                                         1        
              21 |                                         0        
              22 |                                         92       
              23 |                                         0

La sortie montre un comportement de StarOffice en fonction du système de mémoire virtuelle. Par exemple, la sonde maj_fault ne s'est pas déclenchée avant le démarrage d'une nouvelle instance de l'application. Comme vous l'espériez, un “démarrage à chaud” de StarOffice n'a pas engendré de nouvelles défaillances majeures. La sortie de as_fault indique une hausse d'activité initiale, une latence pendant la localisation du menu par l'utilisateur pour créer un nouveau dessin, une autre période d'inactivité et un dernier pic d'activité lorsque l'utilisateur a cliqué sur une nouvelle présentation. La sortie de zfod indique que la création de la nouvelle présentation s'est traduite, pendant une courte période, par une importante pression pour les pages remplies de zéros.

La nouvelle itération de la recherche de DTrace dans cet exemple va dépendre du sens que vous souhaitez donner à votre exploration. Si vous souhaitez comprendre la source de la demande de pages remplies de zéros, vous pouvez regrouper ustack() avec l'activation de zfod. Vous souhaiterez peut-être établir un seuil pour les pages remplies de zéros et utiliser une action stop() destructrice pour interrompre le processus fautif lorsque le seuil est franchi. Cette approche doit vous permettre d'utiliser des outils de débogage plus conventionnels comme truss(1) ou mdb(1). Le fournisseur vminfo vous permet d'associer les statistiques résultant des outils conventionnels comme vmstat(1M) aux applications provoquant le comportement du système.

Stabilité

Le fournisseur vminfo utilise le mécanisme de stabilité de DTrace pour décrire sa stabilité, comme illustré dans le tableau suivant. Pour plus d'informations sur le mécanisme de stabilité, reportez-vous au Chapitre39Stabilité.

Élément 

Stabilité des noms 

Stabilité des données 

Classe de dépendance 

Fournisseur 

En cours d'évolution 

En cours d'évolution 

ISA

Module 

Privé 

Privé 

Inconnu 

Fonction 

Privé 

Privé 

Inconnu 

Nom 

En cours d'évolution 

En cours d'évolution 

ISA

Arguments 

Privé 

Privé 

ISA