Kernel Linux versão 5.9

Após dois meses de desenvolvimento, Linus Torvalds introduzido lançamento do kernel Linux 5.9. Entre as mudanças mais notáveis: limitar a importação de símbolos de módulos proprietários para módulos GPL, acelerar as operações de troca de contexto usando a instrução do processador FSGSBASE, suporte para compactação de imagem do kernel usando Zstd, retrabalhar a priorização de threads no kernel, suporte para o PRP (Protocolo de Redundância Paralela), agendamento com reconhecimento de largura de banda no agendador de prazo, empacotamento preemptivo de páginas de memória, sinalizador de capacidade CAP_CHECKPOINT_RESTOR, chamada de sistema close_range(), melhorias de desempenho dm-crypt, remoção de código para convidados Xen PV de 32 bits, nova memória de placa mecanismo de gerenciamento, opção “resgate” em Btrfs, suporte para criptografia inline em ext4 e F2FS.

A nova versão inclui 16074 correções de desenvolvedores de 2011,
tamanho do patch - 62 MB (as alterações afetaram 14548 arquivos, 782155 linhas de código foram adicionadas, 314792 linhas foram excluídas). Cerca de 45% de todos apresentados em 5.9
alterações estão relacionadas a drivers de dispositivos, aproximadamente 15% das alterações são
atitude em relação à atualização de código específico para arquiteturas de hardware, 13%
relacionado à pilha de rede, 3% aos sistemas de arquivos e 3% aos internos
subsistemas do kernel.

