28 de noviembre de 2013

¿Estamos en 1999? Probablemente no

Desde hace un tiempo se llevan viendo por ahí artículos que argumentan que el mercado bursátil del sector tecnológico está viviendo una nueva burbuja, como la que explotó en el 2000. El último periódico con renombre que se ha apuntado a la teoría es el New York Times. El motivo de las teorías es que hay varias empresas de Silicon Valley que están valoradas por las nubes, a pesar de que sólo tienen pérdidas y perspectivas dudosas de generar grandes beneficios a largo plazo. El ejemplo canónico, Twitter.

Si bien es cierto que muchas de esas empresas tienen pinta de estar muy sobrevaloradas, me cuesta mucho creer que estemos ante una burbuja tecnológica similar a la del 2000.

En primer lugar, el alza de la bolsa no es exclusivo al sector tecnológico. Durante el 2013 ha habido un alza generalizada en las bolsas, uno de los temas que no dejan de repetirse en los medios es que los valores de la bolsa están muy sobrevalorados. Un crash no sería, por tanto, un crash del sector tecnológico en particular, sino de la economía en general, como lo fue el del 2008-2009.

En segundo lugar, las huchas de las compañías estadounidenses están a rebosar, en récords históricos. Y de todas las compañías estadounidenses, las del sector tecnológico -Apple, Microsoft, Google, Cisco, Oracle, Qualcomm- dominan la lista de los 10 primeros. Que yo sepa, esto no fue así en la anterior burbuja. Si hubiera un nuevo crash tecnológico la cabeza del sector se mantendría en pie, y tiene dinero de sobra para aguantar una tormenta, comprar compañías interesantes en quiebra y reestructurar el sector por si misma.

En tercer lugar, los datos anteriores demuestran que el sector tecnológico es uno de los sectores clave de la economía estadounidense, ya no es un sector que sólo ofrece promesas vagas de beneficios a largo plazo fundamentadas en expectativas sacadas de películas de ciencia ficción, sino uno que ofrece resultados. No es un mero castillo en el aire, es un sector con gente que sabe hacer dinero.

En cuarto lugar, hoy en día Internet permite ganar dinero. Uno de los grandes cuellos de botella de Internet son las limitaciones para ejercer la oferta y la demanda. Es una de las razones por las que actualmente predominan los servicios gratuitos financiados con publicidad. Sin embargo, la publicidad ha demostrado su viabilidad. Se dijo de Facebook que no sería capaz de financiar sus gastos, pero lo cierto es que parece irles bastante bien. No hay razones para creer a estas alturas que un sistema de financiación que funciona bien para unas compañías de Internet no vaya a funcionar para otras. Y además de los anuncios, queda el comercio online mediante pago con tarjeta de crédito, paypal, bitcoin, app stores, etc; que ha aumentado significativamente en los últimos años. Sigue faltando flexibilidad para ejercer la oferta y la demanda, pero no estamos en los extremos de la burbuja anterior, donde tanto el comercio online como la financiación mediante anuncios estaban en pañales.

En resumen, que algunas compañías sobrevaloradas tendrán que reajustarse y a nadie le cabe duda de que hay especulación rampante (¿hay algún rincón del mundo donde no lo haya?), pero no creo que estemos al borde de una burbuja tecnológica que amenace con arrasar el sector.

21 de noviembre de 2013

La burocracia debianera

Como ya sabrán, Debian está planteándose cambiar de sistema de inicio. Las alternativas al sistema vigente son systemd, upstart u openrc; o una combinación de ambos. Como ha ocurrido con prácticamente cualquier cosa relacionada con systemd, se ha generado un gran debate.

Pero lo que más me interesa no es tanto la decisión, que tratándose de Debian puede ser cualquiera -incluyendo el seguir utilizando sysvinit para el resto de la eternidad-, sino cómo este asunto muestra las particularidades de sus procesos de toma de decisiones. Fui usuario de Debian durante cinco años, y alguna vez un comentario me pidió que explicara por qué no me gustaba Debian. Vaya por delante que Debian es una gran distro para lo que está orientado, simplemente no me gusta como distribución de escritorio, cada uno tiene sus gustos.

Cuando usaba Debian, hubo un retraso enorme en la actualización de los paquetes de Xfree86, que se quedaron atascados en la versión 4.2 durante una barbaridad de tiempo y obligó a usuarios normales a recurrir al repositorio experimental para poder tener escritorio gráfico en ordenadores recién comprados, además de incitar a un miembro de la "X Striking Force" a saltarse los protocolos de Debian y colar la versión 4.3 en unstable un año después de su publicación, cansado ya de esperar.

La razón por la que surgió ese atasco fue que Xfree86 no compilaba para todas las arquitecturas que soportaba Debian, y Debian tenía la política de que tenía que compilar para todas las arquitecturas. Era algo absurdo, se penalizaba al 99.9% de los usuarios de Debian, casi todos x86 (excepto algún ppc de Apple, que en aquel entonces estaba de moda) para satisfacer a arquitecturas exóticas como mips o s390. Era un caso claro de dictadura de las minorías y, por tanto, en parte una ruptura del punto 4 del contrato social. Posteriormente creo recordar que cambiaron el modo de gestionar esta clase de situaciones.

Esta anécdota viene a cuento porque me ha sorprendido encontrar de nuevo esta clase de dictadura de minorías presente en el debate sobre el sistema de inicio. Aunque no existe un veto explícito de las versiones de Debian con kernels alternativos (Debian GNU/kFreeBSD y Debian GNU/Hurd fundamentalmente), ha habido gente que ha defendido las necesidades de estos proyectos como vitales para Debian, y el hecho de que haya estado tan presente en la discusión hace evidente que existe cierto secuestro de voluntades.

Y es realmente absurdo: Debian GNU/kFreeBSD siempre va a ser un proyecto experimental y algo estrafalario que sólo van a usar cuatro gatos, y que pueda tener alguna capacidad de influencia en la evolución de Debian no hace más que evidenciar el conservadurismo y desarrollo glacial de Debian (aunque, por otra parte, es lo que requiere su base de usuarios actual).

De hecho, es desconsolador que Debian sea noticia por esta clase de debates, debates que el resto de las distribuciones tuvieron ya hace tiempo. Se puede afirmar incluso que Debian tiene limitada su capacidad para tomar una decisión, porque resto de las distribuciones ya han marcado camino, y la vía de los hechos presiona a Debian para que se conformen con seguir los caminos existentes. No en vano una de las opciones de reemplazo del sistema de inicio es upstart, una de sus distros derivadas.

En general, fue esta burocracia y conservadurismo lo que me hizo dejar de usarla. Hace 7 años que upstart fue incluido en Ubuntu, y dos y medio desde que Fedora empezó a utilizar systemd. Incluso Red Hat Enterprise Linux utiliza upstart en la versión 6, lanzada hace 3 años. Llega un punto en que usar Debian implica ponerse al margen del resto de universo Linux, al menos que uno decida usar testing, un repositorio sin identidad bien definida y que es sometido a una congelación durante un buen montón de meses previos al lanzamiento de una versión...naturalmente, la mayoría de gente prefiere usar Ubuntu.

9 de noviembre de 2013

Las novedades de Linux 3.12

Ya se ha anunciado la versión 3.12 de Linux. Esta versión incorpora soporte para desduplicación en Btrfs, cambio automático de GPU en portátiles con GPUs duales, mejora del rendimiento en GPUs AMD Radeon, mejor rendimiento multicore de RAID-5, mejor gestión de las situaciones en las que se acaba la memoria (OOM), mejora de la escalabilidad de la resolución de rutas de archivo en el VFS, mejoras al modo de multitarea sin temporizador, nodos de dispositivo separados para la configuración de modo gráfico y la renderización gráfica, mejora del rendimiento de los bloqueos en huéspedes virtualizados, mejoras en la escalabilidad del acceso recursivo a directorios en XFS, mejoras en la escalabilidad del IPC y mejoras en el bloqueo de la capa tty. También se han incluido drivers nuevos y muchas otras mejoras y pequeños cambios. La lista completa de cambios, en inglés, puede encontrarse aquí, como siempre.

· Soporte de desduplicación offline en Btrfs: El sistema de archivos Btrfs ha incorporado soporte para desduplicación de datos, es decir, encontrar porciones de datos duplicadas y eliminar las copias redundantes para dejar solamente una. En ciertos casos, como máquinas virtuales que contienen copias duplicadas de sistemas operativos enteros, o copias de seguridad que contienen datos redundantes, el ahorro de espacio puede ser considerable.

Este sistema de desduplicación es "offline", es decir, no se desduplican los datos en tiempo real, sino que lo invoca el administrador cuando lo desea para que escanee parte o la totalidad del sistema de archivos en busca de copias. La desduplicación en tiempo real será añadida en futuras versiones.

· Aumento notable de rendimiento en tarjetas gráficas AMD Radeon: La web Phoronix.com notó en unas comparativas que el rendimiento gráfico de las GPUs AMD Radeon había aumentado notoriamente en Linux 3.12. Sin embargo, no ha habido en esta versión ninguna gran mejora en los controladores que pueda justificar esa diferencia. Tras investigar, Phoronix halló que el responsable del aumento de rendimiento no estaba en el controlador de GPUs Radeon, sino en un cambio en el algoritmo del gobernado de cpufreq "ondemand". En apariencia, el gobernador "ondemand" oscilaba entre frecuencias excesivamente, y esta oscilación dañaba el rendimiento de las GPUs Radeon. El nuevo algoritmo elimina ese problema.

· Cambio automático de GPU en equipos con GPUs duales: El hardware de algunos portátiles, como los basados en la plataforma Nvidia Optimus, incluyen dos GPUs, una optimizada para el rendimiento y otra para el bajo consumo. Hasta ahora, había sido necesario utilizar algunos hacks para cambiar entre una GPU y otra. En esta versión, el driver gestiona el cambio automáticamente.

· Separación de los nodos de dispositivo para configuración de modo gráfico y para renderizado: La evolución del hardware (especialmente en ARM) muestra que el renderizado (via GPU) y la configuración de modo gráfico (vía controlador de pantalla) no están necesariamente ligados al mismo dispositivo gráfico. Esta versión incorpora soporta para separar en /dev los nodos de dispositivo para la configuración de modo gráfico y para el renderizado. El uso principal de esta separación es otorgar diferentes modos de acceso a los compositores gráficos (que requieren la API de configuración de modo gráfico) y el renderizado de clientes o GPGPU (que requieren la API de renderizado). Para más información, vea este post.

· Mejora de modo de multitarea sin temporizador: Linux 3.10 añadió soporte para la multitarea sin temporizador, es decir, la habilidad de ejecutar procesos sin necesidad de activar el temporizador que se usaba tradicionalmente para implementar la multitarea. Este soporte, sin embargo, tenía algunos problemas: Se podía desactivar el temporizador en todas las CPUs excepto una, que requería tener el temporizador activado continuamente. En esta versión se ha añadido soporte para que, mientras todas las CPUs del sistema no estén haciendo nada, esta CPU pueda desactivar también el temporizador. Artículo LWN recomendado: Is the whole system idle?

· Multitarea en RAID5: Esta versión añade la capacidad de esparcir el trabajo requerido para gestionar stripes del RAID5 de MD en múltiples CPUs, lo que permite aumentar la cantidad de ES/segundo en hardware veloz (SSD)

· Mejora del rendimiento de los bloqueos en huéspedes virtualizados: El sistema operativo que se ejecuta en cada huésped virtualizado también tiene sus propios bloqueos. Algunos bloqueos, como los "spinlocks", causan problemas cuando hay muchos huéspedes ejecutándose, ya que gastan CPU inútilmente mientras siga "girando" el bloqueo. Esta versión reemplaza los spinlocks paravirtualizados actuales como "ticket spinlocks", que tiene mejores características de rendimiento en huéspedes virtualizados. Informe recomendado: Prevent Guests from Spinning Around.

· Nuevo sistema de bloqueo "lockref", mejoras de bloqueo en el VFS: Se incorpora un nuevo sistema de bloqueo, "lockref". La estructura "lockref" es una combinación de bloqueo y contador de referencias que permite accesos optimizados al conteo de referencias. En concreto, garantiza que el contador de referencias se actualiza como si el spinlock estuviera tomado, pero al utilizar accesos atómicos que cubren tanto el contador de referencia como el spinlock, a menudo puede hacerse la actualización sin tener que tomar el spinlock. Esto permite evitar los peores casos de contención de spinlock en sistemas con muchos procesadores. En esta versión ya se utiliza este bloqueo para mejorar la escalabilidad de la resolución intensa de rutas de archivo en esos sistemas. Artículo de LWN recomendado: Introducing lockrefs

· Mejor gestión del estado OOM: El estado "Out-Of-Memory" es aquel en el que el sistema se queda sin memoria tanto RAM como de intercambio, y Linux intenta matar un proceso para liberar memoria. Esta versión incluye cambios importantes en la gestión de este estado, haciéndolo más fiable y enviando más errores de falta de memoria a los programas que requirieron la memoria, en lugar de recurrir a matar procesos con tanta frecuencia. Artículo de LWN recomendado: Reliable out-of-memory handling

· Mejora de la escalabilidad de recursión de directorios en XFS, soporte de espacios de nombre: XFS ha añadido soporte para un tipo de archivo directorio, con el propósito de que readdir pueda devolver a espacio de usuario el tipo de inodo al que apunta la estructura dirent sin tener que leer el inodo del disco. El rendimiento de la recursión en directorios mejora notablemente. Un benchmark consistente en hacer búsquedas paralelas de 50 millones de entradas de directorio en cientos de directorios mejoró de aproximadamente 500 getdents() por segundo y 250.000 búsquedas de inodo por segundo para determinar el tipo de inodo con aproximadamente 17.000 operaciones de ES por segundo; a 3.500 getdents() por segundo a 16.000 operaciones de ES por segundo, sin búsquedas de inodo.

Esta versión también incorpora soporte para espacios de nombre en XFS, y ha reincorporado el soporte de defragmentación en el nuevo formato de archivos con CRCs.


· Mejora del bloqueo en la capa tty: La capa tty ha sido mejorada y en el proceso gran parte del bloque ha sido convertido a bloqueos para-cada-tty, que mejoran el rendimiento en algunos casos.


· Mejoras en el bloqueo IPC: Esta versión incluye mejoras en la contención que se impone al bloqueo de IPC (kern_ipc_perm.lock). Estos cambios mejoran sobre todo las operaciones de memoria compartida, anteriormente ya se habían mejorado los semáforos en 3.10 y colas de mensajes en 3.11. Con estos cambios, un microbenchmark de memoria compartida que se centra en el uso de shmctl haciendo IPC_STAT con 4 hilos millones de veces, reduce el tiempo de ejecución un 50%. Una prueba similar con IPC_SET reduce el tiempo de ejecución de 3 minutos y 35 segundos a 27 segundos.

Y eso es todo. La lista completa de cambios en inglés, aquí.