Para emular una tarea intensiva de CPU, podemos usar una herramienta llamada matho-prime que genera una lista de números primos. Si le pide que genere una lista lo suficientemente grande, maximizará el rendimiento de la CPU mientras está funcionando. Para instalar matho-prime en Ubuntu o en un Pi de frambuesa:
sudo apt-get install mathomatic-primes
Comencemos la tarea y veamos el uso de la CPU:
matho-primes 0 99999999999999> p.txt &
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
Esto le dice a matho-primes que genere una lista de primos de cero a nueve mil novecientos noventa y nueve millones novecientos noventa y nueve mil novecientos noventa y nueve! La salida se redirige al archivo p.txt. El ampersand al final le dice a la shell que ejecute el programa en segundo plano, lo que significa que regresará a la línea de comandos inmediatamente después de iniciar la tarea.
Ahora ejecute el comando superior y observe la cantidad de CPU que está siendo utilizada por el generador de números primos.
Ahora matemos esa tarea y veamos cómo podemos lanzarla con una prioridad menor. Salga de la parte superior presionando q, luego escriba fg para poner los cebos matemáticos en primer plano y luego presione «Ctrl + C» para forzar la salida del programa.
Ahora inicie el programa de nuevo pero al principio del comando agregue la palabra nice:
nice matho-primes 0 999999999999> p.txt &
nice es una herramienta que le dice a Linux que programe esta tarea con una prioridad menor. La amabilidad oscila entre -20 (programación más favorable) y 19 (menos favorable). Por defecto, nice programará la tarea con una precisión de 10. Por defecto, las tareas normales se inician con una precisión de cero. Esto significa que una tarea con una amabilidad de 10 será vista como de menor prioridad y se le darán menos recursos de CPU.
Ahora podemos iniciar un segundo de estos generadores de números primos para emular otras tareas que quieras hacer en tu máquina (como navegar por la web o escribir un documento). Este tendrá una amabilidad normal, ya que el uso del escritorio debe ser una prioridad mayor que la de ejecutar el generador de números primarios.
matho-primes 0 999999999999> p2.txt &
Tenga en cuenta que la salida de este archivo se redirige a p2.txt. La salida desde arriba se verá algo así:
Como puede ver, el proceso con la mayor amabilidad recibe menos tiempo de CPU. Esto significa que si inicia una tarea intensiva de CPU con nice, no hará que su máquina se sienta lenta ni hará que responda lentamente.
cpulimit
Existe otro comando llamado «cpulimit» que en lugar de cambiar la prioridad de programación, detiene temporalmente un proceso para asegurarse de que no excede el uso deseado de la CPU.
Para instalarlo escriba:
sudo apt-get install cpulimit
Ahora ejecute de nuevo el generador de números primos intensivo de la CPU y anote su número PID usando este comando:
ps | grep matho-prime
La primera columna de la salida es el PID. Ahora limite el uso de la CPU de ese proceso de esta manera:
sudo cpulimit -b -l 50 -p 16299
Donde 16299 es el PID del proceso matho-primes. Una mirada con la parte superior mostrará algo como esto:
Ir más allá
Hay un comando que acompaña a nice llamado renice que cambiará la amabilidad de un proceso existente. Intentando usar top o ps con grep para obtener el PID de un proceso y usar renice +19 16299 para establecer la prioridad al mínimo posible (donde 16299 es el PID del proceso).
Siéntase libre de añadir en la discusión en el comentario de abajo.