Lançamento do núcleo Linux 5.7

Após dois meses de desenvolvimento, Linus Torvalds apresentou lançamento do núcleo Linux 5.7Entre as mudanças mais notáveis estão: nova implementação do sistema de arquivos exFAT, módulo bareudp para criação de túneis UDP, proteção baseada na autenticação de ponteiros para ARM64, possibilidade de anexar programas BPF a manipuladores LSM, nova implementação do Curve25519, detector de "split-lock", compatibilidade BPF com PREEMPT_RT, remoção do limite de 80 caracteres para strings no código, consideração das temperaturas da CPU no escalonador de tarefas, e utilização de clone() para gerar processos em outro cgroup, proteção contra gravações na memória usando userfaultfd.

Na nova versão, foram aceitas 15.033 correções de 1.961 desenvolvedores.
O tamanho do patch é de 39 MB (as alterações afetaram 11.590 arquivos, com 570.560 linhas de código adicionadas,
e 297.401 linhas removidas). Cerca de 41% de todas as alterações apresentadas na versão 5.7
estão relacionadas a drivers de dispositivo, aproximadamente 16% das alterações têm
relação com a atualização de código específico para arquiteturas de hardware, 13%
a ver com a pilha de rede, 4% com sistemas de arquivos e 4% com internos.
subsistemas do núcleo.

