Dans cet article, je vais tenter d'expliquer les différentes informations que le noyau Linux nous donne au travers du fichier /proc/meminfo. Comme support, je vais afficher les données qui concernent mon système. Il s'agit d'un noyau 2.6.24-1 dans une Debian unstable. Ma machine repose sur une architecure x86 en 32 bits et contient une barrette de 1 Go de mémoire RAM.
$ cat meminfo MemTotal: 1036256 kB MemFree: 191256 kB Buffers: 51824 kB Cached: 468392 kB SwapCached: 0 kB Active: 398852 kB Inactive: 404108 kB HighTotal: 131008 kB HighFree: 256 kB LowTotal: 905248 kB LowFree: 191000 kB SwapTotal: 524280 kB SwapFree: 524280 kB Dirty: 44 kB Writeback: 0 kB AnonPages: 282736 kB Mapped: 82108 kB Slab: 22552 kB SReclaimable: 14468 kB SUnreclaim: 8084 kB PageTables: 2232 kB NFS_Unstable: 0 kB Bounce: 0 kB CommitLimit: 1042408 kB Committed_AS: 880596 kB VmallocTotal: 114680 kB VmallocUsed: 7540 kB VmallocChunk: 105972 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 4096 kB
Commençons par les premières lignes :
- MemTotal : la quantité de mémoire vive utilisable (ma barrette fait 1 Go (1 073 742 Ko), mais il y a quelques Mo réquisitionnés par le noyau (visiblement 12 615 Ko)).
- MemFree :la quantité de mémoire vive actuellement non allouée.
- Buffers : la quantité de mémoire vive actuellement allouée dans des buffers.
- Cached : la quantité de mémoire actuellement utilisée en tant que cache (par exemple, des caches pour les transferts vers et depuis le disque dur).
- SwapCached : la quantité de mémoire actuellement sortie du swap, mais dont une copie est toujours présente dedans.
- Active : la quantité de mémoire vive récemment utilisée.
- Inactive : la quantité de mémoire qui n'a pas été utilisée depuis un certain temps (le noyau pioche d'abord dans ces pages s'il a besoin de mémoire).
Sur une architecture x86 32 bits, la mémoire physique est séparée en trois zones. D'une part, la zone ZONE_DMA, qui correspond aux adresses physiques de 0 à 16 Mo. D'autre part, la zone ZONE_NORMAL qui va de 16 à 896 Mo. Et enfin, la zone ZONE_HIGHMEM qui va de 896 à 4 Go (voire 64 Go avec l'extension PAE). Sur ma machine, la mémoire vive remplie donc les 2 premières zones, plus une partie de la ZONE_HIGHMEM.
- HighTotal : la quantité de mémoire vive présente dans la zone ZONE_HIGHMEM.
- HighFree : la quantité de mémoire vive non utilisée et présente dans la zone ZONE_HIGHMEM.
- LowTotal : la quantité de mémoire vive présente dans le zone ZONE_NORMAL.
- LowFree : la quantité de mémoire vive non utilisée et présente dans la zone ZONE_NORMAL.
Vérifions :
HighTotal + LowTotal = 131008 + 905248 = 1036256 = MemTotal
HighFree + LowFree = 252 + 57468 = 57720 = MemFree
Chouette, ça colle !
- SwapTotal : la taille du swap.
- SwapFree : la place disponible dans le swap.
Dans mon cas, le swap n'est pas du tout utilisé (en effet, OpenOffice n'est pas encore lancé... :). C'est également vérifiable avec l'utilitaire swapon :
$ sudo swapon -s Filename Type Size Used Priority /dev/mapper/lvm-swap partition 524280 0 -1
- Dirty : la quantité de mémoire en attente d'être écrite sur le disque.
- Writeback : la quantité de mémoire qui est actuellement en train d'être écrite sur le disque.
- AnonPages : la quantité de mémoire allouée avec la fonction mmap() avec le flag MAP_ANONYMOUS.
- Mapped : la quantité de mémoire allouée avec la fonction mmap() à partir de fichiers ou de devices.
- Slab : la quantité de mémoire utilisée au sein du noyau, et allouée avec l'allocateur Slab, pour ses propres objets et structures.
- PageTables : la quantité de mémoire utilisée en tant que table de pages pour gérer la pagination.
- Committed_AS : la quantité maximale de mémoire utilisable avant que le noyau ne commence à swapper.
Linux sépare la mémoire virtuelle en deux partie. Une première, de 3 Go, et qui contient l'espace d'adressage virtuel d'un processus. La seconde, qui elle fait 1 Go, et qui contient l'espace d'adressage noyau. C'est dans cet espace que seront mappés les zones ZONE_DMA et ZONE_NORMAL. Or, celles-ci ont une taille maximale cumulée de 896 Mo. Il est donc nécessaire d'avoir un autre espace, l'espace d'adressage virtuel du noyau, qui permet d'atteindre les 1 Go évoqués juste avant. La valeur VmalloTotal donne la taille de cet espace.
- VmallocTotal : la quantité totale de mémoire de l'espace d'adressage virtuel du noyau.
- VmallocUsed : la quantité de mémoire utilisée dans l'espace d'adressage virtuel du noyau.
- VmallocChunk : le plus grand bloc contigu de mémoire virtuelle (et non physique) disponible dans l'espace d'adressage virtuel du noyau.
- HugePages_Total : le nombre de hugepage allouée. Une hugepage est une page d'une grande taille (sisi :), utilisée par des programmes qui ont des besoins précis de mémoire.
- HugePages_Free : le nombre de hugepage disponibles.
- Hugepagesize : la taille d'une hugepage.








