Por que meus níveis "bons" não são refletidos no uso da CPU? [duplicado]

1

Dada uma VM com 1 CPU. Eu executo duas tarefas intensivas de CPU semelhantes em dois terminais:

/usr/bin/nice -n -20 perl -e 'while(1){$a=1+1;}'
/usr/bin/nice -n 19 perl -e 'while(1){$a=1+1;}'

Eu esperaria que, quando eu checa com o topo, 1 processo levaria toda a CPU e a outra nenhuma (porque não há tempo ocioso). Mas ...

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
18175 root       1 -20 20376 1460 1132 R  49.9  0.1   0:18.36 perl
18176 root      39  19 20376 1460 1132 R  49.9  0.1   0:15.16 perl   

Por que isso? Eu quero que meu processo humildemente use apenas ciclos de CPU ociosos :)

Testado no Linux 3.5.0-17-genérico # 28-Ubuntu SMP Ter 09 de outubro 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU / Linux

    
por Willem 19.04.2013 / 21:43

1 resposta

3

Existe uma "arte" usada no agendamento de tarefas. O algoritmo de programação padrão Linux / Unix permite que todos os processos obtenham, em algum momento, a CPU. Isso é feito inicialmente, atribuindo-se a um processo dois itens: (1) prioridade mais baixa na sua categoria (conforme determinado pelo seu valor) e (2) um incremento de tempo novamente com base na categoria de prioridade. Conforme o tempo passa, a prioridade do processo é incrementada, o processo de prioridade mais alta recebe o tempo da CPU. Além disso, o processo de obter CPU é continuamente redeterminado de escala para escala com base na maior prioridade nesse momento após o recálculo. Quando um processo recebe o tempo da CPU, sua prioridade retorna novamente à menor prioridade em sua categoria.

Você pode obter o que deseja usando as prioridades de "tempo real", onde os processos da classe de maior prioridade obtêm a CPU e a utilizam até que todos os processos da classe de prioridade sejam satisfeitos e os processos na próxima classe inferior obtenham o tempo disponível. , até que um processo de prioridade mais alta requeira a CPU e assim por diante até que o incremento de agendamento total da CPU seja usado. Um processo pode renunciar a parte do incremento da CPU, causando uma reprogramação.

Assim, você está vendo o uso do agendador padrão, seu processo de prioridade mais baixa ainda está recebendo tempo de CPU, mas com uma taxa muito menor.

    
por 19.04.2013 / 21:50

Tags