back_button

2025/04/04

10. Entendendo os Dois Kernels do Oracle Linux “UEK” e “RHCK”

O Oracle Linux possui dois kernels: o Red Hat Compatible Kernel (RHCK), que é um kernel compatível com o RHEL, e o próprio Unbreakable Enterprise Kernel (UEK) do Oracle Linux.

Se você nunca usou o Oracle Linux antes, pode estar preocupado com o Unbreakable Enterprise Kernel. Neste artigo, explicaremos o Unbreakable Enterprise Kernel, bem como sua compatibilidade e os critérios para determinar quando usá-lo.

Red Hat Compatible Kernel e Unbreakable Enterprise Kernel

Como uma introdução básica, forneceremos uma visão geral do Red Hat Compatible Kernel e do Unbreakable Enterprise Kernel.

O que é o Red Hat Compatible Kernel?

Como o nome sugere, o Red Hat Compatible Kernel (RHCK) é um kernel compatível com o RHEL que é simplesmente uma versão recompilada do código-fonte do kernel do RHEL. Como é apenas uma versão recompilada, ele se comportará da mesma forma que o RHEL, incluindo bugs, desde que o número da versão seja o mesmo.

A tabela a seguir mostra as versões do RHCK e do glibc para cada versão principal do Oracle Linux. Para enfatizar a compatibilidade dentro da mesma versão principal do Linux, as versões base de componentes importantes, como o kernel e o glibc, não mudam. Em vez disso, quando há uma atualização, o número de lançamento muda conforme descrito abaixo.

Versão do Linux Versão do RHCK Versão do glibc
Oracle Linux 95.14.02.34
Oracle Linux 84.18.02.28
Oracle Linux 73.10.02.17

O diagrama a seguir mostra os nomes dos pacotes RPM para o kernel e o glibc. Quando um pacote de atualização é lançado, a versão base permanece a mesma e o lançamento é atualizado.

Figura 1 Versão e Lançamento do kernel/glibc

O que é o Unbreakable Enterprise Kernel?

O Unbreakable Enterprise Kernel (UEK) é um kernel exclusivo do Oracle Linux que é baseado em um kernel mais recente que o RHCK e é compatível com o RHCK. O manual a seguir fornece uma referência para suas características.

Documentação oficial: Unbreakable Enterprise Kernel

O Unbreakable Enterprise Kernel (UEK) é um kernel Linux construído pela Oracle e suportado por meio do suporte ao Oracle Linux. Seu foco é desempenho, estabilidade e backports mínimos, acompanhando o código-fonte principal o mais próximo possível do prático. O UEK é bem testado e usado para executar os Sistemas de Engenharia da Oracle, a Infraestrutura de Nuvem Oracle e grandes implantações empresariais para clientes da Oracle.

Guia de Instalação de Banco de Dados para Linux

O Unbreakable Enterprise Kernel está incluído e ativado por padrão nos kernels do Oracle Linux. Ele é baseado em uma versão estável recente do kernel Linux de desenvolvimento principal e também inclui otimizações desenvolvidas em colaboração com as equipes de engenharia de banco de dados Oracle, middleware Oracle e hardware Oracle para garantir estabilidade e desempenho ideal para as cargas de trabalho empresariais mais exigentes.

Os principais pontos são:

  • O UEK é um kernel Linux desenvolvido e suportado pela Oracle.
  • Kernel padrão do Oracle Linux
  • Baseado em uma nova versão estável do kernel Linux principal
  • Desenvolvido em colaboração com as equipes do Exadata e do Oracle Database, com foco em desempenho e estabilidade
  • Testado em ambientes de carga de trabalho empresarial em larga escala, incluindo Exadata e Oracle Cloud Infrastructure

Relação entre Oracle Linux e versão do kernel

O número da versão do UEK muda dependendo do kernel em que ele é baseado, sendo nomeado, por exemplo, UEK6 e UEK7. Além disso, uma grande diferença em relação ao RHCK é que a versão principal do Oracle Linux e a versão do UEK não são fixas. A tabela a seguir mostra a correspondência entre UEK e Oracle Linux. Como você pode ver nesta tabela, o Oracle Linux 8 pode usar o UEK6 e o UEK7.

