¿Cuál es el beneficio de compilar su propio kernel de Linux?


101

¿Qué beneficio podría ver compilando yo mismo un kernel de Linux? ¿Hay alguna eficiencia que pueda crear al personalizarla para su hardware?


La simple pregunta de cuál es el beneficio se vuelve vaga o se saca de contexto muy rápidamente. Sería mucho mejor preguntar What are the pros and cons of compiling your own kernel? Cons = no es fácil, muchas situaciones no tienen valor agregado. Pros = seguridad, rendimiento, si sabe lo que está haciendo, dispositivos NAS, por ejemplo, que usan Linux para hacer que algún hardware funcione y tenga capacidad gráfica y de red.
ron

Respuestas:


73

En mi opinión, el único beneficio que realmente obtienes de compilar tu propio kernel de Linux es:

Aprende a compilar su propio kernel de Linux.

No es algo que deba hacer para obtener más velocidad / memoria / xxx. Es algo valioso si esa es la etapa en la que te sientes en tu desarrollo. Si desea tener una comprensión más profunda de lo que se trata todo este tema de "código abierto", sobre cómo y cuáles son las diferentes partes del núcleo, entonces debe intentarlo. Si solo está buscando acelerar su tiempo de arranque en 3 segundos, entonces ... cuál es el punto ... vaya a comprar un SSD. Si tiene curiosidad, si desea aprender, compilar su propio núcleo es una gran idea y probablemente obtendrá mucho de él.

Dicho esto, hay algunas razones específicas por las cuales sería apropiado compilar su propio núcleo (como varias personas han señalado en las otras respuestas). En general, estos surgen de una necesidad específica que tiene para un resultado específico, por ejemplo:

  • Necesito que el sistema arranque / ejecute en hardware con recursos limitados
  • Necesito probar un parche y dar retroalimentación a los desarrolladores.
  • Necesito desactivar algo que está causando un conflicto.
  • Necesito desarrollar el kernel de Linux
  • Necesito habilitar el soporte para mi hardware no compatible
  • Necesito mejorar el rendimiento de x porque estoy alcanzando los límites actuales del sistema (y sé lo que estoy haciendo)

El problema radica en pensar que hay algún beneficio intrínseco para compilar su propio núcleo cuando todo ya funciona como debería, y no creo que lo haya. Aunque puede pasar innumerables horas deshabilitando cosas que no necesita y ajustando las cosas que son ajustables, el hecho es que el kernel de Linux ya está bastante bien ajustado (por su distribución) para la mayoría de las situaciones de usuario.


25
Yo diría que si desea construir su propio núcleo simplemente para la experiencia de aprendizaje, lo hace con una distribución de Linux basada en fuente como Gentoo o Linux From Scratch. La documentación de instalación de Gentoo stage 2 es una excelente guía para comprender lo que significa construir Linux desde el núcleo.
Sandy

De acuerdo ... esos dos proyectos están diseñados para este tipo de cosas.
Gabe.

Por supuesto, sabes que en realidad te contradices en tu respuesta. Si el único beneficio de compilar el kernel fuera aprender cómo hacerlo, entonces sería inútil: no tiene valor. Pero entonces algunas palabras más tarde que dicen que es una cosa valiosa ...
rozcietrzewiacz

@rozcietrzewiacz El conocimiento es de gran valor. Compilar un núcleo le ayuda a ampliar su conocimiento. Si no compra eso, entonces esto es esto: el conocimiento es poder, y la gente paga un buen dinero para obtener poder, y el dinero tiene valor en el mundo de hoy, así que por la propiedad transitiva ...: P
lunchmeat317

Estoy de acuerdo, vale la pena solo por el conocimiento adquirido.
1100110

35

La mayoría de los usuarios no necesitan compilar su propio núcleo, su distribución ha hecho este trabajo por ellos. Por lo general, las distribuciones incluirán un conjunto de parches para integrarse con ciertas partes de la forma en que funciona la distribución, backports de controladores de dispositivos y correcciones de versiones más nuevas pero inéditas del núcleo o características que son pioneras con sus usuarios.

Cuando compila su propio núcleo, tiene un par de opciones, puede compilar un núcleo oficial de Linus Torvalds, esto no incluirá ninguno de los parches o personalizaciones que agregó su distribución (que puede ser bueno o malo) o puede use su herramienta de reconstrucción de distribución para construir su propio núcleo.

Las razones por las que puede querer reconstruir su núcleo incluyen:

  • Parchear errores o agregar una característica específica a un sistema de producción, donde realmente no puede arriesgarse a actualizar todo el kernel para una o dos soluciones.
  • Para probar un controlador de dispositivo en particular o una nueva función
  • Para extender el núcleo, trabaje en él
  • probando algunos de los módulos o funciones "Alpha".

