Kernel Linux versão 5.7

Após dois meses de desenvolvimento, Linus Torvalds introduzido lançamento do kernel Linux 5.7. Entre as mudanças mais notáveis: uma nova implementação do sistema de arquivos exFAT, um módulo bareudp para criação de túneis UDP, proteção baseada na autenticação de ponteiro para ARM64, a capacidade de anexar programas BPF a manipuladores LSM, uma nova implementação do Curve25519, um split- detector de bloqueio, compatibilidade BPF com PREEMPT_RT, remoção do limite do tamanho da linha de 80 caracteres no código, levando em consideração indicadores de temperatura da CPU no agendador de tarefas, capacidade de usar clone() para gerar processos em outro cgroup, proteção contra gravação para a memória usando userfaultfd.

A nova versão inclui 15033 correções de 1961 desenvolvedores,
tamanho do patch - 39 MB (as alterações afetaram 11590 arquivos, adicionaram 570560 linhas de código,
297401 linhas removidas). Cerca de 41% de todos apresentados em 5.7
alterações estão relacionadas a drivers de dispositivos, aproximadamente 16% 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, 4% aos sistemas de arquivos e 4% aos internos
subsistemas do kernel.

O principal inovações:

  • Subsistema de disco, E/S e sistemas de arquivos
    • Adicionada nova implementação de driver exFAT, fundado baseado na atual base de código “sdfat” (2.x) desenvolvida pela Samsung para seus smartphones Android. O driver adicionado anteriormente ao kernel era baseado no código legado da Samsung (versão 1.2.9) e estava cerca de 10% atrás do novo driver em desempenho. Lembremos que adicionar suporte exFAT ao kernel tornou-se possível depois que a Microsoft publicado especificações públicas e disponibilizou patentes exFAT para uso livre de royalties no Linux.
    • Btrfs implementa um novo comando ioctl() - BTRFS_IOC_SNAP_DESTROY_V2, que permite excluir uma subseção por seu identificador. É fornecido suporte completo para clonagem de extensões inline. Foi ampliado o número de pontos de cancelamento para operações de redistribuição, o que reduziu as longas esperas na execução do comando 'balance cancel'. A determinação de backlinks para extensões foi acelerada (por exemplo, o tempo de execução do script de teste diminuiu de uma hora para vários minutos). Adicionada a capacidade de anexar extensões de arquivo a cada inode de uma árvore. O esquema de bloqueio usado ao escrever em subpartições e ao excluir NOCOW foi redesenhado. Eficiência aprimorada de execução de fsync para intervalos.
    • O XFS melhorou a verificação de metadados e o fsck para partições ativas. Foi proposta uma biblioteca para reconstruir estruturas btree, que futuramente será utilizada para retrabalhar xfs_repair e implementar a possibilidade de recuperação sem desmontar a partição.
    • Suporte experimental para colocar uma partição swap em armazenamentos SMB3 foi adicionado ao CIFS. Implementadas extensões POSIX para readdir, definidas na especificação SMB3.1.1. Desempenho de gravação aprimorado para páginas de 64 KB quando o modo cache=strict está ativado e as versões de protocolo 2.1+ são usadas.
    • FS EXT4 foi transferido de bmap e iopoll para usar iomap.
    • F2FS fornece suporte opcional para compactação de dados usando o algoritmo zstd. Por padrão, o algoritmo LZ4 é usado para compactação. Adicionado suporte para o comando "chattr -c commit". A exibição do tempo de montagem é fornecida. Adicionado ioctl F2FS_IOC_GET_COMPRESS_BLOCKS para obter informações sobre o número de blocos compactados. Adicionada saída de dados de compactação via statx.
    • O sistema de arquivos Ceph adicionou a capacidade de executar localmente operações de criação e exclusão de arquivos (desvincular) sem esperar por uma resposta do servidor (trabalhando em modo assíncrono). A mudança, por exemplo, pode melhorar significativamente o desempenho ao executar o utilitário rsync.
    • A capacidade de usar virtiofs como sistema de arquivos de nível superior foi adicionada ao OVERLAYFS.
    • Reescrito código de passagem de caminho em VFS, código de análise de link simbólico foi retrabalhado e passagem de ponto de montagem foi unificada.
    • No subsistema scsi para usuários sem privilégios permitido execução de comandos ZBC.
    • Em dm_writecache implementado a capacidade de limpar gradualmente o cache com base no parâmetro max_age, que define a vida útil máxima de um bloco.
    • Em dm_integridade adicionado suporte para a operação de “descarte”.
    • Em null_blk adicionado suporte para substituição de erros para simular falhas durante os testes.
    • Adicionado por capacidade de enviar notificações do udev sobre alterações no tamanho do dispositivo de bloco.
  • subsistema de rede
    • Filtro de rede incluído mudanças, acelerando significativamente o processamento de grandes listas de correspondências (conjuntos nftables), que exigem a verificação de uma combinação de sub-redes, portas de rede, protocolo e endereços MAC.
      Otimizações introduzido no módulo nft_set_pipapo (PIle PAcket POlicies), que resolve o problema de combinar o conteúdo de um pacote com intervalos de estado de campo arbitrários usados ​​​​em regras de filtragem, como intervalos de IP e portas de rede (nft_set_rbtree e nft_set_hash manipulam correspondência de intervalo e reflexão direta de valores ). A versão do pipapo vetorizada usando instruções AVX256 de 2 bits em um sistema com processador AMD Epyc 7402 apresentou um aumento de desempenho de 420% ao analisar 30 mil registros incluindo combinações de protocolo de porta. O aumento ao comparar uma combinação de uma sub-rede e um número de porta ao analisar 1000 registros foi de 87% para IPv4 e 128% para IPv6.

    • Adicionado Módulo bareudp, que permite encapsular vários protocolos L3, como MPLS, IP e NSH, em um túnel UDP.
    • A integração dos componentes MPTCP (MultiPath TCP), uma extensão do protocolo TCP para organizar o funcionamento de uma conexão TCP com a entrega de pacotes simultaneamente ao longo de diversas rotas através de diferentes interfaces de rede vinculadas a diferentes endereços IP, continuou.
    • Adicionado por suporte para mecanismos de aceleração de hardware para encapsulamento de quadros Ethernet em 802.11 (Wi-Fi).
    • Ao mover um dispositivo de um namespace de rede para outro, os direitos de acesso e propriedade dos arquivos correspondentes no sysfs são ajustados.
    • Adicionada a capacidade de usar o sinalizador SO_BINDTODEVICE para usuários não root.
    • A terceira parte dos patches foi aceita, convertendo o kit de ferramentas ethtool de ioctl() para usar a interface netlink. A nova interface facilita a adição de extensões, melhora o tratamento de erros, permite o envio de notificações quando o estado muda, simplifica a interação entre o kernel e o espaço do usuário e reduz o número de listas nomeadas que precisam ser sincronizadas.
    • Adicionada a capacidade de usar aceleradores de hardware especiais para realizar operações de rastreamento de conexão.
    • No filtro de rede adicionado um gancho para conectar classificadores de pacotes de saída (egresso), que complementou o gancho anteriormente presente para pacotes de entrada (entrada).
  • Virtualização e Segurança
    • Adicionada implementação de hardware de autenticação de ponteiro (Autenticação de ponteiro), que utiliza instruções especializadas de CPU ARM64 para proteção contra ataques utilizando técnicas de programação orientada a retorno (ROP), nas quais o invasor não tenta colocar seu código na memória, mas opera em pedaços de instruções de máquina já disponíveis em bibliotecas carregadas, finalizando com uma instrução de retorno de controle. A segurança se resume ao uso de assinaturas digitais para verificar endereços de retorno no nível do kernel. A assinatura é armazenada nos bits superiores não utilizados do próprio ponteiro. Ao contrário das implementações de software, a criação e verificação de assinaturas digitais são realizadas por meio de instruções especiais da CPU.
    • Adicionado por a capacidade de proteger uma área de memória contra gravação usando a chamada de sistema userfaultfd(), projetada para 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() tanto para detectar violações de acesso a páginas marcadas como protegidas contra gravação quanto para chamar um manipulador que possa responder a tais tentativas de gravação (por exemplo, para lidar com alterações durante a criação de instantâneos ao vivo de processos em execução, estado capturar ao despejar despejos de memória no disco, implementar memória compartilhada, rastrear alterações na memória). Funcionalidade equivalente usando mprotect() em conjunto com o manipulador de sinal SIGSEGV, mas funciona visivelmente mais rápido.
    • O SELinux descontinuou o parâmetro "checkreqprot", que permite desabilitar verificações de proteção de memória ao processar regras (permitindo o uso de áreas de memória executáveis, independentemente das regras especificadas nas regras). Os links simbólicos do Kernfs podem herdar o contexto de seus diretórios pais.
    • a composição ligado módulo KRSI, que permite anexar programas BPF a qualquer gancho LSM no kernel. A mudança permite criar módulos LSM (Módulo de Segurança Linux) na forma de programas BPF para solucionar problemas de auditoria e controle de acesso obrigatório.
    • Realizado Otimiza o desempenho de /dev/random agrupando valores CRNG em lote em vez de chamar instruções RNG individualmente. Desempenho aprimorado de getrandom e /dev/random em sistemas ARM64 que fornecem instruções RNG.
    • Implementação de uma curva elíptica Curve25519 substituído para a opção da biblioteca HACLpara qual dado prova matemática de verificação formal de confiabilidade.
    • Adicionado mecanismo para informar sobre páginas de memória livre. Usando esse mecanismo, os sistemas convidados podem transmitir informações sobre páginas que não são mais usadas para o sistema host, e o host pode recuperar os dados da página.
    • Em vfio/pci adicionado suporte para SR-IOV (virtualização de E/S de raiz única).
  • Serviços de memória e sistema
    • De 80 a 100 caracteres aumentou limitação do comprimento máximo das linhas nos textos de origem. Ao mesmo tempo, os desenvolvedores ainda são recomendados a permanecer dentro de 80 caracteres por linha, mas esse não é mais um limite rígido. Além disso, exceder o limite de tamanho de linha agora resultará em um aviso de compilação somente se o checkpatch for executado com a opção '--strict'. A mudança permitirá não distrair os desenvolvedores com manipulação com espaços e fique mais à vontade ao alinhar o código, bem como irá prevenir quebra excessiva de linha, perturbador compreensão e pesquisa de código.
    • Adicionado por suporte para modo de inicialização mista EFI, que permite carregar um kernel de 64 bits a partir de firmware de 32 bits executado em uma CPU de 64 bits sem usar um gerenciador de inicialização especializado.
    • Incluído sistema para identificação e depuração de bloqueios divididos (“bloqueio dividido"), que ocorre ao acessar dados desalinhados na memória devido ao fato de que ao executar uma instrução atômica, os dados cruzam duas linhas de cache da CPU. Esse bloqueio resulta em um impacto significativo no desempenho (1000 ciclos mais lento do que uma operação atômica em dados que caem em uma linha de cache). Dependendo do parâmetro de inicialização "split_lock_detect", o kernel pode detectar tais bloqueios instantaneamente e emitir avisos ou enviar um sinal SIGBUS para o aplicativo que causa o bloqueio.
    • O agendador de tarefas fornece rastreamento de sensores de temperatura (Pressão Térmica) e implementado levando em consideração o superaquecimento na colocação de tarefas. Usando as estatísticas fornecidas, o regulador térmico pode ajustar a frequência máxima da CPU quando superaquecida, e o agendador de tarefas agora leva em consideração a redução no poder de computação devido a essa redução na frequência ao agendar tarefas para execução (anteriormente, o agendador respondia às mudanças em frequência com um certo atraso, por algum tempo tomando decisões com base em suposições inflacionadas sobre os recursos computacionais disponíveis).
    • O agendador de tarefas inclui indicadores invariantes rastreamento de carga, permitindo estimar corretamente a carga, independentemente da frequência operacional atual da CPU. A mudança permite prever com mais precisão o comportamento das tarefas sob condições de mudanças dinâmicas na tensão e na frequência da CPU. Por exemplo, uma tarefa que consumiu 1/3 dos recursos da CPU em 1000 MHz consumirá 2/3 dos recursos quando a frequência cair para 500 MHz, o que anteriormente criava uma falsa suposição de que estava funcionando em capacidade total (ou seja, as tarefas apareceram maior para o agendador apenas pela redução da frequência, o que levou à tomada de decisões incorretas no governador schedutil cpufreq).
    • O driver Intel P-state, responsável por selecionar os modos de desempenho, foi alterado para uso scheduleutil.
    • Foi implementada a capacidade de usar o subsistema BPF quando o kernel está rodando em tempo real (PREEMPT_RT). Anteriormente, quando PREEMPT_RT era habilitado, era necessário desabilitar o BPF.
    • Foi adicionado um novo tipo de programa BPF - BPF_MODIFY_RETURN, que pode ser anexado a uma função no kernel e alterar o valor retornado por esta função.
    • Adicionado por oportunidade Usando a chamada de sistema clone3() para criar um processo em um cgroup que seja diferente do cgroup pai, permitindo que o processo pai aplique restrições e habilite a contabilidade imediatamente após gerar um novo processo ou thread. Por exemplo, um gerenciador de serviços pode alocar diretamente novos serviços para cgroups separados, e novos processos, quando colocados em cgroups “congelados”, serão imediatamente interrompidos.
    • no Kbuild adicionado suporte para a variável de ambiente "LLVM=1" para mudar para o kit de ferramentas Clang/LLVM ao construir o kernel. Os requisitos para a versão binutils foram aumentados (2.23).
    • Uma seção /sys/kernel/debug/kunit/ foi adicionada ao debugfs com os resultados dos testes kunit.
    • Adicionado parâmetro de inicialização do kernel pm_debug_messages (análogo a /sys/power/pm_debug_messages), que permite a saída de informações de depuração sobre a operação do sistema de gerenciamento de energia (útil ao depurar problemas com hibernação e modo de espera).
    • Para a interface de E/S assíncrona io_uring suporte adicionado splice () и seleção de buffer atômico.
    • Perfil de cgroup aprimorado usando o kit de ferramentas perf. Anteriormente, perf só conseguia criar perfis de tarefas em um cgroup específico e não conseguia descobrir a qual cgroup a amostra atual pertence. perf agora recebe informações de cgroup para cada amostra, permitindo que você crie o perfil de mais de um cgroup e aplique a classificação por
      cgroup em relatórios.

    • cgroupfs, um pseudo-FS para gerenciamento de cgroups, adicionou suporte para atributos estendidos (xattrs), com os quais, por exemplo, você pode deixar informações adicionais para manipuladores no espaço do usuário.
    • No controlador de memória cgroup adicionadoe suporte à proteção recursiva do valor “memory.low”, que regula a quantidade mínima de RAM fornecida aos membros do grupo. Ao montar uma hierarquia cgroup com a opção "memory_recursiveprot", o valor de "memory.low" definido para os nós inferiores será automaticamente distribuído para todos os nós filhos.
    • Adicionado Estrutura Uacce (Unified/User-space-access-intended Accelerator Framework) para compartilhamento de endereços virtuais (SVA, Shared Virtual Addressing) entre a CPU e dispositivos periféricos, permitindo que aceleradores de hardware acessem estruturas de dados na CPU principal.
  • Arquiteturas de hardware
    • Para a arquitetura ARM, a capacidade de buscar memória a quente é implementada.
    • Para a arquitetura RISC-V, foi adicionado suporte para hot plugging e remoção de CPUs (CPU hotplug). Para RISC-V de 32 bits, o eBPF JIT é implementado.
    • A capacidade de usar sistemas ARM de 32 bits para executar ambientes convidados KVM foi removida.
    • Removida a implementação NUMA "fictícia" para a arquitetura s390, para a qual não foram encontrados casos de uso para obter melhorias de desempenho.
    • Para ARM64, foi adicionado suporte para a extensão AMU (Activity Monitors Unit), definida em ARMv8.4 e fornecendo contadores de desempenho que são usados ​​para calcular fatores de correção de escala de frequência no agendador de tarefas.
  • Оборудование
    • Adicionado por suporte para dispositivos vDPA que usam um canal de troca de dados em conformidade com as especificações virtio. Os dispositivos vDPA podem ser equipamentos conectados fisicamente ou dispositivos virtuais emulados por software.
    • No subsistema GPIO apareceu um novo comando ioctl() para monitorar alterações, permitindo informar o processo sobre alterações no estado de qualquer linha GPIO. Como exemplo de uso do novo comando proposto utilitário gpio-watch.
    • No driver DRM i915 para placas de vídeo Intel está incluído suporte padrão para chips Tigerlake (“Gen12”) e suporte inicial adicionado para controle de luz de fundo OLED. Suporte aprimorado para chips Ice Lake, Elkhart Lake, Baytrail e Haswell.
    • No driver amdgpu adicionado capacidade de carregar firmware no chip USBC para ASIC. Suporte aprimorado para chips AMD Ryzen 4000 “Renoir”. Agora há suporte para controlar painéis OLED. Fornecida exibição do status do firmware em debugfs.
    • A capacidade de usar OpenGL 4 em sistemas convidados foi adicionada ao driver DRM vmwgfx para sistemas de virtualização VMware (anteriormente, OpenGL 3.3 era compatível).
    • Adicionados novos drivers DRM para o sistema de exibição da plataforma TI Keystone.
    • Drivers adicionados para painéis LCD: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D-CT, Frida FRD350H54004.
    • Para o sistema de gerenciamento de energia adicionado suporte para a plataforma Intel Jasper Lake (JSL) baseada em Atom.
    • Adicionado suporte para laptop Pinebook Pro baseado em Rockchip RK3399, tablet e smartphone Pine64 PineTab PinePhone baseado em Allwinner A64.
    • Adicionado suporte para novos codecs e chips de áudio:
      Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.

    • Adicionado suporte para placas e plataformas ARM Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron “sl28”, 11 opções de placa i.MX6 TechNexion Pico, três novas opções de Toradex Colibri, Samsung S7710 Galaxy Xcover 2 baseado em ST -Ericsson u8500, DH Electronics DHCOM SoM e PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.

Fonte: opennet.ru

Adicionar um comentário