Versión do núcleo de Linux 5.3

Despois de dous meses de desenvolvemento, Linus Torvalds introducido liberación do núcleo Linux 5.3. Entre os cambios máis salientables: soporte para GPU AMD Navi, procesadores Zhaoxi e tecnoloxía de xestión de enerxía Intel Speed ​​​​Select, a capacidade de usar instrucións umwait para esperar sen usar ciclos,
Modo de suxeición de utilización que aumenta a interactividade para CPU asimétricas, a chamada ao sistema pidfd_open, a posibilidade de usar enderezos IPv4 desde a subrede 0.0.0.0/8, a posibilidade de aceleración de hardware nftables, soporte HDR no subsistema DRM, integración do ACRN hipervisor.

В anuncio nova versión, Linus recordou a todos os desenvolvedores a principal regra do desenvolvemento do núcleo: manter o mesmo comportamento para os compoñentes do espazo de usuario. Os cambios no núcleo non deberían de ningún xeito romper as aplicacións que xa están en execución nin levar a regresións a nivel de usuario. Neste caso, unha violación do comportamento pode provocar non só un cambio no ABI, a eliminación de código desactualizado ou a aparición de erros, senón tamén o impacto indirecto de melloras útiles que funcionen correctamente. Como exemplo ilustrativo houbo descartado útil optimización en código Ext4, que reduce o número de accesos á unidade ao desactivar a lectura previa da táboa de inodos para pequenas solicitudes de E/S.

A optimización levou a que, debido á diminución da actividade do disco, a entropía para o xerador de números aleatorios getrandom() comezou a acumularse máis lentamente e nalgunhas configuracións, en determinadas circunstancias, podían observarse conxelacións durante a carga ata que o grupo de entropía estaba cheo. Dado que a optimización é realmente útil, xurdiu unha discusión entre os desenvolvedores na que se propoñía solucionar o problema desactivando o modo de bloqueo predeterminado da chamada getrandom() e engadindo unha marca opcional para esperar a entropía, pero tal cambio afectaría ao calidade dos números aleatorios na fase inicial da carga.

A nova versión inclúe 15794 correccións de 1974 desenvolvedores.
tamaño do parche: 92 MB (os cambios afectaron a 13986 ficheiros, engadíronse 258419 liñas de código,
599137 filas eliminadas). Preto do 39% de todos os presentados en 5.3
os cambios están relacionados cos controladores de dispositivos, aproximadamente o 12% dos cambios teñen
actitude cara á actualización de código específico para arquitecturas de hardware, 11%
relacionados coa pila de rede, un 3% con sistemas de ficheiros e un 3% con internos
subsistemas do núcleo.

