# ¿qué opciones cgroups del kernel merece la pena activar?

## papu

buenas se que esto del cgroups es un tipo de gestion  para controlar mejor los recursos , creo que incluso  uno mismo puede hacerlo aunque eso queda fuera de mis conocimientos actuales,

lo que me interesa de cgroups es la parte que se gestiona autoaticamente por parte del s.o y que es recomendable tener activadas en el kernel  o por el contrario no tiene sentido ya que el s.o no las gestiona automaticamente sin la intervención del usuario.

yo tengo las siguientes ahora mismo:

https://i.imgur.com/7GPKTRg.png

https://i.imgur.com/y8kHRsl.png

https://i.imgur.com/tjwRaxB.png

```
localhost / # la /sys/fs/cgroup/

total 0

drwxr-xr-x  6 root root 120 29 nov 01:07 .

drwxr-xr-x  9 root root   0 29 nov 01:21 ..

dr-xr-xr-x  2 root root   0 29 nov 01:21 cpu

dr-xr-xr-x  2 root root   0 29 nov 01:21 memory

dr-xr-xr-x 11 root root   0 29 nov 01:21 openrc

dr-xr-xr-x  2 root root   0 29 nov 01:21 pids
```

y tengo rc_controller_cgroups="YES" en rc.conf lo demás no tengo idea  se como se utiliza supongo para controlar manualmente ciertos aspectos que se me escapan y por lo tanto lo tengo quitado 

```
##############################################################################

# LINUX CGROUPS RESOURCE MANAGEMENT

# If you have cgroups turned on in your kernel, this switch controls

# whether or not a group for each controller is mounted under

# /sys/fs/cgroup.

# None of the other options in this section work if this is set to "NO".

rc_controller_cgroups="YES"

# The following settings allow you to set up values for the cgroup

# controllers for your services.

# They can be set in this file;, however, if you do this, the settings

# will apply to all of your services.

# If you want different settings for each service, place the settings in

# /etc/conf.d/foo for service foo.

# The format is to specify the names of the settings followed by their

# values. Each variable can hold multiple settings.

# For example, you would use this to set the cpu.shares setting in the

# cpu controller to 512 for your service.

# rc_cgroup_cpu="

# cpu.shares 512

# "

#

#For more information about the adjustments that can be made with

#cgroups, see Documentation/cgroups/* in the linux kernel source tree.

# Set the blkio controller settings for this service.

#rc_cgroup_blkio=""

# Set the cpu controller settings for this service.

#rc_cgroup_cpu=""

# Add this service to the cpuacct controller (any value means yes).

#rc_cgroup_cpuacct=""

# Set the cpuset controller settings for this service.

#rc_cgroup_cpuset=""

# Set the devices controller settings for this service.

#rc_cgroup_devices=""

# Set the hugetlb controller settings for this service.

#rc_cgroup_hugetlb=""

# Set the memory controller settings for this service.

#rc_cgroup_memory=""

# Set the net_cls controller settings for this service.

#rc_cgroup_net_cls=""

# Set the net_prio controller settings for this service.

#rc_cgroup_net_prio=""

# Set the pids controller settings for this service.

#rc_cgroup_pids=""

# Set this to YES if you want all of the processes in a service's cgroup

# killed when the service is stopped or restarted.

# This should not be set globally because it kills all of the service's

# child processes, and most of the time this is undesirable. Please set

# it in /etc/conf.d/<service>.

# To perform this cleanup manually for a stopped service, you can

# execute cgroup_cleanup with /etc/init.d/<service> cgroup_cleanup or

# rc-service <service> cgroup_cleanup.

rc_cgroup_cleanup="YES"
```

 :Wink: 

----------

## brutico

Me interesa el tema. Me suscribo el hilo a favoritos por si acaso.

----------

## papu

quizás lo pase al generan en inglés, parece ser que nadie sabe exactamente como funciona esto , yo no lo se en absoluto  :Smile: 

lo que ocurre es que explicar ciertas cosas con mi inglés , mejor no hacerlo, de todas formas las veces que lo hecho me han entendido  :Smile: 

----------

## pelelademadera

lei hace mucho rato el tema y active lo que iba.

mañana te paso el .config... era de un c2q, pero es lo mismo para un i7 estimo...

