FreeBSD 2004 年 7-12 月状态报告

FreeBSD 2004 年 7-12 月状态报告

原文地址:FreeBSD 2004 年 7-12 月状态报告

简介

FreeBSD 状态报告在短暂的歇息后再次回归。2004 年下半年异常忙碌,FreeBSD 5.3 版本发布,6-CURRENT 开发分支启动,EuroBSDCon 2004 取得巨大成功,这些只是其中的一部分大事件。本期报告包含了令人印象深刻的 44 份提交,是迄今为止提交数量最多的一次!

此外,我很高兴地欢迎 Max Laier 和 Tom Rhodes 加入状态报告团队。他们主动请缨,帮助我们确保报告按时发布,并提升整体质量。尤其是 Max,他推动了报告按主题划分,使浏览更加方便。非常感谢他们的帮助!

相关链接http://people.freebsd.org/~mlaier/CARP/

联系人:Max Laier <mlaier@FreeBSD.org>

CARP 是 VRRP 的替代方案。与 VRRP 不同,它完全支持 IPv6,并使用加密技术来保护通告信息。OpenBSD 开发 CARP 的初衷是担心 VRRP 可能涉及 HSRP 专利,而 CISCO 可能会维护其专利权。从那时起,CARP 在 VRRP 的基础上进行了许多改进。

CARP 作为内核中的多播协议实现,并以伪接口的形式呈现给用户。这种设计使配置和管理变得非常简单。此外,CARP 还集成了基于 MAC 地址的负载均衡。

适用于 RELENG_5 和最新 HEAD 版本的补丁可在上述链接中获取。我计划在未来两到四个月内导入这些补丁。RELENG_5 已具备支持 CARP 所需的 ABI,因此我可能会在 FreeBSD 5.4 或 5.5 版本中合并该功能,具体取决于 HEAD 版本的导入进展情况。

待办事项

  1. 请进行测试并提供反馈!

  2. 编写相关文档。

  3. 导入最新的 OpenBSD 变更。

相关链接

网络协议栈清理项目

联系人:George Neville-Neil <gnn@FreeBSD.org>

在过去的一个月里,我们建立了上述项目页面,并创建了一个 p4 分支,供我们在 CVS 之外使用 p4 进行开发工作。

相关链接

FreeBSD profile.sh 站点

联系人:Tobias Roth <ports@fsck.ch>

FreeBSD profile.sh 主要面向笔记本电脑。它能让用户定义多个网络环境(例如家庭、工作场所),并可自动检测笔记本电脑启动时所处的环境,并据此进行相应配置。系统中几乎所有位于 /etc 下的配置都可以按环境进行设定,用户只需定义与默认 /etc 配置不同的部分。此外,它还支持在一个环境中挂起(suspend)并在另一个环境中恢复(resume)。

目前正在进行 ACPI/APM 的更好集成以及一些小的改进。此外,还需要针对不同的系统配置进行更多测试。

相关链接http://www.freebsd.org/releng

联系人:Scott Long <re@FreeBSD.org>

经过漫长的等待,FreeBSD 5.3 于 2004 年 11 月正式发布。这标志着 RELENG_5/5-STABLE 分支的启动,同时 6-CURRENT 开发分支也开始了。非常感谢 FreeBSD 开发者和用户社区的不懈努力,使这一版本得以顺利发布。

与此同时,FreeBSD 4.11 的发行工程也在进行中。这将是 4.x 系列的最后一个版本,主要包含增量的 bug 修复和少量功能更新。其中值得注意的是,IBM ServeRAID “IPS” 驱动现已支持 4.x,并将包含在此版本中。此外,Linux 模拟层(Linux emulation layer)已更新,以支持 RedHat 8.0 用户空间(userland)。预计该版本将在 2005 年 1 月 24 日发布。

展望未来,5.x 系列将在 2005 年迎来多个新版本。FreeBSD 5.4 版本的发行工程将于 3 月开始,而 5.5 版本的工程预计将在 6 月启动。这些版本将比以往的 5.x 版本更加保守,并遵循以往 -STABLE 分支的理念,即在保持 API 稳定性的前提下修复 bug 并进行增量改进。

对于 6-CURRENT 开发分支以及所有未来的开发和稳定分支,我们计划采用固定时间表,以避免 5.x 版本中出现的进度不确定性和频繁的日程变动。这意味着主要分支将以 18 个月为周期发布,而在这些分支上的版本将以 4 个月为间隔发布。此外,在每个分支的初期,我们会进行专门的测试和 bug 修复,然后再发布该分支的首个版本。通过缩短并明确发布周期,我们希望减少因版本延迟导致的新功能无法及时交付给用户的问题,这种情况在 5.x 版本中发生得过于频繁。这一策略变更具有重要意义,我们期待它带来的好处。该计划将从 2005 年 6 月的 RELENG_6 分支启动,随后在 2005 年 8 月发布 FreeBSD 6.0。

此外,我们计划合并原本用于 Live-ISO 的 disk2 和安装发行版的 disk1,将它们整合为一个既可用于安装,也可用于系统恢复的光盘。原本存放在 disk1 上的第三方软件包将被转移至新的 disk2,使其专用于软件包存储。这一调整不仅能更好地应对不断增长的软件包体积,还能为希望添加自定义软件包的厂商提供更大的灵活性。同时,这也为未来用更先进的安装程序替换 sysinstall 打开了大门。如果有兴趣参与该项目的开发,请随时与我们联系。

相关链接

FreeSBIE 官方网站

FreeSBIE 邮件列表

联系人:FreeSBIE 团队 <staff@FreeSBIE.org>

FreeSBIE 是基于 FreeBSD 操作系统的 Live-CD,简单来说,它是一款可以直接从 CD 运行、无需安装到硬盘的 FreeBSD 发行版。

