Após dois meses de desenvolvimento, Linus Torvalds lançamento do núcleo . Dentre as mudanças mais notáveis estão: suporte para GPU AMD Navi, processadores Zhaoxi e tecnologia de gerenciamento de energia Intel Speed Select, além da possibilidade de usar instruções umwait para espera sem ciclos.
um modo de 'utilização de clamping' que aumenta a interatividade para CPUs assimétricas, a chamada de sistema pidfd_open, a possibilidade de usar endereços IPv4 da sub-rede 0.0.0.0/8, a possibilidade de aceleração de hardware para nftables, suporte a HDR no subsistema DRM e integração do hipervisor ACRN.
Em A nova versão do Linus lembrou a todos os desenvolvedores da principal regra do desenvolvimento do núcleo — manter a invariância do comportamento para os componentes de espaço do usuário. As mudanças no núcleo não devem de forma alguma interromper aplicativos já funcionais e levar a regressões no nível do usuário. No entanto, a quebra de comportamento pode ser causada não apenas por mudanças na ABI, remoção de código obsoleto ou surgimento de erros, mas também por impacto indireto em melhorias úteis que funcionam corretamente. Como exemplo claro, foi uma otimização A otimização levou à de que, devido à redução da atividade do disco, a entropia para o gerador de números aleatórios getrandom() começou a acumular-se mais lentamente e, em algumas configurações, sob certas circunstâncias, podiam ser observados congelamentos durante a inicialização até que o pool de entropia fosse preenchido. Como a otimização é realmente útil, uma discussão surgiu entre os desenvolvedores, propondo resolver o problema desativando por padrão o modo de bloqueio da chamada getrandom() com a adição de um flag opcional para esperar a entropia, mas tal mudança afetaria a qualidade dos números aleatórios no início do processo de inicialização.
Na nova versão, foram incluídas 15794 correções de 1974 desenvolvedores,
o tamanho do patch é de 92 MB (as mudanças afetaram 13986 arquivos, adicionando 258419 linhas de código,
removendo 599137 linhas). Cerca de 39% de todas as alterações apresentadas em 5.3
estão relacionadas a drivers de dispositivos, aproximadamente 12% das alterações têm
relação com a atualização de código específico para arquiteturas de hardware, 11%
.
relacionado à pilha de rede, 3% — sistemas de arquivos e 3% com internos
subsistemas do núcleo.
:
- Memória e serviços do sistema
- Continuação do desenvolvimento da funcionalidade ‘pidfd’, que ajuda a lidar com situações de reutilização de PID (o pidfd está vinculado a um processo específico e não muda, enquanto o PID pode ser atribuído a outro processo após a conclusão do processo atual associado a esse PID). Antes, já havia sido adicionado ao núcleo
a chamada de sistema pidfd_send_signal() e a flag CLONE_PIDFD na chamada clone(), permitindo obter o pidfd para uso em idfd_send_signal(). Ao usar a chamada clone() com a flag CLONE_PIDFD, poderiam ocorrer problemas com gerenciadores de serviços ou o sistema de finalização forçada de processos em plataformas Android com falta de memória. Nesse caso, a chamada fork() ou clone() é usada sem CLONE_PIDFD.No núcleo 5.3, foi apresentada a chamada de sistema , permitindo obter um pidfd validado para um processo existente aleatório, criado não através da chamada clone() com a flag CLONE_PIDFD. Também foi adicionada suporte para fazer polling do pidfd usando poll() e epoll(), o que permite gerenciadores de processos monitorar a finalização de processos aleatórios, sem se preocupar com condições de corrida no caso de um novo processo receber um PID. O mecanismo de notificação para a finalização do processo relacionado ao pidfd é semelhante à notificação sobre a finalização de seu próprio processo filho;
- No escalonador de tarefas, foi adicionada suporte ao mecanismo de controle de carga (), permitindo a adesão a intervalos mínimos ou máximos de frequência, dependendo das tarefas ativas na CPU. O mecanismo apresentado acelera tarefas que impactam diretamente a qualidade da interação com o usuário, ao executar essas tarefas pelo menos na fronteira inferior da frequência “solicitada”. Tarefas de baixa prioridade, que não afetam o trabalho do usuário, são executadas usando o limite superior da frequência “permitida”. Os limites são definidos através dos atributos sched_uclamp_util_min e sched_uclamp_util_max na chamada de sistema sched_setattr().
- Foi adicionada suporte à tecnologia de gerenciamento de consumo de energia , disponível em alguns servidores com processadores Intel Xeon. A tecnologia mencionada permite configurar o desempenho e a largura de banda dos núcleos do CPU de maneira diferente, priorizando o desempenho para tarefas executadas em núcleos específicos e sacrificando o desempenho em outros núcleos;
- Processos no espaço do usuário a possibilidade de aguardar por um curto período sem o uso de ciclos por meio da instrução umwait. Esta instrução, junto com as instruções umonitor e tpause, será oferecida nos futuros chips Intel 'Tremont', permitindo implementar atrasos que são eficientes em termos de consumo de energia e que não afetam o desempenho de outras threads ao usar Hyper Threading;
- Para a arquitetura RISC-V, foi adicionado suporte a páginas de memória grandes (huge pages);
- No mecanismo de rastreamento 'kprobes', foi adicionada a capacidade de desreferenciar ponteiros do núcleo no espaço do usuário, o que pode ser aplicado, por exemplo, para avaliar o conteúdo de estruturas passadas em chamadas de sistema. Também foi adicionada a possibilidade de implementar verificações na fase de inicialização.
- Foi adicionada a opção PREEMPT_RT ao arquivo de configuração para operar em modo de tempo real. O próprio código para suportar o modo de tempo real ainda não foi adicionado ao núcleo, mas a presença da opção é um bom sinal de que a longa saga dos patches Realtime-Preempt está se aproximando do fim;
- Foi adicionada a chamada de sistema clone3() com a implementação de uma versão do interface clone() mais extensível, permitindo a especificação de um maior número de flags;
- Foi adicionador o manipulador bpf_send_signal(), que permite que programas BPF enviem sinais para processos arbitrários;
- Para eventos perf no ambiente do hipervisor KVM, foi adicionado um novo mecanismo de filtragem de eventos, permitindo que o administrador defina os tipos de eventos permitidos ou não permitidos para monitoramento do lado do sistema convidado;
- No mecanismo de verificação de aplicativos eBPF, foi adicionada a capacidade de processar programas com laços, desde que a execução do laço seja limitada e não possa levar ao excedente do limite máximo de instruções;
- Continuação do desenvolvimento da funcionalidade ‘pidfd’, que ajuda a lidar com situações de reutilização de PID (o pidfd está vinculado a um processo específico e não muda, enquanto o PID pode ser atribuído a outro processo após a conclusão do processo atual associado a esse PID). Antes, já havia sido adicionado ao núcleo
- Subsistema de disco, entrada/saída e sistemas de arquivos
- Para o sistema de arquivos XFS, foi implementada a capacidade de varredura de inode em múltiplos threads (por exemplo, ao verificar cotas). Novos ioctl BULKSTAT e INUMBERS foram adicionados, proporcionando acesso às capacidades que surgiram na quinta edição do formato de sistema de arquivos, como o tempo de criação do inode e a possibilidade de definir os parâmetros BULKSTAT e INUMBERS para cada grupo AG (Allocation Groups);
- No Ext4 lacunas em diretórios (blocos não vinculados).
do flag 'i' (imutável) para arquivos abertos (proibição de gravação em situações em que o flag foi ativado no momento em que o arquivo já estava aberto); - No Btrfs, foi implementada a determinação de uma implementação rápida de crc32c em todas as arquiteturas;
- No CIFS, o código para suporte ao smbdirect teve seu status de desenvolvimento experimental removido. No SMB3, foi adicionada a capacidade de usar algoritmos criptográficos em modo GCM. Uma nova opção de montagem foi adicionada para extrair parâmetros de modo de registros ACE (Access Control Entry). A performance da chamada open() foi otimizada;
- No F2FS, foi adicionada uma opção para limitar o coletor de lixo ao operar no modo checkpoint=disable. Um ioctl foi adicionado para remover intervalos de blocos do F2FS, permitindo ajustar o tamanho da partição em tempo real. Foi implementada a possibilidade de alocar um arquivo de paginação no F2FS com suporte à entrada/saída direta. Para todos os usuários, foi adicionada a capacidade de pinçar arquivos e alocar blocos para esses arquivos;
- Foi adicionada ao interface de entrada/saída assíncrona io_uring o suporte a operações assíncronas sendmsg() e recvmsg();
- No sistema de arquivos UBIFS, foi adicionada a suporte a compressão usando o algoritmo zstd e a possibilidade de verificação de imagens de sistema de arquivos assinadas;
- No sistema de arquivos Ceph, foi adicionada a suporte a rótulos de segurança SELinux para arquivos;
- Para o NFSv4, foi implementada uma nova opção de montagem 'nconnect=', definindo o número de conexões estabelecidas com o servidor. O tráfego entre essas conexões será distribuído usando balanceamento de carga. Além disso, um diretório /proc/fs/nfsd/clients agora é criado pelo servidor NFSv4 com informações sobre os clientes atuais, incluindo detalhes sobre os arquivos que abriram;
- Virtualização e segurança
- O núcleo inclui um hipervisor para dispositivos integrados , que foi escrito levando em consideração a prontidão para realizar tarefas em tempo real e adequação para uso em sistemas críticos. O ACRN garante baixa sobrecarga, garante baixa latência e adequada responsividade ao interagir com o hardware. Suporta a virtualização de recursos de CPU, entrada/saída, subsistema de rede, operações de gráficos e som. O ACRN pode ser aplicado para executar várias máquinas virtuais isoladas em blocos de controle eletrônico, painéis de instrumentos, sistemas de informação automotivos, dispositivos de IoT de consumo e outras técnicas embarcadas;
- No User-mode Linux modo de ‘viagem no tempo’, permitindo desacelerar ou acelerar o tempo no ambiente virtual UML para facilitar a depuração de código relacionado ao tempo. Além disso, foi adicionado o parâmetro
time-travel-start, permitindo iniciar os relógios do sistema a partir de um momento especificado no formato epoch; - Novas opções de linha de comando do núcleo ‘init_on_alloc’ e ‘init_on_free’ foram adicionadas, que ativam a zeragem das áreas de memória alocadas e liberadas (preenchimento com zeros durante malloc e free), aumentando a segurança com um custo adicional de inicialização;
- Um novo driver foi adicionado , implementando um dispositivo paravirtualizado que permite enviar solicitações IOMMU, como ATTACH, DETACH, MAP e UNMAP, sobre o transporte virtio sem emulação de tabelas de páginas de memória;
- Um novo driver foi adicionado , representando o acesso a dispositivos de armazenamento espelhados no espaço de endereços físicos, como NVDIMM;
- Foi implementada a capacidade de anexar chaves criptográficas a um espaço de nomes de usuário ou de rede (as chaves se tornam inacessíveis fora do espaço de nomes selecionado), assim como a proteção das chaves por meio de ACL;
- No subsistema de criptografia suporte a um algoritmo de hash não criptográfico muito rápido , cuja velocidade é limitada pelo desempenho da memória;
- Subsistema de Rede
- Foi habilitado o processamento de endereços IPv4 no intervalo 0.0.0.0/8, que anteriormente não estava disponível para uso. A introdução deste sub-rede distribuirá mais 16 milhões de endereços IPv4;
- No Netfilter para nftables suporte a mecanismos de aceleração de hardware para filtragem de pacotes por meio da aplicação dos drivers adicionados . As interfaces de rede podem carregar tabelas inteiras de regras com todas as cadeias. A ativação é realizada através da vinculação da flag NFT_TABLE_F_HW à tabela. Suporta metadados simples dos protocolos de nível 3 e 4, ações de aceitar/rejeitar, correspondências por IP e portas de rede do remetente/receptor e tipo de protocolo;
- suporte embutido para rastreamento de conexões para pontes de rede, sem a necessidade de uma camada emuladora br_netfilter;
- No nf_tables suporte para o módulo SYNPROXY, que replica funcionalidade semelhante do iptables, e também implementada a verificação em regras de opções específicas no cabeçalho IPv4;
- Adicionada a possibilidade de anexar programas BPF a chamadas de sistema setsockopt() e getsockopt(), permitindo, por exemplo, anexar seus manipuladores de acesso a essas chamadas. Além disso, um novo ponto de chamada (hook) foi adicionado, permitindo a chamada de um programa BPF uma vez por intervalo RTT (round-trip-time, tempo de ping);
- Para IPv4 e IPv6 novo mecanismo de armazenamento de dados de roteamento nexthop, visando aumentar a escalabilidade das tabelas de roteamento. Testes realizados mostraram que, usando o novo sistema, um conjunto de 743 mil rotas foi carregado no kernel em apenas 4,3 segundos;
- Para Bluetooth funcionalidade necessária para suporte a LE ping;
- Hardware
- suporte para processadores x86 compatíveis da empresa , desenvolvidos como resultado de um projeto conjunto da VIA Technologies e do município de Xangai. A família de CPU ZX é baseada na arquitetura x86-64 Isaiah, que continua a evolução das tecnologias ;
- No subsistema DRM (Direct Rendering Manager), assim como nos drivers gráficos amdgpu e i915, foi adicionada a suporte para análise, processamento e envio através do porto HDMI de metadados HDR (gama dinâmica expandida), permitindo o uso de painéis e telas HDR que podem exibir faixas adicionais de brilho;
- No driver amdgpu, foi adicionada a suporte inicial para a GPU AMD NAVI (RX5700), que inclui um driver básico, código para interação com telas (DCN2), suporte a GFX e cálculos (GFX10),
SDMA 5 (System DMA0), gerenciamento de energia e codificadores/decodificadores multimídia (VCN2). No amdgpu, também foram melhorados o suporte para placas baseadas em GPU Vega12 e Vega20, para as quais foram adicionadas capacidades adicionais de gerenciamento de memória e consumo de energia; - O driver amdkfd (para GPUs discretas, como Fiji, Tonga, Polaris) adicionou suporte para placas baseadas em GPU VegaM;
- No driver DRM para placas de vídeo Intel para chips Icelake novo modo de correção gama multissegmentar. Foi adicionada a capacidade de saída via DisplayPort no formato YCbCr4:2:0. Novos firmwares foram adicionados para SKL, BXT, KBL, GLK e ICL. Foi implementada a capacidade de desligar a energia da tela em modo assíncrono. suporte para salvar e restaurar o contexto de renderização para chips Ironlake (gen5) e gen4 (Broadwater — Cantiga), permitindo que o estado da GPU seja restaurado do espaço do usuário ao alternar entre a execução de operações em lotes diferentes;
- No driver Nouveau, foi assegurada a identificação do chipset NVIDIA Turing TU116;
- As capacidades do driver DRM/KMS para aceleradores de operações de tela ARM Komeda (Mali D71) foram expandidas, adicionando suporte para escalonamento, divisão/fusão de camadas, rotação, gravação adiada, AFBC, SMMU e formatos de codificação de cores Y0L2, P010, YUV420_8/10BIT;
- No driver MSM, foi adicionado suporte para a série A540 GPU Adreno, usada em processadores Qualcomm, bem como suporte para o controlador DSI MSM8998 para Snapdragon 835;
- Foram adicionados drivers para painéis LCD Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS,
Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 e VXT VL050-8048NT-C01; - driver para ativar os recursos de aceleração de decodificação
de vídeo disponíveis no SoC Amlogic Meson; - No driver v3d (para GPU Broadcom Video Core V, usada no Raspberry Pi) foi introduzido o gerenciamento de shaders computacionais;
- driver para teclados SPI e trackpads usados em modelos modernos de notebooks Apple MacBook e MacBookPro;
- uma proteção adicional para chamadas ioctl relacionadas ao driver floppy, e o próprio driver foi marcado como obsoleto
(«orphaned»), o que implica a interrupção de seus testes. O driver permanece no núcleo, mas seu funcionamento correto não é garantido. O driver é considerado obsoleto, pois é difícil encontrar hardware que funcione para seus testes — todos os dispositivos de armazenamento externos atuais normalmente utilizam a interface USB. - driver cpufreq para placas Raspberry Pi, permitindo o gerenciamento dinâmico da frequência do processador;
- Adicionada a suportar novos SoCs ARM Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSPs + MMA) e Amlogic G12B (4x Cortex-A73 + 2x Cortex-A53), bem como placas:
- ,
- Aspeed BMC,
- Microsoft Olympus BMC,
- Kontron SMARC,
- Novtech Meerkat96 (i.MX7),
- ST Micro Avenger96,
- Google Cheza (Qualcomm SDM845),
- Qualcomm Dragonboard 845c (Qualcomm SDM845),
- Hugsun X99 TV Box (Rockchip RK3399),
- Khadas Edge/Edge-V/Captain (Rockchip RK3399),
- HiHope RZ/G2M,
- NXP LS1021A-TSN.
Simultaneamente, o Fundo Latino-Americano de Software Livre
uma variante — , limpo de elementos de firmware e drivers que contêm componentes ou trechos de código não livres, cuja aplicação é restrita pelo fabricante. Na nova versão, o carregamento de blobs nos drivers qcom, hdcp drm, allegro-dvt e meson-vdec foi desativado.
O código de limpeza de blobs nos drivers e subsistemas amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, driver de som para skylake, bem como na documentação para o microcódigo foi atualizado.
Fonte: opennet.ru
