Tutorial de comandos de tareas de Linux para principiantes (con ejemplos)

Cómo cambiar la afinidad de la CPU usando el conjunto de tareas

¬ŅHas o√≠do hablar del t√©rmino afinidad del procesador? Es una funci√≥n que le permite vincular o desvincular procesos a una unidad central de procesamiento en particular o a un rango de CPU. S√≠, puede decirle al sistema qu√© n√ļcleo(s) de CPU se deben usar para ejecutar un proceso en particular. Para obtener detalles te√≥ricos sobre por qu√© existe la afinidad del procesador, dir√≠jase a aqu√≠.

Aquí, en este tutorial, discutiremos una utilidad Рdenominada conjunto de tareas Рque le permite lograr la afinidad del procesador. Pero antes de hacerlo, vale la pena mencionar que todos los ejemplos de este tutorial se probaron en una máquina Ubuntu 20.04 LTS y en Debian 10.

Comando de conjunto de tareas de Linux

El comando tasket le permite configurar o recuperar la afinidad de CPU de un proceso. A continuación se muestra su sintaxis:

taskset [options] mask command [argument...]
taskset [options] -p [mask] pid

Así es como la página de manual de la herramienta lo explica:

       taskset  is  used  to  set  or  retrieve  the CPU affinity of a running
       process given its pid, or to launch a new  command  with  a  given  CPU
       affinity.   CPU affinity is a scheduler property that "bonds" a process
       to a given set of CPUs on the system.  The Linux scheduler  will  honor
       the  given CPU affinity and the process will not run on any other CPUs.
       Note that the Linux scheduler also supports natural CPU  affinity:  the
       scheduler attempts to keep processes on the same CPU as long as practi?
       cal for performance reasons.  Therefore, forcing a specific CPU  affin?
       ity is useful only in certain applications.
The CPU affinity is represented as a bitmask, with the lowest order bit
corresponding to the first logical CPU and the highest order bit corre?
sponding  to  the  last logical CPU.  Not all CPUs may exist on a given
system but a mask may specify more CPUs than are present.  A  retrieved
mask  will  reflect only the bits that correspond to CPUs physically on
the system.  If an invalid mask is given (i.e., one that corresponds to
no  valid  CPUs on the current system) an error is returned.  The masks
may be specified in hexadecimal (with or without a leading "0x"), or as
a CPU list with the --cpu-list option.  For example,

0x00000001  is processor #0,

0x00000003  is processors #0 and #1,

0xFFFFFFFF  is processors #0 through #31,

32          is processors #1, #4, and #5,

--cpu-list 0-2,6
is processors #0, #1, #2, and #6.

When  taskset returns, it is guaranteed that the given program has been
scheduled to a legal CPU.

Los siguientes son algunos ejemplos con estilo de preguntas y respuestas que le darán una mejor idea de cómo funciona el comando taskset.

Q1. ¬ŅC√≥mo usar el conjunto de tareas para recuperar la afinidad de la CPU de un proceso?

Si desea que Taskset muestre la afinidad de la CPU de un proceso que ya se est√° ejecutando, use el comando de la siguiente manera:

taskset -p [PID]

Simplemente reemplace PID con la ID del proceso cuya afinidad de CPU desea obtener. Por ejemplo:

taskset -p 9726

El comando anterior devolvió el siguiente resultado:

pid 9726's current affinity mask: f

Entonces, el valor hexadecimal ‘f’ aqu√≠ significa que el proceso puede ejecutarse en cualquiera de los 4 n√ļcleos del procesador: 0,1,2,3.

Si desea que la salida sea en términos de rango de CPU, puede agregar la opción de línea de comando -c.

taskset -cp 9726

La siguiente es la salida en este caso:

pid 9726's current affinity list: 0-3

Q2. ¬ŅC√≥mo cambiar la afinidad de la CPU usando el conjunto de tareas?

Para modificar la afinidad de la CPU de un proceso existente, debe especificar el ID del proceso (como hicimos en la sección anterior) junto con una máscara hexadecimal que define la nueva afinidad.

Por ejemplo, la afinidad de CPU actual del proceso Gedit (PID: 9726) es ‘f’.

Cómo cambiar la afinidad de la CPU usando el conjunto de tareas

Para cambiar la afinidad a 0x11, use el siguiente comando:

taskset -p 0x11 9726

Y luego puede verificar nuevamente la nueva afinidad usando el siguiente comando:

taskset -p 9726

Las siguientes capturas de pantalla muestran los resultados de estos comandos en mi caso:

Usando el conjunto de tareas

Entonces puedes ver que la afinidad cambió.

Q3. ¬ŅC√≥mo asignar un rango de CPU al cambiar la afinidad?

Esto no es gran cosa. Todo lo que tiene que hacer es agregar la opci√≥n de l√≠nea de comando -c al comando que usamos en la secci√≥n anterior junto con el rango de n√ļcleo de la CPU como entrada.

Aquí hay un ejemplo:

conjunto de tareas -cp 0,3 9726

La siguiente es la salida producida en este caso:

pid 9726's current affinity list: 0
pid 9726's new affinity list: 0,3

Q4. ¬ŅC√≥mo lanzar un proceso con afinidad de CPU predefinida?

Sí, también puede iniciar un proceso con una afinidad de CPU establecida.

Por ejemplo, inicié el editor de gedit de texto con afinidad de CPU 0xa.

conjunto de tareas 0xa gedit

Conclusión

De acuerdo, el comando taskset no es para un usuario de l√≠nea de comandos promedio. Es utilizado principalmente por expertos del lado del servidor para la optimizaci√≥n de procesos en un entorno de m√ļltiples n√ļcleos. Hemos discutido los conceptos b√°sicos de la herramienta aqu√≠. Para obtener m√°s informaci√≥n, dir√≠jase a su p√°gina man.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *