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.minUna vez creado, vamos a ejecutar nuestras operaciones utilizando este nuevo project -test.min-
# cat /etc/project |grep test
test.min:102:Test Project::sysadmin:project.cpu-shares=(privileged,200,none)
# newtask -p test.minComo 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.
# id -p
uid=0(root) gid=0(root) projid=102(test.min)
# prctl -n project.cpu-shares -i pid 855Como podemos ver, el cambio utilizando el comando <projmod> no se ha visto reflejado sobre nuestro proceso <855> ya que está en ejecución.
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)
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 855En 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 -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)
# prctl -r -t privileged -n project.cpu-shares -v 200 -i project test.min
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