FreeBSD 2005 年 3-6 月状态报告
最后更新于
最后更新于
原文地址:
2005 年第二季度再次充满了激动人心的时刻。BSDCan 和 MeetBSD 会议都非常有趣,给我们带来了很多愉快的时光。我强烈推荐大家明年继续参加这些会议。
谷歌编程之夏项目也引起了相当大的兴奋。FreeBSD 获得了 19 个赞助的导师名额,在所有参与组织中排名第四。正在进行的项目包括 UFS 日志记录、将新的 BSD 安装程序移植到其他平台、以及重新设计久负盛名的网站 www.FreeBSD.org
等。我们非常高兴能与如此多才华横溢的学生合作,并期待着他们工作的成果。可以在 Wiki 网站 上找到更多信息和状态。
FreeBSD 6.0 的发布周期也已经开始。快速从 5.x 跳跃到 6.0 的目的是减少大多数用户和开发者在从 4-STABLE 切换到 5.x 时所感受到的过渡痛苦。6.0 将在性能和稳定性方面优于 5.x,提供实验性的 PowerPC 支持,并且包含许多新的 WiFi/802.11 特性。5.x 系列将至少继续到今年秋季的另一个版本,之后将由安全团队提供至少两年的支持。我们鼓励大家试用 6.0-BETA 快照,并帮助我们将其准备好投入生产。我们希望在 8 月底之前发布 FreeBSD 6.0。
再次感谢所有提交报告的人,并感谢 Max Laier 的组织和汇总工作。祝你阅读愉快!
链接:
联系人:编程之夏导师 <>
谷歌慷慨赞助了 19 名学生,在夏季期间进行与 FreeBSD 相关的项目工作。每个学生都在一位或多位导师的指导下,学习如何在 FreeBSD 中进行开源软件开发。这项开发工作正在 Perforce 仓库中进行,路径为 //depot/projects/soc2005
。这个代码树将很快通过 CVSup 导出——请查看 Wiki 获取更多信息。
链接联系人:Emily Boyd <>
作为 谷歌编程之夏的一部分,我正在致力于改进 FreeBSD 网站(包括拟议的网站重新设计)。我在此项目的导师是 Murray Stokely。###
链接
我的编程之夏项目是重新设计和重写 FreeSBIE 工具包,以便将其纳入源代码树中。我们暂时称之为 FreeSBIE 2。
我未来的目标是使工具包更加灵活,能够根据用户选择构建嵌入式镜像(如 nanoBSD)和大型 Live-DVD 系统,支持 FreeBSD 支持的所有架构,并编写一套工具来制作包含 FreeSBIE 镜像的网络启动服务器。
链接
如 Wiki 页面上所述,开发计划已得到遵守,这意味着开发已经开始,但目前代码不足以进行测试。许多细节已经考虑到,开发工作仍在进行中。
链接
随着 FreeBSD 5.3 和 5.4 的发布,FreeBSD 正在逐步从“旧式”vinum 转向支持 GEOM 的 gvinum 用于逻辑卷管理。虽然 gvinum 是宽几乎功能等价的 vinum 替代品,但它并未实现 move
和 rename
操作,而这对于重新组织卷布局时非常有用,替代方案是一个繁琐的删除和重新创建子磁盘、区块或卷的过程。此外,gvinum 几乎完全没有文档,这也助长了将 gvinum 视为未完成项目的看法。
我正在致力于实现 move
(能够将子磁盘从一块硬盘移动到另一块)和 rename
(能够重命名子磁盘、区块、卷和硬盘),以及为 gvinum 编写文档。
到目前为止,我与 le@ 和 phk@ 一起制定了攻击计划,并实现了 gvinum move
和 rename
的大部分用户空间代码。接下来将完成内核代码和文档。
完成 move
和 rename
用户空间实现
完成 move
和 rename
内核空间实现
制定新的手册章节和手册页
实现新的手册章节和手册页
链接
我的 SoC 项目是改进 libalias 并将其与 ipfw2 集成,为防火墙添加 nat 支持。到目前为止,我已经将 libalias(作为 kld 模块)和 ng_nat 移植到 4.x 和 5.x 分支,并且我已经完成了第一个工作补丁集,添加了 'nat' 操作到 ipfw 中。下一步将是为 ipfw 添加完整的语法,使我们能够像使用队列和管道进行 dummynet 时那样操作 libalias。在最终阶段,整个工作将能够为 4.x、5.x 和 6.x 编译和工作。有关项目和状态的更多细节,请访问 Wiki 页面。
链接
将 BSD 安装程序集成到 FreeBSD 的进展相当顺利。安装 CD 将启动至多用户模式,并运行前端和后端。接着,它可以对硬盘进行分区,安装基础发行版,并使磁盘可启动。
在非 i386 设备上进行测试
调查从其他媒体安装
其他许多任务
链接
目前进展较慢,已从所有 launchd(8) 代码中移除 autoconf 构建系统,已经在 FreeBSD-CURRENT 上构建 launchctl(1),部分功能正常(即,CoreFoundation 挂钩已被移除)。
我目前正在移植 liblaunch
,这是 launchd(8)(实际守护进程)和 launchctl(1) 的核心后台部分。需要移除一些特定于 mach/xnu 的挂钩和调用,并重新实现或绕过这些部分。
我们也在等待 Apple 对可能提供的 BSD 许可版本代码的回复(目前该代码在 APSL 下)。进展缓慢,但稳步前进。
此项目的目标是审查网络接口 API,并尝试通过移除对内核专用数据结构的引用,来去除 libkvm 的使用,而改为依赖其他接口提供信息。如果没有合适的接口,将创建新的接口。
目前正在审查 netstat,并已修改其中的部分内容,使其使用 sysctl 而不是 libkvm 来提供信息。
特别感谢 Brooks Davis 的指导 :-)
链接
nsswitch / 缓存守护进程项目是谷歌编程之夏项目的一部分。该项目的第一个目标是实现一组补丁,以扩展 nsswitch 子系统的使用。第二个目标是开发缓存库和守护进程,为 nsswitch 添加缓存功能。
目前,已经完成服务、协议、rpc 和 openssh 补丁。已支持服务、services_compat、rpc、协议和 ssh_host_keys 数据库,支持 files
、nis
和 compat
(对于服务)源。nsswitch 友好的 Port openssh 几乎完成。
实现一组补丁,使 nsswitch 支持 globus grid 安全文件、MAC 和审计相关配置文件数据库。
实现缓存库和缓存守护进程,并修补 nsdispatch 函数以支持缓存功能。
链接
设置 SEBSD 源代码的本地 P4 工作区,并为研究源代码设置 lxr 用于 TrustedBSD 源代码。
测试 vsftpd 的简单策略配置。
编写一个 HOWTO 文档 SEBSD 入门 HOWTO,通过派生现有的 SELinux 入门 HOWTO。
感谢 Robert Watson 和 Scott Long 的帮助。
在编写文档时,尽量找出需要移植的 SEBSD 用户态工具。
测试和编辑更多的 BSD 环境策略。
日志记录帮助确保文件系统在系统崩溃时的完整性。日志记录消除了对文件系统进行 fsck 的需求,因为文件系统永远不会处于不一致状态(硬件故障除外)。此实现灵感来自 Darwin 的 HFS+ 文件系统和 SGI 的 XFS 文件系统。此项目是 谷歌编程之夏项目,由 Scott Long 担任导师,Brian Wilson 作为开发者/学员。目前该项目仍处于早期阶段,但预计在 9 月 1 日(谷歌编程之夏完成日期)时将进入可用状态。
完成文件系统日志元数据更新。
添加功能以在脏文件系统上重放日志。
使快照与日志记录功能一起工作。
FreeBSD 中的 TCP 代码自从 1994 年从 4.4BSD-Lite2 分支出来以来,已经有了明显的发展,主要是由于新的功能和 TCP 规范的优化。
现在 TCP 代码需要进行全面的改进、精简和清理,使其易于理解、维护和扩展。此外,在这种操作过程中,还可以进行许多小的优化,使 FreeBSD 再次成为表现最好的 TCP/IP 栈之一,这一地位在 90 年代已经保持了很长时间。
这项改进工作涉及面广且极其复杂,需要进行大量的正式测试和实际测试,以确保与当前代码没有回归。完成这项工作所需的精力大约是三个月的全职专注工作。为了完成这项工作,我需要筹集资金,休假专心致力于 FreeBSD 工作,正如 PHK 在进行其缓冲区缓存和 vnode 重构项目时所做的那样。
我有机会在 2005 年下半年全职工作,最多可以投入三个月的时间。这意味着最多可以进行 720 小时的全速编码(每周 60 小时)!我将根据筹集的资金提供相应的工作时间。
我需要筹集足够的资金来支付我的固定生活成本、办公费用和其他相关费用。我的固定费用为每月 6,300 美元(约 5,200 欧元或 8,000 瑞士法郎)。是的,瑞士的生活成本不算便宜。:)
有关任务的详细说明和我将编写的代码,请访问我的 FreeBSD 网站;请点击上面的链接。
筹集足够的资金,将几乎完成的 TCP 和 IP 代码集成到代码树中。
链接
GGATE 是一种通过网络导出存储设备的机制。它已被重新实现,以更快并更好地处理网络故障。现在,ggatec 使用两个线程:sendtd,从内核获取 I/O 请求并将其发送到 ggated;recvtd,接收完成的请求并将其转发到内核。ggated 使用三个线程:recvtd,接收来自 ggatec 的 I/O 请求;disktd,执行 I/O 请求(读取或写入数据);sendtd,发送完成的请求到 ggatec。新的 ggate 已提交到 6.x。
由于谷歌的“编程之夏”引发了对开源项目的广泛兴趣,我正在整理一个志愿者项目清单。与谷歌的编程之夏项目不同,这些项目没有资金支持(但这并不意味着没有人可以赞助其中的某个项目),因此我们只能保证提供社交方面的支持(一些“谢谢!”和“太棒了!”的消息)。目前,该清单包含了多个项目,难度从“有人只需要坐下来并花些时间”到“我们需要一位专家”不等。
待公布编程之夏项目的官方参与者和任务,合并编程之夏列表中尚未领取的条目。
将文档发送给一些文档人员进行审查。
提交该清单。
FreeBSD 的 VFS 层已经与 FFS 文件系统一起进行了细粒度锁定,以支持 FreeBSD 6.0 版本。锁定工作已经进行了好几年,尤其是在过去的 6 个月里,这个项目得到了 Isilon Systems, Inc.(一家领先的集群存储系统供应商)的赞助,进展加快。该项目已进入稳定阶段,尽管在极端情况下报告了一些 bug,但大多数用户没有遇到任何问题。对 8 路和 16 路机器的测试结果表明并行化合理,不过,待系统完全稳定后,进行锁争用分析将是有益的。
对于那些对技术细节感兴趣的人来说,vnode 生命周期管理有一些相对重要的变化。现在,vnode 引用计数和回收不再是一个涉及各种标志、使用计数和保持计数的临时过程。一个单一的保持计数用于跟踪所有 vnode 引用,销毁的 vnode 在丢失最后一个引用时会在调用者的上下文中被释放。旧系统永远不会回收 vnode 使用的内存,并且在压力下对未引用的 vnode 缓存也有不正常的行为。新系统比旧系统简单得多,但现在调用者需要直接锁定一个 vnode 时,通过 vhold 来防止其在等待锁时被回收,而不需要通过 vget。依赖于“位置稳定存储”(这是“类型稳定存储”的更严格版本)不再是有效的方法。
其他一些副作用包括:更简单、更快的 nullfs 实现、改进的缓冲区守护进程刷新算法(消除了导致音频跳跃的高延迟),以及许多小的清理和调试辅助工具。
链接
FreeBSD 荷兰文档项目正在进行中,旨在将英文文档翻译成荷兰语。目前,我们几乎完成了 FreeBSD 手册的翻译。完成手册翻译是我们的首要任务,我们非常欢迎你的帮助。如果你愿意提供帮助,请联系 Siebrand 或我。完成手册之后,我们将继续关注其他文档的翻译,欢迎你也参与到这些工作中来。
完成 FreeBSD 手册的荷兰语翻译。
完成翻译文档的审查。
开始将 FreeBSD 文章从英文翻译为荷兰语。
开始将 FreeBSD 网站从英文翻译为荷兰语。
开始将其余的 FreeBSD 文档从英文翻译为荷兰语。
链接
VM 子系统有代码来减少 VM 页面缓存冲突的数量。目前,这些代码需要通过内核选项进行调优。我有一个补丁,将这一过程改为在启动时自动调优。自动调优是 MI(机器无关),而缓存大小检测是 MD(机器相关)。当前,缓存大小检测仅适用于 x86/amd64(对于其他系统,则使用默认值)。
为其他架构添加缓存检测代码(Marius 已告诉我如何为 sparc64 添加此功能)。
分析为什么在 Athlon 上缓存检测不工作(在 P4 上没有问题,但它使用了不同的代码路径)。
链接
现代 CPU 只有在它们的工作代码存储在快速的 L1-3 缓存中,而非主内存时,才能发挥最大性能。如今所有 CPU 都支持某些 L1-3 缓存预取指令,这些指令会在数据被 CPU 访问之前,提前从主内存读取到缓存中。
然而,CPU 缓存预取并不是银弹(译者注:意同王牌杀招),必须谨慎使用,并且仅在非常特定的地方使用才能带来好处。错误的使用可能导致大量缓存污染,从而降低有效性能。而正确且非常谨慎的使用则能在常见操作中带来明显的性能提升。
在链接的补丁中,使用了 CPU 缓存预取来预取数据包头(OSI 层 2 到 4)到 CPU 缓存中,这发生在进入网络栈之后。这样可以避免首次访问数据包头时,CPU 完全停顿,因为数据包是通过 DMA 传输到主内存的,因此它们并没有预先缓存到 CPU 缓存中。补丁中的第二个用途是在 TCP 输入代码中,预取整个 struct tcpcb
,该结构体非常大,并且使用概率很高。将预取应用于这两个地方,显示出显著的性能提升,但还未完全量化。
最终的补丁将包括文档和一个指南,用于评估和分析在内核中使用 CPU 缓存预取指令的效果。
需要资金支持,请参见“筹款——TCP 和 IP 路由优化”。
链接
libmemstat(3) 提供了用户空间库 API,用于监控内核内存分配器,目前支持 uma(9) 和 malloc(9),具有以下优点:
使用访问器函数的 ABI 稳定接口,使得监控应用程序可以脱离内核/用户 ABI 的变化。
分配器无关接口,允许使用相同的接口监控多个分配器。
CPU 缓存感知,允许跟踪支持缓存的分配器在多个 CPU 上的内存使用情况。与以前的接口不同,libmemstat(3) 在用户空间而不是内核中合并每个 CPU 的统计信息,并将每个 CPU 的统计信息暴露给感兴趣的应用程序。
可以在多次查询中跟踪内存类型,并更新现有结构,便于长期跟踪统计信息。
libmemstat(3) 和适当的 uma(9) 和 malloc(9) 分配器更改目前已在 HEAD(7-CURRENT)中,并已获得 MFC 批准,计划包含在 6.0-RELEASE 的 RELENG_6 中。这些更改也可能回移植到 5.x。
示例应用程序包括 memstat(8),一个无分配器依赖的统计信息查看工具,memtop(8),提供类似 top(1) 的界面,用于监控内核内存使用和活动内存类型。以上工具的界面不算“漂亮”。
netstat -mb 也已更新,使用 libmemstat(3) 来跟踪通过 uma(9) 分配的网络内存,而不是使用不太可靠的 mbuf 分配器统计信息接口。因此,现在统计数据在 SMP 系统上更加可靠(修正了之前 mbuf 统计信息有时“泄漏”的 bug,即使内存没有泄漏),并且信息更丰富(现在显示了缓存信息和 mbuf 标签信息)。
让 libmemstat(3) 能够支持 libkvm(3),以便使用 -lmemstat 链接的工具能够查询内核核心转储。
让 libmemstat(3) 能够与用户空间的 malloc 接口,并跟踪用户空间应用程序的 malloc 分配。
更新 vmstat(8) 的 -m 和 -z 实现,使用 libmemstat(3) 替代旧的监控接口。实现此功能的代码已经在示例 libmemstat(3) 应用程序中。
确定如何使流或库具备字节序感知能力,以便从一个内核(使用不同字节序)转储的流能够在另一个系统上使用 libmemstat(3) 处理。
确定内核中是否还有其他缓存分配器,例如 sfbuf 分配器,并教会 libmemstat(3) 如何与其接口。
链接
现代 CPU 配备了片上性能监控计数器(PMC),可用于计数低级硬件事件,例如指令执行、分支预测错误和缓存未命中。不同 CPU 厂商以及同一厂商不同代 CPU 的 PMC 架构和功能不同,这使得创建跨平台的应用程序变得困难。该项目实现了一个跨平台的 PMC 管理 API 供应用程序使用,并实现了“虚拟化”和管理这些 PMC 的基础设施。创建使用该基础设施的性能分析工具也是该项目的目标之一。
自上次状态报告以来的工作:
已实现 P4 和 AMD64 PMC 的采样模式支持。
增加了一个用于解析 hwpmc(4) 日志文件的 pmclog(3) API。
修复了 libpmc(3)、hwpmc(4) 和 pmcstat(8) 中的若干 bug。
未来的工作:
创建用户文档,展示当前可用工具的一些实际应用。
测试并改善代码的稳定性,同时评估其开销。
实现 P5 PMC 支持。
链接
该项目旨在清理网络接口的处理,以便能够可靠地移除接口。当前的问题包括:如果 Dummynet 在延迟发送到接口的包时接口被移除,会导致 panic。
我已将 struct ifnet 和二层公共结构从设备驱动结构中移除。这将最终允许它们在设备移除时得到正确管理。此代码已被提交,并将在 6.0 中发布。流行的驱动程序已经修复,但仍需要更多的测试。
链接
在过去几个月里,关于 SMP 网络堆栈的工作取得了显著进展。以下是一些亮点的概述:
UMA(9) 每个 CPU 的缓存已被修改为使用关键区段而不是互斥锁。最近对关键区段的优化使得这在 UP 和 SMP 系统中都能带来性能提升。对多个用户空间基准测试的结果显示有几个百分点的提升,内核专用网络转发和处理基准测试的提升更为明显。
malloc(9) 分配器已被修改为每个 CPU 存储统计信息,而不是使用跨 CPU 的统计池,现在每个 CPU 池使用关键区段来同步访问。这在 SMP 系统上尤其表现为显著的性能提升。
netnatm ATM 代码现在是 MPSAFE(多处理器安全)。
netipx MPSAFE 已合并到 RELENG_5。
netperf 集群现已扩展,包括两个额外的四 CPU 系统(一个双双核 AMD 系统,一个四 CPU PIII 系统)。
libmemstat(3)(见单独报告)现在修正了在测量 mbuf 分配器统计信息时的 SMP 相关竞争问题,同时大幅改善了内核内存监控能力和工具。
一系列锁定 bug 修复和一般的网络堆栈 bug 修复。
对 SMPng 网站的显著更新(仍有更多工作要做!)。
识别所有非 MPSAFE 的网络设备驱动程序,并在 freebsd-arch 上发出了最后通牒。因此,进行了大量新的驱动程序锁定工作(if_ed、if_de 等)。
还有许多其他工作。
在大多数情况下,这些更改将出现在 FreeBSD 6.0-RELEASE 中;一些已合并或将合并到 FreeBSD 5.x。
正在进行的任务包括:
审查和改进 ifnet 锁定机制,如地址列表和标志。
优化接口启动交接。
在堆栈中进行基于队列的包交接原型设计。
性能测量和分析。
套接字锁定的原型重写和简化。
链接
这个想法是通过使用预留机制,利用大内存页(超级页)的架构支持,允许我们透明地将一组基本页提升为超级页,或将超级页降级为多个较小的超级页或基本页。
使用超级页相比基本页的优势在于显著提高物理内存的 TLB 覆盖率,从而通过减少 TLB 未命中的次数来提升性能。
我们正在进行的 FreeBSD 内核修改涉及将当前基于列表的页面分配机制替换为使用伙伴分配器来为内存对象预留页面组。页面的提升和降级直接在 pmap 模块中进行。
前一个实现支持 alpha 和 IA64 架构。我们正在为 amd64 添加支持。目前我们已经完成了几乎完整的实现。完成后,我们将进行性能研究,重点关注 TLB 和缓存未命中问题。
在过去几个月中,关于 TrustedBSD 审计实现的工作取得了显著进展,包括为将审计合并到 FreeBSD 6.x 的 FreeBSD CVS 仓库所做的准备工作。具体内容如下:
用户空间组件,如 libbsm、头文件和命令行工具,已被分离到 Perforce 中的 OpenBSM 分发版中。OpenBSM 的改进将单独提供,以供像 Darwin 这样的项目使用,并导入到 FreeBSD 的 contrib 区域。
系统调用表格式已更新,以便为所有硬件平台和 ABI(已合并)中的每个系统调用包含审计事件标识符,并且所有系统调用已分配事件标识符(尚未合并)。
审计管理守护进程已被重写,可以在 FreeBSD 上运行(最初源自 Darwin),使用 /dev/audit 来跟踪内核事件。
许多系统调用现在正确地审计其参数。
TrustedBSD audit3 分支已更新为最近的 6.x-CURRENT。
已进行大量工作来同步 FreeBSD、Darwin 和 OpenSolaris 之间的审计事件表,以确保文件格式和事件是可移植的。
OpenBSM 已被调整为能够消耗和生成与字节序无关的事件流。
OpenBSM 文档已经创建。
我们的目标仍然是在 6.0 版本中提供“实验性”的审计;目前主要的阻碍因素是我们正在等待将最后剩余的审计文件从苹果的 APSL 许可重新授权为 BSDL,以便它们可以包含在 FreeBSD 内核中。预计这一过程将很快完成。待完成,所有更改可以合并到 CVS 中,然后 MFC 到 RELENG_6。如果在 6.0-RELEASE 发布之前尚未完成,这项工作将在发布后不久合并,因为所有与 ABI 相关的数据结构已根据需要更新。
链接
联系人:多个 <>
目前正在尝试重新启动项目的一部分。清理 p4 分支。最近有更多的人自愿提供帮助。Brooks Davis 已从 softc 中移除 ifnet。
待办事项
看看网页。
链接
该功能于 2005 年 6 月 5 日提交到 current,并将首次出现在 6.0 版本中,感谢所有测试者。最近的改进包括:
IPFW 层 2 过滤
DUMMYNET 支持
IP 头对齐检查
目前正在进行的工作包括将 OpenBSD 中的一些高级功能引入,例如 IPSec 桥接。鼓励大家使用 if_bridge 并向邮件列表报告任何问题。
链接
在 BSDCan 之前的开发者峰会上,决定从树中移除 IP6FW,因为它存在一些问题。最紧迫的问题是缺乏同步,因此需要 debug.mpsafenet=0
。作为替代,Brooks Davis 已引入补丁,以使现有的、已加锁的 IPFW2 代码支持 IPv6。
自初始导入以来,我已添加了一些功能,支持在单个规则集中管理 IPv4 和 IPv6。我还扩展了现有的操作码以适应 IPv6。然而,仍有一些操作码不支持 IPv6,且大多数更复杂的操作码尚未经过测试。只要 IPFW2+v6 不能提供足够的功能和稳定性,无法作为 IP6FW 的直接替代品,我们就不会移除 IP6FW。
为了让新代码达到这个标准,我们 真的 需要更多有实际 IPv6 部署和对 IPFW+v6 感兴趣的测试人员。然而,由于缺乏这类反馈(我在多个 FreeBSD 邮件列表上的请求没有收到任何回复),进展非常缓慢。
为 IPv6 正确实现 O_REJECT
可能实现 O_LOG
使用 IPv6 测试新的 IPFW2 操作码
测试
测试
测试
我已将补丁发送给 jinmei@isl.rdc.toshiba.co.jp
@KAME 进行审查,目前正在等待 Andre 的反馈。自上次报告以来,没有发生重大变化。我已将代码与 CURRENT 保持同步。Gleb 已创建一个独立的 P4 分支,并在锁定方面提供了帮助。Gleb 还在测试方面提供了帮助。
我在等待 Andre 对整体设计和代码的审查反馈,并等待 Andre 对 Gleb 建议修改的反馈。
链接
当前,TCP 段重组实现为一个链表。考虑到今天的高带宽链接和大带宽*延迟产品,这种方式无法有效扩展并且性能较差。
重写优化了段重组过程中的大量操作方面。例如,很可能刚到达的段会附加到重组队列的末尾,因此我们首先检查这一点。其次,我们检查它是否是丢失的段,或者是否附加到重组队列的起始位置。第三,连续的段会逻辑上合并,并且会在一次跳跃中跳过,以便进行线性搜索,而不是逐个检查每个段。
进一步的优化原型将连续段在 mbuf 层次上进行合并,而不仅仅是逻辑上的合并。这预计会带来另一显著的性能提升。新的重组队列跟踪队列中的所有空洞,将来可能与 SACK 的临时存储区集成。
Andrew Gallatin 在使用新 TCP 重组代码时,通过双 2Gbit Myrinet 卡在有严重数据包重排序(由于固件错误)的情况下,实现了 3.7Gb/sec 的 TCP 性能。参见第二个链接。
需要资金支持,参见“筹款_TCP 和 IP 路由优化”。
链接
根据 RFC1644 的旧版 TTCP 存在不安全、侵入性强、复杂等问题,并已从 FreeBSD >= 5.3 中移除,尽管其背后的理念和语义仍然有效且合理。
此次重写使用了一个更简单且更安全的系统,采用了 24 位长的客户端和服务器 cookie,这些 cookie 被传输在 TCP 选项中。客户端 cookie 可以防止各种类型的盲注入攻击,并且可以用于一般地保护 TCP 会话(例如用于 BGP)。服务器 cookie 仅在 SYN-SYN/ACK 阶段交换,允许服务器确保它之前曾与这个特定的客户端通信过。第一次连接始终执行三次握手,并为客户端分配一个服务器 cookie。后续连接可以将 cookie 返回给服务器,从而跳过三次握手,直接进入 SYN->OPEN 阶段。
TTCPv2 可以通过 setsockopt() 系统调用进行每个套接字的完全配置。不支持 TTCPv2 的客户端和服务器仍然保持完全兼容,只需继续使用正常的三次握手,不会有任何延迟或其他复杂性。
TTCPv2 的实现工作已完成 90%,预计将在 2005 年 2 月初提供。实现规范(RFC 草稿)刚刚开始编写。
需要资金支持,参见“筹款 - TCP 和 IP 路由优化”。
在 6.0 发布之前,已经修复了很多 bug。6.0 将是第一个包含完整 WPA 支持(包括客户端和认证者)的版本。
hostapd 需要支持 IAPP 和 802.11i 预认证协议(这些是现有 Linux 代码的简单转换)。
链接
已经引入 OpenBSD 对 dhclient 的重写,替代了 ISC dhclient。OpenBSD 客户端为无线网络上的漫游提供了更好的支持,并提供了更简单的操作模型。不同于每个系统一个 dhclient 进程,现有每个网络接口都有一个进程。当链路丢失时,该进程会自动消失,并在链路重新获取时通过 devd 重新启动。为了支持这个变化,网络接口配置过程的许多方面进行了彻底修改。
当前代码在大多数情况下工作良好,但仍需更多的测试和完善。
链接
FreeBSD 缺乏一种移除基本系统中过时文件和目录的方法。我有补丁,可以安全地移除过时的文件(交互式地,因为只有管理员才真正知道是否需要保留旧文件;也有批处理选项)。这个功能可能会或不会出现在 6.0 版本中,取决于发布工程团队的决策。
遵循选项 NO_*
并移除这些文件。这在当前实现中很容易做到,但并不需要等到提交移除过时文件功能时才进行。
链接
Florent Thoumie 已更新了大量过时的平台页面。工作继续进行中,目标是创建 PowerPC 移植的 6.0 版本。
FreshPorts 增加了以下新功能:
我一直在添加 Last-Modified 到页面头部。目前,这些信息尚未添加。BETA 网站的大部分页面已经完成。我需要尽快将其移至生产环境。
定制新闻订阅功能正在开发中。你将能够为每个监视列表创建一个新闻订阅。这项工作依赖于完成 Last-Modified 头部的工作。
链接
Intel 发布了其 C/C++ 编译器的第 9 版。针对 FreeBSD 移植 x86 版本的工作正在进行中,具体取决于时间的允许。移植 EM64T(amd64)版本也在待办清单上,但需要足够的空闲时间和适当的硬件支持。
链接
如上报告所示,清理/简化工作和覆盖默认 Linux 基础的功能已经顺利完成。对于未完成的任务,尚未开始工作,但计划“很快”开始。如果有志愿者愿意为某个任务提供帮助,可以在仿真邮件列表上告知。
将 x11-toolkits/linux-gtk/Makefile 中的通用 RPM 代码重构为 bsd.rpm.mk
。
确定使用哪个最新的 Linux 发行版作为下一个默认 Linux 基础。重要标准:
基于 RPM(以便能够使用现有的基础设施)
在安全修复发布方面有良好的记录
从多个镜像站点提供软件包
可支持多个硬件架构(例如 i386、amd64、sparc64;注:并非所有架构都具有适用于其本地位宽的工作 linuxolator,但只要没有用户空间位存在,就不会激励编写内核部分)
将 linuxolator 用户空间更新至最新版本(见上文)。
我们将在 RELENG_6 中加入 OpenBSD 3.7 版本的 pf。导入工作已在 5 月初完成,FreeBSD 6.0 版本将随之发布。
自从 CARP 引入并且越来越多的人在大型硬件上使用它以来,发现了几个与 pfsync 在 SMP 上的严重问题。已发现的所有问题都已在 HEAD 中修复,并且(如果适用)已回迁至 RELENG_5。正在进行一些功能更改的测试,并将在接下来的几天内回迁至 RELENG_5。
通过从 Net/OpenBSD 导入 if_bridge,我们终于拥有了一个允许有状态过滤和 IPv6 过滤的桥接实现。请参见相关报告。
实现共享锁?
我们有来自 15 个不同国家的 197 人。这是一个非常强大的参与人数。
我们将在 2006 年 BSDCan 大会的程序委员会中增加更多成员。这个工作涉及推动和鼓励各个项目的成员提交论文。有很多非常有趣的项目,但并非所有项目都会提交论文。
如果你认识做有趣工作的人,请告诉我,并鼓励他们开始考虑 2006 年 BSDCan。
链接
第四届欧洲 BSD 大会将在瑞士巴塞尔举行,这是一个向社区展示新思想、与不同 BSD 项目的开发者会面的好机会。
为期两天的大会(11 月 26 日和 27 日)将由一个会议前的教程日(11 月 25 日)补充。
链接
2005 年 5 月,Remko Lodder 加入了 FreeBSD 安全团队,紧随其后的是 Christian S.J. Peron,于 2005 年 7 月加入。与此同时,Gregory Shapiro 和 Josef El-Rayes 辞去了团队职务,专注于其他项目。目前的安全团队成员名单已发布在网站上。
自上次 FreeBSD 状态报告以来,已发布 12 条关于 FreeBSD 基本系统问题的安全公告;其中 6 个问题出现在“第三方代码”中,5 个问题出现在 FreeBSD 维护的代码中。安全团队和 Ports 提交者继续更新漏洞和曝光标记语言(VuXML)文档,记录 FreeBSD Ports 中的新漏洞;自上次状态报告以来,新增了 97 条记录,使总数达到了 519 条。
以下 FreeBSD 版本由 FreeBSD 安全团队支持:FreeBSD 4.10、FreeBSD 4.11、FreeBSD 5.3 和 FreeBSD 5.4。它们的生命周期结束日期已在网站上列出。
链接
TrustedBSD 项目发布了新的“SEBSD”快照,这是将 NSA 的 SELinux FLASK 和类型强制实现移植到 FreeBSD 的版本,基于 2005 年晚些时候的 FreeBSD 6.x 快照。SEBSD 发布版已更新至 Perforce 上的最新 6.x 快照,并将在不久的将来提供新的发布。
目前,已进行工作将 SEBSD 的附加依赖项合并回基础 FreeBSD 树,包括最近的 devfs 更改以及 System V 和 POSIX IPC。
更新到新的 NSA FLASK 实现,该版本改进了 MLS 支持。
将剩余的内核更改合并回基础 FreeBSD CVS 仓库,以支持 SEBSD,包括文件描述符标签和访问控制(与文件标签和访问控制不同),以及内核权限分类。
联系人:Dario Freni <>
在被接受之前,我在 FreeSBIE 1 工具包上做了大量工作,使其更加灵活。现在,它支持 amd64 和 PowerPC 架构。构建的文件系统现在可以从几乎所有媒体启动,从 DVD 到闪存卡或硬盘。在 i386 架构上,现在也可以在 livefs 中包含 BSD 安装程序。我们已经收到报告,称我们的工具包在 和 项目的安装 CD 上得到了成功应用。
联系人:Ivan Voras <>
联系人:Chris Jones <>
联系人:Paolo Pisati <>
联系人:Andrew Turner <>
联系人:R. Tyler Ballance <>
链接:
联系人:Anders Persson <>
联系人:Michael Bushkov <>
联系人:Yanjun Wu <>
链接联系人:Brian Wilson <>
联系人:Scott Long <>
链接:
联系人:Andre Oppermann <>
联系人:Pawel Jakub Dawidek <>
此工作由 赞助。
链接联系人:Alexander Leidinger <>
链接联系人:Jeff Roberson <>
联系人:Remko Lodder <>
联系人:Siebrand Mazeland <>
联系人:Rene Ladan <>
联系人:Alexander Leidinger <>
联系人:Andre Oppermann <>
联系人:Robert Watson <>
联系人:Joseph Koshy <>
联系人:Brooks Davis <>
联系人:Robert Watson <>
联系人:Alan L. Cox <>
联系人:Olivier Crameri <>
我们目前正在更新 。
链接:
联系人:Robert Watson <>
联系人:Wayne Salamon <>
联系人:<>
联系人:Andrew Thompson <>
联系人:Max Laier <>
联系人:Brooks Davis <>
链接:
联系人:Qing Li <>
联系人:Andre Oppermann <>
联系人:Andre Oppermann <>
链接联系人:Sam Leffler <>
在 BSDCan 2005 上进行了即将推出的多 BSS 支持的演示,可以在 查阅演示的幻灯片。计划在 6.0 发布后将这项工作提交到 HEAD,这意味着第一个包含此功能的版本是 7.0。
联系人:Brooks Davis <>
联系人:Sam Leffler <>
联系人:Alexander Leidinger <>
联系人:Peter Grehan <>
链接:
联系人:Dan Langille <>
我注意到 FreshPorts 在错误报告了漏洞。修复程序正在 BETA 版本中,等待发布到生产环境。
联系人:Alexander Leidinger <>
联系人:Alexander Leidinger <>
联系人:仿真邮件列表 <>
链接联系人:Max Laier <>
链接:
联系人:Dan Langille <>
第二届 大会呈现出色,参与人数众多,每个人都带着好故事离开。如果你认识参加过的人,赶紧让他们告诉你他们做了什么,遇到了谁,听了哪些演讲。
联系人:信息 <>
程序委员会正在寻找教程和论文提交。详情请参见:在线 。
联系人:安全官员 <>
联系人:安全团队 <>
联系人:Robert Watson <>