2020年第一季度FreeBSD发展报告

发表 2020年XNUMX月至XNUMX月FreeBSD项目发展报告。在这些变化中我们可以注意到:

  • 一般性和系统性问题
    • 从 FreeBSD-CURRENT 源代码树中删除了 GCC 编译器集,以及未使用的 gperf、gcov 和 gtc(devicetree 编译器)实用程序。所有不支持 Clang 的平台都已切换为使用从 ports 安装的外部构建工具。基础系统附带了过时的 GCC 4.2.1 版本,由于 4.2.2 过渡到 GPLv3 许可证,因此无法集成较新的版本,这被认为不适合 FreeBSD 基础组件。 GCC 的当前版本(包括 GCC 9)仍然可以从软件包和端口安装。
    • Linux 环境模拟基础设施 (Linuxulator) 添加了对 sendfile 系统调用、TCP_CORK 模式(nginx 所需)和 MAP_32BIT 标志(解决了从 Ubuntu Bionic 中使用 Mono 启动包的问题)的支持。使用高于 2.30 的 glibc(例如 CentOS 8)时的 DNS 解析问题已得到解决。
      持续集成基础架构提供了运行 Linuxulator 的 LTP(Linux 测试项目)作业的能力,以测试对代码所做的改进以支持 Linux。大约 400 个测试失败并需要修复(有些错误是由误报引起的,有些需要简单修复,但还有其他错误需要添加对新系统调用的支持才能修复)。我们已经完成了清理 Linuxulator 代码并简化调试的工作。支持扩展属性和 fexecve 系统调用的补丁已经准备好,但尚未审核。

    • 为将源代码从集中式源控制系统 Subversion 迁移到分散式系统 Git 而创建的工作组会议仍在继续。一份包含迁移建议的报告正在准备中。
    • В RTLD (运行时链接器)改进了直接执行模式(“/libexec/ld-elf.so.1 {path} {arguments}”)。
    • 使用 syzkaller 系统对 FreeBSD 内核进行模糊测试的项目仍在继续开发。在报告期间,网络堆栈和使用 syzkaller 识别的文件描述符表的代码中的问题已得到解决。错误诊断后,SCTP 堆栈中添加了更改,以使调试更加容易。规则已添加到stress2集中,以识别可能的回归。添加了对新系统调用模糊测试的支持,包括 copy_file_range()、__realpathat() 和 Capsicum 子系统调用。通过模糊测试覆盖 Linux 模拟层的工作仍在继续。我们分析并消除了最新 Coverity Scan 报告中指出的错误。
    • 持续集成系统已切换为仅使用 clang/lld 执行所有头分支测试。在测试 RISC-V 时,可确保形成完整的磁盘映像,以便使用 OpenSBI 在 QEMU 中运行测试。添加了用于测试映像和 powerpc64 虚拟机的新任务(FreeBSD-head-powerpc64-images、FreeBSD-head-powerpc64-testvm)。
    • 目前正在进行将 Kyua 测试套件从端口(devel/kyua)转移到基础系统的工作,以解决在新架构上使用 Kyua 时出现的问题(软件包安装速度非常慢),其开发是使用模拟器或FPGA。集成到基础系统中将显着简化嵌入式平台的测试以及与持续集成系统的接口。
    • 已启动一个项目来优化网桥驱动程序的性能 if_bridge,它使用单个互斥锁来锁定内部数据,这不允许在具有大量监狱环境或统一在一个网络中的虚拟机的系统上实现所需的性能。在此阶段,已将测试添加到代码中,以防止在使用锁的现代化过程中发生回归。正在考虑使用 ConcurrencyKit 并行化数据传输处理程序(bridge_input()、bridge_output()、bridge_forward()...)的可能性。
    • 添加了新的 sigfastblock 系统调用,允许线程为快速信号处理程序指定内存块,以提高异常处理程序的性能。
    • 内核添加了对 ARMv8.1 系统支持的 LSE(大型系统扩展)原子指令的支持。在 Cavium ThunderX2 和 AWS Graviton 2 板上运行时需要这些指令来提高性能。添加的更改会检测 LSE 支持并基于它们动态启用原子实现。在测试过程中,LSE 的使用使得组装内核所花费的处理器时间减少了 15%。
    • 针对 ELF 格式的可执行文件进行了性能优化,并扩展了工具包的功能。
      添加了对缓存 DWARF 调试信息的支持,解决了 elfcopy/objcopy 实用程序中的问题,添加了 DW_AT_ranges 处理,
      readelf 实现了解码 PROTMAX_DISABLE、STKGAP_DISABLE 和 WXNEEDED 标志以及 Xen 和 GNU Build-ID 的功能。

  • 安全
    • 为了提高 FreeBSD 在 Azure 云环境中的性能,正在努力提供对 HyperV Socket 机制的支持,该机制允许使用套接字接口在来宾系统和主机环境之间进行交互,而无需设置网络。
    • 目前正在努力提供 FreeBSD 的可重复构建,从而确保系统组件的可执行文件完全根据声明的源代码编译,并且不包含无关的更改。
    • elfctl 实用程序中添加了在各个进程级别控制附加保护机制(ASLR、PROT_MAX、堆栈间隙、W+X 映射)包含的能力
  • 存储和文件系统
    • 目前正在努力实现 NFS 在基于 TLS 1.3 的加密通信通道上运行的能力,而不是使用 Kerberos(sec=krb5p 模式),后者仅限于加密 RPC 消息,并且仅在软件中实现。新的实现使用内核提供的 TLS 堆栈来启用硬件加速。 NFS over TLS 代码几乎已准备好进行测试,但仍需要支持签名的客户端证书并调整内核 TLS 堆栈以发送 NFS 数据(用于接收的补丁已准备就绪)。
  • 硬件支持
    • 正在努力增加对基于 AMD 技术的中国 x86 CPU Hygon 的支持;
    • 作为 CheriBSD 的一部分,CheriBSD 是 FreeBSD 的一个分支,用于研究处理器架构 切里 (能力硬件增强RISC指令),继续实现对ARM Morello处理器的支持,这将支持基于Capsicum项目安全模型的CHERI内存访问控制系统。莫雷洛芯片 正在计划中 2021 年发布。目前的工作重点是增加对为 Morello 提供支持的 Arm Neoverse N1 平台的支持。针对 RISC-V 架构的 CheriBSD 的初始移植已经推出。 CheriBSD 继续开发基于 MIPS64 架构的 CHERI 参考原型。
    • FreeBSD 移植继续针对基于 ARMv64 Cortex-A1046 处理器的 8 位 SoC NXP LS72A,具有集成网络数据包处理加速引擎、10 Gb 以太网、PCIe 3.0、SATA 3.0 和 USB 3.0。目前,驱动程序 QorIQ 和 LS1046A、GPIO、QorIQ LS10xx AHCI、VF610 I2C、Epson RX-8803 RTC、QorIQ LS10xx SDHCI 正在准备转移到主要 FreeBSD 组件。
    • ena 驱动程序已更新至版本 2.1.1,支持弹性计算云 (EC2) 基础设施中使用的第二代 ENAv2(弹性网络适配器)网络适配器,以高达 2 Gb/秒的速度组织 EC25 节点之间的通信。 s。 ENA 2.2.0 的更新正在准备中。
    • 针对 powerpc64 平台的 FreeBSD 端口的改进仍在继续。重点是为采用 IBM POWER8 和 POWER9 处理器的系统提供优质性能。报告期内,FreeBSD-CURRENT 已转为使用 LLVM/Clang 10.0 编译器和 lld 链接器,而不是 GCC。默认情况下,powerpc64 系统使用 ELFv2 ABI,并且已停止支持 ELFv1 ABI。 FreeBSD-STABLE 仍然有 gcc 4.2.1。 virtio、aacraid 和 ixl 驱动程序的问题已得到解决。在 powerpc64 系统上,可以在没有大页面支持的情况下运行 QEMU。
    • 为 RISC-V 架构提供支持的工作仍在继续。以目前的形式,FreeBSD 已经在 SiFive Hi Five Unleashed 板上成功启动,并已准备好驱动程序
      UART、SPI 和 PRCI,支持 OpenSBI 和 SBI 0.2 固件。报告期内,工作重点是从 GCC 迁移到 clang 和 lld。

  • 应用程序和端口系统
    • FreeBSD 端口集合已突破 39 个端口的门槛,未关闭的 PR 数量略超过 2400 个,其中 640 个 PR 尚未排序。报告期内,8146家开发商进行了173次变更。四名新参与者获得了提交者权利(Loïc Bartoletti、Mikael Urankar、Kyle Evans、Lorenzo Salvadore)。添加了 USES=qca 标志并删除了 USES=zope 标志(由于与 Python 3 不兼容)。从 ports 树中删除 Python 2.7 的工作正在进行中 - 所有基于 Python 2 的 ports 都必须移植到 Python 3,否则将被删除。 pkg 包管理器已更新至版本 1.13.2。
    • 更新了图形堆栈组件和 xorg 相关端口。
      X.org 服务器已更新至版本 1.20.8(之前在 1.18 分支上发布),这使得 FreeBSD 默认使用 udev/evdev 后端来处理输入设备。 Mesa 包已切换为默认使用 DRI3 扩展而不是 DRI2。正在进行的工作是保留图形驱动程序、输入设备堆栈和 drm-kmod 组件(支持 amdgpu、i915 和 radeon DRM 模块操作的端口,使用 linuxkpi 框架与 Linux 内核的直接渲染管理器兼容)最新。

    • KDE Plasma 桌面、KDE ​​框架、KDE ​​应用程序和 Qt 保持最新状态并更新到最新版本。新的应用程序 kstars(星图集)已添加到端口中。
    • 已完成工作以消除将 Xfce 更新到版本 4 后出现的 xfwm4.14 窗口管理器中出现的回归性更改(例如,装饰窗口时出现的工件)。
    • Wine 端口已更新,发布了 Wine 5.0(之前提供了 4.0.3)。
    • 从 1.14 版本开始,Go 语言编译器为 FreeBSD 64 添加了对 ARM12.0 架构的官方支持。
    • 基础系统上的 OpenSSH 已更新至版本 7.9p1。
    • sysctlmibinfo2 库已实现并放置在端口 (devel/libsysctlmibinfo2) 中,提供用于访问 sysctl MIB 并将 sysctl 名称转换为对象标识符 (OID) 的 API。
    • 已生成分发更新 游牧BSD 1.3.1,它是 FreeBSD 的一个版本,适合用作可从 USB 驱动器启动的便携式桌面。 图形环境基于窗口管理器 开箱。 用于安装驱动器 弹道导弹防御系统 (支持挂载CD9660、FAT、HFS+、NTFS、Ext2/3/4),配置无线网络 - 无线管理器,并控制音量 - DSBM混音器.
    • 开始 工作 为监狱环境管理器编写完整的文档 。 Pot 0.11.0 正在准备发布,其中将包括用于管理网络堆栈的工具。

来源: opennet.ru

添加评论