Mucho antes de lo que yo había previsto, el 7 de diciembre Linus Torvalds sacó el Kernel Linux 3.18, el último del año 2014. Descargable, como siempre, desde Kernel.org.
El lanzamiento ha sido un poco precipitado debido a que Linus no quería que la ventana de merge del kernel 3.19 le coincidiera con las vacaciones navideñas. Por ello ha optado por sacarlo ya, tras sólo 7 release candidates, y a pesar que hay un bug persistente que provoca bloqueos en ciertos escenarios que aún no han sido capaces de encontrar. De todas formas, el bug parece estar también presente en las versiones 3.17 y 3.16, con lo que Linus no lo considera una regresión de la versión 3.18 per sé (vamos, que no era un motivo para retrasar la publicación ya que de todas formas el problema existe también en la actual rama estable 3.17.x).
Las novedades más destacadas de este kernel 3.18 tienen que ver con la red. Por una parte, ha habido mejoras importantes en el rendimiento de la red. Tambien se ha introducido la nueva llamada al sistema bpf() para el uso de Berkeley Packet Filter (BPF). Otra novedad importante es que finalmente se ha añadido OverlayFS, un sistema de ficheros de tipo "union" que venía proponiéndose desde hace varios años y que finalmente ha entrado en mainline en esta versión. Por supuesto, hay muchísimos más cambios, desde nuevos drivers, pasando por mejoras en los drivers existentes, hasta infinidad de bugfixes, pero para la lista completa lo mejor es que os remitáis a la correspondiente entrada de KernelNewbies cuando esté lista.
En cuanto a mi habitual seguimiento de compilaciones del kernel, los últimos de la rama 3.16.x no tienen nada nuevo que contar:
Compilando 3.16.3-amd64 desde 3.16.2-amd64 con -j4:
$ time fakeroot make-kpkg -j4 --initrd --revision=3.16.3+1 --append-to-version=-amd64 kernel_image kernel_headers
real 12m9.636s
user 27m38.920s
sys 1m53.572s
Compilando 3.16.5-amd64 desde 3.16.3-amd64 con -j4:
$ time fakeroot make-kpkg -j4 --initrd --revision=3.16.5+1 --append-to-version=-amd64 kernel_image kernel_headers
real 12m9.618s
user 27m49.440s
sys 1m54.684s
Compilando 3.16.6-amd64 desde 3.16.5-amd64 con -j4:
$ time fakeroot make-kpkg -j4 --initrd --revision=3.16.6+1 --append-to-version=-amd64 kernel_image kernel_headers
real 12m7.789s
user 27m51.196s
sys 1m55.916s
Sin embargo, en las compilaciones de las 3.17.x sí hay novedades importantes. Primero, respecto al espacio que ocupan (de lo que ya hablé en su momento). Y segundo, porque de la 3.17.2 en adelante reduje significativamente el número de opciones que empleo en mis kernels, dando como resultado compilaciones en el entorno de los 10 minutos en vez de los 12 minutos previos:
Compilando 3.17.1-amd64 desde 3.16.6-amd64 con -j4:
$ time fakeroot make-kpkg -j4 --initrd --revision=3.17.1+1 --append-to-version=-amd64 kernel_image kernel_headers
real 11m47.764s
user 28m2.628s
sys 1m53.596s
Compilando 3.17.2-amd64 desde 3.17.1-amd64 con -j4:
$ time fakeroot make-kpkg -j4 --initrd --revision=3.17.2+1 --append-to-version=-amd64 kernel_image kernel_headers
real 10m2.258s
user 24m35.456s
sys 1m37.720s
Compilando 3.17.3-amd64 desde 3.17.2-amd64 con -j4:
$ time fakeroot make-kpkg -j4 --initrd --revision=3.17.3+1 --append-to-version=-amd64 kernel_image kernel_headers
real 10m1.915s
user 24m38.752s
sys 1m34.424s
Compilando 3.17.4-amd64 desde 3.17.3-amd64 con -j4:
$ time fakeroot make-kpkg -j4 --initrd --revision=3.17.4+1 --append-to-version=-amd64 kernel_image kernel_headers
real 9m59.383s
user 24m38.724s
sys 1m34.212s
Compilando 3.17.5-amd64 desde 3.17.4-amd64 con -j4:
$ time fakeroot make-kpkg -j4 --initrd --revision=3.17.5+1 --append-to-version=-amd64 kernel_image kernel_headers
real 10m15.249s
user 24m39.300s
sys 1m34.580s
Compilando 3.17.6-amd64 desde 3.17.4-amd64 con -j4:
$ time fakeroot make-kpkg -j4 --initrd --revision=3.17.6+1 --append-to-version=-amd64 kernel_image kernel_headers
real 10m29.529s
user 24m34.496s
sys 1m34.212s
Para ello estuve repasando secciones y secciones del make menuconfig
,
revisando documentación de mi hardware, módulos cargados, líneas de log
del kernel, etc. Un trabajo arduo pero a cambio de una mejora
significativa, aunque estoy convencido que todavía puedo bajar hasta el
entorno de los 8 minutos. Aunque eso sí, cada vez hay que tener más
cuidado de no quitar algo de más. La tarea de revisión final de
opciones quedará de momento para el TODO de 2015.
Esta vez el ritmo de publicaciones de versiones estables en la rama 3.17.x ha sido mayor que en la rama 3.16.x, con 51 minor versions en vez de 3 entre versión mayor y mayor. Mi previsión es saltar a la 3.18.1 en cuanto se publique, puesto que como comentaba la ya famosa regresión está también presente en los kernels 3.17.x, y la corrección saldrá —si sale— para la 3.18.x, cuando la rama 3.17 esté seguramente ya descontinuada.
:wq
-
No cuento la 3.17.5, que tuvo que ser corregida inmediatamente por la 3.17.6. ↩