O que é um kernel de baixa latência, Real Time ? Saiba o que é Preemptividade!

Linux 5.11-rc1 lançado com muitos novos recursos
kernel

Antes de você instalar o Linux Kernel de baixa latência, é muito importante que você saiba o que é, e como funciona o Kernel com essa modificação. O Kernel de baixa latência geralmente é usado por usuários que precisam de uma resposta em um tempo menor, mas veja abaixo uma pequena apresentação resumida, sobre o que é um Kernel de baixa latência.

O que é um kernel de baixa latência?

Em computação, preemptividade (algumas vezes preempção) é o ato de interromper temporariamente uma tarefa sendo resolvida por um sistema computacional, sem precisar de sua cooperação, e com a intenção de retomar a tarefa depois. Tal mudança é conhecida como uma troca de contexto. É normalmente resolvida por uma tarefa privilegiada ou parte de um sistema conhecido como uma agenda preemptiva, que tem o poder de preeminar, ou interromper, e depois retomar, outras tarefas no sistema.

Em sistemas operacionais, preemptividade ou preempção é a capacidade de alterar a ordem de (ou tirar de execução) um processo em detrimento de outro com uma prioridade maior. Esta é uma característica que não é importante apenas nos sistemas operacionais em tempo real. Este tipo de intervenção por parte dos escalonadores dos sistemas operativos pode ocorrer – embora não estando limitados apenas a isso – a optimizar a entrada/saída de dados em tempo-real, como é o caso da gravação de áudio. Um exemplo de uma tarefa não-preemptiva é o processamento de interrupções.

Algoritmos preemptivos são mais adequados para sistemas em que múltiplos processos requerem atenção do sistema, ou seja, no caso de sistemas multiusuário interativos (sistemas em tempo repartido) ou em sistema de tempo real. Nestes casos, a preemptividade representa a troca do processo em execução, assim sendo, para que o processador seja retirado de um processo, interrompendo seu trabalho, e designado a outro processo, anteriormente interrompido, é fundamental que ocorra a troca de contexto dos processos.

Tal troca exige que todo o estado de execução de um processo seja adequadamente armazenado para sua posterior recuperação, representando uma sobrecarga computacional para realização desta troca e armazenagem de tais dados. Usualmente os algoritmos preemptivos são mais complexos dada a natureza imprevisível dos processos.

Por sua vez, os algoritmos não preemptivos são mais simples e adequados para o processamento não interativo, semelhante aos esquemas de processamento em lote dos sistemas batch. Embora não proporcionando interatividade, são geralmente mais eficientes e previsíveis quanto ao tempo de entrega de suas tarefas.

O mesmo conceito pode ser aplicado ainda quando avaliamos os processos de uma organização.

Um sistema operacional Multi-tarefas

Durante muito tempo os sistemas operacionais não suportavam a execução de vários programas simultaneamente. Estes sistemas operacionais, como o MS-DOS, eram chamados de Mono-tarefa.
Boa parte dos sistemas operacionais atuais permitem a execução de vários programas ao mesmo tempo. É bastante comum que, por exemplo, você esteja navegando na Internet e ouvindo música ao mesmo tempo. Estes sistemas operacionais, como o Linux ou o Windows, são chamados Multi-tarefas.

Bem, sabendo que o seu computador possui apenas um processador, como ele é capaz de executar vários programas ao mesmo tempo? A resposta é simples: Ele não é. Sim, seu computador executa apenas um programa de cada vez, porém, alterna entre os vários programas que estão executando deixando uma fatia de tempo (time slice) para cada um deles. É como o cinema, várias fotos piscando rapidamente dão a impressão de movimento. Vários programas alternando rapidamente dão a impressão de multi-tarefa. A realidade é que apenas um deles irá executar por vez. O responsável por alternar entre as várias tarefas é o sistema operacional, ou mais especificamente, seu escalonador.

O escalonador

O escalonador é uma parte do sistema operacional que irá cuidar da divisão das fatias de tempo (time slice) do processamento entre os vários programas em execução. Há uma série de algoritmos diferentes para escalonamento como, por exemplo, SJF ou FIFO e nem todos trabalham com fatias de tempo. Além de usar fatias de tempo, alguns destes algoritmos de escalonamento tratam os programas em execução com prioridades diferentes. O Linux utiliza esta abordagem. Assim, se um programa for mais importante, ele poderá executar por mais tempo e se ele for menos importante ele executará por menos tempo.

Prioridades

Para garantir que processos (ou tarefas, ou programas) mais importantes executem sempre que for necessário, há a possibilidade de atribuir-lhes uma prioridade maior. Os processos do Sistema operacional, por exemplo, costumam possuir maior prioridade que os processos do usuário.