Versão do UEK Versão do Kernel Oracle Linux 7 Oracle Linux 8 Oracle Linux 9
UEK75.15.0×
UEK65.4.17×
UEK54.14.35××
UEK44.1.12××

A tabela a seguir compara as versões do kernel do RHCK e do UEK para o Oracle Linux. O Oracle Linux 9 foi lançado em 2022, então a diferença entre as versões do RHCK e do UEK é pequena. No entanto, como o Oracle Linux 7 e o Oracle Linux 8 foram lançados há algum tempo, a diferença entre as versões do RHCK e do UEK é grande.

Versão do Linux RHCK UEK
Oracle Linux 95.14.05.15.0
Oracle Linux 84.18.05.4.17, 5.15.0
Oracle Linux 73.10.04.1.12, 4.14.35, 5.4.17

Convenção de nomeação de versões do kernel Linux

Agora que cobrimos as versões do kernel Linux, vamos dar uma olhada novamente na convenção de nomeação. Na verdade, não há uma definitiva, pois ela mudou várias vezes e as convenções de nomeação são ligeiramente diferentes entre o kernel.org original e as distribuições Linux.

Convenções de nomeação no kernel.org

Primeiro, vamos olhar para as convenções de nomeação usadas pelo site oficial do kernel Linux, kernel.org. Os kernels Linux são nomeados como “abc” e são chamados da seguinte forma. No entanto, essa convenção de nomeação não é absoluta.

a: Número da versão principal
b: Número da versão secundária
c: Número do patch ou revisão

Além disso, a próxima versão após 5.19 é 6.0, mas isso não ocorre porque as funções mudaram significativamente. É simplesmente porque não é desejável que o número b seja muito grande, e é uma convenção contar a quando b chega a cerca de 20. E c são modificações no nível de patch, como correções de bugs. Por essa razão, agora é comum chamar o número da versão ou número de lançamento uma combinação de “ab” ou “abc“.

No diagrama a seguir, o Major Release está riscado porque não é mais muito usado, mas ainda é utilizado quando se quer ser explícito sobre o primeiro número.

Figura 2 Convenção de nomeação de versão do kernel Linux

Dê uma olhada no diagrama a seguir. Ele mostra o histórico de desenvolvimento do kernel Linux. As partes cinzas são o período de desenvolvimento, e após um certo período, o desenvolvimento passa para a próxima versão. Em outras palavras, um lançamento específico do Linux “abc” repete o ciclo de vida de “desenvolvimento → suporte → LTS (Suporte de Longo Prazo)” uma vez a cada poucos anos. O kernel LTS é lançado uma vez por ano e é suportado por cerca de cinco anos.

Fonte: https://en.wikipedia.org/wiki/Linux_kernel_version_history

Figura 3 Histórico de Versões do Kernel Linux 6.x

Figura 4 Histórico de Versões do Kernel Linux 5.x

Convenções de nomeação das distribuições Linux

As convenções de nomeação das distribuições Linux e do kernel.org são ligeiramente diferentes. Os kernels das distribuições Linux são nomeados como “abc-z“, mas, na realidade, a maioria das distribuições tem “ab0-z” onde o c é zero. Isso é verdade não apenas para o RHEL, mas também para o Ubuntu, e também para o UEK7 e posteriores.

O diagrama a seguir mostra como as versões do kernel são chamadas nas distribuições Linux. Atualmente, não há um entendimento comum, e parece variar dependendo do contexto e da pessoa em uso.

Figura 5 Nomes das distribuições Linux

O termo Versão Base é novo na plataforma. Ele indica a versão do kernel.org em que é baseado. No entanto, o número c é forçado a ser zero, então, mesmo que a versão base seja 5.15.0, a versão do kernel em que é baseado não é necessariamente 5.15.0. Por exemplo, o UEK7 é uma versão 5.15.0, mas é baseado no 5.15.6.

