contrôler la priorité des applications à l'aide de cgroups

8

Je voudrais mieux comprendre les cgroups et je voudrais comprendre les cas d'utilisation pour appliquer les cgroups.

Les groupes de contrôle sont-ils un bon moyen de hiérarchiser différentes applications (c.-à-d. D'accorder une priorité plus élevée à des types d'applications spécifiques comme les serveurs Web)?

Johnnie
la source
La limitation du processeur est un bon cas d'utilisation pour les groupes de contrôle
Ken Sharp

Réponses:

8

Il existe plusieurs utilisations pour les groupes de contrôle . De l'administration du système, le plus important est probablement la limitation des ressources - l'exemple classique ici est l'accès au processeur. Si vous créez un groupe pour, par exemple, sshdet lui donnez une part de temps CPU non négligeable (par rapport à d'autres groupes ou à la valeur par défaut sous laquelle relèvent tous les processus non triés), vous êtes assuré de pouvoir vous connecter même lorsque la machine fonctionnera une tâche gourmande en CPU.

Plus intéressant, si vous donnez à ce processus "d'accès à distance" un partage CPU beaucoup plus élevé que le reste, vous pourrez vous connecter presque instantanément (car le démon ssh sera priorisé sur le reste des processus en cours d'exécution) sans vous blesser la puissance de calcul globale de la machine, car les ressources sont allouées uniquement en fonction des besoins. Vous souhaitez généralement effectuer cette opération avec la hiérarchisation des E / S (y compris le réseau). Cependant, comme John le souligne correctement dans le commentaire ci-dessous, on ne veut pas faire ces choses négligemment (car cela pourrait se déclencher de manière inattendue). Une chose importante à garder à l'esprit est que les groupes sont hérités par défaut - c'est-à-dire que l'on ne veut pas démarrer un porc mémoire / CPU à partir d'une telle session ssh. Pourtant, pour cela, il existe des mécanismes qui peuvent affecter des processus aux groupes de contrôle au démarrage.

Une autre utilisation consiste à isoler les processus les uns des autres - en combinaison avec d'autres fonctionnalités (isolation de l'espace de noms) dans les noyaux Linux récents, ils sont utilisés pour créer une virtualisation au niveau du système d'exploitation comme le LXC (Linux Containers) .

En dehors de cela, vous pouvez effectuer diverses tâches de comptabilité et de contrôle (geler certains groupes de processus, les affecter à des cœurs de processeur spécifiques, etc.).

Les deux liens ici devraient être un point de départ raisonnable si vous recherchez plus d'informations. Vous pouvez également vouloir vérifier le Documentation/cgroupsrépertoire dans l'arborescence des sources du noyau Linux.

peterph
la source
Merci. l'exemple sshd est intéressant et évoque une autre pensée connexe. un aspect que je n'avais pas pris en compte est de s'assurer que les autres ressources sont allouées de manière appropriée - je suppose qu'une personne ayant une connaissance incomplète du profil d'une application peut faire des ravages en allouant uniquement des ressources pour le processeur (dans cet exemple) et aucune allocation pour les I / O (disons réseau). Si oui, existe-t-il des profils bien connus pour les groupes de contrôle publiés quelque part?
Johnnie
@John question intéressante en effet. Vous voudrez peut-être vérifier les distributions qui ont systemd, qui (ab) utilisent cgroups à ses propres fins - les fichiers d'unité systemd pour les services peuvent donner quelques indices sur ce qui pourrait être raisonnable. Mais au final, c'est toujours à l'administrateur système d'apprendre à la dure, ce qui n'est vraiment pas la "bonne idée (TM)".
peterph
1
@kokbira dépend de quel niveau - généralement vous écrivez dans le cgrouppseudo-système de fichiers que vous devrez peut-être monter en premier. Dans la plupart des cas aujourd'hui, le système init fait cela pour vous et utilise déjà déjà les cgroups d'une manière ou d'une autre. La seule réponse définitive est de lire la documentation: documentation du noyau , OpenRC @ Gentoo , systemd @ freedesktop .
peterph
1
@kokbira le système d'exploitation fait ce que vous lui dites (au moins un bon - il y en a qui font beaucoup d'autres choses que vous ne leur dites pas, mais c'est une autre histoire). L'idée est que si vous exécutez une application, vous voulez qu'elle obtienne tout ce dont elle a besoin pour effectuer tout ce que vous attendez d'elle. Si l'application se comporte mal, c'est à l'opérateur du système (qui se trouve être vous dans ce cas) de faire quelque chose. Les auteurs de la distribution pourraient proposer des méthodes heuristiques pour détecter ce type de problèmes, mais cela causerait plus de problèmes qu'il corrigerait.
peterph
1
@kokbira comme pour Firefox lui-même, je suggère d'utiliser des addons qui diminuent la charge imposée au navigateur et, par conséquent, à l'ensemble du système. D'après mon expérience, l'origine NoScript et uBlock suffit. Surtout NoScript dans le "tout bloquer par défaut" fait des merveilles - activez simplement le strict minimum dont vous avez besoin pour travailler avec les sites Web que vous utilisez et vous pouvez facilement accéder à des centaines d'onglets sur un système de RAM de 8 Go et toujours fonctionner assez bien. De plus, vous avez le niveau de protection supplémentaire contre tous les déchets JS que la plupart des sites Web utilisent de nos jours pour des effets de fantaisie inutiles.
peterph