2004 年 12 月 6 日,FreeSBIE 团队发布了 FreeSBIE 1.1,该版本基于 FreeBSD 5.3-RELEASE。其中包含了一些重要的改进,包括:一系列改进的脚本,以便高级用户更方便地使用 FreeSBIE 1.1;一个安装程序,允许用户将 FreeSBIE 1.1 安装到硬盘,从而获得一个类似 FreeBSD 的强大操作系统,同时保留 FreeSBIE 1.1 提供的个性化设置。此外,它还包含精心挑选并定制的开源软件,例如 X.Org 6.7、XFCE 4.2RC1、Firefox 1.0 和 Thunderbird 0.9.2。

完整的软件包列表请参考:http://www.freesbie.org/doc/1.1/FreeSBIE-1.1-i386.pkg_info.txt

在 2004 年德国卡尔斯鲁厄举办的 EuroBSDCon 大会上,FreeSBIE 团队成员发表了演讲,深入探讨了 FreeSBIE 脚本的实现与应用。

待办事项

  1. 翻译网站和文档

相关链接

详细状态报告

联系人:Poul-Henning Kamp <phk@FreeBSD.org>

关于该计划 6 个月的开发进展,已经发布了一份较为详细的状态报告。由于篇幅较长,请访问上方链接查看完整内容。

联系人:Tim Robbins <tjr@FreeBSD.org>

多字节字符支持已扩展到 FreeBSD 基本系统中的多个工具,包括 basename、col、colcrt、colrm、column、fmt、look、nl、od、rev、sed、tr 和 ul。此外,由于 C 语言库(C library)的改进(详见下文),大多数涉及正则表达式匹配或路径通配(pathname globbing)的工具现在也支持多字节字符。

C 语言库中的正则表达式匹配和路径通配函数已得到改进,并可识别多字节字符。此外,宽字符 I/O 函数的性能也得到了优化。同时,6-CURRENT 分支已移除了过时的 4.4BSD “rune” 接口和 UTF2 编码支持。

目前,我们正在开发 POSIX iconvlocaledef 接口,计划将其纳入 FreeBSD 6.0 版本中。

相关链接

官方网站

英文版

联系人:Sergei Mozhaisky <technix@ukrpost.com.ua>

Frenzy 是一款基于 FreeBSD 的 Live-CD,定位为“便携式系统管理员工具包”。它主要包含用于硬件测试、文件系统检查、安全审计、网络配置与分析的软件。当前版本为 0.3,基于 FreeBSD 5.2.1-RELEASE,约 200MB 的 ISO 镜像内包含近 400 款应用程序。

下一个版本的计划任务包括:编写硬盘安装脚本、开发统一的系统配置工具、更新软件。

相关链接

Portsnap

FreeBSD Update

联系人:Colin Percival <cperciva@FreeBSD.org>

在持续提升 FreeBSD 用户系统更新安全性的过程中,我新增了一个工具:Portsnap。它已作为 sysutils/portsnap 收录于 Ports 中。该工具可以安全地下载并更新压缩格式的 Ports 快照,随后用户可从中提取或更新未压缩的 Ports。借助 RSA 签名,Portsnap 在端到端传输中确保了安全性。此外,它完全基于 HTTP 运行,相较于 cvsup,频繁更新 Ports (每周一次以上)的用户可节省 90% 以上的带宽。

FreeBSD Update——我开发的安全高效的二进制更新工具(用于安全/勘误分支的跟踪)—— 仍被广泛使用,目前每天约有 100 台机器下载安全或修正补丁。

未来,我计划将这两个工具集成到 FreeBSD 基本系统中,可能会先从 Portsnap 开始。

相关链接

FreeBSD/i386 5.3-RELEASE 硬件支持列表

FreeBSD/i386 6.0-CURRENT 硬件支持列表

联系人:Simon L. Nielsen <simon@FreeBSD.org>

联系人:Christian Brueffer <brueffer@FreeBSD.org>

FreeBSD 硬件支持文档(Hardware Notes)现已(大部分)改为直接从驱动程序的手册页自动生成。这大大简化了维护工作,使硬件支持列表更加准确。FreeBSD 5.3 的硬件支持文档已采用这一新系统生成。

相关链接

项目网页

官方发布的文档

文档预览

联系人:Remko Lodder <Remko@FreeBSD.org>

FreeBSD 荷兰语文档项目是一个持续进行的项目,旨在将 FreeBSD 文档翻译为荷兰语。目前,我们的主要精力集中在 手册 的翻译上,进展顺利。然而,在完成“完整”翻译之前,仍有大量内容需要翻译和校对。因此,如果你愿意提供帮助,请访问我们的网站或直接联系我。

待办事项

  1. 翻译 手册

  2. 校对荷兰语 手册 的语法

  3. 翻译其余文档

联系人:Søren Schmidt <sos@FreeBSD.org>

ATA 驱动正在经历多项重要变更,主要是将其模块化,使其可以随时加载或卸载,并且用户只需保留所需的功能模块。

这次重构也促使 ata-raid 进行了彻底重写。目前,BIOS 预定义的 RAID 阵列元数据读取功能已基本完成,并且支持了更多新的元数据格式。这也为 ataraid 最终能够利用某些新控制器的 RAID 功能铺平了道路。然而,这仍需要进一步开发,但至少现在已经具备了实现的可能性。

此外,还增加了对一些新芯片组的支持(像往常一样)。

目前,重构工作已接近完成,接下来将以补丁的形式发布,以便在正式合并到 CURRENT 之前修复可能存在的问题。这些改动涉及整个驱动架构,因此在此过程中,我们不仅完成了预期的功能,还发现并修复了许多长期存在的 Bug。

链接:http://www.nrg4u.com/freebsd/tcp_reass+prefetch-20041216.patch

联系人:Andre Oppermann <andre@FreeBSD.org>

现代 CPU 只有在其工作代码存储于 L1-L3 高速缓存中时,才能发挥最佳性能,而非直接从主存读取数据。如今的 CPU 都支持某些 L1-L3 缓存预取指令,它们可以将数据提前从主存加载到缓存中,以确保 CPU 访问数据时已在缓存中,从而提高性能。

