Relatório de desenvolvimento do FreeBSD para o primeiro trimestre de 2020
publicado relatório sobre o desenvolvimento do projeto FreeBSD de janeiro a março de 2020. Entre as mudanças podemos notar:
Questões gerais e sistêmicas
Removido o conjunto de compiladores GCC da árvore de origem do FreeBSD-CURRENT, bem como os utilitários não utilizados gperf, gcov e gtc (devicetree compiler). Todas as plataformas que não suportam Clang passaram a usar ferramentas de construção externas instaladas a partir de portas. O sistema básico enviou uma versão desatualizada do GCC 4.2.1, e a integração de versões mais recentes não foi possível devido à transição do 4.2.2 para a licença GPLv3, que foi considerada inadequada para os componentes básicos do FreeBSD. As versões atuais do GCC, incluindo o GCC 9, ainda podem ser instaladas a partir de pacotes e ports.
A infraestrutura de emulação do ambiente Linux (Linuxulator) adicionou suporte para a chamada de sistema sendfile, modo TCP_CORK (requerido para nginx) e o sinalizador MAP_32BIT (resolve o problema de lançamento de pacotes com Mono do Ubuntu Bionic). Problemas com resolução de DNS ao usar glibc mais recente que 2.30 (por exemplo, do CentOS 8) foram resolvidos.
A infraestrutura de integração contínua fornece a capacidade de executar tarefas LTP (Linux Testing Project) executando Linuxulator para testar melhorias feitas no código para suportar Linux. Cerca de 400 testes falham e exigem correção (alguns erros são causados por falsos positivos, alguns exigem correções triviais, mas há outros que exigem adição de suporte para novas chamadas de sistema para correção). Foi feito trabalho para limpar o código do Linuxulator e simplificar a depuração. Patches com suporte para atributos estendidos e chamada de sistema fexecve foram preparados, mas ainda não revisados.
Continuam as reuniões do grupo de trabalho criado para realizar a migração dos códigos-fonte do sistema centralizado de controle de fontes Subversion para o sistema descentralizado Git. Um relatório com propostas para a migração está em processo de preparação.
В Rtld (vinculador de tempo de execução) modo de execução direta aprimorado (“/libexec/ld-elf.so.1 {caminho} {argumentos}”).
O projeto para testes fuzzing do kernel do FreeBSD usando o sistema syzkaller continua em desenvolvimento. Durante o período do relatório, foram eliminados problemas na pilha de rede e no código para trabalhar com tabelas de descritores de arquivos identificados usando syzkaller. Após o diagnóstico do erro, alterações foram adicionadas à pilha SCTP para facilitar a depuração. Regras foram adicionadas ao conjunto stress2 para identificar possíveis regressões. Adicionado suporte para testes fuzz de novas chamadas de sistema, incluindo copy_file_range(), __realpathat() e chamadas de subsistema Capsicum. O trabalho continua para cobrir a camada de emulação do Linux com testes fuzz. Analisamos e eliminamos erros observados nos últimos relatórios do Coverity Scan.
O sistema de integração contínua passou a executar todos os testes de ramificação principal apenas usando clang/lld. Ao testar o RISC-V, é garantida a formação de uma imagem de disco completa para a execução de testes no QEMU usando OpenSBI. Adicionadas novas tarefas para testar imagens e máquinas virtuais powerpc64 (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm).
Estão em andamento trabalhos para transferir o conjunto de testes Kyua das portas (devel/kyua) para o sistema base para resolver problemas (os pacotes são instalados muito lentamente) que surgem ao usar Kyua em novas arquiteturas, cujo desenvolvimento é realizado usando um emulador ou FPGA. A integração no sistema básico simplificará significativamente os testes de plataformas incorporadas e a interface com sistemas de integração contínua.
Foi lançado um projeto para otimizar o desempenho do driver de ponte de rede if_bridge, que utiliza um único mutex para bloquear dados internos, o que não permite atingir o desempenho desejado em sistemas com grande número de ambientes jail ou máquinas virtuais unidas em uma rede. Nesta fase, foram adicionados testes ao código para evitar que ocorram regressões durante a modernização do trabalho com bloqueios. A possibilidade de usar o ConcurrencyKit para paralelizar manipuladores de transferência de dados (bridge_input(), bridge_output(), bridge_forward(), ...) está sendo considerada.
Adicionada uma nova chamada de sistema sigfastblock para permitir que um thread especifique um bloco de memória para um manipulador de sinal rápido para melhorar o desempenho dos manipuladores de exceção.
O kernel adiciona suporte para instruções atômicas LSE (Large System Extension) suportadas por sistemas ARMv8.1. Estas instruções são necessárias para melhorar o desempenho ao executar em placas Cavium ThunderX2 e AWS Graviton 2. As alterações adicionadas detectam o suporte LSE e habilitam dinamicamente a implementação atômica com base nelas. Durante os testes, o uso do LSE permitiu reduzir em 15% o tempo do processador gasto na montagem do kernel.
A otimização do desempenho foi realizada e a funcionalidade do kit de ferramentas foi ampliada para arquivos executáveis no formato ELF.
Adicionado suporte para armazenamento em cache de informações de depuração DWARF, resolvido problemas nos utilitários elfcopy/objcopy, adicionado processamento DW_AT_ranges,
readelf implementa a capacidade de decodificar os sinalizadores PROTMAX_DISABLE, STKGAP_DISABLE e WXNEEDED, bem como Xen e GNU Build-ID.
segurança
Para melhorar o desempenho do FreeBSD em ambientes de nuvem Azure, estão em andamento trabalhos para fornecer suporte ao mecanismo HyperV Socket, que permite o uso de uma interface de soquete para interação entre o sistema convidado e o ambiente host sem configurar uma rede.
Estão em andamento trabalhos para fornecer compilações repetíveis do FreeBSD, tornando possível garantir que os arquivos executáveis dos componentes do sistema sejam compilados exatamente a partir dos códigos-fonte declarados e não contenham alterações estranhas.
A capacidade de controlar a inclusão de mecanismos de proteção adicionais (ASLR, PROT_MAX, stack gap, mapeamento W+X) no nível de processos individuais foi adicionada ao utilitário elfctl
Sistemas de armazenamento e arquivos
Estão em andamento trabalhos para implementar a capacidade do NFS operar em um canal de comunicação criptografado baseado em TLS 1.3, em vez de usar Kerberos (modo sec=krb5p), que é limitado a criptografar apenas mensagens RPC e é implementado apenas em software. A nova implementação usa a pilha TLS fornecida pelo kernel para permitir a aceleração de hardware. O código NFS sobre TLS está quase pronto para teste, mas ainda requer trabalho para suportar certificados de cliente assinados e adaptar a pilha TLS do kernel para enviar dados NFS (os patches para recebimento já estão prontos).
Suporte de hardware
Estão em andamento trabalhos para adicionar suporte para CPU Hygon x86 chinesa baseada em tecnologias AMD;
Como parte do CheriBSD, um fork do FreeBSD para pesquisa de arquitetura de processador CHERI (Instruções RISC aprimoradas por hardware de capacidade), continua a ser implementado suporte para o processador ARM Morello, que suportará o sistema de controle de acesso à memória CHERI baseado no modelo de segurança do projeto Capsicum. Chip Morello estão planejando lançamento em 2021. O trabalho está atualmente focado em adicionar suporte para a plataforma Arm Neoverse N1 que alimenta Morello. Uma porta inicial do CheriBSD para a arquitetura RISC-V foi apresentada. O desenvolvimento do CheriBSD continua para o protótipo de referência CHERI baseado na arquitetura MIPS64.
A portabilidade do FreeBSD continua para o SoC NXP LS64A de 1046 bits baseado no processador ARMv8 Cortex-A72 com um mecanismo integrado de aceleração de processamento de pacotes de rede, Ethernet de 10 Gb, PCIe 3.0, SATA 3.0 e USB 3.0. Atualmente, os drivers QorIQ e LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC, QorIQ LS10xx SDHCI estão sendo preparados para transferência para a composição principal do FreeBSD.
O driver ena foi atualizado para a versão 2.1.1 com suporte para a segunda geração de adaptadores de rede ENAv2 (Elastic Network Adapter) usados na infraestrutura Elastic Compute Cloud (EC2) para organizar a comunicação entre nós EC2 em velocidades de até 25 Gb/ S. Uma atualização para ENA 2.2.0 está sendo preparada.
As melhorias na porta FreeBSD para a plataforma powerpc64 continuam. O foco está em fornecer desempenho de qualidade em sistemas com processadores IBM POWER8 e POWER9. Durante o período do relatório, o FreeBSD-CURRENT foi transferido para usar o compilador LLVM/Clang 10.0 e o vinculador lld em vez do GCC. Por padrão, os sistemas powerpc64 usam a ABI ELFv2 e o suporte para a ABI ELFv1 foi descontinuado. O FreeBSD-STABLE ainda possui o gcc 4.2.1. Problemas com drivers virtio, aacraid e ixl foram resolvidos. Em sistemas powerpc64 é possível executar QEMU sem suporte para Huge Pages.
O trabalho continua para implementar suporte para a arquitetura RISC-V. Na sua forma atual, o FreeBSD já inicializa com sucesso na placa SiFive Hifive Unleashed, para a qual os drivers foram preparados
UART, SPI e PRCI, suporta firmware OpenSBI e SBI 0.2. Durante o período do relatório, o trabalho centrou-se na migração do GCC para clang e lld.
Aplicações e sistema portuário
A coleção de portas do FreeBSD ultrapassou o limite de 39 mil portas, o número de PRs não fechados ultrapassa ligeiramente 2400, dos quais 640 PRs ainda não foram classificados. Durante o período do relatório, 8146 alterações foram feitas por 173 desenvolvedores. Quatro novos participantes receberam direitos de committer (Loïc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore). Adicionado sinalizador USES=qca e removido sinalizador USES=zope (devido à incompatibilidade com Python 3). Estão em andamento trabalhos para remover o Python 2.7 da árvore de ports - todos os ports baseados em Python 2 devem ser portados para Python 3 ou serão removidos. O gerenciador de pacotes pkg foi atualizado para a versão 1.13.2.
Componentes de pilha gráfica atualizados e portas relacionadas ao xorg.
O servidor X.org foi atualizado para a versão 1.20.8 (anteriormente enviada na ramificação 1.18), o que permitiu ao FreeBSD usar como padrão o backend udev/evdev para lidar com dispositivos de entrada. O pacote Mesa foi alterado para usar a extensão DRI3 em vez de DRI2 por padrão. O trabalho está em andamento para manter drivers gráficos, pilha de dispositivos de entrada e componentes drm-kmod (uma porta que permite a operação de módulos DRM amdgpu, i915 e radeon, usando a estrutura linuxkpi para compatibilidade com o Direct Rendering Manager do kernel Linux) até data.
A área de trabalho KDE Plasma, KDE Frameworks, aplicativos KDE e Qt são mantidos atualizados e atualizados com as versões mais recentes. Um novo aplicativo kstars (star atlas) foi adicionado aos ports.
Trabalho foi feito para eliminar alterações regressivas no gerenciador de janelas xfwm4 que apareceram após a atualização do Xfce para a versão 4.14 (por exemplo, artefatos apareceram ao decorar janelas).
A porta Wine foi atualizada para lançar o Wine 5.0 (anteriormente era oferecido o 4.0.3).
A partir da versão 1.14, o compilador da linguagem Go adicionou suporte oficial para a arquitetura ARM64 para FreeBSD 12.0.
O OpenSSH no sistema básico foi atualizado para a versão 7.9p1.
A biblioteca sysctlmibinfo2 foi implementada e colocada em portas (devel/libsysctlmibinfo2), fornecendo uma API para acessar o MIB sysctl e traduzir nomes sysctl em identificadores de objeto (OIDs).
Uma atualização de distribuição foi gerada NomadBSD 1.3.1, que é uma edição do FreeBSD adaptada para uso como um desktop portátil inicializável a partir de uma unidade USB. O ambiente gráfico é baseado em um gerenciador de janelas Caixa aberta. Usado para montar unidades DSBMD (montagem CD9660, FAT, HFS+, NTFS, Ext2/3/4 é suportada), para configurar uma rede sem fio - wifimgr, e para controlar o volume - DSBMixer.
Começado trabalho sobre como escrever documentação completa para o gerente do ambiente de prisão lata. O pote 0.11.0 está sendo preparado para lançamento, que incluirá ferramentas para gerenciamento da pilha de rede.