Accueil

Gestion de la mémoire

Par jonesy.

La mémoire du pingouin est multiple et il peut être un véritable éléphant ! ;-)

Sommaire

Les composants

Il y a la RAM et la SWAP.

GNU/Linux peut gérer plusieurs zones de SWAP, partitions et fichiers mélangés.

Augmenter la mémoire

Pour augmenter la mémoire disponible pour le système, il n'y a que deux méthodes :

Le fonctionnement

Toute la mémoire à la disposition de GNU/Linux (RAM + SWAP + SWAP...) est gérée de façon transparente pour l'utilisateur.

Le système réserve de la mémoire pour le noyau, les programmes indispensables et les applications, puis il utilise le reste comme un cache (buffers cache).

Dans ce cache, au fur et à mesure il charge les informations utiles, les données transitoires, jusqu'à remplir la RAM. Puis il remplace les informations devenues inutiles, la SWAP étant utilisée s'il ne peut rien remplacer.

La SWAP étant sur le disque dur, elle est plus lente que la RAM, qui est beaucoup plus rapide en temps d'accès et de lecture qu'un disque dur. On dit couramment que la RAM est 1000 fois plus rapide que la SWAP. Le système optimise donc au mieux en utilisant au maximum la RAM.

Il est donc normal que presque toute votre RAM soit toujours utilisée.

À disposition

La commande générale :

$ free -mt

Vous indiquera la mémoire totale, la mémoire physique (RAM) et la SWAP en méga-octets (Mo).

Par exemple, cela donne :

total       used       free     shared    buffers     cached
Mem:           884        840         43          0          7        691
-/+ buffers/cache:        142        742
Swap:          956          2        954
Total:        1841        843        998

Comme nous pouvons le voir :

  1. Mem, la RAM est presque totalement utilisée, mais 691 Mo utilisés sont du cache. De la mémoire qui ne serait pas utilisée, et donc gaspillée, si le système n'optimisait pas la gestion des informations transitoires.
  2. De plus, le total de 884 Mo ne correspond pas à la totalité de la RAM physique disponible ( qui est ici de 1 Go, soit 1024 Mo ), la différence étant utilisée par le noyau et n'étant pas comptabilisée par free car cette mémoire ne peut pas servir à autre chose.
  3. La colonne shared devrait être ignorée, car déclarée obsolète dans le man. Cependant, il semble que cela soit les informations partagées, mises en relation, par au moins deux applications, telles qu'un programme avec les bibliothèques.
  4. Swap, les zones d'échanges sont presque inutilisées.

Soyons un peu concret.

La mémoire utilisée est la mémoire réservée, et utilisée, par les programmes qui tournent actuellement sur le système. C'est là que le programme stocke ce dont il a besoin pour fonctionner (variables, fonctions, etc...).

Le tampon de cache (cache buffer) contient les informations montées par le système pour que les programmes aillent plus vite mais qu'il n'est pas requis de monter en mémoire pour qu'ils tournent. Par exemple, cela comprend les fichiers de configuration, ou tout le fichier vidéo de votre lecteur vidéo.

Ces informations montées en mémoire ne sont supprimées, remplacées, que si le programme en ayant besoin a été arrêté et/ou que le système a besoin de l'espace pour autre chose. Autrement, l'information reste en mémoire, et elle peut être réutilisée par un programme ayant de nouveau besoin des informations en mémoire.

Vous pouvez aussi utiliser la commande top qui donne les informations en temps réel. Pour quitter, taper q.

Une commande sympa, non disponible en standard sous la Slackware, est linux_logo, qui vous indique la taille exacte de la RAM.

Pour surveiller la SWAP en particulier, faites :

$ /sbin/swapon -s

Qui est une commande pour le root. Mais un simple utilisateur peut la lancer avec cette option (-s).

Le résultat ressemble à ceci :

Filename                                Type            Size    Used    Priority
/dev/sda1                               partition       979924  2668    -1

Ce qui vous permettra de savoir si vous avez assez de SWAP et aussi assez de RAM. Car s'il utilise trop souvent la SWAP cela ralenti votre système.

L'option "-s" ne marche pas avant le Kernel 2.1.25. On est jamais assez prudent... ;-)

Plus près du système

Pour aller encore plus loin dans la compréhension et la découverte de la mémoire du votre système.

Vous pouvez regarder la commande :

$man procinfo

Et, en particulier, ses options -d et -D, qui montrent l'usage de la mémoire, par différence ou au total.

Sinon, vous pouvez encore aller voir directement le fichier /proc/meminfo qui est utilisé pour procinfo, en faisant :

