Cómo comprobar si un cgroup está configurado en Linux

LinuxLinuxBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás cómo verificar si los cgroups (control groups) están configurados en tu sistema Linux. Los cgroups son una poderosa característica del kernel para administrar y controlar el uso de recursos de los procesos.

Lograrás esto listando los subsistemas de cgroups disponibles utilizando cat /proc/cgroups, examinando los puntos de montaje de cgroups en /sys/fs/cgroup y verificando el archivo de configuración de cgroups /etc/cgconfig.conf. Estos pasos proporcionarán una visión general completa de la configuración de cgroups de tu sistema.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") subgraph Lab Skills linux/ls -.-> lab-558700{{"Cómo comprobar si un cgroup está configurado en Linux"}} linux/cat -.-> lab-558700{{"Cómo comprobar si un cgroup está configurado en Linux"}} end

Listar cgroups con cat /proc/cgroups

En este paso, aprenderás cómo listar los subsistemas de cgroups disponibles en tu sistema Linux. Los cgroups (control groups) son una característica del kernel de Linux que te permite organizar los procesos en grupos jerárquicos y controlar su uso de recursos (CPU, memoria, E/S de disco, red, etc.).

Puedes pensar en los cgroups como una forma de establecer límites o asignar recursos a aplicaciones o usuarios específicos. Esto es crucial para administrar los recursos del sistema de manera efectiva, especialmente en entornos como contenedores o computación en la nube.

El sistema de archivos /proc es un sistema de archivos virtual que proporciona información sobre procesos y otra información del sistema. El archivo /proc/cgroups contiene detalles sobre los subsistemas de cgroups admitidos por tu kernel.

Para ver los subsistemas de cgroups disponibles, utilizarás el comando cat. El comando cat es una utilidad básica de Linux que se utiliza para mostrar el contenido de archivos.

Abre tu terminal si no está abierta. Puedes hacer esto haciendo clic en el icono de Xfce Terminal en el lado izquierdo de tu escritorio.

Ahora, escribe el siguiente comando en la terminal y presiona Enter:

cat /proc/cgroups

Deberías ver una salida similar a esta:

#subsys_name    hierarchy       num_cgroups     enabled
cpuset  0       1       1
cpu     0       1       1
cpuacct 0       1       1
blkio   0       1       1
memory  0       1       1
devices 0       1       1
freezer 0       1       1
net_cls 0       1       1
perf_event      0       1       1
net_prio        0       1       1
hugetlb 0       1       1
pids    0       1       1
rdma    0       1       1

Analicemos la salida:

  • #subsys_name: El nombre del subsistema de cgroups (por ejemplo, cpu, memory, blkio). Cada subsistema controla un tipo específico de recurso.
  • hierarchy: El ID de la jerarquía a la que está adjunto el subsistema. En esta salida, todos los subsistemas están adjuntos a la jerarquía 0, que es la jerarquía unificada predeterminada en las distribuciones de Linux más recientes.
  • num_cgroups: El número de cgroups actualmente creados dentro de la jerarquía de este subsistema.
  • enabled: Indica si el subsistema está habilitado (1) o deshabilitado (0) en el kernel.

Esta salida te muestra qué características de control de recursos están disponibles y activas en tu sistema. Comprender estos subsistemas es el primer paso para aprender a administrar recursos con cgroups.

Haz clic en Continuar para pasar al siguiente paso.

Verificar los montajes de cgroups en /sys/fs/cgroup

En el paso anterior, viste los subsistemas de cgroups disponibles. Ahora, exploremos dónde se montan estos cgroups en el sistema de archivos. En Linux, los cgroups generalmente se exponen a través de un sistema de archivos virtual, generalmente montado en /sys/fs/cgroup.

El sistema de archivos /sys es otro sistema de archivos virtual que proporciona una interfaz a las estructuras de datos del kernel. A menudo se utiliza para configurar y monitorear el hardware y las características del kernel. El directorio /sys/fs/cgroup es el punto de montaje estándar para el sistema de archivos de cgroups.

Para ver el contenido de este directorio y entender cómo están organizadas las jerarquías de cgroups, utilizarás el comando ls. El comando ls lista el contenido de un directorio.

Abre tu terminal si no está abierta.

Escribe el siguiente comando en la terminal y presiona Enter:

ls /sys/fs/cgroup

Deberías ver una salida similar a esta:

cgroup.controllers  cgroup.max.depth  cgroup.max.descendants  cgroup.stat  cgroup.subtree_control  cgroup.threads  cpu  cpu.stat  cpu.pressure  cpuset  cpuset.cpus  cpuset.mems  cpuset.stat  io  io.stat  io.pressure  memory  memory.stat  memory.pressure  memory.swap.max  memory.high  memory.low  memory.min  memory.swap.current  memory.current  memory.events  memory.events.local  pids  pids.current  pids.max  systemd  user.slice

Esta salida muestra los directorios y archivos dentro del directorio /sys/fs/cgroup. En sistemas que utilizan la jerarquía unificada de cgroups (cgroup v2), verás archivos como cgroup.controllers, cgroup.stat y directorios correspondientes a los controladores montados (como cpu, memory, io, pids).

