Nesse artigo, vamos entender melhor como o kernel do Linux realiza internamente o gerenciamento e o escalonamento de processos, e como o administrador pode interferir nessa dinâmica através dos comandos “nice” e “renice”.
Escalonamento de Processos
Para começarmos, é importante entender alguns conceitos sobre o que é e como o kernel do Linux realiza o escalonamento de processos.
- Cada processador (core) só consegue executar uma tarefa por vez;
- Time sharing: Como cada processador só executa uma tarefa por vez, o que o kernel faz é rotacionar os processos entre as CPUs disponiveis, determinando que cada processo utilize a CPU por algum tempo;
- Esse rotacionamento, ou escalonamento, é feito automaticamente pelo kernel, que se baseia nos tipos de processos em execução.
Tipos de Processos
De maneira geral, podemos classificar os processos nos seguintes tipos:
- Convencional: Processos normais do sistema.
- O kernel dá a esses processos os valores de prioridades de 100 a 139, sendo 120 o padrão. Sendo 100 significa maior prioridade, ou seja, terá mais tempo de uso da CPU, maior time sharing. Nesse caso 139 é a menor prioridade, menor tempo.
- Tempo Real: Processos que precisam ser executados imediatamente, não obedecendo o escalonamento de processos.
- Normalmente são processos internos do kernel.
- Esses processos recebem as prioridades de 1 a 99, e é comum que seja representado pelo código “rt”, de real-time.
Priority (PRI) x Nice (NI)
Um ponto que precisa ficar claro antes de seguirmos é a diferença entre PRIORIDADE (priority) e NICE.
A prioridade de um processo é definida automaticamente e dinâmicamente pelo kernel Linux, assumindo os valores que citei acima.
O NICE é um atributo que permite ao administrador ou usuário influenciar a prioridade do processo. Quando usamos os comandos nice e renice para definir esse atributo, estamos definindo um NICE que irá consequentemente impactar a prioridade. Por padrão, o NICE de um processo é 0.
Vamos aos comandos
Agora vejamos essas informações mais na prática:
Podemos verificar os valores de prioridade e nice de algumas maneiras.
A mais simples é pelo comando top:
Observe que a coluna “PR” refere-se à prioridade. e “NI” ao nice.
Mas por que “20”? Lembra que disse que o padrão é 120? O que o top faz é simplesmente reduzir o número, e por isso mostra 20 ao invés de 120, 9 ao invés de 109, e assim por diante.
Veja também o penúltimo processo como “rt”, esse é um processo interno do tipo “real-time”.
A prioridade e o nice também podem ser vistos pelo comando ps, em uma sintaxe mais elaborada como a seguinte:
Indo ainda mais a fundo, você pode verificar a prioridade de um processos através do seguinte arquivo:
# cat /proc/<PID>/sched
Nesse arquivo procure pela informação “prio”.
Definindo o NICE, Impactando a Prioridade
Como vimos, podemos impactar a prioridade de um processo ao definir o valor do NICE.
O valor do NICE pode variar de -20 a 19, aonde -20 aumenta a prioridade do processo ao máximo possível, e 19 diminui.
Lembre-se que o NICE vai impactar o valor do PRIORITY, e quanto menor esse valor, maior prioridade o processo tem, ou seja, mais tempo de uso de CPU.
Para definir o nice usamos os comandos “nice” e “renice”.
O “nice” inicia um processo com determinado valor, por exemplo:
Resultado do top:
Veja que 131 é 120+11.
Além disso, o comando “renice” é usado para alterar o NICE de um processo já em execução:
Note que apenas o usuário administrador pode reduzir o valor, ou seja, aumentar a prioridade de um processo.
PS: Não se confunda com o texto “old priority/new priority”, na verdade você está alterando o NICE.
Concluindo
Espero que o artigo tenha sido útil, a idéia aqui foi explicar um pouco além do que normalmente se aborda com relação ao gerenciamento de processos, principalmente deixar claro o que é de fato o NICE e o que é o PRIORITY.
Também fiz no meu canal um vídeo explicando esse assunto, talvez o ajude a entender melhor:
Leave a Comment