Linux 3.18

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


  1. No cuento la 3.17.5, que tuvo que ser corregida inmediatamente por la 3.17.6. 

blogroll

social