Versión do núcleo de Linux 5.1

Despois de dous meses de desenvolvemento, Linus Torvalds introducido liberación do núcleo Linux 5.1. Entre os cambios máis salientables: unha nova interface para io_uring de E/S asíncronas, a posibilidade de usar NVDIMM como RAM, soporte para memoria virtual compartida en Nouveau, soporte para a monitorización escalable de sistemas de ficheiros moi grandes mediante fanotify, a posibilidade de configurar a compresión Zstd niveis en Btrfs, un novo manejador de TEO cpuidle, implementación de chamadas ao sistema para resolver o problema de 2038, a capacidade de arrancar desde dispositivos mapeadores de dispositivos sen initramfs, módulo SafeSetID LSM, soporte para parches en directo combinados.

O principal innovacións:

  • Subsistema de disco, E/S e sistemas de ficheiros
    • Implementouse unha nova interface para E/S asíncronas - io_uring, que destaca pola súa compatibilidade coa sondaxe de E/S e a capacidade de traballar con ou sen almacenamento en búfer. Lembremos que o mecanismo de E/S asíncrono "aio" proposto anteriormente non admitía E/S almacenadas en búfer, só podía funcionar en modo O_DIRECT (sen almacenar en búfer e omitir a caché), tiña problemas co bloqueo debido á espera da dispoñibilidade de metadatos e exhibiu grandes custos xerais debido á copia de datos na memoria.

      Dentro da API
      Os desenvolvedores de io_uring tentaron eliminar as deficiencias da antiga interface aio. Por produtividade io_uring está moi preto de SPDK e está moi por diante de libaio cando se traballa coa votación activada. Preparouse unha biblioteca para usar io_uring en aplicacións finais que se executan no espazo do usuario librando, que proporciona un marco de alto nivel sobre a interface do núcleo;

    • No mecanismo de seguimento de eventos no FS fanotify() engadido soporte para o seguimento de situacións de superbloque e cambios de estrutura dirent (eventos de creación, eliminación e movemento de directorios). As funcións presentadas axudan a resolver os problemas de escalabilidade que xorden ao crear un seguimento recursivo de cambios en sistemas de ficheiros moi grandes utilizando o mecanismo inotify (os cambios directos só se podían rastrexar mediante inotify, pero
      rendemento en condicións de seguimento recursivo de grandes directorios aniñados deixaba moito que desexar). Agora, este seguimento pódese facer efectivamente a través de fanotify;

    • No sistema de ficheiros Btrfs engadido a capacidade de personalizar o nivel de compresión para o algoritmo zstd, que pode considerarse como un compromiso óptimo entre o rápido pero ineficaz lz4 e a compresión lenta pero boa xz. Por analoxía con como antes era posible establecer o nivel de compresión cando se usaba zlib, engadiuse soporte para a opción de montaxe "-o compress=zstd:level" para zstd. Durante a proba, o primeiro nivel mínimo proporcionou a compresión de datos en 2.658 veces cunha velocidade de compresión de 438.47 MB/s, unha velocidade de descompresión de 910.51 MB/s e un consumo de memoria de 780 MB, e o nivel máximo 15 proporcionou 3.126 veces, pero cunha compresión. velocidade de 37.30 MB/s, desempaquetado 878.84 MB/s e consumo de memoria 2547 MB;
    • Engadido a capacidade de arrincar desde un sistema de ficheiros situado no dispositivo mapeador de dispositivos, sen usar initramfs. A partir da versión actual do núcleo, os dispositivos de mapeo de dispositivos pódense usar directamente durante o proceso de arranque, por exemplo, como unha partición co sistema de ficheiros raíz. A partición configúrase mediante o parámetro de arranque "dm-mod.create". Os módulos de mapeadores de dispositivos permitidos para a carga inclúen: "cripta", "delay", "lineal", "snapshot-origin" e "verity";
    • A bandeira F2FS_NOCOW_FL engadiuse ao sistema de ficheiros F2FS orientado a unidades Flash, o que lle permite desactivar o modo de copia en escritura para un ficheiro determinado;
    • Eliminouse o sistema de ficheiros do núcleo Exofs, que é unha variante de ext2, adaptada para traballar con almacenamentos de obxectos OSD (Object-based Storage Device). Tamén se eliminou o soporte para o protocolo SCSI para estes dispositivos de almacenamento de obxectos;
  • Virtualización e seguridade
    • Engadiuse a opción PR_SPEC_DISABLE_NOEXEC a prctl() para controlar a execución especulativa de instrucións para o proceso seleccionado. Unha nova opción permítelle desactivar selectivamente a execución especulativa para procesos que poderían ser atacados por un ataque Spectre. O bloqueo dura ata a primeira chamada a exec();
    • Módulo LSM implementado SafeSetID, que permite aos servizos do sistema xestionar os usuarios de forma segura sen aumentar os privilexios (CAP_SETUID) e sen obter privilexios de root. Os privilexios son asignados mediante a definición de regras en securityfs baseadas nunha lista branca de ligazóns válidas (no formato "UID1:UID2");
    • Engadíronse cambios de baixo nivel necesarios para a carga de módulos de seguridade (LSM) baseada na pila. Introduciuse a opción de inicio do núcleo "lsm" para controlar que módulos se cargan e en que orde;
    • Engadiuse soporte para espazos de nomes de ficheiros ao subsistema de auditoría;
    • Ampliado as capacidades do complemento GCC structleak, que permite bloquear potenciais fugas de contido de memoria.Proporciona a inicialización de calquera variable que se utilice no código mediante o acceso de referencia na pila;
  • Subsistema de rede
    • Para enchufes implementado nova opción "SO_BINDTOIFINDEX" similar a
      "SO_BINDTODEVICE", pero tomando como argumento o número de índice da interface de rede en lugar do nome da interface;

    • A pila mac80211 engadiu a posibilidade de asignar varios BSSID (enderezos MAC) a un dispositivo. Como parte dun proxecto para optimizar o rendemento WiFi, a pila mac80211 engadiu a conta de tempo de antena e a capacidade de distribuír o tempo de antena entre varias estacións (cando se opera en modo de punto de acceso, asignando menos tempo de transmisión a estacións sen fíos lentas, en lugar de distribuír o tempo de forma uniforme entre todas as estacións). estacións);
    • Mecanismo engadido "saúde devlink", que proporciona notificacións cando se producen problemas coa interface de rede;
  • Servizos de memoria e sistema
    • Implementado entrega segura de sinal que permite a reutilización de PID. Por exemplo, ao chamar a kill previamente, podería xurdir unha situación na que, inmediatamente despois de enviar un sinal, o PID de destino podería ser liberado debido á terminación do proceso e ocupado por outro proceso, e o sinal acabaría pasando a outro proceso. Para eliminar tales situacións, engadiuse unha nova chamada de sistema pidfd_send_signal, que usa descritores de ficheiros de /proc/pid para garantir unha vinculación estable do proceso. Aínda que o PID se reutilice durante o procesamento da chamada do sistema, o descritor do ficheiro non cambiará e pódese usar con seguridade para enviar un sinal ao proceso;
    • Engadido a capacidade de usar dispositivos de memoria permanente (memoria persistente, por exemplo NVDIMM) como RAM. Ata agora, o núcleo admitía dispositivos como dispositivos de almacenamento, pero agora tamén se poden usar como RAM adicional. A función implícase en resposta aos desexos dos usuarios que están dispostos a soportar un atraso de rendemento e queren usar a API nativa de xestión de memoria do núcleo de Linux en lugar de usar os sistemas de asignación de memoria de espazo de usuario existentes que se executan enriba do mmap para o ficheiro dax. ;
    • Engadiuse un novo controlador de CPU inactivo (cpuidle, decide cando a CPU se pode poñer en modos de aforro de enerxía profundo; canto máis profundo sexa o modo, maior será o aforro, pero tamén máis tempo tardará en saír do modo) - TEO (Gobernador orientado a eventos de temporizador) ). Ata agora propuxéronse dous manejadores de cpuidle: "menú" e "escaleira", que difiren en heurísticas. O manejador do "menú" coñeceu problemas coa toma de decisións heurísticas, para eliminar as cales se decidiu preparar un novo manejador. TEO sitúase como unha alternativa ao manejador de "menú", o que permite un maior rendemento mantendo o mesmo nivel de consumo de enerxía.
      Podes activar o novo controlador usando o parámetro de arranque “cpuidle.governor=teo”;

    • Como parte do traballo para eliminar problemas de 2038, causado por un desbordamento do tipo time_t de 32 bits, inclúe chamadas ao sistema que ofrecen contadores de tempo de 32 bits para arquitecturas de 64 bits. Como resultado, a estrutura time_t de 64 bits agora pódese usar en todas as arquitecturas. Tamén se implementaron cambios similares no subsistema de rede para as opcións marca de tempo tomas de rede;
    • No sistema de parches en quente para o núcleo (remendos en directo) engadido Función "Atomic Replace" para aplicar atómicamente unha serie de cambios a unha única función. Esta característica permítelle distribuír parches de resumo que cobren varios cambios á vez, en lugar do proceso de aplicación paso a paso de parches en directo nunha orde estritamente definida, que é bastante difícil de manter. Mentres que antes cada cambio posterior tiña que estar baseado no estado da función despois do último cambio, agora é posible propagar varios cambios vinculados a un estado inicial á vez (é dicir, os mantedores poden manter un parche consolidado en relación ao núcleo base). dunha cadea de parches que dependen uns dos outros );
    • Anunciado soporte obsoleto para o formato de ficheiro executable a.out e
      eliminado código para xerar ficheiros básicos en formato a.out, que está nun estado abandonado. O formato a.out non se usa nos sistemas Linux desde hai moito tempo, e as ferramentas modernas non admiten a xeración de ficheiros a.out nas configuracións predeterminadas de Linux. Ademais, o cargador de ficheiros a.out pódese implementar enteiramente no espazo do usuario;

    • A capacidade de identificar e eliminar o código non utilizado engadiuse ao mecanismo de verificación do programa BPF. O núcleo tamén inclúe parches con soporte de spinlock para o subsistema BPF, que proporcionan capacidades adicionais para xestionar a execución paralela dos programas BPF;
  • Оборудование
    • Condutor en Nouveau engadido soporte para a xestión de memoria heteroxénea, permitindo que a CPU e a GPU accedan a áreas comúns de memoria sincronizada. O sistema de memoria virtual compartida (SVM, shared virtual memory) está implantado sobre a base do subsistema HMM (Heterogeneous memory management), que permite o uso de dispositivos con unidades de xestión de memoria propias (MMU, memory management unit), aos que se poden acceder memoria principal. En particular, usando HMM, pode organizar un espazo de enderezos compartido entre a GPU e a CPU, no que a GPU pode acceder á memoria principal do proceso. Actualmente, o soporte SVM só está habilitado para as GPU da familia Pascal, aínda que tamén se ofrece soporte para as GPU Volta e Turing. Ademais, en Nouveau engadido novo ioctl para controlar a migración das áreas de memoria de proceso á memoria da GPU;
    • No controlador Intel DRM para GPU Skylake e posterior (gen9+) incluído Por defecto, o modo fastboot elimina os cambios de modo innecesarios durante o arranque. Engadido новые identificadores de dispositivos baseados nas microarquitecturas Coffelake e Ice Lake. Para chips Coffelake engadido Soporte de GVT (Virtualización de GPU). Para GPU virtuais implementado Soporte VFIO EDID. Para paneis LCD MIPI/DSI engadido soporte para elementos ACPI/PMIC. Implementado novos modos de TV 1080p30/50/60 TV;
    • Engadido soporte para Vega10/20 BACO GPU ao controlador amdgpu. Implementáronse a xestión de enerxía Vega 10/20 e as táboas de control do refrigerador Vega 10. Engadíronse novos identificadores de dispositivos PCI para as GPU Picasso. Engadido interface para xestionar dependencias programables para evitar bloqueos;
    • Engadido Controlador DRM/KMS para aceleradores de pantalla ARM Komeda (Mali D71);
    • Engadiuse soporte para os paneis de pantalla Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 e Kingdisplay kd097d04;
    • Engadiuse soporte para os códecs de audio Rockchip RK3328, Cirrus Logic CS4341 e CS35L36, MediaTek MT6358, Qualcomm WCD9335 e Ingenic JZ4725B, así como a plataforma de audio Mediatek MT8183;
    • Engadido soporte para controladores NAND Flash STMicroelectronics FMC2, Amlogic Meson;
    • Engadido soporte de acelerador para os sistemas de hardware de Habana AI;
    • Engadido soporte para controladores NXP ENETC gigabit Ethernet e interfaces sen fíos MediaTek MT7603E (PCIe) e MT76x8.

Ao mesmo tempo, a Fundación Latinoamericana de Software Libre formado
opción núcleo completamente gratuíto 5.1 - Linux-libre 5.1-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 mt7603 e goya. Código de limpeza de blob actualizado en controladores e subsistemas wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk e touchscreen_dmi. A limpeza de manchas no cargador de firmware lantiq xrx200 detívose debido á súa eliminación do núcleo.

Fonte: opennet.ru

Engadir un comentario