El uso de simples cgroup

1 Introducción

         Completa cgroup Linux Grupo de Control Linux, el núcleo de Linux es una función para limitar, controlar un grupo de recursos proceso de separación (por ejemplo, CPU, memoria, disco de entrada y de salida, etc.). El proyecto fue iniciado por primera vez por los ingenieros de Google en 2006 (principalmente Paul Menage y Rohit Seth), el primer nombre para el contenedor de procesos (recipientes de proceso). En 2007, como en el núcleo de Linux, contenedor (contenedor) la expresión es demasiado amplia, con el fin de evitar confusiones, es cgroup cambiado de nombre, y se incorpora en la versión del kernel a 2.6.24. Entonces, el otro comenzó su desarrollo. 

         Linux CGroupCgroup el sistema puede asignar recursos para la ejecución de tareas (procesos) grupos definidos por el usuario - como una combinación de tiempo de CPU, la memoria del sistema, el ancho de banda de red, o estos recursos. Cgroup puede controlar la configuración, cgroup acceso denegado a ciertos recursos, incluso en un sistema que ejecuta configurado dinámicamente cgroup.

1.1 La función principal

(1) limitar el uso de los recursos, como las restricciones de almacenamiento en caché de memoria limitar los sistemas de uso y archivo.

(2) de control de prioridad, utilización de la CPU y el disco IO rendimiento.

(3) algunos de la auditoría o algunas de las estadísticas, el objetivo principal de la facturación.

(4) suspender el proceso se reanuda proceso de ejecución.

1.2 cgroups subsistema

Cgroups (grupos de control) basado en proceso de restricción, en lugar de que el usuario , por lo que el proceso es el mismo para la operación de super-usuario;

cgroups subsistema es:

límite 1.blkio por entrada de bloque y el dispositivo de control de salida. Por ejemplo: discos, CD y USB.
2.CPU restringir el uso de la CPU proporción
recursos de la CPU para generar 3.cpuacct tarea informes cgroup.
Cuando las tareas de la CPU multi-núcleo cgroup 4.cpuset asignados a la CPU CPU separada y el proceso de unión de la memoria y la memoria reducen el cambio de contexto disponibles en la memoria de acceso más cercano
5.devices permitir o denegar el acceso al dispositivo.
6.freezer pausa y reanudar la tarea cgroup.
límites de memoria 7.Memory conjunto, y los recursos de memoria para producir el informe.
8.net_cls paquetes de red cgroups pueden ser etiquetados en el proceso, el módulo puede ser entonces tc usado (control de tráfico) paquetes de datos de control.
9.net_prio - Este subsistema se utiliza para diseñar la prioridad del tráfico de la red.

10.ns puede hacer diferentes cgroups siguiente proceso utiliza un espacio de nombres diferente.

11.hugetlb - Este subsistema se dirige principalmente a HugeTLB límite del sistema, que es un sistema de archivos de páginas grandes.

se unen a un proceso específico cpu auditoría

#yum de montaje 
#yum la instalación libcgroup libcgroup Herramientas numactl Y- 
# obtener el número de hilos de CPU 
# grep 'Procesador' / proc / cpuinfo | Ordenar -u | wc -l 
nodo de memoria # NUMA adquiere información de la CPU 
#numactl --hardware 
o 
#lscpu | NUMA grep

 

# 4 Crear una configuración de directiva de grupo nuclear pequeño 
cgcreate -g cpuset: pequeña 
cgset r = 0-3 cpuset.cpus pequeña 
cgset r = 0 cpuset.mems pequeña 

# Crear una directiva de grupo grande de 8 núcleos 
cgcreate -g cpuset: gran 
cgset - Large cpuset.cpus = 0-7 R ^ 
cgset -R & lt cpuset.mems = 0 Large

# Default cpuset.cpus y cpuset.mems están vacías; necesidad de ajustar estos dos valores, en el que el valor de referencia de El número de nodo MEMS Numa, el de arriba se encuentra por numactl --hardware 0

nota :

1.cpuset del subsistema son Se definen dos parámetros obligatorios, cpuset.cpus y cpuset.mems.

cpuset.cpus (obligatorio)

Esto permite a la CPU para especificar el acceso cgroup tareas. Esta es una lista separada por comas con el formato ASCII, guiones de uso ( "-") en nombre de la gama.

cpuset.mems (obligatorio)

Esto permite que las tareas de memoria cgroup nodo especificado accesible. Esta es una lista separada por comas con el formato ASCII, guiones de uso ( "-") en nombre de la gama.

2. Para el programa multi-hilo, que no tiene efecto;
3. haya configurado en / SYS / FS / cgroup / cpuset directorio aparecerá directorio Smal, grande.

# Ejecutar el comando

#cgexec -g cpuset: comando pequeña ejecución del programa 
#cgexec -g cpuset: gran programa ejecute el comando

ejemplo # 

