Electronic Joint Business

Solution for E-Business

了解Linux操作系统 (四) 硬盘I/O子系统

在处理器进行解码和执行指令之前,数据必须通过某种方式从硬盘盘片的扇区里被读到处理器的缓存和寄存器中。之后执行结果还可能被写回硬盘。下面我们将简单地介绍一下Linux硬盘I/O子系统,以便更好地认识这个对系统性能产生很大影响的组件。 I/O子系统架构 图1-18展示了I/O子系统架构的基本概念。 为了使您能对I/O子系统的运作有个整体的认识,我们以写数据到硬盘作为例子。下面的步骤概述了当硬盘执行写操作的基本操作。这里假设存储于硬盘片某个扇区上的数据已经被读取到分页缓存中。 1. 进程使用write()系统调用发出写文件的请求。 2. 内核更新映射此文件的分页缓存。 3. pdflush内核线程将分页缓存清空至硬盘。 4. 文件系统层将多个块缓冲(block buffer)置于bio结构中并提交一个写请求给块设备层。 5. 块设备层从上一层收到请求,执行一个I/O elevator操作并发出进入I/O请求队列的请求。 6. 设备驱动如SCSI或其它设备的特定驱动来负责完成写操作。 7. 硬盘设备韧体负责执行硬件操作像确定磁头、旋转和传输数据至磁盘片上的扇区。 缓存 在过去的20年里,处理器性能的提升已超过计算机中其它元件如处理器缓存、总线、RAM、硬盘等。内存和硬盘慢速设备的访问速度限制了系统的整体性能,所以仅仅靠提高处理器速度并不能让系统性能有所提升。缓存机制通过将常用数据缓存至更快的内存中来解决此问题。它减少了访问较慢内存的机会。目前计算机系统中几乎所有的I/O元件都采用了这项技术,如硬盘驱动器缓存、硬盘控制器缓存、文件系统缓存、各种应用程序的缓存等等。 内存层级(Memory Hierarchy) 图1-19展示了内存层级的概念。CPU寄存器和硬盘在访问速度上有着很大的差距,CPU需要花费更多的时间等待从慢速的硬盘上获取数据,这显然抵消了一个快速CPU所带了的好处。内存层级结构通过一级缓存、二级缓存、RAM和其他在CPU和硬盘之间缓存减少了这种不匹配,大大减少了某个进程访问较慢内存和硬盘的机会。越靠近处理器的内存访问速度越快,但容量越小。 这种技术也可以从访问局部化(locality of reference)原则获得益处。更快的内存的命中率越高,数据访问速度就越快。 访问局部化(Locality of Reference) 所谓访问局部化,是指对局部范围的存储器地址频繁访问,而对此范围外的地址访问甚少的现象被称为访问的局部化(Locality of Reference)。 正如我们前面在“内存层级”中所述,获得更高的缓存命中率是性能提升的关键。为获得更高的缓存命中率,“访问局部化”技术被使用。这项技术是基于下面的原则: 最近使用过的数据非常有可能在近期被再次使用(时间局部化) 位于使用过数据相邻的数据非常有可能被使用(空间局部化) 图1-20说明了这个原则。 Linux在许多组件中都采用了这一原则,比如分页缓存、文件对象缓存(i-node缓存、目录项缓存等)、预读缓冲等等。 清空脏缓冲( Flushing a dirty buffer) 当进程从硬盘中读取数据时,数据被复制到内存。此进程和其他进程都可以从缓存在内存中的副本取得相同数据。当有进程尝试变更数据,会先更改内存中数据。此时,硬盘中数据和内存中数据发生不一致,内存中数据被称为脏缓冲。赃缓冲会被尽快同步至硬盘,但如果系统突然崩溃内存中数据就会丢失。 同步脏数据的进程叫做flush。在Linux2.6内核中,pdflush内核线程负责清空数据到硬盘。此操作会定期(kupdate)执行或者当内存中脏缓冲比例超过临界值(bdflush)时执行。此临界值配置在/proc/sys/vm/dirty_background_ratio文件中。更多信息参见4.5.1“设置内核交换和pdflush行为”。 图1-21清空脏数据 1.4.3 块层 块层负责管理所有关于块设备操作的相关活动(参见图1-18)。块层中的关键数据结构就是bio,bio结构是位于文件系统层和块层之间的一个接口。 当执行写操作时,文件系统层尝试向由块缓冲组成的分页缓存中写入。将连续的块组成一个bio结构,然后将bio传送至块层。(参见图1-18) 块层获得bio请求并将其链接至I/O请求队列(I/O Request Queue)中。这个链接操作叫做I/O调度器【原文中使用的单词为elevator】。在Linux 2.6内核中,共有四种I/O调度器算法可以选择,他们是: […]

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.