Benefício do módulo do kernel compilado dentro do kernel?

19

Qual é o benefício de compilar módulos do kernel no kernel (ao invés de módulos carregáveis)?

    
por uray 05.09.2010 / 03:53

5 respostas

7

Depende. Se você tiver uma pequena quantidade de memória, o uso de módulos pode melhorar o currículo, pois eles não são recarregados toda vez (achei significativo em 2 GiB de RAM, mas não em 4 GiB em discos rígidos tradicionais). Isto é especialmente verdadeiro quando devido a algum bug no módulo de bateria (independente de estar compilado ou como módulo), demorou muito para iniciar (vários minutos). Mesmo sem bug no gentoo eu consegui encurtar o tempo (reportado por systemd-analysis ) de 33s para 18s apenas mudando de kernel compilado estaticamente para módulos - 'surpreendentemente' o início do kernel mudou de 9s para 1.5s.

Além disso, quando você não sabe qual hardware você vai usar, os módulos são claramente benéficos.

PS. Você pode compilar até mesmo drivers vitais como módulos, desde que você os inclua no initrd. Por exemplo, distros incluirão o sistema de arquivos de /, drivers de disco rígido etc. no initrd na instalação.

    
por 05.09.2010 / 14:15
7

Até onde eu sei, não há diferença de velocidade.

Acho que você ganhará alguns kB de memória do kernel, pois a granularidade das alocações é de uma página, portanto, na arquitetura típica, cada módulo desperdiça uma média de cerca de 2kB (½ página) por módulo em potencial. Mesmo em sistemas embarcados, isso é pouco significativo. Você também ganha um pouco de espaço em disco, pois os módulos podem ser compactados da mesma forma que o kernel; que pode ser mais relevante em sistemas embarcados com pouco armazenamento.

Se você puder dispensar os módulos, você economizará um pouco de memória do kernel (sem necessidade do carregador do módulo), espaço em disco (sem necessidade dos utilitários do módulo) e complexidade do sistema (não é necessário incluir o carregamento do módulo como um recurso na sua distribuição). Esses pontos são bastante atraentes em alguns projetos incorporados, nos quais o hardware não é extensível.

    
por 13.01.2011 / 21:10
4

Alguns benefícios em potencial. O desempenho é discutível. Você evitaria alguma sobrecarga de tempo de execução associada a um carregador dinâmico, mas duvido que isso seja um grande problema, a menos que você dependa de um agendador em tempo real.

Se você estiver aproveitando páginas grandes em seu sistema, talvez a criação de uma imagem de kernel estática maior signifique um uso mais eficiente do cache do descritor de página. Alguns sistemas irão 'armazenar' o kernel de forma que ele empacote firmemente em uma localidade de memória, o que pode aliviar uma certa quantidade de atraso devido a falhas de página menores e possivelmente maiores.

Pode ser conveniente para você, arquitetonicamente, entregar a One Big Image, argumentando que menos módulos independentes são mais fáceis de manter e a perda de flexibilidade não é importante. Muitos desses tipos de raciocínio se aventuram em questões de estilo e prática.

    
por 13.01.2011 / 17:36
2

Às vezes é necessário. Se você compilar algum driver vital (por exemplo, driver SCSI) como um módulo, seu sistema não inicializará.

Outro grande candidato para não compilar como módulo é o tipo de sistema de arquivos da partição raiz. Se o kernel não entender ext3 para ler /lib/modules/ , como ele carregará os módulos dele?

Pense desta forma: para usar módulos, o kernel precisa saber o suficiente sobre o seu sistema para ler e carregar módulos do kernel. Use isso e tentativa e erro: -)

    
por 05.09.2010 / 09:37
2

Eu estaticamente compilo todos os drivers de hardware embutido dentro do kernel. Exceção seria hardware que não é permanente (hardware conectado por USB, por exemplo).

Como minha configuração de hardware provavelmente não mudará tão cedo, não me incomodo com os módulos.

    
por 05.09.2010 / 21:28