augmenter la réactivité du bureau sur linux lors de l'échange

15

Toutes les distributions GNU / Linux que j'ai testées jusqu'à présent ont le problème que chaque fois que le ram est rempli et que le système commence à changer, l'interface utilisateur graphique et de bureau entière ne répond plus comme un enfer au point que parfois je dois attendre environ 5 à 10 secondes après avoir déplacé la souris physique jusqu'à ce que le pointeur de la souris se déplace réellement.

C'est une sorte de comportement gênant, en particulier sur les systèmes à faible ram.

Existe-t-il un moyen de donner à certaines applications / tâches, comme l'environnement de bureau, etc., une priorité plus élevée de rester dans la mémoire RAM que d'autres applications, de sorte que l'application monopolisant toute la mémoire soit permutée avant l'environnement de bureau, etc.?

EDIT: Je parle du cas où toute la RAM est utilisée, donc elle commencera toujours à s'échanger si elle n'est pas désactivée (je ne veux pas que les processus soient tués de manière aléatoire). J'ai eu ce problème non seulement dans les environnements à faible RAM, mais aussi avec 8 Go de RAM sur ma machine de bureau, en partie à cause de nombreuses machines virtuelles, en partie à cause d'une fuite de mémoire. ZRAM n'est pas non plus une solution car il ne fait que retarder le problème. La seule solution à laquelle je peux penser pour ce problème est un utilitaire d'espace utilisateur ou une API de noyau qui permet d'empêcher que certains travaux soient échangés ou du moins le rendent très improbable. Quelqu'un connaît-il une autre solution ou sait-il qu'un tel outil ou une telle API existe ou est prévu?

2e EDIT: ulatencyd ne semble pas fonctionner avec les nouvelles versions de systemd, selon https://aur.archlinux.org/packages/ulatencyd-git/ et https://wiki.archlinux.org/index.php/Ulatencyd . Cela peut être dû au fait que systemd a pris le contrôle total des cgroups du point de vue de l'espace utilisateur si je comprends bien.

FSMaxB
la source
3
cgroups, si vous avez activé la mémoire cgroup et la comptabilité de permutation activée ( cgroup_enable=memory swapaccount=1sur la ligne de commande du noyau; notez que cela a un coût de performance mineur). Exemple d'implémentation: ulatencyd .
derobert
@derobert Super cela semble être exactement ce que je cherchais. Je commencerai à expérimenter cela dès que j'aurai le temps.
FSMaxB
Super, ulatencyd a même un package AUR, je suppose que j'ai de la chance d'être un utilisateur d'Archlinux.
FSMaxB
Il y a même un article wiki wiki.archlinux.org/index.php/Ulatencyd
FSMaxB
Si je pouvais voter plus ce Q, je le ferais! N'y a-t-il vraiment aucun moyen direct de dire à l'interface graphique et à quelques programmes clés de rester dans la RAM pour qu'elle reste réactive? Je veux dire, quel est le pire des cas pour donner aux utilisateurs de Linux cette option? L'ordinateur tombe en panne? QUI N'A PAS FAIT CELA AVANT? :) Je veux dire parfois, je démarre accidentellement trop de machines virtuelles parce que je n'ai pas pu ajouter (numéros de RAM) correctement, puis il faut FOREVER pour remettre les choses sous contrôle. Dire à l'interface graphique et peut-être au terminal de rester dans la mémoire RAM corrigerait ce problème? S'il vous plaît, quelqu'un répond à cela!
Damon

Réponses:

1

Pour autant que je sache, ce n'est pas un problème spécifique à Linux, c'est la façon dont SWAP (ou la mémoire virtuelle) fonctionne. Si le système d'exploitation doit rechercher des données sur le disque dur par opposition à la RAM, il ralentira. Rien de ce que vous pouvez faire à ce sujet, l'accès au disque est beaucoup plus lent que l'accès à la RAM.

Vous ne pourrez pas définir la priorité avec laquelle les processus sont échangés, qui est déterminée par le noyau qui tentera de maximiser l'efficacité, vous ne pourrez pas le faire mieux. Ce que vous pouvez faire est de définir la priorité CPU d'un processus et cela pourrait vous aider. Votre système est abaissé en raison du temps qu'il faut pour lire à partir de / vers SWAP, cela signifie que le CPU devra attendre que les données pertinentes soient récupérées par le processus qui le demande avant de pouvoir continuer. Si vous définissez votre DE pour avoir une priorité plus élevée pour l'accès au processeur, cela devrait pousser ses opérations vers le haut et accélérer les choses un peu.

Ainsi, la priorité du processeur est définie avec les commandes niceet renice:

 Renice alters the scheduling priority of one or more running processes.
 The following who parameters are interpreted as process ID's, process
 group ID's, or user names.  Renice'ing a process group causes all pro‐
 cesses in the process group to have their scheduling priority altered.
 Renice'ing a user causes all processes owned by the user to have their
 scheduling priority altered.  By default, the processes to be affected
 are specified by their process ID's.

Les priorités vont de -20 (priorité la plus élevée) à 20 (priorité la plus faible). Pour modifier la priorité d'un processus en cours, vous pouvez faire:

renice -15 $PID

$PIDest le PID du processus dont vous souhaitez augmenter la priorité. Vous pouvez utiliser pgreppour savoir qui est qui. Par exemple:

renice -15 $(pgrep gnome-session)

L'autre option serait de définir le «swappiness» du système qui détermine quand il commencera le swap. Une valeur de permutation de 1 signifie qu'elle ne sera permutée que pour éviter les erreurs de mémoire insuffisante. Des valeurs plus élevées signifient qu'il commencera à échanger même s'il y a encore de la mémoire physique disponible. Vous pouvez définir cette valeur sur une valeur relativement faible pour que votre système permute le moins possible. Ajoutez cette ligne à /etc/sysctl.conf:

vm.swappiness=1

ATTENTION: Ce n'est pas une bonne idée si vous n'avez pas beaucoup de RAM, le swap est une bonne chose en général, vous devrez jouer un peu avec les valeurs pour trouver le bon équilibre pour votre système.

terdon
la source
Comme vous le dites, cela peut être résolu dans l'espace du noyau, ce qui signifie qu'il serait très bien spécifique à Linux. La modification de la permutation ne changera rien car lorsque toute la RAM est utilisée, le système échange de toute façon. Et afak la priorité d'un processus ne changera rien à sa gestion de la mémoire, mais seul le comportement du planificateur cpu et du temps cpu n'est pas vraiment utile pour accélérer l'accès au disque.
FSMaxB
La priorité du processeur @FSMaxB pourrait aider car il priorisera le DE, cela n'aidera pas si le DE lui-même est en train de permuter, mais ce sera le cas si quelque chose d'autre tient le CPU et ralentit donc la machine.
terdon
Lorsque le DE est inactif pendant un certain temps, d'après mon expérience, le DE est toujours échangé lorsque la mémoire est épuisée.
FSMaxB
@FSMaxB oui, cela a du sens puisque les DE sont des porcs de mémoire. Pourtant, augmenter sa priorité pourrait aider, au moins le planificateur ne la retiendrait pas.
terdon