# Escribir un guión consumo de CPU

vi t1.sh 
# / bin / bash 
x = 0 
, mientras que [Real]; hacer 
    x = x + 1 $ 
hecho;

# Limitar el programa a ejecutar en un número fijo de base de la CPU                           

#cgexec -g cpuset: peces pequeños y t1.sh

# Ejecutar la parte superior del sistema y, a continuación, pulse 1 , se puede ver el número de casos por cada núcleo de CPU

3 restricciones de uso proceso CPU

3.1 Ejemplo 1

#yum de montaje 
#yum la instalación libcgroup libcgroup Herramientas numactl Y- 
#systemctl Estado cgconfig.service 
#systemctl inicio cgconfig.service 
# vista cgroup puntos de montaje (centos7.7), ver aquí cgroups subsistema 
#lssubsys -AM

# Crear grupo de aislamiento 
#cd / SYS / FS / cgroup / la CPU 
#mkdir cpu_test Descripción : Se crea el directorio genera automáticamente los archivos siguientes (Nota: El directorio no puede eliminarse manualmente, si no se inscribe en el maletero de Kai, desaparecerá después del reinicio ) 
#ls cpu_test /

# La ejecución de una secuencia de comandos de la CPU consumo 
#vi t1.sh 
# / bin / bash 
X = 0 
al mismo tiempo [Real]; hacerlo 
    . X = X + 1 $ 
HECHO; 
#chmod + X t1.sh 
#sh y t1.sh

# modificar el parámetro 
# echo 20000> /sys/fs/cgroup/cpu/cpu_test/cpu.cfs_quota_us 
Nota: El valor predeterminado -1 no limita, ahora en 20.000, es cpu.cfs_quota_us a 20.000, 100.000 cpu.cfs_period_us con respecto al 20%; uso de la CPU comprensible se limita al 20%; 

# busca el número de proceso aumenta tareas de la CPU en el interior, que mira la tapa, la utilización de la CPU de manera rápida 
#echo 2938 >> / sys / fs / cgroup / cpu / cpu_test / tareas

Descripción : En el caso anterior, si los tres se escriben en las tareas de proceso PID, habrá tres casos el proceso de compartir el 20% de la CPU;

3.2 Ejemplo 2

Descripción : Esta parte suplementaria Ejemplo 1, utilizando el comando para crear un grupo de control;

#创建控制群组
#cgcreate -g cpu:/g1
说明:这个命令会创建/sys/fs/cgroup/cpu/g1目录出来,在这个目录下有各种cgroup cpu的配置文件;

#设置CPU限制参数
#cgset -r cpu.cfs_quota_us=20000 g1
#查看是否设置成功
#cgget -r cpu.cfs_quota_us g1

#启动进程,通过top可以看到cpu占用100%,同时拿到进程pid:2231
#cat t1.sh
#/bin/bash
x=0
while [ True ];do
    x=$x+1
done;
#sh  /tmp/t1.sh  &

#将此进程加入控制群组g1
#cgclassify -g cpu:/g1 2231
#cat /sys/fs/cgroup/cpu/g1/tasks
通过top看,cpu消耗变成了20%
注意:最好将一个进程写在一个控制组内;将多个进程写在一个控制组会共享cpu限制;
如:在一个控制组内写入3个进程,cpu限制使用为20%,每个进程大概会占6%左右;

4 限制内存使用量

#创建控制群组g2
#cgcreate -g memory:g2

#查看默认内存是没有限制的
cgget -r memory.limit_in_bytes g2

#限制内存只有1GB
cgset -r memory.limit_in_bytes=1073741824 g2

#执行/tmp/highmemory.sh,进程号是21127 
#vi /tmp/highmem.sh
#/bin/bash
x="a"
while [ True ];do
    x=$x$x
done;

#将highmemory.sh进程加入g2的控制
#cgclassify -g memory:g2 21127

限制磁盘读取速度

#要控制/dev/sdb的磁盘,通过下述命令查到磁盘驱动号8,16
#ls -l /dev/sdb

#创建控制组,设定8,16磁盘有1MB的读取限制
#cgcreate -g blkio:g1 
#cgset -r blkio.throttle.read_bps_device='8:16 10485760' g1

#启动读取测试命令,拿到pid 14468
#dd if=/dev/sdb of=/dev/null

#通过命令可以看到对磁盘读写速度的消耗
#iotop

#将进程加入g1控制组后,读取速度被限制
#cgclassify -g blkio:g1 14468

-------------------------------------------------------------------------------------------------------------------------

参考链接:

https://www.cnblogs.com/menkeyi/p/10941843.html

https://www.jianshu.com/p/dc3140699e79

https://blog.csdn.net/micklf/article/details/60868649

https://blog.csdn.net/kwame211/article/details/78730705  

 

Supongo que te gusta

Origin www.cnblogs.com/llwxhn/p/12558577.html
Recomendado
Clasificación