Conceptos básicos en Linux cgroups de

  

cgroups Linux pueden ser utilizados bajo el control de memoria física para una variedad de escenarios, debido a que más lo cgroups, este artículo le dará una breve introducción bajo cgroups Linux, que todos tienen su Una comprensión preliminar.

A partir de la versión 2.6.24 de comenzar, núcleo de Linux proporciona una característica llamada cgroups (grupo control). Cgroups es una abreviatura de grupos de control, que se utiliza para limitar, contar y aislar los recursos ocupados por un grupo de procesos. También es uno de los cimientos de la tecnología de virtualización ligera actual lxc (contenedor de Linux). Cada conjunto de procesos es un grupo de control, que es un cgroup. cgroups dividido en varios subsistemas, cada uno representa una instalación o un controlador de recursos de recursos de programación utilizando un cierto tipo, como reloj de la CPU, la memoria, y otra pieza de equipo. En la realización, cgroups y no hay nuevas llamadas al sistema, pero mostró un sistema de archivos cgroup, se puede poner uno o más subsistemas monta en un directorio. El Sitio

código es el siguiente:

mount -t cgroup -o cpu cpu /sys /fs /cgroup /cpu

subsistemas de la CPU se monta en el directorio /sys /Fs /cgroup /cpu. También se puede montar en un directorio de los subsistemas, o incluso montados todos en un directorio es posible, pero creo que, para cada subsistema se montan en diferentes directorios tienen una mejor flexibilidad. Utilizar montaje | awk y lsquo; $ 5 == " cgroup y " {print $ 0} ’ ver grupo de control montado actualmente. Utilice cat /proc /cgroups para ver el estado de todos los grupos de control actuales. La siguiente secuencia de comandos puede montar todos los subsistemas en sus respectivos directorios.

El código es el siguiente:

#! /Bin /bash "/p" "p" cgroot = " $ {1: - /sys /fs /cgroup} "

SUBSYS = " $ {2: CPU -blkio dispositivos cpuacct cpuset congelador net_cls memoria net_prio ns perf_event} " "/p" "p" mount -t tmpfs cgroup_root y " $ {} cgroot y "

para SS en $ SUBSYS; hacer

mkdir -p y " $ cgroot /$ ss y "

mount -t cgroup -o y " $ ss y " " $ ss y " " $ cgroot /$ ss y "

hecho

Mira los directorios que son un poco embarazosos, como ls /sys /fs /cgroup /cpu.

código es el siguiente:

cgroup.event_control cpu.cfs_period_us cpu.rt_period_us cpu.shares notify_on_release tareas

cgroup.procs cpu.cfs_quota_us cpu.rt_runtime_us cpu.stat release_agent

Donde <; cpu. " comienza con algo específico de este subsistema. Los otros están en el directorio correspondiente a cada subsistema. Estos archivos se utilizan para leer la información de uso de recursos y las restricciones de recursos. Para crear un grupo de control, cree un directorio en el subsistema deseado. Por ejemplo, mkdir /sys /fs /cgroup /cpu /foo crea un grupo de control para /foo. El mismo conjunto de archivos aparecerá en el directorio recién creado. En este directorio, puede continuar creando cgroups creando directorios. En otras palabras, cgroups puede ser tan jerárquico como la estructura de directorios. Montar un directorio de puntos con cada subsistema es equivalente al directorio raíz. Cada ruta diferente representa un cgroup diferente. En diferentes subsistemas, la misma ruta representa el mismo grupo de control. Por ejemplo, la CPU, la memoria, tanto en directorio /bar foo que se puede utilizar /foo /bar operados CPU, memoria dos subsistemas. Para el mismo subsistema, cada proceso pertenece y pertenece a solo un cgroup, y el valor predeterminado es el cgroup raíz. La jerarquía facilita la organización y gestión de los grupos de control. Para algunos elementos de configuración, la jerarquía también está relacionada con la asignación de recursos. Alternativamente, puede modificar el propietario de un directorio para que los usuarios no root también puedan operar en ciertos grupos de seguridad.

La configuración y lectura de cgroups se realiza leyendo y escribiendo esos archivos. Por ejemplo

código es el siguiente:

2048 # echo "/sys/fs/cgroup/cpu/foo/cpu.shares

put /cpu foo del grupo de control. El parámetro de acciones está configurado en 2048.

Como se mencionó anteriormente, algunos archivos son comunes a todos los directorios. Esos son los ajustes universales. Entre ellas, las tareas y cgroups.procs se utilizan para administrar procesos en el grupo de control. Para agregar un proceso a un grupo de control, escriba el pid en el archivo de tareas en el directorio apropiado. El Sitio

