Lançamento do núcleo do Linux 5.6

Após dois meses de desenvolvimento, Linus Torvalds apresentou lançamento do núcleo Linux 5.6. Entre as mudanças mais notáveis: integração da interface VPN WireGuard, suporte a USB4, namespaces para o tempo, possibilidade de criação de manipuladores de sobrecarga TCP usando BPF, suporte inicial ao MultiPath TCP, eliminação do problema do ano 2038 no kernel, mecanismo 'bootconfig', sistema de arquivos ZoneFS.

A nova versão incluiu 13702 correções de 1810 desenvolvedores,
o tamanho do patch é de 40 MB (as alterações afetaram 11577 arquivos, adicionadas 610012 linhas de código,
removidas 294828 linhas). Cerca de 45% de todas as alterações apresentadas em 5.6
estão relacionadas a drivers de dispositivos, cerca de 15% das mudanças têm
relacionam-se com a atualização de código específico para arquiteturas de hardware, 12%
estão relacionadas ao stack de rede, 4% às sistemas de arquivos e 3% às internas.
subsistemas do núcleo.

Principais novidades:

  • Subsistema de Rede
    • Adicionada implementação da interface VPN WireGuard, que é baseada em métodos modernos de criptografia (ChaCha20, Poly1305, Curve25519, BLAKE2s), é fácil de usar, descomplicada, bem testada em várias implementações grandes e oferece um desempenho muito alto (3,9 vezes superior ao OpenVPN em capacidade de tráfego). No WireGuard, é aplicada a concepção de roteamento por chaves de criptografia, que envolve a ligação de uma chave privada a cada interface de rede e a utilização de chaves públicas para a conexão. A troca de chaves públicas para estabelecer a conexão é feita de forma semelhante ao SSH. Os primitivas criptográficas necessárias para o funcionamento do WireGuard eram foram transferidos são da biblioteca Zinc integradas ao Crypto API padrão e estão incluídas ao núcleo 5.5.
    • Começou integração de componentes necessários para suportar MPTCP (MultiPath TCP), uma extensão do protocolo TCP para permitir que as conexões TCP entreguem pacotes simultaneamente por vários caminhos através de diferentes interfaces de rede, cada uma ligada a diferentes endereços IP. Para aplicações de rede, essa conexão agregada se comporta como uma conexão TCP normal, enquanto toda a lógica de divisão de fluxos é gerida pelo MPTCP. O Multipath TCP pode ser utilizado tanto para aumentar a capacidade quanto para melhorar a confiabilidade. Por exemplo, o MPTCP pode ser aplicado para transmitir dados em um smartphone usando simultaneamente links WiFi e 4G ou para reduzir custos ao conectar um servidor usando várias links baratos em vez de um único link caro.
    • Adicionada suporte à disciplina de gerenciamento de filas de rede sch_ets (Enhanced Transmission Selection, IEEE 802.1Qaz), que oferece a possibilidade de distribuir a largura de banda entre diferentes classes de tráfego. Se a carga em uma determinada classe de tráfego estiver abaixo da largura de banda fornecida, o ETS permite que outras classes de tráfego utilizem a largura de banda disponível (não utilizada). O Qdisc sch_ets é configurado como uma disciplina PRIO e utiliza classes de tráfego para determinar as restrições de largura de banda estritas e compartilhadas. O ETS funciona como uma combinação de disciplinas. PRIO e DRR — na presença de classes de tráfego rigidamente limitadas, utiliza-se PRIO, mas se não houver tráfego na fila, atua como DRR.
    • Foi adicionado um novo tipo de programas BPF BPF_PROG_TYPE_STRUCT_OPS, permitindo a implementação de manipuladores de funções do kernel através do BPF. Atualmente, essa funcionalidade já pode ser usada para implementar algoritmos de controle de congestionamento TCP na forma de programas BPF. Como exemplo, foi proposta um programa BPF com a implementação do algoritmo DCTCP.
    • Foi aceito no kernel mudanças, que converte as ferramentas ethtool de ioctl() para o uso da interface netlink. A nova interface facilita a adição de extensões, melhora o tratamento de erros, permite o envio de notificações ao alterar o estado, 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.
    • Foi adicionada a implementação do algoritmo de controle de filas de rede FQ-PIE (Flow Queue PIE), visando reduzir o impacto negativo do buffer de pacotes em equipamentos de rede na borda (bufferbloat). O FQ-PIE demonstra alta eficiência em sistemas com modems a cabo.
  • Subsistema de disco, entrada/saída e sistemas de arquivos
    • Para o sistema de arquivos Btrfs foi adicionada a implementação assíncrona da operação DISCARD (marcações de blocos liberados que já podem não ser mantidos fisicamente). Inicialmente, as operações DISCARD eram executadas de forma síncrona, o que poderia resultar em queda de desempenho devido à espera pela conclusão dos comandos correspondentes pelos dispositivos de armazenamento. A implementação assíncrona permite que não se espere a conclusão do DISCARD pelo dispositivo e execute essa operação em segundo plano.
    • No XFS foi realizada limpeza do código que usava contadores de tempo de 32 bits (o tipo time_t foi substituído por time64_t), que causavam o problema de 2038. Erros e danos à memória que surgiam em plataformas de 32 bits foram corrigidos. O código foi reformulado para trabalhar com atributos expandidos.
    • No sistema de arquivos ext4 foram feitas otimizações de desempenho relacionadas ao tratamento de bloqueios de inode durante operações de leitura e gravação. A performance de gravação em modo de entrada/saída direta (Direct I/O) foi melhorada. Para facilitar o diagnóstico de problemas, foi implementada a preservação dos primeiros e últimos códigos de erro no superblock.
    • No sistema de arquivos F2FS são implementadas a capacidade de armazenar dados em formato comprimido. Para um arquivo ou diretório específico, a compressão pode ser ativada usando o comando "chattr +c file" ou "chattr +c dir; touch dir/file". Para comprimir toda a partição, a opção "-o compress_extension=ext" pode ser usada no utilitário mount.
    • Foi aceita como parte do núcleo do sistema de arquivos ZoneFS, que simplifica o trabalho de baixo nível com dispositivos de armazenamento zonados. Dispositivos de armazenamento zonados referem-se a dispositivos de discos magnéticos rígidos ou SSDs NVMe, onde o espaço de armazenamento é dividido em zonas, que consistem em grupos de blocos ou setores, onde somente a adição sequencial de dados é permitida, atualizando todo o grupo de blocos. O FS ZoneFS foi desenvolvido pela Western Digital e associa cada zona no dispositivo a um arquivo separado, que pode ser usado para armazenar dados em modo raw sem manipulação em nível de setores e blocos, ou seja, permite que os aplicativos usem a API de arquivos em vez de acesso direto ao dispositivo de bloco via ioctl.
    • No NFS, o montagem de partições sobre UDP está desativado por padrão. Foi adicionada a suporte para a funcionalidade de cópia direta de arquivos entre servidores, conforme especificado no NFS 4.2. Uma nova opção de montagem "softreval" foi adicionada, que permite o uso de valores de atributos em cache em caso de falha do servidor. Por exemplo, ao especificar essa opção, após a indisponibilidade do servidor, ainda é possível navegar pelos caminhos no sistema de arquivos NFS e acessar as informações que foram armazenadas em cache.
    • Realizada otimização do desempenho do mecanismo fs-verity, usado para controle de integridade e verificação da autenticidade de arquivos individuais. A velocidade de leitura sequencial foi aumentada devido ao uso de árvores de Merkle. Aumentada a eficiência do FS_IOC_ENABLE_VERITY em condições de ausência de dados no cache (implementação de leitura antecipada de páginas com dados).
  • Virtualização e segurança
    • Anunciada a obsolescência da opção de desativar o módulo SELinux durante o funcionamento, e no futuro, a descarga do SELinux já ativado será proibida. Para desativar o SELinux, será necessário passar o parâmetro “selinux=0” na linha de comando do kernel.
    • Adicionada suporte a namespaces de tempo (time namespaces), permitindo vincular ao container o estado dos relógios do sistema (CLOCK_REALTIME,
      CLOCK_MONOTONIC, CLOCK_BOOTTIME), usar o seu próprio tempo dentro do container e garantir a imutabilidade das leituras de CLOCK_MONOTONIC e CLOCK_BOOTTIME ao migrar o container para outro host (considerando o tempo após a inicialização com ou sem o estado de suspensão).
    • Removido o pool bloqueado /dev/random. O comportamento de /dev/random foi aproximado ao de /dev/urandom em termos de prevenção de bloqueio de entropia após a inicialização do pool.
    • O núcleo agora inclui um driver que permite que sistemas convidados que operam sob VirtualBox montem diretórios exportados pelo ambiente host (VirtualBox Shared Folder).
    • Um conjunto de patches foi adicionado ao subsistema BPF (BPF dispatcher), em condições de aplicação do mecanismo Retpoline para proteção contra ataques do tipo Spectre V2, permitindo aumentar a eficiência da chamada de programas BPF quando os eventos correspondentes ocorrem (por exemplo, possibilita acelerar a chamada dos manipuladores XDP quando um pacote de rede chega).
    • Adicionado driver para suporte a ambientes TEE (Trusted Execution Environment) integrados em APU AMD.
  • Memória e serviços do sistema
    • O BPF agora suporta funções globais. O desenvolvimento está sendo realizado no âmbito da iniciativa para adicionar suporte a bibliotecas de funções que podem ser integradas em programas BPF. O próximo passo será o suporte a extensões dinâmicas, permitindo o carregamento de funções globais, incluindo a substituição de funções globais existentes durante seu uso. Também foi adicionado ao subsistema BPF suporte a uma variante da operação map (usada para armazenar dados permanentes), que suporta execução em modo em lote.
    • Adicionado O dispositivo «cpu_cooling» que permite resfriar a CPU superaquecerá colocando-a em estado de inatividade (idle) por curtos períodos.
    • Chamada de sistema adicionada openat2(), oferecendo um conjunto de flags adicionais para restringir a resolução do caminho do arquivo (proibindo a travessia de pontos de montagem, links simbólicos, links mágicos (\/proc\/PID\/fd) e componentes «..\/»).
    • Para sistemas heterogêneos baseados na arquitetura big.LITTLE, que combinam núcleos de CPU poderosos e menos eficientes energeticamente em um único chip, ao executar tarefas em tempo real, o parâmetro uclamp_min é garantido (introduzido no núcleo 5.3 para fixação da carga). O parâmetro especificado garante que a tarefa será alocada pelo planejador em um núcleo de CPU com desempenho adequado.
    • O núcleo foi livre de o problema do ano 2038. Os últimos manipuladores restantes, onde um tipo de time_t de 32 bits (signed int) foi usado para o contador de tempo epochal, que considerando o relatório de 1970 deve transbordar em 2038.
    • A melhoria da interface de entrada/saída assíncrona foi continuada io_uring, na qual foi garantido suporte a novas operações: IORING_OP_FALLOCATE (reservar áreas vazias), IORING_OP_OPENAT,
      IORING_OP_OPENAT2,
      IORING_OP_CLOSE (abertura e fechamento de arquivos),
      IORING_OP_FILES_UPDATE (adição e remoção de arquivos da lista de acesso rápido),
      IORING_OP_STATX (requisição de informações sobre arquivo),
      IORING_OP_READ,
      IORING_OP_WRITE (análogos simplificados de IORING_OP_READV e IORING_OP_WRITEV),
      IORING_OP_FADVISE,
      IORING_OP_MADVISE (variações assíncronas das chamadas posix_fadvise e madvise), IORING_OP_SEND,
      IORING_OP_RECV (envio e recebimento de dados de rede),
      IORING_OP_EPOLL_CTL (execução de operações em descritores de arquivos epoll).
    • Chamada de sistema adicionada pidfd_getfd(), permitindo que um processo extraia de outro processo o descritor de arquivo de um arquivo aberto.
    • o operador de sequência opcional o mecanismo «bootconfig», permitindo, além das opções de linha de comando, definir parâmetros de operação do núcleo através de um arquivo de configuração. Para adicionar tais arquivos à imagem do initramfs, foi proposta a utilidade bootconfig. Esse recurso pode ser usado, por exemplo, para configurar kprobes durante a inicialização.
    • Revisado mecanismo de espera para gravação e leitura de dados em canais anônimos (pipe). A alteração permitiu acelerar a execução de tarefas como a compilação paralela de grandes projetos. No entanto, a otimização pode levar a condições de corrida no GNU make devido a um erro na versão 4.2.1, que foi corrigido na versão 4.3.
    • Foi adicionado o sinalizador PR_SET_IO_FLUSHER ao prctl(), que pode ser usado para marcar processos que estão liberando memória, para os quais não devem ser aplicados limites em situações de escassez de memória no sistema.
    • Baseada no sistema de gerenciamento de memória ION utilizado no Android, foi implementada uma subsistema heaps dma-buf, que permite gerenciar a alocação de buffers DMA para compartilhamento de áreas de memória entre drivers, aplicativos e diversas subsistemas.
  • Arquiteturas de hardware
    • Foi adicionada a suporte à extensão E0PD, introduzida no ARMv8.5, que possibilita implementar proteção contra ataques relacionados à execução especulativa de instruções na CPU. A proteção baseada no E0PD acarreta menos sobrecarga do que a proteção KPTI (Kernel Page Table Isolation).
    • Para sistemas baseados na arquitetura ARMv8.5, foi adicionada a instrução RNG, que fornece acesso ao gerador de números pseudorrandômicos em hardware. No kernel, a instrução RNG é utilizada para gerar entropia ao inicializar o gerador de números pseudorrandômicos fornecido pelo kernel.
    • O suporte às extensões MPX (Memory Protection Extensions), que foi adicionado no kernel 3.19 e permite a verificação de ponteiros para garantir que respeitem os limites das áreas de memória, foi removido. Essa tecnologia não ganhou popularidade entre compiladores e foi excluída do GCC.
    • Para a arquitetura RISC-V, foi implementado o suporte à ferramenta de depuração KASan (Kernel address sanitizer), que ajuda na identificação de erros relacionados ao uso de memória.
  • Hardware
    • Foi implementado o suporte à especificação USB 4.0, que é baseada no protocolo Thunderbolt 3 e oferece largura de banda de até 40 Gbps, enquanto mantém compatibilidade reversa com USB 2.0 e USB 3.2. Assim como o Thunderbolt , a interface USB 4.0 permite o tunelamento de vários protocolos por um único cabo com conector Type-C, incluindo PCIe, Display Port e USB 3.x, assim como implementações de software de protocolos, por exemplo, para organizar conexões de rede entre hosts. A implementação é baseada no driver Thunderbolt já presente no núcleo do Linux e adapta-o para funcionar com hosts e dispositivos compatíveis com USB4. As alterações também adicionam suporte a dispositivos Thunderbolt 3 na implementação de software do Gerenciador de Conexões, que é responsável pela criação de túneis para conectar múltiplos dispositivos através de uma única porta.
    • No driver amdgpu foi adicionada , foi adicionada a suporte inicial para a tecnologia de proteção contra cópias HDCP 2.x (High-bandwidth Digital Content Protection). Adicionado suporte para o chip ASIC AMD Pollock, baseado na arquitetura Raven 2. Implementada a possibilidade de redefinir a GPU para as famílias Renoir e Navi.
    • No driver DRM para placas gráficas Intel foi adicionada , suporte DSI VDSC para chips baseados na microarquitetura Ice Lake e Tiger Lake, implementação de LMEM mmap (memória local do dispositivo), aprimoramento do parsing VBT (Video BIOS Table), suporte HDCP 2.2 para chips Coffee Lake.
    • Continua o trabalho de unificação do código do driver amdkfd (para GPUs discretas, como Fiji, Tonga, Polaris) com o driver amdgpu.
    • O driver k10temp foi reestruturado, com suporte para exibir os parâmetros de tensão e corrente para CPU AMD Zen, além de informações detalhadas dos sensores de temperatura utilizados em CPUs Zen e Zen 2.
    • No driver nouveau foi adicionada , suporte para o modo de verificação da carga de firmware para GPUs NVIDIA baseadas na microarquitetura Turing (GeForce RTX 2000), permitindo suporte para aceleração 3D para essas placas (requer carregamento de firmwares oficiais com assinatura digital da NVIDIA). Adicionado suporte para o motor gráfico TU10x. Problemas com HD Audio foram resolvidos.
    • Adicionado suporte para compressão de dados durante a transmissão via DisplayPort MST (Multi-Stream Transport).
    • Novo driver “ath11k” para chips wireless Qualcomm com suporte a 802.11ax.
      O driver é baseado na pilha mac80211 e suporta modos de ponto de acesso, estação de trabalho e nó de rede Mesh.
    • Acesso às leituras dos sensores de temperatura usados em discos rígidos modernos e SSDs é fornecido através do sysfs.
    • Realizadas Mudanças significativas no sistema de som ALSA visando remover código de o problema do ano 2038 (abandonando o uso do tipo time_t de 32 bits nas interfaces snd_pcm_mmap_status e snd_pcm_mmap_control). Suporte adicionado para novos codecs de áudio
      Qualcomm WCD9340/WCD9341, Realtek RT700, RT711, RT715, RT1308, Ingenic JZ4770.
    • Adicionados drivers para painéis LCD Logic PD 28, Jimax8729d MIPI-DSI, igenic JZ4770, Sony acx424AKP, Leadtek LTK500HD1829, Xinpeng XPP055C272, AUO B116XAK01, GiantPlus GPM940B0,
      BOE NV140FHM-N49,
      Satoz SAT050AT40H12R2,
      Sharp LS020B1DD01D.
    • Adicionada suporte a plataformas ARM e Gen1 Amazon Echo (baseado em OMAP3630), Samsung Galaxy S III mini (GT-I8190), Allwinner Emlid Neutis, Libre Computer ALL-H3-IT, PineH64 Model B, Aibretech Amlogic GX PC,
      Armada SolidRun Clearfog GTR, NXPGateworks GW59xx,
      Leitor de eBook Tolino Shine 3,
      Embedded Artists COM (i.MX7ULP), SolidRun Clearfog CX/ITX e HoneyComb (LX2160A), Google Coral Edge TPU (i.MX8MQ),
      Rockchip Radxa Dalang Carrier, Radxa Rock Pi N10, VMARC RK3399Pro SOM
      ST Ericsson HREF520, Inforce 6640, SC7180 IDP, Atmel/Microchip AM9X60 (SoC ARM926, Kizboxmini), ST stm32mp15, AM3703/AM3715/DM3725, ST Ericsson ab8505, Unisoc SC9863A, Qualcomm SC7180. Suporte adicionado para o controlador PCIe usado no Raspberry Pi 4.

Ao mesmo tempo, a Fundação Latino-Americana de Software Livre formou
uma variante kernel totalmente livre 5.6 — Linux-libre 5.6-gnu, livre de elementos de firmware e drivers que contêm componentes ou trechos de código não livres, cuja aplicação é limitada pelo fabricante. Na nova versão, o carregamento de blobs nos drivers para AMD TEE, ATH11K e Mediatek SCP foi desativado. O código de limpeza de blobs nos drivers e subsistemas AMD PSP, amdgpu e nouveau 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