然而,CPU 缓存预取 并非万能方案,必须在极为特定的情况下谨慎使用,才能真正带来优化效果。不当使用可能导致严重的缓存污染,进而降低整体性能。但如果使用得当,并经过精确控制,它能够显著提升某些常见操作的性能。

在提供的补丁中,CPU 缓存预取 主要用于在数据包进入网络栈后,立即将其 OSI 第 2 至 4 层 的数据包头加载到 CPU 缓存中。这样可以避免数据包头的首次访问导致 CPU 完全停滞(因为数据包是通过 DMA 直接写入主存的,因此不会预先出现在 CPU 缓存中)。补丁中的第二个应用场景是在 TCP 输入代码 中,预取 tcpcb 结构体(它体积较大,且几乎一定会被访问)。在这两个场景下,测试结果显示性能提升显著,但具体量化数据仍在进一步评估中。

最终的补丁将包含相关文档,并提供一份指南,详细说明如何在 FreeBSD 内核 中评估和使用 CPU 缓存预取指令

联系人:John Baldwin <jhb@FreeBSD.org>

ACPI PCI 连接支持代码已重构,以规避先前实现中的一些限制。新版本的实现方式更接近于当前的非 ACPI $PIR 连接支持。主要改进包括:在启动过程中禁用未使用的连接设备,以及使用更简单、更可靠的算法为未路由的连接设备选择 ISA IRQ

目前正在 jhb_clock Perforce 分支上开发使用 本地 APIC 计时器 来驱动内核时钟,而非 ISA 计时器i8254 计时器。该功能已基本完成,并可能很快合入主干。通过让每个 CPU 使用其私有计时器来驱动内核时钟,内核将不再需要在每次时钟中断发生时向所有其他 CPU 发送 IPI(跨处理器中断)。

相关链接

主页

http://wiki.daemon.li/moin.cgi/KGI

联系人:Nicholas Souchu <nsouch@FreeBSD.org>

该项目近期较为沉寂(但仍在进行中!),主要依靠志愿者进行测试。新的文档可在 http://wiki.daemon.li/moin.cgi/KGI 找到。

待办事项

  1. 协助改进文档

链接:http://lists.freebsd.org/pipermail/cvs-all/2004-August/079811.html

联系人:Andre Oppermann <andre@FreeBSD.org>

IPFW2 现已转换为使用 PFIL_HOOKS 处理 IPv4/IPv6 的输入/输出路径(详见链接)。但 IPFW2 的第二层 Etherfilter(以太网过滤)功能尚未转换,目前仍直接从 ether_input/output桥接代码 中调用。

第二层 PFIL_HOOKS 提供了一个通用抽象接口,使数据包过滤器可以挂载到 第二层数据包路径,以便过滤或修改数据包。这意味着不仅 IPFW2,还包括 PF 及其他数据包过滤器都可以用于第二层过滤。

相关链接

基于现代 CPU 硬件性能监控功能的 FreeBSD 高级性能监控系统

联系人:Joseph Koshy <jkoshy@FreeBSD.org>

目前已支持 AMD AthlonIntel P4 处理器的 系统级进程虚拟化计数模式 性能监控计数器。SMP(对称多处理)已基本可用,但仍存在系统冻结的问题。接下来的工作包括:

  1. 实现系统级进程虚拟化采样模式

  2. 调试现有代码

  3. 编写测试套件

  4. 改进项目文档

链接:<http://lists.freebsd.org/pipermail/freebsd-current/2004-April/026380.html

联系人:Andre Oppermann <andre@FreeBSD.org>

联系人:Qing Li <qingli@speackeasy.net>

目前,ARP(IP 地址到 MAC 地址的映射)被存储在 路由表(FIB) 中,但它本不应该存在于此。因此,我们计划将其移至独立的基于哈希的结构,并在每个 802.1 广播域 中实例化该结构。

这一变更将使多个网络接口能够共享同一个 IP 子网第二层广播域,同时大幅简化 ARP 处理路由表管理。此外,该改动还将引入基于 MAC 地址的全量计费功能。

目前,Qing Li 已成为该项目的主要负责人和开发者,预计将在 2005 年 2 月 发布首个补丁供社区讨论。

相关链接

FreeBSD 项目 Netperf 主页

Robert Watson 的 Netperf 个人主页

联系人:Robert Watson <rwatson@FreeBSD.org>

Netperf 项目致力于提升 FreeBSD 网络协议栈的性能。该工作源自 SMPng 项目,该项目的目标是将 FreeBSD 内核从“Giant Lock”模式迁移到更精细的锁机制和多线程模式。SMPng 使网络协议栈的并行性和抢占能力得到提升,但同时也显著增加了每个数据包的处理开销。Netperf 项目主要专注于进一步提高网络处理的并行性,同时减少 SMP 同步的开销,以提升整体处理吞吐量并降低处理延迟。当前的主要任务包括:完善锁定机制、优化加锁策略、摊销加锁成本、引入新的同步机制、采用无锁同步方案,并通过多线程改进并行处理能力。

2004 年 7 月 - 12 月主要进展

由于 Netperf 项目在 2004 年 7 月至 12 月期间进行了大量工作,本文仅能涵盖部分内容,更多详细信息可通过上述链接获取。主要成果如下:

2004 年 7 月

  • 改进 IPv6 PCB(协议控制块) 加锁

  • if_xl 驱动 相关加锁

  • NFS 客户端socket 加锁

  • soreceive() 代码路径优化,包括结构改进、断言及加锁修复

  • IPX/SPX 代码 清理,为后续加锁做准备

  • TCP 额外加锁及加锁断言

  • Raw IP 相关的加锁和内存分配错误修复

  • Netatalk 清理和加锁(合并至 FreeBSD CVS)

  • Netgraph 多个节点加锁(合并至 FreeBSD CVS)

  • SLIP 结构改进

  • Netatalk ifaddrs 试验性加锁

  • BPF(Berkeley Packet Filter)加锁优化(已合并)

  • VFS 断言,检查 VFS/网络协议栈 边界

  • Unix 域套接字 加锁优化

  • WITNESS 中增加锁顺序文档

  • NFS 服务器代码 进一步去除 Giant Lock

  • 管道(pipe)加锁优化,提升分配性能

  • fstatsocket 和 pipe 上不再需要 Giant Lock(已合并)

  • socket 和 pipe 文件描述符关闭 不再需要 Giant Lock(已合并)

  • 新增 IFF_NEEDSGIANT 接口标志,支持非加锁设备驱动的兼容性操作(已合并)

  • Accept 过滤器加锁合并至 FreeBSD CVS

  • uidinfo 加锁策略文档(已合并)

  • fcntl() 对 Giant 的依赖减少