código es el siguiente:

5678 # echo "/sys /fs /cgroup /cpu /foo /tareas

se añade al proceso de poner grupo de control 5678 /foo. Entonces, ¿cuál es la diferencia entre tareas y cgroups.procs? Las restricciones de gestión en el "proceso" mencionado anteriormente en realidad no son lo suficientemente precisas. La unidad que el sistema programa para las tareas es hilos. Aquí, lo que ves en las tareas es el ID de hilo. El cgroups.procs es el id del grupo de hilos, que también se conoce como el id del proceso. A pid general escrito a las tareas, sólo la rosca correspondiente pid, así como otros procesos generados por el mismo, pertenece a la rosca grupo de control, otros hilos no son originales. Escribir en cgroups.procs agregará todos los subprocesos actuales. Si los cgroups.procs escritura no es un identificador de grupo de hilos, sino un ID del tema general, se encontrará automáticamente el ID del grupo de hilos que corresponde a participar. Después de que un proceso se une a un grupo de control, las restricciones correspondientes al grupo de control surten efecto inmediatamente. Para saber a qué grupo de control pertenece un proceso, puede verlo por cat /proc /"pid" /cgroup.

Para mover el proceso fuera del grupo de control, escriba el pid en el archivo de tareas del cgroup raíz. Debido a que cada proceso pertenece y pertenece a solo un cgroup, después de agregar el nuevo cgroup, se libera la relación original. Para eliminar un cgroup, puede usar rmdir para eliminar el directorio correspondiente. Pero antes de eliminar, debe dejar que se retiran del proceso, se han dado a conocer los recursos del subsistema correspondientes, de lo contrario no se puede eliminar.

Anteriormente, los cgroups se manipulaban mediante el acceso al sistema de archivos. De hecho, también hay un conjunto de herramientas de línea de comandos.

lssubsys -AM puede ver el punto de montaje de los subsistemas, así como un conjunto de y " CG " el principio del comando se puede utilizar para administrar. Donde cgexec se puede usar para ejecutar un programa directamente en un grupo de control específico en algunos subsistemas. Como cgexec -g " cpu, blkio: /foo " bash. Otros comandos y parámetros específicos pueden ser vistos por el hombre.

Aquí es una versión de la cgexec fiesta, demuestra el uso de cgroups, y también se puede utilizar en casos de incertidumbre acerca de si la herramienta de instalación de línea de comandos.

El código es el siguiente:

#! /bin /bash "/p" "p" # uso:

#. /cgexec.sh CPU: G1, memoria: G2 /G21 sueño 100 "/p" "p" blkio_dir = " /sys /fs /cgroup /blkio y "

memory_dir = " /sys /fs /cgroup /memoria y "

cpuset_dir = " /sys /fs /cgroup /cpuset y "

perf_event_dir = " /sys /fs /cgroup /perf_event y "

freezer_dir = y " /sys /fs /cgroup /congelador y "

net_cls_dir = " /sys /fs /cgroup /net_cls y "

cpuacct_dir = " /sys /fs /cgroup /cpuacct y "

cpu_dir = " /sys /fs /cgroup /cpu y "

hugetlb_dir = " /sys /fs /cgroup /hugetlb y "

devices_dir = " /sys /fs /cgroup /dispositivos y " "grupos = " $ 1 y "

de cambio" P "/p" "/p" "P" IFS = ‘, ’ g_arr = ($ grupos)

para g en $ {g_arr [@]}; hacer

IFS = ‘: y rsquo; g_info = ($ g)

si [$ {# g_info [@]} -ne 2]; a continuación,

echo " malo arg $ g " "&2

continuar

fi

g_name = $ {g_info [0]}

g_path = $ {g_info [1]}

Si [" $ g_path y " == y " $ { g_path # /} "]; a continuación,

g_path = " /$ g_path y "

fi

echo $ g_name $ g_path

var = " $ {g_name} _dir "

d = $ {! var}

if [-z y " $ d "]; a continuación,

Echo " malo cg $ nombre g_name y " "&2

continuar

fi

ruta = " $ {d} $ {} g_path y "

if [! -d y " $ trayectoria y "]; a continuación,

Echo " cg no existe y " "&2

continuar

fi

Echo " $$ y " "" $ {ruta} /tareas "

hecho" /p "" p "exec $ *

la descripción anterior se relaciona con la cgroups Linux, cgroups proporcionar múltiples funciones, este artículo sólo se describen algunos conceptos básicos cgroups, si usted quiere saber más cgroups, permanece atento a los sistemas de sitio de origen.

Copyright © Conocimiento de Windows All Rights Reserved