Respostas:
Depende. Se você tiver uma quantidade pequena de memória, o uso de módulos pode melhorar o currículo, pois eles não são recarregados todas as vezes (eu achei significativo em 2 GiB de RAM, mas não em 4 GiB em discos rígidos tradicionais). Isso é especialmente verdade quando, devido a algum bug no módulo da bateria (independentemente de estar compilado ou como módulo), demorou muito tempo para iniciar (vários minutos). Mesmo sem erros no gentoo, consegui reduzir o tempo (relatado por systemd-analysis
) de 33s para 18s apenas mudando do kernel estaticamente compilado 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 vai usar, os módulos são claramente benéficos.
PS. Você pode compilar até mesmo drivers vitais como módulos, desde que os inclua no initrd. Por exemplo, as distros incluirão o sistema de arquivos de /, drivers de disco rígido etc. no initrd na instalação.
Tanto quanto eu sei, não há diferença de velocidade.
Eu 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 não é 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; isso pode ser mais relevante em sistemas embarcados com pouco armazenamento.
Se você pode dispensar completamente os módulos, economiza um pouco de memória do kernel (sem necessidade do carregador de módulos), espaço em disco (sem necessidade dos utilitários do módulo) e complexidade do sistema (sem necessidade de incluir o carregamento do módulo como um recurso em sua distribuição) ) Esses pontos são bastante atraentes em alguns projetos incorporados nos quais o hardware não é extensível.
Alguns benefícios potenciais. O desempenho é discutível. Você evitaria alguma sobrecarga de tempo de execução associada a um carregador dinâmico, mas duvido que isso seja importante, a menos que você esteja dependendo de um agendador em tempo real.
Se você estiver aproveitando as páginas grandes do seu sistema, talvez criar uma imagem estática maior do kernel signifique que você faça um uso mais eficiente do cache do descritor de páginas. Alguns sistemas irão 'armazenar' o kernel de forma que ele se agrupe firmemente em um local de memória, o que pode aliviar um certo atraso devido a falhas de página menores e possivelmente maiores.
Arquitetonicamente, você pode fornecer uma imagem grande, argumentando que menos módulos independentes são mais fáceis de manter e a perda de flexibilidade não é importante. Muito desse tipo de raciocínio se aventura em questões de estilo e prática.
Às vezes é necessário. Se você compilar algum driver vital (por exemplo, driver SCSI) como módulo, seu sistema não inicializará.
Outro ótimo 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
ler /lib/modules/
como ele carregará os módulos?
Pense desta maneira: para usar os módulos, o kernel precisa saber o suficiente sobre o seu sistema para ler e carregar os módulos do kernel. Use isso e tentativa e erro :-)