El procesamiento multinúcleo puede tener ventajas y desventajas y, a veces, es necesario asignar manualmente núcleos de CPU a los 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 iniciará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 lanzamiento se ve así:
taskset -c cpu-core-number(s) application
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á los núcleos 0 y 1, y una máquina de cuatro núcleos tendrá los núcleos 0, 1, 2 y 3.
Digamos 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:
Uso de varios núcleos
En una de nuestras máquinas, Chrome a veces dejaba caer cuadros al transmitir video, pero se comportaba bien 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:
taskset -c 2,3 google-chrome
No tiene que asignar afinidad de CPU a núcleos secuenciales; puede elegir cualquier núcleo al azar. Supongamos que tiene una máquina de seis núcleos y quiere usar Chrome en los núcleos dos y seis. Ingresarías el comando:
taskset -c 1,5 google-chrome
También puede usar 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 gran aplicación en todos sus otros núcleos?
Supongamos 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ó
Taskset 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 poder 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 usar top
. Como era de esperar, utiliza el comando:
Los nombres de todos los comandos en ejecución están en el lado derecho de la pantalla. Los ID de proceso correspondientes están a la izquierda.
Anota tu PID ya que lo usarás 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í:
taskset -cp core-numbers PID
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 la numeración de Unix 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 distribuye en todos los núcleos.
Intentémoslo de nuevo con un programa diferente. Digamos que ejecutamos una gran Matroska con SMPlayer en su lugar, y SMPlayer ya se ha lanzado. Top dice que el PID es 16058.
Pero primero queremos saber su afinidad existente. Usando el comando con el -cp
switch pero sin números de núcleo, podemos ver que la afinidad se distribuye actualmente en todos los núcleos.
Ahora podemos intentar distribuir SMPlayer en los mismos tres núcleos que el experimento 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.