2004 年 8 月

  • UMA KTR(Kernel Trace Recorder)跟踪(已合并)

  • UDP 广播接收加锁优化(已合并)

  • TCP 加锁清理及文档完善

  • IPv6 inpcb(协议控制块)加锁、清理及结构优化

  • IPv6 inpcb 加锁合并至 FreeBSD CVS

  • i386 系统调用 KTR 支持

  • 熵收集同步优化(已合并)

  • callout(9) 采样转换为 KTR(已合并)

  • inpcb socket 选项加锁(已合并)

  • netatalk 代码中移除 GIANT_REQUIRED(已合并)

  • ADAPTIVE_GIANT 合并至 FreeBSD CVS,显著提升内核 IPC 性能

  • UDP 头部预留链路层头部空间,避免每次 UDP 发送时额外分配(已合并)

  • 多个 UDP 相关错误修复(已合并)

  • 多个网络接口标记为 MPSAFE

  • Unix 域套接字加锁重构

  • MP_WATCHDOG 机制(已合并)

  • kqueue 加锁(由 John-Mark Gurney 开发并合并)

  • IPv6 代码 in6_prefix 清理(已合并)

  • IPX、KAME IPSEC 现在使用 NET_NEEDS_GIANT 编译时标记(已合并)

  • 熵收集代码的额外加锁优化(已合并)

  • Netperf 开发分支默认禁用 Giant(已合并)

2004 年 9 月

  • 修复 Netgraph 使用内核链接器时未持有 Giant 的 bug(已合并)

  • 默认移除网络协议栈的 Giant(已合并)

  • 修复 netinet6 和 if_afdata 相关的竞争条件(已合并)

  • BPF 代码改用 queue(3)(已合并)

  • 修复 sopoll() 竞争条件(已合并)

2004 年 10 月

  • IPv6 netisr 标记为 MPSAFE

  • TCP 计时器加锁、断言(已合并)

  • IP 套接字选项加锁及清理(已合并)

  • Netgraph ISR 和 Netatalk ISR 标记为 MPSAFE(已合并)

  • 修复熵收集和以太网相关的 use-after-free bug(已合并)

  • 修复 soclose()/sofree() 竞争条件(已合并)

  • 新增 IFF_LOCKGIANT() 和 IFF_UNLOCKGIANT(),在非 MPSAFE 网络接口 ioctl 入口时自动获取 Giant 锁

2004 年 11 月

  • FreeBSD 5.3 发布,首次默认使用 MPSAFE 且无 Giant Lock 的网络协议栈

  • 文件描述符引用计数优化,提升高负载下的 send/recv 性能(已合并)

  • 实验性网络轮询加锁

  • 优化互斥锁和加锁机制(已合并)

  • UMA 采用临界区保护 per-CPU 缓存,优化微基准测试性能

  • 新 mbufqueue 原语开发,优化网络协议栈与设备驱动之间的交互(与 Sandvine, Inc 合作)

  • Linux TCP_INFO API 添加,支持用户态 TCP 状态监控(已合并)

2004 年 12 月

  • UDP 处理改进(多线程入站处理)(已合并)

  • TCP 紧急数据处理相关的 socket 缓冲区加锁修复(已合并)

  • IF_DEQUEUE() 和 IF_DRAIN() 读优化

  • 优化 netisr 处理 mbuf 队列的批量出队

  • netrate 测试工具合并至 RELENG_5

  • TCP 加锁修复合并至 RELENG_5

  • DDB 增加 "show alllocks" 命令(已合并)

  • IPX/SPX 代码清理、加锁修复(已合并)

  • IPX/SPX 标记为 MPSAFE(已合并)

  • SPPP 代码加锁(由 Roman Kurakin 完成)(已合并)

  • Unix 域套接字加锁修复(由 Alan Cox 完成)(已合并)

该项目仍在持续推进,包括 netinet6 进一步加锁、mbuf 队列优化、基准测试、新同步机制研究,以及更广泛的清理和文档改进。

相关链接http://lists.freebsd.org/pipermail/cvs-src/2004-November/035462.html

联系人:Philip Paeps <philip@FreeBSD.org>

在多个邮件列表上进行了一系列讨论后,FreeBSD 正在开发新的模块化输入设备层。其目标主要有两个:

  • 使新的输入设备驱动程序的开发更加容易。

  • 支持多个输入设备的并发使用,尤其是热插拔设备。

目前,实现对新输入设备的支持是一个相当痛苦的过程,并且存在大量代码重复的可能性。新的输入设备层将提供一个简单的 API,使开发人员可以以一致的方式将硬件事件发送到内核的上层,就像 Linux 内核中的 input-core 驱动一样。

同时,当前使用多个输入设备的体验也非常不理想。有了新的输入设备层,不同设备的事件将在传递到内核的其他部分之前得到适当的序列化。这将使用户可以更轻松地在虚拟终端中同时使用多个 USB 键盘等设备。

目前该工作仍处于非常早期的阶段。预计首批可见的改动将在 2 月底或 3 月初提交到 -CURRENT 分支。

相关链接

联系人:John Baldwin <jhb@FreeBSD.org>

联系人:<smp@FreeBSD.org>

FreeBSD 网络栈内部发生了大量变更,具体情况可能会在另一份报告中介绍。除此之外,内核其他部分也进行了一些改动,包括 proc 结构的锁定调整、内核线程调度器变为可抢占式、修复调度器中的多个优先级反转问题,以及对 mutex 实现进行一些性能优化。

