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 numactrl
que posso fazer isso.
Como posso usar numactl
para 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 rsync
e recebi "fork indisponível... erro no IPC" e no final - rsync
foi escrito para não funcionar como um thread.
strace prlimit --nproc=1 rsync
A execução strace
foi mostrada conforme descrito no link SO abaixo, o valor de retorno da clone
chamada é-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.