Versión do núcleo de Linux 5.14

Despois de dous meses de desenvolvemento, Linus Torvalds presentou o lanzamento do kernel 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.

Principais novidades:

  • Subsistema de disco, E/S e sistemas de ficheiros
    • Implementouse un novo controlador de priorización de E/S para cgroups, 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.
    • O sistema de ficheiros ext4 implementa un novo comando ioctl, EXT4_IOC_CHECKPOINT, que obriga a que todas as transaccións pendentes do diario e os seus búfers asociados sexan lixadas no disco, e tamén sobrescribe a área utilizada polo diario no almacenamento. O cambio preparouse como parte dunha iniciativa para evitar fugas de información dos sistemas de ficheiros.
    • Realizáronse optimizacións de rendemento para Btrfs: 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, redeseñouse a implementación da caché do búfer, que pasou a asignar páxinas de memoria en modo por lotes. Mellora a eficiencia da caché.
    • F2FS engade unha opción para operar en modo de só lectura e implementa 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 baseada nunha máscara, propúxose unha nova opción de montaxe nocompress.
    • Traballouse no controlador exFAT para mellorar a compatibilidade con algún almacenamento da cámara dixital.
    • Engadiuse a chamada ao sistema quotactl_fd(), que lle 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 controlador "raw" foi eliminado do núcleo, proporcionando acceso sen búfer para bloquear dispositivos a través da interface /dev/raw. Esta funcionalidade implementouse desde hai tempo en aplicacións que usan a marca O_DIRECT.
  • Servizos de memoria e sistema
    • O programador de tarefas implementa un novo modo de programación, SCHED_CORE, que che permite controlar que procesos se poden executar 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 as tarefas de confianza e non se executen no mesmo fío SMT (Hyper Threading). .
    • Para cgroup, implementouse o soporte para a operación de matar, o 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 un parámetro de 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á obrigado a deterse 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, implementa a capacidade de definir límites de tempo limitado, o que permite unha mellor regulación das cargas de traballo 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.
    • Engadiuse unha infraestrutura inicial para a creación de cargadores de programas BPF, que permitirán ademais cargar só os programas BPF asinados cunha clave dixital de confianza.
    • Engadiuse unha nova operación futex FUTEX_LOCK_PI2, que utiliza un temporizador monótono para calcular un tempo de espera que ten en conta o tempo que pasa o sistema no modo de suspensión.
    • Para a arquitectura RISC-V, implícase o soporte para páxinas de memoria grande (Transparent Huge-Pages) e a capacidade de utilizar o mecanismo KFENCE para detectar erros ao traballar con memoria.
    • A chamada ao sistema madvise(), que proporciona un medio para optimizar a xestión da memoria dun proceso, engadiu as marcas MADV_POPULATE_READ e MADV_POPULATE_WRITE para xerar un "error de páxina" en todas as páxinas de memoria asignadas para ler ou escribir operacións, sen realizar unha lectura ou escritura real. (predeterminado). O uso de bandeiras pode ser útil para reducir os atrasos na execución do programa, debido á 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.
    • O sistema de probas unitarias kunit engadiu soporte para realizar probas no ambiente QEMU.
    • Engadíronse novos trazadores: "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
    • Engadiuse a chamada ao sistema memfd_secret() para crear unha área de memoria privada nun espazo de enderezos illado, visible só para o proceso propietario, non reflectida para outros 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 única 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 o problema de interromper un controlador no espazo do usuario cando chega un sinal.
    • Engadiuse un novo mecanismo para xestionar os límites de recursos no espazo de nomes de ID de usuario, que vincula os contadores rlimit individuais a un usuario no "espazo de nomes de usuario". O cambio resolve o problema co 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 polo acceso a bloques de memoria xa liberados, desbordamento do búfer, accesos antes da inicialización e uso fóra do contexto actual.
    • As instalacións de autenticación de punteiro da plataforma ARM64 agora pódense 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.
    • O modo de usuario Linux engadiu soporte para o uso de controladores para dispositivos PCI cun bus PCI virtual, implementado polo controlador PCI-over-virtio.
    • Para sistemas x86, engadiuse soporte para o dispositivo paravirtualizado virtio-iommu, o que permite que as solicitudes IOMMU como ATTACH, DETACH, MAP e UNMAP se envíen 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 que manipulan a fuga de información a través de canles de terceiros que se produce durante o funcionamento do mecanismo TAA (TSX Asynchronous Abort).
  • Subsistema de rede
    • Integración 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. A nova versión engade un mecanismo para establecer as súas propias políticas de hash de tráfico para IPv4 e IPv6 (política de hash de rutas múltiples), o que permite determinar a partir do espazo do usuario que campos dos paquetes, incluídos os encapsulados, se utilizarán ao calcular o hash que determina o elección do camiño para o paquete.
    • Engadiuse ao transporte virtual virtio soporte para sockets 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 simultaneamente en todos os sockets conectados a través de SO_REUSEPORT, o que simplifica a creación de aplicacións de servidor multiproceso. . A nova versión engade ferramentas 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).
  • Оборудование
    • O controlador amdgpu ofrece 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 a 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, a compatibilidade con ASPM (Active State Power Management) está habilitada de forma predeterminada, que antes estaba habilitada só para as GPU Navi 1x, Vega e Polaris.
    • Para os chips AMD, engadiuse soporte para a memoria virtual compartida (SVM, memoria virtual compartida) baseándose 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. 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.
    • Engadiuse soporte inicial para a tecnoloxía AMD Smart Shift, que cambia de forma dinámica a configuración de enerxía da CPU e da GPU en portátiles cun chipset AMD e tarxeta gráfica para mellorar o rendemento para xogos, edición de vídeo e renderizado 3D.
    • O controlador i915 para tarxetas gráficas Intel inclúe soporte para chips Intel Alderlake P.
    • Engadiuse o controlador drm/hyperv para o adaptador de gráficos virtuais Hyper-V.
    • Engadido soporte para o ordenador todo-en-un Raspberry Pi 400.
    • Engadiuse o controlador dell-wmi-privacy para admitir os interruptores de cámara e micrófono de hardware incluídos nos portátiles Dell.
    • Para os portátiles Lenovo, engadiuse unha interface WMI para cambiar a configuración da BIOS a través de sysfs /sys/class/firmware-attributes/.
    • Soporte ampliado 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. Engadíronse parches para reducir os atrasos antes de que o audio comece a reproducirse nos dispositivos USB.

Fonte: opennet.ru

Engadir un comentario