Quelles sont les conditions exactes basées sur ce procédé permute Linux (s) mémoire de la RAM vers un fichier d'échange?

StackOverflow https://stackoverflow.com/questions/2029015

Question

Mon serveur a 8gigs de RAM et 8gigs configurés pour le fichier d'échange. J'ai des applications intensives mémoire en marche. Ces applications ont des charges de pointe au cours de laquelle on trouve l'augmentation de l'utilisation des swaps. Environ 1 GIG de permutation est utilisé.

J'ai un autre serveur avec 4gigs de RAM et 8 Go de mémoire swap et des applications similaires intensives en cours d'exécution sur elle. Mais ici l'utilisation de swap est très négligeable. Environ 100 MB.

Je me demandais quelles sont les exactes conditions ou formule brute base sur laquelle Linux fera un transfert de sortie d'une mémoire de processus dans la RAM le fichier d'échange. Je sais que basé sur le facteur de swappiness. Que est-elle basée? Swap taille du fichier? Tous les pointeurs vers Linux documentation du noyau / code source expliquant ce sera grand.

Était-ce utile?

La solution

Je l'ai vu beaucoup de personnes affichant des explications subjectives de ce que cela fait. Voici, espérons une réponse plus complète.

Dans la LRU par division du poste 02.06.28 Linux swappiness est un multiplicateur servant à modifier arbitrairement la fraction qui est calculée à déterminer la pression accumulée dans les deux LRU.

Ainsi, par exemple sur un système sans mémoire libre gauche - la valeur de la mémoire existante que vous avez est mesurée en fonction de la vitesse de la quantité de mémoire est répertorié comme « actif » et le taux de la fréquence des pages sont promus à l'état actif après être tombé dans la liste inactive.

Un LRU avec de nombreuses promotions / rétrogradations de pages entre actifs et inactifs est dans beaucoup d'utilisation.

Fichier général stockage sauvegardé est moins cher et plus sûr d'expulser lorsque votre court de mémoire et reçoit automatiquement un modificateur de 200 (ce qui rend fichier mémoire sauvegardée 200 fois plus sans valeur que swaps mémoire sauvegardée (qui a une valeur de 0) lorsque il multiplie cette fraction.

Qu'est-ce que swappiness fait est modifier cette valeur en déduisant le nombre de swappiness que vous avez donné (par défaut 60) en mémoire de fichier et en ajoutant la valeur swappiness que vous avez donné comme un multiplicateur à anon mémoire. Ainsi, le swappiness par défaut vous laisse avec la mémoire anonyme étant 80 fois plus de valeur que la mémoire de fichiers (200-60 pour le fichier, 0 + 60 pour Anon). Ainsi, sur un système Linux typique qui a utilisé toute sa mémoire cache de page devrait être 80 fois plus actif que la mémoire anonyme pour la mémoire anonyme à permutées en faveur du cache de la page.

Si vous définissez swappiness à 100 ce qui donne Anon un modificateur de la mémoire 100 et le fichier d'un modificateur de 100 (200-100) laissant les deux LRU pondérées de façon égale. Ainsi sur un fichier système lourd qui veut le cache de la page qui fournit la mémoire anon n'est pas aussi actif que le cache de page, puis la mémoire Anon sera permuté sur le disque pour faire de la place pour le cache de page supplémentaire.

Autres conseils

Linux (ou tout autre système d'exploitation) divise la mémoire en place dans les pages (généralement 4Ko). Chacune de ces pages représentent une partie de la mémoire. Informations sur l'utilisation de ces pages est maintenue, qui contient essentiellement d'informations pour savoir si la page est libre ou est en cours d'utilisation (partie d'un processus), si elle a été récemment visitées, quel type de données qu'il contient (données de processus, le code exécutable etc. ), propriétaire de la page, etc. Ces pages peuvent également être largement divisé en deux catégories - pages de fichiers ou le cache de la page (dans laquelle toutes les données lues / écrites sur votre système de fichiers réside) et les pages appartenant à des processus.

Lorsque le système est faible sur la mémoire, le noyau commence échange des pages en fonction de leur utilisation. En utilisant une liste de pages triée w.r.t récence d'accès est commun pour déterminer quelles pages peuvent être permutées (noyau linux a une telle liste aussi).

Lors de la permutation, le noyau Linux doit décider quoi Compromis quand nuking pages en mémoire et de les envoyer à échanger. Si elle permute les pages du système de fichiers de manière trop agressive, plus les lectures sont nécessaires du système de fichiers à lire ces pages en arrière quand ils sont nécessaires. Toutefois, si elle permute les pages de processus de façon plus agressive peut nuire à l'interactivité, parce que lorsque l'utilisateur tente d'utiliser les troqué des processus, ils devront être relue à partir du disque. Voir une belle discussion sur ce point.

En définissant swappiness = 0, vous dites le noyau linux ne pas échanger les pages appartenant à des processus. Lors du réglage swappiness = 100 à la place, vous dites au noyau d'échanger les pages appartenant à des processus plus agressivement. Pour régler votre système, essayez de changer le paramètre swappiness dans les étapes de 10, suivi des performances et des pages étant permutés in / out à chaque paramètre en utilisant la commande « vmstat ». Gardez le réglage qui vous donne les meilleurs résultats. Rappelez-vous de faire ce test pendant les heures de pointe. :)

Pour les applications de base de données, swappiness = 0 est généralement recommandé. (Même alors, tester différents réglages sur vos systèmes pour arriver à une bonne valeur).

Références:
http: //www.linuxvox. com / 2009/10 / what-is-paramètre-linux-kernel-vm-swappiness-/
http://www.pythian.com/news/1913/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top