Kernel Linux versão 5.3

Após dois meses de desenvolvimento, Linus Torvalds introduzido lançamento do kernel Linux 5.3. Entre as mudanças mais notáveis: suporte para GPUs AMD Navi, processadores Zhaoxi e tecnologia de gerenciamento de energia Intel Speed ​​​​Select, capacidade de usar instruções umwait para esperar sem usar ciclos,
modo 'utilization clamping' que aumenta a interatividade para CPUs assimétricas, a chamada de sistema pidfd_open, a capacidade de usar endereços IPv4 da sub-rede 0.0.0.0/8, a possibilidade de aceleração de hardware nftables, suporte HDR no subsistema DRM, integração do ACRN hipervisor.

В anúncio Na nova versão, Linus lembrou a todos os desenvolvedores a regra principal do desenvolvimento do kernel - manter o mesmo comportamento para os componentes do espaço do usuário. As alterações no kernel não devem de forma alguma interromper os aplicativos já em execução ou levar a regressões no nível do usuário. Nesse caso, uma violação de comportamento pode causar não apenas uma alteração na ABI, a remoção de código desatualizado ou o aparecimento de erros, mas também o impacto indireto de melhorias úteis que funcionam corretamente. Como exemplo ilustrativo houve descartado útil otimização no código Ext4, que reduz o número de acessos à unidade desabilitando a pré-leitura da tabela de inodes para pequenas solicitações de E/S.

A otimização levou ao fato de que, devido a uma diminuição na atividade do disco, a entropia para o gerador de números aleatórios getrandom() começou a se acumular mais lentamente e em algumas configurações, sob certas circunstâncias, congelamentos podem ser observados durante o carregamento até que o pool de entropia fosse preenchido. Como a otimização é realmente útil, surgiu uma discussão entre os desenvolvedores na qual foi proposto corrigir o problema desabilitando o modo de bloqueio padrão da chamada getrandom() e adicionando um sinalizador opcional para esperar pela entropia, mas tal mudança afetaria o qualidade dos números aleatórios na fase inicial de carregamento.

A nova versão inclui 15794 correções de 1974 desenvolvedores,
tamanho do patch - 92 MB (as alterações afetaram 13986 arquivos, 258419 linhas de código foram adicionadas,
599137 linhas removidas). Cerca de 39% de todos apresentados em 5.3
alterações estão relacionadas a drivers de dispositivos, aproximadamente 12% das alterações são
atitude em relação à atualização de código específico para arquiteturas de hardware, 11%
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
    • Desenvolvimento contínuo da funcionalidade 'pidfd' para ajudar a lidar com situações de reutilização de PID (pidfd está associado a um processo específico e não muda, enquanto um PID pode ser associado a outro processo após o término do processo atual associado a esse PID). Foi adicionado anteriormente ao kernel
      chamada de sistema pidfd_send_signal() e o sinalizador CLONE_PIDFD na chamada clone() para obter um pidfd para uso em idfd_send_signal(). Usar clone() com o sinalizador CLONE_PIDFD pode causar problemas com gerenciadores de serviços ou com o sistema de encerramento forçado por falta de memória da plataforma Android. Neste caso, uma chamada para fork() ou clone() sem CLONE_PIDFD é usada para iniciar.

      Kernel 5.3 introduziu a chamada do sistema pidfd_open(), que permite obter um pidfd verificável para um processo existente arbitrário que não foi criado chamando clone() com o sinalizador CLONE_PIDFD. Também foi adicionado suporte para pesquisa pidfd usando poll() e epoll(), que permite aos gerentes de processos rastrear o encerramento de processos arbitrários sem medo de uma condição de corrida se um PID for atribuído a um novo processo. O mecanismo para notificar que um processo associado ao pidfd foi encerrado é o mesmo que notificar que seu processo filho foi encerrado;

    • O suporte para o mecanismo de fixação de carga foi adicionado ao agendador de tarefas (Fixação de utilização), permitindo respeitar as faixas de frequência mínima ou máxima, dependendo das tarefas ativas na CPU. O mecanismo apresentado acelera tarefas que afetam diretamente a qualidade da experiência do usuário, executando essas tarefas pelo menos no limite inferior da frequência “solicitada”. As tarefas de baixa prioridade que não afetam o trabalho do usuário são iniciadas usando o limite superior da frequência “permitida”. Os limites são definidos através dos atributos sched_uclamp_util_min e sched_uclamp_util_max na chamada do sistema sched_setattr().
    • Adicionado suporte para tecnologia de gerenciamento de energia Seleção de velocidade Intel, disponível em servidores selecionados com processadores Intel Xeon. Esta tecnologia permite definir configurações de desempenho e taxa de transferência de partição para diferentes núcleos de CPU, o que permite priorizar o desempenho para tarefas executadas em determinados núcleos, sacrificando o desempenho em outros núcleos;
    • Processos no espaço do usuário fornecido por a capacidade de esperar um curto período de tempo sem usar loops usando a instrução umwait. Esta instrução, junto com as instruções umonitor e tpause, será oferecida nos próximos chips "Tremont" da Intel e permitirá a implementação de atrasos que economizam energia e não afetam o desempenho de outros threads ao usar Hyper Threading;
    • Para a arquitetura RISC-V, foi adicionado suporte para páginas de memória grandes;
    • O mecanismo de rastreamento kprobes adicionou a capacidade de desreferenciar ponteiros do kernel para o espaço do usuário, que pode ser usado, por exemplo, para avaliar o conteúdo de estruturas passadas para chamadas do sistema. A capacidade de instalar verificações na fase de inicialização também foi adicionada.
    • Adicionada opção PREEMPT_RT ao arquivo de configuração para operação em tempo real. O próprio código para suportar o modo em tempo real ainda não foi adicionado ao kernel, mas o aparecimento da opção é um bom sinal de que o épico de longo prazo integração Os patches do Realtime-Preempt estão quase concluídos;
    • Adicionada a chamada de sistema clone3() com a implementação de uma versão mais extensível da interface clone(), que permite especificar um maior número de flags;
    • Adicionado manipulador bpf_send_signal(), permitindo que programas BPF enviem sinais para processos arbitrários;
    • Para eventos perf no ambiente do hipervisor KVM, um novo mecanismo de filtragem de eventos foi adicionado, permitindo ao administrador determinar os tipos de eventos que são permitidos ou não para monitoramento no lado do sistema convidado;
    • Ao mecanismo de verificação da aplicação eBPF foi adicionada a capacidade de processar programas com loops se a execução do loop for limitada e não puder levar à ultrapassagem do limite do número máximo de instruções;
  • Subsistema de disco, E/S e sistemas de arquivos
    • O sistema de arquivos XFS agora suporta desvio de inode multithread (por exemplo, ao verificar cotas). Foram adicionados novos ioctls BULKSTAT e INUMBERS, proporcionando acesso aos recursos que apareceram na quinta edição do formato FS, como o horário de nascimento do inode e a capacidade de definir os parâmetros BULKSTAT e INUMBERS para cada grupo AG (Allocation Groups);
    • Em Ext4 suporte adicionado vazios em diretórios (blocos desvinculados).
      Processamento fornecido sinalizador “i” (imutável) para arquivos abertos (a gravação é proibida em uma situação em que o sinalizador foi definido no momento em que o arquivo já estava aberto);

    • O Btrfs fornece uma definição de implementação rápida do crc32c em todas as arquiteturas;
    • No CIFS, o código para suporte ao smbdirect foi removido como desenvolvimento experimental. SMB3 adicionou a capacidade de usar algoritmos criptográficos no modo GCM. Adicionada uma nova opção de montagem para extrair parâmetros de modo de entradas ACE (Access Control Entry). Otimizou o desempenho da chamada open();
    • Adicionada uma opção ao F2FS para limitar o coletor de lixo ao executar no modo checkpoint=disable. Adicionado ioctl para remover intervalos de blocos do F2FS, permitindo ajustes de tamanho de partição em tempo real. Adicionada a capacidade de colocar um arquivo de troca em F2FS para fornecer E/S direta. Adicionado suporte para fixar um arquivo e alocar blocos para arquivos semelhantes para todos os usuários;
    • Adicionado suporte para operações assíncronas sendmsg() e recvmsg() à interface para entrada/saída assíncrona io_uring;
    • Suporte para compactação usando o algoritmo zstd e a capacidade de verificar imagens FS assinadas foram adicionados ao sistema de arquivos UBIFS;
    • Ceph FS agora oferece suporte a rótulos de segurança SELinux para arquivos;
    • Para o NFSv4, foi implementada uma nova opção de montagem “nconnect=”, que determina o número de conexões estabelecidas com o servidor. O tráfego entre essas conexões será distribuído usando balanceamento de carga. Além disso, o servidor NFSv4 agora cria um diretório /proc/fs/nfsd/clients com informações sobre os clientes atuais, incluindo informações sobre os arquivos que eles abriram;
  • Virtualização e Segurança
    • O kernel inclui um hipervisor para dispositivos embarcados ACRN, que foi escrito pensando na prontidão para tarefas em tempo real e na adequação para uso em sistemas de missão crítica. ACRN fornece sobrecarga mínima, garante baixa latência e capacidade de resposta adequada ao interagir com o equipamento. Suporta virtualização de recursos de CPU, E/S, subsistema de rede, gráficos e operações de som. O ACRN pode ser usado para executar múltiplas máquinas virtuais isoladas em unidades de controle eletrônico, painéis, sistemas de informação automotiva, dispositivos IoT de consumo e outras tecnologias incorporadas;
    • No modo de usuário Linux adicionado Modo de viagem no tempo, que permite desacelerar ou acelerar o tempo em um ambiente UML virtual para facilitar a depuração de código relacionado ao tempo. Além disso, um parâmetro foi adicionado
      time-travel-start, que permite que o relógio do sistema inicie a partir de um momento especificado no formato de época;

    • Novas opções de linha de comando do kernel “init_on_alloc” e “init_on_free” foram adicionadas, quando especificadas, a zeragem de áreas de memória alocadas e liberadas é habilitada (preenchimento com zeros para malloc e free), o que torna possível aumentar a segurança devido à inicialização adicional a sobrecarga;
    • Novo driver adicionado virtio-iommu com a implementação de um dispositivo paravirtualizado que permite enviar solicitações IOMMU como ATTACH, DETACH, MAP e UNMAP pelo transporte virtio sem emular tabelas de páginas de memória;
    • Novo driver adicionado virtio-pmem, representando o acesso a dispositivos de armazenamento mapeados para espaço de endereço físico, como NVDIMMs;
    • Implementada a capacidade de anexar chaves criptográficas a um namespace de usuário ou rede (as chaves tornam-se inacessíveis fora do namespace selecionado), bem como proteger chaves usando ACLs;
    • Para o subsistema criptográfico adicionado suporte para um algoritmo de hash não criptográfico muito rápido xxhash, cuja velocidade depende do desempenho da memória;
  • subsistema de rede
    • Habilitou o processamento de endereços IPv4 no intervalo 0.0.0.0/8, que anteriormente não estava disponível para uso. Introdução desta sub-rede vontade distribuir outros 16 milhões de endereços IPv4;
    • No Netfilter para nftables adicionado suporte para mecanismos de aceleração de hardware para filtragem de pacotes através do uso de drivers adicionais API de bloco de fluxo. Tabelas inteiras de regras com todas as cadeias podem ser colocadas na lateral dos adaptadores de rede. A habilitação é feita vinculando o sinalizador NFT_TABLE_F_HW à tabela. Suporta metadados de protocolo simples de Camada 3 e Camada 4, ações de aceitação/rejeição, mapeamentos por IP e portas de rede remetente/receptor e tipo de protocolo;
    • Adicionado por suporte integrado para rastreamento de conexões para pontes de rede, que dispensa o uso da camada de emulação br_netfilter;
    • Em nf_tables adicionado suporte para o módulo SYNPROXY, que replica funcionalidade semelhante do iptables, e a capacidade de verificar regras para opções individuais no cabeçalho IPv4 também é implementado;
    • Adicionada a capacidade de anexar programas BPF às chamadas de sistema setsockopt() e getockopt(), o que, por exemplo, permite anexar seus próprios manipuladores de acesso a essas chamadas. Além disso, foi adicionado um novo ponto de chamada (hook), com o qual você pode organizar uma chamada para o programa BPF uma vez para cada intervalo RTT (tempo de ida e volta, tempo de ping);
    • Para IPv4 e IPv6 adicionado novo mecanismo de armazenamento de dados de roteamento nexthop que visa aumentar a escalabilidade das tabelas de roteamento. Os testes mostraram que ao utilizar o novo sistema, um conjunto de 743 mil rotas foi carregado no kernel em apenas 4.3 segundos;
    • Para Bluetooth implementado funcionalidade necessária para suportar ping LE;
  • Оборудование
    • Adicionado por suporte para processadores compatíveis com x86 da empresa Zhaoxin, desenvolvido como resultado de um projeto conjunto entre a VIA Technologies e o município de Xangai. A família de CPU ZX é construída na arquitetura x86-64 Isaiah, continuando o desenvolvimento da tecnologia VIA Centauro;
    • O subsistema DRM (Direct Rendering Manager), assim como os drivers gráficos amdgpu e i915, adicionou suporte para análise, processamento e envio de metadados HDR (alta faixa dinâmica) através da porta HDMI, permitindo o uso de painéis e telas HDR capazes de exibindo faixas de brilho adicionais;
    • O driver amdgpu adicionou suporte inicial para GPU AMD NAVI (RX5700), que inclui o driver base, código de interação de tela (DCN2), GFX e suporte de computação (GFX10),
      SDMA 5 (Sistema DMA0), gerenciamento de energia e codificadores/decodificadores multimídia (VCN2). amdgpu também melhora o suporte para placas baseadas nas GPUs Vega12 e Vega20, para as quais foram adicionados recursos adicionais de memória e gerenciamento de energia;

    • Adicionado suporte para placas baseadas em GPUs VegaM ao driver amdkfd (para GPUs discretas, como Fiji, Tonga, Polaris);
    • No driver DRM para placas de vídeo Intel para chips Icelake implementado novo modo de correção gama multissegmento. Adicionada a capacidade de saída via DisplayPort no formato YCbCr4:2:0. Novo firmware adicionado GuC para SKL, BXT, KBL, GLK e ICL. A capacidade de desligar a tela no modo assíncrono foi implementada. Adicionado por suporte para salvar e restaurar o contexto de renderização para chips Ironlake (gen5) e gen4 (Broadwater - Cantiga), que permite restaurar o estado da GPU do espaço do usuário ao passar de uma operação em lote para outra;
    • O driver Nouveau fornece detecção do chipset NVIDIA Turing TU116;
    • Os recursos do driver DRM/KMS para aceleradores de tela ARM Komeda (Mali D71) foram expandidos, o suporte para dimensionamento, dividir/mesclar camadas, rotação, gravação diferida, AFBC, SMMU e formatos de codificação de cores Y0L2, P010, YUV420_8/10BIT foi foi adicionado;
    • O driver MSM adiciona suporte para a série GPU Adreno A540 usada em processadores Qualcomm, bem como suporte para o controlador DSI MSM8998 para Snapdragon 835;
    • Adicionados drivers para painéis LCD Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS,
      Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 e VXT VL050-8048NT-C01;

    • Adicionado driver para ativar ferramentas de aceleração de decodificação
      vídeos disponíveis no Amlogic Meson SoC;

    • No driver v3d (para a GPU Broadcom Video Core V usada no Raspberry Pi) apareceu apoiar despachar sombreadores de computação;
    • Adicionado driver para teclados e trackpads SPI usados ​​​​em modelos modernos de laptops Apple MacBook e MacBookPro;
    • Adicionado por proteção adicional para chamadas ioctl associadas ao driver de disquete, e o próprio driver é marcado como não mantido
      (“órfão”), o que implica o encerramento de seus testes. O driver ainda está armazenado no kernel, mas seu correto funcionamento não é garantido. O driver é considerado desatualizado, pois é difícil encontrar equipamentos funcionais para testá-lo - todos os drives externos atuais, via de regra, utilizam a interface USB.

    • Adicionado driver cpufreq para placas Raspberry Pi, que permite controlar dinamicamente as mudanças na frequência do processador;
    • Adicionado suporte para o novo ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSPs + MMA) e Amlogic G12B (4x Cortex-A73 + 2x Cortex- A53), bem como placas:
      • Purismo Librem5,
      • Aspeed BMC,
      • Microsoft Olimpo BMC,
      • Kontron SMARC,
      • Novtech Meerkat96 (i.MX7),
      • ST Micro Vingador96,
      • Google Cheza (Qualcomm SDM845),
      • Qualcomm Dragonboard 845c (Qualcomm SDM845),
      • Caixa de TV Hugsun X99 (Rockchip RK3399),
      • Khadas Edge/Edge-V/Capitão (Rockchip RK3399),
      • Olá, espero RZ/G2M,
      • NXP LS1021A-TSN.

Ao mesmo tempo, a Fundação Latino-Americana para o Software Livre formado
opção kernel 5.3 totalmente gratuito - Linux-libre 5.3-gnu, livre de elementos de firmware e driver contendo componentes ou seções de código não livres, cujo escopo é limitado pelo fabricante. Na nova versão, o carregamento de blob está desabilitado nos drivers qcom, hdcp drm, allegro-dvt e meson-vdec.
Código de limpeza de blob atualizado em drivers e subsistemas amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, driver de som para skylake, bem como na documentação do microcódigo.

Fonte: opennet.ru

Adicionar um comentário