Post

Real-Time Linux: Uma Jornada de Baixa Latência

Introdução

Real-Time Linux (RTL) é uma extensão do kernel do Linux que transforma o sistema operacional em um ambiente de tempo real. Isso significa que, além de suas funcionalidades tradicionais, ele agora é capaz de lidar com tarefas que exigem alta previsibilidade e baixa latência, como sistemas de automação industrial, dispositivos médicos e até sistemas de entretenimento.

No final de 2024, o Linux Kernel passou a incorporar totalmente o Real-Time Linux (RTL), marcando um momento histórico na evolução do sistema. Mas como chegamos até aqui?


A Jornada do RTL

A ideia de adicionar capacidades de tempo real ao Linux remonta ao final dos anos 90, quando surgiram os primeiros patches para otimizar o desempenho e reduzir a latência do kernel. Esses patches evoluíram para projetos mais robustos, como o PREEMPT-RT.

O PREEMPT-RT permitiu:

  • Preempção total: Tornar possível a interrupção de quase todas as rotinas do kernel.
  • Redução de latências: Melhorar a previsibilidade em execuções críticas.

Depois de anos de desenvolvimento comunitário e apoio de empresas como Red Hat, Intel e IBM, o PREEMPT-RT finalmente foi fundido no kernel principal, consolidando o Linux como uma plataforma RTOS (Sistema Operacional de Tempo Real).


Comparação: Workload RTL vs. Workload Normal

Para cargas de trabalho típicas com requisitos de latência do kernel na faixa de milissegundos (ms), o kernel padrão do Red Hat Enterprise Linux 7 é suficiente. No entanto, se sua carga de trabalho exige requisitos rigorosos de determinismo de baixa latência para recursos centrais do kernel, como manipulação de interrupções e escalonamento de processos na faixa de microssegundos (μs), o kernel de tempo real é a escolha ideal.

Real-Time Linux Flame

Referência


Modelos de Preempção no Linux

Os modelos de preempção do Linux determinam como o kernel gerencia interrupções e tarefas. Esses modelos são definidos no momento da compilação do kernel, sendo o “Kernel Totalmente Preemptível” essencial para obter o comportamento em tempo real. Abaixo está uma descrição dos principais modelos:

  1. Sem Preempção Forçada (Servidor): Modelo tradicional focado em maximizar a taxa de transferência. Os pontos de preempção ocorrem apenas em retornos de chamadas de sistema e interrupções.
  2. Preempção Voluntária (Desktop): Reduz a latência do kernel adicionando pontos de preempção explícitos no código, em troca de uma leve queda na taxa de transferência.
  3. Kernel Preemptível (Desktop de Baixa Latência): Faz com que todo o código do kernel, exceto seções críticas, seja preemptível, com pontos de preempção implícitos após cada desativação de preempção.
  4. Kernel Preemptível (RT Básico): Similar ao modelo “Desktop de Baixa Latência”, mas com manipuladores de interrupções em threads. Esse modelo é usado para testes e depuração.
  5. Kernel Totalmente Preemptível (RT): Todo o código do kernel é preemptível, exceto em seções críticas selecionadas. Inclui manipuladores de interrupções em threads e mecanismos como spinlocks dormêntes e rt_mutex para minimizar seções não preemptíveis, garantindo comportamento em tempo real.

Onde o Real-Time Linux pode ser Aplicado?

As aplicações são diversas, mas geralmente se concentram em cenários que exigem desempenho crítico:

  1. Automotivo: Sistemas de freios e controle de motores.
  2. Industrial: Robótica e automação.
  3. Telecomunicações: Redes 5G que requerem baixa latência para processamento de pacotes.
  4. Entretenimento: Mixagem de áudio em tempo real.
  5. Saúde: Equipamentos médicos sensíveis ao tempo.

Exemplo Prático: Testando o Kernel PREEMPT-RT

Entendendo o PREEMPT-RT

O PREEMPT-RT é um conjunto de patches aplicados ao kernel Linux que permite transformar o sistema operacional em um ambiente de tempo real. Este modelo de preempção reduz drasticamente a latência ao substituir os mecanismos de sincronização convencionais por variantes que suportam preempção. Ele também implementa mecanismos para dividir seções críticas longas e forçar o encadeamento de manipuladores de interrupção.

Recursos principais do PREEMPT-RT:

  • Threading de Interrupções: Todas as interrupções são executadas como threads agendáveis, permitindo que o sistema priorize e gerencie tarefas em tempo real.
  • Spinlocks Preemptíveis: Substitui spinlocks padrão por variantes que permitem preempção, minimizando atrasos durante o bloqueio de recursos compartilhados.
  • Herança de Prioridade: Implementação de mutexes que evitam problemas de inversão de prioridade, garantindo que tarefas críticas recebam os recursos necessários no momento certo.
  • Fragmentação de Seções Não Preemptíveis: Reduz o tempo de bloqueio em código crítico, quebrando longas seções não preemptíveis em pedaços menores.

Esses recursos tornam o kernel Linux altamente responsivo e adequado para sistemas que exigem previsibilidade e baixa latência, como aplicações em robótica, telecomunicações e equipamentos médicos.

A seguir, apresentamos um exemplo de como configurar e testar um kernel com suporte a PREEMPT-RT. Essas instruções foram realizadas em uma máquina virtual Ubuntu 22.04 LTS.

Passos:

1. Obter o código do kernel mais recente:
1
2
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux

2. Configurar o kernel para PREEMPT-RT:

1
make menuconfig

Navegue até General Setup / Preemption Model e ative a opção Fully Preemptible Kernel (Real-Time). Salve e saia.

Verifique se a configuração foi aplicada:

1
2
grep PREEMPT_RT .config
# Saída esperada: CONFIG_PREEMPT_RT=y

3. Compilar o kernel:

1
time make -j$(nproc)

4. Instalar e reiniciar:

1
2
sudo make modules_install && sudo make install
sudo reboot

Selecione o novo kernel na inicialização.

5. Confirmar a versão:

1
2
3
cat /proc/version
# Exemplo de saída:
# Linux version 6.11.0-rtl+ (gcc (Ubuntu 11.4.0) 11.4.0) #1 SMP PREEMPT_RT Fri Sep 20 19:11:35 IST 2024

Agora o kernel está configurado para suportar tarefas de tempo real. Para verificar sua eficiência, execute aplicativos em tempo real como mixagem de áudio com JACK ou PulseAudio.


Como Configurar o Red Hat Enterprise Linux for Real Time

O Red Hat Enterprise Linux for Real Time (RHEL-RT) oferece um conjunto de ferramentas e configurações otimizadas para aplicações sensíveis à latência. Seguem os passos para configurar e aproveitar ao máximo o RHEL-RT:

1. Pré-requisitos

  • Certifique-se de que sua subscrição Red Hat inclui o canal do RHEL for Real Time.
  • Atualize seu sistema:
1
sudo dnf update -y

2. Instalação do Kernel RT

Instale o kernel otimizado para tempo real:

1
sudo dnf install kernel-rt kernel-rt-devel

3. Seleção do Kernel RT no Bootloader

Depois de instalar o kernel, configure o bootloader para usar o kernel RT como padrão:

1
2
3
grub2-set-default "Red Hat Enterprise Linux (kernel-rt)"
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot

4. Ajustes de Latência

Após reiniciar no kernel RT, use ferramentas como tuna para ajustar prioridades e afinidades de CPU:

1
2
sudo tuna -t irq -q
sudo tuna -t "[sua aplicação]" -p 99

Configure o particionamento da CPU para isolar núcleos dedicados a tarefas de tempo real:

1
echo 1 > /sys/devices/system/cpu/cpu[X]/isolated

5. Ferramentas de Diagnóstico

Utilize ferramentas como cyclictest para medir a latência:

1
sudo cyclictest -m -Sp99 -i100 -h300 -q

Como o RTL foi Implementado pela Red Hat?

A Red Hat contribuiu de forma significativa para a integração do PREEMPT-RT no kernel principal. No Red Hat Enterprise Linux for Real Time, várias otimizações foram feitas para:

  1. Otimizar latências: Ajustes no agendador e gerenciamento de interrupções.
  2. Ferramentas especializadas: Perfis de kernel personalizados e ferramentas como tuna para ajustar prioridades em tempo real.
  3. Segurança: Garantir que as modificações não comprometem a estabilidade do sistema.

Conclusão

A inclusão do Real-Time Linux no kernel principal marca um ponto de virada para o Linux como um sistema operacional universal. Agora, ele é capaz de atender tanto aplicações convencionais quanto ambientes que exigem altíssima previsibilidade.

Seja você um desenvolvedor interessado em explorar o potencial do Linux em sistemas embarcados ou um entusiasta de tecnologia, o RTL abre novas portas para inovações em diversas áreas.


Referências

  1. Linux Foundation. “Real-Time Linux Documentation.” Disponível em: https://wiki.linuxfoundation.org/realtime/documentation/start. Acesso em: 20 dez. 2024.
  2. Linux Foundation. “Kernel PREEMPT-RT.” Disponível em: https://wiki.linuxfoundation.org/realtime/documentation/technical_basics/preemption_models. Acesso em: 20 dez. 2024.
  3. Red Hat. “Red Hat Enterprise Linux for Real Time.” Disponível em: https://docs.redhat.com/en/documentation/red_hat_enterprise_linux_for_real_time/7/html/installation_guide/chap-why_use_rt_to_optimize_latency#chap-Why_Use_RT_to_Optimize_Latency. Acesso em: 20 dez. 2024.
  4. Kaiwan N Billimoria. “The Linux Kernel is Now an RTOS.” Blog Kaiwan Tech. Disponível em: https://kaiwantech.wordpress.com/2024/09/21/the-linux-kernel-is-now-an-rtos-with-rtl-being-fully-merged/. Acesso em: 20 dez. 2024.
Esta postagem está licenciada sob CC BY 4.0 pelo autor.