Tengo un programa Cuando se está ejecutando, la temperatura de la CPU aumenta de 50 a 80 Celcius, que es mi mayor preocupación.
Puedo controlar la frecuencia de la CPU para ralentizarla, pero otros procesos también se ralentizarán, lo que no quiero.
¿Es posible ralentizar un proceso en particular sin afectar otros procesos para mantener fría la CPU?
Mi sistema operativo es Ubuntu 10.10.
Traté de establecer la prioridad del proceso
nice -n 15 myprogram
y no estoy seguro de si funcionará. La CPU tiene 77 Celcius de altura.¿
nice
Solo establece la prioridad relativa de un proceso con otros procesos? Es decir, si otros procesos no se están ejecutando, ¿este rápido proceso se ejecutará rápidamente? Me gustaría configurar el proceso para que se ejecute lentamente todo el tiempo.
9
Respuestas:
CPULimit es exactamente lo que necesitas. 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% de uso de CPU.
Alternativamente, puede usar el nombre del ejecutable:
O la ruta absoluta del ejecutable:
Tenga en cuenta que el porcentaje es de todos los núcleos; así que si tienes 4 núcleos, podrías usar el 400%.
fuente
Puede cambiar el tamaño de un proceso en ejecución para darle más o menos prioridad (el llamado "buen valor"). Tenga en cuenta que la escala de prioridad de UNIX es algo contraintuitiva: los valores negativos significan que un proceso se ve favorecido 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:
Cada vez que ejecuta esto, el proceso "buen valor" 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 agradable +10 (cambie esto con la opción
-n
). Por ejemplo:Sin embargo, el "buen valor" solo afecta cuánto favorece el programador ejecutar un proceso particular sobre otros en el sistema: si su computadora está básicamente inactiva, elevar el "buen valor" de un solo proceso no impedirá que ese proceso tome el 100% UPC. Cito de la página de manual de getpriority (2) : (Énfasis agregado por mí).
La razón de esto reside en la forma en que los procesos se ejecutan en un kernel tipo UNIX: cada vez que el kernel decide ejecutar un proceso, ese proceso tiene el control total de un núcleo de CPU durante un período de tiempo determinado (fijo y corto). El "buen valor" puede influir en la frecuencia con la que el planificador del núcleo está dispuesto a asignar 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 fijo de tiempo.
Por lo tanto, a menos de ralentizar su CPU, no hay forma de hacer que un proceso se ejecute más lentamente si no hay otros procesos en el sistema que puedan competir por el acceso de la CPU.
fuente
nice
no hará nada para mantener fresco tu procesador. No está diseñado para funcionar así.Los cgroups se crearon exactamente por este motivo.
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 root para configurarlos, pero todo puede ser programado. Los nuevos Ubuntus tienen un archivo .conf para que no tenga que escribir su propio script. No estoy seguro acerca de 10.10.
Un buen lugar para comenzar es en esta respuesta: https://askubuntu.com/a/94743/170177
Tenga en cuenta que cgroups todavía está en desarrollo activo, por lo que algunas características pueden no estar disponibles en su núcleo actual.
Usar cpu.shares de cgroups no hace nada que un buen valor no haría. Parece que realmente quiere acelerar los procesos, lo que definitivamente se puede hacer.
Necesitará usar un script o dos, y / o editar /etc/cgconfig.conf para definir los parámetros que desea.
Específicamente, desea editar los valores cpu.cfs_period_us y cpu.cfs_quota_us . El proceso podrá ejecutarse 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 , el proceso recibirá el 20% del tiempo máximo de CPU, sin importar qué más esté sucediendo.
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%.
La configuración cpu.shares, por otro lado, puede y seguirá utilizando 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 todavía consume todo el tiempo de inactividad de la CPU.
Referencias
http://manpages.ubuntu.com/manpages/precise/man5/cgconfig.conf.5.html http://kennystechtalk.blogspot.co.uk/2015/04/throttling-cpu-usage-with-linux-cgroups .html
fuente
systemd
hace las cosas un poco diferentes. Ubuntu Trusty, por ejemplo, parece venir con dos servicios para administrar cgroups. Actualizaré cuando sepa más.renice
?renice
no cambia la cantidad de CPU utilizada, solo cambia la prioridad del proceso en el planificador. cgroups puede cambiar el límite de la CPU en cualquier momento. Desde que se publicó esta respuesta, cgroups ha agregado todo tipo de ajustes y es muy poderoso.renice does not change the amount of CPU uses
Lo sé;) Acabo de publicar como un ejemplo de un programa que cambia las cosas en tiempo de ejecución. Gracias por su respuesta, intentaré cgroups.