Suivant: , Précédent: , Monter: Configuration du système   [Table des matières][Index]


12.5 Espace d’échange

Un espace d’échange est un espace disque spécifiquement dédié à la pagination mémoire : le processus en charge de la gestion de la mémoire (le noyau Linux ou le gestionnaire par défaut du Hurd) peut décider que certaines pages mémoire stockées en RAM qui appartiennent à un processus en cours d’exécution mais qui sont inutilisées devraient plutôt être stockées sur disque. Il les décharge de la RAM pour libérer la précieuse mémoire rapide, et les écrit sur l’espace d’échange. Si le programme essaye d’accéder à la page, le processus de gestion de la mémoire la charge à nouveau dans la mémoire pour que le programme puisse l’utiliser.

Une idée fausse répandue sur l’espace d’échange est qu’il n’est utile que lorsque seule une petite quantité de RAM est disponible sur le système. En réalité, vous devriez savoir que les noyaux utilisent souvent toute la RAM disponible pour le cache des accès disques pour rendre les opérations d’entrée-sortie plus rapides. En conséquence, déplacer des pages mémoire inutilisées augmentera la quantité de RAM disponible pour ce cache.

Pour une description plus complète de la gestion de la mémoire du point de vue d’un noyau monolithique, voir Memory Concepts dans le manuel de référence de la bibliothèque C de GNU.

Le noyau Linux prend en charge les partitions d’échanges et les fichiers d’échange : le premier utilise une partition disque complète pour la pagination, alors que le second utilise un fichier sur un système de fichiers pour cela (le pilote du système de fichiers doit le prendre en charge). Pour une configuration comparable, les deux ont les mêmes performances, donc vous devriez considérer la facilité d’utilisation pour vous décider entre les deux. Les partitions sont « plus simples » et n’ont pas besoin de la prise en charge dans le système de fichiers, mais ont besoin d’être allouées au formatage du disque (en oubliant les volumes logiques), alors que les fichiers peuvent être alloués et désalloués à n’importe quel moment.

Swap space is also required to put the system into hibernation (also called suspend to disk), whereby memory is dumped to swap before shutdown so it can be restored when the machine is eventually restarted. Hibernation uses at most half the size of the RAM in the configured swap space. The Linux kernel needs to know about the swap space to be used to resume from hibernation on boot (via a kernel argument). When using a swap file, its offset in the device holding it also needs to be given to the kernel; that value has to be updated if the file is initialized again as swap—e.g., because its size was changed.

Remarquez que l’espace d’échange n’est pas remis à zéro à l’extinction donc les données sensibles (comme les mots de passe) peuvent y rester si elles y ont été déplacées. De fait, vous devriez faire résider votre espace d’échange sur un périphérique chiffré (voir Périphériques mappés).

Type de données : swap-space

Les objets de ce type représentent des espaces d’échange. Ils contiennent les membres suivants :

target

Le périphérique ou le fichier à utiliser, soit un UUID, soit un file-system-label, soit une chaine, comme dans la définition d’un file-system (voir Systèmes de fichiers).

dependencies (par défaut : '())

Une liste de d’objets file-system ou mapped-device, dont dépend la disponibilité de l’espace. Remarquez que, tout comme pour les objets file-system, les dépendances qui sont requises au démarrage et montées au plus tôt en espace utilisateur ne sont pas gérées par le Shepherd, et sont donc automatiquement retirées pour vous.

priority (par défaut : #f)

Seulement pris en charge par le noyau Linux. Soit #f pour désactive la priorité de l’espace d’échange, soit un entier entre 0 et 32767. Le noyau utilisera d’abord les espaces d’échange avec la plus grande priorité, et utilisera les espaces d’échange de même priorité à tour de rôle. Le noyau utilisera les espaces d’échange sans priorité après les espaces prioritaires, et dans l’ordre dans lequel ils sont apparus (donc pas à tour de rôle).

discard? (par défaut : #f)

Uniquement pris en charge par le noyau Linux. Lorsque la valeur est vraie, le noyau notifiera le contrôleur de disque des pages supprimées, par exemple avec l’opération TRIM sur les disques SSD.

Voici quelques exemples :

(swap-space (target (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))

Utilise la partition de swap avec l’UUID donné. Vous pouvez voir l’UUID d’une partition de swap Linux en lançant swaplabel device, où device est le nom de fichier /dev de cette partition.

(swap-space
  (target (file-system-label "swap"))
  (dependencies mapped-device))

Utilise la partition avec l’étiquette swap, qui peut être trouvée après que tous les périphériques mappés mapped-devices ont été ouverts. De nouveau, la commande swaplabel vous permet de voir et de changer l’étiquette d’une partition swap de Linux.

Voici un exemple plus complet de la partie file-systems d’une déclaration operating-system.

(file-systems
  (list (file-system
          (device (file-system-label "root"))
          (mount-point "/")
          (type "ext4"))
        (file-system
          (device (file-system-label "btrfs"))
          (mount-point "/btrfs")
          (type "btrfs"))))

(swap-devices
  (list
    (swap-space
      (target "/btrfs/swapfile")
      (dependencies (filter (file-system-mount-point-predicate "/btrfs")
                            file-systems)))))

utilise le fichier /btrfs/swapfile comme espace d’échange, ce qui dépend du système de fichiers monté sur /btrfs. Remarquez comment nous utilisons la fonction filter de Guile pour élégamment sélectionner le système de fichiers !

(swap-devices
  (list
    (swap-space
      (target "/dev/mapper/my-swap")
      (dependencies mapped-devices))))

(kernel-arguments
  (cons* "resume=/dev/mapper/my-swap"
         %default-kernel-arguments))

The above snippet of an operating-system declaration enables the mapped device /dev/mapper/my-swap (which may be part of an encrypted device) as swap space, and tells the kernel to use it for hibernation via the resume kernel argument (voir référence de operating-system, kernel-arguments).

(swap-devices
  (list
    (swap-space
      (target "/swapfile")
      (dependencies (filter (file-system-mount-point-predicate "/")
                            file-systems)))))

(kernel-arguments
  (cons* "resume=/swapfile"
         "resume_offset=92514304"
         %default-kernel-arguments))

This other snippet of operating-system enables the swap file /swapfile for hibernation by telling the kernel about the file (resume argument) and its offset on disk (resume_offset argument). The latter value can be found in the output of the command filefrag -e as the first number right under the physical_offset column header (the second command extracts its value directly):

$ sudo filefrag -e /swapfile
Filesystem type is: ef53
File size of /swapfile is 2463842304 (601524 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..    2047:   92514304..  92516351:   2048:
…
$ sudo filefrag -e /swapfile | grep '^ *0:' | cut -d: -f3 | cut -d. -f1
   92514304

Suivant: , Précédent: , Monter: Configuration du système   [Table des matières][Index]