No início de julho, um grupo de engenheiros da Red Hat e da Universidade de Boston lançou um white paper, que propunha mudar o kernel Linux monolítico para a arquitetura unikernels. Decidimos entender o material e discutir a reação da comunidade de TI a essa proposta.
Foto - Eamonn Maguire - UnsplashUnikernels como alternativa
Sabe-se que o Linux usa um
kernel monolítico . Ele gerencia processos, funções de rede, periféricos e acesso ao sistema de arquivos. No entanto, como escrevem os autores do artigo da Red Hat e da Universidade de Boston (
p. 1 ), essa estrutura tem suas desvantagens. Em particular, aplicativos de alto desempenho são forçados a usar estruturas como
DPDK e
SPDK para obter acesso
ilimitado a dispositivos de E / S ignorando o kernel.
Certas dificuldades surgem na nuvem. Para maior segurança, os aplicativos corporativos são implantados em máquinas virtuais separadas. Cada VM está sob o controle de um sistema operacional completo. Como resultado, os recursos de computação dos servidores não são gastos da melhor maneira possível.
Uma abordagem alternativa pode melhorar a situação - unikernels. A idéia a seguir é vincular o aplicativo às bibliotecas necessárias do sistema operacional e compilá-las em um arquivo binário. Depois disso, esse "binário" pode ser usado para inicializar o sistema. Essa abordagem torna possível especializar a funcionalidade do sistema operacional para as necessidades de um aplicativo específico.
Os recursos desse sistema são gastos com mais eficiência. Os unikernels também têm desempenho superior ao da arquitetura principal monolítica. O motivo é a simplificação dos caminhos de E / S, pois todos os dados e arquivos são colocados em um único espaço de endereço. Também elimina a necessidade de alternar o contexto entre o espaço do usuário e o espaço do kernel.
Uma equipe de engenheiros da Universidade de Boston e da Red Hat desenvolveu um protótipo do Linux baseado em unikernels. O sistema operacional é chamado Unikernel Linux (UKL).
O que os engenheiros fizeram
De acordo com os desenvolvedores (
p. 3 ), eles mudaram apenas onze e adicionaram vinte novas linhas de código ao kernel Linux v5.0.5 e
glibc . O kernel "clássico" permaneceu operacional - o usuário pode escolher o método de montagem (UKL ou não).
Os autores criaram uma pequena biblioteca UKL na qual eles colocaram "stubs" especiais que mascaram chamadas de sistema não utilizadas. Eles também modificaram o vinculador do kernel para definir um novo tipo de segmentos, por exemplo, TLS (encadeamento de armazenamento local) dos binários ELF. O processo de construção também foi modificado, que agora combina o código do aplicativo, glibc e a biblioteca UKL em um arquivo binário.
Os engenheiros estão trabalhando em várias deficiências. Por exemplo, eles planejam mover a memória
TLS do espaço do kernel e abandonar o vmalloc ao gerenciar a alocação de memória para simplificar o sistema.
Pareceres
Os desenvolvedores da Red Hat
dizem que o UKL pode ser uma alternativa completa para iniciar processos que funcionam diretamente com o hardware (ignorando o kernel). Os autores do artigo original afirmam (
p. 2 ) que o serviço de cache com cache de memcached no unikernels funciona 200% mais rápido que no Linux.
No geral, a comunidade de TI também respondeu positivamente à iniciativa dos autores do artigo original. Moradores do Hacker News observaram que a arquitetura dos unikernels aumentará significativamente a segurança do ambiente de software. No caso de hackear o aplicativo, o hacker terá acesso apenas ao seu binário.
Fotos - Jack Young - UnsplashUm dos residentes do Hacker News até
propôs uma solução radical - reescrever o kernel do Linux sob unikernels do zero ao Rust. Segundo ele, a linguagem resolverá o problema
com um grande número de bugs relacionados à segurança da memória. Outro usuário considerou a idéia boa, mas
sugeriu esperar alguns anos para que os desenvolvedores da linguagem lidassem com as instabilidades da biblioteca. Embora um entusiasta
já esteja
escrevendo seu sistema operacional no Rust. Fontes podem ser
encontradas no GitHub .
Outras implementações
UKL não é a única implementação do sistema operacional baseado em unikernels. Por exemplo, uma solução semelhante está
sendo desenvolvida por uma equipe de engenheiros da Universidade Politécnica da Virgínia, da Qualcomm e da Universidade Técnica da Renânia-Vestfália de Aachen, na Alemanha. Seu núcleo leve é chamado
HermiTux . Ele permite que você inicie aplicativos rapidamente sobre o hipervisor - de acordo com os autores, o tempo de download não excede 0,1 segundos. O consumo de memória no ambiente de teste é de 9 MB, dez vezes menor que o kernel clássico do Linux.
Também faz sentido mencionar o
MirageOS OS desenvolvido no OCaml. O kernel pode ser executado sobre os hipervisores Xen, KVM, BHyve e VMM (OpenBSD), bem como em plataformas móveis. O sistema suporta várias dezenas de bibliotecas OCaml para executar operações de rede (DNS, SSH, OpenFlow, HTTP, XMPP), trabalhando com armazenamentos e processamento paralelo de dados. Podemos dizer que o MirageOS é um dos primeiros projetos bem-sucedidos de unikernels. Curiosamente, seu blog também é implementado como unikernel.
Esses sistemas operacionais já são usados em ambientes de produção por muitas organizações - por exemplo,
Cambridge University ,
IBM, Ericsson e Docker . É provável que em breve um novo ingresse nesses sistemas operacionais - o Unikernel Linux.
Sobre o que escrevemos em um blog corporativo: