Lançamento do kernel Linux 5.9

Após dois meses de desenvolvimento, Linus Torvalds apresentou lançamento do núcleo Linux 5.9. Entre as mudanças mais notáveis estão: a limitação da importação de símbolos de módulos proprietários para módulos GPL, a aceleração das operações de troca de contexto usando a instrução FSGSBASE do processador, suporte à compressão da imagem do kernel usando Zstd, uma reorganização na atribuição de prioridades para threads no núcleo, suporte ao protocolo PRP (Protocolo de Redundância Paralela), agendamento considerando a largura de banda no escalonador deadline, empacotamento proativo de páginas de memória, a flag de capacidade CAP_CHECKPOINT_RESTOR, a chamada de sistema close_range(), aumento de desempenho do dm-crypt, remoção de código para sistemas convidados de 32 bits Xen PV, um novo mecanismo de gerenciamento de memória slab, a opção "rescue" no Btrfs, suporte à criptografia inline no ext4 e F2FS.

A nova versão contém 16074 correções de 2011 desenvolvedores,
o tamanho do patch é de 62 MB (as mudanças afetaram 14548 arquivos, foram adicionadas 782155 linhas de código e removidas 314792 linhas). Aproximadamente 45% de todas as mudanças apresentadas no 5.9
estão relacionadas a drivers de dispositivos, cerca de 15% das mudanças têm
relação com a 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 internas.
subsistemas do núcleo.

