it-swarm-es.tech

¿Beneficio del módulo del kernel compilado dentro del kernel?

¿Cuál es el beneficio de compilar módulos del kernel en el kernel (en lugar de como módulos cargables)?

19
uray

Depende. Si tiene una pequeña cantidad de memoria, el uso de módulos puede mejorar el currículum ya que no se recargan cada vez (lo encontré significativo en 2 GiB de RAM pero no en 4 GiB en discos duros tradicionales). Esto es especialmente cierto cuando, debido a algún error en el módulo de la batería (independientemente de que esté compilado o como módulo), tardó mucho en iniciarse (varios minutos). Incluso sin errores en gentoo logré acortar el tiempo (informado por systemd-analysis) De 33s a 18s simplemente cambiando de kernel compilado estáticamente a módulos - 'sorprendentemente' el inicio del kernel cambió de 9s a 1.5s.

Además, cuando no sabe qué hardware va a utilizar, los módulos son claramente beneficiosos.

PD. Puede compilar incluso controladores vitales como módulos siempre que los incluya en initrd. Por ejemplo, las distribuciones incluirán el sistema de archivos de /, los controladores del disco duro, etc.en initrd durante la instalación.

7
Maciej Piechotka

Hasta donde yo sé, no hay diferencia de velocidad.

Creo que obtendrá unos pocos kB de memoria del kernel ya que la granularidad de las asignaciones es de una página, por lo que en la arquitectura típica cada módulo desperdicia un promedio de aproximadamente 2 kB (½ página) por módulo en potencia. Incluso en sistemas integrados, eso no es significativo. También gana un poco de espacio en disco ya que los módulos se pueden comprimir al mismo tiempo que el kernel; que puede ser más relevante en sistemas integrados con poco almacenamiento.

Si puede prescindir de los módulos por completo, ahorrará un poco de memoria del kernel (no es necesario el cargador de módulos), espacio en disco (no se necesitan las utilidades del módulo) y complejidad del sistema (no es necesario incluir la carga de módulos como una característica en su distribución ). Estos puntos son bastante atractivos en algunos diseños integrados donde el hardware no es extensible.

Un par de posibles beneficios. El rendimiento es discutible. Evitaría algunos gastos generales de tiempo de ejecución asociados con un cargador dinámico, pero dudo que sea un gran problema a menos que dependa de un programador en tiempo real.

Si está aprovechando las páginas grandes en su sistema, entonces tal vez crear una imagen de kernel estática más grande signifique que hace un uso más eficiente de la caché del descriptor de página. Algunos sistemas "enjaularán" el kernel de modo que se empaquete firmemente en una localidad de memoria, lo que puede aliviar cierta cantidad de retraso debido a fallas de página menores y posiblemente importantes.

Puede que le convenga, desde el punto de vista arquitectónico, ofrecer One Big Image, argumentando que es más fácil mantener menos módulos independientes y que la pérdida de flexibilidad no es importante. Gran parte de este tipo de razonamiento se aventura en cuestiones de estilo y práctica.

4
mfe

A veces es necesario. Si compila algún controlador vital (por ejemplo, controlador SCSI) como módulo, su sistema no arrancará.

Otro gran candidato para no compilar como módulo es el tipo de sistema de archivos de la partición raíz. Si el kernel no comprende ext3 leer /lib/modules/ ¿cómo cargará módulos desde él?

Piénselo de esta manera: para usar módulos, el kernel necesita saber lo suficiente sobre su sistema para leer y cargar módulos del kernel. Usa eso y prueba y error :-)

2
nc3b

Compilo estáticamente todos los controladores para el hardware integrado dentro del kernel. La excepción sería el hardware que no es permanente (hardware conectado por USB, por ejemplo).

Como no es probable que mi configuración de hardware cambie pronto, no me preocupo por los módulos.

2
Stephane