paint-brush
Mais rápido, mais forte e 100% mais personalizado: um grande tour pelos kernels do Linuxpor@tylerjl
9,763 leituras
9,763 leituras

Mais rápido, mais forte e 100% mais personalizado: um grande tour pelos kernels do Linux

por Tyler9m2022/08/03
Read on Terminal Reader
Read this story w/o Javascript

Muito longo; Para ler

O coração pulsante de qualquer instalação do Linux é o kernel. Ao contrário de um sistema operacional comercial, o kernel é muito configurável e pode ser personalizado por qualquer usuário. Alguns patches podem alterar fundamentalmente o comportamento do kernel e, em alguns casos, podem ajustar seu sistema para ser ainda mais eficaz para seu caso de uso. Neste artigo, exploraremos uma variedade de kernels não padrão que oferecem uma ampla variedade de recursos e capacidades diferentes para muitos tipos de sistemas.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Mais rápido, mais forte e 100% mais personalizado: um grande tour pelos kernels do Linux
Tyler HackerNoon profile picture

O coração pulsante de qualquer instalação do Linux é o kernel. A maioria das distribuições que você encontrará adiciona recursos e capacidades exclusivos a essa base, mas o kernel é a peça de software unificadora comum em todas as distribuições que se autodenominam Linux. Ao contrário de um sistema operacional comercial, o kernel é muito configurável e pode ser totalmente personalizado por qualquer usuário.


Por que você iria querer mexer na configuração do seu kernel? Embora o kernel padrão fornecido por sua distribuição seja uma opção razoável, existem conjuntos exclusivos de patches que podem alterar fundamentalmente o comportamento do kernel e, em alguns casos, podem ajustar seu sistema para ser ainda mais eficaz para seu caso de uso específico.


Vamos dar uma olhada no panorama dos kernels Linux especializados!

Noções básicas do kernel: o upstream

O site kernel.org é a fonte definitiva da verdade para o kernel Linux principal que a equipe do kernel lança regularmente. Se você der uma olhada na página inicial, poderá ver uma variedade de diferentes versões de kernel listadas:

A página inicial do kernel.org

Se você for um usuário do Linux, talvez nunca tenha visto esta página durante todo o seu tempo de uso do Linux. O que da?


Uma distribuição como o Ubuntu geralmente seleciona uma versão do kernel que é conhecida por ser confiável e estável, aplica todos os conjuntos de patches necessários para personalizá-lo como bem entender e, em seguida, fornece o kernel compilado a todos os usuários para que o processo de compilação real (que pode demorar um pouco!) ocorre em sua extremidade, em vez de na área de trabalho. Isso significa que dois usuários atualizados do Ubuntu 22.04, por exemplo, provavelmente estão usando a mesma compilação do kernel, o que simplifica o suporte a uma ampla variedade de usuários em várias instalações diferentes. Ele também permite que os engenheiros que desenvolvem o Ubuntu se concentrem em fornecer uma única compilação de kernel que seja bem testada e atenda à maioria das necessidades de seus usuários.


Se você fosse comparar o kernel em execução em duas distribuições Linux diferentes e atualizadas, suas versões quase certamente seriam diferentes. Embora o kernel tenha uma excelente reputação de estabilidade, algumas distribuições optam por ser cautelosas sobre quando mudar para um kernel mais novo. Normalmente, essa é uma boa ideia - os números entre duas versões do kernel, como 5.18.16 e 5.10.135, parecem grandes, mas os desenvolvedores do kernel são conservadores quanto à adição e remoção de recursos, portanto, normalmente não há grandes diferenças práticas entre eles. Se uma distribuição Linux mantém algumas versões atrás do kernel mais recente, fazer isso para obter lançamentos mais previsíveis geralmente vale a pena.


Mas, embora o kernel padrão não dê grandes saltos entre os lançamentos, diferentes desenvolvedores downstream mantêm coleções de alterações que podem alterar fundamentalmente o comportamento do kernel. Alguns deles incluem:

  • Mudanças no agendador da CPU. Esta é uma das principais funções do kernel e determina como diferentes processos em sua máquina são escolhidos para serem executados em seu processador.
  • Mudanças no agendador de E/S. O kernel oferece suporte a diferentes métodos de agendamento, como deadline ou cfq que podem causar um impacto significativo no desempenho das operações de disco, principalmente para discos giratórios, onde as realidades físicas dos fusos e dos cabeçotes de leitura afetam a rapidez com que os dados podem ser acessados.
  • Segurança. Alguns conjuntos de patches fazem alterações significativas para tentar proteger o kernel do Linux contra possíveis vetores de exploração.

A beleza de rodar o Linux é que todas essas diferentes opções estão completamente abertas para você! Vamos dar uma olhada em alguns deles.

Delicioso, Baunilha Padrão

O kernel Linux padrão não possui nenhuma personalização chamativa, mas ainda existem algumas configurações que ainda estão sob o controle do usuário sem a necessidade de recompilar o kernel ou fazer alterações no código-fonte.


