Est-il possible d'empêcher un programme spécifique (ie rhythmbox et ses dépendances) de basculer sur le disque?
Je demande parce que j'ai un problème quand un lecteur de musique hoquet quand Chromium monopolise trop de mémoire. Existe-t-il un moyen de contourner cela? Ce n'est plus un problème dans Windows, donc il y a probablement un moyen.
ps
outop
pour voir si la rhytmbox est vraiment permutée en vérifiant le champRSS
/RES
? Je pense que votre problème est principalement causé par une mauvaise planification. Vous devriez essayerrenice
le processus de rhytmbox ou changer certains de ses paramètres, par exemple la taille du tampon audio.Réponses:
Je pense que le problème du hoquet n'est pas nécessairement causé par l'échange. Si un programme joue quelque chose, Linux devrait le remarquer et ne pas l'échanger. Les programmes qui ne font pas grand-chose sont les premiers à être échangés. Vous pouvez vérifier si le programme est vraiment échangé en regardant le champ
RSS
/RES
depuis ps ou top .RSS
est la taille de l'ensemble résident, la mémoire physique non permutée utilisée par une tâche (en kilo-octets).Je pense que votre problème est probablement dû à une mauvaise planification du processeur et des E / S et à un peu d'inefficacité de Rhythmbox qui le rend sensible aux charges système élevées. La priorité du processeur peut être modifiée avec les commandes nice et renice . La priorité d'E / S peut être modifiée avec la commande ionice . Seul le super utilisateur peut utiliser des priorités élevées. Vous devez également savoir que les gars du noyau Linux tentent d'améliorer la réactivité des systèmes de bureau avec divers correctifs à faible latence, vous pouvez donc envisager de les utiliser. L'un d'eux est un patch de ~ 200 lignes écrit par Mike Galbraith qui a impressionné même Linus. L'alternative à ce patch est l'astuce des cgroups de Lennart Poettering qui je pense sera la valeur par défaut dans Fedora 15.
Quoi qu'il en soit, sans ces correctifs, il y a deux options: démarrer le programme avec une priorité élevée ou le modifier par la suite. Pour la première option, vous pouvez utiliser un script wrapper autour de Rhythmbox:
Vous devrez l'exécuter en tant que root. Si vous ne voulez pas vous connecter en tant que root juste pour commencer, vous pouvez utiliser soit
su
ousudo
.En ce qui concerne la modification de la priorité par la suite, si vous êtes trop paresseux pour vous connecter en tant que root pour le changer, vous pouvez essayer d'utiliser un travail cron qui s'exécute toutes les 5 minutes et définit la priorité du
rhythmbox
processus, mais je ne recommanderais pas de le faire:la source
Réponse courte: vous ne pouvez pas et ne devriez pas.
Il y a longtemps, les fichiers exécutables respectaient le bit collant
+t
qui indiquerait au noyau de ne pas permuter, mais aujourd'hui, il est ignoré.Si le noyau décide qu'il doit échanger, il a certainement une raison valable. Linux est très agressif sur l'utilisation de la mémoire, car la RAM inactive est une ressource gaspillée.
Si vous ne voulez vraiment pas échanger, obtenez plus de RAM, ou tout simplement
# swapoff -a
(non recommandé, vous pouvez rendre votre système inutilisable si vous avez déjà des problèmes).Shouldn't
se passe lorsque vous développez une application et que vous ne voulez pas du tout la changer. Jetez un oeil à ce post sur stackoverflow .la source
Cela semble avoir déjà été répondu ici:
/programming/578137/can-i-tell-linux-not-to-swap-out-a-particular-processes-memory
Bien que le consensus soit que vous ne devriez probablement pas: /
la source
Il existe plusieurs façons de procéder. Vous pouvez essayer d'essayer "dit" que Linux fonctionne moins avec swap (en général):
De: https://www.kernel.org/doc/Documentation/sysctl/vm.txt
Une autre option est d'utiliser le gestionnaire de noyau cgroups, c'est spécifique à chaque processus mais vous aurez du "travail" à faire: Répondu ici: /unix/10214/per-process-swapiness-for -linux # 10227
la source
Vous pouvez utiliser
mlockall()
syscall. mlockall () force le processus mémoire à résider (= pas de swap, pas de surcharge, etc ...). AFAIK, il n'y a pas de commande shell pour le faire, mais il est facile d'en créer une. Cela ressemblerait à:Remarque, vous devez être root pour appeler
mlockall()
.Cependant, comme je l'ai dit dans une autre réponse, je ne pense pas que ce soit vraiment ce que vous voulez.
la source