$ rpm -q --changelog  kernel-uek-5.15.0-105.125.6.2.2.el9uek | tail -n 2
- Linux 5.15.6 (Greg Kroah-Hartman)

Relação entre mainline, longterm, stable e rc

Vamos dar uma olhada na página do kernel Linux oficial, The Linux Kernel Archives. Há várias versões do kernel Linux listadas, com rótulos como mainline, longterm, stable e rc. Explicarei cada um abaixo.

Figura 6 The Linux Kernel Archives

O diagrama a seguir mostra algumas versões do kernel extraídas do kernel.org com comentários adicionados. O mainline é o desenvolvimento principal. Uma vez que um rc (candidato a lançamento) está disponível, ele se torna a versão oficial, então mainline e stable referem-se ao mesmo estado. Entre as versões estáveis, a cada poucas versões, elas se tornam de longo prazo e são suportadas por um longo período de tempo.

Figura 7 Ciclo de vida no kernel.org

O que é backporting?

Há uma palavra para lembrar aqui: backporting. Backporting refere-se à aplicação de recursos ou correções incluídos em uma versão mais recente de um software a uma versão mais antiga do software.

Por exemplo, aplicar um novo patch introduzido na versão 6.0 à versão 5.0 é chamado de backporting. Geralmente, quanto maior a diferença entre as duas versões, maior a diferença na base de código, tornando mais difícil a aplicação. Além disso, há casos em que o bug em questão não existe na versão mais antiga, tornando o backporting desnecessário.

Algumas pessoas podem estar se perguntando qual é o oposto de backport. Por exemplo, é o caso de aplicar uma correção de bug da versão 5.0 do software à versão mais recente 6.0 do software. Fiz algumas pesquisas, mas não há um termo comum, e parece que backport, merging, forward-porting, etc., são usados. Parece que muitas pessoas o chamam de backport sem pensar muito.

O texto a seguir é parte da descrição do UEK introduzida no início.

Seu foco é desempenho, estabilidade e backports mínimos, acompanhando o código-fonte principal o mais próximo possível do prático.

Considerando o que discutimos até agora, a Oracle está fazendo as seguintes afirmações:

  • Bases de código-fonte mainline mais recentes têm maior probabilidade de oferecer melhor desempenho e estabilidade porque incorporam mais novos recursos e correções de bugs.
  • Começar com um código-fonte mainline mais recente significa que há menos diferenças no código-fonte, então a menor quantidade de backporting é necessária.

Conhecimento básico sobre internos do Linux

Uma das coisas mais importantes a saber sobre o UEK é sua compatibilidade com o kernel RHEL (RHCK). Para entender a compatibilidade, o conhecimento do sistema operacional Linux é essencial. Portanto, explicaremos os básicos da estrutura interna do Linux.

Componentes principais do sistema operacional Linux

O diagrama a seguir mostra os principais componentes do sistema operacional Linux e suas relações. É importante lembrar dessas informações ao tentar entender o sistema operacional Linux.

  • Kernel Linux
    O kernel é o componente central do sistema operacional Linux. Ele recebe solicitações de aplicativos e realiza gerenciamento de processos e gerenciamento de memória para executar programas. Ele também usa drivers de dispositivos, que são módulos do kernel, para gerenciar o sistema de arquivos e controlar dispositivos para entrada/saída. O papel do kernel pode ser resumido da seguinte forma. É melhor entendê-lo como uma função que atua no hardware.
    • Gerenciamento de recursos de hardware para CPU, memória, disco, placas de rede, etc.
    • Gerenciamento e controle de processos para aplicativos em execução no Linux
  • Módulos do Kernel
    Os módulos do kernel são arquivos binários que estendem a funcionalidade do kernel. Eles são principalmente drivers de dispositivos e estão em um formato que pode ser carregado quando necessário. Isso permite suportar novo hardware simplesmente adicionando drivers e também reduz o uso de memória.
  • Bibliotecas de Sistema
    As bibliotecas de sistema (ou simplesmente bibliotecas) são coleções de funções comumente usadas por programas, fornecendo a maior parte da funcionalidade fornecida pelo sistema operacional. A mais famosa é o glibc, a biblioteca C padrão usada no Linux. Ela é chamada de glibc porque foi originalmente desenvolvida pela GNU como a Biblioteca C do GNU.