Por exemplo, o agendador de I/O acima mencionado determina como o kernel prioriza as operações pendentes para leitura ou gravação no armazenamento persistente. Essa é uma configuração importante por vários motivos. O kernel envia um documento que você está tentando salvar no disco primeiro para melhorar a latência da área de trabalho ou deve liberar o diário do sistema no disco para garantir que esteja disponível no caso de uma falha? Esse tipo de decisão do agendador de E/S leva em consideração um grande número de variáveis, como o tempo gasto na espera do kernel, a urgência da solicitação e muito mais.


Como quase todas as configurações de baixo nível do Linux, você pode inspecionar diretamente qual agendador de E/S seu sistema está usando usando um caminho de sistema de arquivos. Essas informações são controladas por dispositivo usando o sistema de arquivos virtual sys . No meu sistema, posso encontrar isso inserindo o dispositivo em que estou interessado, sda , em um caminho em /sys :


 $ cat /sys/block/sda/queue/scheduler [mq-deadline] kyber none


Isso indica que minha unidade sda está usando o agendador mq-deadline com os outros métodos, kyber e none , disponíveis para uso, mas não escolhidos ativamente no momento. O agendador mq-deadline é descrito como " [um] bom polivalente com sobrecarga de CPU razoavelmente baixa ", o que me parece bom!


Você também pode alterar muitas dessas configurações usando uma interface igualmente simples. A documentação do Linux Kernel explica isso bem. Resumindo, basta enviar o nome do agendador desejado para o mesmo caminho de antes. O comando a seguir alteraria o agendador desse dispositivo específico para usar o agendador kyber . Observe que o acesso root é necessário para alterar esses tipos de configurações.


 $ echo kyber > /sys/block/sda/queue/scheduler


Agendadores por dispositivo são apenas uma das configurações ajustáveis em tempo de execução disponíveis em um kernel em execução. Confira essas outras configurações para opções adicionais:

Kernels de Suporte de Longo Prazo: Oldies, mas Goodies

E se recursos novos e sofisticados parecerem ótimos, mas você estiver preocupado principalmente com suporte e estabilidade?


O kernel de suporte de longo prazo, ou LTS , é uma versão do kernel do Linux especialmente otimizada para suporte por um período de tempo muito maior do que um kernel típico. Para sistemas que favorecem atualizações previsíveis e estáveis, usar um pacote de kernel com o sufixo -lts geralmente é uma escolha muito boa. Embora nenhum patch especial tenha sido aplicado, usar um kernel como o 5.15 significa que o suporte é garantido até outubro de 2023, em vez de antes. Se você tivesse adotado o kernel 4.9 quando foi lançado em dezembro de 2016, ele teria suporte até janeiro de 2023 – é muito tempo para não ter que se preocupar em interromper as alterações!


O kernel de suporte de longo prazo é provavelmente a variante de kernel mais amplamente disponível fora da versão principal. Algumas distribuições como o Ubuntu LTS vêm com um kernel de suporte de longo prazo por padrão, mas a maioria das outras distribuições oferece a opção de usar um kernel LTS instalando e ativando um pacote com nomes semelhantes a linux-lts . Sua distribuição escolhida provavelmente tem guias explicando como instalar e usar kernels diferentes, então, para experimentar o kernel LTS sólido, procure por pacotes de kernel que terminem com -lts e siga as instruções da distribuição escolhida para usar um pacote de kernel alternativo.

Kernels endurecidos: para os que se preocupam com a segurança

Dentro da segurança da informação, hardening refere-se ao processo de reforçar áreas específicas para mitigar potenciais explorações e vulnerabilidades. O núcleo principal do Linux obviamente tenta atingir esse grau de segurança tanto quanto razoavelmente possível, mas alguns usuários podem optar por restringir seu kernel e seus recursos para trocá-los por maior segurança. O kernel Linux endurecido fornece isso.


Normalmente, o kernel Linux endurecido se comporta de maneira muito semelhante a um kernel típico, embora haja compensações. Por exemplo, alguns aplicativos podem simplesmente não funcionar em um kernel endurecido, e muitos módulos de kernel pré-compilados podem precisar usar seu equivalente DKMS para se integrar adequadamente com um kernel endurecido. No entanto, para aplicativos de missão crítica em que a segurança é uma prioridade, um kernel reforçado geralmente é a escolha certa.


DKMS significa "suporte dinâmico ao módulo do kernel" e é um recurso que permite aos usuários usar o código-fonte para os módulos do kernel que não têm suporte pré-compilado para o kernel desejado. Por exemplo, o projeto OpenZFS no Linux deve ser instalado como um módulo do kernel para usar o sistema de arquivos ZFS no Linux. Muitas distribuições fornecem um pacote que instalará o módulo pré-compilado pronto para uso, o que evita longos tempos de compilação e possíveis incompatibilidades, mas pode não funcionar corretamente ao usar um kernel personalizado. Um módulo OpenZFS DKMS, por outro lado, pode compilar-se on-the-fly no kernel escolhido para garantir que funcione conforme o esperado.

Alcançando a Iluminação com o Zen

O kernel zen é um dos conjuntos de patches baseados na comunidade mais amplamente suportados. Embora não seja uma grande saída do kernel Linux upstream, o kernel zen (ou Liquorix) faz alterações para sobrecarregar o desempenho. No site da Liquorix:


