# FreeBSD 2016 年第一季度状态报告

* 原文链接：<https://www.freebsd.org/status/report-2016-01-2016-03.html>

## 引言

2016 年第一季度表明，FreeBSD 保持着强烈的自我意识。改进无处不在，增强了美好主义的信念。

颂词相对较少，但并非因为没有需求。或许，这篇信件能够在某种微小的方式上充当这一功能。

在这一季度中，发生了传播、改革、随机化、积累、仿真、变形、调试和翻译等事件。

在金融艺术领域，猪鼻期货险胜点彩画，而壁画艺术保持不变。

总之，丰盈中的不适感。请查看下面的条目，惊叹于它们的丰富性和巨大性！惊叹吧！

——Warren Block

请于 7 月 7 日前提交 2016 年第二季度的状态报告。我们将为没有词典的提交者提供一本词典。我们在此之后还需要它们，最好是封面没有新的牙齿痕迹。谢谢！

## [FreeBSD 团队报告](https://www.freebsd.org/status/report-2016-01-2016-03.html#FreeBSD-Team-Reports)

### [集群管理员](https://www.freebsd.org/status/report-2016-01-2016-03.html#Cluster-Admin)

联系方式：<<clusteradm@FreeBSD.org>>

在本季度，我们：

* 将服务从 ISC 托管空间迁移出去（peter, sbruno）
* 开始将服务迁移到 RootBSD 托管空间（peter, sbruno）
* 与 Phabricator 管理团队合作，迁移到位于 NYI 的新改进主机（allanjude, peter, sbruno）
* 安装了一个新的、更强大的 Jenkins 机器（gnn, lwshu, sbruno）
* 仍在寻找更多亚洲镜像站来托管 pkg、svn 和 ftp（日本、印度）（sbruno）
* 完成了台湾镜像站迁移到新位置（lwshu）
* 在 NYI 的 FreeBSD 集群中启动了 clang/llvm buildbot（sbruno, emaste）
* 解决了 Bytemark 提供的英国镜像故障问题（gavin, peter）

### [FreeBSD 核心团队](https://www.freebsd.org/status/report-2016-01-2016-03.html#The-FreeBSD-Core-Team)

联系方式：FreeBSD 核心团队 <<core@FreeBSD.org>>

在 2016 年第一季度，FreeBSD 核心团队的最重要任务是回应去年发生的骚扰事件。核心团队的行动包括组建事件时间表，并在此基础上回顾当时的核心团队行动；并提出关于未来如何更好处理此类事件的建议。在此过程中，草拟的报告由案件相关人员以及 FreeBSD 社区的多个关心成员进行了审阅。核心团队对所有参与者的贡献表示感谢。

报告于 2 月中旬发布给 FreeBSD 开发者社区，内容包括六条供社区考虑的建议。

核心团队还与由 Anne Dickison 领导的委员会进行协调，后者正在审查行为规范（Code of Conduct）。目前正在组建一个案例研究集，以重新审视对行为规范所做的修改会带来什么样的影响。

核心团队与 John Baldwin 一起，正在制定一个计划，创建包含 GPLv3 工具链组件的独立存储库。这将允许超越现有 GPLv2 工具链所能处理的代码进行现代化，并支持某些新架构，在这些架构上还没有可用的无版权许可证替代方案（例如，LLVM）。一份立场文件将很快传给开发者进行评论。

在本季度，共发布了三个新的提交权限（commit bits），并且有一个提交权限被暂时归还以备保存。请欢迎 Wojciech Macek、Jared McNeil 和 Stanislav Galabov，向 Davide Italiano 告别，尽管他太忙无法直接参与 FreeBSD 工作，但他仍将通过上游的 lld 和其他工具链部分做出贡献。

## [项目](https://www.freebsd.org/status/report-2016-01-2016-03.html#Projects)

### [地址空间布局随机化（ASLR）](https://www.freebsd.org/status/report-2016-01-2016-03.html#Address-Space-Layout-Randomization)

