由于我们依然处于这片广阔互联网海洋中的岛屿上,我们写下这封瓶中信,向你告知我们已完成的工作以及前方的任务。这些我们用心思和双手创造的成果,旨在供所有人分享——希望一切有意愿的人都能加入我们,一道做出改进。在今天的消息中,以下内容将被涵盖,但这并非一个完整或有序的列表:
i386 PAE 页表支持最高 24GB 内存、持续集成工作、ENA 驱动程序更新和图形更新、ARM 增强功能(如 RochChip、Marvell 8K 和 Broadcom 支持),以及更多 DTS 文件、更多 Capsicum 功能、改进 pfsync 等, 你可以自己阅读更多内容。
此外,我们还带来了一些下游岛屿的消息,特别是 nosh 项目、HardenedBSD、ClonOS 以及波兰 BSD 用户组。
我们,带有些许自私之心地鼓励那些给我们带来好消息的人,请尽早提交你的贡献,而不是等到最后期限临近时才提交。同时,我们也鼓励任何愿意传播好消息的人,请阅读我们感兴趣的提交部分,了解更多提交细节。
衷心祝福, Daniel Ebdrup,代表状态报告团队。
来自各个官方和半官方团队的条目,详见 管理页面。
联系人:Jenkins 管理员 <jenkins-admin@FreeBSD.org > 联系人:許立文 <lwhsu@FreeBSD.org >
FreeBSD CI 团队维护着 FreeBSD 项目的持续集成系统及相关任务。该 CI 系统定期检查提交到项目的 Subversion 仓库中的更改是否能成功构建,并对结果进行各种测试和分析。构建任务的结果会存档在工件服务器中,供进一步的测试和调试使用。
CI 团队成员会检查失败的构建和不稳定的测试,并与该领域的专家合作,修复代码或构建和测试基础设施,以提高 FreeBSD 基本系统的软件质量。CI 团队成员及 FreeBSD 基金会员工 Li-Wen 是 Jenkins 和相关 Port 的维护者。
在本季度,我们致力于扩展测试执行环境,以提高覆盖率,暂时禁用不稳定的测试用例(并打开工单与领域专家合作)。有关更多信息,请参阅与 freebsd-testing@ 相关的工单。
除此之外,从本季度开始,我们还与外部项目合作,扩展其 CI 系统,以涵盖 FreeBSD。请查看 "HostedCI" 维基页面以了解更多信息。
正在进行的工作:
修复失败的测试用例和构建
添加针对 -CURRENT 的 drm Port 构建测试
为选定项目分支添加测试,例如:clang800-import
在裸机硬件上实施自动化测试
计划嵌入式测试平台
计划运行 ztest 和网络堆栈测试
联系人:FreeBSD 核心团队 <core@FreeBSD.org >
自上次季度报告以来的重要事件:
Yuri Pankov (yuripv@) 在 Konstantin Belousov (kib@) 的指导下被授予源代码提交权限。
核心团队同意 portmgr@ 可以强制执行 12 个月的提交权限过期期限,适用于 Port 提交者。
Thomas Munro (tmunro@) 在 Mateusz Guzik (mgj@) 的指导下以及 Allan Jude (allanjude@) 的共同指导下被授予源代码提交权限。
随着 FCP-0101 的批准,10/100 以太网驱动程序将被弃用。
核心团队批准了将 Remko Lodder (remko@) 提升为副安全官。
联系人:Deb Goodkin <deb@FreeBSDFoundation.org >
FreeBSD 基金会是一家 501(c)(3) 非营利组织,致力于支持和推广全球的 FreeBSD 项目和社区。资金来自个人和企业捐款,主要用于赞助和管理软件开发项目、会议和开发者峰会,并为 FreeBSD 贡献者提供旅行赞助。基金会购买并支持硬件,以改进和维护 FreeBSD 基础设施,提供资源来改善安全性、质量保证和发布工程工作;发布市场推广材料以推广、教育和倡导 FreeBSD 项目;促进商业厂商与 FreeBSD 开发者之间的合作;最后,代表 FreeBSD 项目执行合同、许可证协议及其他需要合法实体的法律安排。
以下是我们上个季度为帮助 FreeBSD 所做的几项工作亮点:
作为一家 501(c)(3) 非营利组织,我们不直接支持商业用户,但我们与他们合作,了解他们的需求,并帮助促进与社区的合作。在上个季度,我们有机会在 10 月的 FreeBSD 开发者峰会和 MeetBSD 会议上与许多 FreeBSD 用户和支持者见面,此外还有定期的公司会议。这些面对面的会议为讨论问题点、确定他们如何回馈 FreeBSD、讨论他们希望支持的技术以及如何支持更多技术和产品提供了机会。
到去年年底,我们筹集了 130 余万美元,并且将 Juniper、奈飞、Facebook 和 Handshake.org 加入了基金会合作伙伴名单。 你可以在这里查看完整名单 https://www.freebsdfoundation.org/donors/。我们仍在最终确定总捐款额,并将在 2 月初报告最终数字。感谢所有在 2018 年支持我们努力的人。
在 2018 年第四季度,六位作者向 FreeBSD 开发树提交了总共 315 次提交,这些提交被确定为基金会赞助的工作。这些作者包括基金会员工 Konstantin Belousov、Glen Barber、許立文和 Ed Maste,以及赞助项目的 Mateusz Guzik 和 Mark Johnston。
Mateusz 在这一季度的工作包括识别并修复 FreeBSD 内核和系统库中的瓶颈。FreeBSD 基本系统构建以及通过 Poudriere 构建的 Port 被用作激励案例。
Mark 添加了一个内核级的 Intel CPU 微码加载器。这简化并增强了微码更新的稳健性,随着针对推测执行漏洞的缓解措施通过微码交付,这变得越来越重要。
Mark 还修复了与基本系统工具中 Capsicum 支持相关的一些问题,实施了多个 NUMA 增强和 bug 修复,并修复了多个高优先级的内核错误。
Ed 向 LLVM 的 lld 链接器和 ELF 工具链组件提交了大量工具链修复。
Ed 与几位 FreeBSD 开发者合作,处理了 FreeBSD 12.0 版中的 OpenSSL 1.1.1 导入工作,包括为兼容性整合 OpenSSH 和 NTP 的更改。Ed 还添加了构建时选项,用于启用用户空间的 retpoline 以及启用 BIND_NOW,这可以作为漏洞缓解策略的一部分。
基金会提供了一位全职员工,专门从事改进我们的自动化测试、持续集成和整体质量保证工作。
在 2018 年第四季度,基金会员工許立文持续改进了项目的 CI 基础设施,检查失败的构建和测试用例,并与项目中的其他团队合作,满足他们的测试需求。在这一期间,我们还与外部项目合作,改进它们在 FreeBSD 上的 CI。
请参阅本报告中的 FreeBSD CI 部分了解更多信息。
基金会提供了一名全职员工来领导发布工程工作。在过去五年中,这一工作提供了及时可靠的发布版本。在 2018 年第四季度,Glen Barber 领导 FreeBSD 发布工程团队继续推进 12.0-RELEASE 的工作,并于 12 月 11 日发布了正式公告。
有关更多信息,请参阅本报告中的 FreeBSD 发布工程团队部分。
基金会提供硬件和支持,以改善 FreeBSD 基础设施。在上个季度,我们继续支持位于全球各地的 FreeBSD 硬件。
我们大量的工作专注于为 FreeBSD 项目做宣传。这包括宣传其他人基于 FreeBSD 所做的工作;制作宣传材料,帮助人们了解 FreeBSD,并让使用 FreeBSD 或参与项目的路径变得更加便捷;参与并鼓励其他 FreeBSD 贡献者志愿参加 FreeBSD 活动、管理 FreeBSD 展台、以及进行 FreeBSD 演讲。
FreeBSD 基金会赞助了全球多个会议、活动和峰会。这些活动可能与 BSD、开源或面向弱势群体的技术相关。我们支持以 FreeBSD 为主题的活动,帮助提供分享知识的场所,推动项目合作,并促进开发者与商业用户之间的协作。这一切都有助于提供一个健康的生态系统。我们还支持非 FreeBSD 主题的活动,旨在推广并提高 FreeBSD 的知名度,增加 FreeBSD 在不同应用中的使用,吸引更多贡献者参与该项目。
我们上个季度所做的部分宣传与教育工作包括:
组织、赞助并在 2018 年 10 月的 FreeBSD 开发者峰会上发言(位于加利福尼亚州圣克拉拉)
在 2018 MeetBSD 会议上提供赞助并展出(位于加利福尼亚州圣克拉拉)
在北卡罗来纳州雷利市首次参加 All Things Open 展会
在田纳西州纳什维尔市的 LISA’ 18 展会上作为行业合作伙伴赞助并展出
作为行业合作伙伴赞助并参与 USENIX OSDI ‘18 展会(位于加利福尼亚州卡尔斯巴德)
在科罗拉多州莱克伍德市的 Rocky Mountain Women in Computing 庆祝活动中举办了 FreeBSD 入门研讨会,并进行了“为什么你应该贡献给 FreeBSD”演讲
我们继续制作 FreeBSD 宣传材料,帮助人们在全球范围内推广 FreeBSD。
可以在我们的月度通讯中查看会议总结和出行报告,了解更多关于我们的会议历程:https://www.freebsdfoundation.org/news-and-events/newsletter/
我们通过出版专业制作的《FreeBSD Journal》帮助世界了解 FreeBSD。我们最近宣布,《FreeBSD Journal》将从 2019 年 1/2 月期开始成为免费出版物。https://www.FreeBSDfoundation.org/journal/。
你可以在 https://www.FreeBSDfoundation.org/news-and-events/ 查看我们参加过的活动和即将举行的活动。
想回顾一下我们在 2018 年的所有工作,请参见年终视频:https://www.freebsdfoundation.org/blog/thank-you-for-supporting-freebsd/。
基金会持有 FreeBSD 商标,保护这些商标是我们的责任。我们还为核心团队提供法律支持,调查出现的相关问题。在上个季度,我们批准了 6 个使用商标的请求。请访问 http://www.FreeBSDfoundation.org 了解我们如何支持 FreeBSD 以及我们如何为你提供帮助!
联系人:FreeBSD 图形团队 <x11@freebsd.org >
联系人:Niclas Zeising <zeising@freebsd.org >
FreeBSD X11/图形团队负责维护 FreeBSD 图形栈的底层部分。包括图形驱动程序、图形库(如 MESA OpenGL 实现)、X.org xserver 及相关库和应用程序,以及 Wayland 和相关库和应用程序。
在第四季度,团队专注于为 FreeBSD 12.0 版本稳定图形驱动程序和 Port。图形驱动程序已经更新了 FreeBSD 11.2 和 FreeBSD 12.0 版本的新版本。Port 也进行了重命名,以便更清楚地显示每个 Port 在 FreeBSD 上运行的版本。我们还创建了一个新的元 Port graphics/drm-kmod
,它会根据 FreeBSD 版本和架构安装正确的驱动程序。未来推荐使用该方式来安装 FreeBSD 图形驱动程序。
DRM 驱动程序本身命名为 graphics/drm-current-kmod
和 graphics/drm-fbsd12.0-kmod
,分别适用于 CURRENT 和 12.0,这两个驱动程序都已经更新为使用 4.16 版本的 Linux 内核源。对于 FreeBSD 11.2,我们有 graphics/drm-fbsd11.2-kmod
,它使用 4.11 版本的 Linux 内核源。最后,我们创建了 graphics/drm-legacy-kmod
,它适用于 FreeBSD 12.0 和 CURRENT。这是 FreeBSD 基本系统中的旧版驱动程序的副本。此工作将使我们能够在未来从 CURRENT 中移除 drm2 代码,这计划在 2 月初进行。在此之后,drm2 代码仍会在基本系统中保留,因为 NVIDIA Tegra ARM 芯片存在未解决的依赖问题。其迁移计划预计在 2019 年第一季度完成。
已为 i386 和 PowerPC 64 位架构的 drm 内核驱动程序增加了支持,目前处于 alpha 阶段。
Wayland 已在 Ports 中默认启用,意味着所有软件包都构建为启用 Wayland 支持。这使得使用和测试 Wayland 变得更加容易。
内核驱动程序已加入 VMware 图形透传支持。然而,graphics/mesa-dri
仍然缺少对此的支持,因此目前无法开箱即用。
输入栈已更新,现在大部分内容与上游保持一致。Evdev 头文件已从 multimedia/v4l_compat
分离出来,形成了自己的 Port devel/evdev-proto
。这使得更新这些头文件并保持与上游同步变得更加容易。输入栈仍然是一个需要进一步改进的领域,以便让各种输入设备能更容易地与 X 和 Wayland 在 FreeBSD 上配合使用。
在此期间,我们举行了几次会议,会议记录已发送到公共的 x11@FreeBSD.org
邮件列表。
有兴趣帮助的人可以通过 x11@FreeBSD.org
邮件列表找到我们,或通过我们的 Gitter 聊天:https://gitter.im/FreeBSDDesktop/Lobby。我们还可以在 EFNet 的 #freebsd-xorg
频道找到。
我们也有一个 GitHub 团队区域,工作仓库可以在这里找到:https://github.com/FreeBSDDesktop
类别:团队
FreeBSD 发布工程团队负责为 FreeBSD 官方项目发布设置和发布发布计划,宣布代码冻结并维护相应的分支,此外还有其他工作。
在 2018 年第四季度,FreeBSD 发布工程团队继续推进 12.0-RELEASE 的工作。stable/12
分支在 10 月 19 日创建,随后开始了第一次 BETA 构建。由于加入了 12.0-BETA4,发布周期稍有延迟,此后 releng/12.0
分支在 11 月 16 日创建。
发布周期的其余部分在发布候选(RC)阶段相对顺利地进行,最终版本构建在 12 月 7 日开始,官方公告在 12 月 11 日发布。
在整个季度,多个开发快照构建发布了 head
和 stable/11
分支。
这些工作大部分由 FreeBSD 基金会赞助。
联系人:René Ladan <portmgr-secretary@FreeBSD.org >
联系人:FreeBSD Ports 管理团队 <portmgr@FreeBSD.org >
在过去的季度中,Ports 的数量略有下降,降至 32,900。在季度末,共有 2365 个未解决的 port PR,其中约 500 个未分配。上个季度共有 7333 次提交,来自 174 名提交者。这意味着解决的 port PR 数量比上个季度更多,提交次数大致保持不变。
在过去的季度,我们迎来了 Alexandre C. Guimarães (rigoletto@) 和 Vinícius Zavam (egypcio@)。Alberto Villa (avilla@)、Lars Thegler (lth@)、Dryice Dong Liu (dryice@)、Ion-Mihai Tetcu (itetcu@)、Gabor Pali (pgj@)、Tom Judge (tj@)、Ollivier Robert (roberto@) 和 Maxim Sobolev (sobomax@) 的 port 提交位已被暂时保管。
暂存的提交位数量比平时更多,因为 port 提交位的空闲超时从 18 个月改为 12 个月。
一些默认版本已经更改:
PHP 从 7.1 升级到 7.2
Perl5 从 5.26 升级到 5.28
Ruby 从 2.4 升级到 2.5
对于 LLVM,版本 7.0 现在作为默认版本。
其他重大变化包括:
info
文件现在像其他操作系统一样存储在目录 share/info
中。
现在可以并行安装 Port PyQt 。
由于 FreeBSD 10 已经结束生命周期,已从 Ports 中移除对该分支的支持。仍然需要 FreeBSD 10 支持的用户可以使用 RELEASE_10_EOL
标签。
USES=cmake
现在默认使用外包。
KDE 4 已结束生命周期,并已从 Ports 中移除。
像往常一样,antoine@ 本季度运行了 36 次实验性运行,以确保主要 Port 升级正确无误。
这些项目跨越多个类别,从内核和用户空间到 Ports 或外部项目。
联系人:Konstantin Belousov <kib@freebsd.org >
Skylake Xeons 在 4 层分页实现中增加了一项新功能,称为用户模式保护密钥(Usermode Protection Keys)。这是一个补充性的页面访问权限管理机制,提供了非常低的开销,用于按页禁用所有访问或仅禁用修改。
每个执行线程获得 16 个插槽,称为保护密钥,而每个用户空间页面映射都被标记为一个密钥。处理器提供了一个新的 32 位寄存器 PKRU,用于保存每个密钥的访问和修改禁用位,PKRU 寄存器会自动进行上下文切换,并由用户空间使用 RDPKRU 和 WRPKRU 指令进行管理。有关详细信息,请参见 Intel SDM rev. 68 Vol 3 4.6.2 保护密钥。
由于密钥索引必须始终指定,因此密钥零成为默认密钥,其权限很难修改,否则会破坏进程环境。其余的 15 个密钥可以使用,例如进程可以将一些敏感数据(如解码后的私钥)放入受密钥保护的区域,并且仅在需要时启用访问,而无需发出代价高昂的 mprotect(2)
系统调用。请注意,即使是内核访问,也会强制执行权限检查,因此其他线程的偷偷读取(read(2)
)也会受到相同权限检查的限制。
我为 amd64 pmap 实现了对该功能的支持,并为 64 位和 32 位进程提供了便捷的 libc 包装器。API 的原型如下,其使用应该从说明中可以显而易见。
该项目由 FreeBSD 基金会赞助。
联系人:Elena Mihailescu <elenamihailescu22@gmail.com > 联系人:Darius Mihai <dariusmihaim@gmail.com > 联系人:Sergiu Weisz <sergiu121@gmail.com > 联系人:Mihai Carabas <mihai@freebsd.org >
迁移功能利用保存/恢复功能将 bhyve 虚拟机从一个 FreeBSD 主机迁移到另一个 FreeBSD 主机。要迁移 bhyve 虚拟机,需要使用带有 -R 选项的 bhyve 工具,在目标主机上从共享的虚拟机镜像启动一个空的虚拟机,并指定源主机 IP 和用于监听迁移请求的端口。在源主机上,迁移通过执行带有 --migrate
或 --migrate-live
选项的 bhyvectl
命令启动,并指定目标主机的 IP 和用于发送消息的端口。
新增功能:
证明不能使用 FreeBSD 的写时复制机制实现实时迁移;
向 bhyvectl
添加 --migrate-live
选项;
在源主机和目标主机之间增加额外的消息交换,以确定迁移类型和轮次;
实现了用于实时迁移虚拟机的有线内存的脏位方法;
未来任务:
在每轮迁移后清除脏位;
扩展实时迁移到高内存段;
扩展实时迁移到未绑定的内存;
该项目由 Matthew Grooms 赞助。
联系人:Elena Mihailescu <elenamihailescu22@gmail.com > 联系人:Darius Mihai <dariusmihaim@gmail.com > 联系人:Sergiu Weisz <sergiu121@gmail.com > 联系人:Mihai Carabas <mihai@freebsd.org >
bhyve 的保存/恢复功能是一个添加到 FreeBSD/amd64 超级管理器 bhyve 的挂起和恢复设施。bhyvectl
工具用于将虚拟机状态保存为三个文件(一个用于虚拟机内存,一个用于设备和 CPU 状态,另一个用于恢复过程中使用的元数据)。要挂起 bhyve 虚拟机,必须使用 --suspend <state_file_name>
选项运行 bhyvectl
工具,并指定虚拟机名称。
要从检查点恢复 bhyve 虚拟机,只需在启动虚拟机时添加 -r
选项,并指定主状态文件(即为 bhyvectl
的 --suspend
选项提供的相同文件)。
新增功能:
改进定时器的保存和恢复状态功能;
修复与 AHCI 设备保存和恢复状态功能相关的同步问题;
为 Windows 虚拟机添加挂起/恢复支持;
重构保存和恢复代码 - 按字段逐个保存组件的状态。
未来任务:
在 Phabricator 上打开票务;
为 NVMe 添加挂起/恢复支持;
为 virtio-console 添加挂起/恢复支持;
为 virtio-scsi 添加挂起/恢复支持;
为 AMD CPU 添加 TSC 偏移支持以进行恢复;
该项目由 Matthew Grooms 和 iXsystems 赞助。
联系人:Mark Johnston <markj@FreeBSD.org >
联系人:Ed Maste <emaste@FreeBSD.org >
联系人:Mariusz Zaborski <oshogbo@FreeBSD.org >
Capsicum 的主要改进是引入了一个名为 Casper 的服务 fileargs
,这为需要访问文件系统的工具提供了一种简便的沙箱化方式。应用程序如 brandelf(1)
、wc(1)
、savecore(1)
、head(1)
和 strings(1)
中有多个示例展示了如何使用 fileargs
。fileargs
服务还帮助将新功能引入 bhyve,例如通过 Capsicum 保护的音频设备。
另一个重要进展是引入了一个私有的 Casper 服务,并对 rtsold(8)
和 rtsol(8)
进行了沙箱化。
下一个主要改进,仍在审查中,是重写 sysctl
服务。新的 sysctl
服务将提供一种简单的方法来使用 cap_sysctl()
和 cap_sysctlnametomib()
。
联系人:Tobias Kortkamp <tobik@FreeSD.org >
自 11.2-RELEASE 以来,vt(4) 支持通过 kern.vt.color.X.rgb
调优设置自定义颜色方案。这是一个不错的功能,但之前缺少一些现成可用的主题。
iTerm2-Color-Schemes 是包含约 200 个颜色方案的集合,适用于各种终端。它最近获得了对 vt(4) 的支持。现在,定制控制台变得如此简单,只需将喜欢的主题复制粘贴到 /boot/loader.conf
或 /boot/loader.conf.local
中即可。
联系人:Konstantin Belousov <kib@freebsd.org >
i386 架构(现代术语中指的是 32 位保护模式下的 x86 架构)自 200x 年代初以来一直支持硬件执行禁用。阻止 i386 FreeBSD 内核使用它的唯一问题是,内核默认使用的页面表格式是 2 级分页,而 nx 位仅对 PAE(2.5 级)页面表结构可用。PAE 选项过于侵入性,它会将 vm_paddr_t
和 bus_addr_t
都更改为 64 位,这对许多驱动程序并不友好。
我尝试提供内核选项 PAE_PAGETABLES
,只更改页面表格式,而不影响 vm_paddr_t
或 bus_addr_t
,从而保持内核/驱动接口不变。但我未能使 i386 版本携带两个内核,一个支持无法使用 PAE 页面表的旧硬件,另一个支持较新的机器。
最终,我进行了一次合并,使单一的 i386 内核携带两个 pmap 模块,一个用于 PAE,另一个用于旧的两级分页结构。此外,我没有找到理由不扩展 vm_paddr_t
,同时必须将 bus_addr_t
保持为 32 位。
通过单个启动时开关,i386 内核现在也可以利用最多 24G 的内存(前提是驱动程序正确使用 busdma(9)
)。我尝试修复了 iflib(4)
和 ahci(4)
,以确保最常见的硬件可以工作,但我无法遍历整个树。
希望与早期的 4/4G 分割工作一起,这为 i386 内核提供了足够的生命力。
该项目由 FreeBSD 基金会赞助。
联系人:Michal Stanek <mst@semihalf.com >
联系人:Marcin Wojtas <mw@semihalf.com >
联系人:Kornel Duleba <mindal@semihalf.com >
FreeBSD 现在支持 TPM 2.0 设备。TPM(受信平台模块)是一个独立的芯片,提供安全计算和安全的 NVRAM 存储。它通常与测量启动(Measured Boot)相关联,即提供启动元素(如固件镜像和启动配置)到操作系统的哈希测量。在 FreeBSD 中,TPM 可用于通过执行加密操作来增强像 Strongswan IPsec、SSH 或 TLS 等服务的安全性,这些操作在 TPM 芯片中使用嵌入的密钥进行,软件无法访问这些密钥。TPM 提供的功能,如安全 NVRAM 存储、数据封装、随机数生成等,也可以通过 IBM TSS 库供任何软件使用。
UEFI Secure Boot 是一种技术,提供对主机在启动过程中执行的镜像进行身份验证。这可以防止未经授权的恶意启动代码(如 rootkits)的持久化。UEFI 存储了允许和被黑名单的证书列表,并在执行启动镜像和 UEFI 应用程序之前验证它们的签名。Semihalf 开发了对 X509 证书和签名验证代码的支持,并将其集成到 EFI loader 中,使用的是最小的 BearSSL 库。允许和禁止的证书列表通过 UEFI 环境变量获取。这样,用户可以使用自签名证书签署内核二进制文件,附加签名,并让加载程序验证其真实性。
UEFI Secure Boot 支持代码很可能将与 sjg 的 Veriexec 支持集成,目前该支持正在 Phabricator 上进行审查。
Semihalf 还在通过将清单签名验证移到内核中来改进 Veriexec 的安全性。
该项目由 Stormshield 赞助。
联系人:Kristof Provost <kp@freebsd.org >
虽然 pf 本身可以同时在多个状态上操作(在不同的核心上),但 pfsync 不能。它使用了单一的 PFSYNC_LOCK。这大大降低了在多核系统中加载 pfsync 后的吞吐量。
通过将 pfsync 队列拆分为多个桶(基于状态 ID)来改进这一点。这确保了针对给定连接的更新始终进入相同的桶,从而使 pfsync 仍能将多个更新合并为一个,同时允许多个核心同时进行处理。每个桶都独立锁定,允许多个核心同时进行。
桶的数量是可调的,但默认为 CPU 数量的两倍。基准测试显示,根据硬件和配置,性能提升了 30% 至 100%。
在此过程中,还修复了几个与 vnet 相关的问题,并添加了一个基本的 pfsync 测试用例。
该改进已在 r341646 中提交到主干,并随后合并到 stable/12 和 stable/11。
该项目由 Orange Business Services 赞助。
联系人:Emmanuel Vadot <manu@FreeBSD.org >
为 PWM 驱动程序添加了一个新的子系统,以便它们可以注册自己。与内核子系统配套,提供了一个 pwm(8) 工具,用户可以用来在嵌入式板上配置 PWM。目前,唯一与该子系统兼容的 PWM 驱动是 ARM Allwinner SoCs 的驱动。
更新平台特定功能并引入对新硬件平台的支持。
联系人:Michal Stanek <mst@semihalf.com > 联系人:Marcin Wojtas <mw@semihalf.com >
Semihalf 最近开始为 BCM5871X SoC 系列提供 FreeBSD 支持。
这些是四核 64 位 ARMv8 Cortex-A57 通信处理器,面向网络应用,如 10G 路由器、网关、控制平面处理和 NAS。初步支持将包括 iProc PCIe、内部 BNXT 以太网控制器、OTP(一次性可编程内存)和用于 IPsec 卸载的加密引擎加速。预计这些工作将在 2019 年第三季度之前为 FreeBSD-HEAD 准备好。
该项目由 Juniper 赞助。
联系人:Emmanuel Vadot <manu@FreeBSD.org >
DTS 文件(设备树源)已更新,以与 Linux 4.20(主干)和 4.19(12-STABLE 分支)保持一致。
这些 DTS 现在已为一些 arm64 板编译,因为 U-Boot 中的 DTS 并不总是最新的。
联系人:Michal Krawczyk <mk@semihalf.com >
ENA(Elastic Network Adapter)是 Amazon Web Services(AWS)虚拟化环境中使用的智能网卡。它支持多个队列,并且能够处理最高 25 Gb/s 的吞吐量,具体取决于使用的实例类型。
ENAv2 正在为 FreeBSD 开发,类似于 Linux 操作系统和 DPDK。新的变化包括:
将 HAL 升级到支持 ENAv2 的版本
优化 Tx 路径的日志记录
LLQ(低延迟队列)功能,减少支持 ENAv2 的实例上的延迟
通过添加 Tx 队列管理和无锁 Rx 队列清理,优化热路径上的锁
修复错误处理路径
使用位域来跟踪设备状态
在 Tx 路径上添加额外的门铃
在运行时添加队列深度设置,并允许独立配置 Rx 队列深度
其他一些小的 bug 修复和代码重组
待办事项
内部审查和验证
提交补丁至上游
该项目由 Amazon.com Inc. 赞助。
NMI 语义:NMI 需要通过仅软禁用中断来模拟,禁用中断会阻止所有中断,除了机器检查异常和系统重置。
超页支持:在 POWER9BSD staging 分支中稳定并默认开启。
NUMA 支持:解析 OFW 并设置适当的结构,以便从正确的域分配内存,并将中断绑定到正确的插槽。
POWER9 的 LKPI 支持,Drm-next 支持 radeonkms。为 amdgpu 需要进行一些额外的大端字节序变更。
中断处理改进,导致 buildkernel 时间最多减少 10%。
缓存的 XICS IPI 向量。
增加了 XIVE 利用模式驱动程序。
Rust 支持正在审查中。
成功启动了一个 LLVM 编译的内核。
联系人:Ruslan Bukin <br@freebsd.org > 联系人:Mark Johnston <markj@freebsd.org >
FreeBSD/RISC-V 在上个季度得到了更多成熟。
我们优化了 RISC-V 的 copyin(9)/copyout(9) 函数。现在,它们支持在可能的情况下进行按字大小复制,大幅提高了内核与用户空间之间数据复制的速度。
我们对 pmap 支持(虚拟内存子系统的机器相关部分)进行了系列改进和错误修复。过去几年这部分未曾触及,现在开始得到关注。
RISC-V GENERIC 内核已支持 witness(4)(FreeBSD 锁验证设施)。
英国公司 Embecosm 报告称,他们已经能够在实际硬件上启动 FreeBSD——SiFive Unleashed 板。该支持仅限于单个核心。我们预计他们将提交补丁。
联系人:Sergiu Weisz <sergiu121@gmail.com > 联系人:Marcelo Araujo <araujo@freebsd.org > 联系人:Mihai Carabas <mihai@freebsd.org >
新增功能:
扩展 libvdsk,使实现新格式变得更加容易;
实现读/写/探测功能,以解析 QCOW2 镜像文件;
后续任务:
添加对写时复制(Copy-On-Write)的支持;
添加对多个快照的支持;
将 libvdsk 集成到 bhyve 中。
该项目由 Matthew Grooms 赞助。
联系人:Emmanuel Vadot <manu@FreeBSD.org > 联系人:Luis Octavio O Souza <loos@FreeBSD.org >
Marvell 8K SoC(例如 MacchiatoBin 上的 SoC)支持启动 FreeBSD 的工作已提交。目前,时钟、GPIO、热管理、SD卡/eMMC 驱动程序已提交,SATA 和 USB 已经可以正常使用。
该项目由 Rubicon Communications, LLC("Netgate")赞助。
联系人:Emmanuel Vadot <manu@FreeBSD.org >
现在为 Pinebook 生成 SDCard 镜像。默认情况下,控制台会输出到 EFI 帧缓存和串口控制台。
联系人:Emmanuel Vadot <manu@FreeBSD.org >
RockChip RK3399 的初步支持已经提交。目前,只能对板子进行网络启动(例如 RockPro64)。最初的补丁由 Greg V <greg@unrelenting.technology > 提交。
已经添加对 RK805 和 RK808 PMIC(电源管理集成电路)的支持。这允许更改一些电压调节器的电压,例如核心电压,从而使 cpufreq 支持正常工作。可以通过 sysctl 或 powerd(8) 更改核心频率。
影响 Ports 的变化,无论是涉及大部分树的广泛更改,还是单个 Port 本身的更改。
联系人:Adriaan de Groot <adridg@FreeBSD.org > 联系人:Tobias C. Berner <tcberner@FreeBSD.org >
首先,本季度我们已将 KDE 4 从 Ports 中移除。Qt4 将在 3 月底之前移除。
得益于 Ports 中 libinput 的更新,我们终于将 Plasma Desktop 更新到了 5.12 版本,并且再次与上游版本同步。
KDE Frameworks 和 Applications 也与上游保持同步。
我们还将 Qt5 更新到了 5.12 版本——目前 QtWebEngine 仍然保持在 5.9.5,但由于一位新贡献者的帮助,我们预计在 Q1 结束时能更新到 5.12。
在后台,我们已更改 Ports 中 cmake 的默认行为,使其默认使用外包构建。
有意贡献的朋友可以在 Freenode 的 #kde-freebsd 频道和 kde@FreeBSD.org 邮件列表找到我们。此外,我们也接受在 github.com/freebsd/freebsd-ports-kde 上的 pull 请求和贡献。
无法归类的对象。
联系人:Official <meetup@bsd-pl.org > 联系人:Konrad Witaszczyk <def@FreeBSD.org > 联系人:Mariusz Zaborski <oshogbo@FreeBSD.org > 联系人:Jarosław Żurek <contact@zurek.pro >
波兰 BSD 用户组是一个推广 BSD 家族系统的倡议。我们组织会议以及教程环节。通常,我们有三场约 15 分钟的演讲。之后会进行开放讨论,话题涉及操作系统和安全性相关内容。每个人都能找到感兴趣的内容,第一场演讲针对 BSD 初学者,介绍与 BSD 相关的内容。第二场演讲面向更高级的 BSD 用户,而最后一场演讲则更为通用,与 BSD 无关,通常涵盖与技术相关的有趣话题。大家可以提议演讲和讨论的主题。过去的一些演讲主题包括:ZFS 检查点、GELI、FreeNAS、PAM、DTrace、Yubikey、Pytest、ZeroTrust、Jenkins 和 iocage 培训课程。希望在那里见到你!
许多项目基于 FreeBSD 构建或将 FreeBSD 组件纳入其项目。由于这些项目可能对更广泛的 FreeBSD 社区感兴趣,我们有时会在季度报告中简要更新这些项目的进展。FreeBSD 项目对这些提交中的任何声明的准确性或真实性不做任何声明。
联系人:Oleg Ginzburg <olevole@olevole.ru >
什么是 ClonOS?
ClonOS 是一个基于 FreeBSD 和 CBSD 框架的开源平台,提供完整的 Web UI 界面,便于控制、部署和管理 FreeBSD jail 容器以及 bhyve/Xen 虚拟化环境。
ClonOS 目前是唯一一个支持 Xen 和 bhyve 虚拟化平台共存于同一主机上的平台。由于 ClonOS 基于 FreeBSD 平台,它具有原生创建和管理 jail 的能力,使 你能够运行 FreeBSD 应用程序而不会损失性能。
特点:
通过 Web UI 界面简便管理
bhyve 管理(创建、删除虚拟机)
Xen 管理(创建、删除虚拟机)[即将发布,路线图]
通过浏览器或直接连接 VNC 访问“物理”虚拟机控制台
实时系统监控
通过 SQLite3 和 beanstalkd 访问负载统计数据
支持 ZFS 功能(克隆、快照)
虚拟环境的导入/导出
提供虚拟机模板的公共仓库
基于 puppet 的服务配置助手
ClonOS 2018Q4 状态报告
在此期间,完成了以下工作:
实现基于 RACCT 统计的 jail/bhyve 实时图表
测试 bhyve 实时迁移,支持 CBSD 中的实时迁移
准备 ClonOS 19.01-RELEASE
待办事项
ClonOS 路线图:https://clonos.tekroutine.com/roadmap.html
集成 FreeNAS/XigmaNAS 或其他 NAS
我希望看到 ClonOS 在实际应用中的表现,因此我希望找到更多使用 FreeBSD 进行虚拟机/jail 服务的个人和公司。
联系人:Shawn Webb <shawn.webb@hardenedbsd.org >
HardenedBSD 是 FreeBSD 的一个安全增强分支,旨在为 BSD 社区提供 Linux 上 grsecurity 补丁集公开文档部分的清洁房间重实现。我们通过每六小时与 FreeBSD 同步,保持与 FreeBSD 的紧密兼容性。
通过 DEF CON 计算机安全大会的慷慨捐赠以及社区一名匿名成员的支持,HardenedBSD 基金会为 HardenedBSD 项目提供了一台新的 Cavium ThunderX2 服务器。HardenedBSD 正在与 FreeBSD 和 Cavium 的 Jayachandran(jchandra@freebsd)密切合作,以获得 ThunderX2 的工作支持。待 ThunderX2 功能正常,HardenedBSD 将能够支持 arm64 上的 12-STABLE 和 13-CURRENT。
我们协助了 OPNsense 从 FreeBSD 迁移到 HardenedBSD 作为基础操作系统。OPNsense 的 2019 年 1 月发布(19.1)将完成迁移。进一步的工作将使 HardenedBSD 的 PaX NOEXEC 实现能够在 OPNsense 中启用。PaX NOEXEC 是 W^X 的一种强形式,它防止内存分配同时是可写和可执行的,并在两者之间切换。
HardenedBSD 基金会公司是美国注册的 501(c)(3) 税收豁免非营利慈善组织。我们期待 2019 年的工作成果,Cross-DSO CFI 支持工作仍在进行中。
2018 年 12 月,HardenedBSD 发布了其首个官方版本 12-STABLE。来自发布公告的内容:
12-STABLE 相对于 11-STABLE 的改进:
为 amd64 和 arm64 上的应用程序提供非跨 DSO 控制流完整性(CFI)。目前,CFI 尚未应用于内核。有关 CFI 的更多信息见下文。
Jail 化的 bhyve(已上游到 FreeBSD)
为未特权进程调试提供每个 jail 的切换(security.bsd.unprivileged_process_debug sysctl 节点。已上游到 FreeBSD。)
采用 retpoline 对基本系统和 Ports 的整个代码应用 Spectre v2 缓解(仅少数 Port 选择不启用)。
默认禁用对称多线程(SMT)(可通过在 loader.conf(5) 中将 machdep.hyperthreading_allowed 设置为 1 来重新启用)。
将更多编译器工具链组件迁移到 llvm 的实现(llvm-ar、llvm-nm 和 llvm-objdump)。
使用链接时优化(LTO)编译应用程序。
非跨 DSO CFI 是一种漏洞缓解技术,有助于防止攻击者修改程序行为并跳转到未定义或任意的内存位置。微软实现了 CFI 的一种变体,称为控制流保护(CFG)。PaX 团队花费了几年时间完善其重用攻击保护器(RAP)。CFI、CFG 和 RAP 都试图实现相同的目标,其中 RAP 是最完整和最有效的实现。Clang 的 CFI 比微软的 CFG 更强,而 PaX 团队的 RAP 比 CFI 和 CFG 都更强。RAP 会是 HardenedBSD 的一个很好的补充,但它需要一个 GPLv3 工具链,并且已被专利保护。
Clang 的 CFI 需要一个支持链接时优化(LTO)的链接器。HardenedBSD 12-STABLE 使用 lld 作为默认链接器。几乎所有应用程序的 CFI 方案已在基本系统中启用。请注意,任何通过 dlopen + dlsym 调用的函数指针的应用程序都需要禁用 cfi-icall 方案。
HardenedBSD 是首个将非跨 DSO CFI 广泛应用于用户空间的企业级操作系统。
联系人:Jonathan de Boyne Pollard <J.deBoynePollard-newsgroups@NTLWorld.COM >
nosh 项目是一套系统级实用程序,用于初始化、运行和关闭 BSD 系统;以及管理守护进程、终端和日志。
它取代了 BSD init、Mewburn 的 rc 系统和 OpenRC,借鉴了 daemontools-encore 的服务控制/状态机制、UCSPI 的网络服务、Solaris SMF 的命名里程碑,以及 IBM AIX 的分离服务和系统管理。它包括一系列兼容机制,包括其他系统的熟悉命令的适配器,以及一个自动导入机制,能够从 /etc/fstab、/etc/rc.conf{,.local}、/etc/ttys 等地方提取现有的配置数据,应用到其本地服务定义并创建附加的本地服务。
它是可移植的(包括到 Linux 上)且具有组合性,提供了从 systemd Linux 世界迁移的路径,并且不需要新的内核 API。它提供了干净的服务环境,服务之间有顺序和依赖,支持并行化的启动和关闭(包括 fsck),提供严格大小限制和自动轮换的日志,具有服务管理器作为“子收割者”,支持每个用户的服务管理以及系统范围的管理,提供用户空间虚拟终端,将 TTY 登录纳入到通用服务管理中,并使用 kevent(2) 实现事件驱动的并行性。
更多信息请参见上述链接的简介和简介,以及 nosh 指南。
自 2017 年的上次状态报告以来,项目已进行了大量开发。简要列出一些已完成的工作:
增加了多个包,包括运行 Bruce Guenter 的 bcron、OpenRC 的 rc-update 和 rc-service 工具的适配器,以及一些 Linux 的 util-linux 工具的便携替代品。
增加了很多新工具,包括 getuidgid、userenv-fromenv、setgid-fromenv、envgid、printenv、setlogin、console-decode-ecma48、console-control-sequence、console-flat-table-viewer、console-input-method 和 local-stream-socket-connect。例如:
printenv 作为内建工具,可以与 clearenv 一起更方便地使用,并且能够生成一些附加格式的输出。
console-control-sequence 也响应 setterm 名称,可以执行非便携的 util-linux 工具无法完成的大多数任务(例如启用和禁用替代屏幕缓冲区、删除中划线、计算器键盘应用模式、鼠标报告等),并且还包括一些标准的 DEC VT 和 ECMA-48 功能。
增加了更多服务包,数量繁多,无法在此列出。可以在 1.37 和 1.38 + 1.39 的发布公告中找到它们。
在 nosh 指南中增加了新的章节,涉及包和 Port、终端的资源(如键盘映射、输入法和字体),以及 head0 用户空间虚拟终端的结构。还增加了新的手册页 - 除了所有新命令的手册页外,还有关于 http://jdebp.eu./Softwares/nosh/guide/TerminalCapabilities.html 系统的手册页。此外,还提供了 一些 Linux 手册页的替代品,这些手册页在过去十年里消失了。
外部格式配置导入子系统对每个用户的服务配置做出了重大改进。每个用户的服务管理器本身增加了一个控制 FIFO,解决了一个长期存在的 bug。
自上次状态报告以来,另一个主要的改进领域是用户空间虚拟终端中的输入法功能。输入法机制使用与多个其他软件相同的 CIN 文件,类似于可以使用现有的 SCO/FreeBSD 键盘映射和 FreeBSD vt 字体的方式。它在用户空间虚拟终端上放置了一个简单的文本用户界面,能够在多个输入法之间即时切换,并响应 JIS 106/109 键盘或韩文 103/106 键盘上的专用键,以及其他键盘上的常规键。简介中包括了 一个日本用户如何使用此功能的示例,而 nosh 指南的虚拟终端章节现在也将输入法功能纳入了文档中。
另一个工作领域是消除几乎所有工具中的 Wide NCurses,除了本质上使用它的一个工具(console-ncurses-realizer)。Wide NCurses 长期以来一直是多个操作系统(包括 Gentoo Linux 和 OpenBSD)的移植难题,而且并未很好地模拟现代的真实终端和终端仿真器。它已被新的 TerminalCapabilities 库取代,并与用于处理 ECMA-48 字符序列解码和 ECMA-48/DEC VT 控制序列生成的库结合使用。例如,新的 console-decode-ecma48 工具就是基于该解码器的,此外它还是 console-termio-realizer 和全屏 TUI 工具(如 chkservice 和新的 console-flat-table-viewer)中的终端输入解码器。
外部格式导入子系统现在还将生成一个替代的 /etc/system-control/convert/termcap/termcap.db,用户可以使用它,其中包括当前缺失的 teken 终端类型。
除了上述链接的路线图中提到的内容,接下来的版本中还计划包括一些新功能。包括将进程表以适当的 vis(3) 格式输入到 console-flat-table-viewer 的工具;如果拥有多个键盘,允许为不同的键盘设置不同的键盘映射;为 login.conf 提供一个 Linux 适配器;在 SoftTerm 中正确处理 CSI 子参数;CIN 文件格式的手册页;以及一个 time-env-next-matching 工具。
Z shell 补全已经广泛覆盖了工具集,但对于 Bourne Again shell 或 Friendly Interactive shell 没有补全。对此类补全的工作将非常受欢迎,尤其是那些使用这些 shell 的用户。
系统管理器已经识别了 -b 选项,用于 紧急模式。如果能让 FreeBSD 加载程序和内核在响应额外的紧急模式启动菜单选择时将此选项传递给进程 #1,将非常受欢迎。
monitor-fsck-progress 和 monitored-fsck 工具已准备好与 fsck 的 -C 选项一起工作,该选项会将进度信息输出到打开的文件描述符。另一个帮助方法是将此功能添加到 fsck 中。
需要将 teken 添加到基本 termcap 中。它在 2014 年已被加入到 NCurses terminfo 中。