Kernel Generic, Low Latency e Real Time

Você sabe as diferenças de um Kernel Generic, Low Latency e de um Real Time? Quais as vantagens, desvantagens e quando fazer uso de cada um deles?

| Se você apoia nosso site, desative o AdBlock quando visitá-lo, inclusive em Mobile!
Os anúncios são poucos e não invasivos. Se quiser contribuir com nosso trabalho, clique em qualquer banner de sua preferência, exceto dos Parceiros. 
Mais detalhes clicando aqui.

Para entender em detalhes como funciona cada um dos 3 modos de operação do kernel Linux, primeiro você precisa entender de forma mais profunda como trabalha um kernel no coração de um computador, seja esse kernel o NT do Windows, Darwin do macOS ou o próprio Linux.

1. Mono e 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, executavam da maneira como chamamos de Mono-tarefa. Era um programa de cada vez: Edita um texto, ponto. Finaliza, abre uma música. Finaliza, abre um navegador, e por aí vai.

Todos os sistemas operacionais atuais permitem a execução de vários programas, sendo 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 classificados como chamamos de Multi-tarefas.

Quem processa tantos “processos” é justamente os núcleos de um processador.

1.1 Núcleos

Trocando em miúdos, o computador faz mais de uma tarefa se ele tiver mais núcleos de processamento – por exemplo, quad-core executa até 4 processos ao mesmo tempo e em tempo real; e se for um Intel® Core i7 Octa Core, vai rodar até 8 programas ao mesmo tempo, sendo um por núcleo.

Por isso que ter muitos núcleos significa mais poder!*

* Claro, depende de outros fatores, como a frequência do CPU e memória cache, entre outros. Mas nos desktops, de forma grosseira, quanto mais novo um processador for, e com mais núcleos, melhor vai ser seu desempenho.

Hyperthread (virtuais) da Intel® tem menos poder que núcleos físicos/reais. Ser Quad Core com Hyperthread tem menos poder que um Quad Core com 4 núcleos reais.

A briga AMD vs Intel vem de que a AMD traz processadores com mais núcleos reais, porém a Intel possui novas tecnologias em menos núcleos…

Da mesma forma que processadores novos, devido ás novas arquiteturas e tecnologias, mesmo com menos clock, terão mais desempenho que processadores antigos de clock maior. Um Intel® Core i3 de 2.5 Ghz pode perder para um Intel® Core i5 de 2.0 Ghz em desempenho final.

Sim, cada núcleo (dos vários) do seu computador executam 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 no 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 em cada núcleo do CPU.

Dependendo do programa e do suporte, ele pode ser executado em mais de um núcleo, como uma compilação de kernel ou mesmo um game. Mas isso depende do código fonte do programa executado. Se ele não suportar mais que um núcleo ao mesmo tempo, você pode ter uma CPU com 8 núcleos e ver apenas 1 trabalhando. Isso ocorre por exemplo no game CitiesXL 2011®, ele sempre usará apenas 1 núcleo, o que sempre causará um problema de desempenho em qualquer máquina!

O responsável por alternar entre as várias tarefas é o sistema operacional, ou mais especificamente, seu escalonador.

2. 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.

