治肾虚不含糖,专注内核性能优化二十年。 https://github.com/KnightKu
分类: LINUX
2013-09-26 12:05:02
在操作系统层面从上至下逐层分解,IO系统的分层结构如下图所示:
其中,物理IO层又分为磁盘和卷管理VM层,卷管理层实际上完成了逻辑IO到物理IO的映射组织关系(这一层不是必须的,但是要实现更灵活、功能更强大的存储,则必须依赖VM),逻辑IO经过映射关系的重定位,转换成实际的物理IO,然后再对应的磁盘上完成最终的物理IO操作(读写数据)。
IO系统总体分成三部分:磁盘(存储)、VM(卷管理)和文件系统。磁盘是实际存储数据的地方,存放了各种数据;卷管理提供了对磁盘灵活管理的功能,对磁盘进行区间管理,它是实现RAID的基础;文件系统则是实现数据管理的作用,文件系统的功能很多,但是实际最核心的一点是管理、维护、索引每个文件,如果没有文件系统,那么对磁盘上的数据的引用就陷入大麻烦:应用程序怎么知道它要访问的数据在哪里呢,这就得靠文件系统来告诉它。
数据主要存放在两个区域:内存和磁盘,分别对应了上图的File System和Buffer Cache。
Filesystem:解决了空间管理的问题,即:数据如何存放、读取。
Buffer Cache:解决数据缓冲的问题。对读,进行cache,即:缓存经常要用到的(磁盘上存储的)数据;对写,进行buffer,缓冲一定数据以后,一次性进行写入磁盘。
对应上图的Vol Mgmt。
VM其实跟IO没有必然联系。它是处于文件系统和磁盘(存储)中间的一层。VM屏蔽了底层磁盘对上层文件系统的影响。当没有VM的时候,文件系统直接使用存储上的地址空间,因此文件系统直接受限于物理硬盘,这时如果发生磁盘空间不足的情况,不得不新增硬盘,然后重新进行数据备份、转移。而VM则可以实现动态扩展,而对文件系统没有影响(实际上还是有一定影响的,但是不会出现重新进行数据备份、转移的步骤,需要做的仅仅是短期将文件系统下线一小段时间,当然现在有些高级文件系统新增磁盘大小的时候,甚至不需要下线文件系统)。另外,VM也可以把多个磁盘合并成一个磁盘,对文件系统呈现统一的地址空间,这就是RAID实现的基础。
数据处理过程对应上图的Device Driver、IO Channel和Disk Device。Device Driver定义了通过IO channel访问Disk Device的方法,并且利用IO channel传输数据到Disk Device。数据最终会存放在Disk Device,因此,效率、数据安全、容灾是这里需要考虑的问题。而提高存储的性能,则可以直接提高物理IO的性能。
逻辑IO是操作系统发起的IO,这个数据可能会放在磁盘上,也可能会放在内存(文件系统的Cache)里。
物理IO是设备驱动发起的IO,是逻辑IO经过设备映射转换得到的,IO处理的数据这个数据最终会落在磁盘上存储。
逻辑IO和物理IO不是一一对应的,一般一个逻辑IO对应一个或多个物理IO(RAID设备,一般一个逻辑IO至少对应2个物理IO)。