Cómo asignar núcleos de CPU con conjunto de tareas en Linux

El procesamiento de múltiples núcleos puede tener ventajas e inconvenientes y, a veces, es necesario asignar manualmente núcleos de CPU a programas (también conocido como “afinidad de CPU”) para obtener el mejor rendimiento. En Linux, la herramienta principal es conjunto de tareas. Eso suena potencialmente aterrador, pero lo dividiremos en pasos sencillos para simplificar el proceso.

Conceptos básicos del conjunto de tareas

El uso del conjunto de tareas se puede dividir en dos partes: la afinidad de la CPU con los programas que se ejecutarán y con los programas que ya se están ejecutando. Lanzar programas es el más fácil de los dos, así que empezaremos por ahí. Un comando de inicio se ve así:

Antes de ingresar el número del núcleo de la CPU que desea asignar, no olvide que un esquema de numeración de Unix generalmente comienza en 0, por lo que su primer núcleo será 0, su segundo núcleo 1, y así sucesivamente. Por lo tanto, una máquina de doble núcleo tendrá núcleos 0 y 1, y una máquina de cuatro núcleos tendrá núcleos 0, 1, 2 y 3.

Supongamos que desea ejecutar Audacity en un sistema de doble núcleo y desea que se ejecute en su segundo núcleo. Ese comando sería:

Usando múltiples núcleos

En una de nuestras máquinas, Chrome a veces soltaba fotogramas al transmitir video, pero se comportaba cuando se asignaba a dos núcleos. Si desea probar lo mismo en un sistema de cuatro núcleos y desea asignar Chrome a los núcleos tres y cuatro, el comando sería:

No tiene que asignar afinidad de CPU a núcleos secuenciales; puede elegir cualquier núcleo al azar. Digamos que tiene una máquina de seis núcleos y desea usar Chrome en los núcleos dos y seis. Ingresarías el comando:

También puede utilizar un guión para distribuir una aplicación en varios núcleos. Por ejemplo, muchos programas o funciones del sistema más antiguos estarán predeterminados en su primer núcleo. ¿Qué pasaría si quisiera dejar el primer núcleo lo más libre posible mientras distribuye una aplicación grande en todos sus otros núcleos?

Digamos que tiene un sistema de ocho núcleos y desea ejecutar Steam desde el segundo núcleo hasta el octavo. Ese comando sería:

Cambio de afinidad para un programa que ya se lanzó

El conjunto de tareas no se limita simplemente a iniciar aplicaciones. También puede cambiar la afinidad de la CPU para un programa que ya se está ejecutando. Sin embargo, antes de que pueda cambiar la afinidad de una aplicación, primero debe conocer su ID de proceso (o PID para abreviar).

Para averiguar el PID de su aplicación, puede intentar usar el monitor del sistema de su escritorio, pero la forma más rápida es simplemente usar top. Como era de esperar, usa el comando:

Los nombres de todos los comandos en ejecución están en el lado derecho de la pantalla. Los identificadores de proceso correspondientes están a la izquierda.

Pid superior del conjunto de tareas

Anote su PID ya que lo usará en un momento. Para este ejemplo, usaremos VLC, que está en medio de la reproducción de un video Matroska de alta definición en una PC más antigua con seis núcleos. Estamos experimentando con diferentes afinidades de CPU para obtener el mejor rendimiento de VLC.

Para cambiar la afinidad de un proceso existente, la sintaxis se ve así:

Si puede ver nuestra captura de pantalla anterior, el ID de proceso de VLC es 20485. Intentaremos ejecutar VLC en los núcleos cuarto, quinto y sexto, que en Unix la numeración será 3-5. Entonces, después de todo eso, el comando será:

Pero, ¿qué sucede si desea verificar la afinidad existente antes de cambiarla? Para eso, no ingrese ningún número principal, y el conjunto de tareas le dirá cómo se asigna la afinidad. Entonces, si cambiamos el último comando a:

nos muestra que VLC se extiende por todos los núcleos.

Conjunto de tareas para encontrar afinidad

Intentémoslo de nuevo con un programa diferente. Digamos que ejecutamos un gran Matroska con SMPlayer en su lugar, y SMPlayer ya se ha lanzado. Top dice que el PID es 16058.

Top Smplayer del conjunto de tareas

Pero primero queremos conocer su afinidad existente. Usando el comando con el -cp switch pero sin números de núcleo, podemos ver que la afinidad actualmente se extiende a todos los núcleos.

Afinidad de Smplayer de conjunto de tareas

Ahora podemos intentar distribuir SMPlayer en los mismos tres núcleos que el experimento de VLC con el comando:

Eso es fácil, ¿no? Si está buscando comparar su PC, consulte nuestra guía sobre 8 herramientas útiles para probar su CPU.

¿Es útil este artículo?

¡Ayúdanos a correr la voz!

Deja una respuesta

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