Sim, a razão pela qual componentes essenciais (como mm) não podem ser módulos carregáveis é porque eles são essenciais - o kernel não funcionará sem eles.
Não consigo encontrar referências que afirmem que os efeitos da fragmentação de memória em relação aos módulos carregáveis sejam significativos, mas esta parte do LLKM pode ser uma leitura interessante para você.
Eu acho que a questão é realmente parte integrante da questão da fragmentação da memória em geral, que acontece em dois níveis: a fragmentação da memória real, que o subsistema mm kernel gerencia, e a fragmentação do espaço de endereço virtual que pode ocorrer com aplicativos muito grandes (que eu presumo que seja em grande parte o resultado de como eles são projetados e compilados).
No que diz respeito à fragmentação da memória real, não creio que isso seja possível em uma granularidade mais fina do que a do tamanho da página (4 KB). Portanto, se você estivesse lendo 1 MB de espaço virtualmente contíguo, que na verdade é 100% fragmentado em 1024 páginas, pode ser 1000 operações menores extras envolvidas. Nessa parte do how-to, lemos:
The base kernel contains within its prized contiguous domain a large expanse of reusable memory -- the kmalloc pool. In some versions of Linux, the module loader tries first to get contiguous memory from that pool into which to load an LKM and only if a large enough space was not available, go to the vmalloc space. Andi Kleen submitted code to do that in Linux 2.5 in October 2002. He claims the difference is in the several per cent range.
Aqui, o espaço vmalloc, que é onde os aplicativos do espaço do usuário residem, seria aquele que é potencialmente propenso a se fragmentar em páginas. Esta é simplesmente a realidade dos sistemas operacionais contemporâneos (todos eles gerenciam memória via endereçamento virtual). Podemos inferir a partir disso que o endereçamento virtual poderia representar uma penalidade de desempenho de "vários por cento" no mundo do usuário também, mas na medida em que o endereçamento virtual é necessário e inescapável no mundo do usuário, é apenas em relação a algo completamente teórico.
Existe a possibilidade de fragmentação adicional da fragmentação do espaço de endereço virtual de um processo (em oposição à memória real por trás dele), mas isso nunca se aplicaria aos módulos do kernel (enquanto o último parágrafo aparentemente poderia). p>
Se você quer minha opinião, não vale muito a contemplação. Tenha em mente que mesmo com um kernel altamente modular, os componentes mais usados (fs, networking, etc) tenderão a ser carregados muito cedo e permanecerão carregados, portanto eles certamente estarão em uma região contígua de memória real, pelo que é vale a pena (o que pode ser uma razão para não carregar e descarregar módulos sem sentido ).