J'utilise zram sur mon ordinateur comme un échange compressé avec RAM. Lorsque le système doit échanger quelque chose, le remplacer par un fichier d'échange sauvegardé par zram équivaut plus ou moins à compresser ces données en mémoire pour libérer de l'espace. Cela rend la permutation très rapide la plupart du temps, par rapport à la permutation sur disque. Pour cette raison, je me demande s'il y a des performances à gagner en encourageant le système à échanger les éléments inutilisés de manière plus agressive, car il peut le faire sans vraiment toucher le disque?
Alors, quelqu'un a-t-il joué avec, disons, la mise vm.swappiness
à 100 lors de l'utilisation de zram? Serait-ce souhaitable?
sysctl -w vm.swappiness=100
Réponses:
Je ne recommanderais vraiment pas de mettre le swappiness plus haut. Un mécanisme courant dans le noyau est qu'il mettra des pages (morceaux de mémoire) dans le swap pour libérer de la mémoire pour d'autres tâches en cours d'exécution.
Premier "problème" lorsque le noyau veut que n pages soient libérées, m (avec m <n, m est le nombre de pages compressées nécessaires pour contenir n) sont nouvellement créées en RAM, je ne sais pas si cela peut perturber le noyau ou ne pas.
De toute façon, quand vous avez des pages dans le swap, il est possible que vous utilisiez l'application plus tard avec certaines de ses pages dans le swap. Ce que le noyau fait est de ramener ces pages dans la mémoire physique mais ne les supprime pas du swap (qui, avec le swap standard, peut être vu comme une mise en cache , donc lorsque l'application revient en arrière-plan, le noyau n'a pas à réécrire ces pages dans le swap lent). Cependant avec zram ce n'est peut-être pas une astuce sage, car vous avez alors en mémoire les m pages en zram + les n pages qui sont de retour en mémoire!
Le noyau a normalement une "mémoire totale" qu'il peut utiliser pour faire ses affaires. Lorsque vous ajoutez du zram, il ne compte que dans la mémoire de «swap», comme ce serait le cas pour tout swap sur disque, mais il a réduit la «mémoire totale» réelle et ce n'est pas prévu / anticipé par le noyau. Parfois, vous pouvez avoir un comportement étrange et non voulu à cause de cela!
Avec zram, il serait bon que le noyau ne permute pas trop dans cette zone lorsqu'il est sous pression mémoire. Et vous devriez toujours avoir une vraie partition d'échange de disque dur plus grande au moins que la taille maximale de votre zram, afin que le système n'obtienne pas de MOO alors qu'en même temps vous verriez beaucoup d'espace libre comme indiqué par
free
!la source
Réponse courte:
vm.swappiness=100
est la valeur appropriée pour zram (au moins sur Debian Stretch avec Linux 4.9, je pense que c'est la meilleure valeur)Je teste déjà
vm.swappiness=100
pour moi.Je pense que vous pouvez faire un test simple pour déterminer la valeur qui vous convient le mieux.
J'ai aussi fait un autre programme simple pour tester cette question. x Sur ma machine, une
vm.swappiness
valeur très faible (telle quevm.swappiness=1
) causera un problème de réactivité évident.À propos
SwapCached
de/proc/meminfo
:Tout d'abord, essayez
vm.page-cluster=0
, cela peut peut-être réduire certains inutilesSwapCached
du swap-in.SwapCached peut accélérer le zram de la même manière que le périphérique de swap non-zram
SwapCached
Il peut être réutilisé (gratuitement) si nécessaire:la source
Les pages doivent être échangées (sur le disque) lorsque la mémoire est pleine. Si vous utilisez la mémoire pour créer un espace pour échanger des pages lorsque la mémoire est pleine, on pourrait penser que cela bat le but, sauf si la compression fait la différence (et il serait alors naturel de compresser la mémoire directement au lieu de passer par échanger). Je suppose qu'il faudrait comparer cela, car les ordinateurs sont de plus en plus rapides à compresser et à décompresser par rapport à la vitesse de la mémoire.
la source
vm.swappiness
valeur est réglée pour le swap sauvegardé sur disque et si je dois la changer si j'utilise principalement le swap soutenu par zram.