No Linux, os processos mais importantes possuem prioridade 0 (isto mesmo, zero) e conforme este valor cresce a importância do processo diminui. Os programas que não estão executando ficam esperando em uma fila. Os algoritmos de escalonamento fazem uma conta para tentar dividir de uma maneira justa o processador para todos os processos. Quem está esperando a mais tempo, por exemplo, pode ser chamado primeiro que alguém com maior prioridade. Para alterar entre um processo e outro, o escalonador utiliza um recurso chamado preempção.

Preempção

A preenpção é a alternância entre os vários processos da fila. Partimos da idéia de que apenas um deles está no processador. O escalonador pode preemptar um processo que já executou por tempo bastante e garantir com isto a sensação de multi-tarefa. Porém, além dos processos da fila, o usuário também pode requisitar algum processamento.

Isto é feito, por exemplo, digitando no teclado ou movendo o mouse pela tela. Isto é chamado de interrupção de Hardware. Logicamente que cada dispositivo tem um endereço (chamado IRQ) que identifica se esta interrupção está vindo do teclado, da placa de rede, do mouse ou da placa de som, por exemplo. O tempo entre você pressionar uma tecla e o computador responder por isto, ou seja, atender a esta interrupção, é o que chamamos de latência.

Latência

Latência, como dito anteriormente, é o tempo que o computador demora para responder quando, por exemplo, uma tecla é pressionada no teclado. Nem todos computadores querem trabalhar com latência baixa. Imagine um servidor da Internet. Normalmente estes computadores não possui nem teclado nem mouse. Usuários não operam estas máquinas e, logicamente, elas não trabalham com preempção forçada. Isto significa que ninguém “fura fila” de execução. Seria o mesmo que dizer: Computador, faça isto. E ele responder:

Agora não posso, estou gravando um arquivo. Para um servidor, é mais importante gravar o arquivo. A Latência, neste caso, é bastante alta.
Computadores Desktop trabalham com preempção voluntária do Kernel. Isto significa que, quando há uma interrupção dos usuário, o programa voluntariamente cede seu espaço no processador para que esta seja executada. Talvez ele termine de fazer o que estava fazendo se julgar que isto seja importante. A Latência, neste caso, é menor.

Aplicações que exigem que o tempo de resposta do processador sejam menor necessitam de uma alteração no Kernel do mesmo. Sistemas operacionais como o MacOS e o Windows não permitem alterações em seu Kernel. O Linux permite. Então temos um Kernel preemptível de baixa latência que, como seu próprio nome diz, ele possui uma latência ainda menor devido ao mesmo permitir preempção.

Foi com a intenção de diminuir este tempo de latência que um Húngaro chamado Ingo Molnar, desenvolvedor da Red Hat americana, iniciou o projeto de um Kernel com preempção completa, também chamado de Kernel RT.

Então este é o Kernel RT?

Sim, o Kernel RT foi modificado para permitir preempção completa e acelerar assim o tempo de resposta do processador as interrupções. Você não corre o risco de ouvir do computador “Espera um pouco” quando pedir ao mesmo para executar uma tarefa. Só para exemplificar, um dos parâmetros que o escalonador utiliza para a preempção é o System Timer Resolution.

Existe um intervalo de tempo (time slice) para cada tarefa que o processador recebe para fazer. Cada sistema utiliza uns milésimos de segundos para gerenciar estes intervalos de tempo. Assim um sistema gasta 1/n segundos por intervalo; algo como 1/33 para o W95, 1/100 para a série o Windows NT, 1/250 para o Linux padrão e 1/1000 para o Linux com Kernel RT.

E aonde entra a parte Multimídia?

O tempo de resposta do processador afeta especialmente as aplicações gráficas e multimídias, não apenas em velocidade, mas também em qualidade. Com a utilização de um Kernel RT são menores as chances de um programa multipista não conseguir executar suas 18 faixas “simultaneamente”. Com o tempo de 0,001 segundos de preempção entre uma faixa e outra fará o resultado final, com certeza, soar como um único som.

O mesmo se aplicaria para gravações. É normal em um ambiente de produção musical gravar uma faixa enquanto se ouve outras 5 ou 6.
Devido a utilização mais pesada do processador, o Kernel RT só funciona com processadores mais recentes, não funcionando, por exemplo, com Pentium II.

É devido esta diferença de abordagem que algumas distribuições de Multimídia que possuem a finalidade de trabalhar com produção sonora optam por um Kernel RT e outras, que planejam executar em qualquer tipo de computador, não possuem tal característica.