En la medida en que los procesadores multi-núcleo se tornan cada vez más comunes tanto en servidores como en latops o PCs de escritorio, e incluso hasta en dispositivos móviles, cada vez son más las aplicaciones optimizadas para este tipo de sistemas. No obstante, a veces puede resultar útil vincular un programa o proceso a uno o varios núcleos específicos. Veamos cómo conseguirlo…
Instalar taskset
La herramienta taskset forma parte del paquete “util-linux”. La mayor parte de las distribuciones Linux vienen con el paquete pre-instalado de forma predeterminada. En caso de que taskset no esté disponible, es posible instalarlo de la siguiente manera:
En Debian/Ubuntu y derivados:
sudo apt-get install util-linux
En Fedora y derivados:
sudo yum install util-linux
Ver la afinidad de CPU (CPU affinity) de un proceso en ejecución
Para recuperar la información de afinidad de CPU de un proceso, hay que utilizar el siguiente formato:
taskset -p PID
Por ejemplo, para comprobar la afinidad de la CPU de un proceso con PID 2915:
taskset -p 2915
Devuelve el resultado:
pid 2915's current affinity mask: ff
taskset devuelve la afinidad de CPU actual en un formato de máscara de bits hexadecimal. En el ejemplo, la afinidad (representada en una máscara de bits hexadecimal) corresponde a “11111111” en formato binario, lo que significa que el proceso puede ejecutarse en cualquiera de los ocho núcleos de CPU diferentes (de 0 a 7).
El bit más bajo en una máscara de bits hexadecimal corresponde al núcleo ID 0, el segundo bit más bajo desde la derecha al núcleo ID 1, el tercer bit más bajo al núcleo ID 2, etc. Así, por ejemplo, una afinidad de CPU “0x11″ representa a los núcleos ID 0 y 4.
taskset puede mostrar la afinidad de CPU como una lista de procesadores en lugar de una máscara de bits, lo cual es mucho más fácil de leer. Para utilizar este formato, hay que ejecutar taskset con la opción “-c”. Por ejemplo:
taskset -cp 2915
Devuelve el resultado:
pid 2915's current affinity list: 0-7
Obligar a un proceso a que se ejecute en un núcleo específico
Utilizando taskset, se puede asignar un proceso en ejecución a un núcleo específico de la CPU. Para ello, hay que utilizar el siguiente formato:
taskset -p COREMASK PID
taskset -cp CORE-LIST PID
Por ejemplo, para asignar un proceso a los núcleos 0 y 4, hay que ejecutar:
taskset -p 0x11 9030
Lo que devuelve el resultado:
pid 9030's current affinity mask: ff
pid 9030's new affinity mask: 11
En forma equivalente, se puede ejecutar:
taskset -cp 0,4 9030
Con la opción “-c”, se puede especificar una lista de IDs de núcleo numéricos, separados por comas, o incluso se pueden incluir rangos (por ejemplo, 0,2,5,6-10).
Lanzar un programa utilizando un núcleo específico
taskset también permite lanzar un nuevo programa utilizando una serie de núcleos específicos. Para ello, hay que utilizarlo con el siguiente formato:
taskset COREMASK EJECUTABLE
Por ejemplo, para poner en marcha el programa VLC en el núcleo ID 0 de la CPU, hay que utilizar el siguiente comando:
taskset -c 0 vlc
Dedicar un núcleo únicamente a un programa en particular
Si bien taskset permite asignar a un programa a un núcleo en particular, eso no significa que no haya otros programas o procesos que hagan uso del mismo. Para evitar esto y dedicar un núcleo entero a un programa en particular, hay que utilizar el parámetro del kernel “isolcpus”, que permite reservar un núcleo durante el arranque.
Para ello, hay que añadir el parámetro “isolcpus = ” en la línea del kernel en GRUB. Por ejemplo, para reservar los núcleos ID 0 y 1, hay que añadir “isolcpus = 0,1″.
Una vez hecho esto, el planificador de Linux no asignará ningún proceso regular al núcleo reservado, a menos que sea específicamente asignado con taskset.
Fuente: xmodulo & taskset man pages.
The post Cómo asignar un programa a un núcleo del CPU usando taskset appeared first on Desde Linux.