| 链接                                                          |
| ----------------------------------------------------------- |
| [补丁主页](https://kib.kiev.ua/kib/aslr)                        |
| [paxtest.log](https://www.kib.kiev.ua/kib/aslr/paxtest.log) |
| [fedora.log](https://www.kib.kiev.ua/kib/aslr/fedora.log)   |

联系方式：Konstantin Belousov <<kib@FreeBSD.org>>\
联系方式：Ed Maste <<emaste@FreeBSD.org>>

我编写了一个简洁而功能丰富的补丁，实现了 FreeBSD 的地址空间布局随机化（ASLR），现已可供更广泛的测试。

通过此更改，所有非固定映射都将应用随机化。所谓随机化，指的是映射的基地址会选取具有保证熵（位数）的一定量。如果映射要求对齐超页，随机化会遵循超页属性。

随机化是基于最佳努力的。如果由于碎片化问题阻止了熵注入，分配器会退回到第一次适配策略。实现一个强模式并不复杂，其中若未能保证所请求的熵量则会导致映射请求失败，但我认为这种模式不可用。

我目前尚未对注入的熵量进行精细调整，但这只是一个量化的变化，不会影响实现。目前的熵量由 aslr\_pages\_rnd 控制。

为了不破坏合并优化，减少 ASLR 固有的页表碎片，并保留为 malloc 内存提升超页的能力，对于匿名私有映射实现了局部性，它们会自动分组，直到碎片化出现。匿名组的初始位置当然是随机的。经过一些额外的调整后，这些措施证明是相当有效的。特别是在 i386 上，PyPy 5.0 的一个地址空间需求极高的构建成功完成，并激活了补丁的最激进功能。

默认模式下，sbrk 区域不会被其他映射填充，但可以关闭此功能，这在小地址空间架构（现在 32 位被认为是小的）上提供了更多的空间。这与应用程序关于 mmap(2) 基地址的提示相关。测试表明，忽略提示不会影响常见应用程序的功能，但我预计更为复杂的代码可能会中断。默认情况下，sbrk 保持不变，mmap 提示得到满足，可以通过使用 kern.elf{32,64}.aslr\_care\_sbrk sysctl 进行更改（目前默认启用，供更广泛的测试）。

栈间隙、W^X、共享页随机化、KASLR 和其他技术明确不包括在此工作范围内。

应用了补丁的前一个版本 5 并进行了激进调优的 paxtest 结果可以在 [paxtest.log](https://www.kib.kiev.ua/kib/aslr/paxtest.log) 中查看。相比之下，同一台机器上 Fedora 23 上的运行结果可以在 [fedora.log](https://www.kib.kiev.ua/kib/aslr/fedora.log) 中查看。

ASLR 是按 ABI 启用的，目前仅在本地 i386 和 amd64（包括兼容的 32 位）以及 ARMv6 ABI 上启用。我预计稍后会为 arm64 进行测试并启用 ASLR。

已经实现了一个用于 ASLR 的 procctl(2) 控制，但我尚未提供该系统调用的用户空间封装。事实上，最合理的控制应该是按镜像而非按进程进行，但我们并没有传统将内核读取属性放入二进制文件的扩展属性中，因此我仍在思考这一部分，也解释了为何没有提供工具。

感谢来自 HardenedBSD 项目的 Oliver Pinter 和 Shawn Webb，他们推动了 FreeBSD 的 ASLR 工作。尽管这项工作并非基于他们的成果，但受到了他们努力的启发。

感谢 Ed Maste、Robert Watson、John Baldwin 和 Alan Cox 讨论补丁的过程，以及感谢 FreeBSD 基金会的指导。

Bartek Rutkowski 在 i386 上测试了 PyPy 构建，David Naylor 帮助处理了在这项工作期间处于动荡和升级阶段的 Port。

该项目得到了 FreeBSD 基金会的赞助。

### [FreeBSD 上的 Ceph](https://www.freebsd.org/status/report-2016-01-2016-03.html#Ceph-on-FreeBSD)

| 链接                                                         |
| ---------------------------------------------------------- |
| [Ceph 官方网站](http://ceph.com/)                              |
| [主存储库](https://github.com/ceph/ceph)                       |
| [我的 Fork](https://github.com/wjwithagen/ceph)              |
| [包含所有更改的 git pull](https://github.com/ceph/ceph/pull/7573) |

联系方式：Willem Jan Withagen <<wjw@digiware.nl>>

Ceph 是一款分布式对象存储和文件系统，旨在提供出色的性能、可靠性和可扩展性。

* 对象存储\
  Ceph 提供通过本地语言绑定或 radosgw（一个与 S3 和 Swift 编写的应用程序兼容的 REST 接口）无缝访问对象。
* 块存储\
  Ceph 的 RADOS 块设备（RBD）提供对跨整个存储集群进行条带化和复制的块设备映像的访问。
* 文件系统\
  Ceph 提供一个符合 POSIX 标准的网络文件系统，旨在实现高性能、大规模数据存储，并最大程度地与传统应用程序兼容。

我开始研究 Ceph，是因为 HAST 解决方案与 CARP 和 ggate 并没有完全实现我想要的功能。但我的目标是运行一个 Ceph 存储集群，这些存储节点运行 ZFS。最终站点将运行 bhyve，使用存储在 Ceph 中的 RBD 磁盘。

FreeBSD 构建将构建 Ceph 中的大多数工具。请注意，由于 FreeBSD 尚未实现 RBD，因此与 RBD 相关的项目将无法工作。

在 11-CURRENT 上进行了 Ceph 的编译和构建测试。它使用了可用的 Clang 工具集，Clang 版本至少需要 3.7。Clang 3.4（在 10.2-STABLE 上）没有所有必需的功能来编译所有内容。

该设置将使 FreeBSD 上的 Ceph 启动：

* 安装 bash 并链接到 /bin（需要 root 权限）：

  ```sh
  sudo pkg install bash  
  sudo ln -s /usr/local/bin/bash /bin/bash
  ```
* 构建 Ceph

  ```sh
  git clone https://github.com/wjwithagen/ceph.git 
  cd ceph  
  git checkout wip-wjw-freebsd-tests  
  ./do_freebsd.sh
  ```

尚未包含的部分：

* RBD\
  Rados 块设备是在 Linux 内核中实现的。似乎最初曾有一个用户空间实现。而且也许可以使用 ggated 作为模板，因为它执行一些类似的功能，只不过是两个磁盘之间。而且它有一个用户空间的对应部分。
* BlueStore\
  FreeBSD 和 Linux 有不同的 AIO API，需要使其兼容。此外，FreeBSD 中 aio\_cancel 无法对所有设备类型生效的问题也在讨论中。
* CephFS\
  Cython 尝试访问 dirent 中的一个内部字段，导致无法编译。

验证上述功能正确性的测试也被排除在测试集之外。

尚未包含的测试：

* ceph-detect-init/run-tox.sh\
  因为当前实现不了解 FreeBSD 的 rc/init。
* 使用 nosetests 的测试\
  调用这些测试并不完全有效，因为 nosetests 不在 /usr/bin 中，并且通过 /usr/bin/env nosetests 调用在 FreeBSD 上无法正常工作。
* test/pybind/test\_ceph\_argparse.py
* test/pybind/test\_ceph\_daemon.py

需要调查的事项：

* `ceph-{osd,mon}` 需要两次信号才能终止。
* ceph\_erasure\_code --debug-osd 20 --plugin\_exists jerasure 因为 SIGSEGV 崩溃。这是一个指针引用，修改了常规程序流程之外的内容。可能是编程错误，但也许是多个库混合使用不当所致。

#### 待办事项

1. 当前最重要的任务是使测试集完成且无错误。这包括修复多个核心转储。\
   运行集成测试，查看 FreeBSD 守护进程是否能与 Linux Ceph 平台一起工作。
2. 使当前排除的 Python 测试能够正常工作，并测试 OKE。
3. 编译并测试用户空间的 RBD（Rados 块设备）。\
   调查是否可以开发一个类似于 ggate 的内核级 RBD 设备。
4. 将 FreeBSD 的 /etc/rc.d 初始化脚本集成到 Ceph 堆栈中，以便在生产机器上测试和运行 Ceph。

### [libthr 的进程共享锁](https://www.freebsd.org/status/report-2016-01-2016-03.html#Process-Shared-Locks-for-libthr)

联系方式：Konstantin Belousov <<kib@FreeBSD.org>>

POSIX 定义了几种类型的 pthread 锁。对于本报告，考虑了私有锁和进程共享锁两种类型。私有锁只能由同一进程的线程使用，这些线程共享一个公共的地址空间。进程共享锁可以被任何进程中的线程使用，前提是该进程能够将锁的内存映射到其地址空间中。

我们的 libthr 库（实现 POSIX 线程和锁操作的库）使用指针作为锁的内部表示。该指针包含了实际承载锁的结构体的地址。这给实现 PTHREAD\_PROCESS\_SHARED 属性的锁带来了不幸的后果，因为当锁映射到不同的地址空间时，实际上只有指针是共享的。

一个普遍的观点是，我们别无选择，只能通过改变锁类型为实际的锁结构（并为未来的 ABI 扩展预留填充空间）来打破 libthr 的应用程序二进制接口（ABI）。这对用户来说是非常痛苦的，因为我们与未版本化的 libc 和 libc\_r 的经验已经证明了这一点。

相反，我提出并实现了一种方案，在不破坏 ABI 的情况下实现进程共享锁。锁的内存被用作系统全局共享内存对象哈希表（离页对象）的键，这些对象包含实际的锁结构。

新增的 umtx 操作用于通过内存键创建或查找共享对象。libthr 被修改为查找该对象并使用它来处理共享锁，而不是像私有锁那样使用 malloc()。

用户可见的锁类型中的指针值包含了共享锁的警戒值（canary）。libthr 检测到这个警戒值后，切换到共享锁模式。

将锁结构内联的提案，除了破坏 ABI 的缺点外，还有其优点。最重要的是，内联避免了间接访问的需要。相对于离页方法，另一个重要的优势是，不需要维护离页对象，并且共享锁的生命周期自然地随着共享内存的销毁而结束，无需显式清理。目前，离页对象通过 vm 对象终止来避免泄漏，但 vnode vm 对象的长生命周期会延长离页对象的存在，尤其是对于由文件支持的共享锁，尽管这种情况不太可能发生。

带内联锁的 libthr 非正式地被称为 libthr2 项目，因为更改库名称总比仅仅增加库版本号要好。rtld 应确保 libthr 和 libthr2 不会同时加载到同一个地址空间中。

该项目由 FreeBSD 基金会赞助。

#### 待办事项

1. 实现健壮的互斥锁。
2. 评估并实现 libthr2。

### [RCTL 磁盘 I/O 限制](https://www.freebsd.org/status/report-2016-01-2016-03.html#RCTL-Disk-IO-Limits)

联系方式：Edward Tomasz Napierała <<trasz@FreeBSD.org>>

RCTL 资源限制框架中的一个重要缺失部分是限制文件系统吞吐量的能力。该项目旨在填补这个空白，通过添加 RCTL 规则来限制每秒读取字节数（BPS）、写入字节数（BPS）、每秒读取 I/O 操作次数（IOPS）和写入 IOPS，并添加一种新的节流机制，当达到限制时，减慢违规进程的速度。

该代码已提交，并将随 FreeBSD 11.0-RELEASE 一同发布。

该项目由 FreeBSD 基金会赞助。

#### 待办事项

1. 额外的测试
2. 简化锁定机制，完全去除 rctl\_lock
3. 改进统计收集，使得 rctl -u 能够在固定的时间点获取使用计数器
4. 使用新的节流机制来限制 `%CPU`

### [FreeBSD 上的图形堆栈](https://www.freebsd.org/status/report-2016-01-2016-03.html#The-Graphics-Stack-on-FreeBSD)

| 链接                                                                                                                                     |
| -------------------------------------------------------------------------------------------------------------------------------------- |
| [图形堆栈路线图和支持的硬件矩阵](https://wiki.freebsd.org/Graphics)                                                                                   |
| [GitHub 上的 Port 开发树](https://github.com/freebsd/freebsd--graphics)                                                                     |
| [FreeBSD 图形团队在 FOSDEM 2016 的展示](https://fosdem.org/2016/schedule/event/freebsd_graphic_stack/)                                         |
| [GSoC 2016：将 /dev 条目链接到 sysctl 节点](https://wiki.freebsd.org/SummerOfCodeIdeas#Devices_management:_link_.2Fdev_entries_to_sysctl_nodes) |
| [GSoC 2016：重新设计 libdevq](https://wiki.freebsd.org/SummerOfCodeIdeas#Devices_management:_redesign_and_rewrite_libdevq)                  |
| [图形团队博客](http://planet.freebsd.org/graphics/)                                                                                          |

联系方式：FreeBSD 图形团队 <<freebsd-x11@FreeBSD.org>>

本季度的重大新闻是内核中 i915 驱动程序的更新！该驱动程序现在与 Linux 3.8.13 匹配，因此包含了对 Haswell 的初步支持。虽然 Linux 3.8 已经有三年历史，但继续进行升级 DRM 的工作。特别是，已经开始采用 linuxkpi 兼容性。

在 Ports 中，Mesa 被更新为 11.1.2。下一个次要版本 11.2.0 已准备好在我们的开发树中进行测试。我们还更新了 libclc 到 0.2.0.20151006，这是 Mesa 用于提供 OpenCL 支持的库。我们将上游补丁添加到 beignet，以便所有这些 Port 现在都使用相同的 LLVM 版本。

我们参加了 2016 年的 FOSDEM 会议，地点在布鲁塞尔。Jean-Sébastien Pédron 进行了演讲，解释了图形团队的工作，并展示了人们如何贡献。这场演讲得到了热烈的欢迎，演讲后进行了有趣的讨论。FOSDEM 也是一个很好的机会，让我们再次与图形堆栈的上游开发者交流。

首次，我们为 2016 年的 GSoC 提出了两个想法：一是内核任务，一是重新设计 libdevq。六名学生提交了这些想法的提案，这让我们感到意外！我们现在需要决定要指导哪位学生，这个选择很难。

我们的博客已经迁移到 [新位置](http://planet.freebsd.org/graphics/)（如上所示）。

#### 待办事项

1. 请参阅“Graphics”维基页面，获取最新信息。

## [内核](https://www.freebsd.org/status/report-2016-01-2016-03.html#Kernel)

### [ARM Allwinner SoC 支持](https://www.freebsd.org/status/report-2016-01-2016-03.html#ARM-Allwinner-SoC-Support)

| 链接                                                                     |
| ---------------------------------------------------------------------- |
| [Allwinner FreeBSD 维基](https://wiki.freebsd.org/FreeBSD/arm/Allwinner) |

联系方式：Jared McNeill <<jmcneill@FreeBSD.org>> 联系方式：Emmanuel Vadot <<manu@bidouilliste.com>>

Allwinner SoC 被广泛用于多个爱好者开发板和单板计算机。最近，这些 SoC 的支持获得了大量更新。

第一季度完成的任务：

* I2C
* HDMI 输出
* 基本 AXP209 支持（电源管理单元）
* 为大多数板子切换到上游 DTS
* A31/A31S SoC 的基本支持
* RTC
* 正确的 Pinmux/GPIO 支持
* 音频编解码器 / 音频 HDMI
* A10/A20 DMA 支持
* A20 现在使用 GIC（通用中断控制器）
* A20 现在使用 ARM 通用定时器

正在进行的任务：

* 切换到新的时钟框架 [(审查中)](https://reviews.freebsd.org/D5752)
* 将 A10 中断控制器转换为 INTRNG [(审查中)](https://reviews.freebsd.org/D5573)
* OHCI 支持 [(审查中)](https://reviews.freebsd.org/D5481)
* 通用的 ALLWINNER 内核配置文件 [(审查中)](https://reviews.freebsd.org/D5580)
* A20/A31 NMI 支持 [(审查中)](https://reviews.freebsd.org/D5663)
* USB OTG
* 完成切换到使用上游 DTS 文件
* A83T SoC 支持
* H3 SoC 支持

#### 待办事项

1. SPI 驱动程序
2. LCD 支持
3. 一切可能感兴趣的未支持硬件设备

### [CAM I/O 调度器](https://www.freebsd.org/status/report-2016-01-2016-03.html#CAM-I/O-Scheduler)

| 链接                                                                                          |
| ------------------------------------------------------------------------------------------- |
| [FreeBSD CAM 子系统中的 I/O 调度 (PDF)](https://people.freebsd.org/~imp/bsdcan2015/iosched-v3.pdf) |
| [BSDCan 2015 演讲](https://www.youtube.com/watch?v=3WqOLolj5EU)                               |

联系方式：Warner Losh <<wlosh@netflix.com>>

增强版的 CAM I/O 调度器已经被提交到树中。默认情况下，该调度器实现了旧的行为。此外，还提供了一个先进的自适应调度器。随着调度器的引入，SATA 硬盘现在可以使用支持的设备进行队列修剪。关于新调度器的详细信息，请参阅 [FreeBSD CAM 子系统中的 I/O 调度文章 (PDF)](https://people.freebsd.org/~imp/bsdcan2015/iosched-v3.pdf) 或观看 [BSDCan 2015 演讲](https://www.youtube.com/watch?v=3WqOLolj5EU)。

自适应 I/O 调度器默认情况下是禁用的，但可以在内核配置文件中通过选项 CAM\_ADAPTIVE\_IOSCHED 启用。该调度器允许优先处理读取操作或写入操作（或反之），控制 IOPs、带宽或并发操作（读取、写入、修剪），并允许选择静态或动态控制这些操作。此外，收集了驱动操作的一些统计信息，并通过 sysctl 发布。自适应 I/O 调度器的一个高级应用是弥补一些消费级 SSD 的不足。由于内部垃圾回收，这些 SSD 如果快速写入过多数据，会表现出性能急剧下降。在没有 I/O 调度器的情况下，待垃圾回收启动，读取和写入性能将显著下降。自适应 I/O 调度器可以配置为监控读取延迟。当读取延迟上升时，I/O 调度器会减少允许的写入吞吐量，在限制范围内，尽力最大化读取性能。自适应 I/O 调度器的一个简单应用是静态限制写入带宽、IOPs 或并发操作。

I/O 调度器的未来工作将与上层的改进相结合。上层将增强与 I/O 请求的紧急程度之间的通信。I/O 调度器将告知上层 I/O 队列的满载程度，从而可以尽快将不那么紧急的 I/O 提交到下层，而不会压垮下层或使其他设备的请求得不到处理。

此项目由奈飞赞助。

### [UBLDR 中的 FDT 覆盖支持](https://www.freebsd.org/status/report-2016-01-2016-03.html#FDT-Overlay-Support-in-UBLDR)

| 链接                                            |
| --------------------------------------------- |
| [ubldr 补丁](https://reviews.freebsd.org/D3180) |

联系方式：Oleksandr Tymoshenko <<gonzo@FreeBSD.org>>

扁平化设备树（Flattened Device Tree，FDT）是一种将硬件描述与代码分离的方式。在启动过程中，加载程序将设备树 blob 的指针传递给内核，内核根据 blob 中的信息实例化并附加驱动程序。

当硬件可扩展时，这种方法就无法工作。例如，树莓派和 Beaglebone Black 有 cape 或 shield 的概念：这些是附加到主板 IO 接口的扩展 PCB，提供附加功能，如 LCD 屏幕或 GPS 接收器。这些 shield 可以通过它们自己的设备树进行描述，并且这些树可以通过引导加载程序覆盖到基础树上，从而为内核提供准确的描述。

提议的补丁将此功能添加到 ubldr 中。用户可以将一个用逗号分隔的覆盖列表指定给 U-Boot 或加载程序的 fdt\_overlays 变量，ubldr 将从 /boot/dtb/ 目录加载它们并进行覆盖。

### [改进 Filemon 性能/稳定性](https://www.freebsd.org/status/report-2016-01-2016-03.html#Filemon-Performance/Stability-Improvements)

联系方式：Bryan Drewery <<bdrewery@FreeBSD.org>> 联系方式：Mateusz Guzik <<mjg@FreeBSD.org>>

Filemon 是一个内核模块，用于跟踪一个命令创建、读取、写入或执行的文件。它允许与 bmake 的元模式结合，跟踪构建依赖关系。bmake 将 filemon 的输出存储在 .meta 文件中，连同构建命令一起，并在后续使用中，如果任何引用的文件缺失或修改，或者构建命令发生变化，触发目标的重新构建。它提供了与编译器的 -MF 标志相同的功能，但适用于所有文件。这对于构建世界的 WITH\_META\_MODE（即普通构建世界，但只使用 filemon）至关重要，以提供一个可靠的增量构建，甚至无需 .depend 文件或编译器 -MF 标志。这使得 -DNO\_CLEAN 始终有效。

Filemon 在 -HEAD 上的稳定性和性能在本季度得到了改进。它不再导致每个被钩入的系统调用都循环遍历进程，寻找匹配的 filemon 结构。现在它只直接附加到 struct proc，使用自己的指针。这通过减少构建过程中锁的争用，提高了性能。还进行了大量工作，改进了错误处理和模块的其他稳定性问题。

所有这些工作由 Bryan Drewery 完成，由 EMC 赞助，但 Mateusz Guzik 提供了大量帮助和错误识别。

此项目由 EMC / Isilon 存储部门赞助。

#### 待办事项

1. 改进凭证处理。
2. 改进 EVENTHANDLER 性能。
3. 可能提供一个框架，用于 syscallenter/syscallret 钩取，以避免像 Filemon 一样钩取系统调用。

### [FreeBSD 集成服务 (BIS)](https://www.freebsd.org/status/report-2016-01-2016-03.html#FreeBSD-Integration-Services-\(BIS\))

| 链接                                                                                                      |
| ------------------------------------------------------------------------------------------------------- |
| [在 Microsoft Hyper-V 上运行的 FreeBSD 虚拟机](https://wiki.freebsd.org/HyperV)                                 |
| [Windows 上支持的 Linux 和 FreeBSD 虚拟机用于 Hyper-V](https://technet.microsoft.com/en-us/library/dn531030.aspx) |

联系方式：Sepherosa Ziehau <<sepherosa@gmail.com>>\
联系方式：Howard Su <<howard0su@gmail.com>>\
联系方式：Hongjiang Zhang <<honzhan@microsoft.com>>\
联系方式：Dexuan Cui <<decui@microsoft.com>>

当 FreeBSD 虚拟机 (VM) 在 Hyper-V 上运行时，建议使用 Hyper-V 合成设备，以获得最佳的网络和存储性能，并充分利用 Hyper-V 提供的所有优势。使用 Hyper-V 合成设备所需的驱动程序集合被称为 FreeBSD 集成服务 (BIS)。一些 BIS 驱动程序（如网络和存储驱动程序）在 FreeBSD 9.x 和 10.x 中已经存在多年，但仍然存在一些性能和稳定性问题以及 bug。与 Windows 和 Linux 虚拟机相比，当前的 BIS 缺少一些有用的功能，例如：实时虚拟机备份、TRIM/Unmap、对 UEFI 虚拟机的支持（支持从 UEFI 启动）等。

在过去的一个季度中，我们在 Hyper-V 网络驱动的性能调优方面取得了巨大进展。我们还重构并清理了 VMBus 驱动程序，并修复了一些重要的 bug。所有这些工作使 FreeBSD 虚拟机在 Hyper-V 和基于 Hyper-V 的云平台 Azure 上运行得更好！

我们在 2016Q1 的工作记录如下：

#### 优化 Hyper-V 网络驱动的性能

* 我们为驱动程序添加了 LRO（大接收卸载）支持，并正确处理 ACK 数据包。这有效地减少了 TCP/IP 栈中使用的 CPU 周期，显著提升了网络性能！
* 我们为驱动程序启用了 vRSS（虚拟接收侧扩展）支持。这大大改善了 SMP 虚拟机的网络性能。
* 我们使用了一个独立的 Tx 内核线程来缓解 Rx 线程在接收 ACK 后试图发送数据包的负担，这样 Rx 线程可以更快地接收数据包并发送 ACK。
* 现在，在带有 10Gbps 物理网卡的主机上，我们可以达到虚拟机之间的吞吐量 9.1Gbps，在带有 40Gbps 网卡的主机上，吞吐量超过 20Gbps，同时 CPU 资源仍然有足够的余量供应用使用。
* 我们还启用了 IP 头部校验和卸载和 UDP 的 Rx 校验和卸载。
* 进一步的性能调优仍在进行中。

#### 重构和清理 VMBus 驱动代码

* 我们不再直接使用 swi 线程，而是使用每 CPU 的 taskqueue\_create\_fast() 线程来处理事件和消息，使代码更加符合 FreeBSD 的规范。
* 我们对 hv\_utils 代码（HeartBeat、TimeSync 和 Shutdown）进行了大量清理，并进一步清理 KVP 代码。
* 我们为 Hyper-V 定时器使用了新的消息/中断槽，从而使定时器和非定时器消息的处理可以区分开来，解决了潜在问题。
* 我们不再通过 hack 方式寻找可用的 IDT 向量，而是改为使用正常的方法 lapic\_ipi\_alloc()。
* 我们正在模块化 Hyper-V 模块：
  1. 它们将在加载器中加载；
  2. 我们将增强 devd(8)，以改进热插拔场景。

#### 错误修复

* 修复了 Hyper-V 存储驱动中的“虚假多个磁盘”问题（PR 206630 — FreeBSD 10.2 在 Windows 10 和 2016 服务器上可能由于多个无效磁盘无法启动），现在 FreeBSD 虚拟机可以在 Win10 和 2016 主机上可靠启动。
* 修复了 OACTIVE 问题（PR 207297 — \[Hyper-V] FreeBSD 10.2 在 Hyper-V 上承受重负载时丢失网络连接）。
* 修复了 TSC 校准问题（PR 208238 — \[Hyper-V] TSC 频率未正确检测：“calcru：运行时间倒退”），现在不会再看到“运行时间倒退”的消息了！
* 通过在 Hyper-V 虚拟机上启用文本模式，修复了 11-CURRENT 上的“非常慢的终端”问题。
* 通过要求 dhclient(8) 忽略选项，修复了 dhclient(8) 中的“未知 DHCP 选项值 0xf5”问题，FreeBSD 虚拟机现在可以在 Azure 上可靠地获取 IP 地址。
* 找到了 PR 20824 的解决方法（\[Hyper-V] VM 网络可能无法通过基于无线网卡的虚拟交换机工作）：在 /etc/sysctl.conf 中添加“net.link.ether.inet.max\_age=60”。

我们计划添加对实时虚拟机备份、TRIM/Unmap 和 UEFI 虚拟机（Hyper-V 第二代虚拟机）的支持。

我们与发布工程团队一起发布了 errata（FreeBSD-EN-16:04.hyperv, FreeBSD-EN-16:05.hv\_netvsc），因此 10.1 和 10.2 用户可以通过升级系统轻松获得 KVP 和 TCP 校验和的修复。

我们为 Hyper-V 发布了 BIS 测试用例，地址是：<https://github.com/FreeBSDonHyper-V/Test-BIS>，并且我们即将发布 Azure 测试用例。

此项目由微软赞助。

### [Infiniband](https://www.freebsd.org/status/report-2016-01-2016-03.html#Infiniband)

| 链接                                                                                    |
| ------------------------------------------------------------------------------------- |
| [测试召集](https://lists.freebsd.org/pipermail/freebsd-infiniband/2016-March/000190.html) |

联系方式：Hans Petter Selasky <<hselasky@FreeBSD.org>>

Mellanox 正在致力于 FreeBSD 中 Mellanox OFED v3.2 版本的 Infiniband 栈的重大更新。更新包括用户空间和内核组件。FreeBSD 的 Infiniband 补丁可通过上面的链接下载，并应用于最新的 FreeBSD-head 版本。

此项目由 Mellanox Technologies 赞助。

### [CAM 框架下的 MMC 栈](https://www.freebsd.org/status/report-2016-01-2016-03.html#MMC-Stack-Under-CAM-Framework)

| 链接                                                  |
| --------------------------------------------------- |
| [项目信息](https://bakulin.de/freebsd/mmccam.html)      |
| [源代码](https://github.com/kibab/FreeBSD/tree/mmccam) |
| [待审补丁](https://reviews.freebsd.org/D4761)           |

联系方式：Ilya Bakulin <<ilya@bakulin.de>>

本项目的目标是使用 CAM 框架重新实现现有的 MMC/SD 栈。这将允许利用经过充分测试的 CAM 锁定模型和调试功能。还将能够处理插入卡片生成的中断，这是实现 SDIO 接口的前提。SDIO 支持对于与许多开发板上的 WiFi/BT 模块进行通信是必要的，比如树莓派 3 Wan。

新栈的另一个特点是支持通过 cam(3) 从用户空间应用程序发送 SD 命令。这将使在用户空间构建设备驱动程序变得可能，并使调试变得更加容易。

代码的第一个版本已上传到 Phabricator 供审查。新栈能够连接到 SD 卡并将其带到工作状态，从而可以读取和写入卡片。

在 2016Q1 中，添加了对 imx\_sdhci SD 主机控制器（用于 iMX 基板，如 Wandboard）和 ti\_sdhci（用于 BeagleBone Black）的支持。修改其他符合 SDHCI 标准的驱动程序应该不难。

#### 待办事项

1. 在至少一个 x86 平台上修改 SDHCI 驱动程序。这将使开发和协作变得更容易。
2. 开始实现 SDIO 特定功能。

### [NFS 服务器](https://www.freebsd.org/status/report-2016-01-2016-03.html#NFS-Server)

联系方式：Rick Macklem <<rmacklem@FreeBSD.org>>

在 nfsuserd 守护进程中添加了一个新的选项 `-manage-gids`。该选项告诉 NFS 服务器使用服务器上与 UID 对应的组列表，而不是 NFS RPC 请求中的组列表。使用此选项可以避免使用 AUTH\_SYS（默认情况下）的 NFS RPCs 中的 16 个组限制。

正在进行开发工作，以支持使用 GlusterFS 作为后端的 NFS 服务器的 pNFS。这将是一个长期项目，最终目标是使 NFS 服务器能够扩展到单一服务器系统之外。希望在 2016 年春季末进行测试。pNFS 允许 NFSv4.1 客户端直接向数据服务器进行读/写，而不是通过 NFS 服务器。

#### 待办事项

1. 在开发过程中，pNFS 服务器需要进行测试，否则它将无法进展到接近生产状态。希望在 2016 年春末，在 FreeBSD 的 Subversion 项目分支中提供测试代码。

### [使用 PVS Studio 对 FreeBSD 内核进行静态分析](https://www.freebsd.org/status/report-2016-01-2016-03.html#Static-Analysis-of-the-FreeBSD-Kernel-with-PVS-Studio)

| 链接                                                             |
| -------------------------------------------------------------- |
| [PVS-Studio 深入分析 FreeBSD 内核](http://www.viva64.com/en/b/0377/) |
| [PVS 静态分析 Phabricator 审查](https://reviews.freebsd.org/D5245)   |

联系方式：Warren Block <<wblock@FreeBSD.org>>

在 2 月份，程序验证系统公司使用其 PVS-Studio 工具对 FreeBSD 内核进行了静态分析。已创建 Phabricator 审查，以便开发人员分享对结果的意见。发现并修复了从琐碎的拼写错误到冗余代码以及重要的逻辑错误等多个 bug。部分结果为误报。这些问题通过修改误导静态分析工具的代码进行了处理，也可能会误导人工阅读者。

程序验证系统公司向 FreeBSD 等开源项目提供的合作对所有人都有益。我们感谢他们与我们分享这次分析和他们的见解。

## [架构](https://www.freebsd.org/status/report-2016-01-2016-03.html#Architectures)

### [AmigaOne X5000 支持](https://www.freebsd.org/status/report-2016-01-2016-03.html#AmigaOne-X5000-Support)

| 链接 |
| -- |
|    |

联系方式：Justin Hibbits <<jhibbits@FreeBSD.org>>

本项目是 Semihalf 从 2012 年开始的 Book-E QorIQ 支持增强的延续。

AmigaOne X5000 系列的 AmigaOS 兼容系统使用 Freescale QorIQ 系列的 SoC，面向桌面级的形态。此项工作包括为 e5500 核心本身添加支持，以及为 SoC 外设提供支持。

目前，大部分基本支持代码已经提交：dTSEC（以太网）、核心支持（e500mc、e5500）。在此过程中，rman（内核资源管理器）得到了增强，使用 uintmax\_t 处理资源。这使得设备在 32 位系统上可以物理存在超过 4GB 的内存边界。通过静态编译的设备树，它能够启动到多用户模式并通过 nfsroot 使用，并可以像正常系统一样工作（配置完成后通过串口和 SSH 登录）。

此项目由 Alex Perez（Inertial Computing）赞助。

#### 待办事项

1. eSDHC 驱动：已有初步工作，借用了 Ian Lepore 的 imx\_sdhc.c，但仍有一些 bug：iMX 驱动缺少 DMA，系统启动后出现奇怪的超时。
2. SATA 支持：有一个 SATA 控制器的工作中驱动，但目前速度非常慢，约 11MB/s 在 SATA 2 链接下。目前它依赖于每次 SATA 事务中加 10 毫秒的延迟才能保持基本稳定。没有这个延迟时，磁盘扫描永远无法工作，原因尚未弄清楚。
3. 本地控制台（VGA）支持：目前通过串口控制台启动。如果有 PCIe 显卡，系统会识别 vgapci0，但 vt(4) 仍未附加到该设备。
4. 64 位支持：板载的 CPU 是 P5020，一款 64 位 e5500 双核 SoC。目前，FreeBSD 上的 booke 支持仅为 32 位。
5. SMP：Book-E 硬件上的 SMP 支持当前无法使用。
6. U-boot 支持：当前使用的是编译进去的设备树，但最好能使用 u-boot 提供的设备树，或者至少使用与 Linux 兼容的设备树。
7. 在 DPAA（数据路径加速架构）方面需要进一步工作，以改进以太网驱动程序并利用 SEC 引擎进行加密、random(4) 和 IPSec。

### [Cavium ThunderX (arm64) 上的 FreeBSD](https://www.freebsd.org/status/report-2016-01-2016-03.html#FreeBSD-on-Cavium-ThunderX-\(arm64\))

联系方式：Dominik Ermel <<der@semihalf.com>> 联系方式：Wojciech Macek <<wma@semihalf.com>> 联系方式：Zbigniew Bodek <<zbb@semihalf.com>>

自上次报告以来，FreeBSD 对 ThunderX 的支持得到了显著改进和稳定。Semihalf 的贡献包括以下内容：

* 支持最新的 ThunderX 芯片版本（Pass 2.0）和当前的 Cavium 固件。向后兼容性得到了保持。
* 改用了 pci\_host\_generic.c 作为内部 PCIe 桥接的主要驱动程序。这涉及到 PCIe 代码的重构，以支持通用平台和基于 ThunderX 的平台。
* 在网络性能和 bug 修复方面有了显著提升：
  * 修复了 Rx 路径中的竞争条件，解决了一个非常罕见的“使用已释放内存”问题
  * 支持硬件 L3 和 L4 校验和
  * 支持硬件辅助的 TCP 分段卸载（TSO）
  * 支持软件大接收卸载（LRO）
  * 对 Tx 和 Rx 路径及配置的多项改进

驱动程序支持所有可用的以太网连接（1、10、40 Gbps），系统可以使用 4 个 CPU 核心完全饱和 10 Gbps 链接（在 Tx 上）。

* 大幅提升整体 I/O 性能：
  * 完整重构了 copyin/copyout 和 bzero 功能
* 其他改进：
  * 支持中断与 CPU 的绑定（包括 GICv3/ITS 后端）

此项工作已持续集成到 FreeBSD HEAD。

此项目由 Cavium 和 Semihalf 赞助。

#### 待办事项

1. 在 VNIC 中添加对多队列集操作的支持。

### [powerpcspe 目标](https://www.freebsd.org/status/report-2016-01-2016-03.html#powerpcspe-Target)

| 链接                                                           |
| ------------------------------------------------------------ |
| [源代码树](https://svnweb.freebsd.org/base/projects/powerpcspe/) |

联系方式：Justin Hibbits <<jhibbits@FreeBSD.org>>

本项目旨在启用在 NXP/Freescale e500v2 SoC 中找到的信号处理引擎（SPE）的使用。SPE 使用与 Altivec 重叠的操作码，因此它们是互斥的。此外，e500v2 不具有传统的 FPU，而是使用 SPE 进行所有浮点运算（或如当前所做的那样，进行仿真）。由于 SPE ABI 与传统 ABI 不兼容，因此创建了一个新的 MACHINE\_ARCH 来解决这些不兼容问题。

已经为此项工作创建了一个项目分支。一个 powerpcspe 内核已经能够在 RouterBoard RB800 上启动，并且基本工具能够正常运行。

#### 待办事项

1. 可能需要优化 setjmp/longjmp，以避免在未启用 SPE 时使用它。这将节省对于未使用 SPE 的进程的内核切换。这是一个低优先级任务，可能不会完成。

## [用户空间程序](https://www.freebsd.org/status/report-2016-01-2016-03.html#Userland-Programs)

### [ELF 工具链工具](https://www.freebsd.org/status/report-2016-01-2016-03.html#ELF-Tool-Chain-Tools)

| 链接                                                |
| ------------------------------------------------- |
| [ELF 工具链网站](http://elftoolchain.sourceforge.net/) |

联系方式：Ed Maste <<emaste@FreeBSD.org>>

ELF 工具链项目提供 BSD 许可的编译工具和库实现，用于构建和分析 ELF 对象。该项目起初是 FreeBSD 的一部分，后来成为独立项目，旨在鼓励开源开发者社区的更广泛参与。

ELF 工具链项目在 2 月发布了版本 0.7.1。我们一直在 FreeBSD 中跟踪上游仓库的快照。发布正式版本带来了更广泛的测试和在其他开源项目中的可见度，尽管我们并不需要它来更新 FreeBSD。

在 2016 年第一季度，ELF 工具链工具已更新为上游 Subversion 修订版 3400 的快照，这接近于 0.7.1 版本。其他 bug 修复已经提交到 FreeBSD 并随后合并到上游仓库。

ELF 工具链的 elfcopy(1) 现在默认安装为 objcopy(1)，因为它是基本系统和 Ports 的可行替代品。

对 elfcopy(1)、readelf(1) 和 elfdump(1) 工具做出了显著改进，包括更好的 MIPS、RISC-V 和 AArch64 支持。

此项目由 FreeBSD 基金会赞助。

#### 待办事项

1. 修复通过模糊输入工具发现的问题。
2. 添加对独立调试文件的自动支持。
3. 调查替代的 objdump、ld 和 as 实现。

### [原生 PCIe HotPlug 支持](https://www.freebsd.org/status/report-2016-01-2016-03.html#Native-PCIe-HotPlug)

| 链接                                                             |
| -------------------------------------------------------------- |
| [原生 PCIe 热插拔支持](https://github.com/bsdjhb/freebsd/tree/pci_hp) |

联系方式：John Baldwin <<jhb@FreeBSD.org>>

一个新的原生 PCIe 热插拔支持实现已在上述 URL 中提供。许多新代码位于 PCI-PCI 桥接驱动程序中，以处理热插拔事件并管理 PCIe 插槽寄存器。分支中的其他更改包括向 devctl(8) 添加新的重新扫描和删除命令，以及对 PCI 总线重新扫描的支持。

当前实现已在具有 ExpressCard 插槽的系统上进行了测试，但还需要更多的测试，特别是在具有其他 PCIe 热插拔功能的系统上，如机械锁、注意按钮、指示灯等。

#### 待办事项

1. 将分支拆分为单独的逻辑更改，以便作为提交候选。
2. 额外的测试。

### [更新 GDB](https://www.freebsd.org/status/report-2016-01-2016-03.html#Updates-to-GDB)

联系方式：John Baldwin <<jhb@FreeBSD.org>>

新的线程目标直接使用 ptrace(2) 已被提交到上游并包含在 GDB 7.11 中。该 Port 也已更新为 GDB 7.11。

#### 待办事项

1. 查明为什么 powerpc kgdb 目标无法在初始框架之后展开栈。
2. 为更多平台（arm、mips、aarch64）添加对用户空间和 kgdb 的上游 gdb 支持。
3. 添加对调试 powerpc 向量寄存器的支持。
4. 添加对捕获系统调用的支持。
5. 添加对 `$_siginfo` 的支持。
6. 添加通过 `info auxv` 获取 ELF auxv 数据的支持。
7. 实现 `info os` 命令。
8. 为 FreeBSD 实现 gdbserver。

### [使用 lld，LLVM 链接器，来链接 FreeBSD](https://www.freebsd.org/status/report-2016-01-2016-03.html#Using-lld,-the-LLVM-Linker,-to-Link-FreeBSD)

| 链接                                                                                             |
| ---------------------------------------------------------------------------------------------- |
| [FreeBSD lld Wiki 页面](https://wiki.freebsd.org/LLD)                                            |
| [FreeBSD/amd64 使用 lld 链接状态报告](http://lists.llvm.org/pipermail/llvm-dev/2016-March/096449.html) |

联系方式：Rafael Espíndola <<rafael.espindola@gmail.com>> 联系方式：Davide Italiano <<davide@FreeBSD.org>> 联系方式：Ed Maste <<emaste@FreeBSD.org>>

lld 是 LLVM 项目中的链接器。它旨在成为一个高性能链接器，支持 ELF、COFF 和 Mach-O 对象格式。在可能的情况下，lld 保持与现有链接器（GNU BFD ld 和 gold）的命令行和功能兼容，但 lld 的作者在某些情况下不受严格兼容性的限制，特别是当这会影响性能或期望功能时。

在 2016 年第一季度，上游 lld 项目在增强 lld 的 ELF 支持方面取得了显著进展。lld ELF 链接器能够在 FreeBSD/amd64 上自托管，并且能够链接许多测试应用程序。

本季度上游开发的亮点包括：

* lld 增加了链接时间优化（LTO）支持，并且能够链接带有 LTO 的 Clang
* 重构了重定位代码，以提高可维护性
* 改进了链接器脚本支持，包括更好的诊断信息
* 在 x86\_64、AArch64 和 MIPS 支持方面进行了许多 bug 修复

当前，lld 缺乏全面的链接器脚本表达式评估支持，因此还不能用于链接 FreeBSD 内核。它也缺少版本化符号支持，并且未实现 FreeBSD 启动加载器组件中使用的一些选项。

Ed 一直在运行 FreeBSD/amd64 的实验性世界构建，将 lld 安装替换 ld.bfd 作为链接器。在当前功能缺口的解决方法下（使用 WITHOUT\_SYMVER 选项禁用符号版本控制使用，并用 GNU ld 链接加载器组件），lld 现在能够链接一个正常工作的 FreeBSD 用户空间。

此项目部分由 FreeBSD 基金会赞助。

#### 待办事项

1. 在 llvm-devel（以后是 llvm）Port 中默认启用 lld 选项进行测试。
2. 在上游 lld 项目中开发符号版本支持和链接器脚本表达式改进。
3. 为剩余的 FreeBSD 架构添加或改进支持。
4. 将更新的 lld 快照导入到供应商区域，添加构建基础设施并将其连接到世界构建，安装为 ld.lld。
5. 请求一个 Port 实验运行，使用 /usr/bin/ld 作为 ld.lld 的符号链接。
6. 进行广泛测试。

## [Ports](https://www.freebsd.org/status/report-2016-01-2016-03.html)

### [GitLab Port](https://www.freebsd.org/status/report-2016-01-2016-03.html#GitLab-Port)

联系方式：Torsten Zühlsdorff <<ports@toco-domains.de>>

在近一年的工作后，GitLab 8.5.5 已被提交到 Ports 中。感谢众多参与此项目的人！由于 GitLab 是一个快速发展的项目，因此我们也在持续工作，以保持与上游同步。祝你使用愉快！

### [FreeBSD 上的 GNOME](https://www.freebsd.org/status/report-2016-01-2016-03.html#GNOME-on-FreeBSD)

| 链接                                                                                                             |
| -------------------------------------------------------------------------------------------------------------- |
| [FreeBSD GNOME 网站](http://www.freebsd.org/gnome)                                                               |
| [开发存储库](https://github.com/FreeBSD/freebsd-ports-gnome)                                                        |
| [上游构建机器人](https://wiki.gnome.org/Projects/Jhbuild/FreeBSD)                                                     |
| [USE\_GNOME Port 开发者手册章节](https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/using-gnome.html) |

联系方式：FreeBSD GNOME 团队 <<freebsd-gnome@FreeBSD.org>>

FreeBSD GNOME 团队维护 GNOME、MATE 和 CINNAMON 桌面环境以及 FreeBSD 上的图形用户界面。GNOME 3 是 GNU 项目的一部分。MATE 是 GNOME 2 桌面的一个分支。CINNAMON 是一个使用 GNOME 3 技术但具有 GNOME 2 外观和感觉的桌面环境。

本季度，GNOME 3.18 和 MATE 1.12 已被提交到 Ports。

已用更简单的 `Uses/gnome.mk` 和 `Uses/mate.mk` 风格替换了 `bsd.gnome.mk` 和 `bsd.mate.mk` 框架。

#### 待办事项

1. 跟踪 MATE 1.13，这是将成为 MATE 1.14 的开发版本。
2. 已开始对 GNOME 3.20 进行移植。
3. 我们的开发树中已经有 Cinnamon 2.8，但在提交到 Port 之前，我们没有足够的时间进行彻底的测试和修复。如果你有兴趣提供帮助或接管 Cinnamon 的维护，请告诉我们。

### [FreeBSD 上的 KDE](https://www.freebsd.org/status/report-2016-01-2016-03.html#KDE-on-FreeBSD)

| 链接                                                                                       |
| ---------------------------------------------------------------------------------------- |
| [FreeBSD 上的 KDE 网站](https://freebsd.kde.org/)                                            |
| [实验性的 KDE Port 暂存区](https://freebsd.kde.org/area51.php)                                  |
| [FreeBSD 上的 KDE Wiki](https://wiki.freebsd.org/KDE)                                      |
| [KDE/FreeBSD 邮件列表](https://mail.kde.org/mailman/listinfo/kde-freebsd)                    |
| [集成 KDE Frameworks 5 和 Plasma 5 的开发存储库](http://src.mouf.net/area51/log/branches/plasma5) |

联系方式：KDE on FreeBSD 团队 <<kde@FreeBSD.org>>

KDE on FreeBSD 团队专注于打包和确保 KDE 和 Qt 在 FreeBSD 上的体验尽可能优秀。

尽管本季度的更新列表较上一个季度较短，但团队仍然很忙，KDE Frameworks 5 和 Plasma 5 的工作继续进行。

Tobias Berner 一直推动 KDE Frameworks 5 和 Plasma 5 的工作，他收到了 KDE 的提交权限，并已通过将 FreeBSD 上游提交到多个 KDE 存储库。另一个团队亮点是在今年初，向我们的实验存储库重新添加了一个提交者：Adriaan de Groot，这位长期的 KDE 贡献者曾在我们团队成立近十年前，负责 KDE 和 FreeBSD 的工作。欢迎回来，Ade！

本季度，以下重要更新已被提交到 Ports。在许多情况下，我们还为上游项目贡献了补丁。

* CMake 3.4.2 和 3.5.0
* Calligra 2.9.11，集成工作应用套件的最新版本。自 2.9.10 起，我们已经与上游发布保持同步。
* KDE Telepathy 更新为 0.9.0，Telepathy-Qt4 更新为 0.9.6.1，最新的上游版本。
* Qt 5 Port 终于更新到 5.5.1，这是当时的最新稳定版本。
* 为 KDE Frameworks 5 和 Plasma 5 做准备的第一次提交 [已提交到 Ports](https://svnweb.freebsd.org/changeset/ports/411156)。

目前，我们的实验性存储库中正在进行 Qt 5.6.0 的工作。撰写本文时，它还包含 KDE Frameworks 5.20.0、Plasma 5.6.1 和 KDE Applications 16.03.80。

有兴趣测试这些 Port 的用户，欢迎按照 [我们网站](https://freebsd.kde.org/area51.php) 中的说明进行操作，并将结果报告给我们的邮件列表。Qt5 5.6.0 在我们的 qt-5.6 分支中，Plasma 5 和其他内容在 plasma5 分支中。

#### 待办事项

1. 将 KDE Frameworks 5 和 Plasma 5 Port 提交到 Ports。
2. 提交当前在我们实验存储库中开发的 DigiKam 4.14.0 更新。

### [淘汰 Rails 3](https://www.freebsd.org/status/report-2016-01-2016-03.html#Obsoleting-Rails-3)

联系方式：Torsten Zühlsdorff <<ports@toco-domains.de>>

Ruby on Rails 是 Ports 中大多数 rubygem 的基础。目前，版本 3.2 和 4.2 共存，但由于 Rails 3.2 即将停止支持，现在是时候进行切换了。

目前正在进行的工作是将 Rails 3.2 从 Ports 中移除。虽然许多 gem 已经与新版本兼容，但仍有一些例外。例如，www/redmine 需要进行大规模更新（目前正在测试中），因为它依赖于依赖 Rails 3.2 的 gem。

如果你希望帮助移植或进行测试，请随时联系我们或邮件列表 <ruby@FreeBSD.org>。

### [Ports](https://www.freebsd.org/status/report-2016-01-2016-03.html#Ports-Collection)

| 链接                                                                        |
| ------------------------------------------------------------------------- |
| <http://www.freebsd.org/ports/>                                           |
| <http://www.freebsd.org/doc/en_US.ISO8859-1/articles/contributing-ports/> |
| <http://portsmon.freebsd.org/index.html>                                  |
| <http://www.freebsd.org/portmgr/index.html>                               |
| <http://www.facebook.com/portmgr>                                         |

联系方式：Frederic Culot <<portmgr-secretary@FreeBSD.org>>\
联系方式：FreeBSD Ports 管理团队 <<portmgr@FreeBSD.org>>

截至第一季度末，Ports 包含超过 25,000 个 Port，PR 数量低于 1,900。Ports 的活动保持稳定，约 120 名活跃的提交者完成了近 7,000 次提交。

在问题报告方面，上一季度观察到的良好趋势得到了确认，第一季度修复的 PR 数量再次大幅增加。实际上，近 2,400 个报告已被修复，这使我们成功将打开的 PR 数量降至 2,000 以下。

在第一季度，三名提交者的提交权限被暂时保管，原因是超过 18 个月未活动（milki、brian），或根据提交者请求（mmoll）。我们迎来了一位回归提交者（fluffy），他的提交权限已恢复。两位新开发者被授予了 Port 提交权限（Olivier Cochard-Labbe 和 Christoph Moench-Tegeder）。

在管理方面，我们很高兴欢迎 miwi 重返 portmgr 团队。

在 QA 方面，进行了 39 次实验运行（exp-run），以验证敏感更新或清理操作。最显著的变化可能是删除了现在不再需要的 ${PORTSDIR}，在 Makefile 中指定依赖项时不再使用（参见 20160402 的 /usr/ports/CHANGES 条目）。其他值得注意的变化包括 ruby 2.3 的更新，ruby-gems 更新到 2.5.1，CMake 更新到 3.5.0，clang 更新到 3.8.0-r258968，Qt5 更新到 5.5.1，Gnome 更新到 3.18，boost 更新到 1.60.0，基础库中的 libc++ 更新到 3.8.0 版本，且默认启用 x86 上的 LLVM libunwind。CentOS Port 也已更新。一些基础设施变化包括从 bsd.gnome.mk 和 bsd.mate.mk 切换到更简单的 Uses/gnome.mk 和 Uses/mate.mk。此外，还做了一些工作，旨在通过减少依赖计算和整体开销来改进 poudriere 构建。

#### 待办事项

1. 我们想提醒大家，Ports 是由志愿者构建和运行的，任何帮助都将受到热烈欢迎。第一季度，我们在 Port 方面投入了大量工作，这使我们大大减少了待处理问题报告的数量，同时也改进了 Port 基础设施。感谢所有贡献者！

## [文档](https://www.freebsd.org/status/report-2016-01-2016-03.html#Documentation)

### [新 FreeBSD Mastery 书籍](https://www.freebsd.org/status/report-2016-01-2016-03.html#New-FreeBSD-Mastery-Books)

| 链接                                                                                      |
| --------------------------------------------------------------------------------------- |
| [FreeBSD Mastery: Specialty Filesystems](https://www.michaelwlucas.com/nonfiction/fmsf) |
| [FreeBSD Mastery: Advanced ZFS](https://www.michaelwlucas.com/nonfiction/fmaz)          |
| [Tilted Windmill Press](https://www.tiltedwindmillpress.com/)                           |

联系方式：Michael Lucas <<mwlucas@michaelwlucas.com>>\
联系方式：Allan Jude <<allanjude@FreeBSD.org>>

两本新书 *FreeBSD Mastery* 现已发布：

\*Michael W. Lucas 编写的《FreeBSD Mastery: Specialty Filesystems》，以及由 Lucas 和 Allan Jude 合著的期待已久的《FreeBSD Mastery: Advanced ZFS》。

这两本书现在都有印刷版和电子书版。

包含所有 FreeBSD Mastery 书籍的捆绑包可以通过 [tiltedwindmillpress.com](https://www.tiltedwindmillpress.com/) 获得折扣。

#### 待办事项

1. 撰写更多书籍！

### [西班牙语 FAQ 和中文 Porter 手册翻译](https://www.freebsd.org/status/report-2016-01-2016-03.html#Spanish-FAQ-and-Chinese-Porter's-Handbook-Translations)

| 链接                                                                                         |
| ------------------------------------------------------------------------------------------ |
| [FreeBSD 9.X 和 10.X 常见问题解答](https://www.freebsd.org/doc/es_ES.ISO8859-1/books/faq/)        |
| [FreeBSD Porter 手册](https://www.freebsd.org/doc/zh_TW.UTF-8/books/porters-handbook/)       |
| [FreeBSD 翻译邮件列表](https://lists.freebsd.org/pipermail/freebsd-translators/)                 |
| [PO 翻译](https://www.freebsd.org/doc/en_US.ISO8859-1/books/fdp-primer/po-translations.html) |
| [FreeBSD 文档项目新贡献者入门指南](https://www.freebsd.org/doc/en_US.ISO8859-1/books/fdp-primer/)      |

联系方式：Federico Caminiti <<demian.fc@gmail.com>>\
联系方式：Carlos J Puga Medina <<cpm@fbsd.es>>\
联系方式：Ruey-Cherng Yu <<raycherng@gmail.com>>\
联系方式：Warren Block <<wblock@FreeBSD.org>>

Federico Caminiti 完成了完全新的西班牙语版本翻译，涉及了 31,000 字的 [FAQ](https://www.freebsd.org/doc/en_US.ISO8859-1/books/faq/)，并在 Carlos J Puga Medina 的编辑帮助下完成了这项工作。

这一里程碑式的成就标志着首次使用新的 PO 翻译系统来翻译整本书！

Ruey-Cherng Yu 开始进行一项雄心勃勃的传统中文（zh\_TW）翻译，内容是 64,000 字的 [Porter 手册](https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/)。目前大约翻译了书中的一半字符串。

#### 待办事项

1. 帮助将 FreeBSD 文档翻译成西班牙语：[freebsd-translators 邮件列表的开始](https://lists.freebsd.org/pipermail/freebsd-translators/2016-March/000113.html)。
2. 帮助将 FreeBSD 文档翻译成中文或其他语言。

### [FreeBSD 德文文档项目](https://www.freebsd.org/status/report-2016-01-2016-03.html#The-FreeBSD-German-Documentation-Project)

| 链接                                                                  |
| ------------------------------------------------------------------- |
| [FreeBSD 德文文档项目主页](https://people.freebsd.org/~jkois/FreeBSDde/de/) |

联系方式：Björn Heidotting <<bhd@FreeBSD.org>>\
联系方式：Benedict Reuschling <<bcr@FreeBSD.org>>\
联系方式：Johann Kois <<jkois@FreeBSD.org>>

FreeBSD 德文文档项目将 FreeBSD 的文档（手册、文章、网站等）翻译成德语。

在 Björn Heidotting 的不懈努力下，我们在追赶德文手册的翻译进度方面取得了巨大进展。Benedict 帮助使用 FreeBSD 的审查系统 Phabricator 审核了这些更改，提供了很大的帮助。现在，我们已经将以下手册章节与英文树中的最新版本同步：

* 文件系统
* 内核配置
* Ports
* x11

我们努力保持良好的工作，同时也在探索如 PO/gettext 系统等新的翻译方式。我们始终欢迎有兴趣翻译小部分内容或整个文档的志愿者。翻译过程相对简单，贡献者不需要知道太多就能开始。FreeBSD 德文文档团队的成员也愿意指导有兴趣帮助的人。

#### 待办事项

1. 翻译更多文档。

## [杂项](https://www.freebsd.org/status/report-2016-01-2016-03.html#Miscellaneous)

### [FreeBSD 构建](https://www.freebsd.org/status/report-2016-01-2016-03.html#FreeBSD-Build)

联系方式：Bryan Drewery <<bdrewery@FreeBSD.org>>

FreeBSD 主干上的 buildworld 改进持续进行。一些亮点包括：

* 在 r296668 中将 WITH\_FAST\_DEPEND 设置为默认选项，并在 r297434 中将其变为唯一选项。新的依赖代码避免了 make depend 树遍历，并通过编译的副作用生成 .depend 文件。这是通过使用编译器的 -MF 标志完成的，从而使构建速度提高了 15-35%。
* [PR 196193](http://bugs.freebsd.org/196193)：修复了 WITHOUT\_CROSS\_COMPILER，正确使用 --sysroot 使得该选项在更多情况下有效。尽管在进行重大编译器升级时仍然不安全，但计划进一步改进。
* WITHOUT\_TOOLCHAIN 现在可以正确构建。

该项目由 EMC / Isilon Storage Division 赞助。

#### 待办事项

1. 有选择地跳过 buildworld 的引导编译器阶段。
2. 跳过 make obj 树遍历。
3. 在 buildworld 中启用 WITH\_META\_MODE，以通过 filemon(4) 和 bmake 的 .MAKE.MODE=meta 提供可靠的增量构建。这不应与之前名为 WITH\_META\_MODE 的 WITH\_DIRDEPS\_BUILD 混淆，后者是一个完全不同的构建系统，曾在 BSDCan 2014 上由 Simon Gerraty 展示。

### [树莓派上的 Qt 5.6](https://www.freebsd.org/status/report-2016-01-2016-03.html#Qt-5.6-on-Raspberry-Pi)

| 链接                                              |
| ----------------------------------------------- |
| [树莓派上的 Qt 5.6](http://kernelnomicon.org/?p=598) |

联系方式：Oleksandr Tymoshenko <<gonzo@FreeBSD.org>>

Qt 5.6 是构建嵌入式 GUI 应用程序的一个极好的框架，因此当 Qt 5.6 发布时，将其移植到树莓派上是自然而然的选择。目前，Port 中的 Qt 支持非常依赖 Xorg，因此作为概念验证，我创建了一个实验性的 qt56-base 和 qt56-multimedia。

qt56-base 可以配置为通用的 ARM 设备，并使用 scfb 视频驱动程序，特别是为树莓派配置时，它支持 EGLFS 模式，并提供硬件 OpenGL 加速。

#### 待办事项

1. 检查如何将嵌入式用例适配到当前的 bsd.qt.mk，或者是否需要引入新的 Port。

### [FreeBSD 基金会](https://www.freebsd.org/status/report-2016-01-2016-03.html#The-FreeBSD-Foundation)

| 链接                                                                                                              |
| --------------------------------------------------------------------------------------------------------------- |
| [FreeBSD 基金会网站](https://www.freebsdfoundation.org/)                                                             |
| [捐赠者](https://www.freebsdfoundation.org/donors/)                                                                |
| [教育与宣传资料](https://www.freebsdfoundation.org/what-we-do/education-advocacy/)                                     |
| [FreeBSD 面孔：Scott Long](https://www.freebsdfoundation.org/blog/faces-of-freebsd-2016-scott-long/)               |
| [FreeBSD 面孔：Sean Bruno](https://www.freebsdfoundation.org/blog/faces-of-freebsd-2016-sean-bruno/)               |
| [FreeBSD 与 ZFS 的长期关系](https://www.freebsdfoundation.org/blog/freebsd-and-zfs/)                                  |
| [FreeBSD RISC-V 工作](https://www.freebsdfoundation.org/blog/initial-freebsd-risc-v-architecture-port-committed/) |
| [Mellanox 与 NetFlix 的合作](http://www.mellanox.com/page/press_release_item?id=1688)                               |
| [FreeBSD – 为社区提供服务的力量](https://chemnitzer.linux-tage.de/2016/de/programm/beitrag/194)                           |
| [FreeBSD 基金会的新面貌](https://www.freebsdfoundation.org/blog/introducing-a-new-look-for-the-foundation/)            |

联系人：Deb Goodkin <<deb@FreeBSDFoundation.org>>

FreeBSD 基金会是一家 501(c)(3) 非营利组织，致力于支持和推广全球的 FreeBSD 项目和社区。资金来自个人和企业捐赠，用于赞助和管理开发项目、会议和开发者峰会，并为 FreeBSD 开发者提供旅行补助。基金会购买硬件以改进和维护 FreeBSD 基础设施，并发布 FreeBSD 白皮书和营销材料，旨在推广、教育和倡导 FreeBSD 项目。基金会还代表 FreeBSD 项目执行合同、许可协议和其他需要认证法律实体的法律事务。

以下是我们在上个季度帮助 FreeBSD 所做的一些亮点：

#### 筹款工作

我们在上个季度从个人和企业捐赠者筹集了 204,000 美元。感谢今年所有做出捐赠的人！[捐赠者名单](https://www.freebsdfoundation.org/donors/) 可供查看。

#### 操作系统改进

基金会通过赞助经提案提交流程批准的软件开发项目，以及我们的三位软件开发人员员工，改进了 FreeBSD。上个季度启动了两个基金会赞助的项目，第一个是改善 vnet 网络堆栈虚拟化基础设施的稳定性，第二个是 FreeBSD/arm64 移植项目的第二阶段。

基金会员工负责了许多改动，其中一些显著项目包括：进程共享 pthread 锁、地址映射随机化、磁盘 I/O 带宽限制、将 libunwind 移植到 FreeBSD/arm、autofs 自动挂载守护进程的 bug 修复、更新版本的 ELF 工具链、lld 链接器的调查、改进的 x86 硬件支持，以及虚拟机子系统的稳定性改进。几个项目在本季度报告的其他部分有详细描述。

#### 版本工程

基金会员工兼版本工程师 Glen Barber 负责使用 pkg(8) 打包基本系统，将调试文件从默认基本系统中分离，以便在安装时可以选择或取消选择，支持 FreeBSD 10.3 准时发布的准备和测试，并生成 11-CURRENT 和 10-STABLE 快照构建。

#### FreeBSD 宣传

我们的市场营销总监 Anne Dickison 重点制作和更新营销材料，推广和普及 FreeBSD。[这些材料可供](https://www.freebsdfoundation.org/what-we-do/education-advocacy/) FreeBSD 支持者在会议和活动中分发，帮助推广 FreeBSD。她还通过社交媒体、博客文章和文章来推广 FreeBSD 工作。

上个季度，我们继续开展“FreeBSD 面孔”系列，发布了关于 [Scott Long](https://www.freebsdfoundation.org/blog/faces-of-freebsd-2016-scott-long/) 和 [Sean Bruno](https://www.freebsdfoundation.org/blog/faces-of-freebsd-2016-sean-bruno/) 的故事。这是一个让人们了解 FreeBSD 社区中的人物和贡献者的机会。

我们开始更新 FreeBSD 10.X 宣传册，以包含 10.3 版本的新特性。

我们喜欢收到成功使用 FreeBSD 的公司故事。上个季度，Chelsio 和 Acceleration Systems 提供了推荐信。

由于 ZFS 频频上头条，我们写了一篇博客文章，讲述了 [FreeBSD 与 ZFS 的长期关系](https://www.freebsdfoundation.org/blog/freebsd-and-zfs/)。

我们也帮助推广了 [FreeBSD RISC-V](https://www.freebsdfoundation.org/blog/initial-freebsd-risc-v-architecture-port-committed/) 项目的工作。

同时，我们也为 Mellanox 提供了支持，帮助他们发布了与 NetFlix 合作的新闻稿：[Mellanox 与 NetFlix 的合作](http://www.mellanox.com/page/press_release_item?id=1688)。

#### 会议与活动

FreeBSD 基金会赞助了全球范围内的多个会议、活动和峰会。这些活动可以是与 BSD 相关的、开源的，或是面向少数群体的技术活动。我们为 BSD 相关的主要会议如 BSDCan、AsiaBSDCon 和 EuroBSDCon 提供财政支持，并为像 BSDays、FreeBSD 峰会、FreeBSD 工作坊、营地和黑客松等小型活动提供财政和/或其他支持。对于开源会议，当我们能够获得免费非营利展位时，我们也会参加。

年初，Ed Maste、Benedict Reuschling 和 George Neville-Neil 前往欧洲最大的开源会议 FOSDEM，推广和演讲 FreeBSD。我们的项目开发总监 Ed 有机会与其他基于 FreeBSD 的项目开发者和不同的人员讨论 FreeBSD 可复现构建的问题。

Dru Lavigne 和 Deb Goodkin 在加利福尼亚州帕萨迪纳的 SCALE 大会上推广 FreeBSD。Dru 进行了一场名为“像埃及人一样写文档”的演讲。我们是 AsiaBSDCon 的黄金赞助商，五名基金会成员参加了此次会议。Kirk McKusick 教授了两天的 FreeBSD 内核教程，并发表了关于 BSD 文件系统历史的演讲。Dru Lavigne 和 Benedict Reuschling 举办了文档教程。基金会董事会成员 佐藤広生 和 George Neville-Neil 帮助组织了会议。BSDnow\.tv 在 AsiaBSDCon 上采访了 Benedict，讨论他作为新任基金会董事会成员的角色，以及基金会的工作。

我们规划并组织了与 USENIX FAST 会议联合举办的首届 FreeBSD 存储峰会，由我们的总裁兼创始人 Justin Gibbs 主持，超过 50 名参与者在此聚集，共同探讨技术焦点话题。Benedict 在欧洲推广 FreeBSD，他还参加了德国开姆尼茨的 Linuxtage 会议，并发表了关于 FreeBSD 的演讲（德语）：“FreeBSD — 为社区提供服务的力量”（[FreeBSD — The Power to Serve a Community](https://chemnitzer.linux-tage.de/2016/de/programm/beitrag/194)）。

基金会承诺成为 BSDCan 和即将于 4 月在德国埃森举办的黑客松/开发者峰会的黄金赞助商。

#### 法律/FreeBSD 知识产权

基金会持有 FreeBSD 商标，保护它是我们的责任。我们继续审查使用商标的请求。

#### FreeBSD 社区参与

行为准则 — 我们的市场营销总监 Anne Dickison 一直在监督项目行为准则的重写工作，以帮助创建一个安全、包容和欢迎的社区。

我们一直在与其他开源社区合作，寻求帮助以促进我们的多样性工作，并帮助我们实现创建一个安全、包容和欢迎的 FreeBSD 社区的目标。

为了继续我们的多样性努力，我们与女性技术团体建立联系，共同探讨如何吸引更多女性参与 FreeBSD，并提供 FreeBSD 入门工作坊。

我们还与多个商业供应商进行了会议，促进与项目的合作。这些会议介绍了项目的组织结构，以及公司如何获得帮助、为项目做出贡献、推广其使用 FreeBSD，并向我们反馈我们为筹款工作做出的努力。

基金会的新网站和新标志已上线，标志着基金会身份的不断演变，并更好地为 FreeBSD 项目和社区服务。了解我们的 [新面貌](https://www.freebsdfoundation.org/blog/introducing-a-new-look-for-the-foundation/)。
