Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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. yikes

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 ?? hmm

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... sad)
5168 = 536 + 2488 ??? (roah... mad)
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 roll
Bref, VIRT = SWAP + RES semble bien vérifié, mais pourquoi je ne vois jamais que RES = CODE + DATA ??? sad

Si certains parmi vous pouvaient m'éclairer... d'avance merci... tongue

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 :
090406061533436519.jpg
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... tongue
Je mets donc le sujet en résolu, mais n'hésitez pas à apporter vos précisions wink

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