Figura 8. Estrutura interna do Linux

Entenda os básicos (funções de biblioteca e chamadas de sistema)

Os aplicativos na Figura 8 referem-se a vários programas, incluindo comandos e utilitários que são incluídos como padrão no sistema operacional. Esses programas são executados chamando funções de biblioteca e chamadas de sistema. Vamos entender a diferença entre eles.

“Bibliotecas /lib64/usr/lib são instaladas em e . nm Se você exibir as informações de símbolos do glibc com o comando, printf() você verá que ele contém . As informações de símbolos referem-se às funções e variáveis contidas na biblioteca ou programa executável.

printf() Ele opera conforme os argumentos fornecidos, emitindo instruções para o kernel, se necessário.

$ rpm -qf /lib64/libc.so.6
glibc-2.34-60.0.3.el9.x86_64

$ nm /lib64/libc.so.6 | grep "T printf"
000000000006f430 T printf
000000000006e8f0 T printf_size
000000000006f350 T printf_size_info

“Chamadas de sistema” fornecem funções para operar hardware, como entrada/saída de arquivos, criação de novos processos, comunicação de rede, etc. Na Figura 8, uma chamada de sistema é chamada diretamente de um aplicativo. No entanto, ela também pode ser chamada por meio de uma função wrapper de chamada de sistema incluída no glibc.

Você leu até aqui? Pode-se ver que bibliotecas como o glibc são muito importantes. Por essa razão, as distribuições baseadas no RHEL não mudam a versão do glibc até que a versão principal mude.

Modo kernel e modo usuário

Descreve modo kernel e modo usuário.

Programas que acessam recursos de hardware, como o kernel e drivers de dispositivos, são executados em um modo privilegiado especial chamado “modo kernel”. Eles são executados em um único espaço de memória isolado que utiliza os recursos de proteção da CPU e, como não exigem trocas de contexto, são executados muito rapidamente. O kernel não apenas executa cada processo, mas também fornece acesso protegido ao hardware.

Em contraste, programas gerais são executados em um espaço de memória chamado “modo usuário”. Programas em execução no modo usuário não podem acessar o hardware diretamente. Em vez disso, eles acessam as funções do kernel por meio de chamadas de sistema, e o kernel, por fim, acessa o hardware.

Resumo do conhecimento básico

Vamos resumir brevemente os básicos dos internos do Linux que cobrimos até agora.

  • Tanto o kernel quanto o glibc são componentes importantes do Linux, mas têm papéis diferentes
  • O kernel é responsável por controlar o hardware.
  • As bibliotecas fornecem funções que são usadas por programas comuns. A biblioteca mais importante é o glibc.
  • Para acessar o hardware, é necessário fazer uma chamada de sistema.
  • Os programas acessam o hardware por meio de chamadas de sistema ou funções de biblioteca.

Como os contêineres funcionam

Em seguida, explicaremos os contêineres. Você pode estar se perguntando “Por que contêineres?” depois de explicar o kernel. Isso ocorre porque entender como os contêineres funcionam é um bom tema para entender a compatibilidade do kernel.

Estrutura do Contêiner

O diagrama a seguir compara a virtualização baseada em hipervisor e baseada em contêiner: Uma máquina virtual tem um sistema operacional convidado e um kernel, enquanto um contêiner contém apenas aplicativos e bibliotecas, mas nenhum kernel.

Figura 9 Diferença entre tipo hipervisor e tipo contêiner

A razão pela qual um kernel não é necessário em um contêiner é porque ele usa o kernel no sistema operacional host. Embora os contêineres usem recursos do Linux, como cgroups e Namespace, para isolar os contêineres uns dos outros, eles são apenas processos em execução no sistema operacional host. Veja o diagrama a seguir. Um contêiner será executado se contiver as bibliotecas e programas necessários para executar um aplicativo.

