Então, bem depois do fato, aqui estão algumas informações. O comportamento que você está vendo é por causa do recurso autogroup que foi adicionado no Linux 2.6.38 (em 2010).
Aqui está uma versão editada de algum texto que estou prestes a adicionar à % página de manual dosched(7)
o que explica o que você está vendo.
O kernel fornece um recurso conhecido como autogrouping para melhorar o desempenho interativo da área de trabalho diante de cargas de trabalho com multiprocesso e uso intensivo de CPU, como a construção do kernel Linux com um grande número de processos de construção paralelos (por exemplo, make(1) -j
flag). / p>
Um novo autogrupo é criado quando uma nova sessão é criada
via setsid(2)
; isso acontece, por exemplo, quando uma nova janela de terminal é iniciada. Um novo processo criado por fork(2)
herda sua
associação do grupo autônomo pai. Assim, todos os processos de uma
sessão são membros do mesmo autogrupo.
Quando o autogruping está ativado, todos os membros de um autogroup são colocados no mesmo agendador de kernel "grupo de tarefas". O escalonador de kernel do Linux emprega um algoritmo que equaliza a distribuição de Ciclos de CPU em grupos de tarefas. Os benefícios disso para o desempenho interativo da área de trabalho podem ser descritos no exemplo a seguir.
Suponha que haja dois grupos autônomos competindo pelo mesmo processador
(ou seja, presumir um único sistema de CPU ou o uso de taskset(1)
para confinar todos os processos para a mesma CPU em um sistema SMP).
O primeiro grupo contém dez processos ligados à CPU de um kernel
compilação iniciada com make -j10
. O outro contém um único
Processo vinculado à CPU: um player de vídeo. O efeito do autogrouping é que
os dois grupos receberão, cada um, metade dos ciclos da CPU. Isso é,
o player de vídeo receberá 50% dos ciclos da CPU, em vez de
apenas 9% dos ciclos, o que provavelmente levaria a vídeos degradados
reprodução. A situação em um sistema SMP é mais complexa, mas o
efeito geral é o mesmo: o agendador distribui os ciclos de CPU
através de grupos de tarefas, de tal forma que um autogroup que contém um grande
número de processos ligados à CPU não acaba sobrecarregando os ciclos da CPU
à custa dos outros trabalhos no sistema.
O bom valor e agendamento de grupo
Ao agendar processos não em tempo real (por exemplo, os agendados
sob a política SCHED_OTHER
padrão), o
O agendador emprega uma técnica conhecida como "agendamento de grupo", na qual os segmentos são agendados em "grupos de tarefas".
Grupos de tarefas são formados nas várias circunstâncias, com o caso relevante aqui sendo autogrouping.
Se o agrupamento automático estiver ativado, todos os encadeamentos
(implicitamente) colocado em um grupo autônomo (ou seja, a mesma sessão,
criado por setsid(2)
) formam um grupo de tarefas. Cada novo autogrupo é
assim, um grupo de tarefas separado.
No agendamento do grupo, o valor interessante de um thread tem um efeito para
agendamento de decisões apenas em relação a outros threads no mesmo
grupo de tarefas . Isto tem algumas consequências surpreendentes em termos de
semântica tradicional do bom valor em sistemas UNIX. Em particular, se o autogrouping estiver habilitado (que é o padrão em várias distribuições),
empregando nice(1)
em um processo tem efeito
apenas para agendamento relativo a outros processos executados no
mesma sessão (normalmente: a mesma janela do terminal).
Por outro lado, para dois processos que são (por exemplo) a única Processos limitados pela CPU em diferentes sessões (por exemplo, terminais diferentes Windows, cada um dos quais trabalhos estão vinculados a diferentes autogroups), modificando o bom valor do processo em uma das sessões tem nenhum efeito em termos de decisões do planejador em relação ao processo na outra sessão.
Se você quiser impedir que o agrupamento automático interfira no comportamento tradicional de nice
, conforme descrito aqui, é possível desativar o recurso
echo 0 > /proc/sys/kernel/sched_autogroup_enabled
Lembre-se de que isso também terá o efeito de desativar os benefícios da interatividade da área de trabalho que o recurso autogroup foi desenvolvido (veja acima).
O valor bom do autogrupo
A associação de um grupo autogrupo do processo pode ser visualizada por meio de
o arquivo /proc/[pid]/autogroup
:
$ cat /proc/1/autogroup
/autogroup-1 nice 0
Este arquivo também pode ser usado para modificar a largura de banda da CPU alocada para um autogrupo. Isso é feito escrevendo um número no "bom" intervalo para o arquivo para definir o valor agradável do autogrupo. O permitido intervalo é de +19 (baixa prioridade) a -20 (alta prioridade).
A configuração legal do autogrupo tem o mesmo significado que o processo bom valor, mas aplica-se à distribuição de ciclos de CPU ao autogrupo como um todo, com base nos valores relativos agradáveis de outros autogrupos. Para um processo dentro de um autogrupo, a CPU roda recebe será um produto do bom valor do autogrupo (comparado outros autogroups) eo valor agradável do processo (comparado com outros processos no mesmo autogrupo).