FreeBSD 7.0 新特性概览 本文主要内容来自于:
ivoras
网络栈实现和清理
- 新的sendfile()实现,提升了sosend()
- 作者: Andre Oppermann, Robert N. M. Watson (“rwatson”)
- 主页,有关公告
- Andre Oppermann在有关TSO的支持工作中,发现了一些优化内核内部网络支持的方法。新的sendfile()实现大数据块的立即传输,而且当与TSO或者其他的增强特性协同工作情况下,有时提高五倍以上性能。在sosend()和其它相关函数上的优化,可以在发送方的网络界面上降低CPU占用至原有情况的几乎三分之一。不过请注意,这些性能提高和消耗降低仍需要在实际环境中经过验证才行。
- TSO和LRO支持
- 作者:Andre Oppermann 以及 Andrew Gallatin
- 主页
- 对 FreeBSD的网络性能所进行的持续性的改进(尤其在转向SMP拍板之后)带来了对千兆卡以及更快的板卡上的 TSO(TCP/IP segmentationoffload)和 LRO(Larger ReceiveOffload)特性的支持。支持TSO的驱动包括:em,bc,cxgb,ixgbe,msk,mxge,nxge,nfe,re(或者直白地说:Intel,Broadcom,NVidia,Realtek以及其他的板卡,千兆卡或更高)。LRO的支持目前mxge具备。
- TCP套接字缓存自动调整
- 快速生成树协议(802.1w)
- SCTP(流控制传输协议)
- 作者:Randall Stewart, George Neville-Neil
- 主页
- 对 SCTP(流控制传输协议)而言FreeBSD平台是合适的参考实现。
同 TCP 一样, SCTP 提供可靠的传输服务, 确保着数据在网络上有序无误地传输。同 TCP一样, SCTP是一种面向会话的机制, 这意味着创建端与端之间 SCTP 结合关系先于数据的传输, 并且这种联系一直保持到所有数据传送成功完成。不同于TCP的是, SCTP 为电话技术信号传输提供了一些重要功能, 与此同时亦有利于其他需要额外的性能和可靠性的应用。
- 链路聚合/干线
- 作者:Reyk Floeter (来自 OpenBSD)
- 命令行手册:lagg(4)
- OpenBSD的 trunk(4) 于 FreeBSD 7.0发布前及时地引进了. trunk 接口容许将多个网络接口聚合为一个虚拟的主干接口用于提供容错和高速链路. 目前这一驱动支持信息通路协议失效备援(缺省), fec, lacp, 负载平衡, 循环法, 以及 无.
内核设施的改进
Interruptfilter的设计来源于Darwin(MacOs的核心),主要是为了解决引入SMPng后中断处理的部分问题,它能带来:1、不亚于从前的中断处理模型的性能,2、更短的中断延时,3、更少的中断问题,如中断风暴等。它的实现方式主要是将中断管理分离为2个逻辑片,filter与ithraed。其中filter运行于中断上下文,检查接收到的中断,服务并代理更多的工作;ithread运行于ithrade上下文,这个阶段是可以阻塞的;对中断的响应发生在filter阶段执行后。
- linux2.6的 linuxulator (Linux模拟器)
- 改进的调度器: ULE 3.0
- 调整过的记帐文件格式
存储子系统的改进
- ZFS
- tmpfs
- Gjournal
- gvirstor
- gmultipath
新平台硬件支持
- 新平台: ARM体系
- 新平台:sun4v(niagara/T1)
安全特性
事件审计允许可信的,更好组织的,并且可配置的大量安全相关系统日志,这包括登录、配置变更、文件和网络访问。这些日志记录在入侵检测、系统实时监测和事后分析上有宝贵价值。FreeBSD的实现遵照SUN所公布的BSM API和文件格式,并且与SUN solaris以及Apple Mac OS X的审计实现上具有良好互操作性。
审计框架已经从Current版本合并到RELENG_6,可以在6.2-RELEASE中使用。
- 新的权限分离可能
- 作者: Robert Watson 主页,邮件列表中公告
这是一个框架实现,可以跟MAC一起使用以创建类似RBAC(如同Solaris或者其他系统那样)的策略,这样可以允许将root权限分离为得更加细致,比如“可以访问网络”或者“可以无视系统空间配额”。目前此工作还在进行中,而且不会包含直接实现了任何功能的策略模块。
多媒体特性
userland增强
目前使用的malloc() 库,调用的是 Poul-Henning Kamp 的phkmalloc,这一实现已经有了近十年历史。这一实现设计于内存稀缺的时代,在内存分配优先级的考虑上与现在不同,而且当时多线程仍是一个学术问题。尽管如此,它仍然是相当流行的 malloc()实现,并广泛应用于所有的BSD中,甚至某些Linux发行版也使用了。
由于在多处理器系统中运行多线程应用时,它的缺乏效率,一个新的userland内存分配器被创建出来,并被它的创建者JasonEvans命名为jemalloc。它在计算机速度和内存可用性上的改进意味着,相对于phkmalloc——仅在内存使用上保守时使用,jemalloc 更适用于复杂情况,以及在底层属性上——比如CPU缓存位置和并发处理——需要记账时。 (此处似乎需要调整翻译)
这个allocator最终成为这个样子:使用多allocationarenas帮助并发性,针对多线程进行了优化。在单处理器的系统上,只有一个arena,但是在多处理器,或者则多核系统上,就分配4倍于处理器个数的arena。Allocations are divided into broad classes based on their sizeand those classes are further subdivided.测试显示,jemalloc显然在多线程应用(比如MySQL)以及制造许多小allocation的应用上面有更佳表现。
鸡零狗碎
- 针对SMP机器的性能大幅提升(参考MySQL读性能,MySQL写性能和BIND性能图)
- 在相当程度上提高了SMP机器的可伸缩性,相关的大量特殊贡献来自 libthr线程库),Jeff Roberson(调度器,flock锁),Atillio Rao(提升了内核锁的性能)和Robert Watson(文件描述符锁,unix套接字锁以及其他)。
- 相当程度上提高了网络的可伸缩性,resultingmostly from switch to direct dispatch of the network stack from netisr.This is especially helpful for 10 Gbit/s NICs and was mainly done byRobert Watson and Kip Macy.
- GIANT锁的改进使得几乎所有内核子系统都获得更佳的锁(比如VM,VFS,网络)。最新的改进如下:CAM子系统和许多SCSI驱动的锁(ScottLong), and similar locking work has been done on the NFS client and theFirewire implementation.
- iSCSI initiator (iSCSI target目前在ports中可用)
- SATA支持
- XFS文件系统的只读访问
- 加入对PCI MSI/MSI-X扩展的支持
- 正在进行支持Apple(Mac)硬件的工作
- pf 防火墙升级至4.1
- X.Org 7.3 - 如果有正确的驱动,beryl之类的将能工作
- gcc 4.2.1
- Implemented symbol versioning for many base OS libraries(为多数 OS 基本系统动态连接库实现了带版本符号«– 翻译有问题)
- libthr成为默认线程库
尚未完成
- SCHED_CORE
- DTrace
- Superpages