$ cat /proc/meminfo

Ce qui retourne :

MemTotal:       905736 kB
MemFree:        157944 kB
Buffers:          5908 kB
Cached:         654848 kB
SwapCached:          0 kB
Active:         488988 kB
Inactive:       231436 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       905736 kB
LowFree:        157944 kB
SwapTotal:      979924 kB
SwapFree:       977256 kB
Dirty:               0 kB
Writeback:           0 kB
Mapped:          81692 kB
Slab:            21384 kB
CommitLimit:   1432792 kB
Committed_AS:   127292 kB
PageTables:        652 kB
VmallocTotal:   122580 kB
VmallocUsed:      3888 kB
VmallocChunk:   118276 kB

Comme vous pouvez le voir la mémoire est indiquée en kB ( Ko ), et non en Mo comme avec free.

Vous avez peut être remarqué qu'il n'y a pas d'informations concernant de la mémoire partagée, comme le laisse supposé la colonne shared de free.

Enfin, pour tout ce qui est découverte de votre système, vous pouvez aller jeter un oeil à l'Exploration de la configuration.

Optimisation de la SWAP

Si le système utilise beaucoup ( trop ) la SWAP et que nous ne pouvons pas ou ne voulons pas augmenter la RAM, alors une méthode pour optimiser l'accès à la SWAP, et donc le temps de réponse du système, est de créer plusieures partitions de SWAP sur plusieurs disques durs physiques différents.

Par exemple avec deux disques durs SATA, la première partition de SWAP est sur /dev/sda1 (le premier disque) et la seconde sera sur /dev/sdb1 (le second disque).

Ajouter une partition de SWAP

La première étape est créer une partition, avec cfdisk, fdisk ou parted. Tous sont fournis avec la Slackware, parted étant fourni par défaut (dans l). Il est préférable que cette partition soit de type 82 ( linux swap ).

Créons la zone d'échange :

# mkswap -c /dev/sdb1

Si vous souhaitez qu'elle soit activée à chaque démarrage, ajouter la ligne suivante dans le fichier /etc/fstab :

/dev/sdb1        swap             swap        defaults         0   0

Si vous avez ajouté la ligne, faites :

# swapon -a

Sinon, pour l'activer temporairement :

# swapon /dev/sdb1

Vieux ou rares...

C'est de plus en plus rare de nos jours avec les machines actuelles mais si jamais cela venait à vous arriver voici quelques informations utiles à savoir.

Ma RAM n'est pas totalement détectée...

Il peut y avoir plusieures raisons à cela :

Regardez si votre bios est mal configuré. Des options telles que Limit 64 Mo ou Limit OS2 ne doivent pas être activées.

Vérifier que votre noyau est configuré pour supporter votre RAM :

  1. Si vous avez entre 1 et 4 Go, l'option CONFIG_HIGHMEM4G doit être activée.
  2. Si vous avez plus de 4 Go, l'option CONFIG_HIGHMEM64G doit être activée.

Dans la partie High Memory support de la configuration du noyau.

Sinon vous pouvez spécifier au système la taille de votre RAM en ajoutant dans le fichier /etc/lilo.conf sa taille en méga-octets ainsi (pour 512 Mo de RAM) :

mem=512M

À la valeur append dans la ligne suivante :

append=""

Devenant donc :

append="mem=512M"

Si cette ligne n'existe pas, ajoutez-la. :-)

Puis, ne pas oublier de recharger lilo, en root :

# lilo -v

J'ai moins de 512 Mo de RAM...

Si votre machine a moins de 512 Mo de RAM, prévoyez le double pour la SWAP.

Pendant longtemps, il a été conseillé lors de l'installation d'un système GNU/Linux de prévoir le double, ou le triple, de SWAP que votre PC comptait de RAM. Par exemple, si vous aviez 256 Mo de RAM, il fallait prévoir 512 Mo ou 768 Mo de SWAP.

Aujourd'hui, on considère généralement que cela est devenu inutile si vous avez 512 Mo ou plus de RAM. Alors il suffit généralement de prévoir autant de SWAP que de RAM.

Veuillez noter que le conseil sur la taille de votre(vos) SWAP est une science difficile et que cela dépend de l'utilisation de votre système et des risques tolérés. Il est tout de même à noter qu'un système qui utilise énormément sa SWAP devient dangereux pour les services et données qu'il héberge et qu'il deviendra inutilisable.

Thèmes : #administration #articles #jonesy #materiel #noyau #optimisation

Sauf indication contraire, ce document est placé sous licence CC-BY-SA 3.0.