2008 年底,2.6.28 版本的内核出现。随后,通向下一版本 —2.6.29— 的通道也打开了。由于 Linux 内核采用的是一种分布式的开发过程,所以它并不总能清楚一个特定内核发布中会有什么(或集成了什么),但是这两个最新发布不管是从短期还是从长期来看都是很有意思的。2.6.28 中一个有趣的里程碑是该版本的 Linux 的源代码首次超过 1000 万行(参见图 1,它使用了来自 Heise Online 的源代码行计数数据)。
图 1. 最新 2.6 内核内的源代码行数这两个发布引入了新的文件系统(一个已经稳定,一个尚在实验中)、对图形和可视化的新支持,以及新的企业存储特性。接下来,我先大致介绍 2.6.28 中的一些主要新特性,然后再介绍 2.6.29 带来的新特性。
2.6.28 中的新特性
Linux 内核 2.6.28 在 2008 年 12 月 24 日发布(2009 年 2 月已经是第 5 个发布版)。2.6.28 第一个的发布版包括大量更改,以至于它自身的更改日志文件大小已接近 6MB。最新的这个发布版很稳定,被用作 Ubuntu 9.04 Jaunty Jackalope 的内核。
第 4 扩展文件系统
第 4 扩展文件系统(The fourth extended file system)的名字 ext4
是由
ext4dev 改变而来的,这意味着它已经足够稳定,可以常规使用。Ext4 源自第 3 扩展文件系统(ext3),并具有更好的性能、特性和可靠性。Ext4 允许使用 exabyte 文件系统,这种系统支持的文件数量更多、体积更大、目录结构更深。它还包括多块和延迟块分配,以提升性能。Ext4 既具有前向兼容性又具有后向兼容性(这意味着根据所使用的特性,ext4 文件系统可挂载在 ext3 磁盘格式之上,反之亦然)。通过大规模的改变可以逐渐将文件系统从 ext3 迁移到 ext4。虽然 ext4 能够成为未来新的标准 Linux 文件系统,但是其他的文件系统也在不断出现,甚至能够提供更好的伸缩性和特性。Btrfs 就是这类文件系统之一,它现在已经成为了 2.6.29 内核中的一种试验文件系统。Btrfs 是一种兼容 Linux 的文件系统(参阅 GNU Public License [GPL]),它的特性与知名的 ZFS 不相上下。
Graphics Execution Manager 内存管理
过去一年的时间内,Linux 在图形堆栈领域取得了实质性进展。毫不奇怪,正是在该领域内,图形处理器(GPU)为呈现提供了有用协助。在很多情况下,GPU 比它们所协助的中央处理器(CPU)更为强大。
为了支持当前以及未来的 GPU,Linux 图形堆栈有一个领域需要提高,即内存管理,包括缓冲管理、页影射、放置和缓存。这一点极为必要,因为图形应用程序(尤其是三维应用程序)能够消耗大量内存。而借助 Graphics Execution Manager (GEM),就能够使用现有的内核子系统(比如使用共享内存文件系统或 shmfs 来管理图形对象)管理混入内核的图形数据。
引导跟踪器
虽然引导 Linux 所需的时间已经逐渐缩减,但是还是有人认为引导时间过长。因此,引导时间还需要不断地监查。此内核包含了这样一个新特性,即可以测量和记录 init 调用的时间。然后可以使用它们可视化引导的流程和性能。该过程是可配置的(要求必须启用收集数据的功能),但是一旦数据收集完毕,就可以使用离线脚本(包括图形描述)对这些数据进行分析,而这最终会导致更短的引导时间和更为优化的引导过程。此更新还融入了调用线程的过程标识符(PID)以便可以平行查看引导过程。
冻结器
为了在暂停操作系统期间将其迁移到一个新的主机(比如虚拟机 [VM]),我们专门设计了一个称为冻结
(和
解冻)的新功能。这个新特性能够让任务组或文件系统冻结并保持在冻结时状态,然后再解冻并重新引入这个任务组或文件系统。
任务在容器
的上下文中被冻结,这个模式能在用户空间级别(一个内核支持多个用户空间)虚拟化操作系统。这种新功能能够在主机之间迁移一组过程,这对均衡负载非常有用。也可以冻结文件系统来支持文件系统备份的快照。目前,文件系统冻结是通过具有参数 FIFREEZE 或 FITHAW 的 ioctl 来实现的。
在容器的外面,这个新冻结/解冻模式还可以用于检查点。在这种应用中,可以以特定的间隔(检查点
)冻结一组相关的进程,然后解冻特定的时间点以回到某个已知状态。
虚拟内存伸缩性的改进
由于 Linux 在虚拟系统中应用的增加 — 尤其是具有多处理器和大量内存的系统 — 扩展内存的使用对性能非常重要。Kernel 2.6.28 包含了与内存有关的大量的伸缩性改进。例如,这个内核维护分开的 Least Recently Used (LRU) 列表,一个用于文件支持的页,另一个用于交换支持的页。这就使得内核能够更多地集中于交互支持的页,而不是文件支持的页,因为前者更有可能被写入到磁盘。
另一项更改分离了可收回的页和不可收回的页(比如通过 mlock 锁定的页)。以这种方式,分页代码就无需迭代 LRU 内不可收回的页,这使具有大量页的系统的性能得到提高。
磁盘改进
2.6.28 内核包含很多针对磁盘的改进。本小节详细介绍固态硬盘(SSD)的改进和 ATA 设备的保护。
对 SSD 支持的改进
SSD 是对传统磁盘进行性能改善的一种很好的方式。SSD 的反应时间更短、随机读取更好,而且耗电少噪音低。但是 SSD 与一般的硬盘驱动(HDD)差别悬殊,所以必须更改 Linux 才能使用 SSD。SSD 最根本的一个问题是它们必须耗损其内部闪存中的块,而耗损会缩短 SSD 的寿命。减少这种影响的一种方式是告知 SSD 一个块何时不再有效(有可能是因为文件删除)。当某个块从此 SSD 释放后,它就不再是被耗损的对象了,进而能将此设备的总体耗损降至最低。但是为了支持此操作,文件系统必须要能将此信息传递给设备。
T13 标准委员会已经创建了一种新的 ATA 协议扩展来支持在 trim 命令上下文内传递这种消息。当 SSD 收到这个新命令后,它就可以将所定义的那些块添加到其释放列表,不会再担心这些块再成为损耗的一部分。Linux 的这个块层组件称为丢弃请求
,它来自于更高级别的文件系统的文件删除。一个丢弃请求是此块层的一部分,提供了丢弃块的途径,并最终会导致向提供支持的 ATA 设备发出一个 trim 命令。更进一步的改进还包括智能地调度这些丢弃请求,以便它们能够与其他请求结合来执行块请求队列的重排序操作,从而更好地处理相关的丢弃和写请求。
改进 ATA HDD
ATA HDD 的一个非常有趣的可靠性改进就是震动保护,这种突然的晃动会破坏笔记本电脑的 HDD。ATAPI 规范定义了一个名为 IDLE IMMEDIATE 的命令,它可以闲置 HDD 并收回磁头以防止它们触及盘片。内核通过一个名为 /sys/block/*/device/unload_heads 的 proc 文件提供这个命令。当一个值写入到此文件且后续的 ATA 命令被写到各自的磁盘后,磁头就被收回,并且所有输入/输出(I/O)都会根据一个计时器延迟很短的一段时间。当计时器超时后,I/O 就会恢复正常。IBM 笔记本曾经实现这个特性,用于访问加速器以测量加速度(决定笔记本是否在坠落)。图 2 是一个总体流程。
图 2. ATA 硬盘保护的总体流程
2.6.29 中的新特性
2.6.28 的一些有用的新特性在 2.6.29 中得到了进一步改善。
Btrfs
2.6.29 中最为重要的一个改进是添加了 Btrfs(或 B-tree FS),它最初是由 Oracle 开发的。Btrfs 是对应于 Sun 的 ZFS 开发的,用于构建带磁盘完整性保证的可大量伸缩的文件系统。除了 ext4 的很多先进特性之外,Btrfs 还支持对象级别的镜像和条带化、写时复制功能、 快照(及快照的快照)、完整性和内部压缩。它支持最多 16 exabyte 的卷和文件,并且每个卷内最多可以包含 264 个文件。为了协助转化,可以将文件系统从 ext3 升级到 Btrfs(反之亦然,但只能在实现转化之后)。
Btrfs 可以定义一种面向大量企业文件系统的新标准,包括具有在线修复的容错功能和简化的管理功能。虽然还处于测试阶段(还不适合用于查看之外的其他用途),但是 Btrfs 的确包括了一个特性集合,可让它更适合于未来可伸缩的 Linux 存储。
联网改进
除了对各种网络设备进行了大量改进之外,还有其他的几个改进很值得一提。第一个就是 Generic Receive Offload 架构,它卸载网络发送(类似于 Large Receive Offload,但独立于协议)。
还可以找到对后向堵塞通知
(BCN)的支持,这以消息的方式加紧控制循环,从而改进了堵塞管理。在新数据中心部署以太网时,这个特性是必须具备的。
最后值得一提的是,2.6.29 在 Linux 中引入了一种 WiMAX 无线宽带网络堆栈(目前基于 i2400m USB 驱动程序)。请注意,它不同于 Wi-Fi,因为 WiMAX 的点对点连接使用的是得到许可的频段,而且服务质量更高。
内核模式设置
对内核引导过程和图像模式的一个有趣更改是基于内核的模式设置
(KMS)。此特性允许在所需组件初始化后由内核控制图形硬件(比如 PCI 总线和显卡)。通过这种方式,内核能够在引导过程的更早时期输入理想的屏幕分辨率,这就减少了屏幕闪动和显示失败(由于重置图像芯片),并允许在服务器启动之前适当地设置显示器。
KMS 的另一个优势是在暂停之后能够改进重新初始化:由于初始化是在内核完成的,所以效率更高。最后,由于内核负责管理图像芯片,所以可能无需引导权限就能运行服务器。这样能够消除一组潜在的漏洞,从而加强了操作系统。
结束语
在撰写本文之时,2.6.29 已经处于稳定阶段,并在向 2.6.30 迈进。在 2.6.29 中,您可能还会发现 Squashfs(一个只读文件系统)终于出现在这个主流的内核中。该内核还多了一组能基于路径名进行强制访问控制的安全钩子。除了使用标准的 Data Integrity Field(T10-DIF)进行磁盘完整性检查之外(某些磁盘使用它进行端对端和空闲时完整性检查),该内核还添加了一种新的协议 Fibre Channel over Ethernet(FCoE)。
所以,随着 Linux 的不断进步,我们将会不断发现新的功能、改进的可伸缩性以及不断提高的安全性。像苏格兰威士忌一样,Linux 将随着时代的前进而不断进步,并且愈久弥香。