级别: 中级 M. Tim Jones, 顾问工程师, Emulex Corp.
生命的必然不仅包括死亡和纳税,还包括 GNU/Linux® 操作系统的发展,最新的两个内核发布的确没有让人失望。2.6.28 和 2.6.29 版本包含了大量新的功能,比如先进的企业存储协议、两个新的文件系统、WiMAX 宽带网络支持以及存储完整性检查。通过本文了解为何现在就应该升级 Linux 内核。
2008 年底,2.6.28 版本的内核出现。随后,通向下一版本 —2.6.29— 的通道也打开了。由于 Linux 内核采用的是一种分布式的开发过程,所以它并不总能清楚一个特定内核发布中会有什么(或集成了什么),但是这两个最新发布不管是从短期还是从长期来看都是很有意思的。2.6.28 中一个有趣的里程碑是该版本的 Linux 的源代码首次超过 1000 万行(参见图 1,它使用了来自 Heise Online 的源代码行计数数据)。
这两个发布引入了新的文件系统(一个已经稳定,一个尚在实验中)、对图形和可视化的新支持,以及新的企业存储特性。接下来,我先大致介绍 2.6.28 中的一些主要新特性,然后再介绍 2.6.29 带来的新特性。 Linux 内核 2.6.28 在 2008 年 12 月 24 日发布(2009 年 2 月已经是第 5 个发布版)。2.6.28 第一个的发布版包括大量更改,以至于它自身的更改日志文件大小已接近 6MB。最新的这个发布版很稳定,被用作 Ubuntu 9.04 Jaunty Jackalope 的内核。 第 4 扩展文件系统(The fourth extended file system)的名字 ext4 是由 ext4dev 改变而来的,这意味着它已经足够稳定,可以常规使用。Ext4 源自第 3 扩展文件系统(ext3),并具有更好的性能、特性和可靠性。Ext4 允许使用 exabyte 文件系统,这种系统支持的文件数量更多、体积更大、目录结构更深。它还包括多块和延迟块分配,以提升性能。Ext4 既具有前向兼容性又具有后向兼容性(这意味着根据所使用的特性,ext4 文件系统可挂载在 ext3 磁盘格式之上,反之亦然)。通过大规模的改变可以逐渐将文件系统从 ext3 迁移到 ext4。有关 ext4 文件系统的更多信息,请参见 参考资料。 虽然 ext4 能够成为未来新的标准 Linux 文件系统,但是其他的文件系统也在不断出现,甚至能够提供更好的伸缩性和特性。Btrfs 就是这类文件系统之一,它现在已经成为了 2.6.29 内核中的一种试验文件系统。Btrfs 是一种兼容 Linux 的文件系统(参阅 GNU Public License [GPL]),它的特性与知名的 ZFS 不相上下。 过去一年的时间内,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 与一般的硬盘驱动(HDD)差别悬殊,所以必须更改 Linux 才能使用 SSD。SSD 最根本的一个问题是它们必须耗损其内部闪存中的块,而耗损会缩短 SSD 的寿命。减少这种影响的一种方式是告知 SSD 一个块何时不再有效(有可能是因为文件删除)。当某个块从此 SSD 释放后,它就不再是被耗损的对象了,进而能将此设备的总体耗损降至最低。但是为了支持此操作,文件系统必须要能将此信息传递给设备。 T13 标准委员会已经创建了一种新的 ATA 协议扩展来支持在 trim 命令上下文内传递这种消息。当 SSD 收到这个新命令后,它就可以将所定义的那些块添加到其释放列表,不会再担心这些块再成为损耗的一部分。Linux 的这个块层组件称为丢弃请求,它来自于更高级别的文件系统的文件删除。一个丢弃请求是此块层的一部分,提供了丢弃块的途径,并最终会导致向提供支持的 ATA 设备发出一个 trim 命令。更进一步的改进还包括智能地调度这些丢弃请求,以便它们能够与其他请求结合来执行块请求队列的重排序操作,从而更好地处理相关的丢弃和写请求。 ATA HDD 的一个非常有趣的可靠性改进就是震动保护,这种突然的晃动会破坏笔记本电脑的 HDD。ATAPI 规范定义了一个名为 IDLE IMMEDIATE 的命令,它可以闲置 HDD 并收回磁头以防止它们触及盘片。内核通过一个名为 /sys/block/*/device/unload_heads 的 proc 文件提供这个命令。当一个值写入到此文件且后续的 ATA 命令被写到各自的磁盘后,磁头就被收回,并且所有输入/输出(I/O)都会根据一个计时器延迟很短的一段时间。当计时器超时后,I/O 就会恢复正常。IBM 笔记本曾经实现这个特性,用于访问加速器以测量加速度(决定笔记本是否在坠落)。图 2 是一个总体流程。
2.6.28 的一些有用的新特性在 2.6.29 中得到了进一步改善。 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 将随着时代的前进而不断进步,并且愈久弥香。关于内核更改和未来发展的更多信息,请参阅 参考资料 部分。
学习
- 第 4 扩展文件系统(ext4)将会成为桌面 Linux 系统的新标准。查阅 “剖析 ext4”(developerWorks,2009 年 2 月)了解 ext4 中的其他一些高级特性。对于既要求可伸缩性又要求效率的大型存储系统,Btrfs 很有可能成为未来的最佳选择。通过 Btrfs Wiki 可以了解有关 Btrfs 的更多信息。
- 图像处理器不断演进并且给系统带来的新要求,这就要求以新的方式管理它们。过去常用转换表影射(TTM)进行一般用途的内存管理,现在我们经常使用 GEM 改进内存管理性能。从 lwn.net 的 Memory management for graphics processors 更多地了解 GEM(以及更早的 TTM)。GEM 为对象管理使用了共享内存子系统。要了解更多有关共享内存(/dev/shm)及其使用的信息,请查阅 这个实用教程。
- 无论 Linux 引导过程有多快,似乎总是会有些人抱怨它们太慢。幸运的是,我们有办法改进它。了解引导过程的时间花在何处是优化它的第一步。这个 新的内核跟踪选项 提供了测量和改进 Linux 引导时间的方法。
- 耗损是在 SSD 中使用闪存必须考虑的重要的方面。在 “Linux flash 文件系统剖析”(developerWorks,2008 年 5 月)中可以了解耗损的两个方面。耗损的一个重要要求就是丢弃与磁盘不再相关的块的能力。ATA 提供了新的磁盘级命令
trim 来进行 SSD 上的丢弃操作。Linux 通过 块层丢弃请求 对此提供了支持。
- 在虚拟化方面,2.6.28(及其后来的 2.6.29)包含了大量新特性。其中最为有趣并且有可能支持过程组检查点的特性是 冻结容器和文件系统。2.6.28 内的另一项新特性是将 PCI 设备直接传递给客户操作系统,而不是将其交给系统管理程序管理。
- 有关 Linux 容器的概览,可以参阅 “LXC:Linux 容器工具”(developerWorks,2009 年 2 月)。还可以阅读 “安全 Linux 容器实现指南”(developerWorks,2009 年 2 月)了解使用 SELinux 增强容器安全性的方式。
- 要了解有关笔记本加速器的一些创新使用方式,可以阅读 “Linux 笔记本基于 “敲打” 的命令”(developerWorks,2006 年 7 月)、“通过振动向 Linux ThinkPad 传输信息”(developerWorks,2006 年 11 月)和 “ThinkPad 健身操:通过翻转和摇动笔记本电脑来控制应用程序”(developerWorks,2008 年 3 月)。
- 下一代宽带无线技术 WiMAX 也即将添加到 Linux 内核(2.6.29)中。此技术将包含基于 Institute of Electrical and Electronics Engineers (IEEE) 802.16e 标准集的用户空间和内核组件。
- Generic Receive Offload(GRO)是在很多 IP 网络堆栈内的随处可见的 Large Send Offload 特性的概括。有关 GRO 的更多信息,可以在 commit log 和 lwn.net 上找到。
- T10-DIF 是一个企业级数据完整性特性,在 Linux 已经可用。DIF 保护磁盘上的数据,并能通过向磁盘上的每个块添加完整性信息来解决无记载数据损坏的问题。将 DIF 引入到 Linux 内核是以 Oracle 为首的一种多厂商解决方案,并包含在 来自 Oracle 的开源文章 中。
- 在 developerWorks Linux 专区 寻找为 Linux 开发人员(包括 Linux 新手入门)准备的更多参考资料,查阅我们 最受欢迎的文章和教程。
- 在 developerWorks 上查阅所有 Linux 技巧 和 Linux 教程。
- 随时关注 developerWorks 技术活动和网络广播。
讨论
- 通过 blog、论坛、podcast 和空间加入 developerWorks 社区。
|
|
|
M. Tim Jones 是一名嵌入式软件工程师,他是 Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming(现在已经是第 2 版)、AI Application Programming(第 2 版)和 BSD Sockets Programming from a Multilanguage Perspective 等书的作者。他的工程背景非常广泛,从同步宇宙飞船的内核开发到嵌入式系统架构设计,再到网络协议的开发。Tim 是位于科罗拉多州 Longmont 的 Emulex Corp. 的一名顾问工程师。 |
|