Figura 10 Como os contêineres funcionam

Compatibilidade do Kernel Linux

Há algo importante aqui.

Funcionará mesmo que o sistema operacional no qual a imagem do contêiner foi criada seja uma versão diferente do Linux do sistema operacional host.

Por exemplo, suponha que o sistema operacional host no qual o motor do contêiner é executado seja o Ubuntu Server 22.04 LTS. Nesse caso, mesmo que a imagem do contêiner seja criada com o Oracle Linux 9, ela funcionará desde que as bibliotecas e binários necessários estejam incluídos. Embora ambos precisem ser Linux, eles podem funcionar mesmo que as versões do kernel Linux sejam ligeiramente diferentes.

No entanto, isso é uma questão de se funciona tecnicamente, e não tem nada a ver com se o fornecedor oferece suporte técnico ou não.

Figura 11 Compatibilidade do kernel Linux

Deixe-me explicar um pouco mais em detalhes. Veja a Figura 12 abaixo. A interface entre aplicativos e o kernel nas chamadas de sistema do Linux é chamada de Interface Binária de Aplicativo (ABI). O kernel Linux é desenvolvido com consideração à compatibilidade para que as chamadas de sistema que existem em versões anteriores possam ser chamadas com as mesmas especificações. Portanto, mesmo que a versão do kernel Linux seja ligeiramente diferente, os aplicativos funcionarão da mesma maneira.

Figura 12 Manutenção da compatibilidade através da Interface Binária de Aplicativo

Interface Binária de Aplicativo (ABI)

A ABI é uma definição de interface, especificamente o nome da chamada de sistema, tipo de dado do argumento, número de argumentos, tipo de dado do valor de retorno e valor, etc. O kernel Linux é desenvolvido para que esses não mudem. Se a ABI não mudar, não haverá erros ao chamar uma chamada de sistema.

No entanto, se a versão do kernel for diferente, a implementação interna da chamada de sistema pode ser diferente. No entanto, a chamada de sistema é uma instrução primitiva para o hardware, como “escrever dados no disco” ou “alocar memória”. Portanto, o comportamento externo também é feito para ser o mesmo. É assim que a compatibilidade é mantida.

Figura 13 Compatibilidade mantida pela ABI

Incompatibilidades a serem observadas

Por outro lado, quais incompatibilidades você deve ter cuidado? Veja a Figura 14 abaixo. Estes são módulos do kernel, como drivers de dispositivos. Mesmo que os números da versão do kernel coincidam, eles podem não funcionar se os números de lançamento no final forem diferentes. Alguns módulos do kernel podem absorver pequenas diferenças nos números de lançamento, mas a recompilação é recomendada.

Embora não tenha nada a ver com o kernel, uma coisa a ter cuidado quando se trata de compatibilidade de aplicativos são as bibliotecas usadas em linguagens, frameworks, etc. As bibliotecas são frequentemente atualizadas com frequência, e é comum que haja restrições como a biblioteca XXX 2.0 ou superior.

Figura 14. Incompatibilidade de módulos do kernel

Comparando UEK e RHCK

Agora que cobrimos os básicos, podemos finalmente chegar ao tópico principal de comparação: compatibilidade e recursos.

Compatibilidade com o RHCK

Isso é sobre a compatibilidade entre o UEK e o RHCK. Se você leu até aqui, provavelmente já sabe. O UEK é desenvolvido para manter a compatibilidade ABI com o RHCK. Portanto, se for um aplicativo normal que roda no modo usuário, ele é compatível.

No entanto, há algumas coisas a se ter em mente.

Suporte para produtos de software comerciais
O primeiro ponto é se o produto de software comercial é suportado ou não. Mesmo que um produto de software comercial suporte o Oracle Linux, ele pode suportar o RHCK, mas não o UEK. Na verdade, os aplicativos que rodam no modo usuário geralmente funcionam sem problemas, mas se você quiser priorizar a política de suporte do fornecedor, use o RHCK.

