Lançamento do kernel Linux 5.14

Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do núcleo Linux 5.14. Entre as mudanças mais notáveis estão: novas chamadas de sistema quotactl_fd() e memfd_secret(), remoção dos drivers ide e raw, um novo controlador de prioridade de entrada/saída para cgroup, o modo de escalonamento de tarefas SCHED_CORE e uma infraestrutura para a criação de carregadores de programas BPF verificados.

A nova versão conta com 15.883 correções de 2.002 desenvolvedores, o tamanho do patch é de 69 MB (as mudanças afetaram 12.580 arquivos, 861.501 linhas de código foram adicionadas e 321.654 linhas foram removidas). Aproximadamente 47% de todas as alterações apresentadas no 5.14 estão relacionadas a drivers de dispositivos, cerca de 14% dessas alterações referem-se à atualização de código específico de arquitetura de hardware, 13% estão ligadas à pilha de rede, 3% às sistemas de arquivos e 3% às subsistemas internos do núcleo.

Principais novidades:

  • Subsistema de disco, entrada/saída e sistemas de arquivos
    • Para cgroup, foi implementado um novo controlador de priorização de entrada/saída — rq-qos, que pode gerenciar a prioridade de processamento de solicitações a dispositivos de bloco geradas pelos membros de cada cgroup. O suporte para o novo controlador de prioridade foi adicionado ao planejador de entrada/saída mq-deadline.
    • No sistema de arquivos ext4, foi implementado um novo comando ioctl EXT4_IOC_CHECKPOINT, que força a gravação no disco de todas as transações pendentes do log e os buffers associados, além de regravar a área usada pelo log no armazenamento. Essa mudança foi preparada como parte da iniciativa para prevenir vazamentos de informação dos sistemas de arquivos.
    • No Btrfs, otimizações de desempenho foram feitas: ao eliminar o registro desnecessário de atributos estendidos durante a execução do fsync, o desempenho de operações intensivas com atributos estendidos aumentou em até 17%. Além disso, ao realizar operações de truncamento que não afetam os extents, a execução da sincronização completa foi desativada, reduzindo o tempo de execução da operação em 12%. Foi adicionada uma configuração no sysfs para limitar a largura de banda de entrada/saída durante a verificação do FS. Adicionados chamadas ioctl para reverter operações de redimensionamento e remoção de dispositivos.
    • No XFS, a implementação do cache de buffer foi reformulada, transferida para a alocação de páginas de memória em modo de lote. A eficiência do cache foi aumentada.
    • No F2FS foi adicionada uma opção para operar em modo somente leitura e implementado um modo de cache de blocos comprimidos (compress_cache) para melhorar o desempenho da leitura aleatória. O suporte à compressão de arquivos refletidos na memória por meio da operação mmap() foi implementado. Para desativar seletivamente a compressão de arquivos por máscara, uma nova opção de montagem nocompress foi proposta.
    • No driver exFAT, foram feitas melhorias na compatibilidade com armazenamentos de algumas câmeras digitais.
    • Foi adicionado o syscall quotactl_fd(), que permite gerenciar quotas não por meio de um arquivo de dispositivo especial, mas através da indicação de um descritor de arquivo associado ao sistema de arquivos para o qual a quota é aplicada.
    • Os drivers antigos para dispositivos de bloco com interface IDE foram removidos do núcleo, os quais foram substituídos pela subsistema libata há muito tempo.
    • O driver 'raw', que fornece acesso não bufferizado a dispositivos de bloco por meio da interface /dev/raw, foi removido do núcleo. Essa funcionalidade há muito é realizada em aplicativos com a flag O_DIRECT.
  • Memória e serviços do sistema
    • No agendador de tarefas, foi implementado um novo modo de agendamento SCHED_CORE, permitindo gerenciar quais processos podem ser executados em conjunto em um núcleo de CPU. Cada processo pode receber um identificador de cookie, que define uma área de confiança entre processos (por exemplo, pertencente ao mesmo usuário ou container). Ao organizar a execução do código, o agendador pode garantir que o uso de um núcleo de CPU seja compartilhado apenas entre processos relacionados a um único proprietário, o que pode ser usado para bloquear alguns ataques da classe Spectre ao evitar a execução em uma única thread SMT (Hyper Threading) de tarefas confiáveis e não confiáveis.
    • Para cgroup, foi implementado o suporte à operação kill, permitindo terminar todos os processos associados ao grupo de uma vez (enviando SIGKILL), através da gravação '1' no arquivo virtual cgroup.kill.
    • As capacidades relacionadas à resposta ao diagnóstico de bloqueios divididos ("split lock"), que ocorrem ao acessar dados desalinhados na memória devido ao fato de que, ao executar uma instrução atômica, os dados cruzam duas linhas de cache da CPU, foram expandidas. Esses bloqueios levam a uma queda significativa no desempenho, portanto, anteriormente existia a opção de forçar o encerramento do aplicativo que provocou o bloqueio. Na nova versão, foi adicionado o parâmetro da linha de comando do kernel "split_lock_detect=ratelimit:N", que permite definir um limite geral de intensidade das operações de bloqueio por segundo, após o qual qualquer processo que se torne a fonte de um bloqueio dividido será forçosamente interrompido por 20 ms, em vez de ser encerrado.
    • No controlador de cgroup de largura de banda CFS (CFS bandwidth controller), que define quanto tempo de CPU pode ser alocado para cada cgroup, foi implementada a possibilidade de definir limites atrelados a um determinado período de validade, permitindo regular melhor as cargas sensíveis a latências. Por exemplo, definindo o valor cpu.cfs_quota_us em 50000 e cpu.cfs_period_us em 100000, um grupo de processos poderá gastar 50 ms de tempo de CPU a cada 100 ms.
    • Foi adicionada a infraestrutura inicial para a criação de carregadores de programas BPF, que permitirá no futuro permitir o carregamento apenas de programas BPF assinados por uma chave digital confiável.
    • Foi adicionada uma nova operação futex FUTEX_LOCK_PI2, que utiliza um timer monótono para calcular o timeout, considerando o tempo gasto pelo sistema em modo de espera.
    • Para a arquitetura RISC-V, foi implementado suporte a grandes páginas de memória (Transparent Huge-Pages) e a possibilidade de aplicação do mecanismo KFENCE para detectar erros no manuseio de memória.
    • Na chamada de sistema madvise(), foram adicionadas as flags MADV_POPULATE_READ e MADV_POPULATE_WRITE para gerar 'page fault' em todas as páginas de memória refletidas para operações de leitura ou escrita, sem realizar a leitura ou escrita reais (prefault). A aplicação das flags pode ser útil para reduzir a latência durante a execução do programa, permitindo a execução proativa do manipulador de 'page fault' de uma só vez para todas as páginas não alocadas, sem esperar pela abordagem real a elas.
    • No sistema de testes unitários kunit, foi adicionada a suporte para executar testes no ambiente QEMU.
    • Novos rastreadores foram adicionados: 'osnoise' para monitorar latências em aplicativos causadas pelo tratamento de interrupções, e 'timerlat' para fornecer informações detalhadas sobre latências durante despertadores de temporizadores.
  • Virtualização e segurança
    • Foi adicionado o chamado de sistema memfd_secret(), que permite criar uma área de memória privada em um espaço de endereços isolado, visível apenas ao processo proprietário, não refletida em outros processos e diretamente inacessível ao núcleo.
    • No sistema de filtragem de chamadas de sistema seccomp, ao mover manipuladores de bloqueio para o espaço do usuário, foi possibilitada a utilização de uma operação atômica para criar um descritor de arquivo para a tarefa isolada e retorná-lo durante o processamento da chamada de sistema. A operação proposta resolve o problema da interrupção do manipulador no espaço do usuário ao receber um sinal.
    • Foi adicionado um novo mecanismo para gerenciar a limitação de recursos no espaço de nomes de identificadores de usuários, que vincula contadores rlimit separados ao usuário no 'user namespace'. A mudança resolve o problema da aplicação de contadores de recursos compartilhados ao iniciar processos com um único usuário em diferentes contêineres.
    • No hipervisor KVM Para sistemas ARM64, foi adicionada a capacidade de usar a extensão MTE (MemTag, Memory Tagging Extension) em sistemas convidados, permitindo vincular tags a cada operação de alocação de memória e organizar a verificação da correção do uso de ponteiros para bloquear a exploração de vulnerabilidades causadas pelo acesso a blocos de memória já liberados, sobrecargas de buffer, acessos antes da inicialização e uso fora do contexto atual.
    • Os recursos de autenticação de ponteiros (Pointer Authentication) fornecidos pela plataforma ARM64 agora podem ser configurados separadamente para o núcleo e o espaço do usuário. A tecnologia permite o uso de instruções especializadas ARM64 para verificar endereços de retorno por meio de assinaturas digitais armazenadas nos bits superiores não utilizados do próprio ponteiro.
    • No User-mode Linux, foi adicionada suporte para o uso de drivers para dispositivos PCI com um barramento virtual PCI, implementado pelo driver PCI-over-virtio.
    • Para sistemas x86, foi adicionada suporte para o dispositivo virtualizado virtio-iommu, permitindo o envio de requisições IOMMU, como ATTACH, DETACH, MAP e UNMAP, sobre o transporte virtio sem emulação de tabelas de páginas de memória.
    • Para CPUs Intel, desde a família Skylake até a Coffee Lake, o uso das extensões Intel TSX (Transactional Synchronization Extensions) está desativado por padrão, proporcionando recursos para aumentar o desempenho de aplicações multithreaded ao dinamicamente excluir operações de sincronização desnecessárias. As extensões estão desativadas devido à possibilidade de ataques Zombieload, que manipulam o vazamento de informações por canais laterais, ocorrendo durante o funcionamento do mecanismo de interrupção assíncrona das operações (TAA, TSX Asynchronous Abort).
  • Subsistema de Rede
    • A integração ao núcleo MPTCP (MultiPath TCP), uma extensão do protocolo TCP para permitir a operação de conexões TCP com entrega de pacotes simultaneamente por vários caminhos através de diferentes interfaces de rede, foi continuada. endereços IPNa nova versão, foi adicionado um mecanismo para definir políticas próprias de hashing de tráfego para IPv4 e IPv6 (multipath hash policy), permitindo que do espaço do usuário se determine quais campos nos pacotes, incluindo os encapsulados, serão usados para calcular o hash que determina a escolha do caminho para o pacote.
    • O transporte virtual virtio agora suporta sockets SOCK_SEQPACKET (transmissão ordenada e confiável de datagramas).
    • As funcionalidades do mecanismo de soquetes SO_REUSEPORT foram ampliadas, permitindo que vários soquetes ouvintes se conectem a uma única porta para receber conexões, distribuindo as solicitações recebidas simultaneamente entre todos os soquetes conectados através do SO_REUSEPORT, facilitando assim a criação de aplicativos de servidor multithread. A nova versão adicionou recursos para transferir o controle para outro soquete em caso de falha ao processar a solicitação do soquete inicialmente escolhido (resolvendo o problema de perda de conexões individuais durante a reinicialização de serviços).
  • Hardware
    • O driver amdgpu implementou suporte para novas séries de GPUs AMD Radeon RX 6000, desenvolvidas com os codinomes "Beige Goby" (Navi 24) e "Yellow Carp", além de melhorias no suporte a GPUs Aldebaran (gfx90a) e APU Van Gogh. Adicionada a capacidade de operação simultânea com vários painéis eDP. Para APUs Renoir, foi implementado o suporte para uso de buffers criptografados na memória de vídeo (TMZ, Trusted Memory Zone). Suporte para a remoção a quente de placas gráficas (hot-unplug) foi adicionado. Para GPUs Radeon RX 6000 (Navi 2x) e GPUs AMD mais antigas, o suporte para o mecanismo de gerenciamento de energia ASPM (Active State Power Management) foi habilitado por padrão, que antes só era ativado para GPUs Navi 1x, Vega e Polaris.
    • Adicionado suporte para memória virtual compartilhada (SVM, shared virtual memory) para chips AMD, baseada no subsistema HMM (Heterogeneous memory management), permitindo que dispositivos com suas próprias unidades de controle de memória (MMU, memory management unit) acessem a memória principal. Com o HMM, é possível organizar um espaço de endereço compartilhado entre GPU e CPU, onde a GPU pode acessar a memória principal do processo.
    • Adicionada suporte inicial para a tecnologia AMD Smart Shift, que muda dinamicamente os parâmetros de consumo de energia do CPU e GPU em laptops com chipset e placa gráfica AMD para forçar desempenho em jogos, edição de vídeo e renderização 3D.
    • No driver i915 para placas gráficas Intel, foi adicionado suporte para chips Intel Alderlake P.
    • Adicionado o driver drm/hyperv para o adaptador gráfico virtual Hyper-V.
    • Adicionado suporte para o computador all-in-one Raspberry Pi 400.
    • Adicionado driver dell-wmi-privacy para suporte a botões físicos de desligamento de câmera e microfone fornecidos em laptops Dell.
    • Para laptops Lenovo, foi adicionado um interface WMI para alterar configurações de BIOS através do sysfs /sys/class/firmware-attributes/.
    • O suporte para dispositivos com interface USB4 foi expandido.
    • Adicionado suporte para placas de som e codecs AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 e Texas Instruments TAS2505. Melhorado o suporte para áudio em laptops HP e ASUS. Patchs foram adicionados para reduzir o atraso antes do início da reprodução de áudio em dispositivos com interface USB.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster