29 de enero de 2018

Las novedades de Linux 4.15

Ya se ha anunciado la versión 4.15 de Linux. Además del código más actualizado para lidiar con Meltdown/Spectre, esta versión incluye soporte de modesetting y otras funciones avanzadas de display en el driver amdgpu; mejor gestión energética en sistemas con SATA Aggressive Link Power Management; un port para las CPUs RISC-V; soporte inicial para cifrado de memoria virtualizada en CPUs de AMD; soporte para la función de seguridad "User Mode Instruction Prevention" de Intel; soporte para el controlador de CPU en el sistema de control de recursos cgroupv2; una nueva bandera mmap(2) para permitir escritura directa a la memoria persistente que sea gestionada por sistemas de archivos; y muchos drivers nuevos y otras mejoras. La lista completa de cambios, en inglés, puede encontrarse aquí.



· Meltdown/Spectre 
Esta versión incorpora el último código para lidiar con Meltdown/Spectre. Para solucionar el problema Meltdown en CPUs Intel se incluye Page Table Isolation (puede ser desactivada con la opción del kernel pti=off). Para mitigar el problema Spectre v2, que afecta tanto a Intel como AMD, se requiere una versión de GCC que soporte la opción -mindirect-branch=thunk-extern, y puede desactivarse con la opción del kernel spectre_v2=off (si no tienes un compilador con esa funcionalidad, tendrás una mitigación mínima que sólo está en el código escrito en ensamblador, pero no en el código en C). La arquitectura PowerPC también está afectada por Meltdown en muchos modelos, y para prevenir ataques se incorpora la funcionalidad "RFI flush of L1-D cache". ARM también está afectada por Meltdown, pero las soluciones para ello se incluirán en la próxima versión. Tampoco se incluyen soluciones para Spectre v1.

Se ha añadido un directorio /sys/devices/system/cpu/vulnerabilities/ en el que se muestran las vulnerabilidades que afectan a la CPU y las mitigaciones que están siendo aplicadas.


· Modesetting y mucho mejor soporte de vídeo en el driver amdgpu


Esta versión incluye por fin el "display code" (132k LoC) que faltaban desde hace mucho tiempo en el driver amdgpu. Proporciona la funcionalidad "atomic modesetting" para hardware DCE8 (CIK), DCE10 (Tonga, Fiji), DCE11 (CZ, ST, Polaris), DCE12 (vega10), y DCN1 (RV); incluyendo HDMI y audio DP, DP MST, y muchas otras funciones avanzadas. Este soporte ha sido activado por defecto para Vega10 y Raven; el hardware anterior a vega10 aun no por dudas sobre la estabilidad, pero quien quiera probar puede activarlo manualmente con la opción del módulo amdgpu.dc=1


· Mejor gestión energética en sistemas con SATA Link Power Management


Durante muchos, muchos años, Linux ha tenido problemas con los sistemas que tienen controladores SATA AHCI con ALPM (Aggressive Link Power Management), es decir, equipos con Haswell, Broadwell o Skylake. Debido a la escasa documentación disponible, Linux no ha soportado correctamente este ALPM, y sin un soporte correcto de esa función, el sistema no puede entrar en los modos de ahorro de energía profundo, lo que se traduce en un acortamiento notorio de la vida de la batería. A mejorar esta situación no ha ayudado que una gestión incorrecta de ALPM se tradujese con frecuencia en pérdida de datos.

En esta versión, se ha incluído un parche que intenta implementar ALPM imitando el comportamiento por defecto de Windows, lo cual proporciona mejoras en el consumo de energía sin poner en riesgo los datos. En un portátil de prueba T440, el ahorro en estado de reposo es de entre 0.9 y 1.2W.


· Nueva arquitectura: RISC-V

Esta versión incorpora las principales partes del port a CPUs RISC-V. RISC-V es un con junto de instrucciones abierto que, a diferencia de las CPUs propietarias, puede usarse libremente para cualquier propósito, permitiendo a cualquier persona diseñar, manufacturar y vender chips y software RISC-V.

Este port está a medias. Aunque compila y arranca, los drivers aun no están disponibles en esta versión.


· Soporte para cifrado de memoria virtualizada en chips AMD


Linux 4.14 ya añadió soporte para AMD Secure Memory Encryption, una característica que permite que la memoria en RAM esté cifrada, y se descifre y cifre de nuevo automáticamente cuando la CPU lea o escriba a la memoria RAM, protegiendo de ese modo sus contenidos de ataques físicos al sistema.

