¿Cómo forzar que un proceso se ejecute en un solo hilo solo con numactl?

¿Cómo forzar que un proceso se ejecute en un solo hilo solo con numactl?

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 numactrlpuedo hacer eso.

¿Cómo puedo numactlforzar 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 rsyncy obtuve "bifurcación no disponible... error en IPC" y al final rsyncestá escrito para que no funcione como un solo hilo.

strace prlimit --nproc=1 rsync  

La ejecución stracese muestra como se describe en el enlace SO a continuación, el valor de retorno de clonela 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.

información relacionada