Após dois meses de desenvolvimento, Linus Torvalds apresentou o lançamento do núcleo Linux 6.13. Entre as alterações mais notáveis estão: o modo de expulsão preguiçosa no escalonador de tarefas, suporte para gravação atômica no XFS e Ext4, o mecanismo 'multigrain timestamps', modo adaptativo de habilitação de polling no subsistema de rede, possibilidade de compilação com otimizações AutoFDO, suporte ao mecanismo de proteção ARM65 Guarded Control Stack, isolamento de máquinas virtuais através da extensão ARM CCA, pilhas separadas no BPF, remoção do ReiserFS, driver virtual-cpufreq, API netlink net-shaper, modo de montagem do tmpfs considerando a diferenciação entre maiúsculas e minúsculas, suporte a extensões POSIX no SMB3, driver AMD Cache Optimizer.
A nova versão inclui 14.172 correções de 2.086 desenvolvedores, o tamanho do patch é de 46 MB (as alterações afetaram 15.375 arquivos, foram adicionadas 598.707 linhas de código e 406.294 linhas foram removidas). Na versão anterior, houve 14.607 correções de 2.167 desenvolvedores, com um patch de 37 MB. Cerca de 52% de todas as alterações apresentadas no 6.13 estão relacionadas a drivers de dispositivos, aproximadamente 13% das alterações se referem à atualização de código específico para arquiteturas de hardware, 11% estão relacionadas à pilha de rede, 4% às sistemas de arquivos e 3% a subsistemas internos do núcleo.
As principais inovações no núcleo 6.13:
- Subsistema de disco, entrada/saída e sistemas de arquivos
- Foi adicionado o mecanismo 'multigrain timestamps', que permite obter informações sobre o tempo de modificação ou acesso a arquivos com precisão superior a milissegundos, mas sem impacto negativo no desempenho. O aumento da precisão dos timestamps resulta em custos adicionais devido ao aumento da intensidade da gravação de metadados no disco, portanto, na implementação proposta, timestamps mais precisos são criados apenas para aqueles arquivos para os quais os processos solicitam tais timestamps através da chamada getattr().
- Foi adicionado o suporte para operações de gravação atômica, onde a gravação de dados, cujo tamanho excede o tamanho do setor, é realizada atômica em dispositivos de armazenamento que oferecem tal possibilidade. Atualmente, a gravação atômica está implementada para XFS, Ext4 no modo O_DIRECT (Direct I/O) e md RAID 0/1/10.
- Foi proposto um novo mecanismo de contagem de referências para arquivos, que proporciona um aumento de desempenho de 3-5% em cargas de trabalho com mais de 255 threads.
- A implementação do sistema de arquivos ReiserFS foi removida, a qual foi declarada obsoleta no ano passado.
- Adicionado o parâmetro sysctl "fs.dentry-negative" para definir a política de limpeza de entradas "dentry" (representação interna de elementos de diretório) no VFS após a exclusão dos arquivos associados. Para alguns tipos de carga, pode ser mais eficiente manter essas entradas de arquivos excluídos, enquanto para outros é melhor removê-las, portanto, o kernel oferece a opção de escolha (por padrão, as "dentry" não são removidas automaticamente).
- Foi adicionado um sinalizador STATMOUNT_OPT_ARRAY à chamada de sistema statmount() para retornar uma lista de opções do sistema de arquivos como um array de strings terminadas em caractere nulo e que não utilizam escape "\000". Adicionada suporte ao retorno do subtipo do sistema de arquivos (fs_subtype, para determinar o uso do FUSE), opções de montagem segura e o superbloco de origem (sb_source).
- No OverlayFS, agora é possível especificar camadas através de descritores de arquivos em vez de nomes de caminhos de arquivos.
- Para o sistema de arquivos tmpfs, foi adicionada a opção de montagem "casefold" para operar sem distinção entre maiúsculas e minúsculas e a opção "strict_encoding" para bloquear a criação de arquivos com nomes que contenham caracteres UTF-8 inválidos.
- Foi proposto um novo conjunto de chamadas de sistema para gerenciar atributos estendidos de arquivos: setxattrat(), getxattrat(), listxattrat() e removexattrat(). Ao contrário das chamadas de sistema setxattr(), getxattr(), listxattr() e removexattr(), as novas variantes requerem a especificação de um descritor de arquivo de diretório em relação ao qual a busca pelo caminho do arquivo é realizada.
- No Btrfs, foi adicionada a operação ioctl BTRFS_IOC_SUBVOL_SYNC_WAIT, que inclui a espera pela conclusão da limpeza de subvolume, permitindo que o comando "btrfs subvolume sync" seja executado por usuários não privilegiados que não têm acesso ao ioctl SEARCH_TREE (útil em aplicações de backup que limpam subvolumes). Foi adicionada a operação ioctl ENCODED_READ para leitura de dados codificados através do io_uring, por exemplo, para leitura direta de extensões compactadas sem descompactação. O trabalho para a transição para o uso de folhetos de página (page folios) continua. A ocorrência de contenções de bloqueio (lock contention) durante a busca por referências internas e a iteração de buffers de extensões foi reduzida. A eficiência da compressão do mapa de extensões foi aumentada.
- No sistema de arquivos EROFS (Extendable Read-Only File System), projetado para uso em partições acessíveis apenas em modo de leitura, foi implementada a possibilidade de utilização das opções SEEK_HOLE e SEEK_DATA na chamada de sistema lseek().
- No F2FS, foi adicionada a compatibilidade com a reflexão de dispositivos («device aliasing»), permitindo reservar temporariamente uma área no F2FS para usar uma parte do dispositivo de bloco em outro sistema de arquivos. Após a conclusão da operação externa, a área reservada pode ser devolvida ao F2FS. Por exemplo, pode-se criar um sistema de arquivos com o comando «mkfs.f2fs -c /dev/vdc@vdc.file /dev/vdb», após o que o conteúdo do dispositivo /dev/vdc será reservado e refletido no arquivo vdc.file, e a partição /dev/vdc poderá ser usada para outras necessidades, como formatá-la para outro sistema de arquivos. Para devolver o conteúdo reservado, basta excluir o arquivo vdc.file.
- O XFS agora inclui suporte a quotas para dispositivos em tempo real. Foi adicionada a compatibilidade com diretórios de metadados (metadata directory), onde todos os inodes com metadados são armazenados.
- No mecanismo FUSE, foi incluída a possibilidade de alterar dinamicamente o número máximo de páginas (FUSE_MAX_MAX_PAGES) usando «sysctl fs.fuse.max_pages_limit». Estão envolvidos folhetos de páginas de memória (page folios).
- No SMB, foi implementado o suporte a extensões POSIX para SMB3, necessárias para armazenar tipos especiais de arquivos, como fifo, arquivos de dispositivo e links simbólicos. Adicionada a possibilidade de montar uma partição com uma senha alternativa, aplicada durante a rotação de senhas. Incluída uma nova opção de montagem «cifs.upcall» para definição do espaço de nomes. O reconhecimento de arquivos de dispositivos de caractere e de bloco, criados no Windows NFS Server, foi garantido. Adicionado suporte a links simbólicos no estilo WSL (Windows Subsystem for Linux).
- Os sistemas de arquivos UBIFS, ADFS, BEFS, HFS, HFSPLUS, HPFS, JFS e ECRYPTFS foram adaptados para usar a nova API de montagem de partições.
- Os sistemas de arquivos ECRYPTFS, UFS e NILFS2 foram transferidos para o uso de folhetos de páginas de memória (page folios).
- Memória e serviços do sistema
- No planejador, foi implementado um modelo de interrupção preguiçosa (PREEMPT_LAZY, lazy preemption), que corresponde ao modelo de interrupção total («full preemption») para tarefas em tempo real (RR/FIFO/DEADLINE), mas retarda a interrupção de tarefas normais (SCHED_NORMAL) até a borda do tick. Esse atraso resulta em uma redução dos casos de interrupção de detentores de bloqueios, permitindo aproximar o desempenho das configurações que utilizam o modelo de interrupção voluntária (voluntary preemption). Assim, o novo modelo preserva as capacidades de interrupção total em relação a tarefas de tempo real, mas minimiza a queda de desempenho para tarefas normais. Além disso, o novo modelo simplifica a lógica de operações de interrupção de tarefas no núcleo, ao excluir do processo de escalonamento os manipuladores localizados em outros componentes do núcleo (fora do planejador de tarefas).
- Ao compilar com o Clang, foi disponibilizada a opção de usar otimizações
Fonte: opennet.ru