Um exemplo de software comercial que exige atenção à compatibilidade são os produtos antivírus. Alguns produtos antivírus rodam como módulos do kernel, então, nesse caso, você precisa verificar se eles são compatíveis.

Não há uma ampla seleção de software japonês, mas você pode verificar a compatibilidade do Oracle Linux no catálogo ISV do Oracle Linux.

Ao usar um servidor feito por um fabricante conhecido
O ponto mais importante a notar é que o Oracle Linux está incluído na lista de hardware suportado. Se não for suportado pelo fabricante, há uma grande chance de que eles não possam ajudá-lo se surgirem problemas.

Além disso, como as máquinas servidoras estão equipadas com hardware especial, como controladores RAID e NICs, os fabricantes podem fornecer seus próprios drivers de dispositivos. Se os drivers não forem suportados, você pode não conseguir usá-los.

Verifique a página web do fabricante ou a Lista de Certificação de Hardware do Oracle Linux para informações de suporte, que também inclui informações sobre suporte ao RHCK e UEK.

Diferenças de Recursos

É difícil generalizar sobre as diferenças de recursos, porque elas variam por versão do kernel, mas, de forma geral, o UEK é baseado em um kernel mainline mais recente, então ele tem melhor desempenho e mais recursos.

Por exemplo, no Oracle Linux 9, a versão base do UEK7 é 5.15.0, e a versão base do RHCK é 5.14.0. Não há muita diferença neste momento. No entanto, como mostrado na tabela a seguir, os UEKs mudam mesmo dentro da mesma versão principal. Em alguns anos, o UEK8 será lançado para o Oracle Linux 9, e a diferença nas versões do kernel aumentará.

Versão do Linux UEK4 UEK5 UEK6 UEK7
Oracle Linux 9×××
Oracle Linux 8××
Oracle Linux 7×

Recursos conhecidos exclusivos do UEK incluem ocfs2 e btfs. Há outros, mas para detalhes, por favor, veja “Novos Recursos e Mudanças” nas “Notas de Lançamento do Unbreakable Enterprise Kernel“.

Figura 15. Notas de Lançamento do Unbreakable Enterprise Kernel Release 7

Resumo: Quando usar UEK ou RHCK?

O UEK é projetado para cargas de trabalho em larga escala do Oracle Database e do Oracle Linux KVM, e é baseado em um kernel mais recente, o que significa que muitas vezes oferece melhor desempenho e recursos.

No entanto, o UEK não é uma necessidade absoluta. Acredito que você deve usá-los de acordo com a situação e o propósito. Nos casos 1 e 2 a seguir, você deve considerar usar o RHCK. O importante é entender a diferença entre o UEK e o RHCK e usá-los adequadamente. Também apresentarei uma tabela resumindo o que expliquei até agora.

  1. Se você está usando um servidor físico e o fabricante suporta apenas o RHCK
    , use o RHCK.
  2. Se você está usando software comercial e o fornecedor suporta apenas o RHCK
    , é melhor usar o RHCK. No entanto, se você está usando em seu próprio sistema e pode tolerar os riscos, o UEK também é uma opção.

Vantagens e desvantagens do UEK vs. RHCK

Item Vantagem Desvantagem
Funções e DesempenhoDependendo de quais versões do UEK e do RHCK você está comparando, o UEK provavelmente terá melhores recursos e desempenho porque usa um kernel mainline mais recente, e também pode ter otimizações para o Oracle Database.
Compatibilidade de aplicativos que rodam no modo usuárioCompatívelNo caso de produtos comerciais embalados, o suporte pode não estar disponível dependendo da política de suporte do fornecedor.
Módulos do kernel que rodam no modo kernelDrivers de dispositivos etc. que são fornecidos como código-fonte provavelmente são compatíveisSoftware antivírus e drivers de dispositivos que rodam no modo kernel geralmente não são compatíveis.
OutrosServidores de fabricantes conhecidos podem suportar o Oracle Linux (RHCK), mas não o UEK.