O principal inovações:

  • Serviços de memória e sistema
    • Apertado proteção contra o uso de camadas GPL para vincular drivers proprietários a componentes do kernel exportados apenas para módulos sob a licença GPL. O sinalizador TAINT_PROPRIETARY_MODULE agora é herdado em todos os módulos que importam símbolos de módulos com este sinalizador. Se um módulo GPL tentar importar símbolos de um módulo não-GPL, então esse módulo GPL herdará o rótulo TAINT_PROPRIETARY_MODULE e não será capaz de acessar os componentes do kernel disponíveis apenas para módulos licenciados pela GPL, mesmo que o módulo tenha importado anteriormente símbolos de a categoria "gplonly". O bloqueio reverso (exportando apenas EXPORT_SYMBOL_GPL em módulos que importaram EXPORT_SYMBOL_GPL), que poderia interromper o trabalho dos drivers proprietários, não é implementado (apenas o sinalizador do módulo proprietário é herdado, mas não as ligações GPL).
    • Adicionado por suporte ao mecanismo kcompactd para pré-embalagem de páginas de memória em segundo plano para aumentar o número de páginas de memória grandes disponíveis para o kernel. De acordo com estimativas preliminares, o empacotamento em segundo plano, ao custo de sobrecarga mínima, pode reduzir os atrasos na alocação de páginas grandes de memória (página enorme) em 70-80 vezes em comparação com o mecanismo de empacotamento usado anteriormente, iniciado quando necessário (sob demanda ). Para definir os limites da fragmentação externa que o kcompactd fornecerá, foi adicionado sysctl vm.compaction_proactiveness.
    • Adicionado por suporte para compactação de imagem do kernel usando algoritmo Z padrão (zstd).
    • O suporte para instruções do processador foi implementado para sistemas x86 FSGSBASE, que permite ler e alterar o conteúdo dos registros FS/GS do espaço do usuário. No kernel, FSGSBASE é usado para acelerar operações de troca de contexto, eliminando operações desnecessárias de gravação de MSR para GSBASE, e no espaço do usuário evita chamadas de sistema desnecessárias para alterar FS/GS.
    • Adicionado o parâmetro “allow_writes” permite proibir alterações nos registros MSR do processador a partir do espaço do usuário e limitar o acesso ao conteúdo desses registros para operações de leitura, pois alterar o MSR pode levar a problemas. Por padrão, a gravação ainda não está desabilitada e as alterações no MSR são refletidas no log, mas no futuro está planejado mudar o acesso padrão para o modo somente leitura.
    • Para a interface de E/S assíncrona io_uring Adicionado suporte completo para operações de leitura assíncronas em buffer que não requerem threads de kernel. O suporte à gravação é esperado em uma versão futura.
    • No prazo do agendador de E/S implementado planejamento baseado na capacidade, permitindo tomar decisões corretas em sistemas assimétricos, como sistemas baseados em ARM DynamIQ e big.LITTLE, que combinam núcleos de CPU poderosos e menos eficientes em termos de energia em um único chip. Em particular, o novo modo permite evitar incompatibilidades de agendamento quando um núcleo lento da CPU não possui os recursos adequados para concluir uma tarefa no prazo.
    • O modelo de consumo de energia no kernel (estrutura do Modelo de Energia) agora é descreve o não apenas o comportamento do consumo de energia da CPU, mas também abrange dispositivos periféricos.
    • A chamada de sistema close_range() foi implementada para permitir que um processo feche todo um intervalo de descritores de arquivos abertos de uma só vez.
    • Da implementação do console de texto e do driver fbcon código removido, que fornece a capacidade de rolar o texto para trás programaticamente (CONFIG_VGACON_SOFT_SCROLLBACK) em mais do que a quantidade de memória de vídeo em modo de texto VGA.
    • Redesenhado algoritmo para atribuir prioridades a threads dentro do kernel. A nova opção oferece melhor consistência em todos os subsistemas do kernel ao atribuir prioridades a tarefas em tempo real.
    • Adicionado sysctl sched_uclamp_util_min_rt_default para controlar as configurações de aumento de CPU para tarefas em tempo real (por exemplo, você pode alterar o comportamento de tarefas em tempo real dinamicamente para economizar energia após alternar para bateria ou em sistemas móveis).
    • Foram feitos preparativos para implementar o suporte à tecnologia Transparent Huge Pages no cache de páginas.
    • O mecanismo fanotify implementa novos sinalizadores FAN_REPORT_NAME e FAN_REPORT_DIR_FID para relatar o nome do pai e informações exclusivas do FID quando ocorrem eventos de criação, exclusão ou movimentação para itens de diretório e objetos que não são de diretório.
    • Para grupos implementado um novo controlador de memória de placas, que é notável por mover a contabilidade de placas do nível da página de memória para o nível do objeto do kernel, o que torna possível compartilhar páginas de placas em diferentes cgroups, em vez de alocar caches de placas separados para cada cgroup. A abordagem proposta permite aumentar a eficiência do uso de laje, reduzir o tamanho da memória usada para laje em 30-45%, reduzir significativamente o consumo geral de memória do kernel e reduzir a fragmentação de memória.
    • No subsistema de som ALSA и Pilha USB, conforme recentemente adotado recomendações sobre o uso de terminologia inclusiva no kernel Linux; termos politicamente incorretos foram eliminados. O código foi limpo das palavras “escravo”, “mestre”, “lista negra” e “lista branca”.
  • Virtualização e Segurança
    • Ao construir o kernel usando o compilador Clang apareceu a capacidade de configurar (CONFIG_INIT_STACK_ALL_ZERO) a inicialização automática para zero de todas as variáveis ​​​​armazenadas na pilha (ao construir, especifique “-ftrivial-auto-var-init=zero”).
    • No subsistema seccomp, ao usar o modo de controle de processo no espaço do usuário, adicionado oportunidade substituição de descritores de arquivo no processo monitorado para emular completamente as chamadas do sistema que levam à criação de descritores de arquivo. A funcionalidade é muito procurada em sistemas de contêineres isolados e implementações de sandbox para o Chrome.
    • Para as arquiteturas xtensa e csky, foi adicionado suporte para limitar chamadas de sistema usando o subsistema seccomp. Para xtensa, o suporte para o mecanismo de auditoria é implementado adicionalmente.
    • Adicionado novo sinalizador de capacidade CAP_CHECKPOINT_RESTORE, que permite fornecer acesso a recursos relacionados ao congelamento e restauração do estado dos processos sem transferir privilégios adicionais.
    • O GCC 11 fornece todos os recursos que você precisa para
      ferramenta de depuração KCSAN (Kernel Concurrency Sanitizer), projetada para detectar dinamicamente condições de corrida dentro do kernel. Assim, o KCSAN agora pode ser usado com kernels construídos no GCC.

    • Para AMD Zen e modelos de CPU mais recentes adicionado suporte para tecnologia P2PDMA, que permite usar DMA para transferência direta de dados entre a memória de dois dispositivos conectados ao barramento PCI.
    • Um modo foi adicionado ao dm-crypt que permite reduzir a latência realizando processamento de dados criptográficos sem usar filas de trabalho. Este modo também é necessário para a operação correta com zoneado dispositivos de bloco (dispositivos com áreas que devem ser escritas sequencialmente, atualizando todo o grupo de blocos). Trabalho foi feito para aumentar o rendimento e reduzir a latência no dm-crypt.
    • Código removido para oferecer suporte a convidados de 32 bits em execução no modo de paravirtualização executando o hipervisor Xen. Os usuários de tais sistemas devem passar a usar kernels de 64 bits em ambientes convidados ou usar modos de virtualização completos (HVM) ou combinados (PVH) em vez de paravirtualização (PV) para executar ambientes.
  • Subsistema de disco, E/S e sistemas de arquivos
    • No sistema de arquivos Btrfs implementado uma opção de montagem de "resgate" que unifica o acesso a todas as outras opções de recuperação. O suporte para as opções "alloc_start" e "subvolrootid" foi removido e a opção "inode_cache" foi descontinuada. Otimizações de desempenho foram feitas, especialmente acelerando visivelmente a execução de operações fsync(). Adicionado por a capacidade de usar tipos alternativos de somas de verificação diferentes do CRC32c.
    • Adicionado por a capacidade de usar criptografia inline (Inline Encryption) em sistemas de arquivos ext4 e F2FS, para habilitar a opção de montagem “inlinecrypt” é fornecida. O modo de criptografia em linha permite que você use os mecanismos de criptografia integrados ao controlador da unidade, que criptografa e descriptografa a entrada/saída de forma transparente.
    • Em XFS protegido redefinição de inode (liberação) em um modo completamente assíncrono que não bloqueia processos ao executar uma operação de limpeza de memória. Resolvido um problema de cota de longa data que fazia com que os avisos de limite flexível e de limite de inode fossem rastreados incorretamente. Implementação unificada de suporte DAX para ext4 e xfs.
    • Em Ext4 implementado pré-carregar bitmaps de alocação de bloco. Combinada com a limitação da verificação de grupos não inicializados, a otimização reduziu o tempo necessário para montar partições muito grandes.
    • Em F2FS adicionado ioctl F2FS_IOC_SEC_TRIM_FILE, que permite usar os comandos TRIM/discard para redefinir fisicamente dados especificados em um arquivo, por exemplo, para excluir chaves de acesso sem deixar dados residuais na unidade.
      Em F2FS também adicionado novo modo de coleta de lixo GC_URGENT_LOW, que funciona de forma mais agressiva, eliminando algumas verificações de estado inativo antes de iniciar o coletor de lixo.

    • No bcache, o bucket_size para extensões foi aumentado de 16 para 32 bits em preparação para habilitar caches de dispositivos zoneados.
    • A capacidade de usar criptografia em linha com base na criptografia de hardware integrada fornecida pelos controladores UFS foi adicionada ao subsistema SCSI (Armazenamento Flash Universal).
    • Um novo parâmetro de linha de comando do kernel “debugfs” foi adicionado, que permite controlar a disponibilidade do pseudo-FS de mesmo nome.
    • O cliente NFSv4.2 fornece suporte para atributos de arquivo estendidos (xattr).
    • Em pó dm adicionado interface para exibir de uma só vez uma lista de todos os blocos defeituosos identificados no disco (“mensagem dmsetup dust1 0 listbadblocks”).
    • Para md/raid5, o parâmetro /sys/block/md1/md/stripe_size foi adicionado para configurar o tamanho do bloco STRIPE.
    • Para dispositivos de armazenamento NVMe adicionado suporte para comandos de zoneamento de unidade (ZNS, NVM Express Zoned Namespace), que permite dividir o espaço de armazenamento em zonas que compõem grupos de blocos para um controle mais completo sobre o posicionamento dos dados na unidade.
  • subsistema de rede
    • No Netfilter adicionado a capacidade de rejeitar pacotes no estágio 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 no estágio PREROUTING para icmp e tcp).
    • Em nftables adicionado a capacidade de auditar eventos relacionados a alterações de configuração.
    • Em nftables na API netlink adicionado suporte para cadeias anônimas, cujo nome é atribuído dinamicamente pelo kernel. Quando você exclui uma regra associada a uma cadeia anônima, a própria cadeia é excluída automaticamente.
    • O BPF adiciona suporte para iteradores percorrerem, filtrarem e modificarem elementos de matrizes associativas (mapas) sem copiar dados no espaço do usuário. Iteradores podem ser usados ​​para soquetes TCP e UDP, permitindo que programas BPF iterem sobre listas de soquetes abertos e extraiam deles as informações necessárias.
    • Adicionado um novo tipo de programa BPF BPF_PROG_TYPE_SK_LOOKUP, que é iniciado quando o kernel procura um soquete de escuta adequado para uma conexão de entrada. Usando um programa BPF como este, você pode criar manipuladores que tomam decisões sobre a qual soquete uma conexão deve ser associada, sem ser restringido pela chamada de sistema bind(). Por exemplo, você pode associar um único soquete a um intervalo de endereços ou portas. Além disso, o suporte para o sinalizador SO_KEEPALIVE foi adicionado ao bpf_setsockopt() e a capacidade de instalar manipuladores BPF_CGROUP_INET_SOCK_RELEASE, chamados quando o soquete é liberado, foi implementada.
    • Suporte de protocolo implementado PRP (Parallel Redundancy Protocol), que permite a comutação baseada em Ethernet para um canal de backup, transparente para as aplicações, em caso de falha de algum componente da rede.
    • Pilha mac80211 adicionado suporte para negociação de canal WPA/WPA2-PSK de quatro estágios no modo de ponto de acesso.
    • Adicionada a capacidade de alternar o agendador qdisc (disciplina de filas) para usar o algoritmo de gerenciamento de filas de rede FQ-PIE (Flow Queue PIE) por padrão, com o objetivo de reduzir o impacto negativo do buffer de pacotes intermediários em equipamentos de rede de ponta (bufferbloat) em redes com modems a cabo.
    • Novos recursos foram adicionados ao MPTCP (MultiPath TCP), extensões do protocolo TCP para organizar o funcionamento de uma conexão TCP com entrega de pacotes simultaneamente ao longo de diversas rotas através de diferentes interfaces de rede associadas a diferentes endereços IP. Adicionado suporte para cookie de sincronização, DATA_FIN, ajuste automático de buffer, diagnóstico de soquete e sinalizadores REUSEADDR, REUSEPORT e V6ONLY em setsockopt.
    • Para tabelas de roteamento virtual VRF (Virtual Routing and Forwarding), que permitem organizar a operação de vários domínios de roteamento em um sistema, foi implementado o modo “estrito”. Neste modo, uma tabela virtual só pode ser associada a uma tabela de roteamento que não seja utilizada em outras tabelas virtuais.
    • O driver sem fio é ath11k adicionado suporta frequência de 6 GHz e varredura espectral.
  • Оборудование
    • Removido o código para suportar a arquitetura UniCore, desenvolvida no Centro de Microprocessadores da Universidade de Pequim e incluída no kernel Linux em 2011. Esta arquitetura não tem manutenção desde 2014 e não tem suporte no GCC.
    • O suporte para arquitetura RISC-V foi implementado kcov (interface debugfs para analisar a cobertura do código do kernel), kmemleak (sistema de detecção de vazamento de memória), proteção de pilha, marcas de salto e operações sem tick (multitarefa independente de sinais de temporizador).
    • Para a arquitetura PowerPC foi implementado suporte para filas spinlock, o que melhorou significativamente o desempenho em situações de conflito de bloqueio.
    • Para arquiteturas ARM e ARM64, o mecanismo de regulação de frequência do processador está habilitado por padrão scheduleutil (governador cpufreq), que usa diretamente as informações do agendador de tarefas para tomar uma decisão sobre a alteração da frequência e pode acessar imediatamente os drivers cpufreq para alterar rapidamente a frequência, ajustando instantaneamente os parâmetros operacionais da CPU à carga atual.
    • O driver DRM i915 para placas gráficas Intel inclui suporte para chips baseados em microarquitetura Rocket Lake e adicionou suporte inicial para placas discretas Intel Xe DG1.
    • O driver Amdgpu adicionou suporte inicial para GPUs AMD Navi 21 (Solha da Marinha) e Navi 22 (Ciclideo Siena). Adicionado suporte para codificação de vídeo UVD/VCE e mecanismos de aceleração de decodificação para a GPU das Ilhas do Sul (Radeon HD 7000).
      Adicionada uma propriedade para girar a tela em 90, 180 ou 270 graus.

      Curiosamente, o driver para GPU AMD é o maior driver do kernel - possui cerca de 2.71 milhões de linhas de código, o que representa aproximadamente 10% do tamanho total do kernel (27.81 milhões de linhas). Ao mesmo tempo, 1.79 milhão de linhas são contabilizadas por arquivos de cabeçalho gerados automaticamente com dados para registros de GPU, e o código C é de 366 mil linhas (para comparação, o driver Intel i915 inclui 209 mil linhas e Nouveau - 149 mil).

    • Em driver Nouveau adicionado suporte para verificação de integridade quadro a quadro usando CRC (verificações de redundância cíclica) em mecanismos de exibição de GPU NVIDIA. A implementação é baseada na documentação fornecida pela NVIDIA.
    • Adicionados drivers para painéis LCD: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 e Xingbangda XBD599.
    • O subsistema de áudio ALSA suporta Fluxo Silencioso Intel (modo de energia contínua para dispositivos HDMI externos para eliminar atrasos ao iniciar a reprodução) e Novo dispositivo para controlar a iluminação dos botões de ativação e mudo do microfone, além de adicionar suporte para novos equipamentos, incluindo um controlador Longson 7A1000.
    • Adicionado suporte para placas, dispositivos e plataformas ARM: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (usado 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 para o Software Livre formado
opção kernel 5.9 totalmente gratuito - Linux-libre 5.9-gnu, livre de elementos de firmware e driver contendo componentes ou seções de código não livres, cujo escopo é limitado pelo fabricante. A nova versão desabilita o carregamento de blob em drivers para WiFi rtw8821c e SoC MediaTek mt8183. Código de limpeza de blob atualizado em Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) e drivers e subsistemas de tela sensível ao toque x86.

Fonte: opennet.ru

Adicionar um comentário