proc 结构及其子结构的锁定工作方面,添加了 struct uprofstruct rusagestruct pstats 的必要锁定。此外,还重新设计了内核存储进程时间统计信息的方式,改为存储原始的 struct bintimetick 计数,仅在 getrusage()wait4() 请求时计算更友好的用户可读值。

内核线程调度器现已支持线程抢占。当一个线程使另一个线程变为可运行状态时,如果新线程的优先级更高,则当前线程可能会让出 CPU 以执行该线程。之前,只有中断线程可以抢占其他线程,并且原有实现偶尔会触发错误的上下文切换。目前,此更改已暴露出内核其他部分的 Bug,因此在 RELENG_5 分支中默认关闭。目前,只有 i386amd64alpha 平台支持原生抢占式调度。

此外,还修复了一些由于 SMPng 项目对内核进行修改而导致的调度器中的优先级反转 Bug。其中大部分修复工作由新提交者 Stephan Uphoff 完成,包括:修复 turnstile 唤醒代码中的竞争条件、修改 sleep queue 代码以按 FIFO 顺序存储线程,使 sleep queue 唤醒代码能够正确处理线程优先级变更,并抽象出优先级借用机制,使调度器能够正确跟踪优先级继承,并处理 turnstile 阻塞线程的优先级变更。

正在进行的工作包括将临界区与自旋锁进一步分离,以降低临界区的开销,同时继续调整各种 ABI 兼容层,使其使用内核版本的系统调用,从而减少 stackgap 使用并使系统调用封装 MPSAFE。

相关链接

我的 FreeBSD 主页,其中包含部分工作成果,但更新较少。

联系人:Roman Kurakin <rik@FreeBSD.org>

SPPP(同步点对点协议)在 6.current 版本中已更新,可在 MPSAFE 模式下运行。为了兼容性,如果某个接口无法在 MPSAFE 模式下工作,SPPP 仍然会使用非 MPSAFE 锁。

此外,还添加了对 FrameRelay AnnexD 的支持作为一个历史性的提交。许多 Cronyx 用户期待这一改动已久,并且大多数用户仍然更喜欢使用 SPPP 而不是 netgraph,因为其配置更加简单(特别是对于 PPP(相较于 mpd)和 FR(相较于多个 netgraph 模块))。此改动合并到 MFC 后,我将最终关闭自 2000 年 10 月 5 日以来的 PR 21771。

相关链接http://people.freebsd.org/~andre/tcpcleanup.html

联系人:Andre Oppermann <andre@FreeBSD.org>

自 1994 年从 4.4BSD-Lite2 分支以来,FreeBSD 的 TCP 代码已经经历了大规模演进,主要是由于新的特性和 TCP 规范的不断完善。

现在,TCP 代码需要进行全面的重构和清理,以提升其可读性、可维护性和可扩展性。此外,在重构过程中,还可以进行许多小优化,使 FreeBSD 重新成为性能最优的 TCP/IP 协议栈之一,就像 90 年代长期占据领先地位时那样。

此次重构工作极其复杂且精细,需要经过广泛的形式化测试和实际测试,以确保不会引入比当前代码更严重的回归问题。预计该工作需要大约两个月的全职专注开发时间。为了完成这项任务,我需要资金支持,以便暂时离开日常工作,全力投入到 FreeBSD 的开发中,就像 PHK 之前在缓存和 vnode 重构项目中的做法一样。

在 2005 年 2 月,我将正式发布资金筹集请求,提供详细的工作说明以及资金使用方式。总体而言,我可以为愿意赞助此项目的公司开具发票,以报销相关费用。此外,通过 FreeBSD 基金会,可能可以安排免税捐赠。目前已欢迎资金赞助,请通过上述邮箱联系我。

未完成任务:

  1. 需要筹集相当于两个月全职工作的资金。

  2. 如果你计划赞助 1000 美元及更高,请提前与我联系。

相关链接

http://www.nrg4u.com/freebsd/tcp_reass-20041213.patch

http://lists.freebsd.org/pipermail/freebsd-net/2004-December/005918.html

联系人:Andre Oppermann <andre@FreeBSD.org>

目前,TCP 片段重组是通过一个链表来实现的。然而,在当今的高带宽网络环境下,尤其是具有较大带宽-时延积的场景中,这种方式的可扩展性和性能表现均不佳。

此次重写将优化 TCP 片段重组过程的多个方面。例如,新到达的片段很可能需要连接到重组队列的末尾,因此我们首先检查该情况。其次,我们检查它是否是缺失的片段,或者是否应连接到重组队列的起始位置。第三,连续的片段会进行(逻辑上的)合并,并在线性搜索时一次性跳过,而不是逐个遍历所有片段。

进一步的优化方案包括在 mbuf 层面合并连续的片段,而不仅仅是逻辑合并。这预计会带来显著的性能提升。新的重组队列还会追踪队列中的所有“空洞”(缺失片段),未来可能会与 SACK 的缓存区集成,以提高性能。

Andrew Gallatin 在 Myrinet 双 2Gbps 网卡上进行测试,即便在固件 Bug 导致的严重数据包乱序情况下,新的 TCP 重组代码仍然能够实现 3.7Gbps 的 TCP 传输性能。详细信息请参考第二个链接。

相关链接

http://lists.freebsd.org/pipermail/cvs-all/2004-November/089939.html

联系人:Andre Oppermann <andre@FreeBSD.org>

根据 RFC1644 标准,旧版 TTCP 存在安全性差、侵入性强、复杂等问题,并且已经从 FreeBSD 5.3 版本及之后的版本中移除。尽管如此,其背后的理念和语义仍然有效且合理。

重写后的版本采用了更简单且更安全的系统,使用 24 位长的客户端和服务器 cookie,并通过 TCP 选项进行传输。客户端 cookie 防止各种盲目注入攻击,并可用于提高 TCP 会话的整体安全性(例如用于 BGP)。服务器 cookie 仅在 SYN-SYN/ACK 阶段交换,允许服务器确保它曾与特定客户端进行过通信。第一次连接总是执行三次握手(3WHS)并分配一个服务器 cookie 给客户端。后续连接则可以将 cookie 返回给服务器,从而跳过三次握手,直接进入 SYN->OPEN 阶段。

