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é.
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. |
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. |
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.
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 |