O principal innovacións:

  • Servizos de memoria e sistema
    • Desenvolvemento continuo da funcionalidade "pidfd" para axudar a xestionar situacións de reutilización de PID (pidfd está asociado a un proceso específico e non cambia, mentres que un PID pódese asociar a outro proceso despois de que finalice o proceso actual asociado a ese PID). Engadiuse previamente ao núcleo
      a chamada ao sistema pidfd_send_signal() e a marca CLONE_PIDFD na chamada clone() para obter un pidfd para usar en idfd_send_signal(). O uso de clone() coa marca CLONE_PIDFD pode causar problemas cos xestores de servizos ou co sistema de terminación de forzas sen memoria da plataforma Android. Neste caso, utilízase unha chamada a fork() ou clone() sen CLONE_PIDFD para iniciar.

      O núcleo 5.3 introduciu a chamada ao sistema pidfd_open(), que lle permite obter un pidfd comprobable para un proceso existente arbitrario que non se creou chamando a clone() coa marca CLONE_PIDFD. Tamén se engadiu compatibilidade para a votación pidfd mediante poll() e epoll(), que permite aos xestores de procesos rastrexar a terminación de procesos arbitrarios sen medo a unha condición de carreira se se asigna un PID a un proceso novo. O mecanismo para notificar cando un proceso asociado con pidfd rematou é semellante ao de notificar cando rematou o seu proceso fillo;

    • Engadiuse soporte ao mecanismo de fixación de carga ao planificador de tarefas (Sujeción de utilización), permitindo aterse aos intervalos de frecuencia mínimo ou máximo, dependendo das tarefas activas na CPU. O mecanismo presentado acelera as tarefas que afectan directamente á calidade da experiencia do usuario ao executar estas tarefas polo menos no extremo inferior da frecuencia "solicitada". As tarefas de baixa prioridade que non afectan o traballo do usuario lánzanse usando o límite superior da frecuencia "permitida". Os límites establécense mediante os atributos sched_uclamp_util_min e sched_uclamp_util_max na chamada ao sistema sched_setattr().
    • Engadido soporte para a tecnoloxía de xestión da enerxía Intel Speed ​​​​Select, dispoñible en servidores seleccionados con procesadores Intel Xeon. Esta tecnoloxía permítelle establecer a configuración de rendemento e rendemento de partición para diferentes núcleos de CPU, o que permite priorizar o rendemento para as tarefas realizadas en determinados núcleos, sacrificando o rendemento noutros núcleos;
    • Procesos no espazo de usuario concedida a capacidade de agardar un tempo curto sen usar bucles usando a instrución umwait. Esta instrución, xunto coas instrucións umonitor e tpause, ofrecerase nos próximos chips "Tremont" de Intel e permitirá a implementación de atrasos que sexan eficientes enerxéticamente e que non afecten o rendemento doutros fíos cando se utilice Hyper Threading;
    • Para a arquitectura RISC-V, engadiuse soporte para páxinas de memoria grande;
    • O mecanismo de rastrexo kprobes engadiu a capacidade de desreferenciar os punteiros do núcleo ao espazo do usuario, que se pode usar, por exemplo, para avaliar o contido das estruturas pasadas ás chamadas do sistema. Tamén se engadiu a posibilidade de instalar comprobacións na fase de inicio.
    • Engadiuse a opción PREEMPT_RT ao ficheiro de configuración para a operación en tempo real. O propio código para admitir o modo en tempo real aínda non se engadiu ao núcleo, pero a aparición da opción é un bo sinal de que a épica a longo prazo integración Os parches de anticipación en tempo real están a piques de completarse;
    • Engadida a chamada ao sistema clone3() coa implementación dunha versión máis extensible da interface clone(), que permite especificar un maior número de bandeiras;
    • Engadiuse o controlador bpf_send_signal(), que permite aos programas BPF enviar sinais a procesos arbitrarios;
    • Para eventos de perf no contorno de hipervisor KVM, engadiuse un novo mecanismo de filtrado de eventos, que permite ao administrador determinar os tipos de eventos que se permiten ou non para a supervisión no lado do convidado;
    • A capacidade de procesar programas con bucles engadiuse ao mecanismo de verificación da aplicación eBPF se a execución do bucle é limitada e non pode levar a superar o límite no número máximo de instrucións;
  • Subsistema de disco, E/S e sistemas de ficheiros
    • O sistema de ficheiros XFS agora admite o bypass de inodos multiproceso (por exemplo, ao comprobar as cotas). Engadíronse novos ioctls BULKSTAT e INUMBERS, que proporcionan acceso ás funcións que apareceron na quinta edición do formato FS, como a hora de nacemento do inodo e a posibilidade de establecer os parámetros BULKSTAT e INUMBERS para cada grupo AG (Grupos de asignación);
    • En Ext4 apoio engadido baleiros nos directorios (bloques desvinculados).
      Procesamento proporcionado marca "i" (inmutable) para ficheiros abertos (a escritura está prohibida nunha situación se a marca se estableceu nun momento no que o ficheiro xa estaba aberto);

    • Btrfs proporciona unha definición dunha implementación rápida de crc32c en todas as arquitecturas;
    • En CIFS, o código para o soporte smbdirect foi eliminado como desenvolvemento experimental. SMB3 engadiu a posibilidade de usar algoritmos criptográficos no modo GCM. Engadida unha nova opción de montaxe para extraer os parámetros do modo das entradas de ACE (Access Control Entry). Optimizouse o rendemento da chamada open();
    • Engadiuse unha opción a F2FS para limitar o colector de lixo cando se executa no modo punto de control = desactivar. Engadiuse ioctl para eliminar intervalos de bloques de F2FS, permitindo axustes de tamaño das particións ao momento. Engadida a posibilidade de colocar un ficheiro de intercambio en F2FS para proporcionar E/S directa. Engadido soporte para fixar un ficheiro e asignar bloques para ficheiros similares para todos os usuarios;
    • Engadido soporte para operacións asíncronas sendmsg() e recvmsg() á interface para io_uring de entrada/saída asíncrona;
    • Engadíronse ao sistema de ficheiros UBIFS soporte para a compresión mediante o algoritmo zstd e a capacidade de verificar imaxes FS asinadas;
    • Ceph FS agora admite etiquetas de seguridade de SELinux para ficheiros;
    • Para NFSv4, implementouse unha nova opción de montaxe “nconnect=", que determina o número de conexións establecidas co servidor. O tráfico entre estas conexións distribuirase mediante o equilibrio de carga. Ademais, o servidor NFSv4 agora crea un directorio /proc/fs/nfsd/clients con información sobre os clientes actuais, incluíndo información sobre os ficheiros que abriron;
  • Virtualización e seguridade
    • O núcleo inclúe un hipervisor para dispositivos incorporados ACRN, que está escrito pensando na preparación para tarefas en tempo real e na idoneidade para o seu uso en sistemas de misión crítica. ACRN proporciona unha sobrecarga mínima, garante unha baixa latencia e unha resposta adecuada ao interactuar co equipo. Admite a virtualización de recursos da CPU, E/S, subsistema de rede, gráficos e operacións de son. ACRN pódese usar para executar varias máquinas virtuais illadas en unidades de control electrónicos, paneis de control, sistemas de información automoción, dispositivos IoT de consumo e outras tecnoloxías integradas;
    • En modo de usuario Linux engadido Modo de viaxe no tempo, que che permite diminuír ou acelerar o tempo nun ambiente UML virtual para facilitar a depuración do código relacionado co tempo. Ademais, engadiuse un parámetro
      time-travel-start, que permite que o reloxo do sistema se inicie a partir dun momento especificado en formato de época;

    • Engadíronse novas opcións de liña de comandos do núcleo "init_on_alloc" e "init_on_free", cando se especifican, habilitouse a posta a cero das áreas de memoria asignadas e liberadas (enchendo con ceros para malloc e free), o que permite mellorar a seguridade debido á inicialización adicional. sobrecarga;
    • Engadiuse un novo controlador virtio-iommu coa implementación dun dispositivo paravirtualizado que permite enviar solicitudes IOMMU como ATTACH, DETACH, MAP e UNMAP sobre o transporte virtio sen emular táboas de páxinas de memoria;
    • Engadiuse un novo controlador virtio-pmem, que representa o acceso a dispositivos de almacenamento asignados ao espazo de enderezo físico, como NVDIMM;
    • Implementouse a capacidade de anexar claves criptográficas a un espazo de nomes de usuario ou de rede (as claves fanse inaccesibles fóra do espazo de nomes seleccionado), así como protexer as claves mediante ACL;
    • Ao subsistema criptográfico engadido soporte para un algoritmo de hash non criptográfico moi rápido xxhash, cuxa velocidade depende do rendemento da memoria;
  • Subsistema de rede
    • Activouse o procesamento de enderezos IPv4 no intervalo 0.0.0.0/8, que antes non estaba dispoñible para o seu uso. Introdución desta subrede permitirá distribuír outros 16 millóns de enderezos IPv4;
    • En Netfilter para nftables engadido soporte para mecanismos de aceleración de hardware para o filtrado de paquetes mediante o uso de controladores engadidos API Flow Block. Pódense colocar táboas enteiras de regras con todas as cadeas ao lado dos adaptadores de rede. A activación realízase vinculando a marca NFT_TABLE_F_HW á táboa. Admite metadatos do protocolo de capa 3 e capa 4 sinxelos, accións de aceptación/rexeitamento, mapeamentos por IP e portos de rede do emisor/receptor e tipo de protocolo;
    • Engadido soporte integrado de seguimento de conexións para pontes de rede, que non require o uso da capa de emulación br_netfilter;
    • En nf_tables engadido Tamén se implementa soporte para o módulo SYNPROXY, que reproduce unha funcionalidade similar de iptables, e tamén se implementa a capacidade de verificar regras para opcións individuais na cabeceira IPv4;
    • Engadiuse a posibilidade de anexar programas BPF ás chamadas do sistema setsockopt() e getsockopt(), o que, por exemplo, permítelle anexar os seus propios controladores de acceso a estas chamadas. Ademais, engadiuse un novo punto de chamada (gancho), co que se pode organizar unha chamada ao programa BPF unha vez por cada intervalo RTT (tiempo de ida e volta, tempo de ping);
    • Para IPv4 e IPv6 engadido novo mecanismo de almacenamento de datos de enrutamento nexthop destinado a aumentar a escalabilidade das táboas de enrutamento. As probas demostraron que ao usar o novo sistema, un conxunto de 743 mil rutas cargáronse no núcleo en só 4.3 segundos;
    • Para Bluetooth implementado funcionalidade necesaria para soportar o ping LE;
  • Оборудование
    • Engadido soporte para os procesadores compatibles con x86 da empresa Zhaoxin, desenvolvido como resultado dun proxecto conxunto entre VIA Technologies e o Municipio de Shanghai. A familia de CPU ZX está construída sobre a arquitectura x86-64 Isaiah, continuando o desenvolvemento da tecnoloxía VÍA Centauro;
    • O subsistema DRM (Direct Rendering Manager), así como os controladores de gráficos amdgpu e i915, engadiu compatibilidade para analizar, procesar e enviar metadatos HDR (alto rango dinámico) a través do porto HDMI, o que permite o uso de paneis e pantallas HDR capaces de mostrando intervalos de brillo adicionais;
    • O controlador amdgpu engadiu soporte inicial para AMD NAVI GPU (RX5700), que inclúe o controlador base, o código de interacción de pantalla (DCN2), GFX e soporte informático (GFX10).
      SDMA 5 (Sistema DMA0), xestión de enerxía e codificadores/decodificadores multimedia (VCN2). amdgpu tamén mellora o soporte para tarxetas baseadas en GPU Vega12 e Vega20, para as que se engadiron capacidades de xestión de enerxía e memoria adicionais;

    • Engadido soporte para tarxetas baseadas en GPU VegaM ao controlador amdkfd (para GPU discretas, como Fiji, Tonga, Polaris);
    • No controlador DRM para tarxetas de vídeo Intel para chips Icelake implementado novo modo de corrección gamma multisegmento. Engadida a posibilidade de emitir a través de DisplayPort no formato YCbCr4:2:0. Engadiuse un novo firmware GuC para SKL, BXT, KBL, GLK e ICL. Implementouse a capacidade de apagar a pantalla en modo asíncrono. Engadido soporte para gardar e restaurar o contexto de renderizado dos chips Ironlake (gen5) e gen4 (Broadwater - Cantiga), o que lle permite restaurar o estado da GPU desde o espazo do usuario ao pasar dunha operación por lotes a outra;
    • O controlador Nouveau proporciona detección do chipset NVIDIA Turing TU116;
    • Ampliáronse as capacidades do controlador DRM/KMS para os aceleradores de pantalla ARM Komeda (Mali D71), o soporte para a escala, división/fusión de capas, rotación, escritura diferida, AFBC, SMMU e os formatos de codificación de cores Y0L2, P010, YUV420_8/10BIT. engadido;
    • O controlador MSM engade soporte para a serie A540 GPU Adreno utilizada nos procesadores Qualcomm, así como soporte para o controlador MSM8998 DSI para Snapdragon 835;
    • Engadíronse controladores para paneles LCD Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS,
      Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 e VXT VL050-8048NT-C01;

    • Engadido controlador para habilitar ferramentas de aceleración de decodificación
      vídeos dispoñibles en Amlogic Meson SoC;

    • No controlador v3d (para a GPU Broadcom Video Core V usada na Raspberry Pi) apareceu apoiar envío de sombreadores de computación;
    • Engadido controlador para teclados e trackpads SPI usados ​​en modelos modernos de portátiles Apple MacBook e MacBookPro;
    • Engadido protección adicional para chamadas ioctl asociadas co controlador de disquete, e o propio controlador está marcado como non mantido
      (“orfo”), o que implica a terminación da súa proba. O controlador aínda está almacenado no núcleo, pero non se garante o seu correcto funcionamento. O controlador considérase obsoleto, xa que é difícil atopar equipos de traballo para probalo: todas as unidades externas actuais, por regra xeral, usan a interface USB.

    • Engadido controlador cpufreq para placas Raspberry Pi, que che permite controlar dinámicamente os cambios na frecuencia do procesador;
    • Engadido soporte para o novo SoC ARM Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSP + MMA) e Amlogic G12B (4x Cortex-A73 + 2x Cortex- A53), así como placas:
      • Purismo Librem5,
      • Aspeed BMC,
      • Microsoft Olympus BMC,
      • Kontron SMARC,
      • Novtech Meerkat96 (i.MX7),
      • ST Micro Avenger96,
      • Google Cheza (Qualcomm SDM845),
      • Qualcomm Dragonboard 845c (Qualcomm SDM845),
      • Caixa de TV Hugsun X99 (Rockchip RK3399),
      • Khadas Edge/Edge-V/Captain (Rockchip RK3399),
      • Ola RZ/G2M,
      • NXP LS1021A-TSN.

Ao mesmo tempo, a Fundación Latinoamericana de Software Libre formado
opción núcleo completamente gratuíto 5.3 - Linux-libre 5.3-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. Na nova versión, a carga de blob está desactivada nos controladores qcom, hdcp drm, allegro-dvt e meson-vdec.
Código de limpeza de blob actualizado en controladores e subsistemas amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, controlador de son para Skylake, así como na documentación do microcódigo.

Fonte: opennet.ru

Engadir un comentario