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?


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

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 ).


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.