¿Cómo puedo configurar cgroups para compartir equitativamente los recursos entre los usuarios?

11

Solía ​​haber una opción de configuración del núcleo llamada sched_user o similar en cgroups. Esto permitió (que yo sepa) que todos los usuarios compartan equitativamente los recursos del sistema. En 2.6.35 no está disponible. ¿Hay alguna manera de configurar mi sistema para compartir automáticamente los recursos io / cpu / memory entre todos los usuarios (incluido el root?). Nunca he configurado un cgroup antes, ¿hay algún buen tutorial para hacerlo? Muchas gracias.

NightwishFan
fuente
Bueno, tomé un botín en el paquete cgroups-bin en Ubuntu, y estoy bastante seguro de que "hace esto" por defecto si solo lo instalo. Supuse que requeriría configuración, sin embargo, supongo que solo lo hace si tiene necesidades especiales. Probé ejecutando el estrés con 2 subprocesos de la CPU en la raíz y 2 en mi usuario y los 4 subprocesos parecen compartir el 50% en la parte superior, lo que me hace pensar que está funcionando. Esto puede "resolverlo" para mí, sin embargo, si algo me gustaría tener una forma más clara de confirmar, o una mejor idea de cómo configurarlo, ¡gracias de nuevo!
NightwishFan

Respuestas:

12

La documentación del núcleo proporciona una cobertura general de cgroups con ejemplos.

El cgroups-binpaquete (que depende de libcgroup1) ya proporcionado por la distribución debería estar bien.

La configuración se realiza editando los siguientes dos archivos:

/etc/cgconfig.conf

Utilizado por libcgroup para definir grupos de control, sus parámetros y puntos de montaje.

/etc/cgrules.conf

Usado por libcgroup para definir los grupos de control a los que pertenece el proceso.

Esos archivos de configuración ya tienen ejemplos, así que intente ajustarlos a sus requisitos. Las páginas del manual cubren su configuración bastante bien.

Luego, inicie el administrador de carga de trabajo y el demonio de reglas:

service cgconfig restart
service cgred restart

El administrador de carga de trabajo (cgconfig) es responsable de asignar los recursos.
Agregar un nuevo proceso al administrador:

cgexec [-g <controllers>:<path>] command [args]

Agregar un proceso ya en ejecución al administrador:

cgclassify [-g <controllers>:<path>] <pidlist>

O automáticamente sobre el archivo cgrules.conf y el CGroup Rules Daemon (cgred), que obliga a cada proceso nuevo generado al grupo especificado.


Ejemplo /etc/cgconfig.conf:

group group1 {
    perm {
            task {
                    uid = alice;
                    gid = alice;
            }
            admin {
                    uid = root;
                    gid = root;
            }
    }

    cpu {
            cpu.shares = 500;
    }

}

group group2 {
    perm {
            task {
                    uid = bob;
                    gid = bob;
            }
            admin {
                    uid = root;
                    gid = root;
            }
    }

    cpu {
            cpu.shares = 500;
    }

}

mount {
    cpu = /dev/cgroups/cpu;
    cpuacct = /dev/cgroups/cpuacct;
}

Ejemplo /etc/cgrules.conf:

alice            cpu             group1/
bob              cpu             group2/

Esto compartirá los recursos de la CPU aproximadamente 50-50 entre el usuario 'alice' y 'bob'

meneo
fuente
Grupos de aprendizaje, marcó esto. Gracias.
Jigar