Linux 6.13 chega com novo modelo de preempção Lazy, suporte para escrita atômica e muito mais

Linux

Depois de dois meses de trabalho, Linus Torvalds anunciou o lançamento dee a nova versão do Kernel linux 6.13, que traz consigo importantes avanços e novidades. Entre as principais novidades que apresenta destacam-se: um modelo de preempção preguiçosa, que está posicionado entre os modos voluntário e completo, a inclusão de suporte para gravações atômicas em sistemas de arquivos como XFS e Ext4.

Outras mudanças incluem o driver virtual-cpufreq, o nova API netlink net-shaper, e um modo de montagem tmpfs que agora diferencia maiúsculas de minúsculas, junto com suporte para extensões POSIX em SMB3, e um driver otimizador de cache da AMD.

Esta nova versão contou com a contribuição de 2086 desenvolvedores que fizeram um total de 14,172 correções, afetando 15,375 arquivos e resultando na adição de 598,707 linhas de código, com a eliminação de 406,294 linhas.

Principais novidades do Linux 6.13

Kernel 6.13, uma das mudanças mais importantes é a introdução do mecanismo de “carimbos de data e hora refinados” o que melhora a precisão na obtenção de dados sobre modificações ou acessos a arquivos, alcançando uma precisão superior a um milissegundo sem afetar negativamente o desempenho.

Outra novidade que o Linux Kernel 6.13 apresenta é o ssuporte para gravações atômicas, o que garante que dados maiores que o tamanho de um setor sejam gravados atomicamente em dispositivos que suportam esse recurso. Atualmente, esta funcionalidade Está disponível em sistemas de arquivos como XFS, Ext4 no modo O_DIRECT, e em configurações RAID 0/1/10 com md.

No que diz respeito a outros sistemas de arquivos, o Linux 6.13 marca a remoção final do ReiserFS, EROFS agora suporta as opções SEEK_HOLE e SEEK_DATA em lseek(), enquanto F2FS adicionou suporte para aliases de dispositivossy XFS adicionou suporte para cotas em dispositivos em tempo real e melhorou o gerenciamento de diretório de metadados. Além disso, o SMB3 agora oferece suporte a extensões POSIX necessárias para armazenar arquivos especiais, como links simbólicos e arquivos de dispositivos.

Na memória e nos serviços do sistema, o novo modelo de preferência preguiçosa (PREEMPT_LAZY). Este modelo permite que você mantenha recursos de preempção é concluído para tarefas em tempo real, enquanto atrasa a preempção de tarefas normais até o limite de ticks. Além disso, o modelo simplifica a lógica do agendador de tarefas, removendo drivers de outras partes do kernel do seu processo de agendamento.

Em relação às otimizações de construção, o suporte para otimizações AutoFDO ao compilar com Clang foi integrado, que usam perfis de execução para ajustar o código e melhorar o desempenho, demonstraram reduzir a latência em 10%. Um novo sinalizador também foi adicionado à chamada de sistema madvise() para melhorar o gerenciamento de memória do processo. O sinalizador MADV_GUARD_INSTALL permite substituir endereços específicos de proteção de página, evitando exceções de acesso (SIGSEGV) sem a necessidade de alocar novas áreas de memória virtual.

IO_uring também recebeu diversas melhorias, incluindo a capacidade de redimensionar buffers, enviar mensagens de forma síncrona entre buffers circulares e clonar buffers parcialmente. Além disso, a pesquisa de E/S híbrida foi implementada e a API foi estendida para registrar buffers de anel e áreas de memória.

Como para o melhorias de hardware, foi adicionada a capacidade de detectar "split-locks" em CPUs AMD, um fenômeno que ocorre quando os dados não estão alinhados corretamente na memória e atravessam duas linhas de cache, o que pode afetar gravemente o desempenho. Para mitigar esse problema, foi integrado o driver AMD Cache Optimizer, que aproveita a tecnologia AMD 3D V-Cache para melhorar o desempenho de núcleos de CPU individuais, seja aumentando o tamanho do cache L3 disponível ou aumentando a frequência.

Para arquiteturas MIPS, foi adicionado suporte para sistemas com vários controladores de interrupção. clusters, fornecendo um manipulador de interrupção separado para cada cluster de CPU. Também foi implementada uma nova operação ioctl, PIDFD_GET_INFO, que permite obter informações sobre um processo usando seu identificador PIDFD, que permanece constante mesmo que o PID associado mude quando o processo termina.

En ARM, os principais avanços incluem suporte para execução de Linux em máquinas virtuais protegido pela Arm Confidential Computing Architecture, bem como suporte para shadow stacks no espaço do usuário, melhorando a segurança. Também é implementado um novo mecanismo de contagem referenciado para arquivos, alcançar maior escalabilidade.

El O agendador de tarefas agora suporta um mecanismo de execução de proxy, resolvendo o problema de inversão de prioridade. Este mecanismo evita que tarefas de baixa prioridade retenham recursos necessários para tarefas de alta prioridade (em tempo real), bloqueando-as. Além disso, os contextos de programação e execução dos processos foram separados.

Por outro lado, destaca a migração de mudanças relacionadas ao uso de Rust no desenvolvimento de drivers e módulos do kernel. Embora O suporte Rust não está habilitado por padrão, ligações e estruturas de dados foram adicionadas para permitir a gravação de drivers nesta linguagem, incluindo suporte para eventos de rastreamento e o driver Binder reescrito em Rust.

O subsistema O BPF melhorou com a implementação de uma pilha separada para programas BPF, o que reduz o risco de estouros ao processar grandes cadeias de chamadas. Também foi adicionada a capacidade de enviar sinais para outros processos e de usar memória compartilhada em mapas BPF, facilitando a comunicação de carga entre drivers do agendador de tarefas.

Além disso, o O rastreamento de exceções foi aprimorado para gerar falhas de página quando tracepoints são acionados em chamadas de sistema, permitindo a leitura de parâmetros passados ​​do espaço do usuário. O parâmetro transparente_hugepage_shmem também foi adicionado para controlar o uso de páginas de memória grandes em sistemas de arquivos tmpfs e shmem.

Nas redes, é introduzido suporte para suspensão de NAPI durante inatividade, melhorando o consumo de energia e uma nova API de dispositivos de rede que facilita a configuração avançada de hardware de transmissão (TX). Além disso, io_uring recebeu diversas otimizações que melhoram o tratamento de operações assíncronas de entrada/saída.

Finalmente, foi implementadosuporte em tempo real para arquitetura Loongarch e novas extensões à arquitetura RISC-V, que permitem mascarar ponteiros no espaço do usuário. Para melhorar a compactação da imagem do kernel, o algoritmo padrão foi alterado para lz4, substituindo lz4c.

Interessado em saber mais sobre o assunto, você pode consultar os detalhes no link a seguir.


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.