Liquorix é uma substituição de kernel de distro criada usando as melhores fontes de configuração e kernel para cargas de trabalho de desktop, multimídia e jogos.


Uma alteração, por exemplo, é alterar o agendador de I/O mencionado acima para selecionar o algoritmo bfq por padrão, que otimiza a capacidade de resposta do sistema. Outro conjunto de alterações comprime o armazenamento de troca e usa um algoritmo de cache alternativo para ter um bom desempenho sob alta carga de memória.


Como um dos conjuntos de patches mais bem estabelecidos, pode já haver um pacote linux-zen em sua distribuição de escolha pronto para uso – no entanto, a documentação do projeto também fornece um tutorial explicando como usar este kernel se você precisar de opções adicionais.

Empurrando FPS com Kernels de jogos

O kernel linux-tkg é um conjunto especializado de patches projetados especificamente para otimizar o desempenho do jogo. Espremer o máximo de FPS possível de uma placa de vídeo pode ser um exercício extenuante, mas mudanças no conjunto de patches tkg podem oferecer ganhos adicionais com mudanças focadas em partes críticas do kernel do Linux.


Por exemplo, agendadores de CPU adicionais foram adicionados, como o agendador Project C ou o conjunto de patches -ck . Algoritmos de rede como o Cake são ativados por padrão, assim como sinalizadores de compilação otimizados como -O2 para obter o máximo de desempenho possível do código compilado.


O conjunto de patches -tkg é menos onipresente do que os kernels LTS ou Zen, mas as etapas de instalação no GitHub fornecem um guia abrangente detalhando como compilar e instalar o kernel personalizado.


O conjunto de patches XanMod fornece um conjunto semelhante de recursos voltados para usuários que exigem um kernel de baixa latência e alto desempenho adequado para casos de uso como jogos. Em ambos os casos, os kernels tkg e XanMod oferecem uma forma muito especializada de kernel Linux que ainda pode funcionar como um sistema operacional do dia-a-dia com benefícios adicionais em máquinas de jogos.

Kernels em tempo real

O termo "computação em tempo real" refere-se ao conceito de um sistema que visa garantir que determinadas operações sejam executadas em uma determinada janela de tempo. Por exemplo, um sistema que controla os freios de um carro ou as asas de uma aeronave não pode ser interrompido por um fluxo de gravações pendentes em um disco ou desenho de imagens em uma tela.


O projeto Real Time Linux fornece um conjunto de patches que oferecem essa funcionalidade. Embora esses recursos geralmente sejam muito especializados e não sejam adequados para aplicativos de desktop ou servidor, eles podem, no entanto, ser extremamente importantes na situação certa. Para projetos que possuem aplicações em setores específicos, esses patches em tempo real são uma necessidade.


O conjunto de kernels -rt tem um público muito mais direcionado, mas geralmente é mais difundido do que os kernels otimizados para jogos ou de baixa latência devido à sua importância onde permanecem em uso. O gerenciador de pacotes da sua distribuição pode fornecer esses tipos de kernels com nomes como linux-rt ou linux-rt-lts .

Kernels Híbridos

Existem muitos kernels mais especializados que exploramos, mas estaríamos aqui o dia todo! Com isso dito, há ainda mais maneiras de personalizar um kernel usando os diferentes tipos dos quais já falamos.


Uma característica interessante de muitos desses patches é que eles geralmente são combinados em kernels que combinam seus recursos em uma árvore de origem do kernel. Por exemplo, uma parte crítica da infraestrutura de usinagem operacional pode exigir os recursos em tempo real de um kernel -rt , mas também se beneficiar da segurança adicional de um kernel reforçado. Contanto que diferentes patches possam ser aplicados de forma limpa juntos, nada o impede de misturar e combinar kernels adaptados às suas necessidades exatas.


Algumas distribuições fornecem isso simplesmente combinando conjuntos de patches no nome do pacote do kernel. Por exemplo, o repositório Arch Linux User fornece o pacote linux-rt-lts , que combina os recursos do kernel de suporte em tempo real e de longo prazo. O Ubuntu fornece pacotes como linux-image-*-aws especializados com várias alterações para otimizar o kernel para operação no AWS EC2.


Independentemente da distribuição escolhida, se você estiver interessado em executar um kernel personalizado, explore os pacotes de sua distribuição para obter os kernels disponíveis. Eles fornecem a maneira mais simples e rápida de começar a usar uma versão especializada do kernel do Linux.

Vá em frente e Tinker!

Este artigo apenas arranhou a superfície do cenário do kernel do Linux. Embora muitos desses kernels sejam difundidos e comumente encontrados na maioria dos repositórios de distribuição, existem alguns conjuntos de patches mais esotéricos que levam o kernel ainda mais longe. Com um kernel de código-fonte aberto, você mesmo pode modificar o kernel para compilar um personalizado de acordo com suas próprias necessidades, mas isso é um guia para outra ocasião.


Até lá, confira alguns desses recursos para obter mais informações e encontre um kernel que você gostaria de experimentar!