El núcleo de Linux es pesado y enorme, dice Linus Torvalds
por : Juan Ranchal: 23 Sep 2009, 9:30
LinuxCon 2009. El creador del kernel Linux, Linus Torvalds, a preguntas de un ingeniero de Novell, reconoció que el kernel Linux “estaba inflado y era enorme”. Una situación que puede parecer lógica ante los millones de líneas agregadas al código fuente en los últimos años, y que en todo caso sería un ejercicio de autocrítica ya que Torvalds es responsable del kernel, pero que ha iniciado un amplio debate en Internet.
Linus participaba en una mesa de trabajo en el evento LinuxCon cuando un ingeniero de Novell haciéndose eco de un un estudio interno de Intel que analiza el lanzamientos del kernel determinando que había caído un 12 por ciento en los últimos diez años, preguntó si las características del kernel se estaban incorporando demasiado rápido sin esperar a que el Kernel se optimizara/estabilizara antes y que si esto era un problema.
Torvalds reconoció que “sí, que era un problema y que el kernel estaba inflado y era ya enorme”, admitiendo además que no había planes para solucionarlo y que le gustaría contar “con un kernel pequeño e hipereficiente como había imaginado hace quince años”. Sin embargo explicó que aunque esta situación “era inaceptable, al mismo tiempo era inevitable”, seguramente por la misma arquitectura del kernel y especilmente por la inmensidad de código añadido en los últimos años.
Líneas de código fuente que se han multiplicado por 10 en los últimos diez años o ficheros que se han multiplicado por 5 en el mismo periodo, además de añadir todo tipo de controladores y características añadidas para soportar nuevo hardware y tecnologías. Por otro lado una cosa es el kernel y otra muy distinta las distribuciones basadas en él, que precisamente apoyadas por la mejora del hardware son cada vez más rápidas y eficientes, que es lo que verdaderamente interesa a la inmensa mayoría de usuarios finales.
No sé, me parece un debate estéril. ¿Qué te parece a tí? ¿Autocrítica o flame de Torvalds? ¿Necesidad de mejora? ¿Cambio futuro a conceptos como el micro-kernel o ya es tarde?
vINQulos
The Register


Comentarios
Eso ya lo sabía cualquiera que haya intentado compilar el nucleo. De todas formas un linusero experton puede compilar el núcleo y adaptarlo a su máquina, quitando las pamplinas que no le hacen falta.
Faltan que griten los anti-microsoft algo como: En windows no se puede !!! :)
Ahora saldrán los evangelizadores en The Inquirer.es a desdecir Linus T. Dentro de un rato regreso; este hilo estará bueno… jojo.
Es inevitable que si se quiere añadir la máxima compatiblidad con el hardware el kernel vaya creciendo indefinidamente pero lo bueno de linux es que optimizando a mano el kernel puede ajustarse de tal forma a nuestra máquina que se obtenga el máximo rendimiento al tiempo que se reduce su tamaño.
Hay multitud de páginas donde explican paso a paso qué podemos eliminar, qué controladores compilar como módulos y qué debemos agregar de acuerdo a nuestra máquina.
@Quantico
Es cierto que cuantas más cosas, es inevitable que el núcleo crezca. Quizás lo que pasa es que a Linus le gustaría tener más tiempo para reestructurar ciertas cosas.
Pero lo de recompilar el kernel me parece una estupidez (a no ser claro, que sea un sistema empotrado). Si linux quiere progresar hay que dejar de lado esa idea de recompilar y recompilar, solamente para ganar un 10% o 20% más de rendimiento. Es absurdo.
¿ Ahora se da cuenta ?. Es famosa su discusión con Tanembaum en los inicios de Linux al respecto del kernel monolítico y los microkernels.
Esto que dice ahora Linus ya lo dijo en su momento Tanembaum (el creador de Minix, del que Linux fue un clon descarado). Lo divertido es que en ese momento Linus lo defendió con uñas y dientes.
@Marc
Más que discusión entre microkernels y kernel monolítico, yo creo que el tema está en continuar con el mismo kernel, pero teniendo tiempo para reestructurar los sistemas y planificar el crecimiento, en lugar de ir a lo alocado, que es lo que se ha hecho en los últimos años.
El núcleo se ha multiplicado por 10 en los últimos años, con código redundante y obsoleto pululando por ahí.
Si tienes que volver a empezar, en lugar de intentar estructurarlo bien, con lo que vas a tardar años en volver a estabilizarlo para acabar encontrándote con el mismo problema al cabo de otros 10 años, yo simplemente haría las cosas bien. Es decir un microkernel o un nanokernel.
La idea del microkernel es bueno, pero mirad lo que le está pasando a GNU con Hurd…
En realidad, es bueno separar ciertos módulos, como por ejemplo el soporte de hardware. Si algo me parece una maravilla en linux es poder usar el kernel tanto en hardware de hace 15 años como en el actual.
Tal vez modular los controladores sea buena idea (el 90% del código añadido en los últimos años es para soporte de harware) De modo que kernels genéricos lo soporten todo, pero pudiendo desactivar aquello que no uses al montarte un kernel a mano sin necesidad de recompilar el sistema entero.
No obstante, el kernel de Linux sigue siendo el kernel monolítico más ligero.
Todo sistema operativo, cuanto mas complejo y avanzado se vuelve, es normal que tenga que rendir menos. No se puede pedir que un linux con una complejidad de 10 (por ejemplo) rinda igual que un linux con una complejidad de 100000 , con todas las mejoras en usabilidad y compatibilidad que ello supone.
Sigue siendo mejor que otras alternativas, que cada nueva versión pierden un rendimiento muchisimo mayor que ese 12 % que el nucleo de linux ha perdido en 10 versiones. Además, el hardware avanza.
Otra posibilidad seria ir eliminando del kernel controladores y tecnologías relativas a hardware de hace mas de 10 años por ejemplo…. es codigo totalmente inutil hoy en dia y el hardware que aún funcione de entonces tiene de sobra cone l linux que hay hasta ahora.
Yo creo que la solución pasaría por crear el famoso Micro-Kernel de nuevo no se, como una version nueva por ejemplo y a partir de ese momento, filtrar de alguna forma las lineas que se le pudieran añadiendo para, de esta manera no cometer el mismo error en un futuro ya que, si se creara ese Micro-Kernel y no se hiciera así, en poco tiempo estariamos en las mismas.
Windows tiene un microkernel
@Pepe
Busca antes de hablar. Windows tiene núcleo híbrido y Mac lo mismo.
http://es.wikipedia.org/wiki/Windows_XP
http://es.wikipedia.org/wiki/N%C3%BAcleo_h%C3%ADbrido
@Pepe
Windows utiliza un kernel hibrido (una mezcla rara de MicroKernel con KernelMonolitico)
Linux es un Kernel Monolitico con las cosas esas de los modulos.
Yo sigo pensando que lo mejor es un Kernel Hibrido, que algunas cosas esten si o si en el kernel (cosas basicas) y que el resto vaya aparte. Nada de meter 200.000.000 Drivers integrados en el kernel que te tragas si o si.
UN gráfico que explica claramente la diferencia entre cada tipo de kernel:
http://upload.wikimedia.org/wikipedia/commons/d/d0/OS-structure2.svg
@Marc
El microkernel no te soluciona nada. Como ha dicho alguien antes, mira los de Hurd el lío que llevan con el microkernel que aún no han conseguido realizar algo “decente”. Es simplemente una idea. Encima de éso, tienes que volver a “meter” todo el código que tienes ahora.
Yo creo que los tiros van más por una buena organización del código y los subsistemas, que por una “buena idea” con la que luego al final vas a tener los mismos problemas: un montón de código que tienes que ordenar.
El PROBLEMA no es que el kernel vaya un 10% más lento que hace 10 años (pongamos), porque las máquinas son ahora mucho más rápidas. El problema es MANTENER todo ése código y hacerlo con un esfuerzo razonable. Y ahí es donde van perdidos.
@Nom, ¿ que sea incomparablemente más estable no te soluciona nada ?. Cierto que encima le metes el mismo código y por tanto los drivers de la gráfica (por poner un ejemplo) pueden fallar igual que fallan ahora. Pero el código de ese driver ya no se ejecuta en el espacio del núcleo, por lo que no te va a tirar abajo todo el sistema.
NOTA: De la misma forma, admito que el micro-kernel es más lento. Pero creo que sacrificar rendimiento por estabilidad es un buen trato.
@Pepe, ¿ Windows lleva un micro-kernel ?, ¿ desde cuando ?. No sé que llevará Windows Seven (pero me temo que no ha cambiado mucho en este aspecto desde Vista), pero todos los Windows hasta ahora llevan kernels monolíticos (exceptuando Windows NT que ni siquiera lo programó Microsoft). Cualquier fallo en un driver, en todos los Windows (exceptuando NT) te tira abajo todo el Sistema (¿ o es que acaso todos los que estamos aquí no hemos sufrido periódicamente la dichosa “pantalla azul de la muerte” ?).
@Marc
Vamos a ver, el microkernel (en teoría) es más estable, y más lento. Pero es que además, quitado el hecho del Mac OS X, también es complicado hacer que funcione.
Y aparte de éso, el trabajo de organizar las cosas y que los demás subsistemas no tengan porquería lo sigues teniendo igual.
Es decir, sí, que lo pasen a microkernel, y luego qué? el trabajo de reorganizarlo todo, sigue estando ahí. El problema grande es que hay un montón de código que mantener. Se reduciría mucho con un microkernel? no lo creo.
Para mí tiene que haber módulos y se tienen que ir cargando así como se necesitan, no estar todo enlazado de forma estática en el kernel. Pero de ahí, a usar un microkernel…
[...] El núcleo de Linux es pesado y enorme, dice Linus Torvalds | The Inquirer ES http://www.theinquirer.es/2009/09/23/el-nucleo-de-linux-es-pesado-y-enorme-dice-linus-torvalds.html – view page – cached LinuxCon 2009. El creador del kernel Linux, Linus Torvalds, a preguntas de un ingeniero de Novell, reconoció que el kernel Linux estaba inflado y era enorme. — From the page [...]
@Nom, que sea complicado no debería ser una razón para desestimarlo. Es irrelevante, estamos hablando de software libre, en el que decenas de miles de personas van a aportar su trabajo si es necesario.
Deberíamos centrarnos únicamente en si es mejor o no (y yo no tengo dudas, y en una discusión entre Andrew Tanembaum y Linus Torwalds, tengo muy claro quien me merece mucha más confianza).
Modularizar el código no sirve de mucho a nivel de estabilidad, si falla cualquier apartado (driver, sistema de archivos, etc. ….) se sigue cayendo todo el sistema.
Al trabajo de limpieza y estructuración que comentas, yo le añadiría sin dudar el de implementar un microkernel que lo lleve a un nivel muy superior de robustez.
La discursion de Linus es una continuacion de la conferencia de IBM.
Linux se esta autodestruyendo en su obsesion por llegar al escritorio.
Un kernel para servidores o dispositivos concretos es simple, estable y muy eficiente. Pero un kernel para escritorio que soporte todo el hardware para varias arquitecturas es un monstruo con pies de barro.
Hay que replantearse la estrategia en escritorio para no destrozar algo que funciona.
vaya que discusión mas acalorada, y sana…
el modelo de Hurd parece una opción, pero no lo és a estas alturas del kernel, Si tiene soporte para petaveces de cosas que no usamos, pero esa es su naturaleza (de Linux), si quieren un Kernel optimo y ligth toca compilarlo…
si el kernel no fuera tan optimo, no estaría siendo usado en aplicaciones críticas.
No tengo queja del kernel, y aplaudo su evolución.
Yo sin saber mucho de este tema (solo sé lo que leo y entiendo intuitivamente) no veo ningún problema en todo este rollo.
Por un lado está Linus que es el que “corta gran parte del bacalao” porque es el que mantiene el núcleo. OK, pero se nos olvida que esto es código libre (en este caso también gratuito) y cualquiera puede pillar el código y hacer con él lo que quiera. Si ahora Linus dice que transformará Linux a un microkernel, el kernel monolítico seguirá estando ahí para quien lo quiera desarrollar y mantener.
De hecho, lo digo ya está sucediendo en la actualidad. ¿O es que los responsables de las distribuciones no cogen el núcleo y lo modifican a discreción? ¿Es que no hay empresas como Palm que cogen ese núcleo y lo modifican para convertirlo en SO de móviles? ¿Os creéis que la NASA no borra toda la basura vieja para meter Linux en sus ordenadores, consiguiendo así un kernel ligero y delgado? Y a saber si no habrá alguna empresa loca (o grupo de individuos) por ahí que tenga un Linux-microkernel.
No sé, todas las ideas que habéis puesto arriba son factibles desde el punto de vista técnico, económico y humano. Todo lo que habéis dicho se puede hacer sin que haya conflicto alguno.
Put0 filtr0 de m1erda.
Después de ver todo lo que habéis escrito, entiendo que los netpecés, tienen todos un hardware muy parecido, y seguramente se pueda sacar un Kernel ligero para todos, lo cual podría dar un gran impulso a Linux.
Ese es el objetivo de Moblin, un Linux altamente optimizado para Atom.
Ya se ha dicho por activa y por pasiva que imitar a windows sería un suicidio para Linux. La fuerza de Linux siempre fué y será la de realizar tareas concretas. No la de soportar 200000 tipos distintos de impresoras, tarjetas de red e infinidad de dispositivos.
Algunos como buf4lo-kong en discusiones anteriores sobre este tema abogaban por la ventaja del kernel hibrido de windows sobre el “monolítico” de linux. Pero lo cierto es que yo llamaría monolítico al kernel de linux únicamente por razones históricas, ya que es cierto que queda aún código monolítico, pero practicamente todo ya es modular, para los que tengan linux, un simple “lsmod” les dará una idea de los modulos funcionando en su ordenador, y no son demasiados y no ocupan demasiado. Por lo que si alguien tiene la feliz idea de que el kernel carga los 200.000 drivers de impresora de los que se hablaba antes va bastante perdido. El kernel solo ocupa mucho en disco duro, y aun asi ocupa bastante menos que los GBs necesarios para instalar WVista por ej. Lo unico de lo que se queja torvalds es de que la situación se está desmadrando un poco, y hace falta reorganizar algunas cosas, no de que sea un mal diseño.
Me parece que hay mucha confusión en este tema, un núcleo no es monolítico o microkernel por el número de módulos que tenga y lo segmentizado que esté su código.
Tiene que ver con la forma en que se ejecuta ese código, en espacios independientes. Todo el núcleo de Linux se ejecuta en el mismo espacio de memoria (aunque esté en módulos independientes que se pueden cargar dinámicamente). Por eso un fallo en cualquier módulo hace caer todo el sistema.
Lo mismo ocurre en Windows (todos hemos visto la pantalla azul de la muerte en todos los Windows, por un fallo en el driver de la tarjeta gráfica, de la tarjeta de red, del sistema de archivos, …). Así que Windows de Microkernel nada de nada, y lo de híbrido está por ver hasta que punto (que a mi me da que más bien poco).
Esta separación del código en espacios independientes es la ventaja (por estabilidad) y la desventaja de los microkernels. Puesto que provoca que tengan un rendimiento bastante malo, dado que un espacio de memoria no puede acceder a los datos del otro, y por eso todos los datos que un módulo ha de leer de otro módulo en un segundo espacio han de pasarse mediante pipes, o mecanismos por el estilo, para hacer una copia de esos datos de un espacio al otro.
Problemas de sincronización es lo que tiene los microkernels.
Marc, windows lleva un kernel hibrido. Precisamente por la desventaja de rendimiento muchas partes de windows se cargan modularmente en el kernel mientras otras se cargan en espacios independientes.
Vista y Seven son un avance muy grande en este camino, por eso ahora las graficas se pueden caer y recuperar, el error famoso de las nvidia “nvlddmkm stopped working and has recovered” en XP seria un BSOD y reinicio, igual que con las ATI pero no me acuerdo cual es el modulo.
Linus pretende que Linux se aproxime a ese concepto porque el kernel monolitico se esta haciendo tan complejo que las interacciones entre elemento son dificiles de trazar.
Es posible @asd, la verdad es que no he utilizado mucho Vista, y no conozco demasiado de su funcionamiento interno. Gracias.
sólo decir que leí e una noticia que windows vista lleva separado el nucleo de la interfaz gráfica, ya que según M$ el 89% de los fallos eran provocados por drivers (supongo que se refería a los kernel panic!), asi que parte de la pérdida de rendimiento en vista es debido a eso.
-
busquen en google “tipos de kernel” y la primera página explica bien y de manera corta para quien quiera leer poco.
-
creo que linux debería ser lo más modular posible, aunque esto no es tan necesario, lean a “sombra2eternity”
-
PD: “Yo sin saber mucho de este tema (solo sé lo que leo y entiendo intuitivamente) ”
X2
Pero vamos a ver, aunque Linux sea monolítico, los controladores de dispositivos van en módulos aparte. Y estos módulos se cargan sólo si el ordenador tiene el correspondiente hardware. Y lo mismo pasa con muchos elementos, por ejemplo, si no usas algún sistemas de ficheros (ext3, reiser, etc) tampoco se carga. Y si no los usas, lo único que gastan los módulos es espacio de disco porque son simplemente ficheros.
El kernel de linux en sí (con lo controladores de dispositivos indispensables) ocupa muy poco, por ejemplo, la distribución ttylinux ocupa en total 8 MB.
Esto coincide con lo que decia en palabras un poco mas subjetivas un representante de IBM en la misma conferencia: que ponerse a competir contra windows como otro windows mas en el mercado era un “dead end”, y que linux como kernell para SOs de escritorio deberia centrarse mas en la fiabilidad; la rapidez; etc. Mejor dicho: en todo lo que lo diferencia de windows. Y me parece que ambos tienen razon!
Cada nueva actualización general de linux Kernel provoca una bajada de su rendimiento del 2 %, los nuevos desarrollos de Microsoft en tecnología de Kernel dejará obsoletas las discusiones de “arriba”
En realidad el rendimiento del kernel a aumentado en las ultimas releases. Lo que ocurre es que cuando recien sale, es mucho mas lento por la cantidad de pequeñas fugas de memoria, las cuales son parcheadas con el tiempo. Eso es algo obvio y esperable.
Por cierto, el kernel linux es monolitico pero modular. Algunos llaman a esto kernel híbrido,y otros reserban este término para el kernel de Windows NT. Lo cierto es que a groso modo ambos kernels son monolíticos.
Por supuesto que era inevitable que el kernel creciera debido a la arquitectura… pero como bien se dijo usuarios de linux expertos (que generalmente son los que arman distribuciones) son capaces de adaptarlo a su necesidad, y la de la comunidad repartiendo su trabajo como muchos lo hacen, por que de eso se trata el soft libre.
Hola, quería comentarte que yo estoy haciendo un proyecto que serviria para esto, aunque el proyecto que estoy haciendo yo serviría incluso aunque este problema no este sucediendo. Mi blog es http://jonidimo.blogspot.com
¿que opinan de la idea del proyecto? todavía no sé en que sitio promoveer esta idea, ya mande a algunas distribuciones, dijeron que estaba bueno pero que ellos no podian hacerlo. Por eso hice el blog y comento aca.
Publica un nuevo comentario