Skip directly to content

Swap

Portrait de zozodesbois
on mar, 21/08/2012 - 10:57

Exemple allocation mémoire en utilisant le Swap

  1. Le Swap
  2. RAMzSWAP
  3. Firmware GeekyHMB
    1. Ajouter une partition Swap
    2. Ajouter un fichier Swap
  4. Commandes manuelles
  5. Réglages
  6. Vérifier que le Swap marche
  7. Besoin d'aide

 

Prérequis

FW GeekyHMB V2.0 (et plus)

Niveau Geek

Le Swap

C'est un espace d'échanges situé sur un disque qui permet de libérer ou d'étendre la mémoire physique (RAM).
Sur Linux, le Swap peut être sous forme de partition dédiée, ou sous forme d'un fichier.
Ce qui distingue ces deux types de mémoire (Swap et RAM), ce sont les temps d'accès. La mémoire RAM permet des accès très rapides. Le Swap étant sur disque, on va parler de mémoire virtuelle, ses accès en lecture/écriture étant mécaniques, ils sont plus lents. Sur une clé USB, c'est extrêmement lent...

Le Swap va être utilisé dans plusieurs cas:

  • Lorsqu'un logiciel va vouloir s'allouer une zone mémoire qui dépasse la capacité de la RAM pour travailler. Le débordement se fera sur le Swap.
  • Lorsque la capacité mémoire de la RAM devient critique, le système va déplacer dans le Swap tout ce qui peut l'être pour libérer de la RAM.
  • Utilisation des buffers (mémoire tampon pour accélérer les accès).
  • Pour que le mode hibernation fonctionne correctement (ce n'est pas le cas sur nos HMB), le système va copier le contenu de la mémoire RAM dans le Swap. Ce qui implique qu'il faut que le Swap soit au moins d'une fois la taille de la RAM. Mais sur nos HMB, cela ne servira pas puisque c'est la commande "RootApp" qui gère la mise en veille. Elle ne tient compte que du moteur de nos HMB, le DvdPlayer. Tout le reste n'est pas géré...
  • ...

L'inconvénient majeur du Swap, c'est que dès qu'un programme habituellement rapide est obligé d'utiliser le Swap, il tourne extrêmement lentement... Il faut donc laisser le système gérer le Swap pour des choses qui n'ont pas besoin d'accès intenses.

Autant dire que si vous voulez utiliser des programmes, comme les packs de l'Optware, ou bien profiter correctement des Torrents, du FTP etc... ce sera très important d'avoir un Swap.

Sur nos HMB, dans les firmwares d'origine (jusqu'à la version C757) il n'y a qu'une petite Swap de 32ko. Autant dire qu'elle ne sert à rien.
Vous pouvez voir son utilisation avec la commande "free" en Telnet.

~ # free
             total         used         free       shared      buffers
Mem:        120652       116176         4476            0          432
-/+ buffers:             115744         4908
Swap:           32            0           32

La ligne Swap indique qu'il y a 32ko d'espace total.
L'utilisation à 0 veut dire que le Swap n'est pas utilisé au moment ou vous le regardez.

RAMzSWAP

Vous avez bien suivi ? C'est bon ? Alors il y a aussi le SWAP en RAM...
C'est débile ? Prendre de la RAM pour dire que c'est du SWAP ?!?

RAMzSWAP

Et bien non, c'est génial au contraire et ça convient parfaitement à nos petites machines!
Il s'agit d'une zone de RAM, considérée comme un SWAP, oui mais qui compresse les données. Nous avons ainsi de la mémoire compressée !

Ce système est inclus dans le FW GeekyHMB (à partire de la v2).

Références
Sujet Moservices.org
Projet compcache

Firmware GeekyHMB

Sur le Firmware GeekyHMB, pour connaître l'utilisation du Swap, vous pouvez aller dans le menu IMS et choisir système (cet écran est aussi disponible dans le pack IMS GeekyHMB).

Le script de démarrage de nos HMB, va monter "un fichier spécial" pour le faire reconnaître comme Swap.

/mnt/rd/swap.img

32 ko, c'est comme s'il n'y avait rien. De base, c'est suffisant pour regarder des films, mais si on veut profiter pleinement de nos machines, et avoir quelques performances, ou éviter des saccades sur des films HD, il va falloir augmenter ce Swap.

Ca ne sert à rien d'avoir un gros Swap, il ne semble pas dépasser les 20Mo d'utilisation.

Le firmare GeekyHMB (à partir de la v2.0) gère automatiquement le Swap (détecte la présence d'un fichier d'échange ou d'une partition swap, puis l'utilise).

Il peut y avoir plusieurs swap utilisés, mais sur nos machines, ça ne sert à rien. C'est juste pour vous montrer.

~ # cat /proc/swaps
Filename                                Type            Size    Used    Priority
/mnt/rd/swap.img                        file            32      0       -1
/dev/scsi/host1/bus0/target0/lun0/part2 partition       160640  0       -2
/tmp/usbmounts/sdc1/eswap               file            16376   0       -3