Continúar leyendo...
Instalar taskset
La herramienta taskset forma parte del paquete “util-linux”. La mayor parte de las distribuciones Linux vienen con el paquete pre-instalado de forma predeterminada. En caso de que taskset no esté disponible, es posible instalarlo de la siguiente manera:
En Debian/Ubuntu y derivados:
sudo apt-get install util-linux
En Fedora y derivados:
sudo yum install util-linux
Ver la afinidad de CPU (CPU affinity) de un proceso en ejecución
Para recuperar la información de afinidad de CPU de un proceso, hay que utilizar el siguiente formato:
taskset -p PID
Por ejemplo, para comprobar la afinidad de la CPU de un proceso con PID 2915:
taskset -p 2915
Devuelve el resultado:
pid 2915's current affinity mask: ff
taskset devuelve la afinidad de CPU actual en un formato de máscara de bits hexadecimal. En el ejemplo, la afinidad (representada en una máscara de bits hexadecimal) corresponde a “11111111” en formato binario, lo que significa que el proceso puede ejecutarse en cualquiera de los ocho núcleos de CPU diferentes (de 0 a 7).
El bit más bajo en una máscara de bits hexadecimal corresponde al núcleo ID 0, el segundo bit más bajo desde la derecha al núcleo ID 1, el tercer bit más bajo al núcleo ID 2, etc. Así, por ejemplo, una afinidad de CPU “0x11″ representa a los núcleos ID 0 y 4.
taskset puede mostrar la afinidad de CPU como una lista de procesadores en lugar de una máscara de bits, lo cual es mucho más fácil de leer. Para utilizar este formato, hay que ejecutar taskset con la opción “-c”. Por ejemplo:
taskset -cp 2915
Devuelve el resultado:
pid 2915's current affinity list: 0-7
Obligar a un proceso a que se ejecute en un núcleo específico
Utilizando taskset, se puede asignar un proceso en ejecución a un núcleo específico de la CPU. Para ello, hay que utilizar el siguiente formato:
taskset -p COREMASK PID
taskset -cp CORE-LIST PID
Por ejemplo, para asignar un proceso a los núcleos 0 y 4, hay que ejecutar:
taskset -p 0x11 9030
Lo que devuelve el resultado:
pid 9030's current affinity mask: ff
pid 9030's new affinity mask: 11
En forma equivalente, se puede ejecutar:
taskset -cp 0,4 9030
Con la opción “-c”, se puede especificar una lista de IDs de núcleo numéricos, separados por comas, o incluso se pueden incluir rangos (por ejemplo, 0,2,5,6-10).
Lanzar un programa utilizando un núcleo específico
taskset también permite lanzar un nuevo programa utilizando una serie de núcleos específicos. Para ello, hay que utilizarlo con el siguiente formato:
taskset COREMASK EJECUTABLE
Por ejemplo, para poner en marcha el programa VLC en el núcleo ID 0 de la CPU, hay que utilizar el siguiente comando:
taskset -c 0 vlc
Dedicar un núcleo únicamente a un programa en particular
Si bien taskset permite asignar a un programa a un núcleo en particular, eso no significa que no haya otros programas o procesos que hagan uso del mismo. Para evitar esto y dedicar un núcleo entero a un programa en particular, hay que utilizar el parámetro del kernel “isolcpus”, que permite reservar un núcleo durante el arranque.
Para ello, hay que añadir el parámetro “isolcpus = ” en la línea del kernel en GRUB. Por ejemplo, para reservar los núcleos ID 0 y 1, hay que añadir “isolcpus = 0,1″.
Una vez hecho esto, el planificador de Linux no asignará ningún proceso regular al núcleo reservado, a menos que sea específicamente asignado con taskset.
Fuente: xmodulo & taskset man pages.
The post Cómo asignar un programa a un núcleo del CPU usando taskset appeared first on Desde Linux.
Continúar leyendo...