TTCPv2 可以通过 setsockopt() 系统调用按每个套接字进行完全配置。不支持 TTCPv2 的客户端和服务器仍然可以正常工作,继续使用常规的三次握手,而不会造成延迟或其他复杂问题。

TTCPv2 的实现工作已完成 90%,预计在 2005 年 2 月初可用。实现规范(RFC 草案)的编写工作刚刚开始。

相关链接

二进制文件 + 源代码 + 稍有过时的 HOWTO

Xen 项目主页

联系人:Kip Macy <kmacy@fsmware.com>

FreeBSD 5.2.1 在 Xen 稳定分支中作为来宾操作时已稳定运行。FreeBSD 5.3 在 Xen 稳定分支中也能运行,但需要修复一些 bugs。

未完成任务:

  1. 支持在 Domain 0(主机)上运行 FreeBSD。

  2. 支持 FreeBSD 的虚拟机检查点和迁移功能。

相关链接

FreeBSD/arm 项目主页

联系人:Olivier Houchard <cognet@FreeBSD.org>

FreeBSD/arm 取得了巨大进展。目前,它可以启动多用户模式,并能够在 IQ31244 开发板上运行如 “make world” 和 Perl 等程序。现在它还支持多种功能,包括 DDB、KTR、ptrace 和内核模块。一个早期的 gdb 支持补丁已经发布,libpthread 也几乎可以正常工作。

相关链接

Miniinst ISO 文件 Miniinst 发布说明

联系人:Peter Grehan <grehan@FreeBSD.org>

一个本地构建的 6.0-CURRENT miniinst ISO 文件已经可以通过上述链接下载。它在 G4 Powermac 上表现最好,但也可能在其他 Newworld 机器上运行。具体细节请参见发布说明。

和往常一样,许多帮助仍然是需要的。这是一个非常适合那些希望深入了解 FreeBSD 内核的开发者的项目。

相关链接

FreeBSD GNOME 项目

联系人:Joe Marcus <marcus@FreeBSD.org>

我们已经有一段时间没有发布状态报告了,但这只是因为我们一直很忙。自从 2004 年 3 月的最后一次报告以来,我们增加了三位新成员:Koop Mast(kwm)、Jeremy Messenger(mezz)和 Michael Johnson(ahze)。Jeremy 在 GNOME 开发移植方面非常有帮助,而 Michael 和 Koop 则专注于改进 GNOME 多媒体,特别是 GStreamer。GNOME 的稳定版现已更新到 2.8.2,我们正在积极开发 GNOME 2.9 分支,预计将在今年 3 月 9 日发布 2.10 版本。

GNOME Tinderbox 仍在运行,并为所有支持的 i386 版本的 FreeBSD 生成稳定版和开发版的 GNOME 包。

感谢 Michael Johnson,FreeBSD GNOME 团队最近获得了 使用 Firefox 和 Thunderbird 名称、官方图标的许可,并可以生成官方品牌的构建版本。Mozilla 也非常希望将我们本地的补丁合并回官方源代码树。这将大大提高 Firefox 和 Thunderbird 在 FreeBSD 上的质量。

最后,Adam Weinberger(adamw)一直在催促团队提供照片,这样我们就可以向社区展示我们的面貌。目前尚不清楚这是否会吸引更多的 FreeBSD GNOME 用户,或者让我们上 Homeland Security 的禁飞名单。

未完成任务:

  1. 需要帮助将 HAL 移植到 FreeBSD(联系 marcus@FreeBSD.org

  2. 需要帮助将 libburn 移植到 FreeBSD(联系 bland@FreeBSD.org

  3. 有兴趣重启 Gnome Meeting 的人可以联系 kwm@FreeBSD.org

相关链接

FreeBSD OpenOffice.org 移植状态页面

FreeBSD 的稳定 OpenOffice.org 包

一些不稳定的 WIP 包状态

联系人:Maho Nakata <maho@FreeBSD.org>

OpenOffice.org 2.0 状态

OpenOffice.org 1.1 状态

一般情况

  • 从命令行调用 OpenOffice.org 的方式有所改变。现在必须使用 .org 后缀。例如,openoffice-1.1.4 -> openoffice.org-1.1.4。由于软件名称是 OpenOffice.org 而不是 OpenOffice,我们也在考虑更改 ports 的名称(/usr/ports/editors/openoffice-2.0-devel -> openoffice.org2-devel 等)。

  • 目前标记为“BROKEN”的 OOo 移植包适用于早于 5.3-RELEASE 和 4.11-RELEASE 的版本。这些移植包一直受到 FreeBSD 和 Linux、Solaris、NetBSD 之间 rtld.c 的小实现差异的影响。我们一直在应用一个补丁来添加 _end 到 mapfile。我们需要这个补丁,因为 rtld 依赖于 _end 符号的存在。不幸的是,这似乎引发了难以解决的错误。经过重大进展,rtld 现在不再依赖 _end。该修复已于 2004 年 2 月 25 日提交,http://www.freebsd.org/cgi/cvsweb.cgi/src/libexec/rtld-elf/rtld.c.diff?r1=1.91&r2=1.92&f=h

  • 性能测试!构建 OOo 需要大量资源。我们只是想了解构建所需的时间,以便评估机器如何为高负载工作做好调优。http://porting.openoffice.org/freebsd/benchmark.html。目前,GOTO daichi(daichi)的 Pentium 4 3.0GHz 机器构建速度最快。第二次构建 OOo 1.1.4 仅需 1 小时 25 分 22.42 秒,使用了 ccache。

  • 仍然没有进行实现测试和质量保证,也没有为 FreeBSD 提供系统化的文档。http://porting.openoffice.org/freebsd/testing.htmlhttp://porting.openoffice.org/freebsd/QA.html 有详细信息。

致谢:两位对许多方面做出贡献的人,Pavel Janik(审阅并提供了很多建议)和 Kris Kennaway(极其耐心的构建者),以及(按字母顺序排列)daichi、Eric Bachard、kan、lofi、Martin Hollmichel、nork、obrien、Sander Vesik、sem、Stefan Taxhet 和 OpenOffice.org 开发者的志愿者(特别感谢 SUN Microsystems, Inc.)的合作与热情鼓励。

链接

FreeBSD Ports

FreeBSD Ports 监控系统

联系方式:Mark Linimon <linimon_at_FreeBSD_dot_org>

联系方式:Erwin Lansing <erwin@FreeBSD.org>

自上次关于 Ports 的报告以来,发生了许多变化。在组织结构方面,portmgr 团队失去了一些长期成员,迎来了新成员,包括 Oliver Eikemeier、Kirill Ponomarew 和 Mark Linimon。后来,portmgr 还不得不告别 Will Andrews。此外,在此期间,我们还增加了不少新的 Ports 提交者,他们的贡献得到了热烈欢迎!

大部分精力投入到了两个版本的发布中。5.3 版本经历了特别长的冻结期,但由于 Ports 状况良好,4.11 的冻结期保持在最低限度。新基础设施的几次迭代已在集群中进行了测试并提交。现在,集群也为 6-CURRENT 版本构建包,从而将不同构建环境的数量增加到 10。

此外,我们还对 Ports 进行了几次清理,以统一不同 Port 中使用的变量及其值,例如 BROKEN、IGNORE、DEPRECATED、USE_GCC 等。

从技术角度来看,最大的变化是将 X.org 代码库作为默认的 X11 实现。同时,还提交了可以选择使用 X.org/XFree86 代码的功能,后者也在此期间进行了更新。由于 Eric Anholt、Dejan Lesjak(新提交者)和 Joe Marcus Clarke 的辛勤工作,这一切进展比预期的要顺利得多。

此外,GNOME 和 KDE、Perl 以及 Java 框架在此期间也得到了更新。Porter 手册也进行了一些更新,但更多部分仍需要更新以包括近期的实践变更。在此期间,Bill Fenner 还修复了他在 distfile 调查 中的一个错误。

在 4.11 版本发布前,我们现有的 linux_base 因安全问题被标记为禁止使用。大量工作已投入到将默认版本从 7 升级到 8,以便在 4.11 版本发布时提供一个可用的 linuxolator。

由于 4 月至 5 月期间的稳定性问题,Alpha 架构的包构建被暂停。在 Ken Smith 等人对 Alpha 进行了一些工作后,4.X 版本的包构建于 2004 年底重新启用。

Ports 质量保证提醒 —— portmgr 团队现在定期发送关于 Ports 问题的电子邮件。当前提醒包括:

  • 公共列出所有因安全问题、构建失败或一般过时而将被移除的 Port,除非它们先被修复

  • 向受影响 Port 的所有维护者发送私人邮件(包括依赖上述 Port 的 Port)

  • 向所有标记为 BROKEN 或 FORBIDDEN 的 Port 维护者发送私人邮件

  • 向非提交者的维护者发送私人邮件,提醒他们有针对他们 Port 的 PR(以便将 PR 转发给他们)

  • 关于导致 INDEX 构建失败的 Port 提交的公共邮件

  • 关于发送版本修订元数据回退的 Port 提交的公共邮件(从而影响像 portupgrade 这样的工具)

每个提醒背后的想法是增加 Port 问题的可见性,从而加速问题的修复。最后,值得注意的是,我们达到了又一个里程碑,Ports 现在包含 12,000 余个 Port。

待处理任务:

  1. 我们的大多数构建错误仍然源于编译问题,主要是由于 gcc 升级引起的。感谢许多志愿者的努力,这些错误正在减少,但仍有很多工作要做。

  2. 下一个最多的构建错误是由于代码无法在我们的 64 位架构上构建,原因是假设“全世界都是 PC”。这是完整的列表;每个单独的条形图是可点击的。随着 amd64 平台被提升为一级支持状态,这个问题将变得越来越重要。

  3. 我们已经在解决安装文件超出批准目录或卸载不干净的 Port 上取得了很多进展(请参见 pointyhat 上的“PLIST 中未列出的额外文件”),这将继续是我们的重点领域。

联系方式:Alexander Leidinger <netchild@FreeBSD.org>

由于 emulators/linux_base 存在安全问题,默认的 Port linux_base 已从基于 RedHat 7 的 emulators/linux_base 更改为基于 RedHat 8 的 emulators/linux_base-8,恰好在 FreeBSD 4.11 版本发布时完成。在转换过程中,修复了几个 Linux Port 中的问题。

RedHat 7 和 8 都已进入生命周期末期,因此预计将来会更新为更近期的 Linux 发行版。出于 QA 原因,此更新未安排在 FreeBSD 4.11 发布前进行。

链接

http://people.freebsd.org/~mlaier/ALTQ_driver/

ALTQ(4) 手册页

联系方式:Max Laier <mlaier@FreeBSD.org>

ALTQ 是 FreeBSD 5.3 版本的一部分,可以与 PF 一起用于流量整形和分类。在 CURRENT 版本中,IPFW 也获得了进行 ALTQ 分类的功能。越来越多的网卡驱动程序已经被转换为支持 ALTQ。详情请参见 ALTQ(4) 手册页。

待处理任务:

  1. 转换/测试更多的网卡驱动程序。

  2. 编写文档。

链接

Cronyx 软件下载页面

联系方式:Roman Kurakin <rik@FreeBSD.org>

目前 FreeBSD 支持三种类型的 Cronyx 同步适配器:Tau-PCI - cp(4),Tau-ISA - ctau(4) 和 Sigma - cx(4)。所有这些驱动程序在 6.current 版本中都已更新,现在它们已不再依赖 Giant。然而,这只对 sppp(4) 有效。如果你使用 Netgraph 或异步模式(对于 Sigma),可能需要通过适当的内核变量关闭该驱动程序的 mpsafenet。

待处理任务:

  1. 目前所有这些驱动程序和 sppp(4) 都使用递归锁。因此,第一个任务是使这些锁变为非递归锁。

  2. 第二个任务是检查/使驱动程序在 netgraph/异步模式下可用。

  3. 我正在考虑在运行时切换 sppp/netgraph 模式的功能。目前,你需要重新编译模块/内核才能更改模式。

链接

PF4FreeBSD 主页

联系方式:Max Laier <mlaier@FreeBSD.org>

联系方式:Daniel Hartmeier <dhartmei@FreeBSD.org>

FreeBSD 5.3 是第一个包含 PF 的版本。该版本发布时没有问题,但一些错误在太晚时才被发现,未能及时更新到 CD。建议更新 src/sys/contrib/pf 到 RELENG_5。具体修复的内容如下:

  • 可能的 NULL 解引用(user/group 规则)。

  • 在动态接口上使用 binat 时崩溃。

  • 含选项头的 IPv6 数据包被静默丢弃。

  • 使用 static-port 规则时发生死循环。

这些问题大多数是由 FreeBSD 用户发现的,并反馈给了 OpenBSD。这是开源协作的典范。

《手册》中的防火墙部分已修改,提到 PF 作为 IPFW 和 IPF 的替代方案。

待处理任务:

  1. 编写更多文档/文章。

  2. 编写一个 IPFilter 到 PF 的迁移指南/工具。

链接

论文/演讲下载页面

联系方式:Patrick M. Hausen <hausen@punkt.de>

所有的论文和演讲资料现已上传到我们的会议网站,可以下载。再次感谢所有帮助使 EuroBSDCon 2004 成功的人。

链接

EuroBSDCon 官方主页

联系方式:Max Laier <mlaier@FreeBSD.org>

今年的 EuroBSDCon 将于 11 月 25 日至 27 日在瑞士巴塞尔大学举行。征集论文的通知将很快发布。请考虑参加或甚至进行演讲。更多信息请访问会议主页。

链接

FreeBSD 安全信息

FreeBSD 安全官员章程

FreeBSD 安全团队成员

FreeBSD VuXML 网站

portaudit

联系方式:Jacques Vidrine <nectar@FreeBSD.org>

联系方式:安全官员 <security-officer@FreeBSD.org>

联系方式:安全团队 <security-team@FreeBSD.org>

在 2004 年,FreeBSD 安全官员角色和安全团队经历了几项重大的变化和事件。

2002 年由核心团队批准的安全官员(SO)章程终于在网站上发布了。该文档介绍了安全官员的使命、职责和权力。(当前的安全官员是 Jacques Vidrine)

安全官员由副安全官员和安全团队支持。4 月份,Chris Faulhaber 辞去了副安全官员职务,Dag-Erling Smorgrav 被任命为新的副安全官员。同时,以下团队成员辞职:Julian Elischer、Bill Fumerola、Daniel Harris、Trevor Johnson、Kris Kennaway、Mark Murray、Wes Peters、Bruce Simpson 和 Bill Swingle;而以下人成为新成员:Josef El-Rayes、Simon L. Nielsen、Colin Percival 和 Tom Rhodes。向所有过去和现在的成员表示衷心的感谢!已在网站上发布当前的安全团队成员。

随着 FreeBSD 4.8 的发布,安全官员开始为一些 FreeBSD 版本及其相应的安全分支提供扩展支持。“早期采用者”分支,如 FreeBSD 5.0(RELENG_5_0),至少支持六个月。“正常”分支至少支持一年。“扩展”分支,如 FreeBSD 5.3(RELENG_5_3),至少支持两年。当前支持的分支及其估计的“生命周期结束”(EoL)日期已发布在 FreeBSD 安全信息网页上。在 2004 年,四个版本已“过期”:4.7、4.9、5.1 和 5.2。

随着 FreeBSD 4.10 和 5.3 的发布,安全官员和发布工程团队扩展了安全分支的范围,涉及了与安全问题无关的关键 bug 修复。目前,这些修复发布为单独的错误通知。未来,安全通知和错误通知将合并并统一处理。

2004 年发布了 17 条安全通知,涉及了 8 个与 FreeBSD 相关的问题和 9 个通用问题。

2004 年还引入了漏洞和暴露标记语言(VuXML)。VuXML 是一种用于记录单个软件包中安全问题的标记语言。安全团队和其他提交者已在 FreeBSD 项目的 VuXML 文档中记录了 Ports 中的超过 325 个安全问题。该文档目前保存在 ports 仓库中,路径为 ports/security/vuxml/vuln.xml。文档的内容以可读形式提供,用户可以在 FreeBSD VuXML 网站上查看。portaudit 工具可用于审计本地系统是否存在列出的安全问题。从 11 月开始,流行的 FreshPorts.org 网站也开始跟踪 VuXML 中记录的问题。

链接

仓库浏览器

RELENG_5 提交的 RSS

CURRENT 提交的 RSS

svk 官方主页

联系方式:Kao Chia-liang <clkao@FreeBSD.org>

FreeBSD 仓库的公开 Subversion 镜像地址是 svn://svn.clkao.org/freebsd/。此镜像供希望尝试 svk 分布式版本控制系统的用户使用。

你可用 svk 镜像整个仓库,并在离线时进行提交。它还提供历史感知的分支、合并和补丁功能。非提交者可以轻松地维护自己的分支,并在补丁审查期间跟踪上游的变更。

链接

Wiki

联系方式:Josef El-Rayes <josef@FreeBSD.org>

由于旧的 Wiki 引擎在缺乏身份验证机制的情况下遭受了垃圾邮件攻击,我不得不将其更换为更先进的软件。我们现在使用的是 moinmoin,而非 usemod。因此,它不再仅仅是“浏览和编辑”,而是需要注册,并且必须由已在 ACL 组“developers”中的某人将你添加到该组。所以它现在是一个“仅限开发者”资源。旧的 Wiki 可以在 http://wiki2.daemon.li 找到。

待办事项

  1. 将旧 Wiki 的内容迁移到新 Wiki。

最后更新于

这有帮助吗?