Como quizás muchas de vuesas mercedes sepan, Intel ha mostrado al público un procesador con 80 'cores'. A pesar de que yo mismo he escrito en este blog que los fabricantes de CPUs van a ganar rendimiento a partir de ahora más que nada añadiendo 'cores' en vez de Ghz cmo hasta ahora, siempre he tenido y tengo muchas dudas sobre esa aproximación a la hora de conseguir rendimiento. La multiprogramación con multiples hilos de proceso compartiendo recursos cuya integridad se garantiza mediante diferentes sistemas de bloqueo es tan dificil que a día de hoy la mejor aproximación a la hora de crear un programa que utilize ese estilo de programación es que comparta lo menos posible y utilize los menos bloqueos posibles como principio fundamental de diseño, para que la complejidad del código sea manejable.
Eso me hace ser terriblemente escéptico con respecto a los procesadores multicore. Intel dice - en realidad no solo Intel, el mundo de las CPUs que acaba de despertarse con el multicore - que para aprovechar todos esos núcleos hará falta que los programadores se espabilen. Que se inventen maneras de sacar provecho a 80 núcleos. Ellos van a colaborar, dicen, mandando a sus ingenieros a evangelizar por el mundo y lanzando librerias y utilidades, y tal y tal. Y todo eso suena muy bonito, pero la última vez que Intel intentó hacer cambiar a alguien de "paradigma" fue a los programadores de compiladores, con su Itanium. Y ya ven como les fue y les va la cosa. En fin, ellos sabrán.
Lo que venía a contar aquí es una de las cosas que ocurrirán si de verdad acabamos utilizando un chisme de 80 cores. Hasta ahora, los ordenadores tenían que recurrir a la multitarea: se activa una interrupcion cada 1/1000 segundos que ejecuta el código del gestor de procesos que determina que proceso seguir ejecutando, si el mismo u otro. Añadiendo la virtualización del espacio de direcciones y demás se consigue que en un ordenador con un solo procesador se puedan ejecutar N procesos diferentes; dando así la apariencia de que el ordenador ejecuta varios procesos a la vez, cuando en realidad solo ejecuta uno.
¿Que ocurrirá cuando tengamos 80 cores, y aun más? Que ya no será necesario la multitarea tal y como la hemos conocido hasta ahora. Tendremos multitarea real: Cada proceso, hilo o lo que carajo sea se ejecutará en un procesador. Y no será necesario interrumpirlos. Lo cual implica, a largo plazo, por qué no, decir adios a los cambios de contexto y esas cosas (lo cual implica, por cierto, que los microkernels podrían ser factibles, no como hasta ahora, que han intentado hacer lo imposible en arquitecturas claramente diseñadas para kernels monolíticos). Incluso al "modo kernel/modo usuario": La diferenciación entre modo kernel y modo usuario surgió entre otras cosas para poder ejecutar varios procesos en una sola CPU, y que un proceso no metiera las narices ni monopolizara los recursos de los demás. Aunque incluso en un sistema de 80 procesadores, sería necesario un supervisor, para administrar la memoria, que sin ningún tipo de duda seguirá siendo homogénea: Un solo espacio de direcciones, muchos procesos rondando alrededor de ella.
Pero en el fondo todo lo dicho es una tontería, con un procesador de 80 cores no nos moveríamos a un modelo "proceso por procesador". ¿Como aprovecharíamos la potencia de cada core, si relegaramos cada procesador a un proceso, cuando el único modo posible de aprovechar esos 80 cores es precisamente repartir procesos o hilos por todos los cores lo más posible, como quien va sembrando semillas? Lo dicho, que francamente no tengo ni puñetera idea de como van a ser los ordenadores de dentro de cinco años y como se aprovechará su potencia. Y admiro profundamente a quienes dicen saber como se hará.
12 de febrero de 2007
Adios, falsa multitarea
10 de febrero de 2007
¿Qué tendrá Ubuntu Feisty?
Una de las entradas más exitosas de este blog, meneada y todo, fue Qué tendrá Ubuntu Edgy, una lista detallada de novedades recolectada a partir de las especificaciones de Ubuntu que aparece en tercer lugar en los resultados 'españolizados' de Google al buscar "ubuntu edgy", detrás tan solo de la página oficial. Buscando solamente páginas en español, el primer resultado.
Motivado únicamente por la obsesión de conseguir más y más y más y más visitas a cualquier precio -nunca por el deseo de informar, ayudar, colaborar con la comunidad; seamos sinceros-, aquí viene la edición del artículo para Feisty 7.04. Como en el anterior, la información está extraida de aquí; y ojo 1) Puede que alguna especificación de las mencionadas se 'caiga' y no sea implementada al final 2) Aquí solo hago recopilación del trabajo coordinado por Ubuntu. Hay un montón de novedades para ubuntu Feisty 7.04 que no está indicado aquí porque son las novedades incluidas en los propios paquetes de software: Gnome 2.18, kernel actualizado, openoffice actualizado, etc etc.
- 'Roaming', o 'itinerancia' entre diferentes redes. Es decir, relativo a la capacidad de conectarse a nuevas redes cuando te mueves. Ejemplo: Cuando vas en coche con el móvil y sales de la cobertura de una antena y entras en otra, tu móvil se conecta a la nueva red de manera absolutamente transparente. Pues bien, se trata del mismo principio aplicado a los ordenadores, especialmente a los portátiles con conexioens inalámbricas/físicas. El objetivo es hacer que la transición entre esas redes - autenticación DHCP, etc - se haga de la manera más sencilla posible en tu ordenador (que no lo hace de manera tan limpia como el móvil). Entre otros cambios, esto significa la incorporación de network-manager a Ubuntu
- X a prueba de bombas: Esta especificación no se sabe aun si se incluirá en Feisty o no. Al margen de eso, el objetivo de esta especificación es que, pase lo que pase, el servidor gráfico arranque. Aunque cambies de tarjeta gráfica o monitor, aunque el driver normal no funcione: Siempre deberías tener gráficos, como mínimo en vesa y a malas resoluciones. Robustez, en otras palabras.
- Aceleración gráfica: utilización de AIGLX allí donde sea posible, con el propósito de comenzar el camino hacia el escritorio gráfico moderno. Al principio estaba la especificación composite-by-default que incluía la incorporación de un gestor de ventanas tipo beryl, pero al parecer se ha postergado para la próxima versión. Aun así, aunque no traiga beryl por defecto el activar AIGXL es un paso más hacia un escritorio gráfico moderno, y será muy sencillo instalar beryl a mano sin tener que agitar la varita mágica para que todo funcione.
- Educación sobre drivers propietarios: Debido a la especificación anterior, Feisty, instalará drivers propietarios de nvidia/ati por defecto. Esta decisión ha sido muy discutida: Ubuntu lo ha hecho, según fuentes oficiales, con el propósito de hacer posible los escritorios acelerados, sin que el usuario se complique, pero no renuncia al largo plazo a los ideales del software libre. En cualquier caso, el propósito de esta especificación es avisar a los usuarios de que están utilizando software no libre para soportar su hardware, e informará a los usuarios de lo negativo de dicho software, e incluso incluirá enlaces a páginas con listas de hardware soportado por drivers libres.
- Autenticación en red en servidores con directorio activo. A día de hoy hacer que un equipo se autentifique en un servidor Windows es algo complicado, lo ual dificulta la adopción de Ubuntu en esos entornos.
- Reporte de fallos maś sencillo: Herramientas que recolecten información útil cuando el usuario reporte el bug para que sea más sencillo encontrar el fallo; y envio automático a los servidores de Ubuntu sin necesidad de otras mediaciones. Esto es imprecindible para que los desarrolladores no anden buscando a ciegas los fallos.
- Mejoras a la actualización automática entre distros: Ubuntu puede actualizar a través de red de una versión a otra nueva. Pero a veces hay problemas en esa actualización: en esta especificación se coordina el trabajo necesario para disminuir esas posibilidades de error.
- Portado de controladores: Supuestamente se trata de incluir actualizaciones de drivers de kernels nuevos en el kernel estable de Feisty. No huele nada bien por lo complicado que resultará, pero eso es lo que es.
- Instalación sencilla de códecs: Una característica única, ningún otro sistema operativo lo hace. Cuando se abra un video en un formato desconocido, el reproductor intentará detectar el formato y lanzará la herramienta de instalación para instalar los paquetes de códecs necesarios. Relacionada: gnome-app-install-codecs
- Activacion de 'universe' y 'multiverse' por defecto. Para hacer más sencilla la instalación de codecs y derivados. Y para hacer más sencilla la instalación de software que los usuarios quieren instalar de todas formas.
- Descarga automática por internet de controladores de impresoras: Alivia problemas de espacio en el CD, el soporte de nuevas impresoras se actualiza con el tiempo, y resuelve eventuales problemas de redistribución.
- Eliminación de un pequeño "destello" en el inicio. Mientras se arranca, al intenta configurar la fuente y el teclado de la consola virtual, uspash hace como un pequeño "destello", y esta especificación lo elimina
- Soporte de Bonjour, antes conocido Rendezvous. Es un sistema diseñado por Apple, incluido en Mac OS X por defecto y portado a Windows. Permite el descubrimiento y configuración automática de equipos, dispositivos y servicios dentro de redes IP sin la necesidad de introducir direcciones IP o DNS. Es una alternativa a uPNP de Microsoft. Apple lo ha mandado a la IETF para convertirlo en RFC. Más información en la Wikipedia.
- Pantalla de autenticación consistente: Hay una pantalla de autenticación para iniciar la sesión, otra para quitar el salvapantallas y otra para autenticarse como usuario cuando hay otra sesión de usuario activa y bloqueada. Esta especificación unifica esas pantallas
- Menu 'Slab': importación del menu que usa Novell en su distribución.
- Actualización de las herramientas básicas para feisty: Gcc 4.1.2, glibc 2.5 y binutils 2.17.0.50.6, con soporte de DT_GNU_HASH, gcj 4.1 o 4.2 dependiendo de la fecha de salida de 4.2, y cambio del tipo de datos "long double" en sparc y ppc de 64 bit a 128; actualización de automake 1.4 a automake 1.10.
- gnome-mount: Una nueva herramienta del proyecto Utopia. El objetivo del mismo es que gnome-vfs y compañía utilizen directamente gnome-mount, y éste se encargará de interactuar con mount, HAL y compañía, sirviendo tambien de abstracción para gestinar cosas como volúmenes encriptados.
- Soporte para Macs Intel
- Uso de libata para discos IDE: La capa libata utilizada para implementar SATA en linux ha sido extendida para soportar controladores PATA, y se han reescrito los controladores correspondientes a cada chip. Es una base mucho más firme que la de los viejos controladores IDE.
- Kdump: Soporte para volcado al disco del kernel en caso de cuelgue. Está basado en kexec: El kernel detecta un fallo, ejecuta un kernel nuevo, se inicia el sistema, detecta el cuelgue y guarda la memoria del anterior en un archivo.
- Importación de configuraciones: Herramienta para permitir importar cuentas de usuarios de otros sistemas junto con sus datos de manera sencilla.
- Campo 'Breaks:': Implementación del campo 'Break:' en la gestión de paquetes.
- Reemplazo de scripts init.d de inicio por scripts upstart. En la versión anterior de Ubuntu se había implementado upstart y una capa de compatibilidad con init.d; en esta versión se añaden scripts nativos upstart.
- Herramienta para facilitar la actualización de servidores, análoga a las existentes para escritorio.
- Mejorar el particionador del instalador, con vistas a una mejor integración y mayor usabilidad.
- Gráficos de entretenimiento en el instalador, para que la gente no se aburra esperando. No es muy útil, supongo, pero....
- Instalaciones total o parcialmente automatizadas con el nuevo instalador, que al parecer no funcionaban a pesar de estar basado en el instalador debian
- Soporte GCJ nativo. Por cada paquete java, habrá un equivalente -gcj compilado con gcj. GCJ es la versión GCC de java: compila código java a código máquina nativo.
- Python: Python 2.5 por defecto.
- Soporte de Braille, y otras mejoras para usuarios con discapacidades.
- Soporte de APT para SHA256, con la intención de ir dejando atrás MD5.
8 de febrero de 2007
Posibles soluciones a problemas
There are only two solutions to any operating system problem which are of interest: (1) the one which is easiest to program with, and (2) the one that performs the best. Either you go for programmability or you go for performance. There is /no/ middle ground for us in the kernel! - Ingo Molnar.
Un poco editado de aquí, pero es lo que quiere decir. O la más fácil de programar - la que es más fácil de mantener, la que es menos propensa a fallos por parte de los cientos de programadores que trabajan en drivers y que no son tan buenos programadores como los líderes -, o la que da más rendimiento, que puede ser menos sencilla pero merece la pena por el rendimiento. Resume muy bien el estilo de desarrollo que se ha seguido en el kernel durante todos estos años, alejado de la complejidad y del sobrediseño.
Para completa esta entrada, aquí está esta otra cita de Linus:
"Also, quite frankly, I tend to find Uli [mantenedor de la libc] over-designs things. The whole disease of "make things general" is a CS disease that some people take to extreme.
The good thing about generic code is not that it solves some generic problem. The good thing about generics is that they mean that you can _avoid_ solving other problems AND HAVE LESS CODE. But some people seem to think that "generic" means that you have to have tons of code to handle all the possible cases, and that *completely* misses the point.