Principais novidades:

  • Memória e serviços do sistema
    • O aumento da proteção contra o uso de camadas GPL para vincular drivers proprietários a componentes do núcleo, exportados apenas para módulos sob licença GPL. A flag TAINT_PROPRIETARY_MODULE agora é herdada em todos os módulos que importam símbolos de módulos com essa flag. Se um módulo GPL tentar importar símbolos de um módulo não-GPL, esse módulo GPL herdar uma marca TAINT_PROPRIETARY_MODULE e não poderá acessar componentes do núcleo disponíveis apenas para módulos sob licença GPL, mesmo que o módulo anteriormente tenha importado símbolos da categoria "gplonly". O bloqueio reverso (exportação apenas de EXPORT_SYMBOL_GPL em módulos que importaram EXPORT_SYMBOL_GPL), o que poderia afetar o funcionamento de drivers proprietários, não foi implementado (apenas a flag de módulo proprietário é herdada, mas não as ligações GPL).
    • Adicionada suporte ao mecanismo kcompactd para empacotamento proativo de páginas de memória em segundo plano, permitindo aumentar o número de páginas de memória grandes disponíveis para o núcleo. A princípio, a compactação em segundo plano a um custo mínimo de sobrecarga permite reduzir em 70-80 vezes as latências na alocação de grandes páginas de memória (huge-page) em comparação com o mecanismo de compactação anterior, ativado apenas quando necessário (on-demand). Para definir os limites da fragmentação externa que será garantida pelo kcompactd, foi adicionado o sysctl vm.compaction_proactiveness.
    • Adicionada suporte à compressão da imagem do núcleo usando o algoritmo Zstandard (zstd).
    • Para sistemas x86, foi implementado o suporte à instrução de processador FSGSBASE, que permite ler e modificar o conteúdo dos registradores FS/GS a partir do espaço do usuário. No núcleo, o FSGSBASE é usado para acelerar as operações de alternância de contexto, eliminando operações de gravação MSR desnecessárias para GSBASE, e no espaço do usuário, permite evitar chamadas de sistema desnecessárias para modificar FS/GS.
    • Adicionado o parâmetro "allow_writes", que permite proibir alterações aos registradores MSR do processador a partir do espaço do usuário e limitar o acesso ao conteúdo desses registradores apenas a operações de leitura, pois a modificação dos MSR pode causar problemas. Por padrão, a gravação ainda não está proibida, e a alteração dos MSR é registrada no log, mas no futuro está previsto que o acesso por padrão seja alterado para modo somente leitura.
    • Na interface de entrada/saída assíncrona io_uring foi adicionada a suporte total a operações assíncronas de leitura em buffer, que não requerem a participação de threads do núcleo. O suporte à gravação está previsto para a próxima versão.
    • No escalonador de entrada/saída deadline implementado o planejamento considerando a largura de banda, permite tomar decisões corretas em sistemas assimétricos, como sistemas ARM baseados nas arquiteturas DynamIQ e big.LITTLE, que combinam em um único chip núcleos de CPU poderosos e menos eficientes em termos de energia. Em particular, o novo modo evita desarmonizações durante o planejamento, quando um núcleo de CPU lento não tem recursos adequados para concluir a tarefa dentro do prazo estipulado.
    • O modelo de consumo de energia no núcleo (framework Energy Model) agora descreve não apenas o comportamento do consumo de energia da CPU, mas também abrange dispositivos periféricos.
    • Foi implementada a chamada de sistema close_range(), permitindo que um processo feche um intervalo inteiro de descritores de arquivo abertos de uma só vez.
    • Da implementação do console de texto e do driver fbcon foi removido o código, que proporcionava a possibilidade de rolagem programática do texto para trás (CONFIG_VGACON_SOFT_SCROLLBACK) além da quantidade de memória de vídeo do modo texto VGA.
    • Revisado o algoritmo de atribuição de prioridade para threads dentro do núcleo. A nova versão proporciona melhor coerência em todos os subsistemas do núcleo na atribuição de prioridades para tarefas em tempo real.
    • Adicionado sysctl sched_uclamp_util_min_rt_default para gerenciar os parâmetros de forçagem de frequência do CPU para tarefas em tempo real (por exemplo, é possível alterar o comportamento durante a execução de tarefas em tempo real para economizar energia após a mudança para a alimentação da bateria ou em sistemas móveis).
    • Foi feita a preparação para a implementação do suporte à tecnologia Transparent Huge Pages no cache de páginas.
    • No mecanismo fanotify, foram implementadas novas bandeiras FAN_REPORT_NAME e FAN_REPORT_DIR_FID para transmitir informações sobre o nome pai e o identificador único FID ao ocorrer eventos de criação, exclusão ou movimentação de elementos de diretório e objetos não relacionados a diretórios.
    • Para cgroups implementado um novo controlador de alocação de memória slab (slab memory controller), que é notável por transferir o gerenciamento de slab do nível de páginas de memória para o nível de objetos do núcleo, permitindo o compartilhamento de páginas slab entre diferentes cgroups, em vez da alocação de caches slab separados para cada cgroup. A abordagem proposta permite aumentar a eficiência do uso do slab, reduzindo entre 30-45% o tamanho da memória utilizada para slab, diminuindo significativamente o consumo total de memória pelo núcleo e reduzindo a fragmentação de memória.
    • No subsistema de som ALSA e pilha USB, de acordo com as recomendações recentemente aceitas sobre o uso de terminologia inclusiva no núcleo do Linux, foi realizada a limpeza de termos não politicamente corretos. O código foi limpo do uso das palavras "slave", "master", "blacklist" e "whitelist".
  • Virtualização e segurança
    • Ao compilar o núcleo utilizando o compilador Clang foi introduzida a possibilidade de configuração (CONFIG_INIT_STACK_ALL_ZERO) para a inicialização automática com zero de todas as variáveis armazenadas na pilha (durante a compilação, é especificado "-ftrivial-auto-var-init=zero").
    • No subsistema seccomp, ao usar o modo de controle de processos no espaço do usuário, foi adicionada a possibilidade substituições em processos acompanhados de descritores de arquivos para emular completamente chamadas de sistema que levam à criação de descritores de arquivos. Essa funcionalidade é valiosa em sistemas de contêineres isolados e na implementação de sandbox para o Chrome.
    • Para as arquiteturas xtensa e csky, foi adicionada a suporte para restringir chamadas de sistema usando o subsistema seccomp. Para xtensa, foi implementado suporte adicional ao mecanismo de auditoria.
    • Adicionado nova flag de capacidade CAP_CHECKPOINT_RESTORE, permitindo, sem a necessidade de privilégios adicionais, acesso a recursos relacionados à congelamento e restauração de estados de processos.
    • No GCC 11, foram implementadas todas as funcionalidades necessárias para
      a ferramenta de depuração KCSAN (Kernel Concurrency Sanitizer), destinada à identificação dinâmica de condições de corrida dentro do núcleo. Assim, o KCSAN agora pode ser utilizado com núcleos compilados no GCC.
    • Para AMD Zen e modelos de CPU mais novos, foi adicionada suporte à tecnologia P2PDMA, que permite usar DMA para transferência direta de dados entre a memória de dois dispositivos conectados ao barramento PCI.
    • No dm-crypt, foi adicionado um modo que reduz latências ao realizar o processamento criptográfico de dados sem usar filas de trabalho. Esse modo também é necessário para o correto funcionamento com dispositivos de bloco com zonas (dispositivos com áreas que devem ser gravadas sequencialmente com a atualização de todo o grupo de blocos). Foi feito trabalho para aumentar a largura de banda e reduzir as latências no dm-crypt.
    • Foi removido o código para suporte a sistemas convidados de 32 bits operando em modo de paravirtualização sob o hipervisor Xen. Usuários desses sistemas devem migrar para núcleos de 64 bits em ambientes de convidados ou usar modos de virtualização completa (HVM) ou combinada (PVH) em vez da paravirtualização (PV).
  • Subsistema de disco, entrada/saída e sistemas de arquivos
    • No sistema de arquivos Btrfs, são implementadas a opção de montagem "rescue", unificando o acesso a todas as outras opções de recuperação. O suporte às opções "alloc_start" e "subvolrootid" foi removido, e a opção "inode_cache" foi declarada obsoleta. Foi realizada uma otimização de desempenho, tornando-se particularmente notável a aceleração nas operações fsync(). Adicionada possibilidade de usar tipos alternativos de somas de verificação, diferentes de CRC32c.
    • Adicionada possibilidade de usar a criptografia inline (Inline Encryption) nos sistemas de arquivos ext4 e F2FS, cuja ativação é feita por meio da opção de montagem "inlinecrypt". O modo de criptografia inline permite utilizar os mecanismos de criptografia integrados no controlador de armazenamento, que realizam a criptografia e descriptografia transparentes de entrada/saída.
    • No XFS garantido descarga de inode (flush) em modo totalmente assíncrono, sem bloquear processos durante a operação de limpeza de memória. Resolvido um problema de longa data com quotas, que impedia o rastreamento correto de avisos sobre a superação do limite suave e restrições no número de inodes. Implementação unificada do suporte a DAX para ext4 e xfs.
    • No Ext4 são implementadas pré-carregamento de mapas de bits de distribuição de blocos. Em combinação com a limitação de varredura de grupos não inicializados, a otimização permitiu reduzir o tempo de montagem de partições muito grandes.
    • No F2FS o sinalizador -k para integração com ioctl F2FS_IOC_SEC_TRIM_FILE, que permite usar comandos TRIM/discard para a zeragem física de dados especificados em um arquivo, por exemplo, para remover chaves de acesso sem deixar dados residuais no armazenamento.
      No F2FS também o sinalizador -k para integração com um novo modo de coleta de lixo GC_URGENT_LOW, que opera de forma mais agressiva ao excluir algumas verificações de estado ocioso (idle) antes de iniciar o coletor de lixo.
    • No bcache, o tamanho bucket_size para extensões aumentou de 16 para 32 bits no âmbito da preparação para viabilizar o uso em cache de dispositivos zonificados.
    • Na subsistema SCSI, adicionada a possibilidade de usar criptografia inline baseada em recursos de hardware integrados, fornecidos pelos controladores UFS (Universal Flash Storage).
    • Adicionado um novo parâmetro de linha de comando do kernel "debugfs", permitindo gerenciar a disponibilidade do sistema de arquivos pseudo nomeado.
    • No cliente NFSv4.2, garantido o suporte a atributos estendidos de arquivos (xattr).
    • No dm-dust o sinalizador -k para integração com interface para listar todos os bad blocks detectados no disco de uma vez ("dmsetup message dust1 0 listbadblocks").
    • Para md/raid5, adicionado o parâmetro "/sys/block/md1/md/stripe_size" para configurar o tamanho do bloco STRIPE.
    • Para dispositivos de armazenamento NVMe foi adicionada suporte para equipes de zonamento de armazenamento (ZNS, NVM Express Zoned Namespace), permitindo dividir o espaço de armazenamento em zonas que formam grupos de blocos, para um gerenciamento mais completo da alocação de dados no armazenamento.
  • Subsistema de Rede
    • No Netfilter foi adicionada a capacidade de rejeitar pacotes na fase anterior à verificação de roteamento (a expressão REJECT agora pode ser usada não apenas nas cadeias INPUT, FORWARD e OUTPUT, mas também na fase PREROUTING para icmp e tcp).
    • No nftables foi adicionada a capacidade de auditoria de eventos relacionados à alteração de configuração.
    • No nftables na API netlink foi adicionada suporte para cadeias anônimas, cujo nome é atribuído dinamicamente pelo kernel. Ao remover a regra associada à cadeia anônima, a própria cadeia também é automaticamente removida.
    • No BPF, foi adicionada suporte para iteradores para percorrer, filtrar e modificar elementos de arrays associativos (map) sem copiar dados para o espaço do usuário. Os iteradores podem ser usados para sockets TCP e UDP, permitindo que programas BPF percorram listas de sockets abertos e extraiam as informações necessárias.
    • Adicionado um novo tipo de programas BPF BPF_PROG_TYPE_SK_LOOKUP, executados no momento em que o kernel procura um socket ouvindo adequado para uma conexão de entrada. Com um programa BPF semelhante, é possível criar manipuladores que decidem com qual socket associar a conexão, sem estar restritos à chamada de sistema bind(). Por exemplo, pode-se fazer a ligação de um socket a um intervalo de endereços ou portas. Além disso, no bpf_setsockopt() foi adicionada a suporte para a flag SO_KEEPALIVE e implementada a possibilidade de estabelecer manipuladores BPF_CGROUP_INET_SOCK_RELEASE, chamados quando o socket é liberado.
    • Implementado suporte ao protocolo PRP (Protocolo de Redundância Paralela), que permite na base do Ethernet realizar a comutação transparente para aplicativos em um canal de backup em caso de falha de quaisquer componentes da rede.
    • No stack mac80211 foi adicionada suporte para a negociação de quatro etapas do canal WPA/WPA2-PSK no modo ponto de acesso.
    • Adicionada a capacidade de mudar o escalonador qdisc (disciplina de enfileiramento) para usar por padrão o algoritmo de gerenciamento de filas de rede FQ-PIE (Flow Queue PIE), visando reduzir o impacto negativo do buffer intermediário em pacotes no equipamento de rede de borda (bufferbloat) em redes com modems a cabo.
    • Novas funcionalidades foram adicionadas ao MPTCP (MultiPath TCP), extensões do protocolo TCP para organizar a operação da conexão TCP com entrega de pacotes simultaneamente por vários caminhos através de diferentes interfaces de rede, associadas a diferentes endereços IP. Suporte foi adicionado a syn cookie, DATA_FIN, autoajuste de buffers, diagnóstico de sockets e ao uso das flags REUSEADDR, REUSEPORT e V6ONLY em setsockopt.
    • Para tabelas de roteamento virtuais VRF (Virtual Routing and Forwarding), que permitem organizar a operação de vários domínios de roteamento em um único sistema, foi implementado o modo "strict". Neste modo, a tabela virtual pode ser associada somente a uma tabela de roteamento que não é utilizada em outras tabelas virtuais.
    • No driver sem fio ath11k foi adicionada suporte à frequência de 6GHz e escaneamento espectral.
  • Hardware
    • O código para suporte à arquitetura UniCore, desenvolvida no centro de microprocessadores da Universidade de Pequim e incluída no núcleo do Linux em 2011, foi removido. Esta arquitetura está descontinuada desde 2014 e não possui suporte no GCC.
    • Para a arquitetura RISC-V, foi implementado suporte a kcov (interface debugfs para análise de cobertura de código do núcleo), kmemleak (sistema de detecção de vazamentos de memória), proteção de pilha, tags de salto e operações tickless (multitarefa independente de sinais de temporizador).
    • Para a arquitetura PowerPC, foi implementado suporte a filas para spinlock, permitindo um aumento significativo de desempenho em situações de conflito de bloqueios.
    • Para as arquiteturas ARM e ARM64, o mecanismo de controle de frequência do processador schedutil (governador cpufreq), que utiliza informações diretamente do agendador de tarefas para tomar decisões sobre mudanças de frequência, pode imediatamente acessar os drivers cpufreq para uma alteração rápida de frequência, ajustando instantaneamente os parâmetros de operação da CPU à carga atual.
    • No driver DRM i915 para placas gráficas Intel, foi adicionado suporte a chips baseados na microarquitetura Rocket Lake e suporte inicial para placas discretas Intel Xe DG1..
    • No driver amdgpu, suporte inicial foi adicionado para a GPU AMD Navi 21 (Navy Flounder) e Navi 22 (Sienna Cichlid). Adicionado suporte a mecanismos de aceleração de codificação e decodificação de vídeo UVD/VCE para GPUs Southern Islands (Radeon HD 7000).
      Foi adicionada uma propriedade para girar a exibição em 90, 180 ou 270 graus.

      Curiosamente, o driver para GPU AMD é o maior driver do núcleo — ele possui cerca de 2,71 milhões de linhas de código, o que representa cerca de 10% do tamanho total do núcleo (27,81 milhões de linhas). Deste total, 1,79 milhões de linhas são dedicadas a arquivos de cabeçalho gerados automaticamente com dados para registradores de GPU, enquanto o código em C corresponde a 366 mil linhas (para comparação, o driver Intel i915 inclui 209 mil linhas, e o Nouveau — 149 mil).

    • No driver Nouveau foi adicionada suporte para verificação de integridade por quadro usando CRC (Verificações de Redundância Cíclica) nos motores de exibição da GPU NVIDIA. A implementação é baseada na documentação fornecida pela NVIDIA.
    • Drivers foram adicionados para painéis LCD: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 e Xingbangda XBD599.
    • Na subsistema de áudio ALSA, foi implementado o suporte para Intel Silent Stream (modo de manutenção contínua de energia para dispositivos HDMI externos para eliminar a latência no início da reprodução) e um novo dispositivo para controlar a iluminação dos botões de ativação do microfone e desligamento do som, além de ter adicionado suporte para novo hardware, incluindo o controlador Loongson 7A1000.
    • Suporte adicionado para placas ARM, dispositivos e plataformas: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (utilizado no Sony Xperia 10, 10 Plus, XA2, XA2 Plus e XA2 Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, cinco novas placas baseadas em NXP i.MX6, MikroTik RouterBoard 3011, Xiaomi Libra, Microsoft Lumia 950, Sony Xperia Z5, MStar, Microchip Sparx5, Intel Keem Bay, Amazon Alpine v3, Renesas RZ/G2H.

Ao mesmo tempo, a Fundação Latino-Americana de Software Livre formou
uma variante nucleo completamente livre 5.9 — Linux-libre 5.9-gnu, limpo de elementos de firmwares e drivers que contêm componentes não livres ou trechos de código cuja aplicação é restrita pelo fabricante. Na nova versão, o carregamento de blobs nos drivers para WiFi rtw8821c e SoC MediaTek mt8183 foi desativado. O código de limpeza de blobs em drivers e subsistemas Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) e x86 touchscreen foi atualizado.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster