Versión do núcleo de Linux 5.7

Despois de dous meses de desenvolvemento, Linus Torvalds introducido liberación do núcleo Linux 5.7. Entre os cambios máis salientables: unha nova implementación do sistema de ficheiros exFAT, un módulo bareudp para a creación de túneles UDP, protección baseada na autenticación de punteiros para ARM64, a posibilidade de anexar programas BPF aos controladores LSM, unha nova implementación de Curve25519, un split- detector de bloqueo, compatibilidade BPF con PREEMPT_RT, eliminando o límite do tamaño de liña de 80 caracteres no código, tendo en conta os indicadores de temperatura da CPU no programador de tarefas, a capacidade de usar clone() para xerar procesos noutro cgroup, protección contra a escritura á memoria usando userfaulfd.

A nova versión inclúe 15033 correccións de 1961 desenvolvedores.
tamaño do parche: 39 MB (os cambios afectaron a 11590 ficheiros, engadiu 570560 liñas de código,
297401 filas eliminadas). Preto do 41% de todos os presentados en 5.7
os cambios están relacionados cos controladores de dispositivos, aproximadamente o 16% dos cambios teñen
actitude cara á actualización de código específico para arquitecturas de hardware, 13%
relacionados coa pila de rede, un 4% con sistemas de ficheiros e un 4% con internos
subsistemas do núcleo.

