Kernel Linux versão 5.1

Após dois meses de desenvolvimento, Linus Torvalds introduzido lançamento do kernel Linux 5.1. Entre as mudanças mais notáveis: uma nova interface para io_uring de E/S assíncrona, a capacidade de usar NVDIMM como RAM, suporte para memória virtual compartilhada no Nouveau, suporte para monitoramento escalonável de sistemas de arquivos muito grandes via fanotify, a capacidade de configurar compactação Zstd níveis em Btrfs, um novo manipulador cpuidle TEO, implementação de chamadas de sistema para resolver o problema de 2038, capacidade de inicializar a partir de dispositivos mapeadores de dispositivos sem initramfs, módulo SafeSetID LSM, suporte para patches ativos combinados.

O principal inovações:

  • Subsistema de disco, E/S e sistemas de arquivos
    • Implementou uma nova interface para E/S assíncrona - io_uring, que é notável por seu suporte para pesquisa de E/S e pela capacidade de trabalhar com ou sem buffer. Lembremos que o mecanismo de E/S assíncrona “aio” proposto anteriormente não suportava E/S com buffer, só podia operar no modo O_DIRECT (sem buffer e sem ignorar o cache), tinha problemas de bloqueio devido à espera pela disponibilidade de metadados, e exibiu grandes custos indiretos devido à cópia de dados na memória.

      Dentro da API
      Os desenvolvedores do io_uring tentaram eliminar as deficiências da antiga interface aio. Por desempenho io_uring está muito próximo de SPDK e está significativamente à frente do libaio ao trabalhar com a votação habilitada. Uma biblioteca foi preparada para usar io_uring em aplicações finais executadas no espaço do usuário librando, que fornece uma estrutura de alto nível sobre a interface do kernel;

    • No mecanismo de rastreamento de eventos no FS fanotify() adicionado suporte para rastreamento de situações de superbloco e mudança de estrutura horrível (eventos de criação, exclusão e movimentação de diretórios). Os recursos apresentados ajudam a resolver os problemas de escalabilidade que surgem ao criar o rastreamento recursivo de alterações em sistemas de arquivos muito grandes usando o mecanismo inotify (alterações diretas anteriormente só podiam ser rastreadas por meio do inotify, mas
      o desempenho em condições de rastreamento recursivo de grandes diretórios aninhados deixou muito a desejar). Agora esse monitoramento pode ser feito de forma eficaz por meio do fanotify;

    • No sistema de arquivos Btrfs adicionado a capacidade de personalizar o nível de compactação para o algoritmo zstd, que pode ser considerado um compromisso ideal entre o lz4 rápido, mas ineficaz, e a compactação lenta, mas boa, xz. Por analogia com a forma como anteriormente era possível definir o nível de compactação ao usar zlib, o suporte para a opção de montagem “-o compress=zstd:level” foi adicionado para zstd. Durante os testes, o primeiro nível mínimo forneceu compactação de dados em 2.658 vezes com velocidade de compactação de 438.47 MB/s, velocidade de descompactação de 910.51 MB/s e consumo de memória de 780 MB, e o nível máximo 15 forneceu 3.126 vezes, mas com compactação velocidade de 37.30 MB/s, descompactação 878.84 MB/s e consumo de memória 2547 MB;
    • Adicionado por a capacidade de inicializar a partir de um sistema de arquivos localizado no dispositivo mapeador de dispositivos, sem usar initramfs. A partir da versão atual do kernel, os dispositivos mapeadores de dispositivos podem ser usados ​​diretamente durante o processo de inicialização, por exemplo, como uma partição com o sistema de arquivos raiz. A partição é configurada usando o parâmetro de inicialização “dm-mod.create”. Os módulos mapeadores de dispositivos permitidos para carregamento incluem: “crypt”, “delay”, “linear”, “snapshot-origin” e “verity”;
    • O sinalizador F2FS_NOCOW_FL foi adicionado ao sistema de arquivos F2FS orientado para drives Flash, o que permite desabilitar o modo copy-on-write para um determinado arquivo;
    • Sistema de arquivos removido do kernel Exofs, que é uma variante do ext2, adaptado para trabalhar com armazenamentos de objetos OSD (Object-based Storage Device). O suporte ao protocolo SCSI para tais dispositivos de armazenamento de objetos também foi removido;
  • Virtualização e Segurança
    • Adicionada opção PR_SPEC_DISABLE_NOEXEC ao prctl() para controlar a execução especulativa de instruções para o processo selecionado. Uma nova opção permite desabilitar seletivamente a execução especulativa para processos que poderiam ser potencialmente atacados por um ataque Spectre. O bloqueio dura até a primeira chamada para exec();
    • Módulo LSM implementado SafeSetID, que permite que os serviços do sistema gerenciem usuários com segurança sem aumentar privilégios (CAP_SETUID) e sem obter privilégios de root. Os privilégios são atribuídos definindo regras em securityfs com base em uma lista branca de ligações válidas (no formato “UID1:UID2”);
    • Adicionadas alterações de baixo nível necessárias para carregamento baseado em pilha de módulos de segurança (LSMs). Introduziu a opção de inicialização do kernel "lsm" para controlar quais módulos são carregados e em que ordem;
    • O suporte para namespaces de arquivos foi adicionado ao subsistema de auditoria;
    • expandido os recursos do plugin GCC structleak, que permite bloquear possíveis vazamentos de conteúdo de memória.É fornecida a inicialização de quaisquer variáveis ​​​​usadas no código por meio de acesso de referência na pilha;
  • subsistema de rede
    • Para soquetes implementado nova opção "SO_BINDTOIFINDEX" semelhante a
      "SO_BINDTODEVICE", mas tomando como argumento o número do índice da interface de rede em vez do nome da interface;

    • A pilha mac80211 adicionou a capacidade de atribuir vários BSSIDs (endereços MAC) a um dispositivo. Como parte de um projeto para otimizar o desempenho WiFi, a pilha mac80211 adicionou contabilidade de tempo de antena e a capacidade de distribuir tempo de antena entre múltiplas estações (ao operar no modo de ponto de acesso, alocando menos tempo de transmissão para estações sem fio lentas, em vez de distribuir o tempo uniformemente entre todos estações);
    • Mecanismo adicionado "saúde do devlink", que fornece notificações quando ocorrem problemas com a interface de rede;
  • Serviços de memória e sistema
    • Implementado entrega segura de sinal que permite a reutilização do PID. Por exemplo, ao chamar kill anteriormente, poderia surgir uma situação em que, imediatamente após o envio de um sinal, o PID alvo poderia ser liberado devido ao encerramento do processo e ocupado por outro processo, e o sinal acabaria sendo passado para outro processo. Para eliminar tais situações, foi adicionada uma nova chamada de sistema pidfd_send_signal, que usa descritores de arquivo de /proc/pid para garantir uma ligação estável do processo. Mesmo que o PID seja reutilizado durante o processamento da chamada do sistema, o descritor do arquivo não será alterado e poderá ser usado com segurança para enviar um sinal ao processo;
    • Adicionado por a capacidade de usar dispositivos de memória permanente (memória persistente, por exemplo NVDIMM) como RAM. Até agora, o kernel suportava dispositivos como dispositivos de armazenamento, mas agora eles também podem ser usados ​​como RAM adicional. O recurso é implementado em resposta aos desejos dos usuários que estão dispostos a suportar um atraso de desempenho e desejam usar a API nativa de gerenciamento de memória do kernel Linux em vez de usar sistemas existentes de alocação de memória de espaço de usuário rodando sobre mmap para o dax arquivo;
    • Adicionado um novo manipulador de CPU ociosa (cpuidle, decide quando a CPU pode ser colocada em modos de economia profunda de energia; quanto mais profundo o modo, maior a economia, mas também mais tempo leva para sair do modo) - TEO (Timer Events Oriented Governor) ). Até agora, foram propostos dois manipuladores de cpuidle - “menu” e “escada”, diferindo em heurísticas. O manipulador "menu" tem problemas conhecidos na tomada de decisões heurísticas, para eliminar os quais decidiu-se preparar um novo manipulador. O TEO se posiciona como uma alternativa ao manipulador “menu”, permitindo maior desempenho mantendo o mesmo nível de consumo de energia.
      Você pode ativar o novo manipulador usando o parâmetro de inicialização “cpuidle.governor=teo”;

    • Como parte do trabalho para eliminar problemas de 2038, causado por um estouro do tipo time_t de 32 bits, inclui chamadas de sistema que oferecem contadores de tempo de 32 bits para arquiteturas de 64 bits. Como resultado, a estrutura time_t de 64 bits agora pode ser usada em todas as arquiteturas. Mudanças semelhantes também foram implementadas no subsistema de rede para opções timestamp tomadas de rede;
    • No sistema de hot patching para o núcleo (correção ao vivo) adicionado Recurso “Atomic Replace” para aplicar atomicamente uma série de alterações a uma única função. Esse recurso permite distribuir patches resumidos cobrindo várias alterações de uma vez, em vez do processo de aplicação passo a passo de patches ativos em uma ordem estritamente definida, o que é bastante difícil de manter. Considerando que anteriormente cada mudança subsequente tinha que ser baseada no estado da função após a última mudança, agora é possível propagar várias mudanças ligadas a um estado inicial de uma só vez (ou seja, os mantenedores podem manter um patch consolidado relativo ao kernel base em vez disso de uma cadeia de patches que dependem uns dos outros);
    • Anunciado suporte obsoleto para o formato de arquivo executável a.out e
      excluído código para gerar arquivos principais no formato a.out, que está em estado abandonado. O formato a.out não é usado em sistemas Linux há muito tempo, e a geração de arquivos a.out há muito tempo não é suportada por ferramentas modernas nas configurações padrão do Linux. Além disso, o carregador para arquivos a.out pode ser implementado inteiramente no espaço do usuário;

    • A capacidade de identificar e remover código não utilizado foi adicionada ao mecanismo de verificação do programa BPF. O kernel também inclui patches com suporte spinlock para o subsistema BPF, fornecendo recursos adicionais para gerenciar a execução paralela de programas BPF;
  • Оборудование
    • Em driver Nouveau adicionado suporte para gerenciamento de memória heterogêneo, permitindo que CPU e GPU acessem áreas comuns de memória sincronizada. O sistema de memória virtual compartilhada (SVM, memória virtual compartilhada) é implementado com base no subsistema HMM (gerenciamento de memória heterogênea), que permite a utilização de dispositivos com unidades de gerenciamento de memória próprias (MMU, unidade de gerenciamento de memória), que podem acessar memória principal. Em particular, usando HMM, você pode organizar um espaço de endereço compartilhado entre a GPU e a CPU, no qual a GPU pode acessar a memória principal do processo. Atualmente, o suporte SVM está habilitado apenas para GPUs da família Pascal, embora o suporte também seja fornecido para GPUs Volta e Turing. Além disso, em Nouveau adicionado novo ioctl para controlar a migração de áreas de memória de processo para memória GPU;
    • No driver Intel DRM para GPU Skylake e posterior (gen9+) ligado Por padrão, o modo fastboot elimina alterações desnecessárias de modo durante a inicialização. Adicionado новые identificadores de dispositivos baseados nas microarquiteturas Coffelake e Ice Lake. Para chips Coffelake adicionado Apoio GVT (Virtualização de GPU). Para GPUs virtuais implementado Suporte VFIO EDID. Para painéis LCD MIPI/DSI adicionado suporte para elementos ACPI/PMIC. Implementado novos modos de TV 1080p30/50/60 TV;
    • Adicionado suporte para GPU Vega10/20 BACO ao driver amdgpu. Implementado gerenciamento de energia Vega 10/20 e tabelas de controle de cooler Vega 10. Adicionados novos identificadores de dispositivos PCI para GPUs Picasso. Adicionado interface para gerenciamento de dependências escalonáveis ​​para evitar deadlocks;
    • Adicionado Driver DRM/KMS para aceleradores de tela ARM Komeda (Mali D71);
    • Adicionado suporte para painéis de tela Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 e Kingdisplay kd097d04;
    • Adicionado suporte para codecs de áudio Rockchip RK3328, Cirrus Logic CS4341 e CS35L36, MediaTek MT6358, Qualcomm WCD9335 e Ingenic JZ4725B, bem como plataforma de áudio Mediatek MT8183;
    • Adicionado suporte para controladores NAND Flash STMicroelectronics FMC2, Amlogic Meson;
    • Adicionado suporte de acelerador para sistemas de hardware Habana AI;
    • Adicionado suporte para controladores Ethernet gigabit NXP ENETC e interfaces sem fio MediaTek MT7603E (PCIe) e MT76x8.

Ao mesmo tempo, a Fundação Latino-Americana para o Software Livre formado
opção kernel 5.1 totalmente gratuito - Linux-libre 5.1-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 mt7603 e goya. Código de limpeza de blob atualizado em drivers e subsistemas wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk e touchscreen_dmi. A limpeza de blob no carregador de firmware lantiq xrx200 foi interrompida devido à sua remoção do kernel.

Fonte: opennet.ru

Adicionar um comentário