FreeBSD 2003 年 3-9 月状态报告
引言:
FreeBSD 双月状态报告回来了!在本期报告中,我们回顾了过去七个月的高效工作,并展望了 2003 年底的情况。
一如既往,FreeBSD 开发团队始终在努力工作。对 AMD64 平台的支持很快就出现并接近完成。KSE 自 5.1 版本以来有了很大的改进,并将很快成为 FreeBSD 的默认线程包。许多其他项目也在进行中,旨在提高性能,增强用户体验,并将 FreeBSD 扩展到新领域。请继续阅读以下令人印象深刻的工作总结!
Scott Long,Robert Watson
链接
联系人:Maksim Yevmenkin m_evmenkin@yahoo.com
我很高兴地宣布,另一个版本已经可以下载,地址为 ngbt-fbsd-20030908.tar.gz。我还为 FreeBSD 源代码树准备了一个补丁,该补丁已提交给提交者审查。
修复了内核模块中的一些错误。修改了 ng_hci(4) 和 ng_l2cap(4) 模块,解决了 Netgraph 超时问题。修改了 ng_ubt(4) 模块,解决了 -current 上的编译问题。
改进了用户空间实用程序。实现了新的 libsdp(3)。新增了 sdpcontrol(8) 实用程序。修改了 rfcomm_sppd(1)、rfcomm_pppd(8) 和 obexapp(1),现在它们可以通过 SDP 从服务器获取 RFCOMM 通道。hccontorol(8) 实用程序现在有四个新命令。hcsecd(8) 守护进程现在会将链路密钥保存在磁盘上。
最近有几位个人联系了我,他们希望将当前的 FreeBSD 蓝牙代码移植到其他 BSD 系统(OpenBSD 和 NetBSD)。这项工作正在缓慢推进,目标是将当前代码从 Netgraph 中解耦。与此同时,Netgraph 版本将是该代码的主要支持版本。
联系:http://www.root.org/~nate/freebsd/
联系人:Nate Lawson njl@FreeBSD.org
关于 ACPI 的工作仍在进行中,更新新特性并修复错误。7 月份编写了一个新的嵌入式控制器驱动程序,支持 ACPI 2.0 ECDT,并提供更强大的轮询支持。此外,修复了一个 ACPICA 资源列表处理中的缓冲区溢出问题,避免了某些用户发生的系统崩溃。Marcel 帮助测试并基本使 acpidump(8) 在 ia64 上工作。
即将进行的工作包括将 ACPI 通知与 devd(8) 集成,提交用户提交的 ASUS 和 Toshiba 快捷键驱动程序,Cx 处理器睡眠状态(这样我的笔记本就不会把我的大腿烫伤了),以及为智能关闭未使用或空闲设备提供电源资源支持。
遇到 ACPI 问题的用户鼓励提交 PR,并将其编号通过电子邮件发送至 acpi-jp@jp.FreeBSD.org。崩溃或系统挂起的错误报告优先处理,非工作特性或缺失设备的报告(不包括挂起/恢复问题)排在第二位。目前,不建议提交挂起/恢复失败的 PR,因为大多数问题是由于设备支持不完整,正在进行改进。然而,欢迎将这些信息通过邮件发送到邮件列表,任何信息都对改进有帮助。
联系人:Peter Wemm peter@FreeBSD.org
妨碍 AMD64 机器完成完整发布的最后一个已知错误已被修复:一个简单的字符错误导致 ghostscript 在渲染图表时崩溃。SMP 工作接近完成,预计将在接下来的几天内提交。SMP 代码基于 John Baldwin 的 i386 工作,使用 ACPI MADT 表。我们还需要花一些时间进行低级优化,因为有几个简单处理过的次优部分,特别是在上下文切换方面。MTRR 支持已提交,XFree86 可以使用它。cvsup 现在可以正常工作,但 ezm3 移植还未更新。默认的数据段大小限制为 8GB,而不是 512M,且(原始的)i386 二进制仿真支持能够降低执行 32 位二进制文件的 rlimits。
仍然缺少的关键特性:需要编写硬件调试寄存器支持;gdb 仍作为与未发布的 FSF gdb 树相关的外部补丁集进行处理;DDB 无法正确反汇编;DDB 无法在没有 -fno-omit-frame-pointer
的情况下进行堆栈追踪:需要一个堆栈展开器;需要 i386 和 amd64 的 Linux 二进制仿真,且 i386 的 FreeBSD 二进制仿真仍需要一些工作,特别是删除 stackgap 代码。
总体而言,该平台非常可靠,尽管上周报告了一些问题。其中一个问题似乎是一个卡住的中断,但所有相关代码已为 SMP 支持重新编写。
联系人:Thomas Quinot thomas@FreeBSD.org
随着 ATAng 的引入,一些 ATAPI/CAM 用户遇到了各种问题。经过追踪,这些问题大多与新的 ATA 代码有关,以及 CAM 层中的两个长期存在的问题,这些问题在使用“真实” SCSI SIM 时很少被触及。这也为 ATAPI/CAM 的清理提供了机会,使其更加健壮,并启用了通过其访问的设备的 DMA,从而提高了性能。
链接:<http://www.daemonology.net/freebsd-update/
联系人:Colin Percival cperciva@daemonology.net
FreeBSD Update 是一款跟踪 FreeBSD 版本(安全)分支的系统。与源代码更新相比,FreeBSD Update 更快、更方便,并且需要的带宽更少,安全性也更高。然而,FreeBSD Update 有一些限制;它只能更新从官方 RELEASE 镜像安装的文件,而不能更新本地重新编译的文件。目前,我正在发布 4.7-RELEASE 和 4.8-RELEASE 的二进制更新;由于我唯一的可用机器需要 3.5 小时来构建世界(buildworld),因此我没有足够的资源做更多的更新。
在不久的将来,我希望能够:找到愿意捐赠更快构建机器的人;开始为其他版本构建更新(至少为所有“支持的” FreeBSD 版本);如果文件本来应该被更新但由于被本地重新编译而无法更新,添加警告信息;添加代码以将本地系统与“有效” MD5 哈希列表进行比较,用于入侵检测;并增加跨签名支持,即多个机器可以独立构建更新,以防止构建机器被攻破。
链接
联系人:Ernst De Haan znerd@FreeBSD.org
联系人:Herve Quiroz herve.quiroz@esil.univ-mrs.fr
FreeBSD Java 社区开始着手改进当前的基于 Java 的 Port 框架。主要目标是自动化 JDK/JRE 的构建和运行依赖性检查。
原始版本旨在简化 Ports 维护人员的工作。虽然它在很大程度上已被证明是有用和可靠的,但我们目前正在开发一个新版本。我们打算实现更高的灵活性,以应对最近 JDK/JRE 版本种类的增加。此外,新版本将更易于维护,这意味着更高的可靠性,并且希望能够更频繁地更新。
链接
联系人:Alexander Leidinger netchild@FreeBSD.org
自从我将 icc 移植到 FreeBSD 后,我就希望能够使用 icc 来构建 FreeBSD。现在,使用 icc 7.1(并且经过一些补丁)是可能的。仍然存在一些问题,例如 NFS 在使用 icc 编译的内核时无法正常工作,IP 似乎较为脆弱,一些高级优化会触发 ICE(英特尔正在处理此问题)。目前,我在等待我们的管理员将 icc 安装到 FreeBSD 集群中(我们从英特尔获得了商业许可证,因此可以分发使用 icc 编译的二进制文件),安装完成后,我将尝试说服一些了解 IP 和 NFS 内核部分的人员来调试剩余问题。当 icc 编译的内核大致没有问题时,用户空间将成为移植的重点。感兴趣的人可以尝试独立于用户空间移植进展的情况下,使用 icc 构建 Port 树……如果这在 FreeBSD 集群中进行,我们也可以分发这些二进制文件。
优势包括:另一个编译器错误集(调试帮助)、更具可移植性的源代码,以及针对 P4 优化的更好代码(gcc 在这方面有一些缺陷)
联系人:Sam Leffler sam@FreeBSD.org
已添加对几种新加密设备的支持。SafeNet 1141 是一个中等性能的设备,目前尚未在零售产品中出现。Hifn 7955 和 7956 设备开始出现在零售产品中,预计年底前会有上市。这两种设备都支持 AES 加密。最近为 SafeNet 设备添加了公钥操作的支持,该功能已经在 OpenBSD 中实现,并将进行回移植。计划为 Hifn 设备添加公钥支持。
已在 Usenix BSDCon 2003 大会上发表关于加密子系统性能工作的论文,获得了最佳论文奖。
NetBSD 最近已经导入了加密子系统。
联系人:Warner Losh imp@FreeBSD.org
已经识别出在锁定 device_t 时存在多个竞争条件。大多数竞争条件与驱动程序的编写方式有关。正在开展工作,旨在识别所有竞争条件,并联系能够帮助驱动程序的子系统作者。特别需要关注的是驱动程序必须确保所有线程完全退出驱动程序代码,才能在 detach() 完成之前正常结束。此外,还需要确保在某些例程调用之前,所有处于睡眠状态的线程都被唤醒,这样其他子系统才能确保最后的条件,并且不会留下悬挂的引用。除这些问题外,锁定 device_t 相对直接。为了实现正确的锁定,目前正在使用一些示例驱动程序来研究“正确”的定义。待这些问题被充分了解并在代码中记录下来,相关文档将会更新。到目前为止,驱动程序锁定存在很多问题,但在我们确定如何编写当前的驱动程序之前,联系特定驱动程序作者并提出具体的关注点还为时过早。
联系人:Poul-Henning Kamp phk@FreeBSD.org
以下是磁盘 I/O 区域正在进行的工作:将 scsi_cd.c 转换为 GEOM 驱动程序。(补丁已提交审查)。将 atapi-cd.c 转换为 GEOM 驱动程序。将 fd.c 转换为 GEOM 驱动程序。将软更新和快照处理从 SPECFS 移动到 UFS/FFS。将用户空间对设备驱动程序的访问移出 vnodes。
在处理完这些初步工作后,将向 struct bio/GEOM 添加 scatter/gather 和映射/未映射支持。
联系人:Gordon Tetlow gordon@FreeBSD.org
已经提交了动态链接 /bin 和 /sbin 的支持,尽管默认未启用。有兴趣的用户可以通过使用 WITH_DYNAMICROOT make 标志来构建 /bin 和 /sbin 以尝试这一功能。还需要更多的测试,以确定这是否会成为 5.2-RELEASE 的默认设置。如果有人愿意对比动态链接与非动态链接的 /bin 和 /sbin 进行基准测试,欢迎进行并提交结果。
链接
联系人:Greg Lewis glewis@FreeBSD.org
BSD Java 移植团队最近达到了一个令人兴奋的里程碑,发布了第一个 Diablo
JDK 和 JRE,这是 FreeBSD 基金会提供的。Diablo Caffe 和 Diablo Latte 1.3.1 的发布是自 1.1.8 以来第一个本地 FreeBSD JDK 的二进制发布,标志着 FreeBSD Java 支持的一个重要进步。
该团队正在继续开发工作,专注于在不久的将来实现符合规范的 JDK 1.4 版本。
链接
联系人:Mark Linimon <linimon_at_lonesome_dot_com>
几个月前,我开始尝试以更用户友好的方式呈现 bento 构建集群 中包含的信息;即按错误类型、维护者等进行浏览。最早加入的功能是代码,尝试将 Ports PR 分类为“现有 Ports”(在分配最可能的类别和 Ports 名称后)、“新 Port”、 “框架”(例如 bsd.port.mk 变更)、和“未知”。我们还向报告中添加了关于 Port PR 的多个列。
这个初衷是为了让 Ports 维护者的工作变得更加轻松;然而,“通用”报告对任何想要查看特定 Port 是否在他们的架构和操作系统组合中正常工作的人也非常有用。在下载之前,大家可以查看特定 Port 的概览,来了解其兼容性。对此感兴趣的用户可以从 Port 概览 开始。
链接
联系人:Marcel Moolenaar <marcel@FreeBSD.org>
自上次的双月报告以来,已经发生了很多事情,那时距离今天已经有半年多。比如,已经发布 FreeBSD 5.0 和 FreeBSD 5.1 。随着 FreeBSD 5.2 的临近,我们并不打算回顾过去的成就。将来的工作远比回顾更重要……
在 FreeBSD 5.1 发布之后,我们达到了两个里程碑。第一个是能够支持 Intel 和 HP 的机器,且源代码已经放入 CVS。这要归功于全新的串口(UART)驱动程序。不幸的是,这仍然意味着 syscons 尚未配置。这是另一个待办事项,但可以关注 KGI/FreeBSD 项目……第二个里程碑是完成了 KSE 支持。M:N 和 1:1 线程在 ia64 上均已正常工作,旧的 libc_r 库已被废弃。测试表明,KSE(即 M:N)可能会成为默认的线程模型,发展前景良好。
自 5.1 之后 ABI 没有发生变化,预计变化不会太大。这意味着我们可以考虑成为一级平台。这也意味着我们需要 gdb(1) 的支持。相关工作已经开始,但这条路依然崎岖漫长。内核的稳定性也有了显著提升,目前通常只剩下一个内核 panic:VM 错误无故条目。这个问题将通过期待已久的 PMAP 改进来解决(见下文)。
FreeBSD 5.2 主要的工作将是“精益求精”,整理那些松散的细节。这一计划的调整得益于发布日程的推迟。5.2 版本将不会是 -stable 分支的起点,它已被推迟到 5.3 版本。因此,我们将利用额外的时间为 5.3 做好准备。
计划中的 PMAP 改进预计将在 5.2 之后完成。这将解决所有已知的 SMP 问题,并修复剩余的 panic 问题。作为副作用,可以期待显著的性能提升。关于此项工作的更多信息将在下一期报告中发布。
链接
联系人:Kazuo Horikawa <horikawa@FreeBSD.org>
我们于 6 月 10 日发布了 FreeBSD 5.1-RELEASE 的在线日文手册页翻译。
联系人:KDE-FreeBSD 邮件列表 <kde@FreeBSD.org>
FreeBSD Port 已更新至 KDE 3.1.4,这是另一个包含 bug 修复和安全修复的版本。通过此更新,QT Port 已更新至 3.2 版本。这两个版本将包含在 FreeBSD 4.9 中。大量工作已投入到在 FreeBSD-CURRENT 中修复 KDE,特别是在去除 gcc -pthread 选项之后。自动构建来自 KDE CVS 的包继续确保并提高即将发布的 KDE 3.2 的质量。
未来:正在进行的工作包括为 KDE-FreeBSD 网站、仓库以及另一个 KDE CVS 镜像设置新服务器。在 Marcel Moolenaar 的帮助下,项目将尝试使 KDE 在 Intel IA64 上编译并正常运行。最后,还在努力修复当前损坏的 kdesu 程序。
链接
联系人:Nicholas Souchu <nsouch@FreeBSD.org>
自上次报告以来,已经完成了大量工作:网站已完全重新设计(请参见新网址),实现了带有文本或图形模式控制台消息的控制台设计,开发了一个兼容层以编译 Linux fbdev 驱动程序,原始驱动程序几乎没有变化(实验性)。
除了某些内存分配错误外,X(基于 XFree 3.3.6 的 XGGI)现在可以与控制台使用相同的驱动程序正常工作。现在需要实现一个基本的终端。
欢迎志愿者加入项目……
链接
联系人:Dan Eischen <deischen@FreeBSD.org>
联系人:David Xu <davidxu@FreeBSD.org>
KSE 在 x86、amd64 和 ia64 上似乎运行良好。alpha 用户空间部分已经完成,但内核中有几个功能尚未实现。对于 sparc64,所需的功能已在内核中实现,但用户空间的上下文切换功能需要更多关注。
自 5.1 以来,已实现高效的作用域系统线程(当它们被阻塞时没有上行调用),并且基于 KSE 的 pthread 库可以同时支持 POSIX 作用域的进程线程和作用域系统线程。基于 KSE 的 pthread 库还可以实现 1:1 和 M:N 模式的 pthread,我知道 Dan 已经为 libkse 提交了这样一个 Makefile 补丁,但尚未提交。
KSE 程序现在可以在 ULE 调度器下工作,其效率预计在未来的新调度器下将有所改善。BSD 调度器仍然是当前 KSE 实现下最好的调度器。
联系人:Sam Leffler <sam@FreeBSD.org>
该项目的目的是提高网络子系统的性能。此项工作的主要部分是完成网络子系统的锁定,使其不再依赖于“Giant 锁”来正常操作。去除 Giant 锁将提高性能,并允许网络堆栈的多个实例在多处理器系统上并行操作。
该项目始于八月。重点放在锁定网络代码的“下半部分”,以便通过 IPv4 路径进行数据包转发时不再依赖 Giant 锁,这将作为 5.2 版本的一部分进行操作。为此,已经向多个网络接口驱动程序添加了锁定,并且网络中的大量“中间件”代码也被锁定(例如 ipfw、dummynet、路由表、多播路由支持等)。为实现这一目标的工作仍在进行中,但应为 5.2 版本做好准备。多种测试系统已经运行了几个月,网络驱动程序和 IP 层中没有使用 Giant 锁。
在 5.2 发布之后,Giant 锁将从网络子系统的“上半部分”和套接字层中移除。完成此操作后,计划是测量并提高性能(尽管此类工作始终在进行)。最终目标是系统在单处理器系统上的正常使用时,性能至少与 4.x 相当。在多处理器系统上,预计将比 4.x 提供显著更好的性能,原因是更大的并发性和减少的延迟。
链接
http://pf4freebsd.love2party.net
联系人:Max Laier <max@love2party.net>
联系人:Pyun YongHyeon <yongari@kt-is.co.kr>
该项目始于今年春季,并在 2003 年 5 月发布了版本 1.0,并提供了 Port 安装(security/pf)。版本 2.0 即将发布,OpenBSD 3.4 也将随之发布。由于移植工作,我们能够揭示一些 OpenBSD 代码中的 bug,并为我们使用的 PFIL_HOOKS 提供了锁定功能。可以在项目主页上找到用于测试的可加载内核模块的 tarball 安装包,补丁集正在制作中。
PF 是 OpenBSD 中作为 ipfilter 替代品启动的,提供相同的功能集。然而,在这两年的发展中,它已获得许多其他数据包过滤器没有的优越功能。欲了解更多信息,可以查看 PF 常见问题解答。
我们希望最终能将其集成到基本系统中。在此之前,我们需要解决与 tcpdump 和 kame 的一些问题。
联系人:Peter Grehan <grehan@FreeBSD.org>
在一段时间的停滞后,工作已经重新启动。当前的重点是使可加载模块工作,NEWBUS 化 NetBSD 的 dbdma 代码,并完成 BMAC 以太网驱动程序。
有大量的工作要做,非常欢迎志愿者加入!
联系人:Scott Long <re@FreeBSD.org>
4.9 版本即将发布,提供了 x86 的物理地址扩展(PAE),以及 4-STABLE 系列所期望的世界级稳定性和性能。像往常一样,别忘了从你喜爱的 FreeBSD 供应商那里购买 CD 套件。
FreeBSD 5.1 于 6 月发布,提供了比 5.0 显著改进的稳定性,并实现了内核调度实体(Kernel Scheduled Entities),允许跨多个 CPU 进行应用程序的真正多线程。FreeBSD 5.2 将于 2003 年底发布,重点改进网络和整体性能。
联系人:Gordon Tetlow <gordon@FreeBSD.org>
联系人:Tim Kientzle <kientzle@FreeBSD.org>
救援构建基础设施已经提交。有一个已知问题,make 使用 '-s' 和 '-j' 标志时,似乎是 make 的一个 bug。如果有人有兴趣追踪此问题,请与我们联系。
联系人:Marcel Moolenaar <marcel@FreeBSD.org>
uart(4) 项目源于需要在无遗留配置的情况下拥有一个工作串行接口(即 RS-232-C 接口),并且在尝试转换 sio(4) 失败后启动。sio(4) 的最大问题是它与内核的核心部分纠缠在一起。没有不破坏某些东西的转换,这必然会对某些人群产生负面影响。以 sio(4) 为一个好的坏例子,并且有强烈的愿望一次解决多个问题,作者开始坚定地想到创建一个 UART(通用异步接收器/发射器)设备,其通用名称能够处理不同类型的 UART 硬件。
最大挑战当然是解决低级控制台访问的问题,在总线基础设施初始化之前仍能拥有一个仅使用总线访问的驱动程序。在这个过程中,通过引入系统设备,解决了 UART 在 sparc64 上作为键盘使用的问题,同时也将控制台封装为一个系统设备。
uart(4) 驱动程序可以增强支持 pc98 上的各种 UART 硬件,目前正在进行这项工作。同时,sparc64 上的键盘支持也在进行中。还计划重写远程 gdb 支持,使用通用接口允许各种驱动程序(包括 uart(4))注册为通信通道。由于 uart(4) 本身不支持多端口卡,我们可能需要增强 puc(4) 或引入其他总驱动程序。
链接
联系人:John-Mark Gurney <jmg@FreeBSD.org>
仍处于规划阶段。正在创建一个可扩展的接口,既适用于用户空间,也适用于内核实现的设备驱动程序。正在决定如何将用户空间实现的设备驱动程序与应用程序接口。
链接
联系人:Jon Disnard <masta@wifibsd.org>
WifiBSD 是一个用于无线应用的 FreeBSD 精简版。最初是为 Soekris Net45xx 系列主板设计的,但现在可以针对 FreeBSD 本身支持的任何硬件/架构进行定制。虽然功能尚未完全完成,但预计 WifiBSD 将为 5.2-RELEASE 做好准备。设计目标是满足或超越商业/消费者级 802.11 无线设备的功能。需要关注的功能(仅举几例)包括:HTTP 接口、控制台菜单接口和安装。欢迎志愿者加入。
联系人:Sam Leffler <sam@FreeBSD.org>
自上次状态报告以来,已修复了大量的错误(当然也新增了一些)。改进安全性的工作进展有所放缓,但来自其他小组的新功能和修复已经开始共享代码。特别是,NetBSD 最近导入了修订版的 802.11 层,而基于 Linux 的 MADWIFI 项目也在使用该层(尽管是较旧的版本)。MADWIFI 用户已经贡献了诸如 802.11 帧的分段重组和信号监控改进等功能。来自 NetBSD 小组的节能轮询和改进的速率控制算法预计也会加入。WPA 支持仍在计划中;最好的估计是,相关工作将在 1 月开始。
最后更新于
这有帮助吗?