Após dois meses de desenvolvimento, Linus Torvalds apresentou lançamento do kernel Linux 6.14. Entre as mudanças mais notáveis: driver ntsync com primitivas de sincronização do Windows NT, configuração de balanceamento de operações de leitura no Btrfs RAID1, suporte a reflink no XFS em modo realtime, possibilidade de entrada/saída bufferizada não cacheada, dmem cgroup para limitar a memória da GPU, uso de io_uring no FUSE, delegação de atributos no NFS, suporte a gravação atômica no Device mapper, aceleração de links simbólicos, controle da execução de scripts, suporte a chips Qualcomm Snapdragon 8 Elite, driver para NPU AMD.
A nova versão inclui 12.115 correções de 1.984 desenvolvedores, o tamanho do patch é de 39 MB (as alterações afetaram 10.170 arquivos, 531.586 linhas de código foram adicionadas e 235.999 linhas foram removidas). Na versão anterior, houve 14.172 correções de 2.086 desenvolvedores, com um patch de 46 MB. Cerca de 41% de todas as alterações apresentadas no 6.14 estão relacionadas a drivers de dispositivos, aproximadamente 13% dizem respeito a atualizações de código específico para arquiteturas de hardware, 14% estão relacionadas à pilha de rede, 7% a sistemas de arquivos e 4% a subsistemas internos do kernel.
- Subsistema de disco, entrada/saída e sistemas de arquivos
- No sistema de arquivos Btrfs, foi introduzida suporte a novos métodos de balanceamento de operações de leitura entre os dispositivos que compõem o array RAID1. Além da distribuição de carga já existente baseada em IDs de processos (pid), a nova versão apresenta três novos modos de balanceamento: "rotation" (distribuição uniforme da carga entre todos os dispositivos, modo ativado por padrão); "latency" (distribuição considerando latências, pode ser útil em falhas ou operação instável dos dispositivos); devid (controle manual). Para alterar o modo de balanceamento o sinalizador -k para integração com interface /sys/fs/btrfs//read_policy. Entre outras mudanças no Btrfs – implementação ioctl FS_IOC_READ_VERITY_METADATA.
- Adicionado modo de entrada/saída bufferizada não cacheada, no qual os dados são removidos do cache de página logo após a conclusão das operações de leitura ou gravação. Essa mudança pode ser útil ao utilizar dispositivos de armazenamento muito rápidos, cujas operações de cache na memória são excessivas. Para tais dispositivos, o novo modo permite evitar o uso excessivo da memória pelo cache de página sem recorrer a uma API complicada de E/S direta (Direct I/O).
- No fsnotify, o mecanismo de rastreamento de mudanças no sistema de arquivos, adicionado Novo evento FS_PRE_ACCESS, gerado na fase antes da chamada ao conteúdo do arquivo. O evento é processado em modo síncrono, ou seja, o núcleo envia o evento e aguarda a resposta. Se a resposta for recebida, a operação é realizada; se ocorrer uma falha, a chamada do sistema retorna ao espaço do usuário um código de erro. Com o FS_PRE_ACCESS, um processo no espaço do usuário pode, por exemplo, organizar o preenchimento do arquivo à medida que os dados ficam disponíveis em um armazenamento lento.
- Foi adicionada à subsistema FUSE, que permite criar implementações de sistemas de arquivos no espaço do usuário, suporte a troca de dados entre o núcleo e o manipulador no espaço do usuário utilizando o mecanismo de entrada/saída io_uring. A modificação permite aumentar o desempenho do FUSE, reduzindo as alternâncias de contexto entre o núcleo e o espaço do usuário.
- Foi adicionada à sistema de arquivos XFS a possibilidade a utilização de mapeamento reverso (rmap, reverse-mapping) em modo de operação com atrasos previsíveis ("dispositivo em tempo real"). O mapeamento reverso permite determinar para qual arquivo um bloco específico no dispositivo de armazenamento está sendo utilizado. Com o rmap no XFS para o modo em tempo real, foi implementado o suporte à operação reflink, que permite criar cópias de arquivos cloneando os metadados do arquivo e criando um link para os dados já existentes sem a necessidade de cópia real.
- No VFS implementado o cache de tamanho de links simbólicos, que permitiu acelerar em 1,5% a execução da operação readlink (no teste com /initrd.img em ext4). O cache está ativado no FS ext4 e tmpfs.
- Foi adicionada à implementação do NFSv4.2 a suporte para delegação de atributos de arquivos, permitindo gerenciar atributos de arquivos, como o tempo de modificação (mtime), no lado do cliente NFS, sem a necessidade de descartar as alterações no servidor. No NFS, também foi melhorado o suporte ao protocolo "LOCALIO", que permite determinar se o cliente e o servidor NFS estão no mesmo host, para ativar as otimizações correspondentes, como o uso de entrada/saída direta pelo cliente.
- Aumentada desempenho das operações de leitura em sistemas de arquivos NETFS, CIFS e AFS (Andrew File System).
- No Squashfs incluso modo de carregamento direto de blocos no cache de página (SQUASHFS_FILE_DIRECT), que permite dispensar um cache separado read_page. A mudança resultou na redução do tamanho da memória consumida durante a operação do Squashfs.
- na chamada de sistema statx() implementado flag STATX_DIO_READ_ALIGN, para determinar o alinhamento necessário para operações de leitura de arquivos.
- no sistema de arquivos Bcachefs foi atualizado e estabilizado formato das estruturas de disco. Quaisquer alterações futuras ao formato serão consideradas opcionais e serão implementadas na forma de complementos opcionais. A velocidade da verificação de integridade do FS foi significativamente aumentada. Além disso, o Bcachefs melhorou o funcionamento no modo somente leitura; problemas que levavam ao acesso à memória após a sua liberação (use after free) foram resolvidos; problemas com ponteiros reflink em fsck foram corrigidos; a manipulação do reinício da transação foi ajustada.
- retornado módulo md-linear, destinado a combinar dispositivos de bloco. Este módulo havia sido declarado obsoleto e removido do núcleo 6.8, mas, como se viu, era solicitado e, portanto, foi restaurado.
- Sistemas de arquivos F2FS e SQUASHFS foram convertidos para o uso de folhetos de páginas de memória (folio de página).
- no driver null_blk implementado o atributo "rotational", configurável via configfs e que permite simular a operação com dispositivos baseados em discos giratórios para facilitar o teste das funções do núcleo.
- No sistema Device mapper e nos módulos dm-mirror, dm-io, dm-table, dm-linear, dm-stripe e dm-raid1 são implementadas suporte à gravação atômica.
- Memória e serviços do sistema
- foi concluída integração no núcleo do driver ntsync, que implementa o dispositivo de caractere /dev/ntsync e um conjunto de primitivas de sincronização utilizadas no núcleo do Windows NT. A implementação dessas primitivas ao nível do núcleo pode aumentar significativamente o desempenho dos jogos do Windows executados através do Wine. O ganho de desempenho é alcançado através da eliminação de sobrecargas associadas ao uso de RPC no espaço do usuário. A criação de um driver separado para o núcleo Linux se justifica pela dificuldade de implementar corretamente a API de sincronização NT sobre as primitivas existentes no núcleo.
- Adicionado um novo controlador cgroup DMEM para a contabilidade separada das áreas de memória de dispositivos, como GPU. O DMEM permite a criação de cgroups distintos para diferentes tarefas que trabalham com GPU, de modo que possam ser executadas sem interferir umas nas outras. Este novo recurso resolve o problema do encerramento forçado de operações com GPU quando a memória disponível se esgota, por meio da contabilidade da memória refletida da GPU e da memória utilizada pelos drivers da CPU em cgroups separados.
- Foram feitas otimizações na escalabilidade da operação de descarregamento (flush) do cache TLB (Translation Lookaside Buffer), utilizado para acelerar a conversão de endereços virtuais em físicos. As otimizações adicionadas consistem na atualização adiada de algumas estruturas de dados durante a troca de contexto, o que permite aumentar o desempenho em alguns testes.
- Aumentada o desempenho do mecanismo MGLRU (Multi-Generational LRU), utilizado para determinar quais páginas de memória estão sendo usadas e quais podem ser despejadas na partição de swap.
- Continuou-se transferência de alterações da ramificação Rust-for-Linux, relacionadas ao uso da linguagem Rust como segunda linguagem para o desenvolvimento de drivers e módulos do kernel (o suporte a Rust não está ativado por padrão e não leva à inclusão do Rust como uma dependência obrigatória na compilação do kernel). Foi fornecida a possibilidade de usar no código do kernel o macro "derive(CoercePointee)" que permite o uso de ponteiros inteligentes com objetos trait. O núcleo contém estão incluídas vinculações em Rust para PCI, plataformas, Open Firmware, dispositivos de caractere e algumas funções de entrada/saída. Greg Kroah-Hartman, responsável pelo suporte à ramificação estável do kernel Linux, caracterizou o estado atual como "quase pronto para a escrita de um driver real em Rust".
- Nos cenários de construção foi oferecido novo código para gerar versões de símbolos de depuração para módulos carregáveis, que agora utiliza informações de registros de depuração no formato DWARF, em vez de analisar o código-fonte diretamente. A alteração permite aplicar versionamento de símbolos de depuração para módulos escritos na linguagem Rust. A implementação anterior também permanece no kernel, e a escolha do gerador é feita no nível das opções de construção.
- Para a arquitetura PowerPC são implementadas suporte ao modo de pré-emptão preguiçosa (PREEMPT_LAZY), que corresponde ao modo de pré-emptão total («full preemption») para tarefas em tempo real (RR/FIFO/DEADLINE), mas adia a pré-emptão de tarefas normais (SCHED_NORMAL) até o limite do tick.
- No subsistema de perfis de desempenho. foi adicionada suporte a contadores de consumo de energia para processadores AMD. Adicionada capacidade de operar em sistemas com até 2048 núcleos de CPU.
- Foi fornecida capacidade de usar o parâmetro sysctl pid_max com namespaces de identificadores de processos (ID namespace). O parâmetro pid_max destina-se a limitar o valor máximo dos identificadores de processos (PID) e agora pode ser usado para restringir o número máximo de processos que podem ser iniciados no namespace especificado. O processamento do parâmetro é feito de forma hierárquica, ou seja, as restrições nos namespaces externos se aplicam aos namespaces internos.
- Ao usar a chamada de sistema para iniciar um processo. execveat. no sistema de arquivos /proc agora será exibido o nome do arquivo em execução, e não o número do descritor de arquivo.
- O código-fonte do núcleo (no diretório samples) agora inclui a utilidade mountinfo, que demonstra o uso das chamadas de sistema statmount() e listmount().
- No subsistema BPF são oferecidos novas funções bpf_local_irq_save() e bpf_local_irq_restore() para desabilitar temporariamente interrupções na CPU local. As funções podem ser usadas para implementar estruturas cuja manipulação não seja suspensa por interrupções.
- Na chamada de sistema. madvise() ao usar as flags MADV_DONTNEED e MADV_FREE. fornecido a liberação de tabelas de páginas de memória associadas ao intervalo de endereços liberados, uma vez que, em algumas situações, páginas de memória vazias podem consumir uma quantidade significativa de memória.
- Para a arquitetura OpenRISC, foi implementado suporte para o mecanismo de sequências reiniciáveis (rseq, restartable sequences), destinado à execução atômica rápida de operações que, em caso de interrupção por outro thread, são limpas e a tentativa de execução é repetida.
- Foi realizada a reorganização do código com a implementação dos algoritmos CRC32 e CRC-T10DIF, que agora não se sobrepõe mais à subsistema crypto e é chamado diretamente da interface da biblioteca. Esta mudança permitiu simplificar o código e aumentar sua eficiência.
- Para o sistema de entrada/saída assíncrono io_uring o sinalizador -k para integração com interface para transmitir metadados adicionais sobre integridade ao executar operações de leitura e gravação.
- Virtualização e segurança
- Na chamada de sistema execveat. o sinalizador -k para integração com flag AT_EXECVE_CHECK, permitindo. realizar a verificação a execução de um arquivo sem sua execução real, levando em conta as políticas de segurança, direitos de acesso e módulos LSM ativos. Para uso em conjunto com AT_EXECVE_CHECK, foram propostos os flags securebit SECBIT_EXEC_RESTRICT_FILE e SECBIT_EXEC_DENY_INTERACTIVE, que podem ser usados para restringir a execução de arquivos com scripts em linguagens de programação interpretadas. O flag SECBIT_EXEC_RESTRICT_FILE instrui compiladores e intérpretes a usar a opção AT_EXECVE_CHECK para verificar a validade da execução, enquanto o flag SECBIT_EXEC_DENY_INTERACTIVE proíbe o processamento de comandos interativos. A ideia principal da alteração é permitir que as políticas de segurança sejam aplicadas não apenas a arquivos executáveis tradicionais, mas também a arquivos de texto com scripts que podem ser carregados através do início do intérprete (ou seja, a proibição de execução pode ser implementada não apenas com a execução de ‘./script.sh’, mas também ao executar na forma de ‘sh script.sh’).
- Nos sistemas x86, foi implementado o suporte a contadores de tempo protegidos para sistemas convidados, que não permitem alterar os relógios do sistema convidado a partir do ambiente host. Esta capacidade foi realizada com base no mecanismo AMD SEV (Secure Encrypted Virtualization), aplicado em sistemas de virtualização para proteger máquinas virtuais contra interferência do hipervisor ou do administrador do sistema host.
- No sistema de controle de acesso mandatário SELinux foi adicionada suporte as regras xperm, permitindo associar políticas SELinux a chamadas específicas ioctl() ou mensagens netlink.
- Para a assinatura digital de módulos do núcleo, ao invés de SHA1 por padrão é utilizado o algoritmo SHA512.
- Em drivers para sistemas convidados VirtualBox incluída suporte à arquitetura ARM64.
- No hipervisor KVM foi continuado trabalho com o uso do mecanismo Intel TDX (Trusted Domain Extensions) para criptografar a memória de sistemas convidados.
- No virtio_blk foi adicionada suporte ao modo de recuperação de erros.
- Subsistema de Rede
- Na implementação do protocolo RxRPC foi introduzida a possibilidade de usar grandes quadros UDP para aumentar a largura de banda.
- Para TCP, foi adicionada a suporte ao algoritmo RACK-TLP para determinar a perda de pacotes.
- Adicionado um novo parâmetro sysctl tcp_tw_reuse_delay, que atua em relação ao espaço de nomes (network namespace) e permite definir o atraso antes que o sistema possa reutilizar o número da porta de rede após o fechamento de um soquete TCP.
- Adicionada a possibilidade de escolha do provedor de tempo preciso (PTP) para a formação de carimbos de data/hora nos níveis PHY e MAC.
- Para IPsec são implementadas suporte ao mecanismo de agregação e fragmentação de pacotes IP encapsulados – IP-TFS/AGGFRAG (IP Traffic Flow Security/Aggregation and Fragmentation Mode for Encapsulating Security Payload).
- No sistema de sockets de rede foi adicionada suporte transmissão de informações sobre prioridade (SO_PRIORITY) na forma de mensagens de controle (cmsg). Para sockets de rede foi adicionada opção SO_RCVPRIORITY, que inclui na função recvmsg() a transmissão de informações sobre a prioridade do socket.
- Hardware
- Adicionado um motor amdxdna para unidades de processamento neural (NPU) integradas no CPU AMD com base na arquitetura XDNA, destinadas a acelerar operações relacionadas ao aprendizado de máquina. A NPU com base na arquitetura XDNA é fornecida nas séries de processadores AMD Ryzen 7040 e 8040, aceleradores AMD Alveo V70 e SoC AMD Versal.
- No driver i915 foram adicionados identificadores de novas GPUs, um processador de falha na inicialização HDMI foi implementado, aumentando a confiabilidade do reinício dos motores GPU em sistemas Haswell e mais antigos.
- Continua trabalho no driver drm (Direct Rendering Manager) Xe para GPUs baseadas na arquitetura Intel Xe, que é usada em placas de vídeo da família Intel Arc e gráficos integrados, a partir dos processadores Tiger Lake.
- No driver Nouveau, foi adicionada a capacidade de transmitir buffers com logs GSP-RM através do debugfs.
- No driver AMDGPU foi implementado o suporte ao mecanismo DRM panic, exibindo uma semelhança ao 'tela azul da morte' em caso de falhos. O suporte à futura série de placas gráficas Radeon RX 9000 com base na arquitetura RDNA4 foi preparado. O suporte foi atualizado para DCN 3.5, GG 9.5, IH 4.4, PSP 13.x, SMU 13.x, VCN 5.x, JPEG 5.x, GC 12.x, DC FAMS, RAS e ISP.
- No driver DRM msm (GPU Qualcomm Adreno) foi adicionada a suporte à plataforma Qualcomm SM6150 (QCS615).
- No driver DRM panfrost, foi adicionado suporte para SoC MediaTek MT8188 com GPU Mali-G57.
- No driver DRM vc4, foi adicionado suporte para SoC Broadcom BCM2712 (Raspberry Pi 5).
- No driver vfio nvgrace-gpu foi adicionada suporte chips NVIDIA Grace Blackwell 200.
- Inclui incluso driver para controladores Intel THC (Touch Host Controller), utilizado para interagir com telas sensíveis ao toque e touchpads em alguns laptops. Foi adicionado suporte a dispositivos Wacom com interface PCI. Adicionada suporte a controladores de jogos da QH Electronics.
- Adicionada suporte Plataformas ARM, SoCs e dispositivos: Qualcomm Snapdragon 8 Elite (SM8750), Qualcomm Snapdragon AR2 (SAR2130P), Qualcomm IQ6/IQ8, Snapdragon 425 (MSM8917), Samsung Exynos 9810, Blaize BLZP1600, Microchip SAMA7D65, Renesas R-Car V4H ES3.0, Renesas RZ/G3E. Suporte adicionado ao SoC SpacemiT K1 com base na arquitetura RISC-V.
- No subsistema de áudio ALSA para MIDI 2.0 as API rawmidi e sequencer. No API para operações de compressão externas, foi adicionado suporte para ASRC (Conversão de Taxa de Amostra Assíncrona).
- Suporte adicionado para sistemas de som de dispositivos Allwinner suinv F1C100s, Awinc AW88083, Realtek ALC5682I-VE, TAS2781, Focusrite Scarlett 4th Gen 16i16, 18i16 e 18i20. Adicionada suporte para fones de ouvido sem fio SteelSeries Arctis 9.
Fonte: linux.org.ru
