本季度的报告包含了一些有趣的主题,即使你不是程序员也能轻松了解:我们提供了 BSDCan 2019 上关于 2019 FreeBSD 调查结果演讲的链接,并描述了一次由 3 人组成的黑客松(hackathon)的有趣经历,这可能会鼓励你自己举办类似活动,甚至吸引更多参与者。同时,我们还提供了关于我们 IRC 频道现状的最新信息。
对于那些拥有更高技术水平的人,我们带来了有关 git 在 FreeBSD 项目中作用的最新消息,介绍了一些用于捕捉 Bug 或提升安全性的工具现状,并宣布了一项 sysctl 克隆项目。
最后,那些编程经验较为丰富的人可能会对驱动程序方面的出色工作感兴趣:特别要感谢 Alan Somers,他开始更新我们的 FUSE 实现(该实现此前大约落后了 11 年)。其他重要改进还包括默认启用的轨迹点和触控板提供了更友好的用户体验、大量图形底层工作、新增了众多 bhyve 特性、更新了 Linux 兼容层以及各种内核改进。
祝阅读愉快!
——Lorenzo Salvadore
以下内容摘自 Administration Page 中各官方和半官方团队的报告。
联系方式: Jenkins 管理员 <jenkins-admin@FreeBSD.org> 許立文 <lwhsu@FreeBSD.org>
FreeBSD CI 团队负责维护 FreeBSD 项目的持续集成系统及相关任务。CI 系统定期检查提交的更改是否能成功构建,并进行各种测试和结果分析。构建作业的结果会存档在构建产物服务器上,以便后续测试和调试使用。CI 团队成员会检查构建失败和测试不稳定的问题,并与相关领域的专家合作修复代码或调整测试基础设施。有关这些工作的详细信息,请参见每周的 CI 周报。
FCP for CI 政策目前正处于“反馈”阶段,请将你的意见发送到 freebsd-testing@ 或其他适当的邮件列表。
我们在 201905 DevSummit 举行了一个测试工作组会议。
更多信息请参见与 freebsd-testing@ 相关的票据。
正在进行的工作:
修复失败的测试用例和构建
增加 drm ports 针对 -CURRENT 的构建测试
添加 powerpc64 测试作业:https://github.com/freebsd/freebsd-ci/pull/33
实现裸机硬件上的自动测试
扩展并发布嵌入式测试平台
规划运行 ztest 和网络栈测试
通过托管 CI 解决方案帮助更多第三方软件在 FreeBSD 上实现持续集成
联系方式: FreeBSD 核心团队 <core@FreeBSD.org>
FreeBSD 核心团队是 FreeBSD 的管理机构。
核心团队已授予 Doug Moore (dougm)、Chuck Silvers (chs)、Brandon Bergren (bdragon) 源代码提交权限,并为 Scott Phillips (scottph) 授予了厂商级提交权限。
年度开发者调查于 2019-04-02 结束。在 397 名开发者中,有 243 人参与了调查,平均完成时间为 12 分钟。公共调查于 2019-05-13 结束,共有 3637 位用户参与,完成率达到 79%。关于调查结果的演示在 BSDCan 2019 上进行了展示。
核心团队投票决定成立一个工作组,探讨将我们的源代码“真实来源”从 Subversion 迁移到 Git 的问题。核心团队请 Ed Maste 担任该工作组组长,因为他已就此课题进行了较长时间的研究。例如,Ed 曾在 MeetBSD 2018 上就此主题做过演讲。
对于如何以及在何处托管 Git 仓库,核心团队内部存在各种争议,但总体上认为采用 Git 是明智的前进方向。
本项目收到了大量 Season of Docs 的提交,并选定了一个最佳候选方案。谷歌将于 2019-08-06 宣布被接受的技术文档项目。我们期待大量新的和更新的 man page 的发布。
联系人:Deb Goodkin <deb@FreeBSDFoundation.org>
FreeBSD 基金会是一家 501(c)(3) 非营利组织,致力于支持和推广 FreeBSD 项目及其全球社区。资金来源于个人和企业捐赠,并用于赞助和管理软件开发项目、会议和开发者峰会,同时为 FreeBSD 贡献者提供差旅赞助。基金会还采购并维护硬件,以改善和维护 FreeBSD 基础设施,并提供资源以提升安全性、质量保证和发布工程;此外,还发布宣传材料以推广、教育并倡导 FreeBSD 项目;促进商业供应商与 FreeBSD 开发者之间的合作;最后,在需要法律实体执行合同、许可证协议及其他法律事务时,代表 FreeBSD 项目行事。
以下是我们在上个季度为 FreeBSD 贡献的一些重点工作:
我们于 5 月 14 日在渥太华召开了年度董事会会议。在这次会议上,举行了董事和管理层的年度选举。Justin Gibbs 当选为新一届董事会主席。新一届 FreeBSD 基金会董事会成员包括:主席兼创始人 Justin T. Gibbs,副主席 Benedict Reuschling,秘书 Philip Paeps,财务主管 Marshall Kirk McKusick,以及董事佐藤広生、George Neville-Neil 和 Robert N. M. Watson。你可以阅读更多关于此次选举的信息。
选举结束后,我们的管理团队向董事会汇报了各自负责领域的最新进展。随后,我们讨论了项目中需要帮助的关键领域,以及基金会可以在哪些方面填补这些空缺。我们审查并更新了后续 12 个月的目标,并确定了需要支持的项目。随后,我们讨论了计划参加的会议,并回顾了最新的筹款进展。最后,我们讨论了如何吸引更多用户回馈 FreeBSD 项目,同时探讨了如何提供更多培训材料的方式。
我们促进商业用户与 FreeBSD 开发者之间的合作,同时与各公司会面,讨论他们的需求,并将这些信息反馈给项目团队。在第二季度,Ed Maste 和 Deb Goodkin 在德国与几家商业用户进行了会面。这不仅有助于加强合作,还帮助我们了解 FreeBSD 在不同应用场景中的使用情况。BSDCan 会议吸引了大量商业用户,因此我们有机会在为期四天的 FreeBSD 峰会和 BSDCan 期间进行类似的讨论,以更好地了解他们的需求。
我们的工作完全依赖于你的捐赠。我们非常感谢英特尔、NetApp、VMware 和 Stormshield 在上个季度的慷慨捐助。同时,我们还在努力争取更多商业用户的支持,以帮助我们继续为 FreeBSD 提供支持。更重要的是,我们要感谢所有个人捐赠者,在上个季度,他们共计捐赠了 10 至 1,000 美元不等,总额达 16,000 美元!
请考虑捐款,帮助我们继续并加强对 FreeBSD 的支持。
此外,我们还推出了合作伙伴计划(Partnership Program),为大型商业捐赠者提供更多福利。请查看相关信息,并与你的公司分享!
基金会通过雇佣技术人员来维护和改进关键的内核子系统,增加新功能,修复问题,以提升 FreeBSD 操作系统。此外,基金会还提供资金支持个人开发项目。
在本季度,基金会赞助的 FreeBSD 基本系统代码库共有 243 次提交。其中包括对 tmpfs 内存文件系统、MSDOS 和 UFS 文件系统的改进,设备驱动和硬件兼容性修复,虚拟内存(VM)优化,工具链增强,以及文档、测试和持续集成方面的改进。
我们修复了 Syzkaller(谷歌的代码覆盖率引导系统调用模糊测试工具)发现的多个竞争条件和安全问题。
Alan Somers 持续推进 FreeBSD FUSE(用户态文件系统)支持的更新工作;完整细节见本季度报告的其他部分。目前,大部分工作已提交到项目分支,但一些错误修复和改进已直接提交到 FreeBSD 开发分支。
Edward Napierala 在本季度继续推进 Linux 兼容层项目,改进了 Linux 兼容层以及特定于 Linux 的功能(如 linsysfs)。该工作旨在支持 Linux 的 strace 调试工具,从而更好地调试 Linux 兼容层运行的其他 Linux 二进制程序。Mateusz Guzik 在本季度继续进行可扩展性和性能改进,而 Bjoern Zeeb 则集成了 SDIO 组件(具体细节见本季度报告的其他部分)。
在线 RAID-Z 扩展项目在本季度取得进展。Matt Ahrens 发布了该功能的 Alpha 预览版,供进一步实验和审查。FreeBSD 基金会将在不久的将来发布 Alpha 版本镜像,以供测试。
基金会员工在本季度协助发布了九个 FreeBSD 安全公告和错误修正更新,其中包括 CPU 漏洞的缓解措施。此外,相关工作还包括改进 Intel 微代码更新加载。
基金会聘请了一名全职员工,专门负责改进 FreeBSD 的自动化测试、持续集成以及整体质量保证工作。
在 2019 年第二季度,基金会工作人员持续改进了项目的 CI(持续集成)基础设施,与贡献者合作修复失败的构建和测试用例,并与项目中的其他团队合作,满足其测试需求。我们在 BSDCan 组织了一个以 CI 为重点的工作组,并继续在 freebsd-testing@ 邮件列表上发布 CI 每周报告。
更多详情请参阅本报告的 FreeBSD CI 章节。
基金会提供硬件及技术支持,以改善 FreeBSD 的基础设施。上个季度,我们继续支持全球范围内的 FreeBSD 服务器和硬件。
我们的一大部分工作是宣传 FreeBSD 项目。这包括推广 FreeBSD 社区的贡献成果;制作宣传材料,以帮助人们了解 FreeBSD,使他们更容易上手并参与贡献;同时,我们还鼓励并组织 FreeBSD 贡献者参与各种活动,包括管理 FreeBSD 展位、举办 FreeBSD 讲座等。
FreeBSD 基金会在全球范围内赞助和组织了许多会议、活动和峰会。这些活动可能与 BSD 相关、属于开源技术领域,或面向技术领域的弱势群体。我们支持 FreeBSD 相关活动,以提供知识共享的场所、促进项目合作,并加强开发者与商业用户之间的联系,维持健康的生态系统。同时,我们也参与非 FreeBSD 相关活动,以推广 FreeBSD,提升其在不同应用领域的使用率,并吸引更多贡献者加入项目。
代表 FreeBSD 参加美国华盛顿州贝灵厄姆的 LinuxFest Northwest
赞助并协助组织 BSDCan FreeBSD 开发者峰会(加拿大渥太华)
赞助并参加 BSDCan 2019
组织注册并参加 维也纳 FreeBSD 安全 Hackathon(奥地利维也纳)
代表 FreeBSD 参加 香港开源大会(HKOSCON)
参加 柏林 FreeBSD 开发者峰会
在 2019 年 Comcast Labs Connect 开源大会 上演讲
赞助、演讲并代表 FreeBSD 参加 RootConf 2019(印度班加罗尔)
确定将参加 OSCON 和 All Things Open
确定将赞助并协助组织 旧金山湾区开发者峰会
提供 FreeBSD 宣传材料
为 FreeBSD 贡献者提供差旅赞助,帮助他们参加上述活动
我们还持续制作 FreeBSD 宣传材料,以帮助全球社区推广 FreeBSD。
更多关于我们的会议经历,请阅读我们的月度通讯中的会议总结和旅行报告。
我们通过出版专业制作的《FreeBSD 期刊》来推广 FreeBSD。正如我们之前提到的,《FreeBSD 期刊》 现在已免费开放阅读。你可以访问 https://www.FreeBSDfoundation.org/journal/ 获取最新期刊。
你还可以查阅我们参加的活动详情,以及即将到来的活动信息。
此外,我们与一位新的网站开发者合作,改进 FreeBSD 基金会网站,以便社区成员更方便地获取信息,并提升网站的整体效率。
基金会持有 FreeBSD 商标,并负责保护其合法权益。此外,我们还为 FreeBSD 核心团队提供法律支持,协助解决相关问题。
访问 http://www.FreeBSDfoundation.org 了解基金会如何支持 FreeBSD,以及我们能如何帮助你!
链接:
项目 GitHub 页面:FreeBSDDesktop
联系方式:FreeBSD Graphics 团队 x11@freebsd.org
联系人:Niclas Zeising zeising@freebsd.org
FreeBSD X11/Graphics 团队负责维护 FreeBSD 图形栈的底层组件,包括图形驱动程序、MESA OpenGL 实现等图形库、X.org xserver 及相关库和应用程序,以及 Wayland 及其相关组件。
在上一次报告(半年前)中,我们对 FreeBSD 图形栈进行了多个更新和改进。
为了进一步提升用户体验,并改进输入设备的处理,我们在 2018 年底默认启用了 evdev。在此基础上,我们还默认启用了 IBM/Lenovo TrackPoint 以及 Elantech 和 Synaptics 触摸板 的支持。
作为更新用户态输入设备栈的一部分,我们还更新了 libinput 输入设备库。这项工作始于 2018 年,现在已完成。
在 drm 内核驱动程序 方面,我们做出了多项改进。其中,已修复长期存在的 Intel(i915)驱动内存泄漏问题 。此外,我们对多个 drm 相关的内核驱动组件进行了更新和优化。
我们基于 Linux 5.0 内核源码 创建了 drm 内核驱动的移植版本,并将其提交到 FreeBSD ports,作为 graphics/drm-devel-kmod。该驱动程序需要一个较新的 Linux KPI,仅适用于 FreeBSD CURRENT 的最新版本。
这一新版本的驱动程序包含多个开发相关的改进:
通用 drm 驱动(drm.ko)以及 Intel 驱动(i915kms.ko)现在可以卸载并重新加载,以便于开发和测试。不过,这会对虚拟终端(virtual consoles)造成影响,因此建议使用 SSH 连接 进行操作。
为了便于调试 i915kms.ko,我们改进了 debugfs 的使用,但仍然存在一些功能限制。目前,debugfs 依赖于 pseudofs,这可能会阻碍其完整功能。因此,我们可能需要为 pseudofs 添加必要的功能,或者采用其他调试框架。
我们还从 Linux 移植了 VirtualBox 内核 drm 驱动(vboxvideo.ko)。该驱动仍处于实验阶段,例如,在加载驱动后,虚拟终端可能不会更新,但 X 和 Wayland 相关的窗口管理器已经可以正常工作。
Mesa 已更新至 18.3.2,并由 devel/llvm60 切换为 FreeBSD ports 默认版本的 LLVM,目前为 devel/llvm80。
多个 Xorg 用户态驱动程序、应用程序和库已更新。
其他用户态图形栈组件也进行了改进。
我们继续定期组织每两周一次的会议,但会议记录的整理仍需改进,以便更及时地发布。
如果你有兴趣参与贡献,可以通过以下方式联系我们:
邮件列表:x11@FreeBSD.org
Gitter 聊天室:https://gitter.im/FreeBSDDesktop/Lobby
IRC 频道:EFNet 上的 #freebsd-xorg
我们的 GitHub 组织页面也托管了相关的代码仓库:https://github.com/FreeBSDDesktop
IRC 管理团队:irc@FreeBSD.org
FreeBSD IRC 管理团队负责管理 freenode IRC 网络上 FreeBSD 项目的存在和活动,主要包括以下职责:
负责 #freebsd* 命名空间内的频道注册与管理
频道管理与调解
与 freenode 官方团队沟通协调
为用户分配 freebsd/* hostmask cloak
提供与频道管理相关的用户支持
尽管 FreeBSD 项目目前 不 将 IRC 作为官方支持渠道(详见此处和此处),因为无法保证一致性和良好的用户体验,但 IRC 管理团队一直致力于 提升 IRC 体验,通过标准化频道管理和 moderation 规范,确保项目能够有效管理所有属于 FreeBSD 的频道。
在过去的一个季度,IRC 管理团队完成了以下任务:
清理(注销)了过时、停滞和不活跃的频道(创始人超过 1 年未现身的频道)。对于仍然活跃的频道则予以保留。当前,FreeBSD 在 freenode 上的注册频道数量已从 150+ 精简至约 40。
在 FreeBSD Wiki 上记录了频道的基本配置,包括 ChanServ 设置、频道模式、注册策略等。
建立了多种渠道,以便用户能够报告频道内的滥用行为或其他问题,并由 IRC 管理团队处理。
与现有的 #freebsd* 频道合作,标准化频道管理、配置及访问权限。
迁移、合并或调整重复的 #freebsd* 频道,以统一命名规范。
与非官方 ##freebsd* 频道沟通,如果合适,迁移到官方 #freebsd 频道*。
更新 FreeBSD 官方网站及相关文档,明确描述 FreeBSD 在 freenode 上的官方 IRC 状态。
尽管 FreeBSD 用户社区主要活跃在 freenode IRC,但开发者的存在感仍然有待提高。
促进 FreeBSD 用户与开发者的互动,有助于:
让开发者更直接地了解用户需求和社区动态。
进一步培养、吸引更多贡献者参与 FreeBSD 项目。
IRC 管理团队再次呼吁所有 FreeBSD 开发者加入 freenode 上的 FreeBSD 频道,提升项目的开发者活跃度。
如果你对 FreeBSD 在 IRC 上的改进有问题、想法、建设性批评和反馈,欢迎加入 #freebsd-irc 频道(位于 freenode 网络)。
FreeBSD Ports 介绍:https://www.FreeBSD.org/ports/
FreeBSD Ports 监控:http://portsmon.freebsd.org/index.html
Ports 管理团队:https://www.freebsd.org/portmgr/index.html
Ports 管理团队秘书:René Ladan portmgr-secretary@FreeBSD.org
FreeBSD Ports 管理团队:portmgr@FreeBSD.org
在过去的一个季度,Ports 管理团队(portmgr) 完成了以下工作,以确保 Ports 的稳定运行:
Ports 总数上升至接近 37,000。
截至季度末,存在 2,146 个未解决 PR(问题报告),172 名贡献者共提交 7,837 次 commit(其中 499 次提交至 quarterly 分支)。
相比上个季度,活动略有下降。
新成员:欢迎 Pedro Giffuni(pfg@)、Piotr Kubaj(pkubaj@) 和 Hans Petter Selasky(hselasky@) 加入。Pedro 和 Hans Petter 之前已是 src 仓库的提交者。
离开的成员:gordon@、kan@、tobez@、wosch@。
引入 USES=cabal,用于 Haskell 生态的 Ports。
默认版本更新:
MySQL 更新至 5.7
Python 默认版本更新至 3.6
Ruby 更新至 2.5
Samba 更新至 4.8
Julia 增加默认版本 1.0
浏览器更新:
Firefox 更新至 68.0
Chromium 更新至 75.0.3770.100
在过去的季度,antoine@ 共执行了 41 次 exp-run(实验性大规模构建测试),包括:
测试多个软件包更新。
将 stack protector 级别提升至 "strong"。
将默认 Python 版本从 2.7 切换为 3.6。
移除 sys/dir.h(该文件已被弃用超过 20 年)。
转换所有 Go 语言相关的 Ports,改用 USES=go 机制。
FreeBSD 11.3-RELEASE 计划:https://www.freebsd.org/releases/11.3R/schedule.html
FreeBSD 11.3-RELEASE 公告:https://www.freebsd.org/releases/11.3R/announce.html
FreeBSD 12.1-RELEASE 计划:https://www.freebsd.org/releases/12.1R/schedule.html
FreeBSD 开发快照下载:https://download.freebsd.org/ftp/snapshots/ISO-IMAGES/
FreeBSD 版本发布工程团队:re@FreeBSD.org
FreeBSD 版本发布工程团队负责 制定并发布官方 FreeBSD 版本的发布时间表,宣布代码冻结,并维护相关分支等任务。
在 2019 年第二季度,团队启动了 11.3-RELEASE 版本的发布周期,代码 slush 阶段于 5 月 3 日 开始。整个发布周期包括:
3 次 BETA 版本
3 次 RC 版本
所有发布均严格遵循最初公布的时间表。最终 RC 版本于 6 月 28 日 开始,最终正式版 计划于 7 月 5 日 发布。
FreeBSD 11.3-RELEASE 是 stable/11 分支的第四个正式发布版本,在 11.2-RELEASE 的基础上进一步增强了稳定性和可靠性。
此外,12.1-RELEASE 版本的时间表 也已公布,并计划于 9 月 6 日 开始。值得注意的是,此次发布时间表 不包含 stable/12 分支的硬冻结(hard freeze),作为一次实验,测试在发布周期中 完全取消代码冻结 的可行性。不过,提交到 releng/12.1 分支的代码仍然需要 版本发布工程团队的明确批准。
在本季度内,团队还发布了 多个开发快照,涵盖 head 分支、stable/12 分支 和 stable/11 分支。
本次工作得到了 FreeBSD 基金会 和 Rubicon Communications, LLC(Netgate) 的赞助。
以下项目涉及 FreeBSD 内核、用户空间、Ports 及其他外部项目。
bhyve 虚拟机迁移指南(Live & Warm Migration):GitHub Wiki
Warm Migration 分支:GitHub
Live Migration 分支:GitHub
Elena Mihailescu:elenamihailescu22@gmail.com
Darius Mihai:dariusmihaim@gmail.com
Mihai Carabas:mihai@freebsd.org
bhyve 的迁移功能利用 Save/Restore 机制,使 bhyve 虚拟机 能够在两个 FreeBSD 主机之间迁移。
迁移方法:
在 目标主机 上,使用 bhyve 工具 启动一个空的虚拟机,并使用 -R
选项指定 源主机 IP 和监听迁移请求的端口。
在 源主机 上,使用 bhyvectl
命令启动迁移,执行 --migrate
或 --migrate-live
选项,并指定 目标主机 IP 和端口。
在每轮迁移后 清除脏页标志(dirty bit)
扩展实时迁移 以支持 highmem(高内存段)
重构 Live Migration 分支
Rebase Live Migration 代码
扩展 Live Migration 以支持 unwired 内存
该项目由 Matthew Grooms 赞助。
bhyve 快照功能的 GitHub 仓库:GitHub
bhyve 虚拟机保存/恢复指南:GitHub Wiki
挂起/恢复测试矩阵:GitHub Wiki
Phabricator 代码审查(bhyve 快照保存/恢复):Phabricator
Elena Mihailescu:elenamihailescu22@gmail.com
Darius Mihai:dariusmihaim@gmail.com
Mihai Carabas:mihai@freebsd.org
bhyve 的 保存/恢复功能 为 FreeBSD/amd64 的 bhyve hypervisor 提供了 挂起(suspend)与恢复(resume) 机制。
bhyvectl
工具可将虚拟机的运行状态保存在 三个文件 中:
虚拟机内存文件
设备状态 & CPU 状态文件
恢复所需的元数据文件
使用方法:
挂起(Suspend):
执行 bhyvectl --suspend <state_file_name> <guest_name>
恢复(Restore):
启动虚拟机时,添加 -r <state_file_name>
选项,即可恢复至挂起时的状态。
在 Phabricator 上创建了追踪任务
结合 社区反馈 进行代码优化
为 NVMe 设备 增加挂起/恢复支持
为 virtio-console 设备 增加挂起/恢复支持
为 virtio-scsi 设备 增加挂起/恢复支持
优化 AMD CPU 的 TSC 偏移恢复机制
该项目由 Matthew Grooms 赞助。
联系人:Doug Moore <dougm@FreeBSD.org>
联系人:Alan Cox <alc@FreeBSD.org>
联系人:Mark Johnston <markj@FreeBSD.org>
一个持续进行的项目旨在教会交换分页器在交换空间的块被释放时(例如,当拥有该块的应用程序退出时)向交换设备发送 SCSI UNMAP 或 ATA TRIM 命令。
固态硬盘(SSD)已变得非常普遍,并且具有低延迟的随机 I/O 请求。这使得它们作为交换设备的使用变得很有吸引力,因为较低的延迟意味着应用程序在等待交换设备中的页面载入时花费的时间更少。为了最大化写入性能,一些 SSD 需要操作系统在某个扇区不再使用时向磁盘发送通知;这有助于磁盘优化其 NAND 闪存单元的使用。在 FreeBSD 中,这样的通知被称为 BIO_DELETE。
FreeBSD 的 UFS 和 ZFS 文件系统长期以来一直能够将 BIO_DELETE 请求发送到支持文件系统的设备。例如,对于 UFS,可以通过在 newfs(8) 或 tunefs(8) 的参数中指定 -t 来启用此支持。然而,FreeBSD 历史上并没有为交换设备实现相应的功能。
由于 Doug Moore 的努力,从 r349286(-CURRENT)和 r349930(stable/12)开始,swapon(8) 可以在将设备配置为交换设备之前,向指定设备的所有块发送 BIO_DELETE。通过在 swapon(8) 参数中指定 -E,或者在交换设备的 /etc/fstab 条目中添加 "trimonce" 选项,即可启用此功能。交换分页器正在进行中的工作实现了在线块删除,即当应用程序释放块时,会传输 BIO_DELETE;希望此功能将在 FreeBSD 13.0 中实现。
联系人:Michal Krawczyk <mk@semihalf.com> 联系人:Maciej Bielski <mba@semihalf.com> 联系人:Marcin Wojtas <mw@semihalf.com>
ENA(弹性网络适配器)是 AWS(亚马逊云服务)虚拟化环境中的智能网卡。ENA 驱动程序支持多个发送和接收队列,并且可以处理高达 100 Gb/s 的网络流量,具体取决于使用的实例类型。
ENAv2 已经在 FreeBSD 上开发,类似于 Linux 和 DPDK。自上次更新以来,已对补丁进行了内部审查和改进,并在各种 AWS 实例上进行了验证。
自上次更新以来已完成的工作:
为 ENA 实现了 NETMAP 支持
待办事项
内部审查并提交 NETMAP 支持的上游版本
该项目由亚马逊公司赞助。
联系人:Bjoern Zeeb <bz@FreeBSD.ORG>
SDIO 是一种接口,作为 SD 卡的扩展,可连接各种其他外设,例如 WiFi 和蓝牙。
Ilya Bakulin 在 MMCCAM 堆栈中进行的工作,提供了能够并排连接 SD 卡和 SDIO 设备的基础设施,从而促进了 FreeBSD 的 CAM 框架。基于过去几年的优秀工作,SDIO 支持于今年早些时候完成,并已提交到 FreeBSD HEAD,计划在以后合并到 12 版本。
为了利用新提供的 SDIO 总线,开始移植 Broadcom 的 FullMAC WiFi 驱动程序。该项工作仍在进行中,预计将在今年晚些时候完成。借此,Raspberry Pi 和其他嵌入式板将能使用此 WiFi 支持。同样,现在也可以开发其他 SDIO 设备的驱动程序。
该项目由 FreeBSD 基金会赞助。
联系人:Alan Somers <asomers@FreeBSD.org>
FUSE(用户空间文件系统)允许用户空间程序实现文件系统。它广泛用于支持树外文件系统(如 NTFS),以及用于如 sshfs 之类的伪文件系统。FreeBSD 的 FUSE 驱动程序作为 GSoC 项目在 2012 年加入。自那时以来,它一直被忽视。FUSE 软件存在 错误 且过时。我们的实现大约落后 11 年。
在第二季度,我几乎完成了在第一季度开始的 FUSE 改造工作。我将协议级别从 7.8 提升到 7.23,修复了许多错误(见 199934,216391,233783,234581,235773,235774,235775,236226,236231,236236,239291,236329,236379,236381,236405,236327,236466,236472,236473,236474,236530,236557,236560,236647,236844,237052,237181,237588,和 238565),并添加了以下功能:
可选的内核端权限检查(-o default_permissions
)
实现 VOP_MKNOD、VOP_BMAP 和 VOP_ADVLOCK
允许中断 FUSE 操作
支持在 fusefs 文件系统中使用命名管道和 Unix 域套接字
在 utimensat(2) 中将 UTIME_NOW 转发给守护进程
为 /dev/fuse 实现 kqueue 支持
允许使用 mount -u 更新挂载
允许通过 NFS 导出 fusefs 文件系统
服务器发起无效化名称缓存或数据缓存
尊重 RLIMIT_FSIZE
尝试支持协议版本 7.4 及更早版本的服务器
我还添加了以下性能增强功能:
实现 FUSE 的 FOPEN_KEEP_CACHE 和 FUSE_ASYNC_READ 标志
缓存文件属性
缓存查找条目,包括正向和负向
服务器可选择的缓存模式:写直达、写回或未缓存
写入聚合
预读取
使用 counter(9) 进行统计报告
目前剩下的工作是完成合并分支,并处理任何新引入的 bug。
该项目由 FreeBSD 基金会赞助。
联系人:Mark Johnston <markj@FreeBSD.org> 联系人:Andrew Turner <andrew@FreeBSD.org> 联系人:Michael Tuexen <tuexen@FreeBSD.org> 联系人:Ed Maste <emaste@FreeBSD.org>
有关 syzkaller 的介绍,请参见 2019q1 季度报告中的 syzkaller 条目。
syzkaller 继续发现 FreeBSD 内核中的 bug。在过去的一个季度中,已修复了多个此类 bug,我们继续调查和修复来自 syzkaller 的 bug 报告。扩展 syzkaller 功能的工作也在继续进行:Andrew Turner 实现了对 amd64 内核中 32 位兼容层的模糊测试支持,帮助揭示内核中的一些“暗角”,现在可以将 bhyve 作为虚拟机后端用于 syzkaller,因此现在可以高效而方便地在 FreeBSD 上进行 FreeBSD 的模糊测试。
计划中的工作包括:启用 ZFS 作为模糊测试虚拟机的基础文件系统;扩展 syzkaller 所覆盖的系统调用和 ioctl 范围;在内核中启用 LLVM sanitizers,以捕获更多问题;并利用 netdump(4) 捕获 syzkaller 发现的内核 panic 转储,使其更容易诊断那些 syzkaller 无法找到可重现的测试用例的 bug。
此项目由 FreeBSD 基金会赞助。
联系人:Yoshihiro Ota <ota@j.email.ne.jp>
内核 zlib 升级正在进行中。
Xin (delphij@) 和我一直在紧密合作进行 zlib 升级。我们将 contrib/zlib 移动到了 sys/contrib/zlib,以便内核代码可以访问树中的 zlib。我们还删除了依赖于 zlib 和 inflate 的无用代码,inflate 是一个用于解压 gzip 文件的 unzip 的分支。我们还重命名了 crc.h 以避免与 zlib/crc.h 的冲突。
下一步的目标是将旧的 zlib 和新的 zlib 都编译到内核中,能让每个 zlib 用户独立切换。
联系人:Edward Tomasz Napierala <trasz@FreeBSD.org>
该项目旨在改善 Linux 兼容性层,使其与近期的 Linux 版本更加兼容,并降低潜在开发者为其做出贡献的门槛。
最初的工作集中在工具上,以便更容易调试问题并防止未来的回归。第一部分工作是使得可以使用 Linux strace(1) 工具,并将其作为 linux-c7-strace 包提供。原因是,尽管 FreeBSD 的 truss(1) 和 ktrace(1) 可以追踪 Linux 二进制文件,但它们无法解码 Linux 特有的标志和结构。
第二部分工作是提供 Linux 测试项目二进制文件,作为 linux-ltp 包提供。目前,正在进行将其与 FreeBSD CI 基础设施 http://ci.FreeBSD.org 连接的工作。
此过程中还修复了多个发现的 bug 及改进。其中一个(尚未提交)修复了链接到新版 libc 的二进制文件,有效地修复了最近的 Ubuntu 版本的二进制文件问题。
此项目由 FreeBSD 基金会赞助。
联系人:Konstantin Belousov <kib@freebsd.org>
在 amd64 上,虚拟内存与机器相关的层(pmap)需要跟踪所有已管理物理内存页面的映射,以便能够销毁它们(例如,进行页面交换),或将它们从可写变为只读(例如,在同步页面内容到文件时,避免与用户写入修改发生竞争)。这些映射通过创建 pv_entry 来统计,pv_entry 记录了地址空间(隐式地,通过将 pv 条目链接到 pmap)和映射的虚拟地址。
先前的工作将保护 pv 条目列表的锁与其他 VM 锁分开,放入了 pvh_global_lock 锁,这对于所有地址空间来说是全局的。你仍然可以在 i386 的 pmap.c 中看到它。后来,引入了按页面哈希的 pv 列表锁,这可以减少不同页面在操作 pv 列表时的竞争,但不幸的是,pvh_global_lock 仍然是必要的,以确保某些操作的安全性。
问题出在 amd64 pmap 使用 pmap 锁来保护页表和 TLB 一致性,它是每个 pmap 独立的锁,与 pv 列表锁不同。当更新页面表项时,我们从不释放 pmap 锁,直到必要的 TLB 失效在全局完成,包括通过 IPI 向其他 CPU 发送信号。但是,pv 列表锁在完成必要的失效操作之前可以被解锁。例如,当 pmap 被要求删除特定页面的所有映射(pmap_remove_all(9))时,它检查页面的 pv 列表以查找映射。尽管其他 CPU 的 TLB 还没有失效,列表可能会显示为空。如果该页面被重用,其他 CPU 可能会使用缓存的 TLB 条目修改其内容。允许这种情况发生意味着允许无声的数据损坏,并打开安全漏洞。
因此,全球 pvh 锁会保持到所有 pmap 失效它们的 TLB。这个机制显然存在可扩展性问题,因此开发了基于代数计数的延迟失效(DI)处理方案,每个可能从 pv 列表中删除条目的线程都获得一个代数号并用它标记页面,参见 pmap_delayed_invl_page(9)。然后,例如,在 pmap_remove_all(9) 或 pmap_remove_write(9) 时,pmap 代码会等待当前线程的最大失效代数号超出页面的代数号,这保证了所有必要的 TLB 失效操作已完成。
DI 的原始实现消除了 pvh_global_lock,只使用一个私有互斥锁来处理进出线程的顺序排队,保护一个有界区域。这个方法在大规模并行取消映射的可扩展性基准测试中出现了问题,导致大多数线程在 DI 排队上竞争。
DI 的当前实现转向了无锁队列算法,使用 T.L. Harris 提出的方式,依赖双重 CAS 来合并代数计数和排队。它使用 ifuncs 来选择之前的锁定 DI 或当前的无锁实现,只有那些没有实现 CMPXCHG16B 指令的旧版 AMD Athlon 默认使用锁定的实现。无锁实现仍然会在转闸上阻塞等待线程,以避免优先级倒置问题,但实际上等待事件非常罕见,典型的并行构建世界(buildworld)仅产生单数字事件。
此补丁经过了 Peter Holm 的大量测试,由 Mark Johnston 持续审查,在我解决实现中的 bug 和死锁问题时,Mateusz Guzik 还进行了额外测试,帮助识别了与等待相关的优先级倒置 bug。
此项目由 FreeBSD 基金会赞助。
联系人:Konstantin Belousov <kib@freebsd.org>
execve(2) 系统调用族会替换当前进程中的执行映像。包含程序文本、数据和其他任意预初始化段的文件通常称为文本文件。FreeBSD 将该文件标记为文本文件,该标记与文件写入操作互斥。换句话说,已打开的文件不能执行,且文本文件不能进行写操作。
在处理 execve(2) 系统调用期间,内核需要锁定文本文件的 vnode。这样做既是为了满足 VFS 调用协议,又是为了确保不会有不兼容的并行更改发生在文本 vnode 上。vnode 可以被锁定为独占模式,这与任何其他锁的获取互斥,或者可以被锁定为共享模式,这仅与独占请求不兼容,但允许其他共享拥有者。
原则上,execve(2) 不需要独占的 vnode 锁,因为它不会修改文本 vnode 的内容或元数据。唯一的例外是将 vnode 标记为文本文件,这是通过 v_vflag 中的 VV_TEXT 标志完成的,并由 vnode 锁保护。由于我们修改了 v_vflag,因此保护该修改的 vnode 锁应当为独占锁。
最终结果是,执行相同文件的 execve(2) 调用被串行化。例如,如果用户运行并行构建,执行多个编译任务,则所有编译器的调用会在 execve(2) 期间串行化。
写操作的打开计数包含在另一个结构 vnode 成员 v_writecount 中,该成员也由 vnode 锁保护。由于文本与写操作互斥,因此我重新利用 v_writecount 来指示文本引用。现在,负值的 v_writecount 计数表示文本引用的数量。v_writecount 的内容实际上由 vnode 互锁保护,但通常所有修改操作也至少在共享模式下拥有 vnode 锁。
通过这种方式,我们不再需要在 execve(2) 期间获取独占的文本 vnode 锁,从而消除了串行化的瓶颈。额外的积极效果是,我们开始精确统计 vnode 上的文本引用数量。之前,我们在文本 vnode 最后一次解除映射时清除 VV_TEXT,这可能导致一种模糊的 DoS 攻击,即在执行期间映射文本文件会阻止写操作,直到映射被销毁。现在,我们明确在 vm_map_entry 中标记文本映射,并在解除映射时通过 +1 来解引用 v_writecount。
此项目由 FreeBSD 基金会赞助。
联系人:Slava Shwartsman、Hans Petter Selasky、Konstantin Belousov <freebsd-drivers@mellanox.com>
mlx5 驱动程序提供对 ConnectX-4 [Lx]、ConnectX-5 [Ex] 和 ConnectX-6 [Dx] 适配器卡的支持。mlx5en 驱动程序提供对以太网适配器卡的支持,而 mlx5ib 驱动程序提供对 InfiniBand 适配器和 RDMA over Converged Ethernet (RoCE) 的支持。
以下是 mlx5 驱动程序的更新:
200Gb/s ConnectX-6 以太网:增加对 Mellanox Socket Direct Adapters 的支持,该适配器除了其他功能外,允许在 PCIe Gen 3.0 LAG 接口上运行最高 200Gb/s。
支持 "BlueField" - 多核系统芯片:增加对 BlueField 多核系统芯片(SOC) 的 RShim 驱动程序支持。RShim 驱动程序提供对 BlueField 目标的 RShim 资源的访问,外部主机可以访问这些资源。当前版本的 RShim 提供了用于引导镜像推送和虚拟控制台访问的设备文件。它还创建了一个虚拟网络接口,以连接到 BlueField 目标,并提供对内部 RShim 寄存器的访问。
固件烧录和诊断工具:将 MSTFLINT 添加到 ports 中,该包包含 Mellanox NIC 的烧录和诊断工具。该包包括以下工具:mstflint - 用于查询和烧录固件的工具;mstconfig - 查询和设置 Mellanox HCAs 非易失性配置选项的工具;mstregdump - 从 Mellanox 硬件转储硬件寄存器的实用程序;mstmcra - 该调试工具从设备配置寄存器空间读取/写入数据;mstvpd - 转储卡上 VPD 的实用程序等。
OFED-FreeBSD-v3.5.1 上游:向上游提交并 MFC(合并到主干)了 OFED-FreeBSD-v3.5.1 驱动程序 - 更新的详细内容可以在 Mellanox OFED for FreeBSD 文档 页面找到。
一般更新:
提交了论文用于 EuroBSDcon,进行与 Netflix 联合演讲,题为 "Kernel TLS and TLS Hardware Offload"。论文已被接受。
Mellanox 正在积极努力改善与 FreeBSD 社区的合作。作为此努力的一部分,邀请 FreeBSD 用户提出特性和改进建议,以进一步发展和丰富最终用户体验。此外,Mellanox 继续识别和提出解决方案,以满足客户需求。
此项目由 Mellanox Technologies 赞助。
联系人:Rick Macklem <rmacklem@freebsd.org>
NFSv4.2 是 NFSv4 的一个较新的次要版本,由一组可选的操作/功能组成。这些操作大多数与 POSIX 操作 posix_fadvise(2)、posix_fallocate(2) 和 lseek(2) 对 SEEKHOLE/SEEKDATA 支持相关。还有一个 Copy 操作,允许将文件的字节范围复制到 NFS 服务器本地的另一个文件中,避免了双向的数据传输。FreeBSD-current 现在有一个与 Linux 兼容的 copy_file_range(2) 系统调用,它将在 NFSv4.2 挂载上调用此 Copy 操作。还支持 MAC 标记,但这需要对 RPCSEC_GSS 实现进行修改,以添加对 V3 的支持,因此可能不会很快实现。
NFSv4.2 (RFC-7862) 的实现进展顺利。目前,LayoutError、IOAdvise、Allocate 和 Copy 操作已实现。Copy 操作仍在开发中,需要增加异步支持,以便大规模复制时不会导致 RPC 回复延迟过长。
接下来将实现的主要操作是 Seek,使得 lseek(SEEKHOLE/SEEKDATA) 能在 NFSv4.2 挂载中正常工作。
希望该实现能在 FreeBSD-13 发布时准备好用于 FreeBSD-current/head。
测试始终是非常受欢迎的,用户可以通过从 svn 仓库的 base/projects/nfsv42 下载修改过的内核,并在几台最新的 FreeBSD-current 系统上构建和测试它。
如果有人精通 Kerberos,并希望挑战在内核 RPC 中添加 RPCSEC_GSS_V3 支持,提供相关补丁也将非常受欢迎。
联系人:Jeff Roberson <jeff@FreeBSD.org> 联系人:Andrew Gallatin <gallatin@FreeBSD.org> 联系人:Mark Johnston <markj@FreeBSD.org>
正在开发和完善一系列补丁,以提高 FreeBSD 内核对 NUMA(非统一内存架构)的感知。该工作还旨在普遍提高 FreeBSD 在拥有多个 CPU 系统上的内存管理性能。
FreeBSD 12.0 引入了一些大型更改,改善了其在非统一内存架构系统上的性能。也就是说,在这些系统中,给定地址的内存访问延迟会根据 CPU 的不同而变化。另一轮改进正在开发中,很快将在 FreeBSD-CURRENT 中可用。以下是其中一些补丁的简要描述;其中一些已经提交到 FreeBSD-CURRENT。
在 FreeBSD 的术语中,内容不可被驱逐的内存页称为“wired”。内存页可以在不同情况下被 wired,例如,所有内核内存都是 wired,用户空间应用程序可以使用 mlock(2) 和 mlockall(2) 系统调用请求将内存范围设置为 wired。FreeBSD 历史上对 wired 页的数量定义了一个系统范围的限制,以避免因过多内存无法回收而导致死锁,该限制仅应用于用户空间的 wired 请求,但内核的 wired 请求也被计入此限制,因此,过多的内核 wired 请求可能会导致 mlock(2) 调用失败。这种情况在具有大 ZFS ARC 的系统中很常见。在 FreeBSD-CURRENT 中,此限制已被更改,现在仅将用户空间的 wired 请求计入限制;内核包含多种机制来对内核内存使用施加反向压力,因此在所有 wired 请求上应用全局限制并没有带来太大好处。这修复了大 ZFS 系统中常见的问题,并有助于启用一些管理页面 wired 的代码架构改进。
FreeBSD 历史上在描述单个物理内存页的结构中维护了两个独立的引用计数器。最初,这两个计数器具有不同的属性,但随着时间的推移,它们变得越来越相似。一些合并这两个计数器的工作已经在 FreeBSD-CURRENT 中落地。虽然这对用户没有可见影响,但它简化了页面管理代码,并删除了大量只用于将一种类型的引用转换为另一种类型的代码。这些代码还使用了 heavily contended 锁,因此简化过程提高了内核在某些工作负载下的可扩展性,并启用了进一步的可扩展性改进。
UMA 是 FreeBSD 内核中使用的 slab 分配器。它是支持几乎所有内核动态内存分配的后端。第一轮 NUMA 改进将 NUMA 感知引入了 UMA 的“keg”层,该层分配和管理 slab。然而,UMA 的前端,提供多个对象缓存层的部分,并没有提供基于域的缓存,因此随着时间的推移,缓存可能会“污染”,混合来自不同内存域的对象。现在,这一缓存层正在被修改,以确保来自不同内存域的对象被分区,从而帮助确保消费者可以高效地执行基于域的本地分配和释放。这将启用 UMA 管理对象的全局“首触”分配策略。
在启动期间,FreeBSD 内核会分配一些静态数据结构来跟踪物理内存。这些结构历史上存储在最低可用的物理内存范围内,因此它们可能不在它们所跟踪的内存的同一 NUMA 域中。当尝试将工作负载与特定 NUMA 域绑定时,这种做法并不理想:如果在执行工作负载时,内核频繁访问本地内存的页面结构,而这些页面结构本身没有放置在本地内存中,内核将执行大量的远程内存访问。当前针对 amd64 平台的一些工作正在创建多个页面跟踪结构数组,每个 NUMA 域一个数组,并确保每个数组都位于其对应的域本地。这使得启动时初始化内核数据结构的任务变得复杂,但可以大大减少内核在执行有效工作时跨域通信的数量。类似地,一些针对 per-CPU 结构进行绑定的补丁也在开发中;虽然大多数 per-CPU 内存分配已经返回 CPU 本地内存,但启动过程中分配的一些结构尚未正确放置在访问 CPU 的内存域中。
此项目由奈飞赞助。
更新平台特定功能,并支持新硬件平台。
联系人:Michal Stanek <mst@semihalf.com> 联系人:Kornel Duleba <mindal@semihalf.com> 联系人:Marcin Wojtas <mw@semihalf.com>
Semihalf 团队继续为 Broadcom BCM5871X SoC 系列 开发 FreeBSD 支持。
BCM5871X 是四核 64 位 ARMv8 Cortex-A57 通信处理器,针对网络应用,如 10G 路由器、网关、控制平面处理和 NAS。
自上次更新以来完成的工作:
iProc PCIe 根复合体(内部和外部总线):修复和改进,包括向 GICv2m 驱动程序添加 BCM58712 特性。
BNXT 以太网支持:sys/dev/bnxt.c 驱动程序已扩展以支持 BCM58700 变体,并且 iflib 已经可以在没有 IO 缓存一致性的情况下工作。
进行中的工作:
IPsec 卸载的加密引擎加速。
待办事项
将工作上游化。预计该工作将在 2019 年下半年提交/合并到 HEAD。
此项目由 Juniper Networks, Inc. 赞助。
联系人:Marcin Wojtas <mw@semihalf.com> 联系人:Artur Rojek <ar@semihalf.com>
Semihalf 团队开始为 NXP LS1046A SoC 开发 FreeBSD 支持。
LS1046A 是四核 64 位 ARMv8 Cortex-A72 处理器,具有集成的数据包处理加速和高速外设,包括 10Gb 以太网、PCIe 3.0、SATA 3.0 和 USB 3.0,适用于广泛的网络、存储、安全和工业应用。
已完成的工作:
平台基础支持(多用户 SMP 操作和 UART 启动)
SATA 3.0
进行中的工作:
USB 3.0
SD/MMC
I2C
待办事项
以太网支持
GPIO
QSPI
上游化已开发功能。预计该工作将在 2019 年第四季度提交/合并到 HEAD。
此项目由 Alstom Group 赞助。
许多项目建立在 FreeBSD 基础上,或者将 FreeBSD 的组件融入到他们的项目中。由于这些项目可能对更广泛的 FreeBSD 社区有兴趣,我们有时会在季度报告中包含这些项目提交的简短更新。FreeBSD 项目不对这些提交中的任何声明的准确性或真实性作出任何保证。
在去年剑桥的 BSDCam 大会上,我们讨论了创建一个模板化的黑客松,就像我们为 Devsummits 创建模板一样。为了测试这个想法,我被说服(我发誓“被骗”这个词是正确的)在阿伯丁举办了一场黑客松。
作为一个项目,我认为我们从黑客松中受益良多,但它们确实需要一些组织工作。最糟糕的是处理从与会者那里收取费用的事情,以便支付活动费用。我在 BSDCam 上与来自基金会的 Deb Goodkin 交谈,我们安排使用他们基于 EventBrite 的新系统来处理票务。
总体来说,这个系统使得与会者注册并将他们的详细信息和需求提供给我变得简单。活动结束后,费用也通过基金会得到了报销。这比我自己建立一个定制系统或甚至自己设置和使用 EventBrite 更容易得多。
黑客松进行得很顺利,你可以阅读 Benedict 和 Kristof 随后的报告,但与我最初预期的相比,参与人数较少。
对于计划未来举办黑客松的黑客们,记得注意常见的国家假期(我们本可以安排活动避免碰到复活节)并且预期重大地缘政治事件会让事情变得不可预测(我们知道脱欧会有影响,但不确定何时发生)。
我需要感谢阿伯丁大学提供黑客松的场地,并鼓励你们在自己所在的地方举办黑客松。下一个活动应该在你们的家乡举办。
Benedict Reuschling
阿伯丁的黑客松活动发生在复活节周的阿伯丁大学。尽管只有 Kristof Provost (kp@) 和我与我们的主持人 Tom Jones 一起参与,但我仍然认为这对我们来说是一个富有成效的周。黑客松的整体主题是网络,每个人都为这个目标提供了些什么(无论是 PR、提交未完成的工作,还是其他一些小部分)。我们在 4 月 16 日星期二的晚餐时聚在一起,讨论了我们一周的计划。
Kristof 和我在 AsiaBSDcon 上谈到过,当我参加他的 FreeBSD 测试教程时,我们应该在开发者手册中增加一个关于它的章节。我们还用第一次见面的机会,相互同步了关于 FreeBSD 的最新动态,从开发者的视角来看。
第二天,我们在 Frazer Noble 大楼见面,黑客松就在这里进行。这是校园中较新的建筑之一,巧妙地融入了城市中的老房子。由于我们只有几个人,我们在 Tom 的办公室里举行黑客松,那里有足够的空间。他还带我们参观了如果有更多人的话我们应该使用的房间,并且给我们做了一个小型的参观。作为一名大学工作人员,我总是对其他教育机构的结构和他们为学习提供的房间和设备感兴趣。总的来说,我的印象是,那里有足够的空间和设备可以在黑客松中使用。
返回后,我们决定在我们进行的提交中使用一个特殊的标签来标识它们来自这个黑客松。我们选择了 "Event:",因为它是一个足够通用的术语,可以在其他事件中使用,比如会议。我们以前使用的 "Sponsored by:" 这一行更适用于公司或个人赞助特定功能,所以我创建了一个审查,向提交者指南中添加这一行。
Kristof 给我带了一些 FreeBSD 手册中 pf 章节的修改,我开始处理这些内容。我为他创建了一个审查,提交也在那时完成,利用了快速的反馈周期。最初,我们考虑通过 hangouts 与人联系,但后来决定如果需要他们的意见,就通过我们常用的 IRC 频道联系他们。
Kristof 和 Tom 一起处理了一些网络相关的事情,而我开始着手创建测试章节的初稿。我们偶尔开始讨论某些事情,然后再回到各自的工作中。需要协调或有问题时,我们直接提问,得到答案后继续工作。这为我们提供了一个很好的工作氛围。我处理了一些文档 PR,而 Kristof 则找到了 pf 中的一个 bug 并修复了它。
下午的时间我们在不同的地方度过,步行即可到达。Tom 确保我们了解作为学生的感受,并且那里有丰富的食物种类。晚上,Tom 驱车带我们到城里,在不同的餐馆享受一周的晚餐。
阿伯丁作为一座城市有很多可看之处。从第二天开始,Kristof 和我会在我的酒店见面,我的酒店离阿伯丁海滩很近,我们会一起沿着海滩走到大学。据 Tom 说,当天气合适时,那里可以看到海豚,暖流为这个城市带来了足够的温暖,使得冬天没有想象中的那么寒冷。
Tom 还带我们参观了大学的动物学系,那里有一个美丽的花园,种植着各种植物和树木,还有一个展示动物标本的博物馆。这里是拍照和从技术讨论中稍作休息的好地方。Tom 还为活动制作了 T 恤,现在这些 T 恤已经成为稀有的收藏品。
我需要在周日返回,因此 Tom 在前一天带我们游览了苏格兰高地。我们停留在几个地方拍照,Tom 向我们解释了很多他在当地生活了多年的事情。我们来到了 Stonehaven,在那里的外卖餐厅吃了鱼和薯条,这家餐厅因可持续捕鱼而获得了许多奖项。这无疑是本周的亮点,即使在那时,我们还是不停地讨论 FreeBSD 和网络。
尽管更多的人可能会产生更多的成果,但我们三个人作为一个小团体确实是富有成效的。它也使得规划和协调变得更加容易和灵活。Tom Jones 做了很多准备工作,并且是一个出色的向导。我鼓励他在未来再举办类似的黑客松,并希望下次会有更多的人来阿伯丁,花些时间在 FreeBSD 上进行黑客攻坚。
Kristof Provost
虽然我以前去过苏格兰,但我从未见过阿伯丁。这是一座迷人的城市,我热情推荐大家来访问。
我比 Benedict 晚到了一些,但轻松到达了酒店,并及时与 Benedict 和 Tom 一起吃晚餐。
尽管人数不多(或许正因为如此),这次黑客松依然非常高效。Benedict 和我一起查看了手册中的 pf 文档,以便 Benedict 重新整理并改进它。(Benedict 做的工作,但我还是要占点功劳。)
Tom 和我查看了 GSoC 提案,尝试为两个有潜力的提案寻找导师。我们俩也都是候选导师。我们很快就会知道我们的学生是否被选中。
Tom 还提出了一个补丁,旨在消除 RFC 2675 中的 IPv6 Jumbo 数据包。我非常支持这个提案。
我还检查了一些开放的 pf 问题:
pfctl 的 interface_group() 函数检查名称是否为接口或接口组。它曾假设接口名称总是以数字结尾,但这种假设多年来一直是错误的。这个问题在 r346370 中修复。
DIOCRSETTFLAGS ioctl() 错误地使用了 copyin()(它在调用时持有一个锁),这可能导致 panic。
上述问题实际上是通过我的本地 syzcaller 实例发现的,我已设置它以添加 pf 支持。现在这个支持已经合并,我们可能会很快看到 syzcaller 检测到更多问题。
对于 DIOCRSETTFLAGS 问题,我还扩展了 pf 测试以检查此问题。
如果 pft_set_rules 调用未能设置规则,pf 测试现在将失败。这实际上还没有引发问题,但它将使调试测试变得稍微容易一些,也许现在能捕捉到更多问题。
周六,Tom 带我们去了苏格兰一些美丽的地方。结果发现这里有很多这样的地方。我很难做到完全公正的描述,但 Tom 在这段计算机热潮过去后,或许可以在苏格兰旅游局找到一份好工作。
回家途中,我经过奥斯陆,并利用这个机会与两位 EuroBSDCon 本地组织者共进午餐。EuroBSDCon 的名额正在快速填满,赶紧注册,确保你的位置!
联系方式:Michael Muenz <m.muenz@gmail.com>
为了引入更多的安全智能,我们维护了 FreeBSD 上的 zmaltail Port。这个基于 Python 的开源项目可以作为传感器或中央服务器。它监听特定的 Port 或协议,并将 IP 地址和域名与静态和动态数据源进行比对,这些数据源由社区贡献。
通过在多个防火墙上安装这个软件并让它们向中央服务器发送数据,你可以非常快速地检测到攻击和漏洞。在第二季度,我们将此 Port 更新到了最新版本,并且与核心开发者(同时也是 SQLmap 的共同作者)保持联系,以推出新功能。
我们目前正在尝试将另一个项目 Wazuh 添加为 Port。Wazuh 是 Ossec 的一个分支,Ossec 已经在 Ports 中。与 Ossec 相比,Wazuh 增加了一些智能功能,比如与 ELK Stack 的完整集成,包括自己的应用程序和仪表盘。
安装 Wazuh 后,无论是在你的 web 服务器上,还是在 Windows 桌面上,你都可以监控文件完整性或日志文件,以检测各种攻击。其主动响应功能让你能够向防火墙发送 API 调用,从而动态封锁攻击者。
由于 Wazuh 提供了完整的 ELK Stack,你还可以将其用作中央日志解决方案,从而为你的网络提供更好的安全洞察。
该项目由 m.a.x. Informationstechnologie AG 赞助。
联系方式:Sergiu Weisz <sergiu121@gmail.com> 联系方式:Marcel Molenaar <marcel@freebsd.org> 联系方式:Marcelo Araujo <araujo@freebsd.org> 联系方式:Mihai Carabas <mihai@freebsd.org>
通过使用 libvdsk 库添加对 QCOW 格式在 bhyve 中的支持。libvdsk 被用来替代 bhyve 中的常规磁盘操作,调用 libvdsk 并将操作交给特定的磁盘处理程序。
要使用此功能,必须安装启用了 libvdsk 的 bhyve 版本,并从上述链接中的 libvdsk 仓库安装 libvdsk。
新增功能:
扩展 libvdsk,使实现新格式更加容易
改进读/写性能和稳定性
增加对写时复制(Copy-On-Write)的支持
未来任务:
将 libvdsk 集成到 bhyve 中
Matthew Grooms
联系方式:Alfonso Sabato Siciliano <alfonso.siciliano@email.com>
nsysctl 实用程序是 /sbin/sysctl 的克隆,用于获取或设置内核状态,支持 libxo 和额外选项。
你可以使用 nsysctl 来探索 sysctl MIB,显示对象的值和信息。输出通过选项明确指示,并通过 libxo 以人类可读和机器可读的格式打印。此外,一些值会被解析并以结构化的方式显示(例如,vm.phys_free)。支持 efi_map_header 已添加,但未经测试,如果有人可以通过 machdep.efi_map 尝试一下,将不胜感激。
请参考教程以获取更详细的说明。