2015 年第四季度,FreeBSD 活动频繁。这是连续第三个季度,我可以说这次发布的是最长的报告!非常感谢所有主动提交主题和条目的朋友们——能在这些报告中看到更全面的持续开发情况,对社区学习大有裨益。
本季度成立了一个实验性的新的 Triage Team(分诊团队),旨在创建一种新的方式让社区成员参与进来,并提升问题管理和整体生产力。更有效地利用自动化和工具可以帮助提升开发者的生产力和 FreeBSD 的质量,正如 Jenkins 和持续集成工具的采用,能够迅速捕捉回归问题,并保持系统的高标准。
将我们 BSD 的高标准带到新架构的努力仍在继续,其中 arm64 的令人印象深刻的工作使其晋升为 Tier-2 状态,同时新 RISC-V 硬件架构的启动也掀起了一阵工作热潮。软件架构方面也在积极开发,包括系统启动和服务管理。本报告中提到了几种潜在的初始化系统替代方案:launchd、relaunchd 和 nosh。来自学术研究(如多路径 TCP)和行业现实(如改进 sendfile(2) )的架构变更也在进行中。看到 FreeBSD 为来自学术界和工业界的贡献提供一个欢迎的平台,令人感到振奋。
无论是来自学术界还是工业界,爱好者还是专业人士,我希望你们和我一样,对本报告中涉及的所有进展和项目,以及 FreeBSD 的未来感到兴奋!
——Ben Kaduk
提交截止日期:2016 年 4 月 7 日,涵盖 2016 年 1 月至 3 月期间的内容。
联系:FreeBSD 发布工程团队 <re@FreeBSD.org>
FreeBSD 发布工程团队负责制定和发布 FreeBSD 官方项目发布的时间表,宣布代码冻结,并维护相应的分支等。
在 2015 年最后一个季度,发布工程团队为三个额外的 FreeBSD/arm 系统增加了支持:BANANAPI、CUBIEBOARD 和 CUBIEBOARD2。
除了定期为 FreeBSD 11.0-CURRENT 和 FreeBSD 10.2-STABLE 构建开发快照外,发布构建代码还进行了若干更改和增强。值得注意的是,发布构建代码不再生成 MD5 校验和,而是使用 SHA512。
年末时,重点主要集中在即将到来的 FreeBSD 10.3 发布周期上,该周期将于 2016 年 1 月开始。
一如既往,帮助测试开发快照构建对产生高质量的发布版本至关重要,我们鼓励大家在可能的情况下进行开发快照测试。
此项目由 FreeBSD 基金会赞助。
联系:Bugmeisters <bugmeister@FreeBSD.org> 联系:Kubilay Kocak <koobs@FreeBSD.org> 联系:Mahdi Mokhtari <mokhi64@gmail.com>
Bugmeister 团队迎来了一位新成员,Mahdi Mokhtari (mokhi64@gmail.com)。Mahdi 在 FreeBSD 项目中贡献了一个多月。在通过与 Bernard Spil 的合作创建 Chef-Server 和 MySQL 5.7 的 Port 后,通过与 Kubilay Kocak 的接触,Mahdi 获得了有关合适项目的指导,例如 Bugzilla 开发,以帮助 Bugmeister、Bugzilla Triage 团队、开发人员和社区,改善问题跟踪。到目前为止,情况如下:
问题跟踪可以是“系统缺陷跟踪”或“系统错误跟踪”。系统缺陷跟踪是允许单个或多个开发人员有效地跟踪其产品中未解决问题的过程。我们使用 Bugzilla 来管理 FreeBSD 项目的问题。
我们很高兴宣布我们在问题管理系统方面的一些进展:
我们对 AutoAssigner 模块进行了改进(尚未部署),该模块之前由 Marcus von Appen 开发,用于默认将 Port 错误分配给维护者,改进包括:
改进和修复了问题摘要字段中的 Port 检测,以便更好地自动分配给维护者。
重构代码,使得未来的开发更加容易和快速,并且以更模块化的方式进行。
我们开发了一个新的模块(FBSDAttachment),它可以在大多数情况下自动设置附件上的维护者批准标志值。这将提高解决时间、三角处理的一致性,并减少三角人员和维护者的手动工作量。
我们报告并将多个错误提交到上游 Bugzilla,并与上游的 Bugzilla 开发人员合作。
对模板进行重大改进,提高可用性和简洁性。
进一步改进自动化(例如,额外处理提交日志)。
联系:FreeBSD 核心团队 <core@FreeBSD.org>
在过去的一个季度里,核心团队的注意力集中在两个主要问题上:安全团队的重组和是否将 GPLv3 许可的代码导入源代码仓库的问题。
重组安全团队的想法是由核心成员、最近被任命为副安全官(SO)的 Gleb Smirnoff 提出的。这一提议在今年的 BSDCan 会议上向核心团队提出。此前,安全团队包含了多个成员(人数随时间变化,但超过两人),现已重新组织为两个角色:安全官和副安全官。因此,安全团队的角色被重新定义为负责控制安全敏感信息的分发,既包括与外部机构和报告安全问题的个人的接口,也包括将这些报告连接到项目内有技术专长的人员。此变更将提高项目对安全警报的响应能力,帮助保持机密信息的安全,减少安全官的工作负担。安全官团队将继续从与核心团队、集群管理和发布工程团队的联系中受益,并将由一名秘书协助;他们还可以在起草安全公告时获得前任和未来潜在(副)安全官的意见和帮助。 核心团队特别感谢曾在安全团队工作过的成员们为项目做出的贡献,现在安全团队的职责已并入安全官的职责。
关于核心团队的另一个大问题是如何为所有受支持的架构提供现代工具链。Tier 1 架构要求使用不受繁重许可条款限制的工具链。目前,i386 和 amd64 架构由 LLVM 套件提供支持,包括 Clang 编译器、LLD 和 LLDB。然而,LLVM 对其他(二级架构及更低)架构的支持质量尚未足够好,无法满足需求,而已有的较旧的 GPLv2 工具链无法支持一些新兴架构,如 arm64 和 RISC-V。坦白讲,为了支持这些架构,在 LLVM 支持到位之前,我们必须依赖 GNU 项目的 GPLv3 许可工具链。 争议在于是否将 GPLv3 许可的代码导入 FreeBSD 的源代码仓库,这将带来专利条款和源代码再分发的义务,不仅对 FreeBSD 项目本身,也对众多下游用户产生影响。如果没有现成的工具链,是推进新架构开发的一大障碍。 一种潜在的解决方案是创建一系列“GPLv3 工具链”基本系统包,单独在一个源代码仓库中维护,例如在 FreeBSD 的 Github 区域内。这些包将在引入相应机制后,与其他基本系统二进制包一起分发。 核心团队认识到这是一个具有深远影响的决定,并将撰写一份立场文件,分发给所有相关方,以便征求社区的意见。核心团队欢迎所有相关方对这一问题的反馈。
除了这两个大问题,核心团队还处理了其他事项:
核心团队批准了成立一个 wiki-admin 团队来管理 Wiki,策划 Wiki 内容,改进现有技术内容的导航和组织,并评估新的 Wiki 软件,以期将 Wiki 向公众开放,允许更多人贡献。
成立了一个外部审查委员会,审查行为准则,其中包括项目成员和外部专家。审查过程正在进行中,核心团队正在等待其报告。
发现标准文档许可证不适合其目的,doceng 团队已暂时恢复了先前的许可证,直到新的替代方案完成。新的许可证现已成为提交新文档的默认许可证。然而,这一审查过程中,出现了一个问题,即维护文档部分的作者归属困难,有些文档可能仅包含几个字。与源代码不同,文档块常常在文件内或文件之间移动。因此,核心团队希望引入一项类似于 Apache 基金会的自愿贡献协议,在该协议下,版权将转交给 FreeBSD 基金会,个人贡献者的名字将记录在一个“作者”文件中。这将成为项目现有版权机制的一个替代方案。核心团队希望听取对此问题的意见。
核心团队批准了成立一个新的“dev-announce”邮件列表,所有 FreeBSD 提交者应成为该列表的成员。该列表将是一个低流量的、经过审核的邮件列表,包含重要公告、代码冻结预警、政策变更和影响项目的事件通知。
大约八年前,曾尝试导入 OpenBSD 的传感器框架。由于担心可能会阻碍更好设计框架的开发,该提议当时被拒绝。然而,在此期间,没有出现此类框架的开发,而传感器框架已在 OpenBSD 和 FreeNAS 中成功使用。尽管有人担心框架效率以及对电池寿命可能产生的影响,核心团队倾向于批准导入,但希望先与有兴趣的开发者进行咨询。
核心团队正在探索欧洲法院确立的“被遗忘权”对项目的法律影响。
核心团队还在寻找一种替代方案,以便举行定期的每月电话会议。当前付费的服务音质差且不稳定,核心团队希望转向免费的在线视频会议解决方案。
本季度还出现了特别大量的新提交权限请求,偶尔有四个投票同时进行。请欢迎 Kurt Lidl、Svatopluk Kraus、Michal Meloun、Jonathan Looney(Juniper)、Daisuke Aoyama、Phil Shafer(Juniper)、Ravi Pokala(Panasas)、Anish Gupta 和 Mark Bloch(Mellanox)加入 src 提交者行列。此外,核心团队很高兴在多年的间歇后恢复了 Eric Melville 的提交权限。
本季度没有新提交权限被收回。Kevin Bowling(LimeLight Networks)被批准为非提交者账户,他将负责使用 clusteradm 进行系统管理,特别关注现在在 LLNW 设施中托管的集群部分。FreeBSD 基金会的 Deb Goodkin 被加入到开发者邮件列表中:她是基金会董事会中少数未加入该列表的成员之一,了解开发者社区的动态将有助于她更有效地支持项目。
联系人:Bugmeister <bugmeister@FreeBSD.org> 联系人:Kubilay Kocak <koobs@FreeBSD.org> 联系人:Vladimir Krstulja <vlad-fbsd@acheronmedia.com> 联系人:Rodrigo N. Hernandez <rodrigo.FreeBSD@minasambiente.com.br>
在 2015 年第四季度末,Kubilay Kocak (koobs@) 发起了一项实验性 Bugzilla 问题分类团队的成立。该团队的主要目标是增加社区参与(新分类员的加入/培训)并提升现有的程序和工具等方面。此实验项目的启动得到了 Vladimir(irc/freenode 上的 blackflow)和 Rodrigo(irc/freenode 上的 DanDare)的参与,他们希望贡献自己的力量并更深入地参与 FreeBSD 项目。该实验性试点项目的任务是建立改进的问题(问题报告)管理程序,包括更好的分类和优先级排序,最终加快问题的解决速度。
我们很高兴地报告该实验团队的进展:
已在 Freenode 上建立了 IRC 频道 #FreeBSD-bugs
,我们成功地使用该频道交换关于分类程序的信息,寻求帮助,提出修改建议,并讨论相关话题。
我们确定了问题分类团队的主要职责,即对各种问题报告进行分类(目前主要限于 Port 和明显的源码问题)并促进问题分配,确保报告的问题被充分解释,包含所有适当的信息(或尽可能多的信息),并且能够引起能够处理这些问题的人员的注意。
Vladimir 和 Rodrigo 正在成功地接受问题分类以及移植过程的培训(Vladimir 还接管了一些 Port 的维护工作)。
这一实验受益于新成员对问题跟踪的引入。它自然而然地导致了对从最基本方面开始的整个跟踪过程的回顾。这种“新鲜眼光”的参与帮助我们在过程中发现了一些小细节,并有机会审查实际程序中的一些小问题,随后提出了如何改进整体问题跟踪和管理的建议。这些新想法包括组织性和技术性的想法与解决方案,如新或修改的关键字或标志以改进分类、分类工作流以及 Bugzilla 技术改进等。
一个重要目标是编写有关使用 Bugzilla 和问题管理工作流的最佳实践文档。这份文档不仅应面向直接参与问题分类任务的人员,还应面向普通用户。另一个相关点是,分类团队的反馈可以用来改进 Bugzilla,调整现有功能以更好地适应 FreeBSD 的需求,以及开发新功能(请参见 Mahdi "Magic" Mokhtari 的报告“Bugzilla 改进”)。
我们仍在收集创意,为设置一个 Wiki 命名空间做准备,内容涉及所有参与问题跟踪的各方,从用户(报告者)到维护者和提交者。未经组织的头脑风暴文档链接在此报告中。
由于问题分类团队仍然很年轻,我们预计在下一次状态报告中会有更多的信息和行动报告。
设置 Wiki 命名空间并将头脑风暴文档整理成一组有意义的文档。
我们正在积极招募人员加入 FreeBSD 分类团队。如果你有兴趣参与并贡献于 FreeBSD 项目的一个最重要的面向社区的领域,请加入 Freenode IRC 上的 #freebsd-bugs 频道并告诉我们! 经验上有问题跟踪经验者优先,但不是必需的。无需事先了解项目的内部知识或技术技能,只需带着沟通技巧和积极态度来即可。提供培训。
联系人:Warner Losh <imp@FreeBSD.org>
我为奈飞编写的 CAM I/O 调度器已开始进行审查。预计这一过程将在 FreeBSD 11 分支发布之前完成。
有关该工作的详细信息,可以查看去年在 BSDCan 上发布的论文。
简而言之,该调度器允许区分 I/O 类型,并根据 I/O 的类型和特性(包括最近请求相对于历史平均值的延迟)来限制 I/O。这在为 SSD 性能调整系统负载时尤其有用。将包括一个简单的默认调度器(我们今天在 FreeBSD 中使用的调度器),以及一个可以很好地调优视频流系统负载的调度器。
该项目由奈飞公司赞助。
联系人:Konrad Witaszczyk <def@FreeBSD.org>
内核崩溃转储包含当前运行进程的信息。此信息可能包括敏感数据,例如当发生内核 panic 时,浏览器在内存中保存的密码。能够读取转储设备或崩溃目录中的数据的实体,也可以从核心转储中提取这些信息。为防止这种情况发生,应该在将核心转储存储到转储设备之前对其进行加密。
该项目允许在 panic 期间对核心转储进行加密。用户可以配置内核进行加密转储,并在重启后使用现有工具 dumpon(8)
和 savecore(8)
保存核心转储。新增了一个工具 decryptcore(8)
用于解密核心文件。
一个补丁已上传至 Phabricator 进行审查。该补丁目前正在更新以响应审查意见,并将在接受后尽快提交。有关更多技术细节,请访问 FreeBSD-security 邮件列表存档或查看 Phabricator 审查。
联系人:Craig Rodrigues <rodrigc@FreeBSD.org> 联系人:Jenkins 管理员 <jenkins-admin@FreeBSD.org> 联系人:FreeBSD 测试 <FreeBSD-testing@freebsd.org>
Jenkins 持续集成与测试项目一直在帮助提升 FreeBSD 的质量。自上次状态报告以来,我们迅速发现了导致构建失败或测试失败的提交。FreeBSD 开发者看到这些问题并迅速修复了它们。一些亮点包括:
Ricky Gallagher 编写了一个名为 portest
的脚本,该脚本可以接受 FreeBSD Ports 的补丁作为输入,并生成一系列命令来从 Subversion 检出 Ports,应用补丁,然后调用 poudriere
来构建受影响的 Ports 部分。Ricky 在开发过程中与 Torsten Zühlsdorff 进行了咨询。此脚本将在以后用于测试 Ports 的更改。
Craig Rodrigues 将一些 Jenkins 构建转换为使用工作流插件。工作流插件是由 Jesse Glick 和 Cloudbees 的其他开发者编写的,Cloudbees 是 Jenkins 的主要商业支持公司。通过这个插件,Jenkins 作业可以用 Groovy 脚本语言编写的特定领域语言(DSL)来表达。工作流脚本旨在以简单的脚本语言提供对 Jenkins 功能的复杂访问。当 Jenkins 作业变得更复杂且相互依赖更多时,使用 DSL 更容易维护,而不是通过菜单创建 Jenkins 作业。 Craig Rodrigues 与 Jesse Glick 合作,找出了与工作流插件一起使用的 Durable Task 插件的问题。这个问题似乎主要出现在非 Linux 平台上,如 OS X 和 FreeBSD。
Eitan Adler 与 Craig Rodrigues 合作,测试了由 Aiden Scandella(Uber)编写的 Jenkins 插件,该插件集成了 Phabricator 和 Jenkins。使用该插件,如果有人提交了代码审查(通过 Phabricator 的 Differential 工具),将触发 Jenkins 构建并更新该代码审查的结果。 Eitan Adler 和 Craig Rodrigues 在使用 FreeBSD 文档库进行测试时取得了一些初步成功,但该插件仍然有许多特定于 Uber 环境的硬编码依赖,这使得它难以在 FreeBSD 上开箱即用。Alexander Yerenkow 提交了一些修复补丁,但该插件仍需进一步改进。Craig Rodrigues 认为,可能更好的方法是编写一个工作流脚本,直接调用 Phabricator 命令。
Craig Rodrigues 向多个插件推送了修复补丁,包括:
SCM 同步配置插件
NodeLabel 参数插件
Subversion 插件
多个 SCM 插件
Clang Scanbuild 插件
Craig Rodrigues 获得了对 SCM 同步配置插件、多个 SCM 插件和 Clang Scanbuild 插件的提交权限。
-許立文设置了多个构建,使用位于 NYI 机器上的 jails 进行构建,这些机器由 FreeBSD 集群管理员管理。其中特定的一个构建目标是 64 位 ARM。
Michael Zhilin 修复了 Akuma 库在 FreeBSD 上的问题。Akuma 库被 Jenkins 用来确定传递给正在运行进程的命令行参数。为了解决这个问题,Michael 使用了 FreeBSD 特有的 sysctl()
调用,配合 KERN_PROC_ARGS
来确定正在运行的 pid 的参数。这个修复使得 Jenkins 实例在安装新插件后能够重新启动。
Julio Merino 接受了 Craig Rodrigues 为 Kyua 提供的修复,解决了将 XML 字符写入测试报告文件的问题。
继续在各种构建中使用工作流插件。
设置一个构建来测试 bmake 的元模式。
完成与 Phabricator 的集成。
有兴趣帮助的人员可以加入 freebsd-testing@FreeBSD.org 邮件列表。
联系人:Max Gurtovoy <maxg@mellanox.com> 联系人:Sagi Grimberg <sagig@mellanox.com>
基于在 FreeBSD 10.0 中发布的内核内 iSCSI 发起栈以及最近添加的 iSCSI 卸载接口,Mellanox Technologies 开发了 RDMA (iSER) 发起者支持的 iSCSI 扩展,以利用 Mellanox 10、40、56 和 100 Gigabit Infiniband (IB)/以太网适配器的硬件卸载功能,实现高效的数据传输。
远程直接内存访问 (RDMA) 已被证明对存储应用具有巨大价值。RDMA 基础设施提供了零拷贝、CPU 卸载、可靠传输、网络整合等多种优势。iSER 协议消除了传统 iSCSI/TCP 栈中的一些瓶颈,提供低延迟和高吞吐量,适合对延迟敏感的工作负载。
此工作包括一个新的 ICL 模块,用于实现 iSER 发起者。iSCSI 栈进行了轻微修改,以支持一些额外功能,如异步 IO 完成、未映射数据缓冲区和数据传输卸载。用户可以通过 iscsictl
选择 iSER 作为 iSCSI 传输。
该项目正在向 FreeBSD 11-CURRENT 合并,并预计将在 FreeBSD 11.0 中发布。
该项目由 Mellanox Technologies 赞助。
联系人:Stanislav Galabov <sgalabov@gmail.com>
该项目旨在为基于 MIPS 处理器的 Ralink/Mediatek WiFi 路由器系统级芯片 (SoC) 设备添加 FreeBSD 支持。这些 SoC 通常用于嵌入式网络设备,如 WiFi 路由器。支持这些 SoC 将使 FreeBSD 能够在更多低成本设备上运行,帮助 FreeBSD 在嵌入式系统领域的普及。
该项目目前的目标是支持以下 Ralink/Mediatek 芯片组:RT3050、RT3052、RT3350、RT3352、RT3662、RT3883、RT5350、RT6855、RT6856、MT7620、MT7621、MT7628 和 MT7688。计划支持以下功能(如适用):中断控制器、UART、GPIO、USB、PCI/PCIe、以太网和 SPI。
该项目由 Smartcom - Bulgaria AD 赞助。
非常欢迎帮助为上述 SoC 添加 WiFi 驱动支持(可能是为 ral(4)
添加支持)。
非常欢迎帮助重构 if_rt(4)
以便在上述所有 SoC 上使用。
非常欢迎帮助测试目标板(例如 WiFi 路由器)。
联系人:Nigel Williams <njwilliams@swin.edu.au>
Multipath TCP(MPTCP,多路径 TCP)是对 TCP 的扩展,允许在标准 TCP 会话中使用多个网络接口。新增地址并在这些接口之间调度数据,整个过程对 TCP 应用来说是透明的。
该项目的目标是提供一个与参考 MPTCP 实现兼容的 MPTCP 内核补丁,并进行额外的增强,以支持网络研究。
v0.51 版本已在我们的仓库中标记,该版本相较 v0.5 有一些小的改进。
我们现在已移除了许多原先在 tcp_do_segment
、tcp_output
和其他用于标准 TCP 连接的函数中的 MPTCP 代码。这样做的目的是将新增的 MPTCP 代码限制在仅对 MPTCP 连接有效,常规 TCP 连接则继续使用现有代码。
我们目前正在实现子流套接字缓冲区调用和事件处理。这些将处理子流套接字状态的变化、MP 信号传递和传入的数据段。
这还需要对 MP 选项处理进行一些重构,特别是如何解析和存储传入的 DSN 映射,以供 MP 层重组时使用。
我们还在研究如何利用新 TCP 栈的模块化增强,创建针对子流的 TCP 函数。
该项目由 Community Foundation Silicon Valley 和 FreeBSD 基金会赞助。
完成子流事件处理和新选项解析的实现。
更新文档和任务列表。
联系人:Christian Brueffer <brueffer@FreeBSD.org> 联系人:Robert Watson <rwatson@FreeBSD.org> 联系人:TrustedBSD 审计邮件列表 <trustedbsd-audit@TrustedBSD.org>
OpenBSM 是一个 BSD 授权的 Sun 基本安全模块(BSM)API 和文件格式的实现。它是 FreeBSD 和 Mac OS X 中 CAPP 审计实现的用户空间部分。此外,审计跟踪处理工具也应该能够在 Linux 上工作。
本季度的进展缓慢但稳定,最终发布了 OpenBSM 1.2 alpha 4,这是三年来的首次发布。该版本修复了各种漏洞并改进了文档;完整的更改列表请参见 GitHub 上的 NEWS 文件。该版本已被导入 FreeBSD 主干并合并到 FreeBSD 10-STABLE,因此将成为 FreeBSD 10.3-RELEASE 的一部分。
在不同版本的 FreeBSD、Mac OS X 和 Linux 上测试新版本。特别是,Mac OS X 10.9(Mavericks)及更新版本的测试将非常有帮助。
修复通过 GitHub 和 FreeBSD 错误跟踪器报告的问题。
实现 GitHub 上 TODO 列表中提到的功能。
联系人:Mikaël Urankar <mikael.urankar@gmail.com> 联系人:Oleksandr Tymoshenko <gonzo@FreeBSD.org>
树莓派 SoC 由两个部分组成:ARM 和 GPU(VideoCore)。许多有趣的功能,如 OpenGL、视频播放和 HDMI 控制,都是在 VideoCore 端实现的,并可以通过博通提供的库(用户空间仓库)从操作系统中访问。这些库已被移植到 FreeBSD,Mikaël 创建了 misc/raspberrypi-userland
Port。 他还为 omxplayer(一个利用 VideoCore API 的低级视频播放器)创建了 Port,并正在为 Kodi(以前为 XBMC)创建一个 Port,Kodi 是一款更为用户友好的媒体播放器软件,支持树莓派。
联系人:Edward Tomasz Napierala <trasz@FreeBSD.org>
RCTL 资源限制机制缺少一个重要部分,即限制磁盘吞吐量的能力。该项目旨在填补这一空白,使得可以为读取每秒字节数(BPS)、写入 BPS、读取 IO 操作每秒(IOPS)和写入 IOPS 添加 RCTL 规则。它还增加了一个新的限制机制,当达到限制时延迟进程执行。
该项目已接近实现完成,除测试外,主要的工作是将其与 ZFS 集成。预计该项目将在 FreeBSD 11.0 中发布。
该项目由 FreeBSD 基金会赞助。
联系人:Edward Tomasz Napierala <trasz@FreeBSD.org>
FreeBSD 长期缺少的一个特性是能够使用临时 rootfs 启动,配置内核以访问真正的 rootfs,然后将临时 root 替换为真实的 root。在 Linux 中,这个功能被称为 pivot_root。reroot 项目以一种稍微更用户友好的方式提供了类似的功能:重启。简单来说,从用户的角度来看,它看起来像是系统执行了部分关机,杀死所有进程并卸载 rootfs,然后执行部分重启,挂载新的 rootfs,运行 init 并按照通常的方式运行启动脚本。
该项目已完成,所有相关代码已提交到 FreeBSD 11-CURRENT,预计将与 FreeBSD 11.0 一起发布。
该项目由 FreeBSD 基金会赞助。
联系人:Alexander Chernikov <melifaro@FreeBSD.org>
projects/routing 子版本分支是一个 FreeBSD 路由系统重构,旨在提升性能、可扩展性,并为路由栈增加高级功能。
当前的包输出路径存在过度锁定的问题。将包转换为适合在网络上传输的帧需要获取和释放四个不同的竞争锁。该项目的首要目标是将输出路径所需的锁数量减少到仅两个 rmlock(9),以实现接近线性的扩展。
自九月以来,其中一个锁(用于保护链路级条目)已经完全从包数据路径中移除。引入了一个新的路由 API,具有更好的可扩展性,并隐藏了路由内部细节。大多数旧路由 API 的消费者已转换为使用新 API。
联系人:FreeBSD 图形团队 <freebsd-x11@freebsd.org>
若干重要 Port 已更新:Mesa 更新到 11.0.8,X.Org 服务器更新到 1.17.4,libdrm 更新到 2.4.65,以及许多应用程序和库。X.Org 服务器的最新版本 1.18 正在我们 Port 开发树中测试。
在内核方面,i915 更新几乎准备好提交。我们希望在提交之前修复一些已知的回归问题,特别是针对当前支持的 GPU。
我们已在 FreeBSD-x11@ 邮件列表中启动了关于未来图形驱动程序贡献的讨论,并已收到一些宝贵的意见。我们相信,由于有若干积极参与的人员,未来的更新将更为快速!
FOSDEM 将于 1 月 30 日和 31 日在布鲁塞尔举行。我们将参加此次会议,这是与来自 FreeBSD 和 XDC 的人员重新见面的绝佳时机。周日,我们将就如何贡献图形栈进行演讲。
我们的博客目前无法访问,因为服务已停止。我们希望能获取数据转储并将其重新上线,遗憾的是对此事项没有具体时间表。
请参见“图形”wiki 页面以获取最新信息。
联系人:Jonathan de Boyne Pollard <J.deBoynePollard-newsgroups@NTLWorld.COM>
nosh 项目是一套系统级工具,旨在初始化、运行和关闭 BSD 系统,并管理守护进程、终端和日志。它取代了 BSD init 和 NetBSD 的 rc.d 系统,并从 Solaris SMF 中借鉴了命名里程碑的概念,采用 daemontools-encore 进行服务控制/状态机制,结合 UCSPI 和 IBM AIX 的分离服务和系统管理方式。它包括一系列兼容机制,包括来自其他系统的熟悉命令的适配器,以及一个自动导入机制,可以将现有的配置数据从 /etc/fstab、/etc/rc.conf{,.local}、/etc/ttys 等导入,应用于其本地服务定义并创建额外的本地服务。它是可移植的(包括到 Linux)并且可组合,提供了从 systemd Linux 世界的迁移路径,并且不需要新的内核 API。它提供了干净的服务环境、服务之间的顺序和依赖关系、并行的启动和关闭(包括 fsck),严格大小限制和自动旋转的日志,服务管理器作为“子回收者”,并使用 kevent(2) 实现事件驱动的并行。
自 2015 年 10 月的上一份状态报告以来,该项目经历了以下进展:在 Linux 上完全替换了事件处理子系统;引入了通过 RFC 5426 将 cyclog/multilog 日志导出到远程日志处理器(如 logstash)的工具;以及将 BSD 上的用户模式虚拟终端子系统切换为直接使用 USB 设备,这比 sysmouse 等提供了更强大的设备接口,因为它允许直接定位触摸设备(例如鼠标和其他设备),这使得在 VirtualBox 上运行 PC-BSD/FreeBSD 的用户可以实现“鼠标集成”,不过如果需要,依然可以使用 sysmouse 等。
在 1.24 版本中(发布于本报告之前),增加了许多支持纯 ZFS 系统(如 PC-BSD 10.2 系统安装程序创建的空 /etc/fstab)以及将 systemd 单元文件的进程优先级设置转换为 BSD 的 rtprio/idprio 的功能。
1.24 版本还大幅推进了创建足够的本地服务包和附加工具以完全取代 rc.d 系统的工作。这个项目的进展从一开始就对外开放,可以在 nosh 路线图网页上跟踪。到 1.24 版本为止,原始目标列表中剩下的项目只有 27 个,另外还增加了两个(来自 PC-BSD 10.2)。1.24 版本完成的工作包括(但不限于)/tmp 的 mfs 支持、静态 ARP 和网络配置、持久熵源用于随机性子系统、pefs 和 hald。
任务清单中剩余的项目主要集中在使整体系统集成更加干净,并且更适应现代系统。我们也欢迎用户提出建议、错误报告和其他反馈。试着按照安装指南操作,看看效果如何!
为 PID 1 添加内核支持,传递 -b 选项,并在加载程序中支持 boot_bare 变量,以支持“紧急模式”(不加载任何 shell dotfile)和“救援模式”启动,这类似于 Linux。(历史:-b 机制和思想源自 Miquel van Smoorenburg 的 System 5 init 克隆版本 2.57d,发布于 1995 年 12 月 3 日,并在 1997 年已被称为“紧急启动”。)
为 FreeBSD 的 fsck(8) 添加支持,将机器可读的进度报告输出到指定的文件描述符,以便 nosh 可以为并行运行的多个 fsck 提供进度条。nosh 已经在 Linux 上提供了此功能,其中 fsck(8) 确实提供了机器可读的输出。
确定何时需要触发配置导入系统,比如当 bsdconfig 更改配置文件时,并创建必要的钩子,将外部配置更改导入到 nosh 中。
联系人:Ed Maste <emaste@FreeBSD.org>
过去一个季度,提交了若干 UEFI 错误修复,进一步提高了与不同 UEFI 实现的兼容性。具体来说,在某些实现中,FreeBSD 启动时出现 "ExitBootServices() returned 0x8000000000000002" 错误。这一问题已经在 r292515 和 r292338 中通过重试循环修复(这是 UEFI 所要求的)。
其他开发者最近提交了或正在进行中的 UEFI 改进,包括支持在 EFI 加载程序命令行中设置环境变量、改进的文本控制台模式设置、对 NVRAM 变量的支持以及 root-on-ZFS 支持。
该项目由 FreeBSD 基金会赞助。
在各种 UEFI 实现上测试 FreeBSD-CURRENT 快照。
将 UEFI 更改合并到 stable/10 版本中,以支持 FreeBSD 10.3-RELEASE。
联系人:Navdeep Parhar <navdeep@chelsio.com>
一个新的驱动程序 cxgbei 已提交到 head,支持 Chelsio 的 T5 和 T4 基础的卸载能力卡进行硬件加速 iSCSI。支持发起者和目标。传输流量是标准的 iSCSI(按照 RFC 3720 规范的 SCSI over TCP 等),因此使用此驱动程序的发起者/目标将与所有其他符合标准的实现兼容。
T5 和 T4 ASIC 提供的硬件辅助功能包括:
完整的 TCP 处理。
iSCSI PDU 的标识和从字节流 TCP 中提取。
头部和/或数据摘要的生成和验证。
支持零拷贝,适用于发送和接收。
此项目由 Chelsio Communications 赞助。
cxgbei(4) 手册页缺失,但很快将提交。
驱动程序正在进行高级阶段的质量保证,并将在不久的将来进行一些 bug 修复和性能提升。待 QA 循环完成,可能会进行 MFC(合并到主分支)。
联系人:Dexuan Cui <decui@microsoft.com> 联系人:Hongjiang Zhang <honzhan@microsoft.com>
当 FreeBSD 虚拟机(VM)在 Hyper-V 上运行时,建议使用 Hyper-V 合成设备以获得最佳的网络和存储性能,并充分利用 Hyper-V 提供的所有优势。为在 FreeBSD 中运行 Hyper-V 合成设备所需的驱动程序集合被称为 FreeBSD 集成服务(BIS)。其中一些 BIS 驱动程序(如网络和存储驱动程序)在 FreeBSD 9.x 和 10.x 中已经存在多年,但仍然存在一些性能和稳定性问题以及 bug。与 Windows 和 Linux 虚拟机相比,当前的 BIS 缺少一些重要特性,如 Hyper-V 网络驱动程序中的虚拟接收端扩展(vRSS)支持和 UEFI 虚拟机(从 UEFI 启动)支持等。
我们目前正在进一步解决这些问题并进行性能优化,以改善 FreeBSD 虚拟机在 Hyper-V 和基于 Hyper-V 的云平台 Azure 上的运行表现。
我们在 2015Q4 期间的工作如下:
优化 VMBus 驱动程序和 Hyper-V 网络驱动程序的性能:
提交补丁以启用 INTR_MPSAFE 进行中断处理线程,利用映射表加速线程中的 relid-to-channel 查找,并优化 VMBus 环形缓冲区写通知到主机。
开发补丁以启用 Hyper-V 网络设备驱动程序的虚拟接收端扩展(vRSS)。这将大大提升 SMP 虚拟机(VM)的网络性能。
提交补丁启用 Hyper-V 定时器,从而提升 FreeBSD 虚拟机在 Hyper-V 上运行时的时间保持准确性。
修复 bug 并清理代码:
修复了 Hyper-V 网络驱动程序中的校验和卸载 bug(PR 203630 — [Hyper-V] [nat] [tcp] 10.2 NAT bug in TCP stack or hyperv netsvc driver),使 FreeBSD 虚拟机基于 NAT 的网关更加可靠。
修复了 VMBus 设备初始化中的串行化问题,修复了 PR 205156([Hyper-V] NICs'(hn0,hn1)MAC 地址可能在重启后不确定的显示)。
修复了 KVP(键值对)问题(检索某个键的值时可能会无期限挂起)。
为 Hyper-V 网络驱动程序添加了 SIOCGIFMEDIA 的 ioctl 支持,修复了 PR 187006([Hyper-V] 动态地址(DHCP)获取在 HYPER-V OS 2012 R2 上无法正常工作)。
提交补丁,添加了 Hyper-V VMBus 中断的计数器(这样用户可以轻松获得 VMBus 中断的统计信息),并修复了 KVP 守护进程的轮询超时问题(避免每 100 毫秒进行不必要的轮询)。
发现了 TSC 校准问题:Hyper-V 的 i8254 PIT 定时器仿真不完全可靠,因此应使用 Hyper-V 时间计数器来校准 TSC。已经草拟了一个补丁,补丁完成后,警告内核消息(例如,“calcru: runtime went backwards from 46204978 usec to 23362331 usec for pid 0(内核)”)将消失,Dtrace 的基于时间的跟踪将更加准确。
我们计划为 UEFI 虚拟机(Hyper-V Generation-2 虚拟机)添加支持。目前,已发现一些问题和待办事项。例如,由于 UEFI 虚拟机中没有 i8254 PIT,我们不能使用其来校准 TSC,并且需要为 Hyper-V 合成键盘/鼠标/帧缓冲设备添加支持。
我们正在解决一个磁盘检测问题:当 FreeBSD 虚拟机在 Windows Server 2016 技术预览主机上运行时,虚拟机会检测到 16 个磁盘,而实际只配置了一个磁盘。运行在这些主机上的虚拟机可能无法启动。我们已创建了一个临时补丁,并正在尝试进行正式修复。
我们正在整理一些内部的 BIS 测试用例,并计划将它们发布到 github。
此项目由 Microsoft 赞助。
联系人:Roger Pau Monné <royger@FreeBSD.org> 联系人:Wei Liu <wei.liu2@citrix.com>
Xen 是一种使用微内核设计的虚拟机监控程序,提供服务使多个计算机操作系统可以在同一硬件上同时执行。FreeBSD 在 x86 上作为来宾的 Xen 支持自 8 版本引入,ARM 支持目前正在开发中。FreeBSD 作为 amd64 Xen 主机(Dom0)的支持在 head 中可用。
本季度 x86 的工作重点是重写 Xen 内部的 PVH 实现,现称为 HVMlite,以便与之前的 PVH 实现区分开来。Xen 端的补丁已提交到 Xen 源代码树,并将出现在下一个版本 Xen 4.7 中。HVMlite Dom0 支持的实现也已开始,但尚未发布补丁。
FreeBSD 对 HVMlite 的支持尚未提交,尽管初步实现可在个人 git 仓库中找到。计划在 HVMlite 支持 Dom0 模式后,完全用 HVMlite 替代 FreeBSD 上的 PVH。
此外,Wei Liu 正在改善 FreeBSD 上的 netfront 性能。初步补丁已提交到 FreeBSD 审查系统。
x86 无映射跳转缓冲区代码也已得到改进,并已向 blkfront 驱动程序添加了无映射 I/O 支持。
此项目由 Citrix Systems R&D 赞助。
完成 Xen 内部的 HVMlite Dom0 支持。
废弃并移除 Xen 中的 PVH 支持。
从 FreeBSD 中移除 PVH 支持,并切换到 HVMlite。
通用化事件通道代码,以便可用于 ARM。
改善各个后端(netback,blkback)的性能。
联系人:Alexander Motin <mav@FreeBSD.org>
QLogic HBA 驱动程序 isp(4) 收到了大量修改。主要目标是使 Fibre Channel 目标角色与 CTL 配合良好,但许多其他问题也得到了修复/改进:
增加了对现代 16Gbps 26xx FC 卡的支持。
更新了 ispfw(4) 中的固件至最新版本。
修复并测试了所有 FC 卡的目标角色支持,从古老的 1Gbps 22xx 到现代的 16Gbps 26xx。
统一了目标和发起者角色的端口数据库处理,允许一个 HBA 端口同时扮演两种角色。
最大端口数从 256 增加到 1024。
修复/实现了多 ID(NPIV)功能,使 24xx 及以上卡能够为每个物理端口提供最多 255 个虚拟 FC 端口。
为 24xx 及以上卡增加了对 8 字节 LUN 的支持。
代码已提交至 FreeBSD head 和 stable/10 分支。
此项目由 iXsystems, Inc. 赞助。
NVRAM 数据读取存在问题,需重构。
尚未测试 26xx 卡的 FCoE 支持。
联系人:Oleksandr Tymoshenko <gonzo@FreeBSD.org>
iMX.6 是一系列 SoC,广泛用于多个业余 ARM 板,如 Hummingboard、RIoTboard 和 Cubox。大多数这些产品都具有 HDMI 输出,但直到最近,FreeBSD 并未对此提供支持。自 r292574 以来,已增加基础的视频输出支持,你可以在基于 iMX6 的板上使用控制台,并可能运行 Xorg(尚未测试)。
由于缺少某些内核功能(参见待办事项),目前仅支持 1024x768 模式。
正确的像素时钟初始化(依赖时钟框架)。
更灵活的视频输出路径(支持多个 IPU 和 DI)。
联系人:Conrad Meyer <cem@FreeBSD.org>
I/OAT DMA 引擎是内置于某些 Intel 服务器/存储平台 CPU 中的大宗内存操作卸载引擎。
对驱动程序进行了几项增强。现在它避免了在锁定路径中的内存分配,这有助于避免在内存压力场景中的死锁。已增加对 Broadwell-EP 设备的支持。API 中增加了“blockfill”操作和非连续的 8 KB 拷贝操作。驱动程序能够通过重置硬件从各种编程错误中恢复。
此项目由 EMC / Isilon 存储部门赞助。
支持 XOR 和其他高级(“RAID”)操作。
联系人:Kirk McKusick <mckusick@mckusick.com> 联系人:Bruce Evans <bde@FreeBSD.org> 联系人:Konstantin Belousov <kib@FreeBSD.org> 联系人:Peter Holm <pho@FreeBSD.org> 联系人:Mateusz Guzik <mjg@FreeBSD.org>
该完成的项目包括对 vnode 自由列表的管理进行优化,并简化了 vnode 的分配和释放过程。
vnode 缓存回收机制已经重新设计,以满足空闲和未使用 vnode 的目标。空闲 vnode 很少是完全空闲的;通常它们是容易回收的 vnode。通常这些 vnode 用于已被统计但未被读取的文件,这些文件通常附带 inode 和 namecache 数据。空闲 vnode 目标是由这些文件组成的子缓存的最小首选大小。系统通过调整这个子缓存与其补充缓存的大小,来防止它们中的任何一个在另一个相对不活跃时发生抖动。目标表示了对最佳平衡的首选。
在该目标“以上”,还有两个与空闲 vnode 回收相关的目标(水印)。在最佳运行情况下,缓存恰好满载,空闲列表的大小介于 vlowat 和 vhiwat 之间,高于空闲目标,回收空闲列表和常规使用保持这种状态。有时空闲列表低于 vlowat 或甚至为空,但这种状态对于立即使用是更好的,只要缓存未满。否则,vnlru_proc() 将运行以回收足够的 vnode(通常是非空闲的),以达到这些状态中的一个。目前这些水印被硬编码为可用空间的 4% 和 9%。这些水印,以及默认的 25%(用于 wantfreevnodes),如果内存大小较大则过大。例如,9% 的 75% 的 MAXVNODES 是超过 566000 个 vnode,在 vnlru_proc() 激活时需要回收。
sysctl vfs.vlru_alloc_cache_src
被移除。新代码在满足最高水印时,将释放 namecache 源作为最后的机会,而不是随机选择源 vnode。这提供了足够好的行为,以保持 vn_fullpath() 在大多数情况下的正常运行。具有深度树的文件系统布局(此前需要使用已移除的控制)现在已自动处理。
随着内核分配和释放 vnode,它会在每次分配时完全初始化它们,并在每次释放时完全释放它们。这些操作并非微不足道:它首先将一个大结构归零,然后初始化互斥锁、锁管理器锁、读写锁、四个列表和六个指针。从 vfs.vnodes_created 可以看出,这些操作每小时在繁忙的机器上执行数百万次。
作为性能优化,此代码更新使用 uma_init 和 uma_fini 函数,仅在 vnode 进入和离开 vnode 区域时进行初始化和清理。通过此更改,初始化操作在系统启动时执行 kern.maxvnodes 次,之后仅偶尔再执行。只有在 vnode 区域缩小时才会执行释放操作,而这在实践中几乎不会发生。对于那些对避免的工作感兴趣的人,可以查看 sys/kern/vfs_subr.c 中的 vnode_init() 和 vnode_fini() 函数,以查看已从主 vnode 分配/释放路径中移除的代码。
联系人:Hans Petter Selasky <hselasky@FreeBSD.org>
Mellanox FreeBSD 团队很高兴宣布在 FreeBSD 11-current 和 FreeBSD 10-stable 中支持 ConnectX-4 系列网卡。这些设备提供顶级性能,支持高达 100GBit/s 的原始传输容量,支持以太网和 InfiniBand。目前,以太网驱动程序已经可以使用,ConnectX-4 的 InfiniBand 支持也在顺利进行中。我们希望在 FreeBSD 11.0 发布之前完成。有关更多技术信息,请参阅 11-current 中的 mlx5en(4) 手册页。新的 ConnectX-4 驱动程序称为 mlx5,并放置在 /sys/dev 下,而不是以前的 mlx4 驱动程序放置在 /sys/ofed 下。mlx5en(4) 内核模块在 GENERIC 内核中默认编译。
此项目由 Mellanox Technologies 赞助。
联系人:Warner Losh <imp@FreeBSD.org>
关于基于设备的即插即用数据,自动加载没有已附加驱动程序的设备模块的工作正在进行中。提取这些信息并标记相关驱动程序表中的位已经提交。PC 卡、USB 和一些 PCI 设备现在已经标记。此数据存储在内核、引导加载程序和用户空间进程都可以访问的文件中。
完成后,用户将能够运行最小内核(目前已作为 MINIMAL 配置提交)。启动所需的设备将由 loader(8) 加载。其他设备可以在加载器中加载,也可以在启动早期加载(取决于哪种方式提供更好的性能)。用户仍然可以运行更为单体化的配置,并像今天一样限制可用的内核模块,尽管无法享受自动加载带来的便利。此项工作仍在进行中。
审查所有简单总线驱动程序并添加即插即用信息。此项工作正在进行中,部分功能需要改进。
审查所有 PCI 驱动程序并添加即插即用信息。与 PC 卡或 USB 不同,PCI 总线没有标准的 PCI ID 表,因此每个驱动程序都有自己的方法,这意味着像处理 PC 卡和 USB 时那样的半自动转换将无法实现。相反,需要为每个驱动程序编写定制代码。由于许多驱动程序有自己的设备表,工作主要是描述当前表的样式。
仍然需要运行时解析和加载。
联系人:Ilya Bakulin <ilya@bakulin.de>
该项目的目标是使用 CAM 框架重新实现现有的 MMC/SD 栈。这将使得可以利用经过充分测试的 CAM 锁定模型和调试功能。同时,还可以处理由插入卡生成的中断,这是实现 SDIO 接口的前提。
代码的第一个版本已经上传到 Phabricator 进行审查。新的栈能够连接到 SD 卡,并将其带到工作状态,从而可以读取和写入卡片。
目前支持的唯一 SD 控制器驱动程序是 ti_sdhci,它在 BeagleBone Black 上使用。修改其他符合 SDHCI 标准的驱动程序应该不会很困难。
重新设计总线/目标/LUN 枚举和锁定模型。我并不完全理解 CAM 锁定,可能会做得不正确。
修改至少一个 x86 平台上的 SDHCI 驱动程序。这将使开发和协作更加方便。
开始实现 SDIO 特定的部分。
联系人:Conrad Meyer <cem@FreeBSD.org>
ntb_hw(4) 已与 Linux NTB 驱动程序同步,更新为 4.4 内核中的工作进展版(实际上还包含一些尚未合并到主线 Linux 树中的修复,这些修复将在 4.5 中合并)。目前仅支持回传 ("B2B") 配置。未来的硬件可能只支持 B2B 配置。
if_ntb(4) 基本与 Linux NTB 网络设备驱动程序同步。显著缺少的功能是无法在运行时更改 MTU。
此项目由 EMC / Isilon 存储部门赞助。
改进 if_ntb(4),避免在配置了非常大的基址寄存器(BAR)时使用整个 BAR(例如,512 GB)。
改进 pmap_mapdev(9),在支持超级页的平台上为大 BAR 分配超级页映射。(NTB BAR 的大小可以达到 512 GB。)
联系人:Konstantin Belousov <kib@FreeBSD.org>
内存不足(OOM)代码旨在处理系统需要自由内存以继续操作,但无法重用内存的情况。最常见的情况是,为了释放内存,系统需要更多的自由内存。例如,系统需要将脏页面写出磁盘,但需要分配结构体来跟踪写入操作。OOM 通过杀死一些用户进程来“解决”这个问题。换句话说,它通过牺牲部分用户数据的丢失来避免系统死锁。假设是,杀死一个进程并恢复其他进程中的数据,总比丢失所有数据要好。
FreeBSD 虚拟内存(VM)系统中的自由内存来自两个来源。一种是进程自愿回收的页面,例如取消映射私有匿名区域,或者最后一次取消链接一个未被引用的文件及其缓存页面。另一种来源是页面守护进程,它强制释放携带数据的页面,当然是在将数据移动到其他存储(如交换空间或文件块)之后。当页面守护进程无法释放足够的内存以满足请求时,OOM 会被触发。
触发 OOM 操作的旧标准是低交换空间和较低的自由页面数(后者通过页面目标常量精确表达,但与讨论无关)。这一测试大多是不准确的。例如,低自由页面状态可能是由于一个贪婪的消费者分配了页面守护进程当前通过的所有页面,但这并不排除页面守护进程产生更多页面。此外,由于页面写出是异步的,之前的页面守护进程运行可能不会立即产生任何自由页面,但它们会在短时间后出现。
更严重的是,低交换空间并不一定意味着我们处于困境:许多页面可能无需交换分配即可释放,例如干净页面或由文件支持的页面。最后一点非常重要,因为没有交换空间的系统被认为是“有完全交换空间”的。
新的 OOM 处理程序不再试图通过查看当前的 VM 状态来推测死锁,而是跟踪页面守护进程的历史。只有在多个连续的守护进程运行未能达到页面目标时,才会考虑杀死进程。连续失败的运行次数是通过在小型(32M)和大型(512G)机器上的测试经验选择的。计数器的自动调整是可能的,但需要对 I/O 子系统进行一些架构上的修改。
另一个问题是,选择受害进程进行 OOM 杀死的算法。它通过比较安装到机器分页结构中的页面映射条目(PTE)的数量来选择进程。由于不同的原因,依赖机器的 VM 代码(pmap)可能会删除内存驻留页面的 PTE。在某些与其他低内存死锁防止措施相关的情况下,消耗所有系统内存的大型进程可能会有很少甚至没有 PTE。旧的 OOM 选择器忽略了导致死锁的进程,错误地杀死了不相关的进程。
为了解决这个问题,编写了一个新的函数 vm_pageout_oom_pagecount(),它应用了一个合理的启发式方法来估算通过杀死给定进程释放的页面数。这消除了选择不相关的小进程进行 OOM 杀死的影响。
此次重写已在 r290917 和 r290920 中提交到主干。
此项目由 FreeBSD 基金会赞助。
联系人:Gleb Smirnoff <glebius@FreeBSD.org>
sendfile(2) 系统调用最初于 1998 年引入,作为传统 read(2)/write(2) 循环的替代方案,曾在当时使服务器性能提升了十倍。自从所有主要操作系统采用它以来,它已成为任何严肃的 web 服务器软件的标准。在高流量的地方,sendfile(2) 就在其背后默默工作。
如今,在 FreeBSD 11 中,我们迈出了服务流量的革命性一步。sendfile(2) 不再在等待磁盘 I/O 完成时阻塞。相反,它立即将控制权返回给应用程序,在后台执行必要的 I/O。原始的 sendfile(2) 等待磁盘读取操作完成,然后将读取的数据放入套接字,再返回到用户空间。如果一个 web 服务器为成千上万的客户端提供服务,它不得不启动额外的上下文来运行 sendfile(2),以避免停顿。或者,它可能会使用像 SF_NODISKIO 这样的特殊标志,强制 sendfile(2) 只服务于缓存到内存中的内容。现在,这些技巧已经成为过去,web 服务器只需像使用 write(2) 一样使用 sendfile(2),无需额外的处理。新的 sendfile 去除了额外上下文、短写和额外的系统调用来预填充缓存,性能达到了新的水平。
新的系统调用建立在两个新引入的内核功能之上。首先是异步虚拟内存(VM)分页接口和对应的 UFS 文件系统方法 VOP_GETPAGES_ASYNC()。其次是“未就绪”数据在套接字中的概念。当调用 sendfile(2) 时,首先调用 VOP_GETPAGES_ASYNC(),它会调度 I/O 请求以完成操作。需要填充的页面缓冲区被放入套接字缓冲区,但标记为“尚未准备好”。控制权立即返回给应用程序。当 I/O 完成后,缓冲区会被标记为准备好,套接字被激活以继续传输。
新 sendfile 的其他功能包括新标志,允许应用程序对传输的内容进行额外控制。现在可以防止缓存内容到内存中,这在已知内容不太可能很快被重用时非常有用。在这种情况下,更好的做法是让关联存储被释放,而不是将数据放入缓存中。还可以为每次系统调用指定预读取,如果应用程序可以预测客户端行为的话。
新的 sendfile(2) 是一个“即插即用”的替代品,与旧版的 API 和 ABI 兼容。应用程序无需重新编译即可受益于新的实现。
这项工作是两家公司共同努力的结果:NGINX, Inc. 和 Netflix。许多人参与了该项目。在最初阶段,在代码编写之前,Gleb Smirnoff、Scott Long、Konstantin Belousov、Adrian Chadd 和 Igor Sysoev 等人讨论了这种异步即插即用替代方案的构想。初始原型由 Gleb 编写,Kostik 在补丁的 VM 部分进行监督,同时 Igor 持续施压,要求 nginx 能在没有任何修改的情况下使用新版本的 sendfile(2)。该原型展示了良好的性能和稳定性,并在 2014 年末迅速投入 Netflix 的生产环境。2015 年期间,代码逐渐成熟并继续为 Netflix 提供生产流量服务。Scott Long、Randall R. Stewart、Maksim Yevmenkin 和 Andrew Gallatin 也对代码作出了贡献。
现在,我们将成功背后的代码发布给 FreeBSD 社区,让全球所有 FreeBSD 用户都可以使用!
此项目由 Netflix 和 NGINX, Inc. 赞助。
SSL_sendfile() — 新 sendfile(2) 的扩展,允许上传会话密钥到内核,然后在启用 SSL 的套接字上使用 sendfile(2)。
联系人:Conrad Meyer <cem@FreeBSD.org> 联系人:Ravi Pokala <rpokala@FreeBSD.org> 联系人:Marcelo Araujo <araujo@FreeBSD.org>
新增了对固定宽度 sysctl(有符号和无符号 8 位、16 位、32 位和 64 位整数)的支持。新的 KPI 已在 sysctl(9) 手册页中进行了文档化。sysctl(8) 命令行工具支持所有新类型。
sysctl(8) 增加了参数 -t
,用于打印 sysctl 类型信息(最初的补丁由 Yoshihiro Ota 提交)。此支持包括新增的固定宽度类型。
本项目由 EMC / Isilon 存储部门赞助。
联系人:Oleksandr Tymoshenko <gonzo@FreeBSD.org>
目前有两个工作中的概念验证驱动程序,分别支持 AM335x 触摸屏和官方树莓派触摸屏 LCD。
完善的触摸屏支持应包括用户空间事件读取 API、内核事件报告 API 以及针对特定设备的内核硬件驱动程序。目前正在进行将 Linux 的 evdev API 移植到 FreeBSD 的工作,这样使用像 libinput 或 tslib 等库的应用程序就可以无需任何重大更改地使用。由于该工作尚未完成,我为内核和 tslib 创建了一个简单的类似 evdev 的 API,并成功在配备 4DCAPE-43T 的 Beaglebone Black 上运行了演示。
待 evdev 被纳入主干,两个硬件驱动程序可以被修改以包括“报告事件”部分并提交。
联系人:Warner Losh <imp@FreeBSD.org>
armv6 从“软浮点”ABI(但仍使用硬件浮点)迁移到完全“硬件浮点”API 的工作正在推进。现在可以在同一系统上同时使用软浮点和硬浮点 ABI 库。我们目前使用硬件浮点,但使用了略不优化的 ABI,以兼容旧版本的 FreeBSD。ABI 差异仅存在于用户空间级别——内核不关心使用的是哪种浮点 ABI,两种类型的二进制文件可以同时运行。
运行时链接器现在通过检查 ELF 头中的某些字段,知道二进制文件是使用硬件浮点 ABI 还是软件浮点 ABI。链接器使用不同的路径和配置文件来处理硬浮点与软浮点二进制文件。rc 系统已经增强,能够加载软件浮点路径。ldconfig 现在理解软浮点库的方式与它理解 64 位系统上的 32 位库相同。除了一个小的补丁(用于将 ELF 头信息传递给二进制文件),没有其他内核支持,这个补丁自去年夏天以来已经存在于主干中。
实验性的 armv6hf MACHINE_ARCH 将在过渡期后被淘汰。它将不再与 armv6 有任何不同,除非构建系统发生变化。为了支持 WITH_LIBSOFT 构建选项,仍将保留构建软浮点 ABI 库的支持。
需要编写完整的文档。
需要完善并提交 FreeBSD 构建系统中的挂钩,以生成软浮点并在“标志日”后过渡到硬浮点。
需要测试多种升级/共存场景,并进行全面的包运行,以评估 Ports 的最新状态。预计这项工作将在一月结束前完成。
联系人:Marcin Wojtas <mw@semihalf.com> 联系人:Michal Stanek <mst@semihalf.com> 联系人:Bartosz Szczepanek <bsz@semihalf.com> 联系人:Jan Dabros <jsd@semihalf.com>
FreeBSD 已经移植到 Marvell Armada38x 平台上运行。该 SoC 系列配备了单核/双核高性能 ARM Cortex-A9 处理器。
多用户 SMP 系统已完全工作,并已在 Marvell DB-88F6288-GP 和 SolidRun ClearFog 开发板上进行过测试。
根文件系统可以托管在 USB 3.0/2.0 驱动器上,或者通过使用 PCIe 网络卡通过 NFS 托管。对于芯片上的千兆以太网(NETA)提供了实验性支持。
附加功能:
INTRNG 提供的 GIC+MPIC 级联中断
CESA 双通道加密引擎
USB 3.0 和 2.0
PCIe 2.0
I2C
GPIO
看门狗
RTC
该移植正在进行社区审核,并将很快被集成到主干中。
本项目由 Stormshield 和 Semihalf 赞助。
优化 NETA 性能并准备提交。
联系人:John Wehle <john@feith.com> 联系人:Ganbold Tsagaankhuu <ganbold@FreeBSD.org>
我们已进行必要的更改,以支持在 Hardkernel ODROID-C1 开发板上使用 Amlogic Meson 以太网控制器,该开发板采用 Amlogic aml8726-m8b SoC。主要工作是为以太网控制器编写一个 glue 驱动程序——Amlogic Meson 以太网控制器与 Synopsys DesignWare 10/100/1000 以太网 MAC(if_dw)兼容。
联系人:Andrew Turner <andrew@FreeBSD.org>
SoftIron Overdrive 3000 是一款基于 ARMv8 的服务器,搭载 8 核 AMD Opteron A1100 处理器。Overdrive 3000 配备了两个 10Gbase-T 以太网端口、两个 PCI Express 端口和八个 SATA 端口。FreeBSD 已被更新以支持该硬件的启动。
已将对 SATA 设备的支持添加到 ahci(4) 驱动程序中。与 x86 不同,这是一个内存映射(mmio)设备,而不在 PCI 总线上。为此,已添加一个新的 ahci mmio 驱动程序附件。
通用 PCIe 驱动程序已被更新,以改进中断处理。这包括支持中断映射设备树属性,并支持 arm64 上的 MSI 和 MSI-X 中断。
已将对 MSI 和 MSI-X 中断的支持添加到 ARM 通用中断控制器 v2(gicv2)驱动程序中。这允许设备使用这些中断。此功能已通过一系列 PCIe NIC 硬件进行测试。
本项目由 SoftIron Inc. 赞助。
为 10Gbase-T 网卡编写驱动程序。
联系人:Andrew Turner <andrew@FreeBSD.org> 联系人:Konstantin Belousov <kib@FreeBSD.org> 联系人:Ed Maste <emaste@FreeBSD.org> 联系人:Ed Schouten <ed@FreeBSD.org>
已为内核模块添加支持。这包括向内核重定位器添加所需的重定位类型,并更新构建逻辑以构建适用于 arm64 的模块。由于链接器的错误,当前模块未生成 CTF 数据。
添加了共享页面支持。这使得可以通过直接访问定时器寄存器在用户空间实现 gettimeofday(2)
,从而减少了这些调用的开销,因为不再需要调用内核。这还将信号跳板代码移出堆栈,从而使堆栈变得不可执行。
为 arm64 添加了 CloudABI 支持。这包括将与机器无关的代码移动到一个独立文件中,以便在所有架构中共享。通过 CloudABI 测试套件,发现并修复了 arm64 内核中的一个问题。
已测试自托管的 poudriere 包构建。这些补充了以前使用 qemu 用户模式仿真进行的构建策略。通过结合自托管和 qemu 用户模式构建,许多以前在 arm64 上无法构建的 Port 已经修复,使得超过 17,000 个 Port 能够为该架构构建。
已开始处理单步调试用户空间二进制文件的内核支持。这将允许调试器(如 lldb)在调试时单步执行应用程序。
对 FreeBSD/arm64 进行了许多小修复,包括修复通过异常的堆栈跟踪、打印更多关于“数据中止”内核恐慌的信息、清理原子函数、支持多次驱动程序附加、修复用户空间堆栈对齐、清理早期页表创建、修复异步软件陷阱处理,并在异常处理程序中启用中断。
本项目由 FreeBSD 基金会和 ABT Systems Ltd 赞助。
联系人:Ruslan Bukin <br@bsdpad.com> 联系人:Ed Maste <emaste@FreeBSD.org> 联系人:Arun Thomas <arun.thomas@baesystems.com>
我们已开始支持 RISC-V 架构的工作。
RISC-V 是一种新的指令集架构(ISA),旨在支持计算机架构研究和教育,并且现已成为工业实现的标准开放架构。
我们已经提交了一些基本的更改,以便能够编译内核工具链,包括机器头文件、运行时链接器(rtld-elf)支持和 libc/libstand。
所有开发工作都在一个独立的分支上进行,计划在几周内将开发移到主干。
目前,FreeBSD/RISC-V 在 Spike 模拟器中能够启动并进入多用户模式。
本项目由 DARPA、AFRL 和 HEIF5 赞助。
我们计划在几周内提交其余的用户空间(即 libc)、内核支持等内容。
联系人:Dominik Ermel <der@semihalf.com> 联系人:Wojciech Macek <wma@semihalf.com> 联系人:Zbigniew Bodek <zbb@semihalf.com>
Semihalf 团队开发了许多 ARMv6/v7 内核和工具的改进,主要包括:
修复了 KGDB 支持。
支持 ptrace 单步调试中的分支指令。
修复了内核最小转储。
改进了 LIBUSBBOOT。
支持 Exynos EHCI 加载程序。
修复了 DDB 中的指令单步调试。
支持硬件断点,包括在 SMP 系统上的断点。
使用 ARM 调试架构进行单步调试。
支持在 kldload 中加载 gzip 压缩的内核模块。
将新的 pmap 虚拟内存代码回移植到 FreeBSD 10-STABLE(尚未提交给上游)。
大多数已引入的更改已经提交到主干,更多更改正在进行中。
本项目由 Juniper Networks Inc. 和 Semihalf 赞助。
完成硬件断点支持的上游提交。
联系人:Bryan Drewery <bdrewery@FreeBSD.org>
Bryan Drewery (bdrewery@) 一直致力于改进构建框架和 buildworld 构建时间。多年来,构建系统基本没有经过大规模的更改。大部分工作集中在改进最近的 META_MODE 合并,该合并在 BSDCan 2014 上展示。这是一个新的构建系统,目前默认没有启用,但带来了许多好处。除此之外,关于构建 world 方面的工作亮点包括:
WITH_FAST_DEPEND,避免在 make depend 阶段调用 "mkdep",而是在编译过程中生成依赖文件。旧的方案是将所有源文件预处理两次。新版本节省了 16-35% 的构建时间。
WITH_CCACHE_BUILD 添加了内置的 ccache 支持,避免了在 make.conf 中更改 CC 使用 ccache 时遇到的许多历史问题。
许多改进用于构建的并行化。
对 LIBADD 进行了改进,确保正确使用该工具来替换重复的 LDADD 和 DPADD 语句。进一步的工作正在进行中,以减少过度链接。
清理了不当的框架使用。
确保如果目标目录缺失时,安装构建树中的文件会失败,而不是将文件作为目录名进行安装。
本项目由 EMC / Isilon 存储部门赞助。
请参阅 FreeBSD-arch 邮件以了解更多关于计划工作的详细信息。
联系人:Ed Maste <emaste@FreeBSD.org>
ELF 工具链项目提供了用于构建和分析 ELF 对象的 BSD 许可证编译工具和库实现。该项目最初作为 FreeBSD 的一部分启动,但后来成为一个独立项目,以鼓励更多来自开源开发者社区的参与。
在 2015 年最后一个季度,ELF 工具链工具已更新至上游 Subversion 版本 3272。改进包括更好的输入文件验证、RISC-V 支持、支持 Xen ELF 注释、额外的 MIPS 和 ARM 重定位、更好的性能和 bug 修复。
ELF 工具链项目计划在 2016 年第一季度发布新版本,这将有助于 FreeBSD 之外的项目进行更广泛的测试和使用。
本项目由 FreeBSD 基金会赞助。
将缺失的功能(PE/COFF 支持)添加到 elfcopy,并迁移基本系统构建。
修复通过模糊测试工具输入发现的问题。
为分离的调试文件添加自动支持。
联系人:Ed Maste <emaste@FreeBSD.org>
LLDB 是来自 LLVM 项目系列的调试器。最初为 Mac OS X 开发,现在也支持 FreeBSD、NetBSD、Linux、Android 和 Windows。它构建在 LLVM 项目的现有组件上,例如使用 Clang 的表达式解析器和 LLVM 的反汇编器。
FreeBSD 基本系统中的 LLDB 已升级至版本 3.7.0,作为 Clang 和 LLVM 升级的一部分,计划在 FreeBSD 11.0-RELEASE 中再次升级到 3.8.0。
LLDB 现在在 amd64 和 arm64 平台上默认启用。经过过去一季度对 LLDB 和 FreeBSD 内核的修复后,它现在在 arm64 上成为一个功能齐全的基本调试器。
本项目由 FreeBSD 基金会赞助。
重新构建 LLDB,使其使用 LLVM 和 Clang 共享库。
为 FreeBSD 移植远程调试存根。
为本地和核心文件的内核调试添加支持。
改进对非 amd64 和 arm64 架构的支持。
联系人:John Baldwin <jhb@FreeBSD.org>
KGDB 选项现在在 devel/gdb Port 中默认启用。
为支持在 libkvm 中进行崩溃转储的交叉调试,已提交 r291406 的更改。
为 FreeBSD 编写了一个新的线程目标,该目标适合上游合并,且已进行简单测试。然而,它还未作为 Port 中的选项提供。该线程目标直接使用 ptrace(2),而不是 libthread_db,因此支持所有 ABI 上的线程(如 FreeBSD/i386 在 FreeBSD/amd64 上的二进制文件,可能还支持 Linux 二进制文件,尽管尚未测试)。与基于 libthread_db 的目标相比,它在 GDB 的 MD 目标中需要更少的侵入性更改。
为新的 1:1 线程目标添加 Port 选项。
测试新的 1:1 线程目标。
查明为何 powerpc kgdb 目标无法展开栈帧之外的初始帧。
为上游 GDB 添加对更多平台(arm、mips、aarch64)的支持,包括用户空间和 kgdb。
为调试 powerpc 向量寄存器添加支持。
联系人:Torsten Zühlsdorff <ports@toco-domains.de>
GitLab 是一款基于 Web 的 Git 仓库管理工具,具有许多功能,已有 100,000 多个组织使用,包括 NASA 和阿里巴巴。它也是 FreeBSD Wiki 上“所需 Port ”列表中的长期条目。
在过去的季度中,项目本身和 Port 移植都取得了稳步进展。目前 GitLab 8.3 版本基于 Rails 4.2,这使得大约 50 个新 Port 的需求过时。现在只剩下 5 个依赖项待提交!
虽然 GitLab 8.3 的新版本简化了移植工作,但自上次 GitLab 7.14 的工作 Port 以来,已经发生了很大的变化。不过,可以预期将在 2016 年第一季度看到下一个可用的工作 Port。
本项目由德国杜塞尔多夫的 anyMOTION GRAPHICS GmbH 赞助。
更新从 GitLab 7.14 到 8.3 的补丁。
更新文档。
提供更新的补丁。
联系人:FreeBSD GNOME 团队 <freebsd-gnome@FreeBSD.org>
FreeBSD GNOME 团队维护 FreeBSD 上的 GNOME、MATE 和 CINNAMON 桌面环境及图形用户界面。GNOME 3 是 GNU 项目的一部分,MATE 是 GNOME 2 桌面的一个分支,CINNAMON 是一个使用 GNOME 3 技术但具有 GNOME 2 外观和感觉的桌面环境。
由于时间有限,本季度进展较慢。到了 12 月,工作开始转向将 MATE 1.12 和 CINNAMON 2.8 移植到 FreeBSD。
FreeBSD GNOME 网站信息已过时。正在进行改进工作。
继续研究阻碍 GNOME 3.18 的问题。
联系人:Torsten Zühlsdorff <ports@toco-domains.de>
互联网上越来越多的机器仅支持 IPv6。我管理其中一些机器,当需要获取构建 Port 所需的 distfile 时,经常遇到缺少 IPv6 支持的问题。
我对缺少 IPv6 支持对 Ports 的影响进行了研究。结果显示,在 25,522 个 Port 中,有 10,308 个无法在使用 IPv6 时下载。这导致通过依赖关系,17,715 个 Port 无法从仅支持 IPv6 的系统构建。当发生这种情况时,唯一能做的就是等待并希望 distcache.FreeBSD.org 缓存了该 distfile。但这需要一些时间,而在软件出现安全问题时,这可能不是一个可以奢侈享受的时间。
基于这一研究,IPv6 推广活动已启动。一些志愿者将联系相关的系统管理员,尝试说服他们支持 IPv6。此活动将在 2016 年 1 月开始,并希望能尽快取得进展。
联系人:FreeBSD KDE 团队 <kde@FreeBSD.org>
KDE on FreeBSD 团队专注于包装和确保 KDE 和 Qt 在 FreeBSD 上的体验尽可能好。
在 2015 年最后一个季度,团队忙于工作。许多重要更新已提交到 Ports,更多更新正在我们的实验性仓库中进行。
与前几个季度一样,我们要感谢一些为项目贡献了机器、补丁和帮助的人。Tobias Berner、Guido Falsi (madpilot@)、Adriaan de Groot、Ralf Nolden、Steve Wills (swills@)、Josh Paetzel (jpaetzel@) 对我们的工作至关重要。
本季度,以下大更新已提交到 Ports。在许多情况下,我们还向上游项目贡献了补丁。
CMake 3.4.0 和 3.4.1
Calligra 2.9.1,集成办公应用套件的最新版本。Calligra 上次在 Ports 中的更新是在 2013 年底!
PyQt4 4.11.4,QScintilla2 2.9.1 和 SIP 4.17。
PyQt5 5.5.1。得益于 Guido Falsi 和 Tobias Berner 在上一季度的努力,PyQt5 Port 终于被提交到 Ports。这不仅是大家期待已久的更新,它还使其他 Port 能够更新到最新版本。
QtCreator 3.5.1 和 3.6.0。
修复了一些 Qt5 打包错误:现在使用 Qt5 Port 构建软件时会更加简便,同时也能在 FreeBSD 9.x 上构建需要 C++11 编译器和 Qt5 的 Port。
我们在实验性 area51 仓库中对更新 Qt5 Port 到最新版本,以及将 KDE Frameworks 5 和 Plasma 5 移植到 FreeBSD 的工作正在顺利进行。目前,该仓库包含 Qt5 5.5.1、KDE Frameworks 5.17.0、Plasma 5.5.1 和 KDE Applications 15.12.0。
有兴趣测试这些 Port 的用户可以按照 我们的网站 中的说明进行操作,并将测试结果报告到我们的邮件列表。Qt5 5.5.1 位于我们的 "qt-5.5" 分支,Plasma 5 和其他内容位于 "plasma5" 分支(其中也包含 Qt 5.5.1)。
提交 Qt5 5.5.1 更新。
将 KDE Frameworks 5 和 Plasma 5 Port 提交到 Ports。
调查使 QtWebEngine(基于 Chromium 的 QtWebKit 替代品)在 FreeBSD 上工作的必要步骤。
联系人:Conrad Meyer <cem@FreeBSD.org>
LKL(“Linux Kernel as a Library”)是 Linux 内核的一个特殊“架构”,它作为用户空间库在多个平台上构建,包括 FreeBSD。该库的一个应用是使用 Linux 文件系统驱动程序实现 FUSE 后端。
fusefs-lkl 的 lklfuse 二进制文件就是这样一个 FUSE 文件系统。它可以使用 Linux 的原生驱动程序以读写方式挂载 ext4/3/2、XFS 和 BTRFS。
sysutils/fusefs-lkl 现在可以通过包或 Port 安装,提供通过 FUSE 在 FreeBSD 上访问这些文件系统的能力。
联系人:Olivier Duchateau <olivierd@FreeBSD.org>
LXQt 是 LXDE(轻量级桌面环境)的 Qt 移植版,也是 LXDE 的下一版本。它是 LXDE-Qt 和 Razor-qt 项目合并的产物。
移植工作仍在进行中:它需要 Plasma 5 的一些组件,这是 KDE 新一代的工作环境。
目前,只有 0.10 分支是功能完整的。请查看我们的 wiki 页面,了解完整的应用列表。
我们还为一些 LXDE 组件发送了更新,这些组件是 LXQt 桌面所需的:
x11/menu-cache 1.0.1
x11/lxmenu-data 0.1.4
二进制包(仅用于测试)已提供,并与 KDE 开发仓库定期测试。
将 libsysstat 移植到 BSD 系统。
修复一些需要解决的问题,特别是关机和重启命令。
联系人:Brendan Molloy <brendan+freebsd@bbqsrc.net>
当我开始为 FreeBSD 开发 Port 时,我发现仅使用现有工具时,工作流程并不高效,因此我制作了一些可能对开发社区有用的工具。这些工具都已或即将被添加到 Ports 中,所以你今天就可以尝试使用它们!
pytoport 是一个命令行应用程序,它为给定的 PyPI 包名生成一个 Port 骨架。它尝试生成正确的依赖关系,利用 spdx-lookup 尝试推测许可证,并生成 pkg-descr。这个工具让我处理我正在进行的十五个 Port 变得非常轻松。
在此过程中,我发现有些 Port 引入了一些我没有预料到的依赖关系,我需要一种方式来可视化这些依赖关系。skog 从 Port 框架的依赖列表中构建依赖树,并在命令行上显示它(如果你使用 UTF-8,会有额外的炫酷输出)。再也不会有烦人的示例和文档依赖被拖进来,当你显然已将某个选项完全关闭时。
在做这一切的过程中,我发现反复在我小型的 git 开发树和我在 poudriere 中使用的更大的上游 SVN 树之间复制 Port 很麻烦。于是我构建了一个名为 bandar 的工具,利用 FUSE 版本的 unionfs,轻松地将我的开发树覆盖在上游树上,运行 lint 检查、poudriere,并轻松生成归档文件。
我对为 FreeBSD 构建更多工具的过程印象深刻。我希望这些工具对你有所帮助,并且,像往常一样,我很期待听到你的反馈!
改进 skog,使其支持在树中搜索特定 Port。
完成 bandar Port。
继续改进 pytoport,增加对 trove 的支持以及更好的依赖处理。
欢迎为上述所有内容提交补丁!
联系人:Olivier Duchateau <olivierd@FreeBSD.org>
Node.js 是一个基于 Chrome 的 JavaScript 运行时的开发平台,旨在轻松构建快速、可扩展的网络应用。它使用事件驱动的非阻塞 I/O 模型,使其轻便高效,非常适合数据密集型的实时应用,这些应用可以在分布式设备上运行。
本项目的目标是简化安装 npm 包注册表 中可用模块的过程。
目前,该仓库包含不到 300 个新 Port,特别包括:
Socket.IO,一个实时 Web 应用的库
Jison,一个 JavaScript 解析器生成器
我们已经改进了 USES 框架:
用户可以通过 /etc/make.conf 定义要安装的 Node.js 版本。
node-gyp 现在已通过 build 参数良好集成到 USES 框架中。
pkg-plist 现在会自动生成,以确保 Port 在使用时符合规范。
每个 Port 都是最新的。
更新草拟文档。
引入 grunt.js(及其模块),这是一个 JavaScript 任务运行器。
联系人:Frederic Culot <portmgr-secretary@FreeBSD.org> 联系人:Frederic Culot <culot@FreeBSD.org> 联系人:FreeBSD Ports 管理团队 <portmgr@FreeBSD.org>
截至第四季度末,Ports 包含了超过 25,000 个 Port,PR 数量约为 2,000。Ports 的活跃度保持稳定,几乎 120 名活跃的提交者进行了约 7,000 次提交。
在问题报告方面,数据显示了一个令人鼓舞的趋势,在第四季度中,修复的 PR 数量显著增加。事实上,几乎修复了 1,800 个报告,与第三季度相比增长了约 20%。
在第四季度,八个提交权限被暂时保管,原因是这些开发者有超过 18 个月的非活跃期(lioux、lippe、simon、jhay、max、sumikawa、alexey、sperber)。三名新开发者被授予了 Ports 提交权限(Kenji Takefu、Carlos Puga Medina 和 Ian Lepore),还有一名回归的提交者(miwi)恢复了提交权限。
此外,关于 Port 提交权限管理,nox 的权限被撤销,因为 FreeBSD 开发者得知 Juergen Lock 已去世。
在管理方面,第四季度没有对 portmgr 团队做出任何更改。
在质量保证方面,进行了 33 次 exp-run 来验证敏感更新或清理工作。值得注意的变动包括 GCC 4.9、CMake 3.4.1、PostgreSQL 9.4 和 ruby-gems 2.5.0 的更新。一些基础设施的变动包括在 NO_WRKSUBDIR 设置时使用不同于 WRKDIR 的 WRKSRC,删除 sys.mk 中的 bsd.cpu.mk,以及将 QT_NONSTANDARD 移动到 bsd.qt.mk。
我们想提醒大家,Ports 是由志愿者构建和运行的,非常感谢任何帮助。虽然第四季度解决了大量问题报告,我们仍然鼓励所有 Port 提交者查看用户报告的问题,并尽可能多地进行修复。感谢所有在第四季度作出贡献的人,并在 2016 年继续努力!
联系人:Brendan Molloy <brendan+freebsd@bbqsrc.net>
我最近开始参与 FreeBSD(大约在过去 2-3 周),并迅速投入到 Port 开发工作中。令我立刻注意到的是,提供一个被多个 Python 版本依赖的 Python 包的困难。事实证明,当前 Poudriere 只能为每个 Port 生成一个包,这意味着无法同时为每个变体生成 Python 版本中立的(兼容 2.x 和 3.x) Port。
我与 Kubilay Kocak 讨论了这个问题,他建议我在 Port 框架中实现“变体协议”,并对 Poudriere 进行必要的更改,以支持一个 Port 生成多个包。
在 Port 中强烈需要支持变体,并且这将带来显著的好处。
它将允许 Python 和其他语言提供来自同一 Port 的多语言版本的依赖包。
它减少了所谓的“从属 Port”的需求,因为单个 Port 现在可以生成多个包。
它对更大的 Port 生态系统的影响非常小:仅添加了两个新变量,VARIANT 和 VARIANTS。
它将为不同的打包团队提供更一致的处理变体的方法。
举个简单的例子,编辑器/ vim-lite 可以合并到编辑器/vim Port 中,同时仍然生成 vim 和 vim-lite 包。对于 Python,VARIANTS 可以通过已使用的 USES 标志派生,并生成兼容的包。py27-foobar 和 py34-foobar 现在可以无问题地由 Poudriere 一致生成。
幸运的是,这不是空想。我已经深入研究,并实现了在 Port 框架中支持变体的概念验证实现,包括对 Poudriere 的必要修改。发现 Poudriere 主要是用 Bourne shell 脚本编写的,这让我有些不安,但我仍然继续推进。
我从 Baptiste Daroussin 的原型 开始,进行了扩展。Poudriere PoC 的目标是尽可能限制更改,仅添加对新变体标志的支持,同时根据 Kubilay Kocak 的要求,使日志输出更侧重于包而非 Port。
这仍然是一个 进行中的工作,我很乐意听取你的反馈。在 FreeBSD 上工作的前几周我非常愉快,希望能在这里待上很长时间。
欢迎任何对实现的建设性反馈!
希望代码的质量足够高,可以在未来几个月内考虑进行正式审查。
联系人:FreeBSD Xfce 团队 <xfce@FreeBSD.org>
Xfce 是一个免费的桌面环境,适用于 Unix 和类 Unix 平台,如 FreeBSD。它旨在快速且轻量,同时又保持视觉上的吸引力和易用性。
在本季度,团队保持以下应用的最新状态:
audio/xfce4-pulseaudio-plugin 0.2.4
multimedia/xfce4-parole 0.8.1
x11/xfce4-whiskermenu-plugin 1.5.2
我们还跟踪了不稳定的版本(在我们的实验性仓库中提供):
x11/xfce4-dashboard 0.5.4
提交补丁给上游修复 Xfdashboard 与我们版本的 OpenGL 不兼容(目前会崩溃)。
联系人:Michael Lucas <mwlucas@michaelwlucas.com>
FreeBSD Mastery: Specialty Filesystems 目前正在进行文字编辑。电子书预计在一月底前通过各大供应商发布,印刷版将在二月发布。
本书涵盖从可移动介质到 FUSE、NFSv4 ACL、iSCSI、CIFS 等内容。
如果你迅速行动,可以以九折获取电子版早期访问版本。最终电子书发布时,你也会得到最终版本。(此优惠在最终版本发布时失效。)
联系人:Bruce Evans <brde@optusnet.com.au> 联系人:Conrad Meyer <cem@FreeBSD.org>
现在允许使用 bool。此前也可以使用,但现在真正被允许了。像 1999 年一样庆祝吧!
该项目由 EMC / Isilon 存储部门赞助。
明确 style(9) 对 iso646.h 的看法。
在使用 __int128_t
的平台上修复 intmax_t,使其为 128 位。
联系人:Shawn Webb <shawn.webb@hardenedbsd.org> 联系人:Oliver Pinter <oliver.pinter@hardenedbsd.org>
HardenedBSD 一直致力于提高我们安全增强功能的性能和稳定性。现在,安全标志是每个线程而不是每个进程的,从而减少了一些锁定开销。ASLR 对 mmap(MAP_32BIT) 请求的支持已经重构,但 lib32 现在默认被禁用。
我们开发了一个新的二进制更新工具 hbsd-update,类似于 freebsd-update。除了常规操作系统安装,它还可以更新 jail 和 ZFS 启动环境(ZFS BEs)。更新使用 X.509 证书进行签名。
secadm 0.3-beta 已经发布。它已从头重写,变得更高效。在重写过程中,规则语法发生了变化,用户必须按照 README 中的说明更新他们的规则集。
感谢 G2, Inc 和 Automated Tendencies 慷慨捐赠的服务器支持,我们现在能够在 35 小时内完成完整的包构建,相较之前的 75 小时大大缩短了时间。该机器还将提供每周的内核和基本系统二进制更新。
由于部分开发者的需求,我们有一个实验分支,包含 Jean-Sébastien Pédron 正在进行的工作,提供对 FreeBSD 11-current 上 Haswell 图形的支持。此分支也提供二进制更新。
不幸的是,为了专注于改善 HardenedBSD,我们不得不放弃将我们的 ASLR 补丁提交给 FreeBSD。过去两年在提交过程中处理评论的努力已经付出巨大精力,这项工作不再可持续。我们为基于 FreeBSD 而自豪,并相信整个社区可以从我们正在开发的安全技术中受益。我们希望其他人能够挺身而出,完成将 ASLR 集成到 FreeBSD 的工作。
该项目由 Automated Tendencies、G2, Inc 和 SoldierX 赞助。
联系人:Warner Losh <imp@FreeBSD.org>
本季度的 NanoBSD 更新针对三个主要领域进行改进。首先,构建 NanoBSD 镜像需要 root 权限。其次,构建嵌入式平台需要详细了解启动所需的格式。第三,必须知道确切的镜像大小才能生成镜像。
在编写 NanoBSD 时,FreeBSD 的构建系统要求在安装步骤及以后使用 root 权限。NanoBSD 通过在其中构建镜像来创建一个 md(4) 设备来解决此问题。NanoBSD 的某些配置进一步通过创建一个 chroot 环境来清理地构建包来加以解决。NanoBSD 通过使用新的 NO_ROOT 构建选项来创建一个元文件,从而解决了第一个问题。NanoBSD 还会在文件创建和删除时增强此记录。然后,元文件被传递给 makefs(8) 以创建具有正确权限的 UFS 镜像。该 UFS 镜像,及有时的 DOS FAT 分区,然后传递给 mkimg(1) 创建最终的 SD 镜像。mtree 操作已编写为一个独立脚本,以便将其移至基本系统中,届时它可以帮助其他构建编排工具(尽管该迁移尚未完成)。
构建每个嵌入式镜像的详细知识(以及某些 qemu 的基础镜像)一直很难明确化。Crochet 将这些知识融入到它的构建中。FreeBSD 发布系统将它融入到自己的系统中。NanoBSD 在当前工作之前,并没有提供任何方式来访问它如何构建镜像的知识。该项目的当前状态允许用户设置一个简单的镜像类型,让 NanoBSD 处理创建该镜像类型所需的所有细节。这包括使用 u-boot Port 并将正确的文件安装到 FAT 分区,以便 FreeBSD 可以通过 ubldr(8) 启动,或者为 powerpc64 qemu 启动创建正确的 boot1.elf 文件,或者是更熟悉的(但不必要复杂的)x86 设置。NanoBSD 的早期版本要求用户拥有过多的专业知识。此项工作旨在将这些知识集中到一组简单的脚本中,供任何构建编排系统使用。
最后,过去 NanoBSD 镜像需要非常具体的目标设备知识。这部分是十年前 BIOS 状态的遗留产物,当时需要非常小心地将镜像与实际设备匹配,以便在部署系统中运行。虽然当时这很重要,但现在这种系统变得非常罕见。对它们的支持将逐步淘汰(尽管考虑到 NanoBSD 的灵活性,它可以移到树中的少数剩余示例中,并且也可以部分由通用镜像脚本覆盖)。如今,典型的用例是创建 SD 或 microSD 卡镜像,并在启动时使镜像自行调整大小。NanoBSD 现在支持这一工作流。
除了这些项改进之外,还做了许多小的改进:
支持 CPUTYPE 特定的构建。这不仅包括 NanoBSD 支持,还包括基本系统中的重要 bug 修复。
支持将 MBR 分区标记为活动。
支持更多的分区类型。
mkimg(8) 需要增强以支持为 i.MX6 和 Allwinner(以及其他)SoC 创建镜像。这些 SoC 需要在 MBR 后而第一个分区前写入启动镜像。
某些 NanoBSD 配置中的 chroot 功能尚未迁移到非特权构建中。
处理 mtree(8) 文件的功能应移入基本系统,以供其他构建编排工具使用。
创建可启动镜像的脚本应移入基本系统,以便与其他构建编排工具一起使用。
growfs 功能对单个镜像扩展到整个磁盘非常有效。然而,NanoBSD 希望启动 FS/分区扩展到媒体的约一半大小,并创建另一个相同(或接近的)分区,以便 NanoBSD 配置的“乒乓升级”能够顺利进行。这需要在 growfs rc.d(8) 脚本中实现。
联系人:Mark Heily <mark@heily.com>
relaunchd 项目提供了一个服务管理守护进程,类似于 Apple OS X 中引入的原始 launchd。
然而,它不仅限于 launchd 的原始功能:目前正在进行有趣的工作,添加对在 jail 中启动程序、从宿主机向 jail 传递套接字描述符,以及在预配置的 capsicum(4) 沙盒内启动程序的支持。此外,relaunchd 使用 UCL 作为其配置文件格式,因此作业可以用 JSON 或其他 UCL 支持的格式定义。
虽然仍有工作要做,但原始 launchd 的大部分重要功能已实现,且 relaunchd 已在 FreeBSD Ports 中提供。它仍应被视为实验性,尚未准备好投入生产使用,但欢迎大家尝试、报告问题并贡献代码或改进想法。
添加对作业崩溃时自动重启的支持。
实现 cron(8) 模拟功能。
添加支持监控文件和目录变化,并在检测到变化时启动作业。
完成尚未完成的事项,如对 jail 的支持,以及将打开的套接字描述符传递给子进程的功能。
改进文档并提供更多使用示例。
联系人:Mark Heily <mark@heily.com> 联系人:Jonathan de Boyne Pollard <J.deBoynePollard-newsgroups@NTLWorld.COM> 联系人:Jordan Hubbard <jkh@FreeBSD.org>
目前有三个活跃的项目,旨在提供传统的 init(8) 和 rc(8) 子系统的替代方案,这些子系统管理启动过程和系统服务。推动变革的原因包括:
通过并行启动服务实现更快的启动时间
通过确保服务在意外终止时自动重启,提高可靠性
使用套接字激活和类似技术简化依赖管理
能够按需启动服务,并在空闲时自我终止
提高安全性,通过消除以 root 用户启动常见守护进程的需求
其中两个项目,launchd 和 relaunchd,基于 Apple 在 Mac OS X 中引入的 launchd(8) API。NextBSD 项目通过编写 Mach 兼容层,将原始的 Apple 源代码移植到 FreeBSD 上。relaunchd 项目从头开始,旨在创建一个更模块化、轻量和可移植的 launchd API 实现。第三个项目,nosh,是一个独特的创作,借鉴了 launchd、systemd 和多个其他 Unix 操作系统的概念。
虽然 FreeBSD 项目尚未决定是否替换当前的 init(8) 和 rc(8) 子系统,但替代方案的存在和积极开发将继续推动这一领域的创新。
Jordan Hubbard 是 NextBSD launchd 的联系人,Jonathan de Boyne Pollard 是 nosh 的联系人,而 Mark Heily 是 relaunchd 的联系人。
联系人:Deb Goodkin <deb@FreeBSDFoundation.org>
FreeBSD 基金会是一家 501(c)(3)非营利组织,致力于支持和推广全球 FreeBSD 项目和社区。资金来自个人和企业捐赠,用于赞助和管理开发项目、会议和开发者峰会,并为 FreeBSD 开发者提供差旅补助。基金会还购买硬件以改进和维护 FreeBSD 基础设施,并发布 FreeBSD 白皮书和营销材料,用于推广、教育和倡导 FreeBSD 项目。基金会还代表 FreeBSD 项目执行合同、许可协议和其他需要合法实体的法律安排。
以下是我们上个季度为帮助 FreeBSD 所做的一些亮点工作:
在宣传方面,基金会参加并赞助了于 10 月 1-4 日在瑞典斯德哥尔摩举办的 EuroBSDcon(https://2015.eurobsdcon.org/)。在活动前两天的开发者峰会上,Deb Goodkin 举办了关于招募 FreeBSD 开发者的会议。基金会在活动期间也非常活跃;除了 Deb,我们还有 Dru Lavigne、Kirk McKusick、Erwin Lansing、Ed Maste、佐藤広生、Benedict Reuschling 和 Edward Tomasz Napierała 参加了会议。Deb 和 Ed 介绍了基金会如何支持 BSD 项目。Kirk 做了关于“BSD 快速文件系统简史”的报告,并教授了为期两天的“FreeBSD 开源操作系统入门”教程。
随后,Deb 参加了 2015 年 10 月 14-16 日在德克萨斯州休斯顿举行的 Grace Hopper 会议。该会议面向女性计算领域的从业者,参与者大多数是女性计算机科学专业学生、女性软件开发者和大学教授。基金会很荣幸成为银级赞助商。这次会议对我们来说非常成功。我们的参与提高了项目的知名度,帮助招募了更多女性,吸引了更多教授将 FreeBSD 纳入课程。
George V. Neville-Neil 赴泰国曼谷,为朱拉隆功大学(泰国最大且拥有最大工程学院的大学)的师生做了关于 DTrace、FreeBSD 和 DTrace 教学的报告。第一场报告是 DTrace 从业者入门,讲解了该技术的历史和应用,且没有深入讨论所有内核子系统。第二场报告则是讲解如何使用 DTrace 和 FreeBSD 进行教学,受到观众热烈欢迎,听众提出了一些非常有见地的观点。课程材料是开源的并托管在 GitHub 上,这一事实也得到了广泛的好评。
Kirk McKusick 为 Pearson Education 的“Live Lesson”计划完成了一门关于 FreeBSD 的 10 小时教程。特别是,这门课程中有一段精彩的免费片段,比较了 FreeBSD 和 Linux:http://youtu.be/dTpqALCwQ1Y?a。可以在此了解完整课程:http://click.linksynergy.com/fs-bin/click?id=NZS3W7D*uS0&subid=&offerid=163217.1&type=10&tmpid=3559&RD_PARM1=http%253A%252F%252Fwww.informit.com%252Fstore%252Fintroduction-to-the-freebsd-open-source-operating-system-9780134305868。
Anne Dickison 恢复了《FreeBSD 面孔》系列,采访了 Michael Dexter 和 Erin Clark。她还继续为会议制作和分发 FreeBSD 材料,并通过我们的社交平台为 FreeBSD 进行宣传。
George V. Neville-Neil 主持了最新的硅谷供应商和开发者峰会,会议于 11 月 2-3 日在加利福尼亚州圣尼维尔的 NetApp 校区举行。讨论的议题包括持久内存的新进展、一家构建机架级系统的公司如何使用 FreeBSD、我们编译器和工具套件的发展等。其他参加峰会的基金会董事会成员和员工包括:Deb Goodkin、Glen Barber、Justin T. Gibbs、Kirk McKusick、Ed Maste 和 佐藤広生。完整的日程安排以及部分幻灯片可以在 FreeBSD Wiki 上查看 https://wiki.freebsd.org/201511VendorDevSummit。
来自总是充满活力的“Have/Need/Want session”的笔记可以在 https://wiki.freebsd.org/201511VendorDevSummit/HaveNeedWant 找到。
在湾区期间,基金会的一些成员访问了 FreeBSD 的商业用户,帮助了解他们的需求,更新基金会所做的工作,并促进他们与项目之间的合作。
我们是 2015 年 OpenZFS 开发者峰会的赞助商,会议于 10 月 19-20 日在加利福尼亚州旧金山举行。Justin T. Gibbs 和 Kirk McKusick 参加了此次会议。
Justin T. Gibbs 继续在中学教授使用 FreeBSD 进行计算机科学导论的课程,课程持续一个学期。
Ed Maste、Edward Tomasz Napierała 和 Konstantin Belousov 继续推进基金会赞助的开发项目。具体来说:
Ed 在多个与工具链相关的项目上进行了工作:LLD 链接器、ELF 工具链组件和 LLDB 调试器,并测试、集成并合并了未完成的 UEFI 工作。
Edward 完成了 reroot 项目的工作,并花了一些时间处理证书透明度的移植。他还实现了一个原型,支持 RCTL 中的磁盘 IO 限制。
Konstantin 重写了内存不足终止逻辑,特别是修复了 FreeBSD 在没有交换区的系统上,特别是在内存非常少的系统上的运行问题。随着嵌入式 ARM 平台的普及,这些系统变得越来越常见,FreeBSD 在这些平台上运行,但这也影响到通常配置为没有交换区的大型系统。他还最终确定并提交了 ARMv7 和 ARMv8 系统的共享页支持。这使得 ARMv7 上的堆栈不可执行,并且为两者提供了更快的用户空间 gettimeofday(2) 调用,类似于 x86。
Ed Maste 在 2015 年 11 月 10-12 日于加利福尼亚州圣克拉拉举办的 ARM Techcon 上做了 FreeBSD/arm64 的讲座和实践演示。
我们继续发布每月的新闻简报,并获取有关使用 FreeBSD 的新公司推荐,包括来自 Verisign 和 Nginx 的推荐。
Anne Dickison、Dru Lavigne 和 Glen Barber 代表基金会参加了 2015 年 11 月 3-8 日在华盛顿特区举办的 USENIX LISA '15。基金会在博览会大厅设立了展位,并参与了一个 BoF(Birds of a Feather)讨论会。除了与当前社区成员交流,我们还与有意参与项目的与会者进行了交谈,并帮助他们走上正确的道路。我们还利用这个机会提醒那些很久没有使用 FreeBSD 的人,告知他们错过了什么。Glen 还参加了与 LISA '15 同时举办的 USENIX Release Engineering Summit。
我们发布了 FreeBSD Journal 的 9-10 月和 11-12 月期。
George V. Neville-Neil 和 Robert Watson 宣布了他们的 TeachBSD 项目发布:http://teachbsd.org/。TeachBSD 提供了一套开源的可重复使用的课程材料,旨在帮助他人教授大学生和软件从业者 FreeBSD 操作系统的基础知识。基金会为他们在剑桥大学开设的初级研究生操作系统与追踪课程提供部分赞助,支持其教学工作。
Deb Goodkin 邀请了 Outreachy 项目的代表在渥太华 FreeBSD 开发者峰会上发表讲话,介绍该项目及其如何参与。
Deb 还开始与科罗拉多大学博尔德分校的计算机科学教授讨论开设 FreeBSD 入门工作坊的事宜。
Glen Barber 继续为项目提供多方面的支持。在发布工程方面:
增加了对构建 BANANAPI、CUBIEBOARD 和 CUBIEBOARD2 ARM 镜像的支持。
不再使用 MD5 校验和来验证从 FreeBSD 项目镜像站点下载的安装媒体。
对发布构建代码进行了各种杂项更新和修复。
继续提供定期的开发快照构建。
在系统管理方面:
协助管理员团队将各种服务迁移到位于圣尼维尔附近的两家新的托管设施,这些设施由 RootBSD 和 LimeLight Networks 慷慨提供。
将基金会的电子邮件服务迁移到新的服务器。
Ed Maste 参加了 2015 年 12 月 1-3 日在希腊雅典举行的可重现构建全球峰会。
我们通过参与 #慈善星期二
,继续每周通过电子邮件和社交媒体请求支持基金会,圆满结束了 2015 年的筹款活动。最终的筹款数字将在 2016 年第一季度公布。