O principal innovacións:

  • Subsistema de disco, E/S e sistemas de ficheiros
    • Engadiuse unha nova implementación do controlador exFAT, fundada baseado na base de código actual "sdfat" (2.x) desenvolvida por Samsung para os seus teléfonos intelixentes Android. O controlador engadido anteriormente ao núcleo baseábase no código Samsung heredado (versión 1.2.9) e estaba preto dun 10% por detrás do novo controlador en rendemento. Lembremos que engadir soporte exFAT ao núcleo foi posible despois de Microsoft publicado especificacións públicas e fixo patentes exFAT dispoñibles para uso libre de dereitos en Linux.
    • Btrfs implementa un novo comando ioctl() - BTRFS_IOC_SNAP_DESTROY_V2, que che permite eliminar unha subsección polo seu identificador. Ofrécese soporte completo para clonar extensións en liña. Ampliouse o número de puntos de cancelación para as operacións de redistribución, o que reduciu as longas esperas ao executar o comando de cancelación de saldo. Acelerouse a determinación das ligazóns de retroceso a extensións (por exemplo, o tempo de execución do script de proba diminuíu dunha hora a varios minutos). Engadida a posibilidade de anexar extensións de ficheiro a cada inodo dunha árbore. O esquema de bloqueo usado ao escribir en subparticións e ao excluír NOCOW foi redeseñado. Mellora a eficiencia da execución fsync para intervalos.
    • XFS mellorou a comprobación de metadatos e fsck para as particións activas. Propúxose unha biblioteca para reconstruír estruturas btree, que no futuro se utilizará para reelaborar xfs_repair e implementar a posibilidade de recuperación sen desmontar a partición.
    • Engadiuse a CIFS soporte experimental para colocar unha partición de intercambio en almacenamentos SMB3. Implementáronse extensións POSIX para readdir, definidas na especificación SMB3.1.1. Mellorouse o rendemento de escritura para páxinas de 64 KB cando se activa a caché=modo estrito e se usan versións de protocolo 2.1+.
    • FS EXT4 transferiuse de bmap e iopoll ao uso de iomap.
    • F2FS ofrece soporte opcional para a compresión de datos mediante o algoritmo zstd. Por defecto, o algoritmo LZ4 úsase para a compresión. Engadido soporte para o comando "chattr -c commit". Dispón de visualización do tempo de montaxe. Engadiuse ioctl F2FS_IOC_GET_COMPRESS_BLOCKS para obter información sobre o número de bloques comprimidos. Engadiuse a saída de datos de compresión a través de statx.
    • O sistema de ficheiros Ceph engadiu a posibilidade de realizar localmente operacións de creación e eliminación de ficheiros (desligar) sen esperar unha resposta do servidor (traballando en modo asíncrono). O cambio, por exemplo, pode mellorar significativamente o rendemento cando se executa a utilidade rsync.
    • A capacidade de usar virtiofs como sistema de ficheiros de nivel superior engadiuse a OVERLAYFS.
    • Reescrito código de percorrido de camiños en VFS, o código de análise de ligazóns simbólicas foi reelaborado e unificouse o percorrido do punto de montaxe.
    • No subsistema scsi para usuarios sen privilexios permitido execución de comandos ZBC.
    • En dm_writecache implementado a capacidade de borrar gradualmente a caché en función do parámetro max_age, que establece a duración máxima dun bloque.
    • En dm_integrity engadido soporte para a operación "descartar".
    • En null_blk engadido soporte para a substitución de erros para simular fallos durante as probas.
    • Engadido capacidade de enviar notificacións de udev sobre os cambios de tamaño do dispositivo bloqueados.
  • Subsistema de rede
    • Netfilter incluído cambios, acelerando significativamente o procesamento de grandes listas de coincidencias (conxuntos nftables), que requiren comprobar unha combinación de subredes, portos de rede, protocolo e enderezos MAC.
      Optimizacións introducido no módulo nft_set_pipapo (PIle PAcket POlicies), que resolve o problema de facer coincidir o contido dun paquete con intervalos de estado de campo arbitrarios utilizados nas regras de filtrado, como intervalos de IP e portos de rede (nft_set_rbtree e nft_set_hash manipulan a coincidencia de intervalos e a reflexión directa dos valores). ). A versión de pipapo vectorizada usando instrucións AVX256 de 2 bits nun sistema cun procesador AMD Epyc 7402 mostrou un aumento do rendemento do 420% ao analizar 30 mil rexistros, incluíndo combinacións de porto-protocolo. O aumento ao comparar unha combinación dunha subrede e un número de porto ao analizar 1000 rexistros foi do 87 % para IPv4 e do 128 % para IPv6.

    • Engadido módulo bareudp, que permite encapsular varios protocolos L3, como MPLS, IP e NSH, nun túnel UDP.
    • Continuou a integración de compoñentes 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 vinculadas a diferentes enderezos IP.
    • Engadido soporte para mecanismos de aceleración de hardware para encapsular tramas Ethernet en 802.11 (Wi-Fi).
    • Ao mover un dispositivo dun espazo de nomes de rede a outro, axústanse os dereitos de acceso e a propiedade dos ficheiros correspondentes en sysfs.
    • Engadiuse a posibilidade de usar a marca SO_BINDTODEVICE para usuarios non root.
    • Aceptouse a terceira parte dos parches, convertendo o kit de ferramentas ethtool de ioctl() para usar a 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 posibilidade de usar aceleradores de hardware especiais para realizar operacións de seguimento de conexións.
    • En netfilter engadido un gancho para conectar clasificadores de paquetes de saída (saída), que complementaba o gancho anteriormente presente para os paquetes entrantes (entrada).
  • Virtualización e seguridade
    • Engadida implementación de hardware de autenticación de puntero (Autenticación de puntero), que utiliza instrucións especializadas da CPU ARM64 para protexerse contra ataques mediante técnicas de programación orientada a retorno (ROP), nas que o atacante non tenta colocar o seu código na memoria, senón que opera con pezas de instrucións de máquina xa dispoñibles nas bibliotecas cargadas, rematando cunha instrución de retorno de control. A seguridade redúcese ao uso de sinaturas dixitais para verificar os enderezos de retorno a nivel do núcleo. A sinatura gárdase nos bits superiores non utilizados do propio punteiro. A diferenza das implementacións de software, a creación e verificación de sinaturas dixitais realízase mediante instrucións especiais da CPU.
    • Engadido a capacidade de protexer unha área de memoria da escritura mediante a chamada ao sistema userfaultfd(), deseñada para xestionar erros de páxina (acceso a páxinas de memoria non asignadas) no espazo do usuario. A idea é usar userfaultfd() tanto para detectar violacións de acceso a páxinas marcadas como protexidas contra escritura como para chamar a un controlador que poida responder a tales intentos de escritura (por exemplo, para xestionar cambios durante a creación de instantáneas en directo dos procesos en execución, estado capturar cando se volca a memoria no disco, se implementa memoria compartida, se rastrexa os cambios na memoria). Funcionalidade equivalente usando mprotect() xunto co manejador de sinais SIGSEGV, pero funciona notablemente máis rápido.
    • SELinux deixou en desuso o parámetro "checkreqprot", que lle permite desactivar as comprobacións de protección da memoria ao procesar regras (permitindo o uso de áreas de memoria executables, independentemente das regras especificadas nas regras). As ligazóns simbólicas de Kernfs poden herdar o contexto dos seus directorios principais.
    • A estrutura incluído módulo KRSI, que lle permite anexar programas BPF a calquera gancho LSM do núcleo. O cambio permite crear módulos LSM (Linux Security Module) en forma de programas BPF para resolver problemas de auditoría e control de acceso obrigatorio.
    • Levado a cabo Optimiza o rendemento de /dev/random agrupando os valores CRNG en lugar de chamar instrucións RNG individualmente. Mellorouse o rendemento de getrandom e /dev/random nos sistemas ARM64 que proporcionan instrucións RNG.
    • Implantación dunha curva elíptica Curva25519 substituído para a opción da biblioteca HACL, para o que dado Proba matemática da verificación formal da fiabilidade.
    • Engadido mecanismo para informar sobre páxinas de memoria libres. Usando este mecanismo, os sistemas convidados poden transmitir información sobre páxinas que xa non se usan ao sistema host, e este pode recuperar os datos da páxina.
    • En vfio/pci engadido soporte para SR-IOV (virtualización de E/S de raíz única).
  • Servizos de memoria e sistema
    • De 80 a 100 caracteres aumentou limitación da lonxitude máxima das liñas nos textos fonte. Ao mesmo tempo, recoméndaselles aos desenvolvedores que se manteñan dentro de 80 caracteres por liña, pero este xa non é un límite duro. Ademais, se supera o límite de tamaño de liña, agora aparecerá unha advertencia de compilación só se se executa checkpatch coa opción '--strict'. O cambio permitirá non distraer aos desenvolvedores manipulación con espazos e sentirse máis libre ao aliñar o código, así como impedirá ruptura excesiva da liña, inquietante comprensión e busca de código.
    • Engadido soporte para o modo de arranque mixto EFI, que lle permite cargar un núcleo de 64 bits desde un firmware de 32 bits que se executa nunha CPU de 64 bits sen utilizar un cargador de arranque especializado.
    • Incluído sistema para identificar e depurar bloqueos divididos ("bloqueo dividido"), que ocorre ao acceder a datos non aliñados na memoria debido ao feito de que ao executar unha instrución atómica, os datos cruzan dúas liñas de caché da CPU. Tal bloqueo ten como resultado un éxito de rendemento significativo (1000 ciclos máis lento que unha operación atómica en datos que caen nunha liña de caché). Dependendo do parámetro de arranque "split_lock_detect", o núcleo pode detectar tales bloqueos sobre a marcha e emitir avisos ou enviar un sinal SIGBUS á aplicación que causa o bloqueo.
    • O programador de tarefas proporciona un seguimento dos sensores de temperatura (Presión térmica) e implementado tendo en conta o sobreenriquecido á hora de colocar as tarefas. Usando as estatísticas proporcionadas, o gobernador térmico pode axustar a frecuencia máxima da CPU cando se sobrequece, e o programador de tarefas agora ten en conta a redución da potencia de cálculo debido a esa redución de frecuencia ao programar as tarefas para executar (anteriormente, o programador respondía aos cambios). en frecuencia con certo atraso, durante algún tempo tomando decisións baseadas en presupostos inflados sobre os recursos informáticos dispoñibles).
    • O programador de tarefas inclúe indicadores invariantes seguimento de carga, que lle permite estimar correctamente a carga, independentemente da frecuencia de funcionamento actual da CPU. O cambio permítelle prever con máis precisión o comportamento das tarefas en condicións de cambios dinámicos na tensión e na frecuencia da CPU. Por exemplo, unha tarefa que consumía 1/3 dos recursos da CPU a 1000 MHz consumirá 2/3 dos recursos cando a frecuencia caia a 500 MHz, o que anteriormente creaba unha falsa suposición de que se estaba a executar a plena capacidade (é dicir, apareceron tarefas). máis grande para o planificador só reducindo a frecuencia, o que levou a que se tomasen decisións incorrectas no governador schedutil cpufreq).
    • O controlador Intel P-state, que se encarga de seleccionar os modos de rendemento, cambiouse para usar scheduleutil.
    • Implementouse a capacidade de usar o subsistema BPF cando o núcleo está a executarse en tempo real (PREEMPT_RT). Anteriormente, cando se activaba PREEMPT_RT, era necesario desactivar BPF.
    • Engadiuse un novo tipo de programa BPF - BPF_MODIFY_RETURN, que se pode anexar a unha función do núcleo e cambiar o valor que devolve esta función.
    • Engadido oportunidade Usando a chamada ao sistema clone3() para crear un proceso nun cgroup que sexa diferente do cgroup pai, permitindo que o proceso pai aplique restricións e habilite a contabilidade inmediatamente despois de xerar un novo proceso ou fío. Por exemplo, un xestor de servizos pode asignar directamente novos servizos a grupos c separados, e os novos procesos, cando se colocan en grupos c "conxelados", deteranse inmediatamente.
    • en Kbuild engadido soporte para a variable de ambiente "LLVM=1" para cambiar ao kit de ferramentas Clang/LLVM ao construír o núcleo. Os requisitos para a versión binutils levantáronse (2.23).
    • Engadiuse a debugfs unha sección /sys/kernel/debug/kunit/ cos resultados das probas kunit.
    • Engadiuse o parámetro de arranque do núcleo pm_debug_messages (análogo a /sys/power/pm_debug_messages), que permite a saída de información de depuración sobre o funcionamento do sistema de xestión de enerxía (útil cando se depuran problemas de hibernación e modo de espera).
    • Á interface de E/S asíncrona io_uring apoio engadido empalme () и selección de buffer atómico.
    • Perfil de cgroup mellorado usando o kit de ferramentas perf. Anteriormente, perf só podía perfilar tarefas nun cgroup específico e non podía descubrir a que cgroup pertence a mostra actual. perf agora recibe información de cgroup para cada mostra, o que lle permite perfilar máis dun cgroup e aplicar a clasificación por
      cgroup nos informes.

    • cgroupfs, un pseudo-FS para xestionar cgroups, engadiu soporte para atributos estendidos (xattrs), cos que, por exemplo, podes deixar información adicional para os controladores no espazo do usuario.
    • No controlador de memoria cgroup engadidoe soporte para a protección recursiva do valor "memory.low", que regula a cantidade mínima de RAM proporcionada aos membros do grupo. Ao montar unha xerarquía cgroup coa opción "memory_recursiveprot", o valor de "memory.low" que se establece para os nodos inferiores distribuirase automaticamente a todos os nodos fillos.
    • Engadido Framework Uacce (Unified/User-space-access-intended Accelerator Framework) para compartir enderezos virtuais (SVA, Shared Virtual Addressing) entre a CPU e os dispositivos periféricos, permitindo aos aceleradores de hardware acceder ás estruturas de datos da CPU principal.
  • Arquitecturas de hardware
    • Para a arquitectura ARM, implícase a capacidade de recuperación de memoria en quente.
    • Para a arquitectura RISC-V, engadiuse soporte para a conexión en quente e a eliminación de CPU (enchufe en quente de CPU). Para RISC-V de 32 bits, está implementado eBPF JIT.
    • Eliminouse a posibilidade de usar sistemas ARM de 32 bits para executar contornas convidadas KVM.
    • Eliminouse a implementación "dummy" de NUMA para a arquitectura s390, para a que non se atoparon casos de uso para conseguir melloras de rendemento.
    • Para ARM64, engadiuse soporte para a extensión AMU (Activity Monitors Unit), definida en ARMv8.4 e que proporciona contadores de rendemento que se usan para calcular os factores de corrección da escala de frecuencia no programador de tarefas.
  • Оборудование
    • Engadido soporte para dispositivos vDPA que utilizan unha canle de intercambio de datos que cumpre coas especificacións de virtio. Os dispositivos vDPA poden ser equipos conectados fisicamente ou dispositivos virtuais emulados por software.
    • No subsistema GPIO apareceu un novo comando ioctl() para supervisar os cambios, que lle permite informar o proceso sobre os cambios no estado de calquera liña GPIO. Como exemplo de uso do novo comando proposto utilidade gpio-watch.
    • No controlador DRM i915 para tarxetas de vídeo Intel incluído soporte predeterminado para chips Tigerlake ("Gen12") e soporte inicial adicional para o control de retroiluminación OLED. Compatibilidade mellorada para Ice Lake, Elkhart Lake, Baytrail e chips Haswell.
    • No controlador amdgpu engadido capacidade de cargar firmware no chip USBC para ASIC. Compatibilidade mellorada para chips AMD Ryzen 4000 "Renoir". Agora hai soporte para controlar paneis OLED. Mostra o estado do firmware en debugfs.
    • A capacidade de usar OpenGL 4 en sistemas convidados engadiuse ao controlador vmwgfx DRM para sistemas de virtualización VMware (anteriormente era compatible con OpenGL 3.3).
    • Engadiuse un novo controlador DRM para o sistema de visualización da plataforma TI Keystone.
    • Engadíronse controladores para paneles LCD: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D350, Rocktech
    • Ao sistema de xestión de enerxía engadido soporte para a plataforma Intel Jasper Lake (JSL) baseada en Atom.
    • Engadido soporte para o portátil Pinebook Pro baseado en Rockchip RK3399, tableta e smartphone PineTab Pine64 PinePhone baseado no Allwinner A64.
    • Engadido soporte para novos códecs e chips de audio:
      Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.

    • Engadido soporte para placas e plataformas ARM Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron “sl28”, 11 opcións de placas TechNexion Pico i.MX6, tres novas opcións de Toradex Colibri, Samsung S7710 Galaxy Xcover 2 baseado en ST -Ericsson u8500, DH Electronics DHCOM SoM e PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.

Fonte: opennet.ru

Engadir un comentario