Versión do núcleo de Linux 5.6

Despois de dous meses de desenvolvemento, Linus Torvalds introducido liberación do núcleo Linux 5.6. Entre os cambios máis salientables: integración da interface WireGuard VPN, soporte para USB4, espazos de nomes para o tempo, a capacidade de crear controladores de conxestión TCP usando BPF, soporte inicial para MultiPath TCP, eliminando o núcleo do problema 2038, o mecanismo "bootconfig". , ZoneFS.

A nova versión inclúe 13702 correccións de 1810 desenvolvedores.
tamaño do parche: 40 MB (os cambios afectaron a 11577 ficheiros, engadíronse 610012 liñas de código,
294828 filas eliminadas). Preto do 45% de todos os presentados en 5.6
os cambios están relacionados cos controladores de dispositivos, aproximadamente o 15% dos cambios teñen
actitude cara á actualización de código específico para arquitecturas de hardware, 12%
asociado á pila de rede, un 4% con sistemas de ficheiros e un 3% con interno
subsistemas do núcleo.

O principal innovacións:

  • Subsistema de rede
    • Engadido implementación dunha interface VPN WireGuard, que se implementa en base a métodos de cifrado modernos (ChaCha20, Poly1305, Curve25519, BLAKE2s), é doado de usar, sen complicacións, demostrou a súa validez nunha serie de implementacións grandes e ofrece un rendemento moi elevado (3,9 veces máis rápido que OpenVPN en termos). de rendemento). WireGuard usa o concepto de enrutamento de claves de cifrado, que implica anexar unha clave privada a cada interface de rede e utilizala para vincular as claves públicas. As chaves públicas intercámbianse para establecer unha conexión dun xeito similar ao SSH. Requírense primitivas criptográficas para que WireGuard funcione foi trasladado dende a biblioteca cinco como parte da API Crypto estándar e incluído no núcleo 5.5.
    • Comezado integración de compoñentes necesarios para soportar MPTCP (MultiPath TCP), unha extensión do protocolo TCP para organizar o funcionamento dunha conexión TCP coa entrega de paquetes simultaneamente ao longo de varias rutas a través de diferentes interfaces de rede asociadas a diferentes enderezos IP. Para as aplicacións de rede, tal conexión agregada parece unha conexión TCP normal, e toda a lóxica de separación de fluxo realízaa MPTCP. O TCP multiruta pódese usar tanto para aumentar o rendemento como para aumentar a fiabilidade. Por exemplo, MPTCP pódese usar para organizar a transmisión de datos nun teléfono intelixente mediante conexións WiFi e 4G simultáneamente, ou para reducir custos conectando un servidor mediante varias ligazóns baratas en lugar dunha cara.
    • Engadido soporte para a disciplina de procesamento de filas de rede sch_ets (Selección de transmisión mellorada, IEEE 802.1Qaz), que proporciona a capacidade de distribuír ancho de banda entre diferentes clases de tráfico. Se a carga nunha determinada clase de tráfico está por debaixo do ancho de banda asignado, entón o ETS permite que outras clases de tráfico usen o ancho de banda dispoñible (non utilizado). Qdisc sch_ets está configurado como unha disciplina PRIO e usa clases de tráfico para definir límites de ancho de banda estritos e compartidos. ETS funciona como unha combinación de disciplinas PRIO и DRR — se hai clases de tráfico estrictamente limitadas, úsase PRIO, pero se non hai tráfico na cola, funciona como DRR.
    • Engadiuse un novo tipo de programas BPF BPF_PROG_TYPE_STRUCT_OPS, que lle permite implementar controladores de funcións do núcleo a través de BPF. Actualmente, esta característica xa se pode usar para implementar algoritmos de control de conxestión TCP en forma de programas BPF. Como exemplo proposto Programa BPF con implementación de algoritmos DCTCP.
    • Aceptado no núcleo cambios, ferramentas de tradución etilo con ioctl() para usar interface netlink. A nova interface facilita engadir extensións, mellora o manexo de erros, permite enviar notificacións cando cambia o estado, simplifica a interacción entre o núcleo e o espazo do usuario e reduce o número de listas con nome que deben sincronizarse.
    • Engadida a implementación do algoritmo de xestión de colas de rede FQ-PIE (Flow Queue PIE), destinado a reducir o impacto negativo do buffer de paquetes intermedios nos equipos de rede de borde (bufferbloat). FQ-PIE demostra unha alta eficiencia cando se usa en sistemas con módems por cable.
  • Subsistema de disco, E/S e sistemas de ficheiros
    • Para o sistema de ficheiros Btrfs engadido implementación asíncrona da operación DISCARD (marcando bloques liberados que xa non precisan almacenarse fisicamente). Inicialmente, as operacións DESCARTAR realizáronse de forma sincronizada, o que podería provocar unha degradación do rendemento debido a que as unidades esperaban a que se completasen os comandos correspondentes. A implementación asíncrona permítelle non esperar a que a unidade complete DISCARD e realizar esta operación en segundo plano.
    • En XFS realizadas Limpar o código que utilizaba antigos contadores de tempo de 32 bits (o tipo time_t substituíuse por time64_t), o que provocou o problema de 2038. Corrixíronse os erros e a corrupción da memoria que se producían nas plataformas de 32 bits. O código foi reelaborado para funcionar con atributos estendidos.
    • Para o sistema de ficheiros ext4 introducido Optimizacións de rendemento relacionadas co manexo do bloqueo do inodo durante as operacións de lectura e escritura. Rendemento de reescritura mellorado no modo de E/S directa. Para simplificar o diagnóstico de problemas, o primeiro e o último código de erro almacénanse no superbloque.
    • No sistema de ficheiros F2FS implementado capacidade de almacenar datos en forma comprimida. Para un ficheiro ou directorio individual, a compresión pódese activar mediante o comando "chattr +c file" ou "chattr +c dir; toque dir/ficheiro". Para comprimir toda a partición, pode usar a opción "-o compress_extension=ext" na utilidade de montaxe.
    • O núcleo inclúe un sistema de ficheiros ZoneFS, que simplifica o traballo de baixo nivel con dispositivos de almacenamento por zonas. Unidades zonificadas significan dispositivos en discos duros magnéticos ou SSD NVMe, o espazo de almacenamento no que se divide en zonas que conforman grupos de bloques ou sectores, nos que só se permite a adición secuencial de datos, actualizando todo o grupo de bloques. FS ZoneFS foi desenvolvido por Western Digital e asocia cada zona da unidade cun ficheiro separado que se pode usar para almacenar datos en modo bruto sen manipulación a nivel de sector e bloque, é dicir. Permite ás aplicacións utilizar a API de ficheiros en lugar de acceder directamente ao dispositivo de bloqueo mediante un ioctl.
    • En NFS, o montaxe de particións sobre UDP está desactivado por defecto. Engadido soporte para a posibilidade de copiar directamente ficheiros entre servidores, definido na especificación NFS 4.2. Engadiuse unha nova opción de montaxe "softreval", que permite utilizar os valores de atributos almacenados na caché en caso de falla do servidor. Por exemplo, ao especificar esta opción, despois de que o servidor non estea dispoñible, segue a ser posible moverse polos camiños da partición NFS e acceder á información que se instalou na caché.
    • Levado a cabo optimización do rendemento do mecanismo fs-verity, usado para supervisar a integridade e a autenticación de ficheiros individuais. Aumento da velocidade de lectura secuencial grazas ao uso dunha árbore hash Merkle. O rendemento de FS_IOC_ENABLE_VERITY optimizouse cando non hai datos na caché (aplicouse a lectura preventiva de páxinas con datos).
  • Virtualización e seguridade
    • A posibilidade de desactivar o módulo SELinux mentres se está a executar quedou en desuso e no futuro prohibirase descargar un SELinux xa activado. Para desactivar SELinux, terá que pasar o parámetro "selinux=0" na liña de comandos do núcleo.
    • Engadido soporte para espazos de nomes para o tempo (espazos de nomes de tempo), o que lle permite vincular o estado do reloxo do sistema ao contedor (CLOCK_REALTIME,
      CLOCK_MONOTONIC, CLOCK_BOOTTIME), utiliza o teu propio tempo no contedor e, ao migrar o contedor a outro host, asegúrate de que as lecturas CLOCK_MONOTONIC e CLOCK_BOOTTIME permanecen sen cambios (teña en conta o tempo despois da carga, con ou sen ter en conta estar no modo de suspensión). ).

    • Eliminouse o grupo de bloqueo /dev/random. O comportamento de /dev/random é similar a /dev/urandom en canto á prevención do bloqueo da entropía despois da inicialización do grupo.
    • O núcleo principal inclúe un controlador que permite que os sistemas convidados que executan VirtualBox monten directorios exportados polo ambiente host (Cartafol compartido de VirtualBox).
    • Engadiuse un conxunto de parches ao subsistema BPF (Despachador BPF), ao utilizar o mecanismo Retpoline para protexerse contra ataques da clase Spectre V2, permítelle aumentar a eficiencia de chamar a programas BPF cando se producen eventos asociados a eles (por exemplo, permite acelerar a chamada de controladores XDP cando chega o paquete de rede).
    • Engadido controlador para admitir TEE (Trusted Execution Environment) integrado nas APU AMD.
  • Servizos de memoria e sistema
    • BPF engadiu soporte para funcións globais. O desenvolvemento está a levarse a cabo como parte dunha iniciativa para engadir soporte para bibliotecas de funcións que se poden incluír nos programas BPF. O seguinte paso será admitir extensións dinámicas que permitan cargar funcións globais, incluíndo a substitución das funcións globais existentes mentres están en uso. O subsistema BPF tamén engade soporte para unha variante da operación de mapas (utilizada para almacenar datos persistentes), que admite a execución en modo por lotes.
    • Engadido O dispositivo "cpu_cooling" permítelle arrefriar unha CPU sobrequentada colocándoa en estado inactivo durante períodos curtos de tempo.
    • Engadida chamada ao sistema aberto2(), que ofrece un conxunto de marcas adicionais para limitar a resolución do camiño do ficheiro (prohibición de cruzar puntos de montaxe, ligazóns simbólicas, ligazóns máxicas (/proc/PID/fd), compoñentes “../”).
    • Para sistemas heteroxéneos baseados na arquitectura big.LITTLE, que combina núcleos de CPU potentes e menos eficientes enerxéticamente nun chip, o parámetro uclamp_min establécese cando se executan tarefas en tempo real (xurdiu no núcleo 5.3 hai un mecanismo para asegurar a carga). Este parámetro garante que a tarefa será colocada polo planificador nun núcleo de CPU que teña o rendemento suficiente.
    • O núcleo está liberado de problemas de 2038. Substituíronse os últimos controladores restantes, que usaban o tipo time_t de 32 bits (con signo int) para o contador de tempo de época, que, tendo en conta o informe de 1970, debería desbordarse en 2038.
    • Mellora continua da interface de E/S asíncrona io_uring, onde asegurado soporte para novas operacións: IORING_OP_FALLOCATE (reserva de áreas baleiras), IORING_OP_OPENAT,
      IORING_OP_OPENAT2,
      IORING_OP_CLOSE (abrindo e pechando ficheiros),
      IORING_OP_FILES_UPDATE (engadindo e eliminando ficheiros da lista de acceso rápido),
      IORING_OP_STATX (solicitude de información do ficheiro),
      IORING_OP_READ,
      IORING_OP_WRITE (análogos simplificados de IORING_OP_READV e IORING_OP_WRITEV),
      IORING_OP_FADVISE,
      IORING_OP_MADVISE (variantes asíncronas das chamadas posix_fadvise e madvise), IORING_OP_SEND,
      IORING_OP_RECV (enviando e recibindo datos de rede),
      IORING_OP_EPOLL_CTL (realizar operacións sobre descritores de ficheiros epoll).

    • Engadida chamada ao sistema pidfd_getfd(), permitindo que un proceso recupere un descritor de ficheiro para un ficheiro aberto doutro proceso.
    • Implementado o mecanismo “bootconfig”, que permite, ademais das opcións da liña de comandos, determinar os parámetros do núcleo a través dun ficheiro de configuración. Para engadir estes ficheiros á imaxe initramfs, proponse a utilidade bootconfig. Esta función pódese usar, por exemplo, para configurar kprobes no momento do inicio.
    • Reelaborado un mecanismo para esperar a escritura e lectura de datos en canalizacións sen nome. O cambio permitiu axilizar tarefas como a montaxe paralela de grandes proxectos. Non obstante, a optimización pode levar a unha condición de carreira na marca GNU debido a un erro na versión 4.2.1, que foi corrixido na versión 4.3.
    • Engadiuse a marca PR_SET_IO_FLUSHER a prctl(), que se pode usar para marcar procesos sen memoria que non deberían estar suxeitos a límites cando o sistema ten pouca memoria.
    • A partir do sistema de distribución de memoria ION usado en Android, implementouse un subsistema pilas dma-buf, que permite controlar a asignación de búfers DMA para compartir áreas de memoria entre controladores, aplicacións e varios subsistemas.
  • Arquitecturas de hardware
    • Engadiuse soporte para a extensión E0PD, que apareceu en ARMv8.5 e permite protección contra ataques relacionados coa execución especulativa de instrucións na CPU. A protección baseada en E0PD dá como resultado unha sobrecarga máis baixa que a protección KPTI (Kernel Page Table Isolation).
    • Para os sistemas baseados na arquitectura ARMv8.5, engadiuse soporte para a instrución RNG, que proporciona acceso a un xerador de números pseudoaleatorios de hardware. No núcleo, a instrución RNG úsase para xerar entropía ao inicializar o xerador de números pseudoaleatorios proporcionado polo núcleo.
    • Eliminouse o soporte para MPX (extensións de protección de memoria) engadidos no núcleo 3.19 e permítelle organizar a comprobación de punteiros para garantir que se respectan os límites das áreas de memoria. Esta tecnoloxía non foi moi utilizada nos compiladores e foi eliminada de GCC.
    • Para a arquitectura RISC-V, implementouse soporte para a ferramenta de depuración KASan (Kernel address sanitizer), que axuda a identificar erros ao traballar coa memoria.
  • Оборудование
    • Implementouse soporte de especificacións USB 4.0, que está baseado no protocolo Thunderbolt 3 e ofrece un rendemento de ata 40 Gbps, mantendo a compatibilidade con USB 2.0 e USB 3.2. Por analoxía con Raio A interface USB 4.0 permítelle conectar diferentes protocolos a través dun único cable cun conector Tipo C, incluíndo PCIe, Display Port e USB 3.x, así como implementacións de software de protocolos, por exemplo, para organizar ligazóns de rede entre hosts. A implementación baséase no controlador Thunderbolt que xa se inclúe no núcleo de Linux e adáptao para funcionar con anfitrións e dispositivos compatibles con USB4. Os cambios tamén engaden soporte para dispositivos Thunderbolt 3 á implementación de software do Xestor de conexión, que se encarga de crear túneles para conectar varios dispositivos a través dun único conector.
    • No controlador amdgpu engadido soporte inicial para a tecnoloxía de protección contra copias HDCP 2.x (Protección de contido dixital de gran ancho de banda). Engadiuse soporte para o chip ASIC AMD Pollock baseado en Raven 2. Implementouse a capacidade de restablecer a GPU para as familias Renoir e Navi.
    • Controlador DRM para tarxetas de vídeo Intel engadido Soporte DSI VDSC para chips baseados na microarquitectura Ice Lake e Tiger Lake, implementouse LMEM mmap (memoria local do dispositivo), mellorouse a análise VBT (Video BIOS Table), implementouse soporte HDCP 2.2 para chips Coffee Lake.
    • Continuouse o traballo para unificar o código do controlador amdkfd (para GPU discretas, como Fiji, Tonga, Polaris) co controlador amdgpu.
    • O controlador k10temp foi reelaborado, engadindo compatibilidade para mostrar os parámetros de tensión e corrente das CPU AMD Zen, así como información ampliada dos sensores de temperatura utilizados nas CPU Zen e Zen 2.
    • No condutor nouveau engadido soporte para o modo de carga de firmware verificado para as GPU NVIDIA baseadas na microarquitectura Turing (GeForce RTX 2000), que permitiu habilitar a compatibilidade coa aceleración 3D para estas tarxetas (requírese descargar firmware oficial cunha sinatura dixital NVIDIA). Engadido soporte para o motor gráfico TU10x. Resolvéronse os problemas co audio HD.
    • Engadiuse soporte para a compresión de datos cando se transmite a través de DisplayPort MST (Transporte Multi-Stream).
    • Engadiuse un novo controlador "ath11k» para chips sen fíos Qualcomm compatibles con 802.11ax.
      O controlador baséase na pila mac80211 e admite os modos de punto de acceso, estación de traballo e nodo de rede de malla.

    • A través de sysfs, ofrécese acceso a lecturas lexibles dos sensores de temperatura utilizadas nos discos duros e SSD modernos.
    • Enviado cambios significativos no sistema de son ALSA, destinados a eliminar o código problemas de 2038 (evitando o uso do tipo time_t de 32 bits nas interfaces snd_pcm_mmap_status e snd_pcm_mmap_control). Engadido soporte para novos códecs de audio
      Qualcomm WCD9340/WCD9341, Realtek RT700, RT711, RT715, RT1308, Ingenic JZ4770.

    • Engadido controladores para paneles LCD Logic PD 28, Jimax8729d MIPI-DSI, igenic JZ4770, Sony acx424AKP, Leadtek LTK500HD1829, Xinpeng XPP055C272, AUO B116XAK01, GiantPlus GPM940B0,
      BOE NV140FHM-N49,
      Satoz SAT050AT40H12R2,
      Sharp LS020B1DD01D.

    • Engadido soporte para placas ARM e plataformas Gen1 Amazon Echo (baseada en OMAP3630), Samsung Galaxy S III mini (GT-I8190), Allwinner Emlid Neutis, Libre Computer ALL-H3-IT, PineH64 Model B, Aibretech Amlogic GX PC,
      Armada SolidRun Clearfog GTR, NXPGateworks GW59xx,
      Lector de libros electrónicos Tolino Shine 3,
      Embedded Artists COM (i.MX7ULP), SolidRun Clearfog CX/ITX e HoneyComb (LX2160A), Google Coral Edge TPU (i.MX8MQ),
      Rockchip Radxa Dalang Carrier, Radxa Rock Pi N10, VMARC RK3399Pro SOM
      ST Ericsson HREF520, Inforce 6640, SC7180 IDP, Atmel/Microchip AM9X60 (ARM926 SoC, Kizboxmini), ST stm32mp15, AM3703/AM3715/DM3725, ST Ericsson ab8505, Unisoc SC9863. Engadido soporte para o controlador PCIe usado en Raspberry Pi 7180.

Ao mesmo tempo, a Fundación Latinoamericana de Software Libre formado
opción núcleo completamente gratuíto 5.6 - Linux-libre 5.6-gnu, eliminado de elementos de firmware e controladores que conteñan compoñentes ou seccións de código non libres, cuxo alcance está limitado polo fabricante. A nova versión desactiva a carga de blob nos controladores para AMD TEE, ATH11K e Mediatek SCP. Código de limpeza de blob actualizado nos controladores e subsistemas de AMD PSP, amdgpu e nouveau.

Fonte: opennet.ru

Engadir un comentario