Cgroups

Intégration des cgroups en hiérarchie unifiée dans le noyau Linux avec systemd.

cgroups (control groups) est une fonctionnalité du noyau Linux pour limiter, compter et isoler l'utilisation des ressources (processeur, mémoire, utilisation disque, etc.).

Ce travail a été engagé à l'initiative d'ingénieurs de Google (d'abord Paul Menage et Rohit Seth) en 2006 sous le nom « conteneur de processus». Fin 2007, il a été renommé Control Groups (à cause de la confusion causée par les différentes significations du terme « conteneur » dans le noyau Linux) et intégré à la version 2.6.24 du noyau Linux. Depuis, de nombreuses nouvelles fonctionnalités et contrôleurs ont été ajoutés.

Fonctionnalités

L'un des buts de la conception de cgroups a été de fournir une interface unifiée à différents cas d'utilisation, en allant du contrôle de simples processus (comme nice) à la virtualisation au niveau du système d'exploitation (comme OpenVZ, Linux-VServer, LXC). Cgroups fournit :

Utilisation

Un groupe de contrôle est une suite de processus qui sont liés par le même critère. Ces groupes peuvent être organisés hiérarchiquement, de façon que chaque groupe hérite des limites de son groupe parent. Le noyau fournit l'accès à plusieurs contrôleurs (sous-systèmes) à travers l'interface cgroup. Par exemple, le contrôleur « memory » limite l'utilisation de la mémoire, « cpuacct » comptabilise l'utilisation du processeur, etc.

Les Control groups peuvent être utilisés de plusieurs façons :

La documentation du noyau Linux contient de nombreux détails sur l'installation et l'utilisation des groupes de contrôle.

Isolation par espace de nommage

Bien que ne faisant pas techniquement partie du travail des groupes de contrôle, une fonctionnalité liée est l’isolation par espace de nommage, dans laquelle des ensembles de processus sont séparés de telle façon qu'ils ne puissent pas « voir » les ressources des autres groupes. Par exemple, un espace de nommage par identifiant de processus (PID) fournit un ensemble distinct d'identifiants de processus dans chaque espace de nommage. Sont aussi disponibles des espaces de nommage par mount, UTS, réseau et SysV IPC. Très tôt dans le développement des groupes de contrôle, le sous-système « ns » a été ajouté, pour intégrer les espaces de nommage et les groupes de contrôle. Si le groupe de contrôle « ns » était monté, chaque espace de nommage aurait dû aussi créer un nouveau groupe dans la hiérarchie des groupes de nommage. Ce fut une tentative qui fut jugée plus tard peu adaptée pour l'API cgroups, et supprimée du noyau.

Les espaces de nom sont créés avec la commande « unshare » ou un appel système, ou en tant que nouveaux marqueurs dans un appel système « clone ».

Références

  1. ↑ (en) Jonathan Corbet, « Process containers », sur LWN.net, (consulté le ).
  2. 1 2 3 (en) Jonathan Corbet, « Notes from a container », sur LWN.net, (consulté le ).
  3. ↑ (en) Jonathan Corbet, « Controlling memory use in containers », sur LWN.net, 31 juil. 31 juillet 2007 (consulté le ).
  4. ↑ (en) Balbir Singh et Vaidynathan Srinivasan, « Containers: Challenges with the memory resource controller and its performance » [PDF], Ottawa Linux Symposium,
  5. ↑ (en) Jonathan Corbet, « Kernel space : Fair user scheduling for Linux », sur networkworld.com via Internet Archive, Network World, (consulté le ).
  6. ↑ (en) Kamkamezawa Hiroyu « Cgroup and Memory Resource Controller » () (lire en ligne) [PDF].
  7. 1 2 (en) Dave Hansen « Resource Management » (lire en ligne) [PDF].
  8. ↑ Cyril Zarak, « Utilisation des cgroups v1 », sur zarak.fr, Cyril `zarak`, (consulté le ).
  9. ↑ (en) Matt Helsley, « LXC : Linux container tools », sur IBM Developer, IBM developerWorks, 3 fé. 2009 (consulté le ).
  10. ↑ (en) « Grid Engine cgroups Integration », sur scalablelogic.com, (consulté le ).
  11. ↑ https://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt
  12. ↑ (en) Pavel Emelyanov, Kir Kolyshkin, « PID namespaces in the 2.6.24 kernel », sur LWN.net, (consulté le ).
  13. ↑ (en) Jonathan Corbet, « Network namespaces », sur LWN.net, (consulté le ).
  14. ↑ (en) Serge E. Hallyn, Ram Pai, « Applying mount namespaces », sur IBM Developer, IBM developerWorks, (consulté le ).
  15. ↑ (en) Janak Desai, « Linux kernel documentation on unshare »,

Annexes

Articles connexes

Liens externes