Thomas <fantome.foru...@free.fr.invalid> wrote:
> qu'appelle-t-on "swap dynamique" ?
>
> ce que j'en ai compris, c'est que ça fait des opérations d'augmentation
> de la taille totale du swap, mais automatiquement en fonction du besoin
Alors, sous Linux, il est facile d'ajouter des fichiers de swap, lorsque
l'utilisateur perçoit un besoin, comme cela a été déjà dit.
D'ailleurs, pourquoi ne pas créer un fichier de swap qui aurait des
trous? (sparse file)
$ dd if=/dev/zero of=/tmp/bla bs=1024k seek=100000 count=1
# on peut aussi utiliser truncate(1): truncate -s 100G /tmp/bla
$ ls -lah /tmp/bla
-rw-r--r-- 1 schaefer schaefer 98G Oct 2 11:39 /tmp/bla
$ du -h /tmp/bla
1.0M /tmp/bla
il s'agit d'un fichier qui apparaît comme environ 100 GB, mais qui en
fait contient uniquement 1 méga-octet alloué. A chaque écriture à un
endroit non encore alloué, le système allouera les blocs nécessaires.
Toute lecture non allouée retournera des blocs de zéros (ASCII NUL).
Evidemment, s'il n'y a pas de place sur le système de fichiers au moment
de l'allocation, ça finira mal.
Toutefois, `swapon /tmp/bla' ne va pas fonctionner sous root, car il
estime que les fichiers à trous, c'est mal: forcer de l'allocation
d'espace dans le filesystem au moment même où on est probablement bas
dans la disponibilité de la mémoire vive n'est, à son avis, pas une
bonne idée.
Si l'on le veut vraiment, on peut le faire quand même: sous root:
sw=$(losetup -f)
losetup $sw /tmp/bla
chmod 600 $sw
mkswap $sw
swapon $sw
Il n'y a pas de contraction: pour faire cela, on peut imaginer de temps
en temps un `swapoff $sw' puis `fallocate -d /tmp/bla', puis `swapon
$sw'. Ou, peut-être mieux: un nouveau fichier à trou de swap,
désactiver l'ancien et supprimer son fichier.
Il y a d'autres solutions pour optimiser le swap sous Linux:
1) modifier certains paramètres, Linux swappe `trop' par défaut
à mon avis et en particulier depuis certains kernels
(il veut garantir qu'il y ait vraiment suffisamment de mémoire
libre, ce qui est parfois exagéré)
sur certains serveurs avec vraiment suffisamment de mémoire,
je configure ainsi dans /etc/sysctl.conf:
# swapper que si nécessaire
vm.swappiness = 1
# en particulier en présence de disques lents
vm.vfs_cache_pressure=150
toutefois, réduire l'envie de Linux de swapper peut réduire la
performance, notamment si c'est aux dépens du cache disque, par
exemple.
Dans mon cas, après une analyse à long terme avec munin, ça a
plutôt été extrêmement bénéfique.
2) compresser le swap
Une solution intégrée pour 2 c'est:
https://github.com/Nefelim4ag/systemd-swap
Cela ajoute notamment le support des sparse files (fichiers à trous), de
la compression du swap et d'un ram-disk compressé, et d'un système
d'allocation dynamique.
Il y a des instructions d'installation notamment pour Debian.
Je n'ai pas testé, et il y a une mise en garde sur la qualité du code.
Sauf erreur cela ne fait que d'utiliser des fonctions de Linux, de
manière intégrée.
Il semble même y avoir un script d'adaptation automatique du swap.