¿Nohup coloca cada proceso en un núcleo específicamente?

¿Nohup coloca cada proceso en un núcleo específicamente?

estaba leyendoeste enlacejusto ahora y me hizo pensar.

Hace un tiempo estaba lanzando simulaciones en hasta 30 núcleos de una máquina virtual de 32 núcleos, y lo hacía con un script contenedor que llamaba nohup perl ...<rest of command>...y redirigía STOUT/STDERR. No estoy seguro de que los detalles sean tan relevantes, así que ahorraré usted los detalles.

Estoy conceptualmente contento con las tareas multiproceso, pero ingenuamente asumí que poner en segundo plano cada proceso en mi llamada nohup (cada proceso era una simulación separada que luego se ejecutó durante varias semanas) era suficiente para colocar cada proceso hijo en un núcleo/hilo de propio y luego continúa hasta completarse, sin apelar a GNU Parallels o algo así.

Los revisé periódicamente y siempre vi que 30 vCPU estaban trabajando en las tareas, todo se completó en un tiempo razonable, por lo que mi lógica no parece estar fuera de lugar hasta ahora...

Alguien (creo que en alguna página SO) me dijo que esto podría terminar causando una "palotación de la CPU".

Entonces mi pregunta tiene un par de partes interrelacionadas:

  • En primer lugar, ¿me equivoqué al suponer que nohup y/o el fondo son suficientes para mantener un proceso en un núcleo en particular? (¿Y se puede mostrar en la terminal el proceso que se ejecuta en un núcleo específico? ¿Top solo le dice qué núcleos están ocupados, no qué tarea están ejecutando, que yo sepa?)
  • En segundo lugar, ¿se producirá una destrucción de la CPU incluso si hay 2 CPU de repuesto disponibles para manejar las otras tareas del sistema?
  • Por último, si no me equivoco, ¿un proceso determinado queda anclado a una CPU específica?y solo esa CPU, o saltarán entre subprocesos dependiendo del orden/tiempo de las llamadas, etc., es decir, si recorro los archivos, ¿el primero quedará anclado a la CPU 0, luego a la 1, 2 y así sucesivamente hasta su finalización?

Respuesta1

En primer lugar, ¿me equivoqué al suponer que nohup y/o el proceso en segundo plano es un proceso que se ejecuta en un núcleo específico que se muestra en la terminal? Top solo le dice qué núcleos están ocupados, no qué tarea están ejecutando, que yo sepa). ¿Suficiente para mantener un proceso en un núcleo en particular? (¿Y puede el

Nohup ejecuta el comando exactamente como si se ejecutara sin él, la única diferencia es que se eliminan de una lista de pids para enviar una señal al salir. (rechazar trabajos para procesos que no se iniciaron con nohup).

En segundo lugar, ¿se producirá una destrucción de la CPU incluso si hay 2 CPU de repuesto disponibles para manejar las otras tareas del sistema?

Sólo si la destrucción de la CPU ocurre sin nohup...

Por último, si no me equivoqué, ¿un proceso determinado se ancla a una CPU específica, y solo a esa CPU, o saltarán entre subprocesos dependiendo del orden/tiempo de las llamadas, etc., es decir, si recorro los archivos, el primero ¿Uno queda anclado a la CPU 0, luego a 1, 2 y así sucesivamente hasta completarlo?

igual que sin nohup...

puede ver en qué núcleo de CPU se está ejecutando un proceso con ps y puede limitar o cambiar los límites de los núcleos usando el conjunto de tareas.

ps -eo pid,sgi_p,cmd --sort sgi_p

taskset -c -p 0 1234

Respuesta2

nohupno configura nada para mantener un proceso en un núcleo en particular. Normalmente usaríastasksetademás de nohuphacer eso. toppuede mostrar en qué núcleo se programó un proceso por última vez, es la Pcolumna.

La programación de procesos y subprocesos se ha vuelto bastante compleja a lo largo de los años, porque cada vez hay más factores a tener en cuenta: afinidad de CPU, afinidad de caché, manejo de interrupciones, envolventes de energía... Pero no esperaría ninguna paliza si estás iniciar menos trabajos de los que tiene núcleos disponibles, suponiendo que el sistema no esté demasiado ocupado con otras tareas. De manera similar, no se puede predecir realmente en qué CPU se ejecutará una tarea, pero si es apropiado, es muy probable que el programador la mantenga en el mismo núcleo una vez que haya elegido un núcleo.

información relacionada