----------

## papu

mas que activar o no se trata de saber si lo que activo lo usa el s.o de forma automatica o bien esta simplemente ahí , a mi me intersa lo que se gestiona automatico por  si mejora algun aspecto del sistema, porque activar por activar  :Smile: ,ahora tengo asi con rc.conf sin variar, de todas formas activo esas opciones pero realmente no se porque lo hago y por eso pregunto.

https://i.imgur.com/3g6dS1c.png

https://i.imgur.com/EcIN17y.png

http://i.imgur.com/cwH0Ens.png  -> esta opcion creo no estaba antes de de activar lo nuevo, no recuerdo y alguna más que habrá por ahi que no se, quizás.

```
papu@$ ls -la /sys/fs/cgroup/

total 0

drwxr-xr-x  9 root root 180  4 des 14:56 .

drwxr-xr-x  9 root root   0  4 des 14:56 ..

dr-xr-xr-x  2 root root   0  4 des 14:56 blkio

dr-xr-xr-x  2 root root   0  4 des 14:56 cpu

dr-xr-xr-x  2 root root   0  4 des 14:56 cpuacct

dr-xr-xr-x  2 root root   0  4 des 14:56 devices

dr-xr-xr-x  2 root root   0  4 des 14:56 memory

dr-xr-xr-x 11 root root   0  4 des 14:56 openrc

dr-xr-xr-x  2 root root   0  4 des 14:56 pids
```

 :Rolling Eyes: 

----------

## cameta

Yo tengo problemas con los cgroups. Me da mensajes de ficheros no encontrados al arrancar el sistema.

----------

## papu

a mi me va bien, bueno no me da errores, pero realmente no se que hace, ni como lo hace o si merece la pena tenerlo activado y porque...entonces entiendo que la gestión esta automatizada por el propio s.o

demasiadas dudas me parece a mi   :Very Happy: 

yo solo active eso en kernel ( las opciones ultimas que puse) y lo del rc.conf y no se queja nada por ahora supongo que eso es bueno.

----------

## cameta

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch01.html

 Cgroups allow you to allocate resources — such as CPU time, system memory, network bandwidth, or combinations of these resources — among user-defined groups of tasks (processes) running on a system. 

Los Cgroups  permiten asignar recursos -como tiempo de CPU, memoria del sistema, ancho de banda de la red o combinaciones de estos recursos- entre grupos de tareas (procesos) definidos por el usuario que se ejecutan en un sistema.

Vamos su utilidad es claramente para administradores de sistemas no para los que usamos el linux como un simple pc.

----------

## cameta

Los errores que me daban eran de este tipo:

/lib64/rc/sh/rc-cgroup.sh: line 98: /sys/fs/cgroup/openrc/sysctl/tasks: No such file or directory 

Se solucionan con esto:

https://bugs.gentoo.org/show_bug.cgi?id=553978

```
openrc_cgroup=/sys/fs/cgroup/openrc

        if [ -d "$openrc_cgroup" ]; then

                cgroup="$openrc_cgroup/$RC_SVCNAME"

                sleep 0.01

                mkdir -p "$cgroup"

                sleep 0.01

                [ -w "$cgroup/tasks" ] && printf "%d" 0 > "$cgroup/tasks"

        fi
```

Hay que poner dos sleep 0.01. Parece una chapuza pero elimina el mensaje de error. No hay duda de que se trata de un bug 

Mi versión es la  sys-apps/openrc-0.22.4

¿Alguien más tiene este problema?

----------

## cameta

Mi consejo:

deja las opciones que vienen por defecto.

```
--- Control Group support                                                                                            

                                                    [ ]   Example debug cgroup subsystem                                                                                

                                                    [*]   Freezer cgroup subsystem                                                                                     

                                                    [ ]   PIDs cgroup subsystem                                                                                           

                                                    [ ]   Device controller for cgroups                                                                                 

                                                    [*]   Cpuset support                                                                                                

                                                    [*]     Include legacy /proc/<pid>/cpuset file                                                                        

                                                    [*]   Simple CPU accounting cgroup subsystem                                                                          

                                                    [ ]   Memory Resource Controller for Control Groups                                                            

                                                    [ ]   HugeTLB Resource Controller for Control Groups                                                                

                                                    [ ]   Enable perf_event per-cpu per-container group (cgroup) monitoring                                              

                                                    [*]   Group CPU scheduler  --->                                                                                      

                                                    [ ]   Block IO controller                                                                                           

                                                                                                                                                                     

  
```

```
--- Group CPU scheduler                                                                                              

                                               [*]   Group scheduling for SCHED_OTHER                                                                              

                                               [ ]     CPU bandwidth provisioning for FAIR_GROUP_SCHED                                                   

                                               [ ]   Group scheduling for SCHED_RR/FIFO             
```

----------

## papu

yo uso kernel 4.9.0 y me salen opciones diferentes, y por ejemplo la opcon de Freezer controller pone que no es necesaria si uso la version2 de CG la supongo que es la que utilizo:http://imgur.com/0GS5oyr

asi que lo dejo puesto asi hasta saber algo más en concreto , y si parece un tema técnico que no estoy seguro de si le saco partido o no ahora mismo

http://imgur.com/4k3dn1x

http://imgur.com/iiT1uSX

 :Smile: 

----------

## gringo

si no sabéis de que va cgroups NO lo uséis, si se configura inadecuadamente el rendimiento del sistema sería inferior.

lo único que si puede interesar a un usuario doméstico es SCHED_AUTOGROUP que aumenta en el rendimiento de los entornos de escritorio.

saluetes

----------

## papu

la verdad  no se que hacer , no se si estos dos casos que tengo configurados , usan CONFIG_SCHED_AUTOGROUP o por el contario he de activar algo extra:

1)

lo uso en FEATURES="candy cgroup nodoc noinfo parallel-fetch parallel-install split-elog"   de mi actual make.conf

cgroup--> Use Linux control group to control processes spawned by ebuilds. This allows emerge to safely kill all subprocesses when ebuild phase exits

2)

hay un solo paquete que tiene como USE cgroups lo tengo activado 

```
 * Found these USE flags for sys-auth/consolekit-1.1.0-r1:

 U I

 + + cgroups  : Use the kernel to track processes instead of the session cookie.
```

Por otro lado parece interesante el que afecta al cfq , el  IO controller, asi que lo dejo puesto.

http://i.imgur.com/cwH0Ens.png

Y finalmente  rc.conf lo dejo  así:

```
# If you have cgroups turned on in your kernel, this switch controls

# whether or not a group for each controller is mounted under

# /sys/fs/cgroup.

# None of the other options in this section work if this is set to "NO".

rc_controller_cgroups="YES"
```

```
--- Control Group support                                             │

 │                             [ ]   Memory controller                                               │

 │                             [*]   IO controller                                                   │

 │                             [ ]     IO controller debugging                                       │

 │                             -*-   CPU controller  --->                                            │

 │                             [*]   PIDs controller                                                 │

 │                             [ ]   Freezer controller                                              │

 │                             [ ]   Cpuset controller                                               │

 │                             [ ]   Device controller                                               │

 │                             [ ]   Simple CPU accounting controller                                │

 │                             [ ]   Perf controller                                                 │

 │                             [ ]   Example controller 
```

 :Crying or Very sad: 

----------

## cameta

 *Quote:*   

>  lo único que si puede interesar a un usuario doméstico es SCHED_AUTOGROUP que aumenta en el rendimiento de los entornos de escritorio. 

 

¿Hay alguna wiki/manual para hacerlo?

----------

## papu

es automatico y activa el cpu controller con las opciones por defecto, no se si gestiona algo más. Segun lo que entiendo en el help.  Supongo que esta opción podria considerarse la minima por defecto a activar, digo yo.

https://i.imgur.com/ZglrqAA.png

----------

## cameta

¿Crees que hace falta activar algo en rc.conf para que esto funcione?

----------

## papu

 *cameta wrote:*   

> ¿Crees que hace falta activar algo en rc.conf para que esto funcione?

 

yo entiendo, y por lo que pone,  que almenos esto si, por eso abrí el post para sacarme de dudas precisamente   :Razz: 

```
# If you have cgroups turned on in your kernel, this switch controls

# whether or not a group for each controller is mounted under

# /sys/fs/cgroup.

# None of the other options in this section work if this is set to "NO".

rc_controller_cgroups="YES"
```

----------

