Após dois meses de desenvolvimento, Linus Torvalds apresentou 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 de drivers ide e raw, um novo controlador de prioridade de entrada/saída para cgroup, modo de escalonamento de tarefas SCHED_CORE, infraestrutura para criar carregadores de programas BPF verificados.
Na nova versão, foram aceitas 15883 correções de 2002 desenvolvedores, o tamanho do patch é de 69 MB (as mudanças afetaram 12580 arquivos, 861501 linhas de código foram adicionadas e 321654 linhas foram removidas). Cerca de 47% de todas as mudanças apresentadas na 5.14 estão relacionadas a drivers de dispositivos, aproximadamente 14% das mudanças estão relacionadas à atualização de código específico para arquiteturas de hardware, 13% estão relacionadas à pilha de rede, 3% às sistemas de arquivos e 3% às subsistemas internos do núcleo.
- sistema de discos, entrada/saída e sistemas de arquivos:
- para cgroup implementado 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 participantes de cada cgroup. O suporte ao novo controlador de prioridade foi adicionado ao escalonador de entrada/saída mq-deadline;
- no sistema de arquivos ext4 são implementadas novo comando ioctl EXT4_IOC_CHECKPOINT, que força a gravação no disco de todas as transações pendentes do log e buffers relacionados, além de reescrever a área utilizada pelo log no armazenamento. A mudança foi preparada como parte da iniciativa para prevenir vazamentos de informação de sistemas de arquivos;
- no Btrfs foram feitas otimizações de desempenho: ao excluir o registro desnecessário de atributos estendidos durante a execução de fsync, o desempenho de operações intensivas com atributos estendidos aumentou em até 17%. Além disso, ao executar operações de truncagem que não afetam extensões, a execução de sincronização completa foi desativada, reduzindo o tempo de execução da operação em 12%. No sysfs, foi adicionada uma configuração para limitar a largura de banda de entrada/saída ao verificar o FS. Chamadas ioctl foram adicionadas para cancelar operações de alteração de tamanho e remoção de dispositivo;
- no XFS reformulado a implementação do cache de buffer, que foi alterado para 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 operação em modo somente leitura e implementado o modo de cache para blocos comprimidos (compress_cache) para melhorar o desempenho da leitura aleatória. Foi implementado suporte para compressão de arquivos refletidos na memória usando a operação mmap(). 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 dispositivos de armazenamento de algumas câmeras digitais;
- Foi adicionado o sistema de chamadas quotactl_fd(), que permite gerenciar quotas não através de um arquivo de dispositivo especial, mas por meio da especificação de um descritor de arquivo associado ao sistema de arquivos para o qual a quota se aplica;
- Removidos do núcleo drivers antigos para dispositivos de bloco com interface IDE, que foram substituídos há muito pela subsistema libata. O suporte a dispositivos antigos foi mantido em sua totalidade, as alterações dizem respeito apenas à possibilidade de usar drivers antigos, que faziam com que os dispositivos fossem nomeados como /dev/hd*, em vez de /dev/sd*;
- Removido do núcleo o driver 'raw', que fornecia acesso sem buffer a dispositivos de bloco através da interface /dev/raw. Essa funcionalidade já é implementada em aplicativos utilizando a flag O_DIRECT;
- Memória e serviços do sistema:
- No escalonador de tarefas, foi implementado um novo modo de escalonamento SCHED_CORE, que permite gerenciar quais processos podem ser executados conjuntamente em um único núcleo de CPU. A cada processo pode ser atribuído um identificador de cookie, que determina a área de confiança entre os processos (por exemplo, pertencendo a um mesmo usuário ou contêiner). Ao organizar a execução do código, o escalonador pode garantir o compartilhamento de um núcleo de CPU apenas para processos relacionados a um mesmo proprietário, o que pode ser usado para bloquear certos ataques da classe Spectre ao prevenir a execução em um mesmo fluxo SMT (Hyper Threading) de tarefas confiáveis e não confiáveis;
- Para o mecanismo cgroup, foi implementado suporte para a operação kill, permitindo finalizar todos os processos vinculados ao grupo de uma vez (enviar SIGKILL) escrevendo '1' no arquivo virtual cgroup.kill;
- expandiu as capacidades relacionadas à resposta à detecção 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 atravessam duas linhas de cache da CPU. Esses bloqueios causam uma queda significativa no desempenho, portanto, anteriormente havia a opção de encerrar forçosamente o aplicativo que causava 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 de intensidade de operações de bloqueio por sistema por segundo, após o qual qualquer processo que se tornasse a fonte de um bloqueio dividido será forçosamente interrompido por 20 ms, em vez de encerrado;
- no controlador de cgroup de largura de banda CFS (CFS bandwidth controller), que determina quanto tempo de CPU pode ser alocado a cada cgroup, foi implementada a capacidade de definir limites, restritos a um determinado período de tempo, o que permite regular melhor cargas sensíveis à latência. Por exemplo, definir o valor de cpu.cfs_quota_us como 50000 e cpu.cfs_period_us como 100000 permitirá que um grupo de processos gaste 50ms de tempo de CPU a cada 100ms;
- foi adicionada a infraestrutura inicial para a criação de carregadores de programas BPF, que permitirá posteriormente permitir o carregamento apenas de programas BPF assinados por uma chave digital confiável;
- adicionada uma nova operação futex FUTEX_LOCK_PI2, que utiliza um timer monótono para calcular o tempo limite, considerando o tempo que o sistema esteve em modo de espera;
- para a arquitetura RISC-V, foi implementado suporte para grandes páginas de memória (Transparent Huge-Pages) e a capacidade de aplicar o mecanismo KFENCE para detectar erros ao trabalhar com memória;
- na chamada do sistema madvise(), que fornece meios para otimizar o gerenciamento de memória do processo, foram adicionados os flags MADV_POPULATE_READ e MADV_POPULATE_WRITE para gerar ‘page fault’ em todas as páginas de memória refletidas para leituras ou gravações, sem executar a leitura ou gravação real (prefault). A aplicação dessas flags pode ser útil para reduzir latências durante a execução do programa, através da execução antecipada do manipulador de ‘page fault’ de uma só vez para todas as páginas não alocadas, sem esperar o acesso efetivo a elas;
- no sistema de testes unitários kunit foi adicionada suporte para execução de testes no ambiente QEMU;
- novos rastreadores adicionados: 'osnoise' para rastrear atrasos em aplicativos causados pelo processamento de interrupções e 'timerlat' para fornecer informações detalhadas sobre os atrasos ao serem despertados por um sinalizador de temporizador;
- virtualização e segurança:
- o sinalizador -k para integração com a chamada do sistema memfd_secret(), que permite a criação de uma área de memória privada em um espaço de endereços isolado, visível apenas para o 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 os manipuladores de bloqueio para o espaço do usuário, foi oferecida a possibilidade de usar uma única operação atômica para criar um descritor de arquivo para a tarefa isolada e retorná-lo ao processar a chamada de sistema. A operação proposta resolve o problema com o manipulador de interrupção no espaço do usuário quando um sinal é recebido;
- o sinalizador -k para integração com novo mecanismo para gerenciar a limitação de recursos no espaço de nomes de identificadores de usuário, que vincula contadores rlimit individuais ao usuário no 'user namespace'. A alteração resolve o problema de aplicação de contadores de recursos compartilhados ao iniciar processos por um único usuário em diferentes contêineres;
- no hipervisor KVM para sistemas ARM64, foi adicionada a possibilidade de usar nas máquinas convidadas a extensão MTE (MemTag, Memory Tagging Extension), permitindo vincular tags a cada operação de alocação de memória e organizar a verificação de validade do uso de ponteiros para bloquear a exploração de vulnerabilidades causadas pelo acesso a blocos de memória já liberados, estouros de buffer, acessos antes da inicialização e uso fora do contexto atual;
- os recursos da plataforma ARM64 para autenticação de ponteiros (Pointer Authentication) agora podem ser configurados separadamente para o núcleo e o espaço do usuário. A tecnologia permite o uso de instruções ARM64 especializadas para verificar endereços de retorno usando assinaturas digitais, que são armazenadas nos bits superiores não utilizados do próprio ponteiro;
- no User-mode Linux foi adicionada suporte para usar drivers para dispositivos PCI com um barramento PCI virtual, implementado pelo driver PCI-over-virtio;
- Para sistemas x86, foi adicionada a compatibilidade com o dispositivo paravirtualizado virtio-iommu, permitindo enviar solicitações IOMMU, como ATTACH, DETACH, MAP e UNMAP, sobre o transporte virtio sem a emulação de tabelas de páginas de memória;
- Para CPUs Intel, desde a família Skylake até Coffee Lake, o uso das extensões Intel TSX (Transactional Synchronization Extensions) está desativado por padrão, uma vez que fornecem meios para aumentar o desempenho de aplicativos multithread ao excluir dinamicamente operações de sincronização desnecessárias. As extensões estão desativadas devido à possibilidade de ataques Zombieload, manipulando vazamentos de informações através de canais laterais, que ocorrem durante o funcionamento do mecanismo de interrupção assíncrona de operações (TAA, TSX Asynchronous Abort);
- Sub-sistema de rede:
- A integração com o núcleo do MPTCP (MultiPath TCP), uma extensão do protocolo TCP para possibilitar a operação de conexões TCP com entrega de pacotes simultaneamente por múltiplos caminhos através de diferentes interfaces de rede, associadas a diferentes endereços IP. Na nova versão, o sinalizador -k para integração com Um mecanismo para definir políticas de hash de tráfego próprias para IPv4 e IPv6 (multipath hash policy), permitindo do espaço do usuário determinar quais campos em pacotes, incluindo os encapsulados, serão usados ao calcular o hash que define a escolha do caminho para o pacote;
- Suporte para sockets foi adicionado ao transporte virtual virtio SOCK_SEQPACKET (transmissão confiável e ordenada de datagramas);
- As capacidades do mecanismo de sockets SO_REUSEPORT foram ampliadas, permitindo que vários sockets ouvintes se conectem a uma única porta para receber conexões, com a distribuição das solicitações recebidas simultaneamente entre todos os sockets conectados via SO_REUSEPORT, o que simplifica a criação de aplicativos de servidor multithread. Na nova versão, foram adicionados Recursos para transferir o controle para outro socket em caso de falha no tratamento de uma solicitação pelo socket inicialmente selecionado (resolve o problema de perda de conexões individuais ao reiniciar serviços);
- Hardware:
- No driver amdgpu são implementadas suporte para novas séries de GPUs AMD Radeon RX 6000, desenvolvidas sob os codinomes "Beige Goby" (Navi 24) e "Yellow Carp", além de melhoria do suporte às GPUs Aldebaran (gfx90a) e APU Van Gogh. Adicionada a capacidade de operar simultaneamente com vários painéis eDP. Para APU Renoir, implementado suporte para trabalhar com buffers criptografados na memória de vídeo (TMZ, Trusted Memory Zone). Suporte adicionado para a remoção a quente de placas gráficas (hot-unplug). Para GPUs Radeon RX 6000 (Navi 2x) e GPUs AMD mais antigas, o suporte ao mecanismo de gerenciamento de energia ASPM (Active State Power Management) é ativado por padrão, que anteriormente era ativado apenas para GPUs Navi 1x, Vega e Polaris;
- para chips AMD, adicionado suporte para memória virtual compartilhada (SVM, shared virtual memory) com base no subsistema HMM (Heterogeneous Memory Management), permitindo o uso de dispositivos com suas próprias unidades de gerenciamento de memória (MMU, memory management unit), que podem acessar a memória principal. Inclusive, através do 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;
- adicionado suporte inicial para a tecnologia AMD Smart Shift, que altera dinamicamente os parâmetros de consumo de energia da CPU e GPU em notebooks com chipset e GPU AMD para melhorar o desempenho em jogos, edição de vídeo e renderização 3D;
- no driver i915 para placas gráficas Intel incluída suporte para chips Intel Alderlake P;
- adicionado driver drm/hyperv para o adaptador gráfico virtual Hyper-V;
- o sinalizador -k para integração com driver gráfico simpledrm, que utiliza a saída de frame buffer EFI-GOP ou VESA, fornecida pelo firmware UEFI ou BIOS. O principal objetivo do driver é possibilitar a saída gráfica nas fases iniciais de inicialização, antes que um driver DRM completo possa ser usado. O driver também pode ser usado como uma solução temporária para hardware para o qual não há drivers DRM nativos disponíveis;
- foi adicionada suporte para o computador all-in-one Raspberry Pi 400;
- adicionado driver dell-wmi-privacy para suporte aos botões de hardware de câmeras e microfones fornecidos em notebooks Dell;
- para notebooks Lenovo o sinalizador -k para integração com interface WMI para alterar as configurações de BIOS via sysfs /sys/class/firmware-attributes/;
- ampliado suporte para dispositivos com interface USB4;
- foi adicionada suporte a 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. Suporte de áudio aprimorado em laptops HP e ASUS. Adicionados patches para reduzir a latência antes do início da reprodução de áudio em dispositivos com interface USB.
Fonte – opennet.ru.
Fonte: linux.org.ru
