SafeChildren Banner

Havoc Oracle Solaris Experts

lunes, 8 de febrero de 2010

Manejo de Project y Configuraciones Dinámicas en Solaris 10 - Parte 1

Introducción
Una de las ventajas que nos ofrece Solaris en la Gestión Dinámica de Recursos -ya hemos hablado en otras ocasiones de esto como en Instalar varias Bases de Datos Oracle en la misma máquina- pero hoy vamos a ver con más detalle Cómo Gestionar Dinámicamente los valores de los Projectos.

Para ello, vamos a utilizar el comando <prctl> que nos va a permitir modificar y comprobar los valores que tenemos asignados por: project, task y pid.

Antes de empezar, debemos tener en cuenta que debemos conocer algunos conceptos básicos del manejo de projects como: Cómo saber cuál es el project actual, Cómo Ejecutar un proceso con un project diferente o Cómo cambiar el project de un proceso

La gestión de los recursos de nuestra máquina utilizando project nos ofrece una granualidad muy alta a la hora de expecificar: Memoria Máxima, Tiempo de CPU, Semáforos, etc. De esta forma, podemos ir ajustando las necesidades de nuestros procesos de forma dinámica.


Creación Project y Modificación Dinámica
Vamos a ver con un ejemplo, cómo podemos crear y modificar los valores de un project <en caliente> y cómo afecta al sistema. Lo primero que haremos será crear el project TEST.MIN con un valor de project.cpu-shares = 30 y luego, lo modificaremos a 100

# projadd -c 'Test Project' -G sysadmin -K 'project.cpu-shares=(privileged,200,none)' test.min
# cat /etc/project |grep test
test.min:102:Test Project::sysadmin:project.cpu-shares=(privileged,200,none)
Una vez creado, vamos a ejecutar nuestras operaciones utilizando este nuevo project -test.min-
# newtask -p test.min
# id -p
uid=0(root) gid=0(root) projid=102(test.min)
Como hemos comentado al principio, para poder modificar los valores de un project con una tarea en ejecución será necesario utilizar el comando <prctl> ya que, si utilizamos el comnado <projmod> estos cambios sólo se verán en las nuevas ejecuciones y no en las actuales. Veamos un ejemplo, para ello, vamos a obtener el valor de cpu-shares y posteriormente lo modificaremos con projmod y veremos cómo no se ha modificado. Por último, utilizaremos prctl para modificar el valor y comprobar cómo ahora si ha sido modificado.
# prctl -n project.cpu-shares -i pid 855
process: 855: prstat -J
NAME    PRIVILEGE       VALUE    FLAG   ACTION                       RECIPIENT
project.cpu-shares
        privileged        200       -   none                                 -
# projmod -sK'project.cpu-shares=(privileged,60,none)' test.min
# prctl -n project.cpu-shares -i pid 855
process: 855: prstat -J
NAME    PRIVILEGE       VALUE    FLAG   ACTION                       RECIPIENT
project.cpu-shares
        privileged        200       -   none                                 -
# cat /etc/project |grep test
test.min:102:Test Project::sysadmin:project.cpu-shares=(privileged,60,none)
Como podemos ver, el cambio utilizando el comando <projmod> no se ha visto reflejado sobre nuestro proceso <855> ya que está en ejecución.

Ahora, vamos a ver cómo utilizando <prctl> el cambio se ve reflejado en el proceso pero no en el archivo de configuración </etc/projects>
# prctl -r -t privileged -n project.cpu-shares -v 350 -i pid 855
# prctl -n  project.cpu-shares -i pid 855
process: 855: prstat -J
NAME    PRIVILEGE       VALUE    FLAG   ACTION                       RECIPIENT
project.cpu-shares
        privileged        350       -   none                                 -
# cat /etc/project |grep test
test.min:102:Test Project::sysadmin:project.cpu-shares=(privileged,60,none)
En el ejemplo hemos modificado los valores para un pid en concreto, pero, la forma más habitual será hacer referencia al project para ello, deberemos utilizar el siguiente comando
prctl -r -t privileged -n project.cpu-shares -v 200 -i project test.min


Conclusiones
Podemos ver cómo con el uso de project y el comando prctl vamos a ajustar las necesidades de nuestro sistema de forma sencilla y rápida. Si a esto unimos el uso de pset y pools podemos tener un ajuste muy fino de los recursos asignados a cada proceso -project-

Os animo a investigar las opciones de prctl desde su man page y así poder explorar todas las opciones que nos aporta.

Referencias

No hay comentarios:

Publicar un comentario