Cada uno de estos directorios (como cpu, memory, etc.) representa un controlador de cgroups. Dentro de estos directorios, encontrarás archivos que te permiten configurar y monitorear los límites de recursos para los procesos dentro de ese cgroup.

Por ejemplo, si fueras a navegar al directorio cpu, encontrarías archivos relacionados con el control de recursos de CPU.

Echemos un vistazo rápido al interior del directorio cpu utilizando ls:

ls /sys/fs/cgroup/cpu

Podrías ver una salida como esta:

cgroup.controllers  cgroup.events  cgroup.freeze  cgroup.max.depth  cgroup.max.descendants  cgroup.stat  cgroup.subtree_control  cgroup.threads  cpu.max  cpu.stat  cpu.weight  cpu.pressure

Estos archivos (como cpu.max, cpu.weight) se utilizan para establecer límites y prioridades de CPU para los cgroups.

Comprender la estructura de /sys/fs/cgroup es fundamental para trabajar con cgroups, ya que es aquí donde interactúas con ellos directamente.

Haz clic en Continuar para pasar al siguiente paso.

Verificar la configuración de cgroups con cat /etc/cgconfig.conf

En los pasos anteriores, aprendiste sobre los subsistemas de cgroups disponibles y dónde se montan en el sistema de archivos. Ahora, echemos un vistazo a un archivo de configuración común para cgroups: /etc/cgconfig.conf.

Si bien los cgroups se pueden administrar directamente a través del sistema de archivos /sys/fs/cgroup, archivos de configuración como /etc/cgconfig.conf se utilizan a menudo para definir las jerarquías de cgroups y las configuraciones iniciales cuando el sistema se inicia. Este archivo es parte del paquete cgroup-tools, que proporciona utilidades para administrar cgroups.

El archivo /etc/cgconfig.conf es leído por el servicio cgconfig (si está instalado y habilitado) para configurar las jerarquías de cgroups y adjuntar controladores en el momento del arranque. Examinar este archivo puede darte una idea de cómo se configuran los cgroups en tu sistema.

Volverás a utilizar el comando cat para mostrar el contenido de este archivo de configuración.

Abre tu terminal si no está abierta.

Escribe el siguiente comando en la terminal y presiona Enter:

cat /etc/cgconfig.conf

Deberías ver una salida similar a esta (el contenido exacto puede variar según la configuración del sistema):

#
## A sample configuration file for cgconfig.
#
## The file contains two sections:
##   mount: defines the hierarchy and where to mount it.
##   group: defines the cgroup and its parameters.
#
## Example:
#
#mount {
##       cpuset = /cgroup/cpuset;
##       cpu = /cgroup/cpu;
##       cpuacct = /cgroup/cpuacct;
##       memory = /cgroup/memory;
##       devices = /cgroup/devices;
##       freezer = /cgroup/freezer;
##       net_cls = /cgroup/net_cls;
##       blkio = /cgroup/blkio;
#}
#
#group staff {
##       perm {
##               task {
##                       uid = staff;
##                       gid = staff;
##               }
##               admin {
##                       uid = staff;
##                       gid = staff;
##               }
##       }
##       cpu {
##               cpu.shares = 1000;
##       }
##       memory {
##               memory.limit_in_bytes = 256M;
##       }
#}
#
#group / {
##       cpu {
##               cpu.shares = 1024;
##       }
#}

En esta salida de ejemplo, puedes ver secciones comentadas (#) que muestran cómo podrías definir puntos de montaje para diferentes controladores y crear grupos de cgroups (como staff) con límites de recursos específicos (por ejemplo, cpu.shares, memory.limit_in_bytes).

Si el archivo está vacío o solo contiene comentarios, significa que las jerarquías de cgroups y los grupos iniciales no se están configurando a través de este archivo específico. En sistemas modernos, systemd a menudo se encarga de la gestión de cgroups, utilizando la jerarquía unificada montada en /sys/fs/cgroup.

Incluso si este archivo no se utiliza activamente para la configuración en tu sistema, conocer su existencia y propósito es importante para entender cómo se pueden administrar los cgroups.

Ahora has explorado los subsistemas de cgroups disponibles, sus puntos de montaje en el sistema de archivos y un archivo de configuración común. Esto te da una comprensión básica de cómo están estructurados y potencialmente configurados los cgroups en un sistema Linux.

Haz clic en Continuar para completar este laboratorio.

Resumen

En este laboratorio, aprendiste cómo verificar si los cgroups están configurados en un sistema Linux. Comenzaste utilizando el comando cat /proc/cgroups para enumerar los subsistemas de cgroups disponibles admitidos por el kernel, comprendiendo las columnas de salida como subsys_name, hierarchy, num_cgroups y enabled. Este paso brindó información sobre qué mecanismos de control de recursos están activos.

A continuación, verificaste los puntos de montaje de los cgroups examinando el directorio /sys/fs/cgroup, que es la ubicación estándar donde se montan las jerarquías de cgroups. Finalmente, comprobaste el archivo /etc/cgconfig.conf para ver si se definen configuraciones persistentes de cgroups, aunque este archivo puede no existir o no utilizarse en todos los sistemas, especialmente aquellos que dependen de systemd para la gestión de cgroups. Estos pasos en conjunto demuestran cómo determinar la presencia y la configuración básica de los cgroups en un sistema Linux.