Explicación sobre los distintos tipos de kernel

Explicación sobre los distintos tipos de kernel


hay bastante confusión con respecto a los distintos tipos de kernel que se pueden instalar en openSUSE, voy a dar algunas explicaciones al respecto. Lo primero es que, aunque tenga distintos nombres, el kernel es el mismo; al compilar el kernel se puede elegir qué opciones de las que ofrece se quieren seleccionar. En función de las que hayan seleccionado, los empaquetadores de la distribución le dan un nombre u otro, y así este nombre suele variar también entre distribuciones. También suelen dividirse los paquetes del kernel en otros más pequeños que incluyan, por ejemplo, los módulos más básicos, y por tanto imprescindibles, y otros con módulos opcionales. Además es útil saber qué significan algunos conceptos:
  • PAE o Extensión de Dirección Física (Physical Address Extension): es una característica de los procesadores de 32 bits que les permite acceder a más de 4GB de memoria (2 elevado a 32 bits = 4294967296 bits = 4GB). Está disponible desde los antiguos Pentium Pro. Los procesadores que soportan PAE también soportan el bit NX (No Execute/No Ejecutar), que puede ayudar a evitar ataques de desbordamiento de buffer (bastante frecuentes). Los procesadores de 64 bits pueden acceder a más de 4GB por diseño.
  • Desktop: escritorio, es decir, es un equipo de escritorio, el que todos tenemos en casa o los destinados a ofimática.
  • Tiempo real (Realtime): en informática se llama aplicación de tiempo real a aquella que debe cumplir con unos límites de tiempo impuestos para funcionar correctamente. En algunas de estas aplicaciones dichos límites son estrictos y no admiten retrasos (como en los controles de un avión) y en otras se permite que se supere el límite en algunas ocasiones. Al contrario de lo que suele decirse normalmente en el lenguaje normal, realtime no quiere decir "ahora mismo"; el pronóstico del tiempo para mañana, por ejemplo, es una aplicación de tiempo real con una cota de tiempo de 24 horas.
  • Latencia: es suma de los retrasos desde que se produce una entrada/acción hasta que se obtiene una salida/respuesta.
Si se usa YaST para instalar paquetes, en la pestaña Descripción aparece una explicación de qué es y para qué sirve un paquete al seleccionarlo. Ahí se puede ver que:

  • kernel-desktop - Kernel optimizado para equipos de escritorio
Este kernel está optimizado para equipos de escritorio. Está configurado para una latencia baja y tiene desactivadas muchas de las características que no son habituales en equipos de escritorio. Este kernel soporta hasta 64GB de memoria principal. Necesita la Extensión de Dirección Física (PAE), que se introdujo con el procesador Pentium Pro. PAE no solo significa más espacio de direcciones físicas sino también es importante por la característica "no ejecutar" que deshabilita la ejecución de código que está marcado como no ejecutable. Por tanto, el kernel PAE debería usarse en cualquier sistema que lo soporte, independientmente de la cantidad de memoria.
  • kernel-vanilla - El kernel estándar, sin ninguno de los parches de SUSE.
  • kernel-pae - Kernel con PAE habilitado
Este kernel soporta hasta 64GB de memoria principal. Necesita la Extensión de Dirección Física (PAE), que se introdujo con el procesador Pentium Pro. PAE no solo significa más espacio de direcciones físicas sino también es importante por la característica "no ejecutar" que deshabilita la ejecución de código que está marcado como no ejecutable. Por tanto, el kernel PAE debería usarse en cualquier sistema que lo soporte, independientmente de la cantidad de memoria.
  • kernel-default - El kernel estándar
El kernel estándar para sistemas monoprocesaror o multiprocesador.
  • kernel-xen - El kernel Xen
Es el kernel que se usa con el sistema de paravirtualización Xen. Este kernel puede usarse tanto como domain0 ("xen0") o como un kernel si privilegios ("xenU").
  • kernel-trace - El kernel de Linux de Tiempo real
Este kernel está compilado para aplicaciones de tiempo real.
  • kernel-rt - El kernel de Linux para Tiempo-real
Este kernel es para aplicaciones de alto rendimiento/baja latencia.
En realidad no hay demasiadas diferencias entre unos y otros. Tampoco queda claro que las opciones elegidas para cada uno sean las más óptimas. Por ejemplo, el kernel-desktop está compilado usando el flag -O2 y kernel-default/PAE con -Os; -Os es el menor nivel de optimización del compilador gcc, mientras que -O3 es el de mayor optimización. Al aumentar el nivel de optimización suele aumentar el tamaño del ejecutable o librería que se obtiene. La pregunta que surge es ¿qué es mejor, un kernel pequeño que no aproveche todas las características del procesador pero ocupe pocas páginas de memoria, o un kernel optimizado para el procesador pero tan grande que haya que paginar con frecuencia? En las listas de distribución del kernel donde se habla de estos temas no lo tienen claro, aunque parece que hay algo de predilección por que sea pequeño.
En fin, en mi opinión da igual usar uno que otro porque ninguno es óptimo: todos están compilados con muchas más opciones de las que pueda necesitar un usuario normal para hacerlos más genéricos y que funcionen con casi cualquier configuración. Además, tienen activadas montones de opciones de depuración que solo son útiles si se quiere ayudar a desarrollar el kernel. Como ejemplo, al compilar el kernel por defecto creo recordar que se generan más de dos mil módulos; cuando compilo el kernel para mi sistema apenas supera los cuatrocientos. Hay un proyecto, KernelCheck, que tiene como objetivo hacer un programa que construya el kernel optimizado para la máquina donde se ejecute. No lo he probado aún, pero si funciona ahorraría bastante tiempo si se decide uno a compilar un kernel personalizado.

Fuente:http://www.forosuse.org/forosuse/showthread.php?t=23822