construção de núcleos monolíticos melhorará o desempenho do sistema?

0

Eu estou usando o Ubuntu 12.04.                                   Se eu construir kernels monolíticos para drivers de dispositivos, ou seja, o driver terá seu próprio kernel, como eu entendo, ele realmente melhora o desempenho do sistema e o desempenho do dispositivo? Há alguma desvantagem?

    
por rɑːdʒɑ 27.08.2012 / 19:42

3 respostas

4

Uma nota pedante: "núcleo monolítico" significa algo completamente diferente. O kernel do Linux é sempre monolítico, independentemente de alguns ou todos os seus módulos serem construídos como LKMs ou compilados diretamente no kernel.

link

Quando os LKMs são carregados no kernel, não há absolutamente nenhuma diferença no desempenho em comparação com os módulos internos, pois o código LKM é executado no mesmo processo que o resto do kernel, não há comunicação entre processos ou nada.

% bl0ck_qu0te%

No entanto, LKMs podem ser carregados mediante solicitação, portanto, se você pegar o kernel padrão do Ubuntu e recompilá-lo com todos os módulos internos, você obterá um kernel enorme que provavelmente irá desacelerar o sistema por causa do uso de muito mais RAM para todos os módulos não utilizados (o que possivelmente também causará todos os tipos de conflitos entre si).

Por outro lado, se você compilar um kernel que é customizado para sua máquina em particular e tem apenas os módulos para o hardware da máquina, o kernel provavelmente será mais rápido que o kernel padrão de estoque, especialmente no momento da inicialização. Eu tenho jogado com um kernel personalizado para o meu EeePC no Arch Linux e posso relatar que é realmente notado mais rápido:

  • o kernel pode ficar muito fino, incluindo apenas recursos que sua máquina realmente usa. A coisa toda de kernel-eeepc é de apenas 4Mb, o que torna mais rápido carregar a partir do disco e usa menos RAM quando carregada, deixando mais memória para os programas do espaço do usuário.

  • nenhum módulo para carregar significa menos E / S de disco durante a inicialização.

  • ter drivers de hardware embutidos significa que não há necessidade de análise de hardware durante a inicialização, o que economiza tempo.

  • Os drivers de hardware internos eliminam a necessidade do ramdisk inicial, portanto, o kernel pode ser carregado diretamente pelo GRUB.

  • você pode desativar outros recursos do kernel desnecessários, o que reduz novamente o tamanho do kernel e o torna mais rápido.

As desvantagens, no entanto, são:

  • Atualizações automáticas do kernel tornam-se inúteis, você precisa construir novos kernels a partir da fonte

  • Se a máquina morrer e você conectar o disco em outro computador, a máquina provavelmente não inicializará.

Em suma, este é um exercício divertido e educativo, mas não é algo que eu consideraria fazer em uma máquina que não seja muito restrita por hardware.

    
por Sergey 28.08.2012 / 00:42
2

A única vantagem que vejo nesse ponto é a capacidade de desabilitar o carregamento do módulo (assim, mesmo que alguém tenha acesso root / superusuário, ele não pode carregar um módulo "ruim").

Dito isto, costumava ser que você obtinha um pequeno aumento de desempenho desabilitando os drivers não utilizados e compilando em módulos carregáveis. À medida que o desempenho do hardware aumenta, essas pequenas melhorias tornam-se cada vez mais insignificantes.

    
por RobotHumans 27.08.2012 / 19:49
1

Eu queria falar aqui. Eu costumava fazer apenas kernels monolíticos anos atrás, mas o kernel hoje é bastante avançado usando muitos recursos. Tanto quanto eu posso dizer, não vai deixar você ir 100%. Eu posso estar enganado, no entanto.

Pelo que eu entendi, o kernel irá descarregar os módulos eficientemente, permitindo ao seu sistema mais memória e recursos. Para mim, eu só faço coisas módulo se não é importante. Um dispositivo USB, por exemplo, será um módulo, mas meu EXT4 está compilado. Tudo com rede também. Além disso, eu compilo o kernel depois que eu removi tudo que eu posso e eu uso alguns métodos adicionais

Primeiro, instale todo o seu hardware. Pode ser um dispositivo USB como um iPod ou uma unidade flash. Então corra isto:

faça o localmodconfig

Isso irá modificar o .config para incluir todo o seu hardware detectado e marcá-lo M.

faça o xconfig

O Xconfig lhe dará o menu para remover as coisas, mas tenha cuidado. Eu faço do meu kernel uma baixa latência para desktop e adiciono suporte especificamente ao meu hardware.

Finalmente, os recursos adicionais da sua CPU podem ser usados se o GCC estiver atualizado e você usar o seguinte:

CONCURRENCY_LEVEL = getconf _NPROCESSORS_ONLN CFLAGS="- march = bdver1 -mtune = bdver1" CXXFLAGS="$ {CFLAGS}" make-kpkg -initrd -append-to-version = -MyKernelVersionNameHere kernel_image kernel_headers

Isso iniciará o processo de construção do kernel usando todas as CPUs disponíveis para construí-lo, além de suporte especial para a CPU AMD Zambezi. Altere "bdver1" para corresponder à sua CPU específica e escolha MyKernelVersionNameHere para ajustar sua própria convenção de nomenclatura do kernel.

No final, é mais rápido? Acho que sim. Eu recompilei o kernel, o GCC, o WINE e posso jogar a maioria dos jogos de PC com Windows melhor no Linux do que no Windows.

    
por Joel Frese 28.08.2012 / 03:24