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


Respuestas:


7

Depende. Si tiene una pequeña cantidad de memoria, el uso de módulos puede mejorar el currículum ya que no se vuelven a cargar 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 estar compilado o como módulo), tardó mucho tiempo 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 /, controladores de disco duro, etc. en initrd en la instalación.


¿Le importaría leer esta respuesta nuevamente, con cuidado? Lo hubiera hecho, pero no sé qué querías decir en el lugar, por ejemplo ... en discos duros tradicionales .
tshepang

Me refería a los magnéticos (no tengo ninguna experiencia con SSD).
Maciej Piechotka

He tratado de hacer esto más legible. ¿Puedes comprobar si no lo arruiné?
tshepang

Gracias. Acabo de terminar la sesión de examen, así que no tuve tiempo de mirarlo.
Maciej Piechotka

7

Que yo sepa, no hay diferencia de velocidad.

Creo que obtendrá unos pocos KB de memoria del núcleo 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 potencial. Incluso en sistemas embebidos, 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 núcleo; eso 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 núcleo (no necesita el cargador de módulos), espacio en disco (no necesita las utilidades del módulo) y la complejidad del sistema (no es necesario incluir la carga del módulo como una característica en su distribución ) Estos puntos son bastante atractivos en algunos diseños integrados donde el hardware no es extensible.


Acceder a un símbolo en un módulo es un poco más lento (se trata de una indirección). Pero la flexibilidad adicional (puede cargar / descargar según sea necesario, no tiene que construir un kernel personalizado para el hardware exacto en uso, ...) vale la pena (a menos que esté construyendo para un entorno muy restringido que no nunca cambia).
vonbrand

4

Un par de beneficios potenciales. El rendimiento es discutible. Evitaría una sobrecarga de tiempo de ejecución asociada con un cargador dinámico, pero dudo que sea un gran problema a menos que dependa de un planificador en tiempo real.

Si está aprovechando páginas grandes en su sistema, entonces quizás crear una imagen de núcleo estática más grande significa que hace un uso más eficiente de la memoria descriptiva de la página. Algunos sistemas 'enjaularán' el kernel para que se empaque firmemente en una localidad de memoria, lo que puede aliviar cierta cantidad de retraso debido a fallas de página menores y posiblemente mayores.

Puede ser adecuado para usted, arquitectónicamente, entregar One Big Image, argumentando que es menos 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.


2

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 núcleo no entiende ext3leer, /lib/modules/¿cómo cargará los módulos?

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


Estoy pensando en alguna mejora en el rendimiento? ¿Hay alguna?
phunehehe

1
En el pasado, la gente ha hecho todo lo posible para producir el núcleo más pequeño posible con solo lo que se requiere . Hoy esto ha cambiado en gran medida. De hecho, cada vez que cargue un módulo por primera vez, sufrirá un pequeño impacto en el rendimiento. Eso no quiere decir que debe compilar todo en el núcleo :-) Vea esto: articleinput.com/e/a/title/…
nc3b

para el controlador o la funcionalidad no vital ¿hay algún beneficio? por ejemplo si solo quiero usar terminal y un montón de utilidades de red sin otra necesidad o funcionalidad. ¿hay algún beneficio si solo compilo todos los módulos y controladores necesarios dentro del kernel sin módulo cargable?
uray

3
Toro. Un sistema arrancará bien con un controlador SCSI como módulo en un initrd. Para eso están.
wzzrd

Sí ... siempre que el módulo esté en un initrd que el núcleo pueda entender ...
Dagelf

2

Compilé estáticamente cada controlador para hardware incorporado dentro del núcleo. La excepción sería el hardware que no es permanente (hardware conectado por USB, por ejemplo).

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.