Controle de Tempo Real e Prioridades no Linux com chrt

Visão Geral

Assumir o controle manual das políticas de escalonamento e prioridades em tempo real no ecossistema Linux representa um diferencial crítico quando se busca eliminar latências em cargas de trabalho sensíveis. Este tutorial aborda a utilização prática do utilitário chrt, componente nativo do pacote util-linux, detalhando o funcionamento de algoritmos como FIFO e Round-Robin. Acompanhe neste laboratório em Ubuntu todas as etapas essenciais: verificação do ambiente, ajustes dinâmicos de tarefas em segundo plano e validação das métricas pelo sistema operacional.

Verificação das Políticas de Escalonamento e Faixas de Prioridade

Antes de iniciar as manipulações, asseguramos a presença e a atualização das ferramentas necessárias no Ubuntu instalando os pacotes util-linux e procps.

Instalação dos pacotes util-linux e procps

O binário chrt atua diretamente na consulta e modificação dos atributos de agendamento em tempo real dos processos.
Ao acionar o modificador -m, o utilitário expõe todos os algoritmos suportados pelo kernel em execução, acompanhados de seus respectivos limites mínimos e máximos de prioridade.
⚙️ [Parâmetros Principais]

-m : Exibe todas as políticas de escalonamento ativas no kernel e suas faixas de prioridade suportadas.
-p : Especifica o identificador do processo (PID) sobre o qual as operações de leitura ou modificação incidirão.
-f : Define a política de escalonamento em tempo real First-In, First-Out (SCHED_FIFO).
-r : Configura a política de escalonamento cíclica em tempo real (SCHED_RR).
-o : Restaura o escalonador padrão de tempo compartilhado (SCHED_OTHER).
-b : Designa a política voltada para processamento em lote com menor interatividade (SCHED_BATCH).
-i : Destina o processo à execução em segundo plano com prioridade mínima (SCHED_IDLE).
-d : Ativa o modelo orientado a prazos rígidos (SCHED_DEADLINE).

Execução do comando chrt -m

Inspecionando a Política Padrão e Prioridade de um Processo Ativo

Para simular um alvo de teste, inicializamos em background uma rotina com sleep 600 &, garantindo um processo persistente para as manipulações a seguir.

Criação de processo em background com sleep 600

Com a instrução TARGET_PID=$!, capturamos o PID atribuído à última tarefa enviada para segundo plano, armazenando-o em uma variável de ambiente do terminal para simplificar a referência nos próximos passos.

Armazenamento do PID na variável TARGET_PID

Ao executar chrt -p, interrogamos o kernel a respeito do estado atual da tarefa recém-criada.
Como padrão para aplicações convencionais no Linux, observa-se a presença da classe SCHED_OTHER (tempo compartilhado), acompanhada pelo nível de prioridade estática fixado em 0.

Consulta dos atributos do processo com chrt -p

Complementamos o diagnóstico via ps, recorrendo ao argumento -o para extrair conjuntamente a classe de agendamento (CLS), a prioridade de tempo real (RTPRIO) e a prioridade interna do kernel (PRI).
A saída confirma o enquadramento na classe TS (time-sharing), evidenciando o campo RTPRIO desocupado (-) e o valor de prioridade de agendamento convencional estabelecido em 19.

Inspeção dos atributos de escalonamento via comando ps

Transição para Políticas de Tempo Real (SCHED_FIFO e SCHED_RR)

Elevamos agora o processo para o modo First-In, First-Out com o comando sudo chrt -f -p 50 $TARGET_PID, atribuindo o nível de prioridade em tempo real igual a 50.
Modificações nesse nível impactam criticamente a distribuição dos ciclos de CPU em todo o sistema operacional, exigindo obrigatoriamente privilégios administrativos (sudo).

Configuração da política SCHED_FIFO com prioridade 50

Conferimos a efetivação da alteração executando novamente chrt -p.
O retorno do comando ratifica a migração com sucesso para a política SCHED_FIFO e o registro formal da prioridade em 50.

Verificação das alterações com chrt -p

Em seguida, migramos a mesma tarefa para a disciplina Round-Robin executando sudo chrt -r -p 30 $TARGET_PID, reajustando a prioridade para 30.
Sob SCHED_RR, processos de mesma prioridade compartilham a CPU por meio de fatias de tempo predefinidas (quantum), evitando que uma única thread monopolize o núcleo permanentemente.

Aplicação da política SCHED_RR com prioridade 30

Validamos a configuração definitiva no nível de processo por meio do ps com flags personalizadas -o.
A consulta evidencia a classe devidamente identificada como RR, registrando o nível 30 em RTPRIO e a escala interna equivalente mapeada pelo kernel com prioridade 70 em PRI.

Validação da política RR e prioridades com ps

Inicialização Direta com Tempo Real e Limpeza de Recursos

Além de intervir em processos preexistentes, o utilitário permite instanciar binários já dotados de privilégios de tempo real desde o primeiro ciclo, como ilustrado no comando sudo chrt -r 25 sleep 300 &, que dispara um processo em background sob SCHED_RR com prioridade 25.
Essa flexibilidade viabiliza a inicialização de serviços críticos sem qualquer intervalo de execução sob o escalonador comum.

Inicialização direta de processo com chrt -r 25

Para auditar conjuntamente as instâncias em execução, empregamos o filtro ps -eo pid,cls,rtprio,comm | grep '[s]leep'.
A listagem revela simultaneamente as duas tarefas ativas, ambas sob o escalonamento Round-Robin (RR), operando harmoniosamente com as respectivas prioridades estipuladas (30 e 25).

Filtragem dos processos em execução no ps

Para restabelecer o estado original do ambiente e desocupar recursos do sistema, encerramos as tarefas criadas via kill -9 $TARGET_PID && pkill -f 'sleep 300'.
Esse comando elimina imediatamente tanto a instância vinculada à variável quanto o processo de espera secundário, finalizando a sessão de testes de maneira ordenada.

Encerramento dos processos e liberação de recursos

Com estes procedimentos práticos, exploramos o potencial do chrt para modular políticas e hierarquias de agendamento no Linux.
Esse domínio técnico é indispensável para administradores de sistemas e desenvolvedores encarregados de otimizar daemons com restrições rígidas de tempo de resposta.