Planificación manual de CPU's con taskset
Imaginemos que tenemos un sistema con 20 procesadores. Nuestro linux (si, el kernel) tiene un planificador (o scheduler) muy majo que reparte todos los procesos entre los procesadores de forma que todos se queden más o menos equiparados en cuanto a carga. Ahora supongamos que algunos procesos consumen de vez en cuando mucha CPU y no queremos que esta sobrecarga afecte a algunas CPU's (vale, es un escenario muy específico, pero os aseguro que se da ;)). ¿Cómo podemos alterar esta planificación para algunos casos? pues fácil, con esta receta :).
La herramienta taskset
Este programilla en Debian lo podemos encontrar en util-linux:El affinity flag
El AF es una máscara de bits que se crea para cada nuevo proceso e indica al planificador qué procesadores pueden ejecutar dicho proceso. En esta máscara cada bit representa a un procesador, siendo el procesador #0 el bit menos significativo. Cuando un proceso se crea, por defecto su AF es 0xFFFFFFFF. Esto significa que cuando el proceso sea desalojado de un procesador, cualquier otro procesador podrá seguir con su ejecución. Por defecto esta solución permite al planificador del kernel seleccionar cada vez cualquier CPU para cualquier proceso. Cualquier usuario puede obtener el AF de un proceso de una forma fácil, imaginemos que el proceso tiene como PID el 12345:Modificar el AF
Ya sabemos como funciona por defecto el AF, ahora bien, hemos dicho que un determinado proceso no queremos que nos ocupe una determinada CPU. Lo único que debemos hacer es alterar su AF: si no queremos que pueda entrar en la CPU #0 entonces su AF debe ser 0xFFFFFFFE. Ahora supongamos que el PID de dicho proceso es 12345:Más información
Básicamente:- Páginal del manual de taskset
- http://www.cyberciti.biz/tips/setting-processor-affinity-certain-task-or-process.html (aunque los comandos tienen sintaxis antigua)
[ show comments ]
blog comments powered by Disqus