Thomas <
fantome.forums.tDeContes@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-swapCela 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.