Após dois meses de desenvolvimento, Linus Torvalds lançamento do núcleo . Entre as mudanças mais notáveis estão: uma nova interface para entrada/saída assíncrona io_uring, a possibilidade de usar NVDIMM como RAM, suporte no Nouveau para memória virtual compartilhada, suporte para monitoramento escalável de sistemas de arquivos muito grandes através do fanotify, a capacidade de configurar níveis de compressão Zstd no Btrfs, um novo manipulador cpuidle TEO, implementação de chamadas de sistema para resolver o problema de 2038, capacidade de inicialização a partir de dispositivos device-mapper sem initramfs, módulo LSM SafeSetID e suporte para patches ao vivo combinados.
:
- Subsistema de disco, entrada/saída e sistemas de arquivos
- Foi implementada uma nova interface para entrada/saída assíncrona — , que se destaca pelo suporte a polling de entrada/saída e pela possibilidade de operar tanto com buffering quanto sem buffering. Vale lembrar que o mecanismo de entrada/saída assíncrona anterior, "aio", não suportava entrada/saída com buffered, podia operar apenas no modo O_DIRECT (sem buffering e ignorando o cache), apresentava problemas de bloqueios devido à espera pela disponibilidade de metadados e demonstrava grandes sobrecargas por causa da cópia de dados na memória.
No âmbito da API
io_uring os desenvolvedores tentaram eliminar as deficiências da antiga interface aio. Por io_uring é muito próximo de e supera significativamente o libaio ao trabalhar com polling ativado. Para usar io_uring em aplicações finais que operam no espaço do usuário, foi preparada uma biblioteca , que oferece uma ligação de alto nível sobre a interface do núcleo; - No mecanismo de rastreamento de eventos no FS fanotify() o suporte para rastreamento de alterações no superbloco e na estrutura (eventos de criação, exclusão e movimentação de diretórios). Os recursos apresentados ajudam a resolver problemas de escalabilidade que surgem ao criar rastreamentos recursivos de alterações em sistemas de arquivos muito grandes usando o mecanismo inotify (as alterações em dirent anteriormente só podiam ser rastreadas através do inotify, mas
a eficiência em condições de rastreamento recursivo de grandes diretórios aninhados deixava a desejar). Agora, esse tipo de monitoramento pode ser realizado de forma eficiente através do fanotify; - No sistema de arquivos Btrfs a possibilidade de configurar o nível de compressão para o algoritmo zstd, que pode ser considerado como um compromisso ideal entre o rápido, mas ineficaz, lz4 e o lento, mas que comprime bem, xz. Da mesma forma que anteriormente era possível definir o nível de compressão ao utilizar zlib, para zstd foi adicionada a opção de montagem "-o compress=zstd:level". Nos testes, o primeiro nível foi capaz de comprimir os dados em 2,658 vezes com uma velocidade de compressão de 438,47 MB/s, velocidade de descompressão de 910,51 MB/s e usando 780 MB de memória, enquanto o nível máximo 15 conseguiu uma compressão de 3,126 vezes, mas com uma velocidade de compressão de 37,30 MB/s, descompressão de 878,84 MB/s e consumo de 2547 MB;
- a possibilidade de inicialização a partir de um sistema de arquivos hospedado em um dispositivo device-mapper, sem o uso de initramfs. A partir da versão atual do kernel, o dispositivo device-mapper pode ser utilizado diretamente no processo de inicialização, por exemplo, como uma partição com o sistema de arquivos raiz. A configuração da partição é feita usando o parâmetro de inicialização "dm-mod.create". Entre os módulos permitidos para inicialização com device-mapper estão: "crypt", "delay", "linear", "snapshot-origin" e "verity";
- Na sistema de arquivos orientada para unidades Flash F2FS, foi adicionado o flag F2FS_NOCOW_FL, permitindo desativar o modo copy-on-write para um arquivo específico;
- O sistema de arquivos foi removido do kernel , que é uma variante do ext2, adaptada para funcionar com dispositivos de armazenamento baseados em objetos OSD (Object-based Storage Device). O suporte ao protocolo SCSI para tais dispositivos de armazenamento de objetos também foi removido;
- Foi implementada uma nova interface para entrada/saída assíncrona — , que se destaca pelo suporte a polling de entrada/saída e pela possibilidade de operar tanto com buffering quanto sem buffering. Vale lembrar que o mecanismo de entrada/saída assíncrona anterior, "aio", não suportava entrada/saída com buffered, podia operar apenas no modo O_DIRECT (sem buffering e ignorando o cache), apresentava problemas de bloqueios devido à espera pela disponibilidade de metadados e demonstrava grandes sobrecargas por causa da cópia de dados na memória.
- Virtualização e segurança
- No prctl() foi adicionada a opção PR_SPEC_DISABLE_NOEXEC para controlar a execução especulativa de instruções para o processo selecionado. Esta nova opção permite desativar seletivamente a execução especulativa para processos que podem ser vulneráveis a ataques do tipo Spectre. O bloqueio permanece em vigor até a primeira chamada exec();
- Foi implementado o módulo LSM , permitindo que serviços do sistema gerenciem usuários com segurança sem aumentar privilégios (CAP_SETUID) e sem obter as permissões do usuário root. A atribuição de privilégios é feita através da definição em securityfs de regras baseadas em uma lista branca de vinculações permitidas (na forma "UID1:UID2");
- Foram adicionadas mudanças de baixo nível necessárias para a organização em pilha do carregamento de módulos de segurança (LSM). Foi introduzido o parâmetro de inicialização do núcleo 'lsm', permitindo gerenciar quais módulos são carregados e em que ordem;
- Suporte a namespaces de arquivos foi adicionado ao subsistema de auditoria;
- capacidades do plugin GCC structleak, que permite bloquear potenciais vazamentos de conteúdo de memória. A inicialização de quaisquer variáveis usadas no código através de referências na pilha foi garantida;
- Subsistema de Rede
- Para sockets, nova opção 'SO_BINDTOIFINDEX', semelhante a
'SO_BINDTODEVICE', mas aceitando como argumento o número de índice da interface de rede em vez do nome da interface; - No stack mac80211, foi adicionada a capacidade de atribuir múltiplos BSSIDs (endereços MAC) a um único dispositivo. No âmbito do projeto de otimização de desempenho do WiFi, foi incluído no stack mac80211 o contabilização do tempo de ar e a possibilidade de distribuir o tempo de ar entre várias estações (quando operando em modo de ponto de acesso, allocating weniger Zeit für die Übertragung an langsame drahtlose Stationen, anstatt die Zeit gleichmäßig zwischen allen Stationen zu verteilen);
- Adicionado o mecanismo “', que fornece notificações ao ocorrer problemas com a interface de rede;
- Para sockets, nova opção 'SO_BINDTOIFINDEX', semelhante a
- Memória e serviços do sistema
- entrega segura de sinais, levando em consideração a possibilidade de reutilização do PID. Por exemplo, ao executar uma chamada kill, anteriormente poderia ocorrer uma situação em que, logo após o envio do sinal, o PID-alvo poderia ter sido liberado devido à finalização de um processo e ocupado por outro processo, resultando assim no envio do sinal para um processo diferente. Para evitar tais situações, foi adicionado uma nova chamada de sistema pidfd_send_signal, que utiliza descritores de arquivo de /proc/pid para garantir uma ligação estável ao processo. Mesmo que o PID seja reutilizado durante o processamento da chamada de sistema, o descritor de arquivo não mudará e pode ser usado com segurança para enviar um sinal ao processo;
- a capacidade de usar dispositivos de memória persistente (memory-persistent, por exemplo, ) como RAM. Até agora, dispositivos semelhantes no núcleo eram suportados como dispositivos de armazenamento, mas agora também podem ser usados como memória RAM adicional. Essa possibilidade foi implementada em resposta ao desejo dos usuários que estão dispostos a aceitar a queda de desempenho e preferem utilizar a API de gerenciamento de memória do núcleo Linux em vez de sistemas de alocação de memória no espaço do usuário, que funcionam sobre mmap para arquivos dax;
- Adicionado um novo manipulador de ociosidade da CPU (cpuidle, que determina quando é possível colocar a CPU em modos profundos de economia de energia, quanto mais profundo o modo - maior a economia, mas mais tempo leva para sair do modo) - TEO (Governador Orientado a Eventos de Temporizador). Até agora, eram oferecidos dois manipuladores cpuidle - 'menu' e 'ladder', distintos pela heurística. O manipulador 'menu' tem problemas conhecidos de tomada de decisões heurísticas, e para resolver isso, foi decidido preparar um novo manipulador. O TEO é posicionado como uma alternativa ao manipulador 'menu', permitindo obter um desempenho mais alto mantendo o mesmo nível de consumo de energia.
O novo manipulador pode ser ativado usando o parâmetro de inicialização 'cpuidle.governor=teo'; - No âmbito do trabalho para resolver , causado pelo estouro do tipo de 32 bits time_t, foram incluídas chamadas de sistema que oferecem contadores de tempo de 64 bits para arquiteturas de 32 bits. Como resultado, a estrutura time_t de 64 bits agora pode ser aplicada em todas as arquiteturas. Mudanças análogas também foram implementadas no subsistema de rede para opções de sockets de rede;
- No sistema de patching ao vivo do núcleo. a funcionalidade "Atomic Replace" para a aplicação atômica de uma série de alterações a uma função. Essa funcionalidade permite a distribuição de patches resumidos que abrangem várias alterações ao mesmo tempo, em vez de um processo complexo de sobreposição de patches ao vivo em uma ordem estrita. Antes, cada nova alteração precisava depender do estado da função após a alteração anterior, mas agora é possível disseminar diversas alterações atreladas a um único estado inicial (ou seja, os desenvolvedores podem manter um patch resumido em relação ao núcleo base em vez de uma cadeia de patches interdependentes);
- obsoleta a suportar o formato de arquivos executáveis a.out e
o código para gerar arquivos core no formato a.out, que está em estado abandonado. O formato a.out não é mais utilizado em sistemas com Linux, e a geração de arquivos a.out já não é suportada pelas ferramentas modernas em configurações padrão para Linux. Além disso, o carregador para arquivos a.out pode ser implementado inteiramente no espaço do usuário; - No mecanismo de verificação de programas BPF, foi adicionada a capacidade de identificar e remover código não utilizado. Também foram incluídos patches no núcleo com suporte a spinlock para o subsistema BPF, que oferecem novas capacidades para gerenciar a execução paralela de programas BPF;
- Hardware
- No driver Nouveau suporte à gestão de memória heterogênea, proporcionando a capacidade de CPU e GPU acessarem áreas de memória sincronizadas compartilhadas. O sistema de memória virtual compartilhada (SVM, shared virtual memory) é implementado com base no subsistema HMM (Heterogeneous memory management), permitindo o uso de dispositivos com suas próprias unidades de gerenciamento de memória (MMU, memory management unit), que podem acessar a memória principal. Inclusive, com HMM é possível organizar um espaço de endereço conjunto entre GPU e CPU, no qual a GPU pode acessar a memória principal do processo. O suporte a SVM está atualmente habilitado somente para GPUs da família Pascal, embora também haja suporte para GPUs Volta e Turing. Além disso, no Nouveau novo ioctl para gerenciar a migração de áreas de memória de processos para a memória da GPU;
- No driver DRM da Intel para GPU Skylake e mais recente (gen9+) o modo fastboot é padrão, excluindo mudanças desnecessárias de modo durante a inicialização. identificadores de dispositivos com base nas microarquiteturas Coffelake e Ice Lake. Para os chips Coffelake suporte a GVT (). Para GPUs virtuais suporte a VFIO EDID. Para painéis LCD MIPI/DSI suporte a elementos ACPI/PMIC. novos modos de TV 1080p30/50/60;
- O driver amdgpu adicionou suporte para GPU Vega10/20 BACO. Foram implementados recursos de gerenciamento de energia para Vega 10/20 e tabelas de controle de ventilador para Vega 10. Novos identificadores PCI de dispositivos para GPU Picasso foram adicionados. interface de gestão de dependências planejadas para evitar deadlocks;
- driver DRM/KMS para aceleradores de operações de tela (Mali D71);
- Suporte adicionado para painéis de tela Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 e Kingdisplay kd097d04;
- Suporte adicionado para codecs de áudio Rockchip RK3328, Cirrus Logic CS4341 e CS35L36, MediaTek MT6358, Qualcomm WCD9335 e Ingenic JZ4725B, além da plataforma de áudio Mediatek MT8183;
- Suporte adicionado para controladores NAND Flash STMicroelectronics FMC2, Amlogic Meson;
- Suporte adicionado para aceleradores para sistemas de hardware Habana AI;
- Suporte adicionado para controladores Ethernet de gigabit NXP ENETC e interfaces sem fio MediaTek MT7603E (PCIe) e MT76x8.
Simultaneamente, o Fundo Latino-Americano de Software Livre
uma variante — , limpo de elementos de firmwares e drivers que contêm componentes ou trechos de código não livres, cuja área de aplicação é restrita pelo fabricante. No novo lançamento, o carregamento de blobs nos drivers mt7603 e goya foi desativado. O código de limpeza de blobs em drivers e subsistemas wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk e touchscreen_dmi foi atualizado. A limpeza de blobs no carregador de firmware lantiq xrx200 foi interrompida devido à sua remoção do núcleo.
Fonte: opennet.ru
