Linux em tempo real





Um sistema operacional em tempo real é necessário quando os requisitos de tempo são impostos ao processador ou ao fluxo de dados. Assim, freqüentemente atua como uma unidade de controle em dispositivos especiais. Experimentos científicos, aplicações de imagens médicas, dispositivos de controle industrial são sistemas em tempo real. Os mecanismos de injeção de combustível de motores de automóveis, controladores de equipamentos domésticos e militares também são sistemas em tempo real.



Além disso, eventos diferentes têm requisitos de tempo diferentes. Por exemplo, o requisito de latência para um sistema de freio antibloqueio pode ser de 3 a 5 milissegundos. Ou seja, a partir do momento em que a roda detecta que está escorregando, o sistema que controla os freios antibloqueio tem de 3 a 5 milissegundos para reagir e corrigir a situação.



Os recursos do kernel em tempo real já existem há mais de uma década no ecossistema de código aberto. O suporte do Red Hat Enterprise Linux (RHEL) para o kernel em tempo real está disponível pela mesma quantidade de tempo. No entanto, muitos administradores de sistema interpretam mal seus conceitos básicos e o comportamento operacional real. Neste artigo, descreverei alguns de seus principais recursos, diferenças do kernel padrão e etapas de instalação.



Agendador de CPU em tempo real



Para diferentes classes de problemas, pode-se designar sistemas soft real-time e sistemas hard real-time . O primeiro não garante o horário exato em que o processo crítico será agendado em tempo real. Eles apenas garantem que o processo será favorecido em relação aos processos não críticos. Os últimos têm requisitos mais rigorosos e a tarefa é concluída dentro do prazo especificado ou é considerada não concluída.



Chamamos de atraso de evento o tempo que decorre desde o momento em que o evento ocorre até o momento em que é atendido. Existem dois tipos de atrasos que afetam o desempenho do sistema operacional de tempo real.



  • CPU . , . , interrupt service routine (ISR).





    . 1 .
  • , , . , . .





    . 2 .






O recurso mais importante de um sistema operacional em tempo real é responder imediatamente a um processo crítico que requer acesso aos recursos da CPU. Como resultado, o planejador do sistema operacional de tempo real deve oferecer suporte ao algoritmo de interrupção preemptiva. Esses algoritmos atribuem prioridade a cada processo com base em seu grau de importância. Se o escalonador também oferece suporte à preempção, o processo atual na CPU será interrompido sob demanda em favor de um processo de prioridade mais alta.





Figura: 3 Classificação dos planejadores.



Existem vários algoritmos para o escalonador em tempo real.



  • Rate-Monotonic Scheduling — . , . .





    n, ln2 ≈ 0.693147.
  • Earliest-deadline-first (EDF) Scheduling . , , . RMS, EDF , . , , .





    . 4 EDF.



    . 4 T1 T2 , T2. T3 T1, 23.
  • POSIX real-time-scheduling. POSIX.4 . , .



    • SCHED_FIFO — , « — » (FIFO). 32 .
    • SCHED_RR — SCHED_FIFO, ( ) . 32 .
    • SCHED_OTHER — ; - .




Instalando e usando RHEL Real Time



Primeiro, você precisa conectar o repositório Red Hat Enterprise Linux Real Time e instalar o grupo de pacotes RT.



[root@server ~]# subscription-manager repos --enable rhel-8-for-x86_64-rt-rpms
[root@server ~]# yum groupinstall RT


RT inclui estes componentes:



  • kernel-rt - kernel com funcionalidade em tempo real;
  • rt-setup - instalação do ambiente Red Hat Enterprise Linux Real Time;
  • rt-tests - utilitários de teste de função RT;
  • rt-eval - para avaliar a possibilidade de uso de RT em um determinado sistema;


Após instalar o RT e reinicializar, certifique-se de que o kernel-rt esteja carregado.



[root@server ~]# uname -a
Linux rt-server.example.com 4.18.0-80.rt9.138.el8.x86_64 …


Vamos dar uma olhada em algumas das diferenças entre kernel-rt e o kernel padrão.



  • Em alta carga, a prioridade da tarefa é verificada (1-99).
  • Tarefas de alta prioridade (99) têm preferência ao acessar recursos da CPU.
  • Não impõe a política Completely Fair Scheduling (CFS) .
  • Usa o SCHED_FIFO ou política SCHED_RR .




Figura: 5 Comparando kernet_rt com o kernel padrão.





O gráfico mostra uma amostra do tempo de resposta de um milhão de repetições para sistemas que usam os kernels RHEL Linux 7 e RHEL Real Time, respectivamente. Os pontos azuis neste gráfico representam os tempos de resposta (em microssegundos) dos sistemas com o kernel RHEL 7 padrão e os pontos verdes representam o RHEL 7 Real Time. O gráfico mostra que o recurso do kernel-rt é muito menor de variância e, consequentemente, mais previsibilidade do tempo de resposta do sistema.



Configurando e testando



Após a instalação do RT, ajustes e ajustes adicionais podem ser necessários para obter os tempos de resposta do sistema mais consistentes. Tais requisitos podem ser apresentados por empresas do setor financeiro ou de telecomunicações. A configuração em si é um processo iterativo e você precisa ser paciente no início do processo. É improvável que seja possível ajustar algumas variáveis ​​e entender que o melhor resultado possível foi alcançado.



O utilitário hwlatdetect do pacote rt-tests mostrará a latência causada pelo hardware e firmware pesquisando a fonte do relógio e procurando por lacunas obscuras.



[root@server ~]#  hwlatdetect --duration=60s
hwlatdetect:  test duration 60 seconds
	detector: tracer
	parameters:
		Latency threshold: 10us
		Sample window:     1000000us
		Sample width:      500000us
		Non-sampling period:  500000us
		Output File:       None

Starting test
test finished
Max Latency: Below threshold
Samples recorded: 0
Samples exceeding threshold: 0


Neste exemplo, os parâmetros indicam o atraso e o método de detecção. O limite de latência padrão foi definido para 10 microssegundos (10 μs).



RT também tem um utilitário chamado rteval para testar o desempenho do sistema em tempo real sob carga. O programa coloca uma carga pesada no sistema usando o escalonador SCHED_OTHER e mede a resposta em tempo real em cada uma das CPUs ativas. O objetivo é manter várias tarefas em execução contínua, como alocação / liberação de memória, E / S de disco, computação, cópia de memória e outras.



Cada encadeamento de medição leva um carimbo de data / hora, fica inativo por um determinado intervalo e, em seguida, leva outro carimbo de data / hora ao acordar. O atraso de medição é igual a t1 - (t0 + i), onde



  • t1 - tempo real de medição;
  • t0 - tempo teórico de despertar do primeiro timestamp;
  • i é o intervalo de espera.


O relatório do utilitário rteval tem esta aparência.



System:
Statistics:
	Samples:           1440463955
	Mean:              4.40624790712us
	Median:            0.0us
	Mode:              4us
	Range:             54us
	Min:               2us
	Max:               56us
	Mean Absolute Dev: 1.0776661507us
	Std.dev:           1.81821060672us

CPU core 0       Priority: 95
Statistics:
	Samples:           36011847
	Mean:              5.46434910711us
	Median:            4us
	Mode:              4us
	Range:             38us
	Min:               2us
	Max:               40us
	Mean Absolute Dev: 2.13785341159us
	Std.dev:           3.50155558554us


Materiais usados












All Articles