¿Cómo ejecutar un programa con un solo núcleo de CPU?

28

Estoy tratando de ejecutar un montón de scripts relacionados con un servidor de juegos en Terminator. El único problema es que cuando hago esto, Terminator detecta todos los núcleos de mi CPU y los retrasos de la PC. ¿Hay alguna manera de iniciarlo pero engañarlo para que piense que solo tengo 1 núcleo de CPU?

usuario245115
fuente
2
Hola, parece que podrías estar sufriendo el problema xy aquí, a veces vale la pena mirar hacia atrás en lo que quieres lograr y no en la solución que intentaste, ya que parece que lo que necesitas es ejecutar un programa sin ralentizar tu PC, no solo para ejecutar algo en un núcleo. Sin embargo, esta es una muy buena pregunta. +1
Vality
relacionado: unix.stackexchange.com/questions/23106/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

44

No es terminatorque esté haciendo la "difusión" en toda la CPU de un proceso dado. Linux mismo (el núcleo) está haciendo esto. Una tarea (proceso) está programada como disponible para ejecutarse en todas las CPU por defecto; Si usa subprocesos, puede usar más de una CPU a la vez.

Para restringir un proceso a una CPU específica, se utiliza el comando taskset.

taskset --cpu-list 1,2 my_command 

Este comando obliga a my_command a ejecutarse solo en las CPU n. ° 1 o n. ° 2.

Para obtener más información, escriba man taskseto busque "afinidad de CPU de Linux" (primer golpe aquí ).

Rmano
fuente
2
Por cierto, también podría intentar cambiar los procesos "malos", reduciendo su prioridad de programación.
Matteo Italia
@MatteoItalia Descubrí que Ubuntu 13.10 y 14.04 ignoran el nivel agradable por defecto. Tienes que agregar kernel.sched_autogroup_enabled = 0a /etc/sysctl.confpara que funcione. Sin embargo, también descubrí que 13.10 con frecuencia entra en pánico durante el arranque, si el grupo automático está deshabilitado.
kasperd
¿Qué pasa con los procesos secundarios del proceso primario? ¿Heredan la afinidad core / cpu de su proceso padre?
yildizabdullah
5

Aunque otra respuesta ya ha dado la respuesta literal, exploraría la posibilidad de que esto no se esté haciendo de la manera correcta. En su lugar, debe ejecutar una secuencia de comandos que no desea ralentizar la computadora (como las secuencias de comandos no interactivas) utilizando el nicecomando.

Para hacer esto, simplemente prefije el comando que desea ejecutar con nice, por ejemplo: nice command_to_run Esto hará que el programa se priorice por debajo de otras tareas y no ralentizará su máquina. A menudo uso esta técnica cuando hago una compilación larga que de lo contrario ralentizaría mi PC, esto tiene la ventaja de permitir que el programa use todos los núcleos cuando la máquina no está ocupada, pero la detendrá rápidamente cuando ejecutas algo más.

La realidad
fuente
Si uso un comando como "buen terminador abierto", ¿terminará el terminador con todos los núcleos de la CPU?
user245115
Ah, y por cierto, si muevo mi mouse y no se abre nada, ¿usará todas las CPU? ¿Y cuánto tiempo tarda después de que dejo de mover el mouse para que utilice todas las CPU? ¿Y puedo usar esto con el conjunto de tareas? (Sí, soy un verdadero novato con Linux.)
user245115
@ user245115 Si usa la buena utilidad, es posible que el terminador use múltiples núcleos de CPU, sin embargo, dejará de usarlos inmediatamente si otro programa (que no se ejecuta con nice) quiere usarlos para que no experimente una desaceleración, sin embargo úselos si de otra manera son completamente libres y sin usar Esto no debería verse afectado por el uso del mouse o cualquier otra interacción con el programa.
Vality
@ user245115 También debería ser posible usar esto con el conjunto de tareas simplemente escribiendo taskset nice open terminatorpara usar ambos. Sin embargo, eso será excesivo, ya que utilizará dos programas diferentes para lograr el efecto de reducir el uso de recursos del programa.
Vality
@ user245115 En el momento en que realice cualquier otra acción (como mover el mouse), el terminador tendrá menos tiempo de CPU, esto es efectivamente instantáneo y tan pronto como detenga otra actividad, lo usará nuevamente (también efectivamente instantáneamente)
Vality