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

Respostas:

7

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.

Maciej Piechotka
fonte
Você se importa de ler esta resposta novamente, com cuidado. Eu teria, mas não sei o que você quis dizer no lugar, por exemplo ... nos discos rígidos tradicionais .
Tshepang
Eu quis dizer magnéticos (não tenho nenhuma experiência com SSD).
Maciej Piechotka
Eu tentei tornar isso mais legível. Você pode verificar se eu não estraguei tudo?
Tshepang
Obrigado. Acabei de terminar a sessão do exame para não ter tido tempo de examiná-la.
Maciej Piechotka
7

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.

Gilles 'SO- parar de ser mau'
fonte
Acessar um símbolo em um módulo é um pouco mais lento (um indireto está envolvido). Mas a flexibilidade adicional (pode carregar / descarregar conforme necessário, não precisa criar um kernel personalizado para o hardware exato em uso, ...) vale a pena (a menos que você esteja construindo para um ambiente muito restrito que não nunca mude).
vonbrand
4

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.

mfe
fonte
2

À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 ext3ler /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 :-)

nc3b
fonte
Estou pensando em alguns desempenho melhorar? Existe algum?
phunehehe
1
No passado, as pessoas se esforçavam bastante para produzir o menor núcleo possível com apenas o necessário . Hoje isso mudou bastante. De fato, sempre que você carregar um módulo pela primeira vez, sofrerá um pequeno impacto no desempenho. Isso não quer dizer que você deve compilar tudo no kernel :-) Veja isto: articleinput.com/e/a/title/…
nc3b
para driver ou funcionalidade não vital, há algum benefício? por exemplo, se eu apenas quiser usar o terminal e vários utilitários de rede sem outra necessidade ou funcionalidade. existe algum benefício se eu apenas compilar todos os módulos e drivers necessários dentro do kernel sem o módulo carregável?
uray 5/09/10
3
Touro. Um sistema inicializará bem com um driver SCSI como módulo em um initrd. É para isso que eles servem.
Wzzrd
Sim ... desde que o módulo para que está em um initrd que o kernel pode entender ...
Dagelf
2

Compilamos estaticamente todos os drivers para hardware interno dentro do kernel. A exceção seria um hardware que não é permanente (hardware conectado por USB, por exemplo).

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

Stephane
fonte