Resolver Problemas Consiga ayuda para problemas específicos con sus proyectos, procesos y tecnologías.

Asignar recursos con Linux cgroups ayuda a optimizar el rendimiento

En las nuevas funciones para optimizar el rendimiento con Linux, los grupos de control crean y asignan recursos a grupos de servicios específicos.

Entre las últimas funciones para la optimización del rendimiento de Linux, los grupos de control permiten crear y asignar recursos a grupos de servicios específicos. Los grupos de control garantizan un porcentaje fijo de los recursos de su servidor estén disponibles para esos servicios.

Comienza con un kernel reciente de Linux que soporta grupos de control (cgroups). Puede usar las últimas versiones de las distribuciones de Linux para empresa como Red Hat Enterprise Linux (RHEL), SUSE Linux Enterprise Server (SLES) o cualquier otra distribución Linux en la versión del kernel 2.6.24 o posterior. Aquí estamos usando RHEL 6.2.

Para configurar los cgroups, asegúrese que el paquete de software libcgroup esté instalado. Una vez finalizada la instalación, inicie los servicios cgconfig y cgred en los niveles de ejecución de su servidor utilizando chkconfig cgconfigony chkconfig cgredon. Esto crea un directorio /cgroup con un par de subdirectorios - llamados controladores - que se refieren a los recursos del sistema que se pueden limitar usando cgroups. Los que necesitamos son:

blkio: Use esta opción para limitar la cantidad de E/S que puede disponer

cpu: Limita los ciclos del CPU.

memory: Limita la cantidad de memoria concedida a los procesos.

Ahora supongamos que usted está ejecutando Oracle en el servidor y desea tener acceso a por lo menos el 75% de la memoria disponible y de los ciclos de CPU. En primer lugar, hay que crear un cgroup que defina el acceso a los recursos de la CPU y la memoria. El siguiente comando creará y nombrará el cgroup "oracle": cgcreate-g cpu,memoryoracle. Definiendo el cgroup esta manera tendrá un subdirectorio oracle en los directorios/cgroups /cpu y /cgroups/memory. En este subdirectorio, diferentes parámetros están disponibles para especificar los recursos que desea poner a disposición del cgroup.

Algunos de los parámetros ajustables en el subdirectorio de cgroup:

[root@hnl ~]# cd /cgroup/cpu/oracle/
[root@hnl oracle]# ls
cgroup.procscpu.rt_period_us cpu.stat
cpu.cfs_period_us cpu.rt_runtime_usnotify_on_release
cpu.cfs_quota_uscpu.shares tasks

Para especificar el porcentaje de recursos de CPU disponibles para el cgroup oracle, utilice el parámetro cpu.shares. Este parámetro relativo sólo tiene sentido si todo está en cgroups. Así que si le va a dar valor 80 y le da el cgroup other - que contiene todos los otros procesos - valor 20, el cgroup oracle obtiene el 80% de los recursos de CPU disponibles. Para establecer este parámetro, utilice el comando cgset: cgset -r cpu.shares=80 oracle.

Una vez que ajusta la cantidad de recursos compartidos de CPU para este cgroup, puede empezar a añadir los procesos. La mejor manera de hacer esto es iniciar el proceso que desea poner en el cgroup como argumento al comando cgexec. En este ejemplo, se había corrido cgexec -g cpu:/oracle /path/to/oracle. Ahora el proceso oracle y todos sus procesos derivados serán visibles en el archivo /cgroups/cpu/oracle/task. Habrá asignado correctamente Oracle para su cgroup específico.

 

Ahora usted ha leído cómo crear manualmente cgroups, poner los recursos a disposición de la cgroup y poner un proceso en el mismo. Usted no querrá dejar las cosas así porque en un reinicio de sistema perderá esos ajustes. Vamos a utilizar el servicio cgconfig y el servicio cgred para evitar esto. El servicio cgconfig lee un archivo de configuración - que llamaremos nuestro /etc/cgconfig.conf - en el cual los cgroups y sus recursos asignados están definidos. Esto es lo que se vería con el ejemplo oracle que hemos utilizado hasta ahora.

Para crear el archivo cgconfig.conf:

group oracle {

cpu {

cpu.shares=80

}

memory {

}

}

A continuación, cree cgrules.conf - un archivo que especifica los procesos que se pondrán en un cgroup específico de forma automática. Este archivo se lee cuando se inicia el servicio cgred. En nuestro ejemplo, tendría el siguiente contenido.

*:oraclecpu,memory/oracle

Compruebe que tanto el servicio cgconfig y el servicio cgred están iniciando a partir de los niveles de ejecución. Si es así, sus servicios se iniciarán ahora automáticamente en el cgroup apropiado.

Ahora que sabe cómo crear cgroups y asignarles recursos, ya puede administrar más eficientemente los recursos del servidor.

 

SOBRE EL AUTOR: Sander van Vugt es un entrenador independiente y consultor que radica en los Países Bajos. Van Vugt es un experto en Linux de alta disponibilidad, virtualización y rendimiento y ha completado varios proyectos que implementan los tres. Sander también es un ponente habitual en numerosas conferencias de Linux en todo el mundo. Él es también el autor de varios libros sobre Linux, como por ejemplo Beginning the Linux Command Line, Beginning Ubuntu Server Administration y Pro Ubuntu Server Administration

Profundice más

Inicie la conversación

Envíenme notificaciones cuando otros miembros comenten sobre este artículo.

Por favor cree un Nombre de usuario para poder comentar.

- ANUNCIOS POR GOOGLE

Close