Esta versión incorpora soporte inicial para Secure Encrypted Virtualization, que integra el cifrado de memoria en la arquitectura de virtualización AMD-V para así permitir máquinas virtuales cifradas; máquinas virtuales cuya memoria descifrada sólo puede ser accedida por la propia la máquina virtual, mientras que otras máquinas virtuales, o incluso el propio host, no pueden. Secure Encrypted Virtualization es especialmente útil en la nube, donde las máquinas virtuales no tienen por qué confiar en la empresa que la gestiona. Esta versión añade soporte para usar memoria cifrada en el huésped, los cambios necesarios para crear y gestionar huéspedes con memoria cifrada desde el anfitrión serán incluídos en las próximas versiones.


· Soporte para User-Mode Instruction Prevention

Esta versión incorpora soporte para una característica de CPUs intel llamada "User Mode Instruction Prevention". Cuando está activada, esta característica desactiva para el espacio de usuario ciertas instrucciones como SGDT, SLDT, SIDT, SMSW y STR, lo cual dificulta la creación de ciertos exploits. Por requerimientos de emuladores como WineHQ y DOSEMI2, las instrucciones SGDT, SIDT y SMSW serán emuladas en el modo protegido y virtual-8086 and protected modes (no habrá emulación para los procesos en modo "long").


· Mejor restricción del uso de CPU con el controlador de CPU para cgroupv2

La característica "control groups" con la jerarquía unificada, también llamado cgroup v2, fue implementada in 2.6.24 y declarada como estable en 4.5. Los controladores de recursos individuales tenían que ser portados a este nuevo diseño. La ausencia más llamativa era la del controlador de CPU, que proporciona a los cgroups la capacidad de limitar el uso de CPU para grupos de procesos. El problema es que para la inclusión del controlador de CPU se requería en primer lugar completar la funcionalidad de cgroupv2, específicamente el "thread mode", que fue incluido en 4.14, y que proporciona soporte para la gestión de recursos entre los hilos de un grupo. Tras todo ese trabajo llega a esta versión, por fin, el controlador de CPU para cgroupv2.


· Nueva bandera mmap(2) MAP_SYNC para permitir escritura directa a la memoria persistente que esté gestionada por sistemas de archivos.

Esta versión introduce las banderas MAP_SYNC y MAP_SHARED_VALIDATE a mmap(2). Para más detalles, ver este artículo de LWN: Two more approaches to persistent-memory writes.


Y eso es todo. Como siempre, pueden encontrar la lista completa de cambios, y en inglés, en esta página

2 comentarios:

  1. Como siempre, un placer leer las entradas de Diego.
    En especial me han resultado interesantes la entrada de la nueva arquitectura RISC-V, es posible que sea un paso para avanzar hacia el hardware libre.
    También me ha llamado la atención la posibilidad de cifrar la memoria, una manera de protegerte si deseas trabajar con la nube; A mi trabajar con la nube no me acaba de convencer, quizá soy demasiado desconfiado, por eso estas medidas son de agradecer.

    ResponderEliminar
  2. Yap...en mi caso, me ha dado problemas pero bien gordos.

    Sólo la curiosidad de la tarjeta Ethernet que tengo integrada en la placa base de este portátil que es la misma b44, aún a compilar, en vez de darme los parámetros de la PCI de la 'B44', sólo se queda con el módulo, pero no me deja aún cargándolo, ni para conectarlo.

    ¿Lo demás? No he visto ningún problema. Igual soy yo, el que, al hacer 'make oldconfig && make prepare && make-kpkg --revision"4.15.0-1" --initrd kernel-image kernel-headers', me haga luego los paquetes elementales, pero la eth0 brilla por su ausencia, cuando hace las de cosas más raras.

    Como dije en mi blog: https://www.sjlopezb.es/2018/01/kernel-4150.html

    El caso es, que al entrar al sistema, en /sys/class/net no aparece el eth0, sólo la de la WiFi y la del 'lo'., pero nada más.

    La gran curiosidad es esto:

    CONFIG_B44=m
    CONFIG_B44_PCI_AUTOSELECT=y
    CONFIG_B44_PCICORE_AUTOSELECT=y
    CONFIG_B44_PCI=y

    Pero en el 4.15.0/4.15.1:

    CONFIG_B44=m

    Sin los parámetros de arriba.

    No, si aún no me funciona ni igual, aún haciendo 'update-initramfs -u'.

    Saludos.

    ResponderEliminar