Uso de simples cgroup

1 Introdução

         Completa CGroup Linux Grupo Controlo Linux, o núcleo Linux é uma função de limitação, que controla um grupo de recursos processo de separação (por exemplo, CPU, memória, disco de entrada e de saída, etc). O projeto foi iniciado pela primeira vez por engenheiros do Google em 2006 (principalmente Paul Menage e Rohit Seth), o mais antigo nome para o recipiente do processo (recipientes de processo). Em 2007, como no kernel do Linux, o recipiente (container) o termo é muito grande, a fim de evitar confusão, é cgroup renomeado, e está incorporada na versão do kernel para 2.6.24. Em seguida, o outro começou seu desenvolvimento. 

         Linux CGroupCgroup o sistema pode alocar recursos para a execução de tarefas (processos) grupos definidos pelo usuário - tal como uma combinação de tempo de CPU, memória do sistema, a largura de banda de rede, ou esses recursos. Cgroup pode monitorar a configuração, cgroup recusado o acesso a certos recursos, mesmo em um sistema executando configurado dinamicamente cgroup.

1.1 A principal função

(1) limitar o uso de recursos, tais como restrições de cache de memória limitar os sistemas de uso e arquivo.

(2) de controlo de prioridade, a utilização da CPU e IO de disco aproveitamento.

(3) alguns da auditoria ou algumas das estatísticas, o principal objetivo do faturamento.

(4) Suspende-se o processo retoma o processo de execução.

1,2 cgroups subsistema

Cgroups (grupos de controlo) com base no processo de restrição, em vez do utilizador , de modo que o processo é o mesmo para o funcionamento de super-utilizador;

cgroups subsistema:

limite 1.blkio por entrada de bloco e um dispositivo de controlo de saída. Por exemplo: discos, CDs e USB.
2.CPU restringir o uso de cpu proporção
recursos 3.cpuacct CPU para gerar relatórios cgroup tarefa.
Quando 4.cpuset multi-core tarefas cpu cgroup atribuído a cpu cpu separada e processo de vinculação de memória e reduzir o contexto de memória de comutação disponível na memória de acesso mais próximo
5.devices permitir ou negar o acesso ao dispositivo.
pausa 6.freezer e tarefa currículo cgroup.
limites de memória conjunto 7.memory e recursos de memória para produzir o relatório.
8.net_cls pacotes de rede cgroups pode ser marcado no processo, o módulo pode depois ser usado tc (controlo do tráfego) pacotes de dados de controlo.
9.net_prio - Este subsistema é usado para projetar a prioridade de tráfego de rede.

10.ns pode fazer diferentes cgroups seguinte processo usa um namespace diferente.

11.hugetlb - Este subsistema são direcionados principalmente no limite do sistema hugetlb, que é um sistema de arquivo de página grande.

ligam-se a um processo específico CPU auditoria

#yum montagem 
#yum a instalação libcgroup libcgroup Ferramentas numactl Y- 
# obter o número da linha CPU 
# grep 'processador' / proc / cpuinfo | Classificar -u | WC -l 
nó de memória # NUMA adquire informações CPU 
#numactl --hardware 
ou 
#lscpu | NUMA grep

 

# 4 Criar uma configuração nuclear pequena Diretiva de Grupo 
cgcreate -g cpuset: pequena 
cgset -r cpuset.cpus = 0-3 pequena 
cgset -r cpuset.mems = 0 pequeno 

# Criar uma política de grupo definição grande 8-core 
cgcreate -g cpuset: grande 
cgset - Grande cpuset.cpus = 0-7 P & lt 
cgset -R & lt cpuset.mems = 0 grande

# Padrão cpuset.cpus e cpuset.mems estão vazias; necessidade de fixar estes dois valores, em que o valor de referência de número do nó MEMS NUMA, o acima é encontrado por numactl --hardware 0

Nota :

1.cpuset subsistema são dois parâmetros obrigatórios são definidos, cpuset.cpus e cpuset.mems.

cpuset.cpus (obrigatório)

Isso permite que a CPU para especificar cgroup acesso tarefas. Esta é uma lista separada por vírgulas com o formato ASCII, usar traços ( "-") em nome do intervalo.

cpuset.mems (obrigatório)

Isso permite que as tarefas cgroup memória nó especificado acessível. Esta é uma lista separada por vírgulas com o formato ASCII, usar traços ( "-") em nome do intervalo.

2. Para o programa multi-threaded, o que não terá efeito;
3. configurou in / SYS / FS / cgroup / cpuset diretório aparecerá smal diretório, grande.

# Execute o comando

#cgexec -g cpuset: pequena comando execução do programa 
#cgexec -g cpuset: grande programa execute o comando

exemplo # 

# Escrever um consumo roteiro cpu

vi t1.sh 
#! / bin / bash 
x = 0 
enquanto [verdadeiro]; fazer 
    x = $ x + 1 
feito;

# Limite o programa para ser executado em um número fixo de núcleo da CPU                           

#cgexec -g cpuset: pequena sh t1.sh &

# Execute o topo de comando, e depois pressione 1 , você pode ver o número de casos por núcleo de CPU

3 restrições de uso processo de cpu

3.1 Exemplo 1

#yum montagem 
#yum a instalação libcgroup libcgroup Ferramentas numactl Y- 
#systemctl Estado cgconfig.service 
#systemctl Iniciar cgconfig.service 
# vista CGroup pontos de montagem (centos7.7), veja aqui cgroups subsistema 
#lssubsys -am

# Criar grupo de isolamento 
#cd / SYS / FS / cgroup / o CPU 
#mkdir cpu_test Descrição : O diretório é criado automaticamente gera os seguintes arquivos (Nota: O diretório não pode apagados manualmente, se você não se juntar a bota de Kai, irá desaparecer após a reinicialização ) 
#ls cpu_test /

# Execução de um script cpu consumo 
#vi t1.sh 
#! / Bin / bash 
X = 0 
o tempo [verdadeiro]; fazer 
    X = X + $ 1. 
FEITO; 
#chmod + X t1.sh 
#sh & t1.sh

# modificar o parâmetro 
# echo 20000> /sys/fs/cgroup/cpu/cpu_test/cpu.cfs_quota_us 
Nota: O padrão -1 não limita, agora em 20.000, é cpu.cfs_quota_us a 20000, cpu.cfs_period_us 100.000 em relação ao 20%; uso da CPU compreensível é limitado a 20%; 

# encontrar o número do processo aumentou tarefas da CPU dentro, olhando para cima, a utilização da CPU para baixo rapidamente 
#echo 2938 >> / sys / fs / cgroup / cpu / cpu_test / tarefas

Descrição : No caso acima, se os três são escritos para as tarefas de processo PID, haverá três casos, o processo de compartilhamento de 20% da CPU;

3.2 Exemplo 2

Descrição : Esta parte suplementar Exemplo 1, utilizando o comando para criar um grupo de controlo;

#创建控制群组
#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  

 

Acho que você gosta

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