Muchos desarrolladores lo usan para crear también versiones personalizadas del kernel para sistemas embebidos o decodificadores donde necesitan controladores de dispositivos especiales, o quieren eliminar funcionalidades que no necesitan.


8
+1. Los niños en estos días, ni siquiera saben lo que significa 'hacer menuconfig' y nunca tuvieron que parchear el código de red de su kernel para evitar ser pwdies de script. Afortunadamente, esos días se han ido.
axel_c

2
deberías agregar bisectpara encontrar dónde se introdujo un error ...
xenoterracide

1
Es sorprendente cómo se vota este comentario cuando no tiene nada que ver con la pregunta del OP. "La mayoría de los usuarios no ..." vamos ahora. La pregunta de OP es muy clara acerca de querer conocer los beneficios; No es su opinión de lo que "la mayoría de los usuarios" hacen aquí y allá.
Eric

30

Compilar el núcleo usted mismo le permite incluir solo las partes relevantes para su computadora, lo que lo hace más pequeño y potencialmente más rápido, especialmente en el momento del arranque. Los núcleos genéricos deben incluir soporte para la mayor cantidad de hardware posible; en el momento del arranque, detectan qué hardware está conectado a su computadora y carga los módulos apropiados, pero lleva tiempo hacer todo eso y necesitan cargar módulos dinámicos, en lugar de tener el código directamente en el núcleo. No hay ninguna razón para que su núcleo admita 400 CPU diferentes cuando solo hay una en su computadora, o para admitir ratones bluetooth si no tiene una, todo es espacio desperdiciado que puede liberar


15
Estoy de acuerdo con la mayoría de sus respuestas, pero me gustaría conocer algunos datos concretos sobre "considerablemente más rápido". No me gustaría dar a un nuevo usuario la impresión de que su escritorio se ejecutará generalmente más rápido con un kernel hecho a mano (desde mi experiencia con Gentoo, esto simplemente no es cierto). ¿Puedes cuantificar las ganancias en la velocidad de arranque?
Sandy

2
Esta respuesta era verdadera hace 15 años, pero no es realmente relevante en estos días. La mayoría de los controladores vienen en módulos de todos modos, por lo que solo ocupan espacio en el disco, no en la memoria. (¿O algunas distribuciones todavía vienen sin initrd? Sin un initrd, el núcleo necesita incluir todos los controladores que pueda necesitar para arrancar). En cuanto al tiempo de arranque, los pocos controladores que pasan más de un milisegundo tratando de detectar hardware inexistente pueden deshabilitarse con una opción de arranque del kernel.
Gilles

1
@Michael si es una suposición no verificada, creo que reemplazar "considerablemente más rápido" por "potencialmente más rápido" en su respuesta podría ser una buena idea ... solo para asegurarse de que no se confundan n00bs. :-)
Sandy

3
@Sandy De acuerdo, ya que parece que soy uno de esos n00bs :). Corregido
Michael Mrozek

2
Creo que "considerablemente" más rápido en realidad se justifica con la advertencia de que estamos hablando de tiempos de arranque. Los núcleos de distribución de acciones tardan fácilmente entre 5 y 10 segundos más en arrancar que el que he eliminado para no buscar ningún hardware que no planeo usar. La velocidad del tiempo de ejecución es probablemente insignificante, en realidad no puedo medir eso de manera confiable.
Caleb

24

No puedo creer que la respuesta aceptada aquí comience diciendo "No es algo que debas hacer para obtener más velocidad / memoria / xxx lo que sea".

Esto es totalmente falso. Rutinariamente construyo mis Kernels para eliminar el código innecesario, así como incluir el código de mejora del rendimiento relacionado principalmente con el hardware. Por ejemplo, ejecuto un hardware más antiguo y puedo obtener algunas mejoras de rendimiento al habilitar controladores de kernel rara vez habilitados, como la compatibilidad con el conjunto de chips HPT36x en algunos MoBos más antiguos que tienen esto incorporado.

Otro ejemplo, BIG SMP bajo Slackware es el predeterminado y en un Dell 2800, por ejemplo, consumirá una huella considerable para ejecutar cosas como GFSD (no como un módulo de kernel) que, por cierto, también consume tics de CPU para algo I no necesito Del mismo modo, para NFSD y otros aspectos generales para complacer a todas las mentalidades, lo cual está bien si solo está tratando de tener un Linux en una caja y funcionando, pero si le importa "velocidad / memoria / xxx lo que sea", entonces estas cosas importan y funcionan .

