Como forçar a execução de um processo em um único thread apenas com numactl?

Como forçar a execução de um processo em um único thread apenas com numactl?

Minhas máquinas locais possuem várias CPUs, cada uma com vários núcleos e cada uma pode suportar vários threads. Eu tenho um processo multithreading que desejo forçar a execução em apenas um único thread. Eu entendo numactrlque posso fazer isso.

Como posso usar numactlpara forçar o processo a ser executado apenas em um único thread? Alternativamente, existe um utilitário integrado ainda mais simples que pode fazer isso?

Responder1

numactl --physcpubind=+1 /path/to/your/executable

isso deve executar seu processo no segundo núcleo/CPU atribuído ao seu chipset (índice 1). consulte a seção Exemplos da página de manual para obter mais detalhes: http://linux.die.net/man/8/numactl

Editar: devo ressaltar que isso significa que o programa executará no máximo um thread simultaneamente, mas não significa que todo o processo será composto por apenas um thread. se o programa for escrito para gerar um novo thread, ele o fará, mas será executado no mesmo núcleo/CPU do resto do processo. uma distinção tênue, mas potencialmente importante, no entanto.

Responder2

Para limitar o programa a um núcleo/thread de hardware da CPU, também se pode usartaskset 1 prog [args]

PS

O programa para limitar o número de processos que um programa pode ter (threads) é prlimit --nproc=1 prog [args]. Eu tentei usá-lo rsynce recebi "fork indisponível... erro no IPC" e no final - rsyncfoi escrito para não funcionar como um thread.

strace prlimit --nproc=1 rsync  

A execução stracefoi mostrada conforme descrito no link SO abaixo, o valor de retorno da clonechamada é-1 EAGAIN (resource temporary unavailable).

Ideia PS tirada dehttps://stackoverflow.com/questions/38637451/is-there-a-way-force-a-program-to-use-only-1-thread.

informação relacionada