原文地址: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 版本的导入进展情况。
待办事项
请进行测试并提供反馈!
编写相关文档。
导入最新的 OpenBSD 变更。
相关链接
联系人:George Neville-Neil <gnn@FreeBSD.org>
在过去的一个月里,我们建立了上述项目页面,并创建了一个 p4 分支,供我们在 CVS 之外使用 p4 进行开发工作。
相关链接
联系人: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 团队 <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 脚本的实现与应用。
待办事项
翻译网站和文档
相关链接
联系人: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 iconv
和 localedef
接口,计划将其纳入 FreeBSD 6.0 版本中。
相关链接
联系人:Sergei Mozhaisky <technix@ukrpost.com.ua>
Frenzy 是一款基于 FreeBSD 的 Live-CD,定位为“便携式系统管理员工具包”。它主要包含用于硬件测试、文件系统检查、安全审计、网络配置与分析的软件。当前版本为 0.3,基于 FreeBSD 5.2.1-RELEASE,约 200MB 的 ISO 镜像内包含近 400 款应用程序。
下一个版本的计划任务包括:编写硬盘安装脚本、开发统一的系统配置工具、更新软件。
相关链接
联系人: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 文档翻译为荷兰语。目前,我们的主要精力集中在 手册 的翻译上,进展顺利。然而,在完成“完整”翻译之前,仍有大量内容需要翻译和校对。因此,如果你愿意提供帮助,请访问我们的网站或直接联系我。
待办事项
翻译 手册
校对荷兰语 手册 的语法
翻译其余文档
联系人: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 找到。
待办事项
协助改进文档
链接: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 Athlon 和 Intel P4 处理器的 系统级 与 进程虚拟化计数模式 性能监控计数器。SMP(对称多处理)已基本可用,但仍存在系统冻结的问题。接下来的工作包括:
实现系统级与进程虚拟化采样模式
调试现有代码
编写测试套件
改进项目文档
链接:<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 月 发布首个补丁供社区讨论。
相关链接
联系人: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)加锁优化,提升分配性能
fstat 在 socket 和 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 uprof
、struct rusage
和 struct pstats
的必要锁定。此外,还重新设计了内核存储进程时间统计信息的方式,改为存储原始的 struct bintime
和 tick
计数,仅在 getrusage()
或 wait4()
请求时计算更友好的用户可读值。
内核线程调度器现已支持线程抢占。当一个线程使另一个线程变为可运行状态时,如果新线程的优先级更高,则当前线程可能会让出 CPU 以执行该线程。之前,只有中断线程可以抢占其他线程,并且原有实现偶尔会触发错误的上下文切换。目前,此更改已暴露出内核其他部分的 Bug,因此在 RELENG_5
分支中默认关闭。目前,只有 i386
、amd64
和 alpha
平台支持原生抢占式调度。
此外,还修复了一些由于 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 基金会,可能可以安排免税捐赠。目前已欢迎资金赞助,请通过上述邮箱联系我。
未完成任务:
需要筹集相当于两个月全职工作的资金。
如果你计划赞助 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 草案)的编写工作刚刚开始。
相关链接
联系人:Kip Macy <kmacy@fsmware.com>
FreeBSD 5.2.1 在 Xen 稳定分支中作为来宾操作时已稳定运行。FreeBSD 5.3 在 Xen 稳定分支中也能运行,但需要修复一些 bugs。
未完成任务:
支持在 Domain 0(主机)上运行 FreeBSD。
支持 FreeBSD 的虚拟机检查点和迁移功能。
相关链接
联系人:Olivier Houchard <cognet@FreeBSD.org>
FreeBSD/arm 取得了巨大进展。目前,它可以启动多用户模式,并能够在 IQ31244 开发板上运行如 “make world” 和 Perl 等程序。现在它还支持多种功能,包括 DDB、KTR、ptrace 和内核模块。一个早期的 gdb 支持补丁已经发布,libpthread 也几乎可以正常工作。
相关链接
联系人:Peter Grehan <grehan@FreeBSD.org>
一个本地构建的 6.0-CURRENT miniinst ISO 文件已经可以通过上述链接下载。它在 G4 Powermac 上表现最好,但也可能在其他 Newworld 机器上运行。具体细节请参见发布说明。
和往常一样,许多帮助仍然是需要的。这是一个非常适合那些希望深入了解 FreeBSD 内核的开发者的项目。
相关链接
联系人: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 的禁飞名单。
未完成任务:
需要帮助将 HAL 移植到 FreeBSD(联系 marcus@FreeBSD.org)
需要帮助将 libburn 移植到 FreeBSD(联系 bland@FreeBSD.org)
有兴趣重启 Gnome Meeting 的人可以联系 kwm@FreeBSD.org
相关链接
联系人:Maho Nakata <maho@FreeBSD.org>
OpenOffice.org 2.0 状态
OpenOffice.org 2.0 计划于 2005 年 3 月发布。目前已有开发者快照版本可用。现已将其中一个开发版本移植,并提交到 Ports (/usr/ports/editors/openoffice-2.0-devel)。
5.3-RELEASE 的包已可在 http://sourceforge.jp/projects/waooo/files/asOOo_1.9m71_FreeBSD53Intel_install_en-US.tbz 等网站上获取,很快也将可以在 http://ooomisc.services.openoffice.org/pub/OpenOffice.org/ooomisc/FreeBSD/ 获得语言包。
所有构建所需的补丁几乎都将合并到主代码库中。http://www.openoffice.org/issues/show_bug.cgi?id=40187
目前我们有三个外部移植包:lang/gcc-ooo,devel/bison-devel 和 devel/epm。为了避免 gcc 的回归和错误,我们使用与 Hamburg 团队(前 StarDivision)相同的 gcc 版本。我们需要使用 1.785a 版本以上的 bison。请注意,这个移植包与 devel/bison 存在冲突。Epm 是 OpenOffice.org 现在使用的包管理器。
OpenOffice.org 1.1 状态
1.1.4 版本已移植并提交到 Ports。
现在可以识别 Linux 版本的 Java JDK。
一般情况
从命令行调用 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。
SDK 教程可在 http://porting.openoffice.org/freebsd/sdk.html 获得。
仍然没有进行实现测试和质量保证,也没有为 FreeBSD 提供系统化的文档。http://porting.openoffice.org/freebsd/testing.html 和 http://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.)的合作与热情鼓励。
链接
联系方式: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。
待处理任务:
我们的大多数构建错误仍然源于编译问题,主要是由于 gcc 升级引起的。感谢许多志愿者的努力,这些错误正在减少,但仍有很多工作要做。
下一个最多的构建错误是由于代码无法在我们的 64 位架构上构建,原因是假设“全世界都是 PC”。这是完整的列表;每个单独的条形图是可点击的。随着 amd64 平台被提升为一级支持状态,这个问题将变得越来越重要。
我们已经在解决安装文件超出批准目录或卸载不干净的 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/
联系方式:Max Laier <mlaier@FreeBSD.org>
ALTQ 是 FreeBSD 5.3 版本的一部分,可以与 PF 一起用于流量整形和分类。在 CURRENT 版本中,IPFW 也获得了进行 ALTQ 分类的功能。越来越多的网卡驱动程序已经被转换为支持 ALTQ。详情请参见 ALTQ(4) 手册页。
待处理任务:
转换/测试更多的网卡驱动程序。
编写文档。
链接
联系方式: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。
待处理任务:
目前所有这些驱动程序和 sppp(4) 都使用递归锁。因此,第一个任务是使这些锁变为非递归锁。
第二个任务是检查/使驱动程序在 netgraph/异步模式下可用。
我正在考虑在运行时切换 sppp/netgraph 模式的功能。目前,你需要重新编译模块/内核才能更改模式。
链接
联系方式: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 的替代方案。
待处理任务:
编写更多文档/文章。
编写一个 IPFilter 到 PF 的迁移指南/工具。
链接
联系方式:Patrick M. Hausen <hausen@punkt.de>
所有的论文和演讲资料现已上传到我们的会议网站,可以下载。再次感谢所有帮助使 EuroBSDCon 2004 成功的人。
链接
联系方式:Max Laier <mlaier@FreeBSD.org>
今年的 EuroBSDCon 将于 11 月 25 日至 27 日在瑞士巴塞尔大学举行。征集论文的通知将很快发布。请考虑参加或甚至进行演讲。更多信息请访问会议主页。
链接
联系方式: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 中记录的问题。
链接
联系方式:Kao Chia-liang <clkao@FreeBSD.org>
FreeBSD 仓库的公开 Subversion 镜像地址是 svn://svn.clkao.org/freebsd/
。此镜像供希望尝试 svk 分布式版本控制系统的用户使用。
你可用 svk 镜像整个仓库,并在离线时进行提交。它还提供历史感知的分支、合并和补丁功能。非提交者可以轻松地维护自己的分支,并在补丁审查期间跟踪上游的变更。
链接
联系方式:Josef El-Rayes <josef@FreeBSD.org>
由于旧的 Wiki 引擎在缺乏身份验证机制的情况下遭受了垃圾邮件攻击,我不得不将其更换为更先进的软件。我们现在使用的是 moinmoin,而非 usemod。因此,它不再仅仅是“浏览和编辑”,而是需要注册,并且必须由已在 ACL 组“developers”中的某人将你添加到该组。所以它现在是一个“仅限开发者”资源。旧的 Wiki 可以在 http://wiki2.daemon.li 找到。
待办事项
将旧 Wiki 的内容迁移到新 Wiki。