Todas mis cajas de producción son Kernels personalizados. Si utilizo hardware común, como un hardware de la serie Dell (2800, 2850, 2900, etc.), es simple copiar el archivo .config del kernel en cada caja y compilar el kernel e instalarlo.


3
Creo que el punto principal de la respuesta aceptada es que para la mayoría del hardware, el rendimiento obtenido al compilar su propio núcleo no vale el tiempo requerido para aprender cómo hacerlo (y saber qué significan las opciones). Probablemente sea experiencial: sería genial encontrar algunos números sobre esto.
Andres Riofrio

bueno, entonces es falso no decir esto en la pregunta original y luego aceptar la respuesta que se alega.
Eric

2
Bueno, no es mi culpa mi respuesta fue aceptada. Y aunque sí, hay casos en los que compilar su núcleo lo ayudará a "obtener algo de rendimiento" o ponerse en marcha en una máquina de baja potencia, asumí que alguien que no tenía una pregunta específica estaba haciendo la pregunta original. necesitaba con anticipación, y tenía curiosidad en el sentido general de cuál era el beneficio de compilar un núcleo. Yo diría que solo las personas con requisitos específicos en mente se benefician de los ajustes del kernel. Dado que mi respuesta fue aceptada, la mejoraré para abordar los motivos más poderosos de los núcleos personalizados
gabe.

14

Aquí hay algunas situaciones en las que compilar su propio núcleo lo beneficiará:

  • Un núcleo con la carga del módulo deshabilitada es más seguro. Esto requerirá que seleccione los módulos que sabe que necesita y los incluya como parte del núcleo, en lugar de compilarlos como módulos.

  • Deshabilitar el soporte para / dev / kmem, o paralizarlo con la opción de compilador adecuada es algo bueno para la seguridad. Creo que la mayoría de las distribuciones hacen esto por defecto ahora.

  • Prefiero no usar initrd cuando sea posible. La personalización de su kernel al hardware desde el que arranca elimina el initrd.

  • A veces, una versión posterior del kernel tendrá las características que necesita, pero esto es muy raro hoy en día. Recuerdo que cuando comencé a usar Debian, estaba usando kernel 2.4, pero necesitaba un kernel 2.6 para el soporte de udev.

  • Deshabilitar los protocolos / opciones de red que no necesita puede acelerar su rendimiento TCP / IP.

  • Deshabilitar las opciones que no necesita disminuye la huella de memoria del núcleo, lo cual es importante en entornos con poca RAM. Cuando utiliza un sistema de RAM de 256 MB como enrutador, esto ayuda.

  • Encuentro todos los dispositivos "tty" en / dev molestos en los sistemas en los que generalmente solo inicio sesión a través de serie o ssh.


Todo cierto. Sin embargo, la eliminación de la carga del módulo puede causar problemas en el arranque: la mayoría, si no todas, las distribuciones actuales suponen que los módulos deberán cargarse. La última vez que apagué los módulos, se produjo una gran cantidad de mensajes de error durante el proceso de arranque de Red Hat.
Mei

7

Compilar su propio kernel le permite participar en el proceso de desarrollo del kernel, ya sea que se trate de cosas simples como el suministro de ID de dispositivo PCI / USB para un controlador existente que puede hacer que un dispositivo más nuevo funcione para usted, para involucrarse profundamente en la refriega del núcleo desarrollo de kernel.

También le permite probar los núcleos de desarrollo en su hardware y proporcionar comentarios si nota alguna regresión. Esto puede ser particularmente útil para usted y para otros si tiene una pieza de hardware poco común. Si espera un kernel de distribución, puede tomar algún tiempo para que las correcciones de sus informes de problemas se filtren en una nueva versión del kernel de distribución.

Personalmente, también me gusta compilar mis propios núcleos para incluir soporte solo para el hardware que tengo. Cuando ejecuta kernels de distribución y mira la salida de lsmod(8), ve muchos módulos cargados para hardware que no tiene. Esto puede contaminar la lista de módulos, / proc, / sys y sus registros, de modo que cuando esté buscando algo se pueda ocultar entre el ruido; Tampoco puede estar 100% seguro de que esos módulos no contribuyen a un problema que está tratando de diagnosticar.


6

Segundo la respuesta de gabe. (Mi comentario es demasiado largo, así que publico como respuesta).

A menos que tenga un propósito altamente especializado (por ejemplo, máquinas incrustadas, perfiles de seguridad estrictos), no veo ningún beneficio práctico para compilar su propio kernel que no sea ver cómo se hace. Al revisar metódicamente las opciones, ver cómo interactúan entre sí para construir el sistema es una excelente manera de comprender cómo funciona su sistema. Es sorprendente lo que descubres cuando intentas eliminar componentes que no parecen tener ningún propósito para las tareas que intentas realizar.

Sin embargo, ten en cuenta: por qué saltar por la madriguera del conejo es sin duda estimulante, ¡absorberá más noches y fines de semana de lo que creías posible!


3

En el trabajo, utilizamos núcleos enrollados a mano para aplicar parches fuera del árbol, como vserver y unionfs.

En casa, estoy compilando núcleos enrollados a mano para encontrar qué commit introdujo un error que estoy experimentando. Una vez que haya terminado eso, probablemente me quedaré con un kernel enrollado a mano hasta que el error se solucione en mi distribución (Debian), momento en el cual volvería a sus kernel nuevamente.


2

¡Este hilo es antiguo y todavía es válido hoy como lo fue cuando se hizo la pregunta!

La respuesta es: compila el kernel de Linux de su elección según sus necesidades y requisitos.

Muchos escenarios son válidos:

  1. Usted es un ingeniero y requiere que su compilación cumpla con los requisitos / demandas de rendimiento y seguridad de su sistema; recompila para cumplir y / o superar los criterios especificados.

  2. Usted es un usuario normal y tiene un sistema antiguo que desea mantener en funcionamiento todo el tiempo que pueda, recompila agregar / quitar componentes para mantener su sistema antiguo optimizado.

  3. Eres un usuario normal con el último hardware más rápido y tiene memoria / RAM más que suficiente. No es necesario volver a compilar, pero aún puede hacerlo si está interesado en aprender un poco más sobre su sistema.

  4. Solo desea ser como un usuario cotidiano de Microsoft y / o Mac, no vuelva a compilar y simplemente siga las actualizaciones de su distribución aguas arriba.

  5. Sigue llegando los escenarios :-)

A diferencia de los usuarios de Mac / Windows, Linux ofrece opciones. La opción de tomarlo con calma u optimizar el sistema según sus requisitos.


1

Para la mayoría de los usos, los núcleos genéricos son buenos para prácticamente cualquier hardware. Además, generalmente contienen parches específicos de distribución (ed), por lo que compilar su propio núcleo puede (podría) causar problemas.

Los reson para compilar su propio núcleo son:

  • Está utilizando una distribución basada en la fuente, por lo que no hay un núcleo 'genérico'
  • Usted es desarrollador de kernel y desarrolla kernel
  • Debe personalizar el kernel, por ejemplo, para dispositivos integrados con disco duro muy limitado
  • Algunos controladores no están compilados (caso muy raro)
  • Desea parchar el kernel Y sabes lo que estás haciendo
  • Desea aprender a compilar kernel

Si no estuviera usando la distribución basada en la fuente, no compilaría el núcleo en absoluto.


1

Otro caso, además de los muchos mencionados aquí para tener núcleos compilados personalizados, es configurar entornos de arranque de red especializados donde la carga de módulos no es factible y hay que pasar núcleos completamente funcionales a máquinas específicas para tareas específicas.


1

Me sorprende que nadie haya mencionado esta razón para compilar un kernel personalizado:

porque quieres usar un compilador C / c ++ diferente. GCC es bastante bueno para compilar el kernel de Linux. ¡Pero hay compiladores muy superiores por ahí! Las optimizaciones de GCC están un poco por detrás del compilador C / C ++ de Intel. Intel proporciona las bibliotecas de primitivas de rendimiento y la herramienta vtune, que son indispensables para producir un kernel de Linux de alto rendimiento. Solo puede llegar tan lejos con GCC y G ++. Prácticamente no importa lo que hagas, el resultado estará limitado por el compilador. Por lo tanto, utilizo el compilador Intel y las bibliotecas de rendimiento. Es un poco grande: descarga de 1.5GB, pero eso da una idea de lo que está contenido en un buen compilador.

El compilador C / C ++ de Intel está disponible de forma gratuita para uso no comercial. Pero es más fácil googlear la página de descarga del compilador Intel c ++ de licencia no comercial que buscar en el sitio web de Intel. No suelo usar GCC / G ++ para nada. Y no necesitas ser programador. Simplemente configura su entorno y cambia dos líneas en el archivo make para apuntar al compilador de Intel.

¡Entonces puedes obtener algo de velocidad seria!


-1

Si desea instalar Linux en un hardware muy específico, por ejemplo, más exótico que un DS , tendrá que compilar su propio núcleo.

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.