3. 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 (isso 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.

Como funcionam as filas? | SuperE você reclamando da fila do banco ou no trânsito; processos também precisam esperar!

Os algoritmos de escalonamento fazem um cálculo 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 alternar entre um processo e outro, o escalonador utiliza um recurso chamado preempção. – Abordamos mais detalhes sobre os Processos de Sistema nesta publicação!

4. Preempção

A preempçã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.

5. Latência

5.1 Kernel Generic

Finalmente, chegamos á estrela da publicação, a Latência: É 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 possuem 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 para os processos do usuário local que vai apenas dar comandos a ele.

Computadores Desktop trabalham com preempção voluntária do Kernel. Isto significa que, quando há uma interrupção dos usuários, 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 que do exemplo do servidor acima.

Portanto até aqui, temos o trabalho do kernel Generic, padrão das distros Linux atuais. Ele prioriza o usuário e menos os processos. E ainda sim pode ser muito rápido/otimizado!

5.2 Kernel Low Latency

Aplicações que exigem que o tempo de resposta do processador seja ainda 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 – no caso do macOS, apenas parcialmente – porém o Linux permite. Então temos um Kernel preemptível de baixa latência – low latency – que, como seu próprio nome diz, ele possui uma latência ainda menor devido ao mesmo permitir preempção.

Enquanto o kernel generic tem um escalonador de tarefas (scheduller) convencional, ele distribui os processos e tenta fazer o balanço dos recursos. Ja no low latency você consegue ter um scheduller “otimizado”, ele tenta a todo tempo jogar os processos em prioridades mais altas possíveis ate consumir boa parte ou toda sua memoria e processamento. Portanto o Low Latency pode também consumir mais recursos do hardware e do sistema.

Em suma, o low latency é um kernel otimizado, geralmente usado em servidores ou para rodar algum programa dedicado que geralmente usa paralelismo (varias threads), como gestores de bancos de dados, como o Firebird.

5.3 Kernel Real-Time

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

Sim, o Kernel RT foi modificado para permitir preempção completa e acelerar ainda mais o tempo de resposta do processador ás interrupções. Você não corre o risco de ouvir do computador “Espera um pouco” quando pedir ao mesmo para executar uma tarefa.

A utilização mais popular do kernel Real Time é na indústria, onde sistemas de automação e embarcados exigem processamento em tempo real com resposta imediata aos comandos; além disso, é muito usado em produção de audiovisual como explicado mais abaixo.

6. Gargalos

Mesmo com um kernel Real Time, qualquer programa e qualquer sistema operacional vai utilizar o máximo possível de processador e memória disponíveis.

Na prática só não usam 100% de processamento e 100% da memória porque boa parte dos programas simplesmente pausam nas chamadas do disco rígido, processamento de vídeo e outros periféricos, os quais, são muito mais lentos que a CPU e esta vai ter que esperar para continuar o processamento.

O resultado é uma intermitência de processamento e um desempenho instável, conhecidos como gargalos de processamento. Uma maneira de corrigir isso é verificar todo o equipamento, se sua CPU trabalha bem com a frequência da RAM, se a leitura do HDD é de velocidade maior, etc.

Ou seja, o kernel Real Time trabalha melhor quando o hardware inteiro é pensado nisso, com o computador normalmente sendo especializado (científico, militar ou mesmo entusiasta) com um hardware de ponta (mídia de armazenamento NVMe de alta velocidade, memória RAM de alta velocidade, processador de alta velocidade, etc. No fim, o Real Time terá hardware de sobra pra ser rápido.

7. Multimídia

A maior vantagem no uso de um kernel RT na produção audiovisual está no tempo de resposta do processador, que 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 Real Time são menores as chances de um programa multipista/mixer 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, 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 ao mesmo tempo.

Devido a utilização mais pesada do processador, o Kernel Real Time só funciona bem com processadores mais recentes e mais potentes, não funcionando adequadamente, por exemplo, com qualquer um da linha Pentium II. É devido a esta diferença de abordagem que algumas distribuições Linux com foco em Multimídia que possuem a finalidade de trabalhar com produção sonora optam por um Kernel Real Time e outras, que planejam executar em qualquer tipo de computador, não possuem tal característica.

Há ainda casos excepcionais, onde temos distribuições Linux com kernel Real Time focando em games, ou seja, possui modificações que o tornarão otimizado para games, e não tanto para trabalhos de produção, Home Office e outros.

8. Patch para o Kernel Real Time

O kernel Linux não possui o modo Real Time como uma versão disponível padrão para download. Ela caiu em desuso devido a desinteresse da comunidade que para muitos meios utiliza o low latency para saciar suas necessidades.

Caso você precise de um kernel RT, você pode visitar a página oficial aqui, ciente que terá que baixar e compilar o kernel Linux daqui e modificar o seguinte parâmetro:

Ativar: 
CONFIG_PREEMPT_RT_FULL=y

Desativar: 
CONFIG_PREEMPT_RT_FULL=n

Assim ele será compilado com o modo RT ativo!

Mas lembre-se, por diversas razões você poderá ver problemas de gargalo e baixo desempenho ao usar um kernel real time esperando maior desempenho, por exemplo, em jogos no Linux. A recomendação geral é: Use o kernel low latency/RT somente em casos especiais como edição/produção de conteúdo audiovisual.

Para uso cotidiano ou mesmo para games, o kernel generic é mais do que suficiente e recomendado, o desempenho será na medida com o que você dispor de hardware em uso.

Fontes:
Embarcados
SempreUpdate
ListsUbuntu

4 comentários em “Kernel Generic, Low Latency e Real Time”

  1. Muito bom e explicativo o post. Consegui compreender perfeitamente as condiçoes de trabalho de cada Kernel. Uso atualmente UbuntuStudio, lowlatency, 18.04. Trabalho com audio e midi!!!
    Obrigado pelas informações valiosas!!!
    ()

    Responder
  2. Uma observação: “Sistemas operacionais como o MacOS e o Windows não permitem alterações em seu Kernel”, o Mac, na verdade, tem o Kernel opensource baseado em BSD, e permite que customizações sejam feitas, basicamente é este o motivo pelo qual existem os hackintoshs atualmente.

    https://github.com/apple/darwin-xnu

    Responder
    • Na real uma parte do kernel do macOS é customizável, mas não inteiro. Você não pode simplesmente falar “vou recompilar o kernel do macOS totalmente do zero” igual voce faz com o linux e com o BSD, que é só ir no github, baixar o source e aguardar umas boas horas até concluir, editando cada pedacinho do coração do sistema. Hackintosh existe com engenharia reversa no kernel do macOS, não pode ser considerado aberto por conta disso, mas sim algo que foi hackeado, quebrado, burlado. Da mesma forma, BSD está para o macOS assim como o Linux está para o UNIX, sistemas semelhantes aonde um originou o outro mas atualmente são tão distintos que é um erro compará-los lado a lado.

      Agradeço o feedback, a publicação foi corrigida para ficar mais adequada.

      Responder

Deixe um comentário