1 de junio de 2020

Las novedades de Linux 5.7

Ya se ha publicado Linux 5.7. Las novedades de esta versión son: Soporte de Presión Termal, que permite que el organizador de tareas tome mejores decisiones en presencia de cambios de frecuencia de CPU; soporte para contabilidad del organizador de frecuencia invariante, que logra que x86 funciona con más rendimiento con el gobernador cpufreq schedutil; una nueva y mejor implementación del sistema de archivos exFAT; soporte para una característica de x86 que permite detectar operaciones atómicas que abarcan varias líneas cache; soporte de Autentificación de Punteros de ARM en el código del kernel, que frena algunos problemas de seguridad; soporte para engendrar procesos con clone() dentro de un cgroup determinado; soporte de protección para escritura en userfaultfd(), que es equivalente (pero más rápido) que usar mprotect(2) y señales SIGSEGV; y un Módulo de Seguridad Linux basado en BPF que permite una auditoría de seguridad más dinámica. Además, hay muchas otras mejoras y pequeños parches. La lista completa de cambios, en inglés, se encuentra aquí.

  • El organizador de tareas incorpora el concepto de Presión Termal
Cuando una CPU se calienta en exceso, el gobernador termal procede a limitar su frecuencia máxima. Esta limitación reduce, sin embargo, la capacidad de computación de esa CPU. Si el organizador de tareas no está al tanto de esos cambios de frecuencia, tomará decisiones equivocadas, asumiendo que la CPU tiene más capacidad de computación de la que realmente tiene en ese momento.

Esta versión incorpora el concepto de Presión Termal, que logra que el organizador de tareas esté más al corriente de los cambios de frecuencia, y por tanto, que tome mejores decisiones cuando los sistemas están calentándose en exceso, lo cual mejora el rendimiento. Artículo  LWN recomendado: Telling the scheduler about thermal pressure

  • Contabilidad del organizador de frecuencia invariante en x86.
Supongamos que una CPU tiene dos frecuencias: 500 y 1000 MHz. Cuando ejecuta una tarea que normalmente consumiría 1/3 de la CPU a 1000 MHz, aparentaría consumir 2/3 si la CPU funcionase a 500 MHz, dando la falsa impresión de que la CPU está casi al máximo de su capacidad, a pesar de que puede ir más rápido. Sin una escala de frecuencia invariante, las tareas parecen más grandes sólo porque la CPU funciona con más lentitud. El gobernador de cpufreq schedutil -que utiliza información de utilización proporcionada por el organizador de procesos para tomar sus decisiones- toma decisiones equivocadas y tiene peor rendimiento.

Esta versión incorpora una implementación de contabilidad del organizador con frecuencia invariante en algunas CPUs x86. Esto hace que las estimaciones de capacidad sean más precisas y las tareas permanezcan en la misma CPU en presencia de cambios de voltaje y frecuencia. Las mejoras introducidas han dado motivo para que el driver intel_pstate utilice por defecto el gobernador schedutil. Artículo de LWN recomendado: Frequency-invariant utilization tracking for x86.

  • Nuevo sistema de archivos exFAT
Linux 5.4 añadió una implementación experimental del sistema de archivos exFAT. Este sistema de archivos ha sido eliminado; en su lugar, se ha decidido que una implementación alternativa creada por Samsung tenía mayor calidad, y ha sido añadida en esta versión.

  • Detección de bloqueos partidos
Un bloqueo partido sucede cuando una instrucción de CPU atómica opera sobre datos que abarcan más de una línea cache. Es mucho más lento que una operación atómica que opera en una sola línea cache, y además empeora el rendimiento en otros procesadores. Esta versión incorpora una característica de x86 que permite detectar bloqueos partidos. Utilizando la opción de arranque split_lock_detect, es posible advertir o incluso enviar la señal SIGBUS a las aplicaciones que hacen uso de bloqueos partidos. Artículo de LWN recomendado: Developers split over split-lock detection.

  • Soporte de Autentificación de Punteros de ARM en el Kernel
Linux 5.0 añadió soporte para una extensión de ARM 8.3 llamada Autentificación de Punteros, que utiliza un código de autentificación de puntero para determinar si los punteros de un programa han sido modificados inesperadamente. Esto previene muchos fallos de seguridad, pero este soporte estaba limitado a espacio de usuario. En esta versión se añade soporte para el kernel arm64, que debería ayudar a proteger el kernel contra ciertos tipos de ataques. Artículo de LWN recomendado: ARM pointer authentication.

  • Soporte de protección de escritura en userfaultfd()
Esta versión añade soporte de protección de escritura a userfaultfd(), una llamada al sistema añadida en Linux 4.3 para permitir que un proceso gestione los fallos de página en espacio de usuario. Esto significa que los intentos de escribir en áreas del espacio de direcciones especificados con userfaultfd() podrán ser gestionados por el espacio de usuario. Esto es equivalente (pero más rápido) que usar mprotect(2) y un manejador de señal SIGSEGV. hugetblfs/shmem aun no están soportados. Para más detalles, vea la documentación. Artículo LWN recomendado: Write-protect for userfaultfd().

  • bpf-lsm: Un Módulo de Seguridad Linux basado en BPF
La actual infraestructura del kernel destinada a proporcionar telemetría relacionada con la seguridad (audit, perf, etc) está separada de la aplicación de reglas de acceso (LSMs). Mejorar la información proporcionada por audit requiere cambios en el kernel, su lenguage de políticas y componentes de espacio de usuario. Es más, construir una nueva política MAC basada en la nueva telemetría requiere cambios a varios LSMs y a sus respectivos lenguajes de políticas. Esta versión añade un nuevo LSM que permite que los programas BPF se vinculen con los ganchos LSM existentes, con lo cual es posible tener una política de auditoría y MAC unificado y adaptable dinámicamente mediantes programas BPF. Artículo LWN recomendado: KRSI — the other BPF security module.

  • clone(): permitir crear procesos dentro de cgroups
Esta versió añade soporte en clone() para engendrar procesos en un cgroup diferente que el de su padre, lo cual significa que los llamantes pueden limitar los procesos e hilos desde el momento en que son engendrados. Un gestor de servicios puede engendrar directamente nuevos servicios en cgroups dedicados; la pequeña contabilidad que se pierde en el tiempo en que se tarda en mover el proceso al cgroup se elimina; las aplicaciones con hilos o incluso implementaciones de hilos pueden elegir crear un diseño de cgroups específico donde cada hilo es concebido directamente en un cgroup dedicado. Artículo LWN recomendado: Cloning into a control group.

  • Mejora de funcionamiento de perf con cgroups
Antes, perf sólo podía hacer perfilados de tareas en un cgroup específico y no había manera de saber a qué cgroup pertenecía la muestra actual. En esta versión, perf incorpora información en cada muestra, lo cual hace imposible perfilar más de un cgroup y usar una clave para ordenar por cgroup en perf report.

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

3 comentarios: