Suivant: Comptes utilisateurs, Précédent: Périphériques mappés, Monter: Configuration du système [Table des matières][Index]
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).
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: Comptes utilisateurs, Précédent: Périphériques mappés, Monter: Configuration du système [Table des matières][Index]