Relatório de desenvolvimento do FreeBSD para o segundo trimestre de 2019

Publicado Relatório de evolução do projeto FreeBSD de abril a junho de 2019. Entre as mudanças, podemos destacar:

  • Questões gerais e sistêmicas
    • A equipe principal decidiu estabelecer um grupo de trabalho para estudar a possibilidade de traduzir os textos fonte do sistema centralizado de controle de versões Subversion para o sistema descentralizado Git.
    • Foi realizado um teste de fuzzing no núcleo do FreeBSD utilizando o sistema syzkaller e uma série de erros identificados foi corrigida. Foi adicionada uma camada para teste de fuzzing em bibliotecas para compatibilidade com o ambiente de 32 bits em sistemas com núcleo de 64 bits. Foi implementada a possibilidade de executar o syzkaller em máquinas virtuais baseadas em bhyve. Na próxima etapa, está planejado expandir a cobertura de testes dos chamados de sistema, ativar o LLVM sanitizer para verificar o núcleo, usar netdump para salvar dumps de núcleo durante falhas em testes de fuzzing, entre outras.
    • Começou o trabalho de atualização da implementação do zlib no nível do núcleo. Para facilitar o acesso do núcleo ao código do 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 conflitos com zlib/crc.h. Foi realizada a limpeza de código obsoleto dependente do zlib e inflate. A seguir, está planejada a possibilidade de construir o núcleo simultaneamente com o zlib antigo e novo para a transição gradual para a nova versão das funções que utilizam compressão;
    • A infraestrutura de emulação do ambiente Linux (Linuxulator) foi atualizada. O suporte às ferramentas de depuração do Linux, como a utilidade strace, foi expandido. Um pacote linux-c7-strace foi adicionado aos ports, que pode ser usado para rastrear arquivos executáveis do Linux em vez das utilidades padrão truss e ktrace, que ainda não conseguem decodificar algumas bandeiras e estruturas específicas do Linux. Além disso, foi adicionado o pacote linux-ltp com arquivos executáveis do Linux Test Project e problemas de compatibilidade com arquivos executáveis compilados com novas versões do glibc foram resolvidos;
    • A implementação das operações de limpeza atrasada de ligações a páginas físicas de memória (delayed invalidation) no mecanismo pmap foi transferida para um algoritmo de processamento de fila que opera sem bloqueios, o que resolveu problemas de escalabilidade ao executar um grande número de operações de unmap em paralelo;
    • O mecanismo de bloqueio vnode foi alterado durante a execução de chamadas de sistema da família execve(), permitindo um aumento na eficiência ao executar execve() simultaneamente para o mesmo arquivo (por exemplo, ao realizar operações de montagem com paralelização do início do compilador);
  • Segurança
    • No hipervisor bhyve, a melhoria do suporte à migração ao vivo de ambientes convidados de um host para outro e à funcionalidade Save/Restore, que permite congelar o sistema convidado enquanto preserva o estado em um arquivo e, em seguida, retomar a execução, foi continuada.
    • Por meio do uso da biblioteca libvdsk, foi adicionada ao bhyve a compatibilidade com imagens de disco no formato QCOW2. É necessário instalar
      uma versão especialmente modificada do bhyve, que foi adaptada para utilizar manipuladores de operações de arquivos baseados na libvdsk. Durante o período de relatório, também foi trabalhado na libvdsk para simplificar a integração do suporte a novos formatos, melhorar a performance de leitura e gravação, e adicionar suporte a Copy-On-Write. Entre as tarefas restantes, destaca-se a integração da libvdsk no núcleo do bhyve;
    • Nos ports, foi adicionada um sistema de coleta de informações sobre o tráfego
      Maltrail, que permite criar armadilhas para solicitações de rede maliciosas (os IPs e domínios da lista negra são verificados) e enviar informações sobre a atividade detectada a um servidor centralizado para posterior bloqueio ou análise das tentativas de ataques;
    • Nos ports, foi adicionada uma plataforma para identificação de ataques, análise de logs e monitoramento da integridade de arquivos Wazuh (fork do Ossec com suporte para integração com ELK-Stack);
  • Subsistema de Rede
    • O driver ena foi atualizado com suporte para a segunda geração de adaptadores de rede ENAv2 (Elastic Network Adapter), usados na infraestrutura do Elastic Compute Cloud (EC2) para estabelecer comunicação entre nós EC2 a velocidades de até 25 Gb/s. O driver ena recebeu suporte para NETMAP.
    • No FreeBSD HEAD foi aceito um novo stack MMC/SD, baseado na estrutura CAM e que permite conectar dispositivos com a interface SDIO (Secure Digital I/O). Por exemplo, SDIO é utilizado em módulos WiFi e Bluetooth para muitas placas, como o Raspberry Pi 3. O novo stack também permite usar a interface CAM para enviar comandos SD de aplicativos no espaço do usuário, o que possibilita criar drivers de dispositivos que operam no nível do usuário. O desenvolvimento de drivers para chips sem fio da Broadcom, que operam em modo FullMAC (onde o chip executa uma espécie de seu próprio sistema operacional com implementações de sua própria pilha sem fio 802.11), começou.
    • Está em andamento a implementação do NFSv4.2 (RFC-7862) para FreeBSD. A nova versão do NFS adicionou suporte para as funções posix_fadvise, posix_fallocate, modos SEEKHOLE/SEEKDATA em lseek, operações de cópia local de partes de arquivos no servidor (sem transmissão ao cliente).

      Atualmente, para FreeBSD, já foi implementado o suporte básico para as operações LayoutError, IOAdvise, Allocate e Copy. Resta implementar a operação Seek, necessária para usar lseek(SEEKHOLE/SEEKDATA) com NFS. O suporte para NFSv4.2 está previsto para ser incluído no FreeBSD 13.

  • Sistemas de armazenamento e sistemas de arquivos
    • O projeto de reestruturação do driver do subsistema FUSE (File System in USErspace), que permite a criação de implementações de sistemas de arquivos no espaço do usuário, está se aproximando da conclusão. O driver fornecido inicialmente estava desatualizado e apresentava muitos erros. No âmbito do projeto de modernização do driver, foi implementado o suporte para o protocolo FUSE 7.23 (anteriormente suportava a versão 7.8, lançada há 11 anos), adicionado código para verificar permissões no lado do núcleo ('-o default_permissions'), chamadas VOP_MKNOD, VOP_BMAP e VOP_ADVLOCK foram adicionadas, a possibilidade de interrupção das operações FUSE foi garantida, suporte a canais sem nome e Unix sockets em fusefs foi adicionado, a utilização de kqueue para /dev/fuse foi possibilitada, a atualização dos parâmetros de montagem através de 'mount -u' foi permitida, suporte à exportação de fusefs via NFS foi implementado, o controle de RLIMIT_FSIZE foi realizado, as flags FOPEN_KEEP_CACHE e FUSE_ASYNC_READ foram adicionadas, significativas otimizações de desempenho foram feitas e a organização do cache foi melhorada.
    • Foi adicionada ao código de substituição de páginas da memória para a área de troca (swap pager) a suporte à operação BIO_DELETE, que permite usar o comando TRIM durante a exclusão de blocos em unidades SSD para aumentar sua vida útil.
  • Suporte a hardware
    • Continuou o trabalho na implementação do suporte para o SoC ARM64 Broadcom BCM5871X com processadores ARMv8 Cortex-A57, direcionados para uso em roteadores, gateways e armazenamento em rede. Durante o período de relatório, melhorou-se o suporte para barramentos internos e externos iProc PCIe, adicionou-se suporte para BNXT Ethernet e está em andamento o trabalho para ativar o criptógrafo integrado para acelerar o IPsec. A integração do código na ramificação HEAD é esperada para o segundo semestre;
    • Começou o trabalho de suporte para o SoC NXP LS1046A de 64 bits com processador ARMv8 Cortex-A72, com um motor integrado para aceleração de pacotes de rede, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 e USB 3.0. O suporte básico da plataforma (multi-usuário SMP) 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 do trabalho e a inclusão na ramificação HEAD são esperadas para o quarto trimestre de 2019.
    • Os drivers mlx5en e mlx5ib para adaptadores Ethernet e InfiniBand Mellanox ConnectX-4 [Lx], ConnectX-5 [Ex] e ConnectX-6 [Dx] foram atualizados. O suporte para adaptadores Mellanox Socket Direct (ConnectX-6) foi adicionado, permitindo atingir uma largura de banda de até 200Gb/s na linha PCIe Gen 3.0. Para chips multicore 'BlueField', suporte ao driver RShim foi adicionado. O pacote mstflint, com um conjunto de utilitários de diagnóstico para adaptadores Mellanox, foi incluído nos ports;
  • Aplicativos e sistema de ports
    • Os componentes da pilha gráfica foram atualizados. O driver drm.ko (Direct Rendering Manager) foi portado do núcleo Linux 5.0. Este driver é considerado experimental e foi adicionado ao repositório de ports como graphics/drm-devel-kmod. Como o driver utiliza a estrutura atualizada Linux KPI para compatibilidade com a API DRM do núcleo Linux, é necessário o FreeBSD CURRENT para funcionamento. Também foi portado do Linux o driver drm vboxvideo.ko para o GPU virtual do VirtualBox. O pacote Mesa foi atualizado para a versão 18.3.2 e migrado para o uso do LLVM do port devel/llvm80 em vez de devel/llvm60.
    • A árvore de ports do FreeBSD superou a marca de 37.000 ports, com o número de PRs não resolvidos mantendo-se em 2.146. Durante o período relatado, foram feitas 7.837 alterações por 172 desenvolvedores. Três novos participantes receberam os direitos de commit. Entre as atualizações significativas de versões nos ports 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. Todos os ports em Go foram convertidos para usar a flag 'USES=go'. Adicionada a flag 'USES=cabal' para o gerenciador de pacotes Cabal, utilizado para código em Haskell. O modo de proteção de pilha foi ativado. Por padrão, a versão Python 3.6 é proposta em vez da 2.7.
    • Preparado o lançamento da ferramenta nsysctl 1.0, que oferece uma alternativa ao /sbin/sysctl, utilizando libxo para a saída e fornecendo um conjunto ampliado de opções. O nsysctl pode ser utilizado para visualizar de forma clara o estado dos valores sysctl e apresentar informações sobre objetos de forma estruturada. A saída é possível nos formatos XML, JSON e HTML;

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster