FreeBSD 2019 年第 XNUMX 季度进度报告

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

  • 一般性和系统性问题
    • Core 团队决定成立一个工作组来探索将源代码从集中式 Subversion 源控制系统转移到分散式 Git 系统的可能性。
    • 使用该系统对FreeBSD内核进行模糊测试 塞兹卡勒 并纠正了一些已发现的错误。 添加了一个用于对库进行模糊测试的层,以确保与具有 32 位内核的系统上的 64 位环境的兼容性。 已实现在基于 bhyve 的虚拟机中运行 syzkaller 的能力。 下一阶段计划扩大系统调用测试的覆盖范围,使用LLVM sanitizer检查内核,使用netdump在模糊测试期间崩溃时保存内核转储等。
    • 在内核级别更新 zlib 实现的工作已经开始。 为了内核访问zlib代码,contrib/zlib目录被重命名为sys/contrib/zlib,crc.h头文件也被重命名,以避免与zlib/crc.h冲突。 清理了依赖 zlib 和 inflate 的遗留代码。 接下来,计划提供新旧zlib同时构建内核的能力,以便逐步转移到使用压缩的新版本功能;
    • Linux 环境模拟基础设施 (Linuxulator) 已更新。 增加了对 Linux 调试工具(例如 strace 实用程序)的支持。 linux-c7-strace 软件包已添加到端口中,可用于跟踪 Linux 可执行文件,而不是标准 truss 和 ktrace 实用程序,后者尚无法解码某些 Linux 特定的标志和结构。 此外,还添加了带有 Linux 测试项目可执行文件的 linux-ltp 软件包,并解决了与新版本 glibc 链接的可执行文件的兼容性问题;
    • pmap机制中延迟失效操作的实现已转移到使用无锁工作的队列处理算法,这使得在执行大量并行unmap操作时解决可扩展性问题成为可能;
    • 更改了 execve() 系列系统调用执行期间阻塞 vnode 的机制,这使得在对同一文件同时执行 execve() 时(例如,并行执行汇编操作时)可以提高效率编译器启动);
  • 安全
    • bhyve 虚拟机管理程序继续改进对来宾环境从一台主机到另一台主机的实时迁移以及保存/恢复功能的支持,该功能允许您冻结来宾系统,将状态保存到文件,然后恢复执行。
    • 通过使用 libvdsk 库,bhyve 添加了对 QCOW2 格式磁盘映像的支持。 需要安装才能工作
      特别修改的 bhyve 版本,已转换为使用基于 libvdsk 的文件操作处理程序。 报告期内,libvdsk还开展了简化新格式支持集成、提高读写性能、增加对Copy-On-Write的支持等工作。 其余任务中,值得注意的是将 libvdsk 集成到 bhyve 主要结构中;

    • 港口增加了交通信息收集系统
      残迹,它允许您为恶意网络请求创建陷阱(检查黑名单中的 IP 和域),并将有关检测到的活动的信息发送到集中式服务器,以便随后阻止或分析攻击尝试;

    • 端口中添加了用于检测攻击、分析日志和监控文件完整性的平台 瓦祖 (Ossec 的分支,支持与 ELK-Stack);
  • 网络子系统
    • ena 驱动程序已更新,支持弹性计算云 (EC2) 基础设施中使用的第二代 ENAv2(弹性网络适配器)网络适配器,以高达 2 Gb/s 的速度组织 EC25 节点之间的通信。 NETMAP 支持已添加到 ena 驱动程序中。
    • FreeBSD HEAD 采用新的 MMC/SD 堆栈,基于 CAM 框架,允许您使用 SDIO(安全数字 I/O)接口连接设备。 例如,SDIO 用于许多板的 WiFi 和蓝牙模块,例如 Raspberry Pi 3。新堆栈还允许使用 CAM 接口从用户空间的应用程序发送 SD 命令,从而可以创建设备在用户级别运行的驱动程序。 为在 FullMAC 模式下运行的 Broadcom 无线芯片创建驱动程序的工作已经开始(在芯片方面,它运行类似自己的操作系统,并实现其 802.11 无线堆栈);
    • 为 FreeBSD 实施 NFSv4.2 (RFC-7862) 的工作正在进行中。 新版本的 NFS 添加了对 posix_fadvise、posix_fallocate 函数、lseek 中的 SEEKHOLE/SEEKDATA 模式的支持,以及在服务器上本地复制部分文件的操作(无需传输到客户端)。

      FreeBSD 目前提供对 LayoutError、IOAdvise、Allocate 和 Copy 操作的基本支持。 剩下的工作就是实现将 lseek(SEEKHOLE/SEEKDATA) 与 NFS 结合使用所需的 Seek 操作。 FreeBSD 4.2 计划支持 NFSv13;

  • 存储和文件系统
    • 重新设计 FUSE(用户空间中的文件系统)子系统驱动程序的项目已接近完成,该子系统允许在用户空间中创建文件系统的实现。 最初提供的驱动程序已过时并且包含许多错误。 作为驱动程序现代化项目的一部分,实现了对 FUSE 7.23 协议的支持(之前支持 7.8 年前发布的 11 版本),添加了代码来检查内核端的访问权限(“-o default_permissions”),调用添加了 VOP_MKNOD、VOP_BMAP 和 VOP_ADVLOCK,中断 FUSE 操作的能力,添加了对fusefs中无名管道和unix套接字的支持,将 kqueue 用于 /dev/fuse 的能力,允许通过“mount -u”更新挂载参数,添加了支持对于通过 NFS 导出fusef,实施了 RLIMIT_FSIZE 记账,添加了 FOPEN_KEEP_CACHE 标志和 FUSE_ASYNC_READ,进行了重大性能优化并改进了缓存组织;
    • 交换分页器代码中添加了对 BIO_DELETE 操作的支持,这允许您在从 SSD 驱动器删除块时使用 TRIM 命令以延长其使用寿命。
  • 硬件支持
    • 我们正在继续努力实现对采用 ARMv64 Cortex-A5871 处理器的 ARM8 SoC Broadcom BCM57X 的支持,旨在用于路由器、网关和网络存储。 报告期内,改进了对内部和外部iProc PCIe总线的支持,增加了对BNXT以太网的支持,并正在开展使用内置加密引擎加速IPsec的工作。 预计下半年将代码集成到 HEAD 分支;
    • 支持基于 ARMv64 Cortex-A1046 处理器的 8 位 SoC NXP LS72A 的工作已经开始,该处理器具有集成网络数据包处理加速引擎、10 Gb 以太网、PCIe 3.0、SATA 3.0 和 USB 3.0。 对基础平台(多用户 SMP)和 SATA 3.0 的支持已经实现。 对 USB 3.0、SD/MMC 和 I2C 的支持正在开发中。 该计划包括对以太网、GPIO 和 QSPI 的支持。 预计将于 4 年第四季度完成工作并纳入 HEAD 分支。
    • 更新了 Mellanox ConnectX-5 [Lx]、ConnectX-5 [Ex] 和 ConnectX-4 [Dx] 以太网和 InfiniBand 适配器的 mlx5en 和 mlx6ib 驱动程序。 增加了对 Mellanox Socket Direct (ConnectX-6) 适配器的支持,允许 PCIe Gen 200 总线上高达 3.0Gb/s 的吞吐量。 对于多核 BlueField 芯片,添加了对 RShim 驱动程序的支持。 mstflint 软件包以及一组适用于 Mellanox 适配器的诊断实用程序已添加到端口;
  • 应用程序和端口系统
    • 图形堆栈组件已更新。 drm.ko(直接渲染管理器)驱动程序已从 Linux 5.0 内核移植。 该驱动程序被认为是实验性的,并已作为graphics/drm-devel-kmod 添加到 ports 树中。 由于该驱动程序使用更新的Linux KPI框架来兼容Linux内核DRM API,因此需要FreeBSD CURRENT才能运行。 VirtualBox 虚拟 GPU 的 vboxvideo.ko drm 驱动程序也已从 Linux 移植。 Mesa 软件包已更新至版本 18.3.2,并切换为使用 devel/llvm80 端口的 LLVM,而不是 devel/llvm60。
    • FreeBSD 端口树已超过 37000 个端口,未关闭的 PR 数量仍为 2146 个。报告期内,7837 个开发者进行了 172 项更改。 三位新参与者获得了提交者权利。 移植中的重要版本更新包括:MySQL 5.7、Python 3.6、Ruby 2.5、Samba 4.8、Julia 1.0、Firefox 68.0、Chromium 75.0.3770.100。 所有 Go 端口都已转换为使用“USES=go”标志。 向用于 Haskell 代码的 Cabal 包管理器添加了“USES=cabal”标志。 启用严格堆栈保护模式。 默认的 Python 版本是 3.6,而不是 2.7。
    • 实用程序版本已准备就绪 nsysctl 1.0,它提供了 /sbin/sysctl 的类似功能,使用 libxo 用于输出并提供一组扩展的选项。 Nsysctl 可用于直观地监视 sysctl 值的状态,并以结构化形式呈现对象的信息。 可以以 XML、JSON 和 HTML 格式输出;

来源: opennet.ru

添加评论