Pages : 1
#1 Le 06/04/2009, à 14:32
- BorX
[Résolu] Commande Top : VIRT = SWAP + CODE + DATA ???
Bonjour,
Voilà : je ne bite rien à ce que me renvoie la commande top.
Je lis dans la man page de top :
VIRT -- Image virtuelle (Ko) : La quantité totale de mémoire virtuelle utilisée par la tâche, à savoir l'ensemble des codes, données, bibliothèques partagées et pages qui ont été transférées sur l'espace d'échange (« swap »).
VIRT = SWAP + RES.SWAP -- Taille en espace d'échange (Ko) : La portion en espace d'échange de la totalité de l'image mémoire virtuelle d'une tâche.
RES -- Taille résidente (Ko) : La mémoire physique « non swappée » qu'une tâche a utilisée.
RES = CODE + DATA.CODE -- Taille du code (Ko) : La quantité de mémoire physique allouée à un exécutable, aussi connue comme la taille du « text resident set » ou TRS
DATA -- Taille des données + pile (Ko) : La quantité de mémoire physique allouée à autre chose que des exécutables, aussi connue sous le nom de « data resident set » ou DRS.
Or, voici, entre autres, ce que me renvoie la commande top :
top - 14:10:54 up 31 days, 1:20, 1 user, load average: 0.04, 0.03, 0.00
Tasks: 337 total, 1 running, 336 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.1%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 8175400k total, 8096448k used, 78952k free, 656576k buffers
Swap: 3277220k total, 0k used, 3277220k free, 5826780k cached
PID %MEM VIRT SWAP RES CODE DATA SHR nFLT nDRT S PR NI %CPU COMMAND
8480 6.1 1524m 1.0g 483m 60 1.4g 75m 2 0 S 25 0 0 /logiciels/jboss/jbo_4.0.3SP1_CP14/jdk1.5.0_14/bin/java -server -Xms1024m -Xmx1024m -verboseg
8210 8.7 1573m 881m 691m 60 1.4g 93m 1 0 S 15 0 0 /logiciels/jboss/jbo_4.0.3SP1_CP14/jdk1.5.0_14/bin/java -server -Xms1024m -Xmx1024m -verboseg
3559 0.2 238m 221m 17m 4 13m 3324 62 0 S 15 0 0 /usr/bin/python /usr/sbin/yum-updatesd
15156 0.0 148m 144m 3864 1468 126m 2032 0 0 S 15 0 0 /usr/sbin/nsrexecd
2683 0.1 120m 116m 4828 4 2520 2336 5 0 S 12 -3 0 python /sbin/audispd
2681 0.0 81776 79m 716 96 74m 484 0 0 S 12 -3 0 auditd
8890 0.1 85000 77m 5168 536 2488 2540 0 0 S 15 0 0 /logiciels/apache/apa_2.0.59/bin/httpd -f /appli/projects/gedapache/apache_2.0.59/conf/httpd.
8807 0.1 85000 77m 5172 536 2488 2540 0 0 S 15 0 0 /logiciels/apache/apa_2.0.59/bin/httpd -f /appli/projects/gedapache/apache_2.0.59/conf/httpd.
8808 0.1 85000 77m 5172 536 2488 2540 0 0 S 15 0 0 /logiciels/apache/apa_2.0.59/bin/httpd -f /appli/projects/gedapache/apache_2.0.59/conf/httpd.
8809 0.1 85000 77m 5172 536 2488 2540 0 0 S 15 0 0 /logiciels/apache/apa_2.0.59/bin/httpd -f /appli/projects/gedapache/apache_2.0.59/conf/httpd.
1 -
Pourquoi mes processus ont du SWAP alors que top m'affiche en en-tête que le Swap utilisé est de 0k ??
2 -
En considérant ce qui est dit dans la man page : RES = CODE + DATA
Donc :
483m = 60 + 1.4g ??? (là, je ne comprends pas)
691m = 60 + 1.4g ??? (là, vraiment, je ne comprends pas)
17m = 4 + 13m ??? (mmm... pourquoi pas...)
3864 = 1468 + 126m ??? (pffff... )
5168 = 536 + 2488 ??? (roah... )
A quoi correspondent les suffixes 'm' et 'g' ? J'imagine qu'il s'agit de Mega et Giga, mais vu le résultat des additions, je ne sais plus quoi penser
Bref, VIRT = SWAP + RES semble bien vérifié, mais pourquoi je ne vois jamais que RES = CODE + DATA ???
Si certains parmi vous pouvaient m'éclairer... d'avance merci...
Dernière modification par BorX (Le 06/04/2009, à 20:14)
Hors ligne
#2 Le 06/04/2009, à 15:45
- Peck
Re : [Résolu] Commande Top : VIRT = SWAP + CODE + DATA ???
1-
Ta machine est-elle 32 ou 64 bits ?
En 32 bits, il se peut que la mémoire haute (au dessus de 4G) soit considérée comme swap.
2-
Je crois que le man est faux, virt = code+data puisque
* virt c'est le total tel que vu par le processus
* res c'est le total vu par les barettes de ram
* swap c'est le total vu par le disque dur
* code c'est le total vu par le chargeur de code
* data c'est le total vu par l'allocateur mémoire dynamique
D'ailleurs aux erreurs d'arrondis près ca passe.
3- oui mega et giga, k pour kilo
Hors ligne
#3 Le 06/04/2009, à 16:47
- BorX
Re : [Résolu] Commande Top : VIRT = SWAP + CODE + DATA ???
Merci de ta réponse, Peck !
Tu as vu juste concernant l'erreur au niveau de la man page.
Un administrateur système de mon tàf me donnait effectivement l'explication suivante :
Certes, VIRT = SWAP + RES (et c’est bien ce que tu le retrouves dans tes chiffres).
Par contre, moi je dis que SWAP + RES = CODE + DATA
Sauf erreur de ma part, je ne vois pas d’autre élément d’un processus à part son code et ses données, donc la taille TOTALE du processus est CODE + DATA (au sens logique) et SWAP + RES (au sens physique).
L’un c’est le découpage logique et l’autre le découpage physique (à quelques décalages de pagination prêt…) : VIRT, c’est la taille nécessaire pour le processus. Ensuite, on donne la répartition physique (SWAP+RES) mais aussi la répartition logique (taille du code, taille des données)
Pour le coup des différentes notions de swap, il me donnait l'explication suivante :
La pagination utilise le cache disque, et il ne faut pas confondre pagination et swap.
Le swap en tant que tel, c’est utiliser le dur pour compenser le manque de ram.
La pagination, c’est une optimisation de l’utilisation mémoire et protection des processus.Je pense tout simplement qu’il font un amalgame avec le terme swap, un coups pour le swap reel, un coups pour la pagination (qui utilise le cache, mais pas le swap).
Hors ligne
#4 Le 06/04/2009, à 18:20
- BorX
Re : [Résolu] Commande Top : VIRT = SWAP + CODE + DATA ???
Bon... Je ne retombe pas vraiment sur mes pieds, mais je pense qu'on touche au but :
C+D = CODE + DATA
V-(C+D) = VIRT - (C+D)
S+R = SWAP + RES
V-(S+R) = VIRT - (S+R)
On voit bien que VIRT = SWAP + RES (à quelques arrondis près).
Par contre, pour CODE + DATA, je cherche encore à comprendre...
Cela dit, je comprends un peu mieux les différentes colonnes de top, c'est l'essentiel...
Je mets donc le sujet en résolu, mais n'hésitez pas à apporter vos précisions
Hors ligne
#5 Le 07/04/2009, à 08:32
- Peck
Re : [Résolu] Commande Top : VIRT = SWAP + CODE + DATA ???
Il est possible qu'il manque quelques données dans code+data, je pense à la pile qui n'est probablement pas comptée dans data car elle est gérée différemment.
Hors ligne
#6 Le 15/04/2009, à 12:31
- BorX
Re : [Résolu] Commande Top : VIRT = SWAP + CODE + DATA ???
Un article très intéressant sur le fonctionnement de la mémoire paginée : http://www.linuxjournal.com/article/8178#comment-331963
On y apprend, entre autre que :
Physical memory—the actual RAM installed—is a finite resource on any system. The Linux memory handler manages the allocation of that limited resource by freeing portions of physical memory when possible.
All processes use memory, of course, but each process doesn't need all its allocated memory all the time. Taking advantage of this fact, the kernel frees up physical memory by writing some or all of a process' memory to disk until it's needed again.
The kernel uses paging and swapping to perform this memory management. Paging refers to writing portions, termed pages, of a process' memory to disk. Swapping, strictly speaking, refers to writing the entire process, not just part, to disk. In Linux, true swapping is exceedingly rare, but the terms paging and swapping often are used interchangeably.
Dernière modification par BorX (Le 15/04/2009, à 12:32)
Hors ligne