Principais novidades:

  • Subsistema de disco, entrada/saída e sistemas de arquivos
    • Foi adicionada uma nova implementação do driver exFAT, baseada na atual base de código "sdfat" (2.x), desenvolvida pela Samsung para seus smartphones Android. O driver anteriormente adicionado ao núcleo era baseado em código desatualizado da Samsung (versão 1.2.9) e apresentava desempenho inferior ao novo driver em cerca de 10%. Vale lembrar que a adição do suporte ao exFAT no núcleo se tornou possível após a Microsoft publicou tornar públicas as especificações e fornecer a possibilidade de uso gratuito de patentes de exFAT no Linux.
    • No Btrfs, foi implementado um novo comando ioctl() — BTRFS_IOC_SNAP_DESTROY_V2, que permite a remoção de um subtítulo pelo seu identificador. Foi garantido suporte completo para clonagem de extents inline. O número de pontos de cancelamento para operações de redistribuição foi ampliado, o que reduziu o tempo de espera durante a execução do comando 'balance cancel'. A determinação de referências reversas em extents foi acelerada (por exemplo, o tempo de execução de um cenário de teste foi reduzido de uma hora para alguns minutos). Foi adicionada a possibilidade de anexar a cada inode da árvore de extents do arquivo. O esquema de bloqueio utilizado durante gravações em subtítulos e na exclusão de NOCOW foi reformulado. A eficiência da execução do fsync para intervalos foi aumentada.
    • O XFS melhorou a verificação de metadados e a execução do fsck para partições ativas. Uma biblioteca para reconstruir estruturas btree foi proposta, que no futuro será utilizada para reformular o xfs_repair e implementar a capacidade de recuperação sem desmontar a partição.
    • No CIFS, foi adicionada suporte experimental para a alocação de partições de swap em armazenamento SMB3. As extensões POSIX foram implementadas no readdir, conforme definido na especificação SMB3.1.1. O desempenho de gravação para páginas de 64KB foi aumentado ao ativar o modo cache=strict e usar versões do protocolo 2.1+.
    • O sistema de arquivos EXT4 foi migrado de bmap e iopoll para utilização do iomap.
    • No F2FS, foi implementado suporte opcional para compressão de dados usando o algoritmo zstd. Por padrão, o algoritmo LZ4 é usado para compressão. Adicionada a suporte para o comando "chattr -c commit". Garantido o registro do tempo de montagem. Adicionada ioctl F2FS_IOC_GET_COMPRESS_BLOCKS para obter informações sobre o número de blocos comprimidos. Adicionadas informações de compressão exibidas através do statx.
    • No sistema de arquivos Ceph, foi adicionada a capacidade de executar operações de criação e exclusão (unlink) de arquivos localmente sem esperar uma resposta do servidor (operação em modo assíncrono). Esta mudança, por exemplo, permite um aumento significativo no desempenho ao usar a ferramenta rsync.
    • No OVERLAYFS, foi adicionada a possibilidade de usar virtiofs como sistema de arquivos de nível superior.
    • Reescrito o código de travessia de caminhos no VFS, reformulado o código de análise de links simbólicos e unificado a travessia de pontos de montagem.
    • No subsistema scsi, usuários não privilegiados estão autorizados a executar comandos ZBC.
    • No dm_writecache, são implementadas é possível realizar a limpeza gradual do cache com base no parâmetro max_age, que define o tempo máximo de vida do bloco.
    • No dm_integrity, foi adicionada o suporte à operação "discard" foi adicionado.
    • No null_blk, foi adicionada foi adicionada a simulação de falhas para testar a inserção de erros.
    • Adicionada a possibilidade de enviar notificações udev sobre mudanças no tamanho do dispositivo de bloco.
  • Subsistema de Rede
    • No Netfilter, foram incorporados mudanças, que aceleram significativamente o processamento de grandes listas de correspondência (nftables set), onde é necessário verificar combinações de sub-redes, portas de rede, protocolo e endereços MAC.
      Otimizações foram feitas No módulo nft_set_pipapo (Políticas de Controle de Pacotes), que resolve a tarefa de mapear o conteúdo do pacote com intervalos de estado de campos aplicáveis em regras de filtragem, como intervalos de IP e portas de rede (nft_set_rbtree e nft_set_hash manipulam o mapeamento de intervalos e a reflexão direta de valores). A versão pipapo vetorizada com instruções AVX2 de 256 bits em um sistema com processador AMD Epyc 7402 mostrou um aumento de desempenho de 420% ao analisar 30 mil registros, incluindo pares porta-protocolo. O aumento ao mapear pares de sub-rede e número da porta ao analisar 1000 registros foi de 87% para IPv4 e 128% para IPv6.
    • Adicionado O módulo bareudp, que permite encapsular vários protocolos L3 em um túnel UDP, como MPLS, IP e NSH.
    • A integração dos componentes MPTCP (MultiPath TCP), uma extensão do protocolo TCP para organizar a operação de uma conexão TCP com entrega de pacotes simultaneamente por vários caminhos através de diferentes interfaces de rede, ligadas a diferentes endereços IP, foi continuada.
    • Adicionada Suporte a mecanismos de aceleração de hardware para encapsulação de quadros Ethernet dentro do 802.11 (Wi-Fi).
    • Ao mover um dispositivo de um espaço de nomes de subsistema de rede (network namespace) para outro, foi garantida a correção dos direitos de acesso e do proprietário dos arquivos correspondentes no sysfs.
    • Foi disponibilizada a opção de usar a flag SO_BINDTODEVICE para usuários sem privilégios de root.
    • A terceira parte dos patches foi adotada, transferindo a ferramenta ethtool de ioctl() para o uso da interface netlink. A nova interface simplifica a adição de extensões, melhora o tratamento de erros, permite o envio de notificações ao alterar estados, simplifica a interação entre o núcleo e o espaço do usuário e reduz o número de listas nomeadas a serem sincronizadas.
    • Foi adicionada a possibilidade de utilizar aceleradores de hardware especializados para executar operações de rastreamento de conexões.
    • No netfilter o sinalizador -k para integração com um gancho para conectar classificadores de pacotes de saída (egress), complementando o gancho já existente para pacotes de entrada (ingress).
  • Virtualização e segurança
    • Foi adicionada a implementação de hardware da autenticação de ponteiros (Autenticação de Ponteiro), utilizando instruções especializadas do CPU ARM64 para proteção contra ataques que utilizam técnicas de programação orientada à devolução (ROP), onde o atacante não tenta colocar seu código na memória, mas opera com pedaços de instruções de máquina já existentes nas bibliotecas carregadas, terminando com uma instrução de retorno de controle. A proteção é baseada no uso de assinaturas digitais para verificar os endereços de retorno em nível de kernel. A assinatura é armazenada nos bits mais altos não utilizados do próprio ponteiro. Ao contrário das implementações de software, a criação e a verificação de assinaturas digitais são realizadas por meio de instruções especiais do CPU.
    • Adicionada a capacidade de proteger áreas da memória contra gravação por meio da chamada de sistema userfaultfd(), destinada a lidar com falhas de página (acesso a páginas de memória não alocadas) no espaço do usuário. A ideia é usar userfaultfd() para rastrear violações de acesso a páginas marcadas como protegidas contra gravações e chamar um manipulador que pode reagir a essas tentativas de gravação (por exemplo, para lidar com alterações no processo de criação de snapshots ao vivo de processos em execução, capturando o estado ao despejar dumps de memória no disco, implementando memória compartilhada, rastreando alterações na memória). A funcionalidade é equivalente à aplicação de mprotect() em conjunto com o manipulador de sinal SIGSEGV, mas funciona significativamente mais rápido.
    • No SELinux, o parâmetro ‘checkreqprot’ foi declarado obsoleto, permitindo desativar a verificação de proteção de memória ao processar regras (permitia o uso de áreas de memória executáveis, independentemente das prescrições definidas nas regras). As symlinks do kernfs foram autorizadas a herdar o contexto dos diretórios pai.
    • Inclui incluso módulo KRSI, permitindo anexar programas BPF a quaisquer ganchos LSM no kernel. A mudança permite criar módulos LSM (Linux Security Module) na forma de programas BPF para lidar com situações de auditoria e controle de acesso mandatório.
    • Realizada otimização do desempenho de /dev/random através da transferência em massa de valores CRNG em vez de chamadas separadas de instruções RNG. Melhorou o funcionamento de getrandom e /dev/random em sistemas ARM64 que fornecem instruções RNG.
    • A implementação da curva elíptica Curve25519 foi substituída por uma variante da biblioteca HACL, para a qual foi fornecida prova matemática de verificação formal de confiabilidade.
    • Adicionado mecanismo de informação sobre páginas de memória livres. Por meio deste mecanismo, sistemas convidados podem enviar informações à sistema anfitrião sobre páginas que não estão mais em uso, e essas páginas podem ser recuperadas pelo anfitrião.
    • no vfio/pci foi adicionada suporte a SR-IOV (Virtualização de Entrada/Saída de Raiz Única).
  • Memória e serviços do sistema
    • De 80 a 100 caracteres aumentado limite máximo de comprimento de linha em textos de origem. Contudo, os desenvolvedores ainda são aconselhados a manter-se dentro do limite de 80 caracteres por linha, mas isso não é mais um limite rígido. Além disso, exceder o limite de comprimento de linha agora gerará um aviso durante a compilação somente se a ferramenta checkpatch for executada com a opção '--strict'. Essa alteração permitirá que os desenvolvedores não se distraiam com manipulações espaços e se sintam mais à vontade ao alinhar o código, assim como impedirá quebras excessivas de linha, que atrapalham a compreensão do código e a pesquisa.
    • Adicionada suporte ao modo de inicialização mista EFI, permitindo que um núcleo de 64 bits seja carregado a partir de um firmware de 32 bits, que é executado em um CPU de 64 bits, sem o uso de um carregador de inicialização especializado.
    • Ativado sistema de detecção e depuração de bloqueios fragmentados ('split lock'), que ocorrem ao acessar dados não alinhados na memória devido ao fato de que, ao executar uma instrução atômica, os dados atravessam duas linhas de cache do CPU. Esses bloqueios podem levar a uma queda significativa de desempenho (1000 ciclos mais lentos do que uma operação atômica com dados que cabem em uma linha de cache). Dependendo do parâmetro de inicialização 'split_lock_detect', o núcleo pode detectar esses bloqueios e gerar avisos ou enviar um sinal SIGBUS para o aplicativo que causou o bloqueio.
    • No escalonador de tarefas, foi adicionado o rastreamento das leituras dos sensores de temperatura (Pressão Térmica) e implementada a contagem de superaquecimento ao alocar tarefas. Utilizando as estatísticas fornecidas, o regulador de temperatura (thermal governor) pode ajustar a frequência máxima da CPU em caso de superaquecimento, e o planejador de tarefas agora considera a redução do poder computacional devido a essa diminuição de frequência ao programar a execução das tarefas (anteriormente, o planejador reagia à mudança de frequência com um certo atraso, tomando decisões baseadas em suposições exageradas sobre os recursos computacionais disponíveis).
    • O planejador de tarefas envolve métricas invariantes de monitoramento de carga, permitindo avaliar corretamente a carga, independentemente da frequência atual da CPU. A mudança possibilita uma previsão mais precisa do comportamento das tarefas em condições de variação dinâmica de voltagem e frequência da CPU. Por exemplo, uma tarefa que consumia 1/3 dos recursos da CPU a uma frequência de 1000 MHz começará a consumir 2/3 dos recursos ao reduzir a frequência para 500 MHz, o que antes criava uma falsa suposição de funcionamento em plena capacidade (ou seja, as tarefas para o planejador pareciam maiores apenas devido à redução da frequência, o que levava a decisões erradas no schedutil cpufreq governor).
    • O driver Intel P-state, responsável pela escolha dos modos de desempenho, foi alterado para usar schedutil.
    • Implementada a possibilidade de usar o subsistema BPF ao operar o núcleo no modo de tempo real (PREEMPT_RT). Anteriormente, ao ativar o PREEMPT_RT, era exigido desativar o BPF.
    • Adicionado um novo tipo de programas BPF — BPF_MODIFY_RETURN, que podem ser anexados a funções no núcleo e alterar o valor retornado por essa função.
    • Adicionada a possibilidade uso da chamada de sistema clone3() para criar um processo em uma cgroup, diferente da cgroup pai, permitindo que o processo pai aplique restrições e inicie a contabilidade logo após gerar um novo processo ou thread. Por exemplo, o gerenciador de serviços pode diretamente alocar novos serviços em cgroups separados, e novos processos ao serem colocados em cgroups 'congelados' serão imediatamente interrompidos.
    • no Kbuild foi adicionada suporte à variável de ambiente 'LLVM=1' para alternar para a ferramenta Clang/LLVM durante a construção do núcleo. Os requisitos para a versão do binutils foram aumentados (2.23).
    • Na debugfs, foi adicionada a seção /sys/kernel/debug/kunit/ com os resultados dos testes kunit.
    • Foi adicionado o parâmetro de carga do núcleo pm_debug_messages (análogo a /sys/power/pm_debug_messages), que inclui a saída de informações de depuração sobre o funcionamento do sistema de gerenciamento de energia (útil para depurar problemas com os modos de suspensão e espera).
    • Na interface de entrada/saída assíncrona io_uring foi adicionada suporte a splice() e seleção atômica de buffers.
    • A profiling do cgroup foi aprimorada com a ferramenta perf. Anteriormente, o perf podia perfilar tarefas apenas em um cgroup específico e não conseguia identificar a que cgroup pertencia a amostra atual. Agora, o perf obtém informações sobre o cgroup para cada amostra, permitindo perfilar mais de um cgroup e aplicar a classificação por
      cgroup nos relatórios.
    • No cgroupfs, o pseudo-Sistema de Arquivos para gerenciamento de cgroups, foi adicionada a suporte para atributos estendidos (xattrs), com os quais, por exemplo, é possível deixar informações adicionais para manipuladores em espaço de usuário.
    • No controlador de memória do cgroup o sinalizador -k para integração com, foi adicionada a proteção recursiva do valor "memory.low", que regula o mínimo de memória RAM concedida aos membros do grupo. Ao montar uma hierarquia de cgroups com a opção "memory_recursiveprot", o valor "memory.low" definido para os nós inferiores será automaticamente distribuído para todos os nós filhos.
    • Adicionado o framework Uacce (Unified/User-space-access-intended Accelerator Framework) para compartilhamento de endereços virtuais (SVA, Shared Virtual Addressing) entre CPU e dispositivos periféricos, permitindo que aceleradores de hardware acessem estruturas de dados na CPU principal.
  • Arquiteturas de hardware
    • Para a arquitetura ARM, foi implementada a capacidade de extração a quente de memória.
    • Para a arquitetura RISC-V, foi adicionada a suporte para conexão e extração a quente da CPU (CPU hotplug). Para RISC-V de 32 bits, foi implementado o eBPF JIT.
    • Removida a possibilidade de usar sistemas ARM de 32 bits para executar ambientes virtuais KVM.
    • Removida a implementação "fake" do NUMA para a arquitetura s390, para a qual não foram encontrados cenários de uso que permitissem um aumento de desempenho.
    • Para ARM64, foi adicionada a suporte para a extensão AMU (Activity Monitors Unit), definida no ARMv8.4 e que fornece contadores de desempenho utilizados para calcular os fatores de correção da frequência no escalonador de tarefas.
  • Hardware
    • Adicionada suporte para dispositivos vDPA, que utilizam um canal de comunicação de dados conforme as especificações do virtio. Dispositivos vDPA podem ser equipamentos fisicamente conectados ou dispositivos virtuais emulados por software.
    • No subsistema GPIO foi introduzida um novo comando ioctl() para monitorar mudanças, permitindo que o processo seja notificado sobre a alteração do estado de qualquer linha GPIO. Como exemplo de uso do novo comando foi proposta a ferramenta gpio-watch.
    • No driver DRM i915 para placas de vídeo Intel incluída suporte padrão para chips Tigerlake («Gen12») e adicionado suporte inicial para controle de retroiluminação OLED. Melhorias no suporte a chips Ice Lake, Elkhart Lake, Baytrail e Haswell.
    • No driver amdgpu foi adicionada a capacidade de carregar firmwares no chip USBC para ASIC. Melhorado o suporte para chips AMD Ryzen 4000 «Renoir». Suporte adicionado para controle de painéis OLED. Status do firmware exibido em debugfs.
    • No driver DRM vmwgfx para sistemas de virtualização VMware, foi adicionada a possibilidade de usar OpenGL 4 em sistemas convidados (anteriormente, apenas OpenGL 3.3 era suportado).
    • Adicionado novo driver DRM tidss para o sistema de exibição da plataforma TI Keystone.
    • Novos drivers para painéis LCD adicionados: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D-CT, Frida FRD350H54004.
    • No sistema de gerenciamento de energia foi adicionada suporte à plataforma Intel Jasper Lake (JSL) baseada em Atom.
    • Adicionado suporte para o laptop Pinebook Pro baseado no Rockchip RK3399, o tablet Pine64 PineTab e o smartphone PinePhone baseado no Allwinner A64.
    • Adicionados suporte a novos codecs de áudio e chips:
      Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.
    • Adicionado suporte a placas ARM e plataformas Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron «sl28», 11 variantes da placa i.MX6 TechNexion Pico, três novas variantes Toradex Colibri, Samsung S7710 Galaxy Xcover 2 baseado no ST-Ericsson u8500, DH Electronics DHCOM SoM e PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.

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