Como executar um programa com apenas um núcleo de CPU?

28

Estou tentando executar um monte de scripts relacionados a um servidor de jogos no Terminator. O único problema é que, quando faço isso, o Terminator detecta todos os núcleos da minha CPU e o PC fica atrasado. Existe alguma maneira de iniciá-lo, mas induzi-lo a pensar que só tenho 1 núcleo de CPU?

user245115
fonte
2
Olá, parece que você pode estar sofrendo do problema xy aqui, às vezes vale a pena olhar para o que você deseja alcançar e não para a tentativa de solução que você tentou, pois parece que o que você precisa é executar um programa sem diminuir a velocidade do seu PC, não apenas para executar algo em um núcleo. No entanto, esta é uma pergunta muito boa. +1
Validade 16/06
relacionado: unix.stackexchange.com/questions/23106/…
Ciro Santilli escreveu:

Respostas:

44

Não é isso terminatorque está fazendo a "propagação" em toda a CPU de um determinado processo. O próprio Linux (o kernel) está fazendo isso. Uma tarefa (processo) está agendada como disponível para execução em todas as CPUs por padrão; se ele usa threads, pode usar mais de uma CPU por vez.

Para restringir um processo a uma CPU específica, você pode usar o comando taskset.

taskset --cpu-list 1,2 my_command 

Este comando força o my_command a ser executado apenas nas CPUs # 1 ou # 2.

Para saber mais, digite man tasksetou pesquise "afinidade da CPU do Linux" (primeiro acesso aqui ).

Rmano
fonte
2
A propósito, você também pode tentar apenas renomear os processos "ruins", diminuindo sua prioridade de agendamento.
Matteo Italia
@ MatteoItalia Descobri que o Ubuntu 13.10 e 14.04 ignoram o bom nível por padrão. Você precisa adicionar kernel.sched_autogroup_enabled = 0ao /etc/sysctl.confpara fazê-lo funcionar. No entanto, também descobri que o 13.10 frequentemente entra em pânico no kernel durante a inicialização, se o grupo automático estiver desabilitado.
kasperd
E os processos filhos do processo pai? Eles herdam a afinidade de núcleo / CPU do processo pai?
yildizabdullah
5

Embora outra resposta já tenha dado a resposta literal, eu exploraria a possibilidade de que isso não esteja sendo feito da maneira correta. Em vez disso, você deve executar um script que não deseja desacelerar o computador (como scripts não interativos) usando o nicecomando

Para fazer isso, basta prefixar o comando que você deseja executar com nice, por exemplo: nice command_to_run Isso fará com que o programa seja priorizado abaixo de outras tarefas e não diminuirá a velocidade da sua máquina. Costumo usar essa técnica ao fazer uma compilação longa que, caso contrário, atrasaria meu PC para um rastreamento. Isso tem a vantagem de permitir que o programa use todos os núcleos quando a máquina não estiver ocupada, mas interromperá rapidamente o uso quando você executar algo outro.

Validade
fonte
Se eu usar um comando como "bom terminador aberto", o terminador será executado com todos os núcleos da CPU, independentemente?
user245115
Ah, e a propósito, se eu mover o mouse e nada estiver abrindo, ele usará todas as CPUs? E quanto tempo demora para parar de mover o mouse para que ele utilize todas as CPUs? E posso usar isso com o conjunto de tarefas? (Sim, eu sou um verdadeiro Noob com Linux.)
user245115
@ user245115 Se você usar o utilitário nice, é possível que o terminador use vários núcleos da CPU, no entanto, parará imediatamente de usar esses núcleos se outro programa (que não estiver sendo executado com nice) quiser usá-los para que você não sofra lentidão, mas use-os se estiverem completamente livres e sem uso. Isso não deve ser afetado pelo uso do mouse ou por qualquer outra interação com o programa.
Vality
@ user245115 Também deve ser possível utilizá-lo com o conjunto de tarefas simplesmente escrevendo taskset nice open terminatorpara usar os dois. No entanto, isso será um exagero, pois você usará dois programas diferentes para alcançar o efeito de reduzir o uso de recursos do programa.
Vality
@ user245115 No momento em que você executar qualquer outra ação (como mover o mouse), terá menos tempo de CPU, isso é efetivamente instantâneo e, assim que você interrompe outra atividade, ele a usa novamente (também instantaneamente)
Vality