Relatório de progresso do segundo trimestre de 2019 do FreeBSD

publicado relatório sobre o desenvolvimento do projeto FreeBSD de abril a junho de 2019. Entre as mudanças podemos notar:

  • Questões gerais e sistêmicas
    • A equipe principal decidiu estabelecer um grupo de trabalho para explorar a possibilidade de mover o código-fonte do sistema centralizado de controle de origem Subversion para o sistema Git descentralizado.
    • Conduziu testes fuzz do kernel do FreeBSD usando o sistema syzkaller e vários erros identificados foram corrigidos. Adicionada uma camada para testes de difusão de bibliotecas para compatibilidade com um ambiente de 32 bits em sistemas com kernel de 64 bits. A capacidade de executar o syzkaller em máquinas virtuais baseadas em bhyve foi implementada. Na próxima etapa, está planejado expandir a cobertura dos testes de chamadas do sistema, usar o sanitizador LLVM para verificar o kernel, usar o netdump para salvar dumps do kernel durante travamentos durante os testes de difusão, etc.
    • O trabalho começou na atualização da implementação do zlib no nível do kernel. Para acesso do kernel ao código zlib, o diretório contrib/zlib foi renomeado para sys/contrib/zlib, e o arquivo de cabeçalho crc.h também foi renomeado para evitar conflito com zlib/crc.h. Limpou o código legado que dependia de zlib e inflate. Em seguida, está planejado fornecer a capacidade de construir o kernel simultaneamente com o antigo e o novo zlib para a transferência gradual para a nova versão de funções que usam compactação;
    • A infraestrutura de emulação do ambiente Linux (Linuxulator) foi atualizada. Maior suporte para ferramentas de depuração do Linux, como o utilitário strace. O pacote linux-c7-strace foi adicionado às portas, que pode ser usado para rastrear arquivos executáveis ​​​​do Linux em vez dos utilitários truss e ktrace padrão, que ainda não podem decodificar alguns sinalizadores e estruturas específicas do Linux. Além disso, o pacote linux-ltp com executáveis ​​do Linux Test Project foi adicionado e problemas de compatibilidade com executáveis ​​vinculados a novas versões do glibc foram resolvidos;
    • A implementação de operações de invalidação atrasada no mecanismo pmap foi transferida para a utilização de um algoritmo de processamento de filas que funciona sem bloqueios, o que permitiu resolver problemas de escalabilidade ao realizar um grande número de operações paralelas de desmapeamento;
    • Foi alterado o mecanismo de bloqueio do vnode durante a execução de chamadas de sistema da família execve(), o que possibilitou obter maior eficiência ao executar simultaneamente execve() para o mesmo arquivo (por exemplo, ao realizar operações de montagem com paralelização do lançamento do compilador);
  • segurança
    • O hipervisor bhyve continua melhorando o suporte para migração ao vivo de ambientes convidados de um host para outro e a funcionalidade Salvar/Restaurar, que permite congelar o sistema convidado, salvando o estado em um arquivo e, em seguida, retomar a execução.
    • Através do uso da biblioteca libvdsk, a bhyve adicionou suporte para imagens de disco no formato QCOW2. Requer instalação para funcionar
      especialmente modificado versão do bhyve, que foi convertida para usar manipuladores de operação de arquivo baseados em libvdsk. Durante o período do relatório, a libvdsk também realizou trabalhos para simplificar a integração do suporte para novos formatos, melhorar o desempenho de leitura e gravação e adicionar suporte para Copy-On-Write. Das tarefas restantes, destaca-se a integração do libvdsk na estrutura principal do bhyve;

    • Um sistema de coleta de informações de tráfego foi adicionado aos portos
      Maltrail, que permite criar armadilhas para solicitações de rede maliciosas (IPs e domínios de listas negras são verificados) e enviar informações sobre atividades detectadas para um servidor centralizado para posterior bloqueio ou análise de tentativas de ataque;

    • Plataformas foram adicionadas às portas para detecção de ataques, análise de logs e monitoramento de integridade de arquivos wazuh (fork do Ossec com suporte para integração com Pilha ELK);
  • subsistema de rede
    • O driver ena foi atualizado para oferecer suporte à 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. O suporte NETMAP foi adicionado ao driver ena.
    • O FreeBSD HEAD adota uma nova pilha MMC/SD, baseada na estrutura CAM e permitindo conectar dispositivos com uma interface SDIO (Secure Digital I/O). Por exemplo, SDIO é usado em módulos WiFi e Bluetooth para muitas placas, como o Raspberry Pi 3. A nova pilha também permite que a interface CAM seja usada para enviar comandos SD de aplicativos no espaço do usuário, o que possibilita a criação de dispositivos drivers que operam no nível do usuário. O trabalho começou na criação de drivers para chips sem fio Broadcom operando no modo FullMAC (no lado do chip ele executa uma aparência de seu próprio sistema operacional com implementações de sua pilha sem fio 802.11);
    • O trabalho está em andamento para implementar o NFSv4.2 (RFC-7862) para FreeBSD. A nova versão do NFS adiciona suporte às funções posix_fadvise, posix_fallocate, modos SEEKHOLE/SEEKDATA em lseek e operação de cópia local de partes de um arquivo no servidor (sem transferência para o cliente).

      O FreeBSD atualmente fornece suporte básico para as operações LayoutError, IOAdvise, Allocate e Copy. Tudo o que resta é implementar a operação Seek necessária para usar lseek(SEEKHOLE/SEEKDATA) com NFS. O suporte ao NFSv4.2 está planejado para o FreeBSD 13;

  • Sistemas de armazenamento e arquivos
    • O projeto de retrabalho do driver do subsistema FUSE (File system in USErspace), que permite criar implementações de sistemas de arquivos no espaço do usuário, está em fase de conclusão. O driver fornecido originalmente está desatualizado e contém muitos bugs. Como parte do projeto de modernização do driver, foi implementado suporte para o protocolo FUSE 7.23 (a versão anterior 7.8, lançada há 11 anos era suportada), foi adicionado código para verificar os direitos de acesso no lado do kernel (“-o default_permissions”), chamadas para VOP_MKNOD, VOP_BMAP e VOP_ADVLOCK foram adicionados, a capacidade de interromper operações FUSE, adicionou suporte para pipes não nomeados e soquetes unix em fusefs, a capacidade de usar kqueue para /dev/fuse, permitiu atualizar parâmetros de montagem via “mount -u”, adicionou suporte para exportar fusefs via NFS, implementou a contabilidade RLIMIT_FSIZE, adicionou flags FOPEN_KEEP_CACHE e FUSE_ASYNC_READ, otimizações significativas de desempenho foram feitas e a organização do cache foi melhorada;
    • O suporte para a operação BIO_DELETE foi adicionado ao código do pager de troca, que permite usar o comando TRIM ao remover blocos de unidades SSD para aumentar sua vida útil.
  • Suporte de hardware
    • Continuam os trabalhos de implementação do suporte ao SoC ARM64 Broadcom BCM5871X com processadores ARMv8 Cortex-A57, destinados ao uso em roteadores, gateways e armazenamento de rede. Durante o período do relatório, o suporte para barramentos PCIe iProc internos e externos foi melhorado, o suporte para Ethernet BNXT foi adicionado e o trabalho está em andamento para usar o mecanismo de criptografia integrado para acelerar o IPsec. A integração do código na filial HEAD está prevista para o segundo semestre;
    • Começaram os trabalhos de suporte para o SoC NXP LS64A de 1046 bits baseado no processador ARMv8 Cortex-A72 com 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. O suporte para a plataforma base (SMP multiusuário) e SATA 3.0 já foi implementado. O suporte para USB 3.0, SD/MMC e I2C está em desenvolvimento. Os planos incluem suporte para Ethernet, GPIO e QSPI. A conclusão dos trabalhos e inclusão na sucursal HEAD está prevista para o 4º trimestre de 2019.
    • Drivers mlx5en e mlx5ib atualizados para adaptadores Mellanox ConnectX-4 [Lx], ConnectX-5 [Ex] e ConnectX-6 [Dx] Ethernet e InfiniBand. Adicionado suporte para adaptadores Mellanox Socket Direct (ConnectX-6), permitindo taxa de transferência de até 200 Gb/s no barramento PCIe Gen 3.0. Para chips BlueField multi-core, foi adicionado suporte para o driver RShim. O pacote mstflint com um conjunto de utilitários de diagnóstico para adaptadores Mellanox foi adicionado às portas;
  • Aplicações e sistema portuário
    • Os componentes da pilha gráfica foram atualizados. O driver drm.ko (Direct Rendering Manager) foi portado do kernel Linux 5.0. Este driver é considerado experimental e foi adicionado à árvore de ports como graphics/drm-devel-kmod. Como o driver usa a estrutura KPI do Linux atualizada para ser compatível com a API DRM do kernel Linux, o FreeBSD CURRENT é necessário para ser executado. O driver drm vboxvideo.ko para a GPU virtual VirtualBox também foi portado do Linux. O pacote Mesa foi atualizado para a versão 18.3.2 e mudou para usar LLVM da porta devel/llvm80 em vez de devel/llvm60.
    • A árvore de portas do FreeBSD ultrapassou 37000 portas, o número de PRs não fechados permanece em 2146. Durante o período do relatório, 7837 alterações foram feitas por 172 desenvolvedores. Três novos participantes receberam direitos de committer. Entre as atualizações de versão significativas nas portas estão: MySQL 5.7, Python 3.6, Ruby 2.5, Samba 4.8, Julia 1.0, Firefox 68.0, Chromium 75.0.3770.100. Todas as portas Go foram convertidas para usar o sinalizador "USES=go". Adicionado sinalizador "USES=cabal" ao gerenciador de pacotes Cabal usado para código Haskell. O modo de proteção de pilha estrita está ativado. A versão padrão do Python é 3.6 em vez de 2.7.
    • A versão do utilitário foi preparada nsysctl1.0, que oferece um análogo de /sbin/sysctl que usa libxo para saída e fornecendo um conjunto expandido de opções. Nsysctl pode ser usado para monitorar visualmente o estado dos valores do sysctl e apresentar informações sobre objetos de forma estruturada. A saída nos formatos XML, JSON e HTML é possível;

Fonte: opennet.ru

Adicionar um comentário