Mis máquinas locales tienen varias CPU, cada una tiene varios núcleos y cada una puede admitir varios subprocesos. Tengo un proceso de subprocesos múltiples que quiero forzar a ejecutar en un solo subproceso. Entiendo que numactrl
puedo hacer eso.
¿Cómo puedo numactl
forzar que el proceso se ejecute solo en un solo hilo? Alternativamente, ¿existe una utilidad integrada aún más simple que pueda hacer eso?
Respuesta1
numactl --physcpubind=+1 /path/to/your/executable
esto debería ejecutar su proceso en el segundo núcleo/cpu asignado a su chipset (índice 1). consulte la sección Ejemplos de la página de manual para obtener más detalles: http://linux.die.net/man/8/numactl
Editar: Debo señalar que esto significa que el programa ejecutará como máximo un subproceso al mismo tiempo, pero no significa que todo el proceso estará compuesto por un solo subproceso. si el programa está escrito para generar un nuevo hilo, lo hará, pero se ejecutará en el mismo núcleo/cpu que el resto del proceso. una distinción delgada, pero potencialmente importante de todos modos.
Respuesta2
Para limitar el programa a un núcleo/hilo de hardware de la CPU, también se puede usartaskset 1 prog [args]
PD
El programa para limitar el número de procesos que puede tener un programa (hilos) es prlimit --nproc=1 prog [args]
. Intenté usarlo rsync
y obtuve "bifurcación no disponible... error en IPC" y al final rsync
está escrito para que no funcione como un solo hilo.
strace prlimit --nproc=1 rsync
La ejecución strace
se muestra como se describe en el enlace SO a continuación, el valor de retorno de clone
la llamada es-1 EAGAIN (resource temporary unavailable).
PD idea tomada dehttps://stackoverflow.com/questions/38637451/is-there-a-way-force-a-program-to-use-only-1-thread.