Núcleo Linux 5.14

Núcleo Linux 5.14

Despois de dous meses de desenvolvemento, Linus Torvalds introducido liberación do núcleo Linux 5.14. Entre os cambios máis salientables: novas chamadas ao sistema quotactl_fd() e memfd_secret(), eliminación de controladores ide e en bruto, novo controlador de prioridade de E/S para cgroup, modo de programación de tarefas SCHED_CORE, infraestrutura para a creación de cargadores de programas BPF verificados.

A nova versión inclúe 15883 correccións de 2002 desenvolvedores, o tamaño do parche é de 69 MB (os cambios afectaron a 12580 ficheiros, engadíronse 861501 liñas de código, elimináronse 321654 liñas). Aproximadamente o 47% de todos os cambios introducidos en 5.14 están relacionados con controladores de dispositivos, aproximadamente o 14% dos cambios están relacionados coa actualización de código específico de arquitecturas de hardware, o 13% están relacionados coa pila de rede, o 3% están relacionados con sistemas de ficheiros e o 3% están relacionados cos subsistemas do núcleo interno.

O principal innovacións:

  • subsistema de disco, entrada/saída e sistemas de ficheiros:
    • para cgroup implementado novo controlador de prioridade de E/S: rq-qos, que pode controlar a prioridade de procesamento das solicitudes de bloqueo de dispositivos xerados polos membros de cada cgroup. Engadiuse un novo soporte de controlador prioritario ao programador de E/S de mq-deadline;
    • no sistema de ficheiros ext4 implementado novo comando ioctl EXT4_IOC_CHECKPOINT, que forza todas as transaccións pendentes do rexistro e os búfers asociados ao disco, e tamén sobrescribe a área utilizada polo rexistro no almacenamento. O cambio preparouse como parte dunha iniciativa para evitar fugas de información dos sistemas de ficheiros;
    • en Btrfs introducido Optimizacións de rendemento: ao eliminar o rexistro innecesario de atributos estendidos durante a execución de fsync, o rendemento das operacións intensivas con atributos estendidos aumentou ata un 17%. Ademais, cando se realizan operacións de recorte que non afectan ás extensións, a sincronización total está desactivada, o que reduce o tempo de operación nun 12%. Engadiuse unha configuración a sysfs para limitar o ancho de banda de E/S ao comprobar o FS. Engadíronse chamadas ioctl para cancelar as operacións de redimensionamento e eliminación do dispositivo;
    • en XFS reelaborado implementación dunha memoria caché, que se transfire á asignación de páxinas de memoria en modo por lotes. Mellora a eficiencia da caché;
    • F2FS engadiu unha opción para traballar en modo de só lectura e implementou un modo de caché de bloques comprimidos (compress_cache) para mellorar o rendemento de lectura aleatoria. Implementouse soporte para comprimir ficheiros asignados á memoria mediante a operación mmap(). Para desactivar selectivamente a compresión de ficheiros por máscara, propúxose unha nova opción de montaxe nocompress;
    • traballouse no controlador exFAT para mellorar a compatibilidade co almacenamento dalgunhas cámaras dixitais;
    • chamada ao sistema engadido quotactl_fd(), que permite xestionar as cotas non a través dun ficheiro de dispositivo especial, senón especificando un descritor de ficheiros asociado ao sistema de ficheiros para o que se aplica a cota;
    • Os controladores antigos para dispositivos de bloque coa interface IDE foron eliminados do núcleo; foron substituídos durante moito tempo polo subsistema libata. O soporte para dispositivos antigos mantívose na súa totalidade, os cambios só se refiren á capacidade de usar controladores antigos, cando se usan os que se chamaban /dev/hd*, e non /dev/sd*;
    • O controlador "raw" foi eliminado do núcleo, proporcionando acceso sen búfer para bloquear dispositivos a través da interface /dev/raw. Esta funcionalidade foi implementada durante moito tempo en aplicacións que usan a marca O_DIRECT;
  • memoria e servizos do sistema:
    • implementouse un novo modo de programación no planificador de tarefas SCHED_CORE, que permite controlar que procesos poden executarse xuntos no mesmo núcleo de CPU. A cada proceso pódeselle asignar un identificador de cookie que define o ámbito de confianza entre procesos (por exemplo, pertencer ao mesmo usuario ou contedor). Ao organizar a execución do código, o planificador pode asegurarse de que un núcleo de CPU só se comparte entre os procesos asociados co mesmo propietario, o que se pode usar para bloquear algúns ataques de Spectre evitando que se executen tarefas fiables e non fiables no mesmo fío SMT (Hyper Threading). ;
    • para o mecanismo cgroup, implementouse o soporte para a operación de matar, que lle permite eliminar todos os procesos asociados ao grupo á vez (enviar SIGKILL) escribindo “1” no ficheiro virtual cgroup.kill;
    • capacidades ampliadas relacionadas coa resposta á detección de bloqueos divididos ("bloqueos divididos") que se producen 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 leva a unha baixada significativa no rendemento, polo que anteriormente era posible finalizar de forma forzada a aplicación que provocou o bloqueo. A nova versión engade o parámetro da liña de comandos do núcleo "split_lock_detect=ratelimit:N", que lle permite definir un límite de todo o sistema na taxa de operacións de bloqueo por segundo, despois de superar o cal calquera proceso que se converteu na orixe dun bloqueo dividido. ser forzado a parar durante 20 ms en lugar de finalizar;
    • O controlador de ancho de banda cgroup CFS (controlador de ancho de banda CFS), que determina canto tempo de procesador se pode asignar a cada cgroup, ten a capacidade de definir límites limitados por unha determinada duración de acción, o que permite unha mellor regulación das cargas sensibles á latencia. Por exemplo, establecer cpu.cfs_quota_us en 50000 e cpu.cfs_period_us en 100000 permitirá que un grupo de procesos perda 100 ms de tempo de CPU cada 50 ms;
    • engadido infraestrutura inicial para a creación de cargadores de programas BPF, que permitirá ademais a descarga de só programas BPF asinados cunha clave dixital fiable;
    • engadiu unha nova operación futex FUTEX_LOCK_PI2, que utiliza un temporizador monótono para calcular o tempo de espera, que ten en conta o tempo que leva o sistema en modo de suspensión;
    • para a arquitectura RISC-V, soporte para páxinas de memoria grande (Transparent Huge-Pages) e a capacidade de usar o KFENCE identificar erros ao traballar coa memoria;
    • na chamada ao sistema madvise(), que proporciona un medio para optimizar a xestión da memoria do proceso, engadido Marcadores MADV_POPULATE_READ e MADV_POPULATE_WRITE para xerar un "error de páxina" en todas as páxinas de memoria asignadas para operacións de lectura ou escritura, sen realizar unha lectura ou escritura real (predeterminado). O uso de bandeiras pode ser útil para reducir os atrasos na execución do programa, grazas á execución proactiva do manejador de “error de páxina” para todas as páxinas non asignadas á vez, sen esperar o acceso real a elas;
    • nun sistema de probas unitarias kunit engadido soporte para realizar probas no contorno QEMU;
    • novos trazadores engadiron: "osnoise" para rastrexar os atrasos das aplicacións causados ​​polo manexo de interrupcións, e " timerlat " para mostrar información detallada sobre os atrasos ao espertar dun sinal de temporizador;
  • virtualización e seguridade:
    • engadido chamada do sistema memfd_secret(), que permite crear unha área de memoria privada nun espazo de enderezos illado, visible só para o proceso propietario, non reflectida noutros procesos e non accesible directamente ao núcleo;
    • no sistema de filtrado de chamadas do sistema seccomp, ao mover os controladores de bloqueo ao espazo do usuario, é posible utilizar unha operación atómica para crear un descritor de ficheiros para unha tarefa illada e devolvelo ao procesar unha chamada ao sistema. A operación proposta resolve problema con interrupción do controlador no espazo do usuario cando chega un sinal;
    • engadido novo mecanismo para xestionar a limitación de recursos no espazo de nomes de ID de usuario, que une os contadores rlimit individuais a un usuario no "espazo de nomes de usuario". O cambio resolve o problema do uso de contadores de recursos comúns cando un usuario executa procesos en diferentes contedores;
    • o hipervisor KVM para sistemas ARM64 engadiu a posibilidade de utilizar a extensión MTE (MemTag, Memory Tagging Extension) nos sistemas convidados, que permite ligar etiquetas a cada operación de asignación de memoria e organizar a comprobación do uso correcto dos punteiros para bloquear a explotación de vulnerabilidades causadas por acceder a bloques de memoria xa liberados, desbordar búfers, accesos antes da inicialización e uso fóra do contexto actual;
    • A autenticación de punteiro proporcionada pola plataforma ARM64 agora pódese configurar por separado para o núcleo e o espazo de usuario. A tecnoloxía permítelle utilizar instrucións ARM64 especializadas para verificar os enderezos de retorno mediante sinaturas dixitais que se almacenan nos bits superiores non utilizados do propio punteiro;
    • en modo de usuario Linux engadido soporte para o uso de controladores para dispositivos PCI cun bus PCI virtual, implementado polo controlador PCI-over-virtio;
    • para os sistemas x86, engadiuse soporte para o dispositivo paravirtualizado virtio-iommu, que lle permite enviar solicitudes IOMMU, como ATTACH, DETACH, MAP e UNMAP, a través do transporte virtio sen emular táboas de páxinas de memoria;
    • Para as CPU Intel, desde a familia Skylake ata Coffee Lake, o uso de Intel TSX (Transactional Synchronization Extensions), que proporcionan ferramentas para mellorar o rendemento das aplicacións multiproceso eliminando dinámicamente as operacións de sincronización innecesarias, está desactivado por defecto. As extensións están desactivadas debido á posibilidade de ataques Zombieload, manipulando a fuga de información a través de canles de terceiros que se produce durante o funcionamento do mecanismo de interrupción asíncrona das operacións (TAA, TSX Asynchronous Abort);
  • subsistema de rede:
    • integración continuada no núcleo de 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. No novo número engadido un mecanismo para establecer as súas propias políticas de hash de tráfico para IPv4 e IPv6 (política de hash de múltiples rutas), que permite determinar desde o espazo do usuario que campos dos paquetes, incluídos os encapsulados, se empregarán ao calcular o hash que determina a elección da ruta. para o paquete;
    • Engadiuse o soporte de socket ao virtio de transporte virtual SOCK_SEQPACKET (transmisión ordenada e fiable de datagramas);
    • Ampliáronse as capacidades do mecanismo de socket SO_REUSEPORT, que permite que varios sockets de escoita se conecten a un porto á vez para recibir conexións coa distribución de solicitudes entrantes simultáneamente en todos os sockets conectados mediante SO_REUSEPORT, o que simplifica a creación de aplicacións de servidor multiproceso. . Na nova versión engadido medios para transferir o control a outro socket en caso de falla ao procesar unha solicitude polo socket seleccionado inicialmente (resolve o problema coa perda de conexións individuais ao reiniciar os servizos);
  • equipamento:
    • no controlador amdgpu implementado soporte para a nova serie de GPU AMD Radeon RX 6000, co nome en clave "Beige Goby" (Navi 24) e "Yellow Carp", así como compatibilidade mellorada para GPU Aldebaran (gfx90a) e APU Van Gogh. Engadida a posibilidade de traballar simultaneamente con varios paneis eDP. Para APU Renoir, implementouse o soporte para traballar con búfers cifrados na memoria de vídeo (TMZ, Trusted Memory Zone). Engadiuse compatibilidade para tarxetas gráficas desconectadas en quente. Para as GPU Radeon RX 6000 (Navi 2x) e as GPU AMD máis antigas, o soporte para o mecanismo de aforro de enerxía ASPM (Active State Power Management) está habilitado de forma predeterminada, que antes estaba habilitado só para as GPU Navi 1x, Vega e Polaris;
    • para os chips AMD, engadiuse soporte para memoria virtual compartida (SVM, memoria virtual compartida) baseado no subsistema HMM (Xestión de memoria heteroxénea), que permite o uso de dispositivos coas súas propias unidades de xestión de memoria (MMU, unidade de xestión de memoria), que pode acceder á memoria principal. Incluíndo o uso de HMM, pode organizar un espazo de enderezos compartido entre a GPU e a CPU, no que a GPU pode acceder á memoria principal do proceso;
    • apoio tecnolóxico inicial engadido AMD Smart Shift, que cambia dinámicamente os parámetros de consumo de enerxía da CPU e da GPU en portátiles con chipset e tarxeta gráfica AMD para aumentar o rendemento ao xogar, editar vídeos e renderizar 3D;
    • no controlador i915 para tarxetas de vídeo Intel incluído soporte para chips Intel Alderlake P;
    • engadiu o controlador drm/hyperv para o adaptador de gráficos virtuais Hyper-V;
    • engadido controlador de gráficos simpledrm que usa o framebuffer EFI-GOP ou VESA proporcionado polo firmware UEFI ou o BIOS para a saída. O obxectivo principal do controlador é proporcionar capacidades de saída gráfica durante as fases iniciais do arranque, antes de que se poida utilizar un controlador DRM completo. O controlador tamén se pode utilizar como solución temporal para equipos que aínda non teñen controladores DRM nativos;
    • engadido soporte informático todo en un Raspberry Pi 400;
    • Engadiuse o controlador dell-wmi-privacy para admitir os interruptores de hardware de cámara e micrófono incluídos nos portátiles Dell;
    • para portátiles Lenovo engadido Interface WMI para cambiar os parámetros da BIOS mediante sysfs /sys/class/firmware-attributes/;
    • expandido soporte para dispositivos con interface USB4;
    • engadido soporte para tarxetas de son e códecs AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 e Texas Instruments TAS2505. Compatibilidade de audio mellorada nos portátiles HP e ASUS. Engadido parches para reducir os atrasos antes de que o audio comece a reproducirse en dispositivos cunha interface USB.

Fonte: opennet.ru.

Fonte: linux.org.ru