Desempenho do microkernel vs kernel monolítico


14

Um microkernel implementa todos os drivers como programas no espaço do usuário e implementa recursos principais como IPC no próprio kernel. Um kernel monolítico, no entanto, implementa os drivers como parte do kernel (por exemplo, é executado no modo kernel).

Eu li algumas alegações de que os microkernels são mais lentos que os monolíticos, pois precisam lidar com a passagem de mensagens entre os drivers no espaço do usuário. Isso é verdade?

Por um longo tempo, a maioria dos kernels era monolítica, porque o hardware era muito lento para executar micro-kernels rapidamente. No entanto, agora existem muitos microkernels e kernels híbridos, como GNU / Hurd, Mac OS X, linha Windows NT, etc.

Então, algo mudou sobre o desempenho dos microkernels? Essa crítica aos microkernels ainda é válida hoje?

Respostas:


11

Como sempre é a resposta (ou pelo menos o prefácio) para perguntas relacionadas ao desempenho: conheça o domínio do seu problema, execute benchmarks comparativos e lembre-se do que é a otimização prematura .

Primeiro, nenhum estudo abrangente de benchmarking comparou kernels monolíticos com sistemas de microkernel da geração atual que operam de maneira equivalente. Portanto, embora possa haver testes que comparem elementos específicos desses núcleos, eles não serão representativos do "quadro geral" que sua pergunta pretende pintar.

Com isso dito, existem observações bastante divergentes sobre o desempenho do kernel nos microkernels; por exemplo, pode-se dizer que a família de microkernel L4 possui desempenho IPC em uma ordem de magnitude maior que o kernel Mach. Mas todos os dispositivos Apple desta década estão executando o Mach, e eles parecem funcionar muito rápido, certo?

A moral da história é que qualquer pessoa que esteja decidindo qual arquitetura de kernel usar precisará primeiro decidir qual é seu objetivo final. Os sistemas de microkernel são (quando corretamente implementados, é claro) mais seguros, sustentáveis ​​e modulares. No entanto, eles podem ser difíceis de projetar adequadamente e podem ter sobrecarga de desempenho em uma implementação monolítica. Um kernel monolítico será mais rápido, mas a segurança será mais difícil de implementar e será menos modular e menos fácil de personalizar.

Sua arquitetura de kernel deve ser baseada em qual é seu objetivo final.

(E quando tudo mais falhar, tente dos dois lados e veja o que acontece.)


"Mas todos os dispositivos Apple desta década estão executando o Mach, e eles parecem funcionar muito rápido, certo?" Isso é apenas parcialmente correto. "O kernel do Darwin é o XNU, um kernel híbrido que usa o OSFMK 7.3 (Open Software Foundation Mach Kernel) do OSF, vários elementos do BSD (incluindo o modelo de processo, pilha de rede e sistema de arquivos virtual) e um sistema orientado a objetos API do driver de dispositivo chamada I / O Kit. O design do kernel híbrido fornece a flexibilidade de um microkernel e o desempenho de um kernel monolítico ".
Behrang Saeedzadeh 14/05/19

4

Prefiro chamar o Windows NT e o núcleo XNU da Apple de monolítico em vez de híbrido. Não acho que a classificação de híbrido tenha muito significado na prática. De fato, um dos engenheiros originais da XNU o chama de monolítico [1].

Na questão do desempenho, a única comparação realmente profunda entre monolítico e micro que posso encontrar é "Computação de alto desempenho extremo ou por que os microquerenéis sugam" [2] e uma apresentação de refutação "Os microkernels sugam?" [3].

Modularidade e capacidade de personalização são mais problemas de design do que limitações inerentes a kernels monolíticos. O kernel do Linux, por exemplo, pode variar de vários megabytes a cerca de um megabyte, dependendo das opções em tempo de compilação e da aplicação de certos patches. A grande maioria das mais de 15 milhões de linhas de código do Linux são módulos carregáveis ​​do kernel. Eles são compilados separadamente do kernel base e carregados somente quando necessário. Esses módulos podem implementar drivers e chamadas do sistema (mesmo substituindo as chamadas básicas do sistema).

As duas áreas em que os microkernels têm uma vantagem indiscutível estão com pouca memória (<= 512k ram) ou sistemas operacionais "em tempo real", como sistemas de voo de companhias aéreas ou sistemas de controle de reatores nucleares.

Edit: Falando mais sobre as vantagens e desvantagens de qualquer arquitetura de kernel, Gernot Heiser admite livremente no final de sua apresentação [3] que os kernels monolíticos são inerentemente mais eficientes porque um microkernel sempre tem alguma sobrecarga extra. No entanto, essa sobrecarga extra leva ao aumento da confiabilidade, daí o domínio dos microkernels do RTOS.

[1] Louis G. Gerbarg, "Sincronização avançada no Mac OS X: estendendo o Unix ao SMP e em tempo real", Anais da BSDCon 2002 Conference, pp. 2

[2] Chistoph Lameter, "Computação de alto desempenho extremo ou por que os microkernels sugam", 2007 Linux Symposium, Volume One

[3] Gernot Heiser, "Do Microkernels Suck?", 9º Linux.conf.au, janeiro de 2008


Eu estava classificando XNU e Windows NT como kernels "híbridos"
MMK

Obrigado @DW pelo bem-vindo. Limpei um pouco minha postagem e adicionei citações.
Ironlenny

@mmk Desculpe, você os chamou de híbridos, eu estava com pressa de fazer minha postagem e ler errado.
Ironlenny
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.