vm/min_free_kbytes - Pourquoi Garder Minimum de Mémoire Réservée?
Selon cette l'article:
/proc/sys/vm/min_free_kbytes: Ce paramètre contrôle la quantité de mémoire qui est conservé gratuit pour une utilisation par les réserves spéciales, y compris “atomique” allocations (ceux qui ne peuvent pas attendre pour récupérer)
Ma question est ce que ça veut dire par "ceux qui ne peuvent pas attendre pour récupérer"? En d'autres termes, j'aimerais comprendre pourquoi il y a un besoin de dire au système de garder toujours une certaine quantité minimale de mémoire libre et dans quelles circonstances cette mémoire-elle être utilisée? [Il doit être utilisé de quelque chose; ne vois pas la nécessité, autrement]
Ma deuxième question: est-ce la définition de cette mémoire de quelque chose de plus de 4MO (sur mon système) conduit à une meilleure performance? Nous avons un serveur de temps en temps d'exposition de mauvaise performance shell (par exemple ls-l prend 10-15 secondes à s'exécuter) lorsque certains processus et si la définition de ce nombre à quelque chose de plus élevé conduira à une meilleure performance shell?
OriginalL'auteur user3063877 | 2014-01-27
Vous devez vous connecter pour publier un commentaire.
(le lien est mort, on dirait qu'il est maintenant ici)
Que le texte est en se référant à atomique allocations, qui sont des demandes de mémoire qui doit être satisfaite sans renoncer au contrôle (c'est à dire le thread en cours ne peut pas être suspendu). Cela se produit le plus souvent dans les routines d'interruption, mais elle s'applique à tous les cas où la mémoire est nécessaire tout en maintenant un élément essentiel de verrouillage. Ces allocations doivent être immédiates, que vous ne pouvez pas se permettre d'attendre pour le swapper pour libérer de la mémoire.
Voir Linux-MM pour une explication plus complète, mais ici, c'est le processus d'allocation de mémoire en bref:
min_free_kbytes est peu probable pour aider beaucoup à la description des "ls-l prend 10-15 secondes à s'exécuter"; c'est probablement causée par le général de pression sur la mémoire et l'échange plutôt que la zone d'épuisement. Le min_free_kbytes paramètre ne doit permettre suffisamment de pages pour gérer les demandes immédiates. Dès que l'opération normale est reprise, le swapper processus peut être exécuté pour rééquilibrer les zones mémoire. La seule fois où j'ai dû augmenter min_free_kbytes est après l'activation de trames jumbo sur une carte réseau qui ne prend pas en charge dma diffusion.
À développer votre deuxième question un peu, vous aurez de meilleurs résultats de réglage de la vm.swappiness et la sale les ratios mentionnés dans l'article lié. Cependant, être conscient que l'optimisation de la pour "ls-l" performance peut causer d'autres processus pour devenir plus lent. Jamais optimiser pour un non-primaires cas d'utilisation.
Depuis je ne peux pas commenter, voici la mise à jour du lien de mise à jour du lien de mise à jour du lien de la page en question et le haut de répondre: - doc.opensuse.org/documentation/leap/tuning/html/book.sle.tuning/...
Lorsque la quasi-totalité de la mémoire est prise et pas de swap est disponible, Linux performance a tendance à tomber d'une falaise pour moi (tels que juste arriver à TTY1 à tuer Firefox prend 15 minutes); l'augmentation des
/proc/sys/vm/vfs_cache_pressure
à 6000 (la valeur par défaut est de 100) semble pour aider à éviter cela. Je ne voudrais pas le faire sur un serveur de production, cependant; la documentation du noyau avertit que "l'Augmentation de vfs_cache_pressure de manière significative au-delà de 100 peut avoir d'impact négatif sur les performances."OriginalL'auteur Arno
Tous les systèmes linux va tenter de rendre l'utilisation de toute la mémoire physique disponible sur le système, souvent par le biais de la création d'un système de fichiers de cache de tampons, qui a mis tout simplement un tampon d'e/S pour aider à améliorer les performances du système. Techniquement, cette mémoire est pas en cours d'utilisation, même si elle est allouée pour la mise en cache.
"attendre pour la récupération", dans votre question se réfère au processus de récupération de cette mémoire qui "n'est pas en cours d'utilisation" de sorte qu'il peut être allouée à un processus. C'est censé être transparent, mais dans le monde réel, il y a beaucoup de processus qui ne pas attendre que cette mémoire soit disponible. Java est un bon exemple, surtout lorsqu'un grand minimum de taille de segment de mémoire a été activée. Le processus tente d'allouer de la mémoire et si elle n'est pas disponible immédiatement dans un grand contiguës (atomique?) morceau, le processus meurt.
Réserver une certaine quantité de mémoire avec
min_free_kbytes
permet à cette mémoire disponible instantanément et réduit la pression sur la mémoire lorsque de nouveaux processus doivent démarrer, exécuter et terminer alors qu'il y a une forte charge de mémoire et d'un cache de tampons.4MB semble plutôt faible, car si la mémoire tampon est pleine, tout processus qui veut une affectation immédiate de plus de 4MO échouera probablement. Le réglage est très accordable et spécifiques au système, mais si vous avez un peu de GO de mémoire disponible, il peut pas faire de mal à remonter la réserve de la mémoire de 128 MO. Je ne suis pas sûr de l'effet qu'elle aura sur la coquille de l'interactivité, mais probablement positif.
OriginalL'auteur Shaun Dewberry
Cette mémoire est protégé contre l'utilisation par les processus normaux. @Arno mentionné, les procédés spéciaux qui peuvent s'exécuter inclure des routines d'interruption, qui doit être exécuté à maintenant (c'est une interruption), et de terminer avant de tous les autres processus peuvent s'exécuter (atomique). Cela peut inclure des choses comme changer la mémoire vers le disque lorsque la mémoire est pleine.
Si la mémoire est remplie d'une interruption (gestion de la mémoire) exécution du processus de swap de la mémoire dans le disque de sorte qu'il peut libérer de la mémoire pour une utilisation par les processus normaux. Mais si
vm.min_free_kbytes
est trop petit pour qu'il fonctionne, alors il verrouille le système. C'est parce que cette interruption du processus doit s'exécuter tout d'abord de libérer la mémoire afin que d'autres puissent courir, mais alors qu'il est bloqué parce qu'il n'a pas assez de mémoire réservéevm.min_free_kbytes
à faire sa tâche, ce qui entraîne un blocage.Voir aussi:
OriginalL'auteur pd12