GNU/Linux >> Tutoriales Linux >  >> Linux

Reduzca la velocidad de un solo proceso para regular la temperatura de la CPU

CPULimit es exactamente lo que necesita. Inicia el programa, luego ejecuta cpulimit contra el nombre del programa o PID, especificando qué porcentaje desea que esté limitado.

El siguiente comando limita el proceso en PID 7777 al 5 % del uso de la CPU.

cpulimit -p 7777 -l 5

Alternativamente, puede usar el nombre del ejecutable:

cpulimit -e myprogram -l 5

O la ruta absoluta del ejecutable:

cpulimit -P /path/to/myprogram -l 5

Tenga en cuenta que el porcentaje es de todos los núcleos; así que si tiene 4 núcleos, podría usar el 400 %.


Puede mejorar un proceso en ejecución para darle más o menos prioridad (el llamado "valor agradable"). Tenga en cuenta que la escala de prioridad de UNIX es algo contraria a la intuición:los valores negativos significan que se favorece un proceso sobre los procesos concurrentes, es decir, tiene "más" prioridad.

Por lo tanto, puede intentar "ralentizar" su proceso dado su PID a través de:

# lower priority of a process
renice +1 "PID"

Cada vez que ejecuta esto, el "buen valor" del proceso aumenta en 1; puede usar valores enteros que no sean +1 por supuesto.

El comando nice le permite iniciar un proceso con un ajuste de valor de +10 nice (cambie esto con la opción -n ). Por ejemplo:

# start a CPU-intensive task with low priority
nice ./cpu-hog

Sin embargo, el "buen valor" solo afecta cuánto favorece el planificador la ejecución de un proceso en particular sobre otros en el sistema:si su computadora está básicamente inactiva, aumentar el "buen valor" de un solo proceso no evitar que ese proceso tome el 100% de la CPU. Cito de la página de manual de getpriority(2):(Énfasis agregado por mí).

El grado en que su valor relativo agradable afecta la programación de los procesos varía entre los sistemas Unix y, en Linux, entre las versiones del kernel. Comenzando con el kernel 2.6.23, Linux adoptó un algoritmo que hace que las diferencias relativas en los valores agradables tengan un efecto mucho más fuerte. Esto hace que los valores Niza muy bajos (+19) realmente proporcionen poca CPU a un proceso siempre que haya otro _carga de mayor prioridad en el sistema._

La razón de esto reside en la forma en que se ejecutan los procesos en un kernel similar a UNIX:cada vez que el kernel decide ejecutar un proceso, ese proceso tiene el control total de un núcleo de CPU durante un cierto período de tiempo (fijo y corto). El "buen valor" puede influir en la frecuencia con la que el programador del kernel está dispuesto a otorgar un intervalo de tiempo a un proceso, pero no puede cambiar el hecho de que, una vez programado, un proceso se ejecuta sin interrupciones durante un período de tiempo fijo.

Por lo tanto, aparte de ralentizar su CPU, no hay forma de hacer que un proceso se ejecute más lento si no hay otros procesos en el sistema que puedan competir por el acceso a la CPU.


cgrupos fueron creados exactamente por esta razón.

http://www.kernel.org/doc/Documentation/cgroups/http://www.serverwatch.com/tutorials/article.php/3921001/Setting-Up-Linux-Cgroups.htm

Se necesita un poco de tiempo para familiarizarse con ellos, y creo que necesita acceso de root para configurarlos, pero todo puede programarse. Los Ubuntu más nuevos tienen un archivo .conf para que no tengas que escribir tu propio script. No estoy seguro acerca de 10.10.

Un buen lugar para comenzar es esta respuesta:https://askubuntu.com/a/94743/170177

Tenga en cuenta que cgroups todavía está en desarrollo activo, por lo que es posible que algunas características no estén disponibles en su núcleo actual.

Uso de cpu.shares de cgroups no hace nada que un bueno el valor no serviría. Parece que realmente desea acelerar los procesos, lo que definitivamente se puede hacer.

Deberá usar uno o dos scripts y/o editar /etc/cgconfig.conf para definir los parámetros que desee.

Específicamente, desea editar los valores cpu.cfs_period_us y cpu.cfs_quota_us . Entonces se permitirá que el proceso se ejecute para cpu.cfs_quota_us microsegundos por cpu.cfs_period_us microsegundos.

Por ejemplo:

Si cpu.cfs_period_us =50000 y cpu.cfs_quota_us =10000 entonces el proceso recibirá el 20 % del tiempo máximo de CPU, sin importar qué más esté pasando.

En esta captura de pantalla le he dado al proceso el 2% del tiempo de CPU:

En lo que respecta al proceso, se está ejecutando al 100 %.

Configuración cpu.shares por otro lado, puede usar y seguirá usando el 100 % del tiempo de inactividad de la CPU.

En este ejemplo similar, he dado el proceso cpu.shares =100 (de 1024):

Como puede ver, el proceso sigue consumiendo todo el tiempo de inactividad de la CPU.

Referencias:

http://manpages.ubuntu.com/manpages/precise/man5/cgconfig.conf.5.htmlhttp://kennystechtalk.blogspot.co.uk/2015/04/throttling-cpu-usage-with-linux-cgroups. html


Linux
  1. Cómo limitar el uso de la CPU de un proceso en Linux

  2. ¿Por qué Windows10 VM es lento en OpenStack?

  3. Linux:¿cómo limitar un proceso a un núcleo de CPU en Linux?

  4. Detectar proceso comiendo CPU sin:Top, Htop, Ps?

  5. ¿Cómo bajar un directorio?

Consejos para la parte superior:Monitoreo de la carga de la CPU en Linux

Cómo verificar la temperatura de la CPU en Linux

Cómo monitorear la temperatura de una CPU en el sistema Redhat 7 Linux

Cómo ver la temperatura de la CPU en Linux

Cómo obtener el uso de la CPU de un solo proceso en Linux

Cómo obtener pid del proceso recién iniciado