Ligne 1: c'est le swap d'origine.
Ligne 2: c'est le swap sur un HDD1 (disque dur interne).
Ligne 3: c'est un swap sur une clé USB, ou sur un disque formaté avec un vieux firmware plus ancien que C729.

C'est un exemple, car un seul swap de 16 Mo est largement suffisant pour nos HMB.

Ajouter une partition Swap

Si votre disque dur est normalement formaté avec une version de Firmware supérieur à C729, vous devez avoir une partition swap
Exemple avec un disque de 2To

~ # fdisk -l

Disk /dev/sdb: 2000.3 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks  Id System
/dev/sdb1               2      242569  1948427460   7 HPFS/NTFS
/dev/sdb2          242570      242589      160650  82 Linux swap
/dev/sdb3          242590      242657      546210  83 Linux
/dev/sdb4          242658      243181     4209030  83 Linux

Disk /dev/sdc: 4001 MB, 4001366016 bytes
19 heads, 19 sectors/track, 21648 cylinders
Units = cylinders of 361 * 512 = 184832 bytes

   Device Boot      Start         End      Blocks  Id System
/dev/sdc1               7       21649     3906468   c Win95 FAT32 (LBA)

Pour voir si le Swap est bien pris en compte

~ # free
             total         used         free       shared      buffers
Mem:        120652       108480        12172            0          652
-/+ buffers:             107828        12824
Swap:       177048            0       177048

Ajouter un fichier Swap

Vous n'avez pas de partition Swap ? Vous pouvez alors utiliser la méthode du fichier Swap. Je vous rappelle que ça ne sert à rien de combiner les deux méthodes, la meileure étant la première.
Téléchargez ce fichier Swap (merci à Mikka PlaOn!X pour son fichier Swap).

Désarchivez ce fichier. Mettez le fichier eswap optenu à la racine de votre disque dur (de préférence).

eswap

Vous pouvez aussi le mettre à la racine d'une clé USB. Le Firware GeekyHMB le détectera tout seul après redémarrage (électrique ou en sortie de veille).

ATTENTION Si vous mettez le Swap sur une Clé USB, ne la débranchez pas pendant son utilisation, vous risquez d'endommager votre clé USB. Le fichier Swap ne devrait pas se corrompre puisque le Swap se réécrit à sa prochaine utilisation.

Commandes manuelles

Voici quelques commandes utiles si vous avez besoins d'arrêter/activer temporairement un swap.

Activer un fichier

swapon /tmp/usbmounts/sdc1/eswap

Activer une partition (pour trouver une partition fdisk -l )

swapon /dev/sdb2

Retirer un fichier (idem partition)

swapoff /tmp/usbmounts/sdc1/eswap

ATTENTION Si vous supprimez un fichier swap pendant son utilisation, vous ne pourrez pas le retirer de cat /proc/swaps C'est pareil si le swap est sur une clé USB et que vous la débranchez en cours d'utilisation. Seule solution éteindre le HMB.

Voir la liste des swaps

cat /proc/swaps

Réglages

(Merci à Mikka pour sa correction).

Par défaut, le Swap est utilisé de préférence à 90% par le système.
Une valeur à 0 voudrait dire de n'utiliser que la RAM.

Pour voir ce réglage

cat /proc/sys/vm/swappiness
90

Pour changer cette valeur ponctuellement

echo 20 > /proc/sys/vm/swappiness

Pour que cette valeur soit permanente, il faut le renseigner dans le fichier de config

/etc/sysctl.conf
vm.swappiness = 20

Nos HMB disposent d'une petite capacité de mémoire, il vaut mieux garder la valeur par défaut 90 et ajouter un swap pour éviter une saturation de la mémoire.

Vérifier que le Swap marche

ATTENTION, si la RAM du HMB est pleine, vous ne pourrez plus rien faire, seule solution éteindre électriquement le HMB.

Ouvrez 2 terminaux Telnet: Un pour voir les changements avec la commande free. Sur l'autre passez la ligne de commande qui suit. Elle va remplir les mémoires et va vous permettre de vérifier vos réglages.

A=0; for i in $(seq 100); do A=$A$A; done

Si cette commande rempli trop votre mémoire, vous pouvez remplacer 100 par un chiffre plus petit.
Pour libérer la mémoire que vous venez de remplir, il faut fermer la session Telnet sur laquelle vous avez passé cette commande.

Besoin d'aide

Si vous rencontrez un problème avec ce tuto, merci de poster dans le forum sur le topic approprié.

Les commentaires en bas de cette page sont essentiellement destinés à faire des remarques ou à compléter l'article.

Votez: 
Pas encore de vote

Commentaires

Portrait de olivelabidouille

merci pour votre pugnacité a rendre nos hmb encore plus performants

cordialement

oliv