Linux下的两种分层存储方案_第1页
Linux下的两种分层存储方案_第2页
Linux下的两种分层存储方案_第3页
Linux下的两种分层存储方案_第4页
Linux下的两种分层存储方案_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Linux下的两种分层存储方案在存储设备中,使用分层技术,将冷热数据自动分层存放在具有不用读写性能的存储介质上,已经是很普遍的做法,比如IBM的DS8K中使用的EasyTier。这些功能都需要存储设备固件的支持,如何在Linux主机上,使用Linux现有的机制,实现数据的分层存储?本文主要介绍了Linux平台上两种不同的实现分层存储的方案。背景介绍随着固态存储技术(SSD),SAS技术的不断进步和普及,存储介质的种类更加多样,采用不同存储介质和接口的存储设备的性能出现了很大差异。SSD相较于传统的机械硬盘,由于没有磁盘的机械转动,寻址速度大大提高,尤其在随机读写较多的应用环境下,性能会大大提升

2、,但这些高性能存储设备的单位存储价格相对于传统的磁带和SATA硬盘也高出很多,如图1所示。图1不同存储设备的性能价格对比所以,如何高效平衡地利用这些存储设备,是所有存储厂商都在关注的问题。采用StorageTiering分层存储,将数据按照冷热进行自动分层,越热的数据存放在访问性能越高的设备上,而越冷的数据存放在访问性能越低的设备上,既可以获取高的性能,又可以有效节约成本。StorageTiering分层存储技术在企业级的存储设备中已经被广泛使用,如IBM的EasyTier,EMC的FAST等,但这些功能都集成在存储设备内部,需要存储设备固件的支持。本文主要Host主机的角度,分析在Linux

3、上实现StorageTiering分层存储的两种方案以及其开源实现。为便于表述,本文中仅以两级Tiering为例,慢速设备为传统的SATA硬盘(DEV1),快速设备为固态存储硬盘SSD(DEV2)。分层存储的技术要点要实现分层存储,首先需要将具有不同访问性能的存储设备(DEV1,DEV2)虚拟化成一个新的存储设备(VDEVb与缓存(Cache)不同,VDEV的存储容量是DEV1与DEV2的容量之和(需除去一些用于存放元数据的空间)。所有用户的IO请求将会发给新的存储设备VDEV,然后再按照一定的地址映射关系被转发到相应的物理设备DEV1或DEV2。同时还需要统计IO的热度,并根据这些热度数据,

4、动态地在不同的Tiering间迁移数据,以达到性能容量的优化。因此,实现分层存储主要包括三方面的工作,如图2所示。存储设备的虚拟化负责虚拟设备的创建,删除;维护虚拟设备到物理设备的地址映射关系。IO性能的监测统计统计IO的热度,以及IO的大小,随机性能属性,为数据迁移提供依据。数据的迁移根据IO数据的热度等统计属性,将访问频度高的数据迁移至读写性能高的Tier存放,而将访问频度低的数据迁移到性能低的Tier存放。图2分层存储的数据迁移基于BlockDevice的分层存储方案该方案完整地实现了以上提到的分层存储中所有的工作,包括虚拟化,IO性能统计以及数据的迁移。方案结构该方案的结构包括一个Li

5、nux设备驱动程序和若干用户态的控制程序,如图3所示。驱动程序实现存储设备的虚拟化,IO性能监测统计以及数据的迁移;用户态控制程序负责创建、删除虚拟设备,手动触发数据迁移,以及设置获取设备状态。该方案由于StorageTiering所有的功能都在Linux内核实现,且需要维护虚拟设备到物理设备的地址映射表,以及保证数据一致性,所以实现难度和工作量比较大,但可扩展性和灵活性也相对较大。图3基于BlockDevice的分层存储方案方案实现该方案的实现主要包括以下内容:管理设备主要用于与用户态程序的IOCTL交互,可以是一个字符设备或者Misc设备。Linux下可以通过register_chrdev

6、或misc_register注册,并实现所需要的IOCTL接口。2 、虚拟块设备的创建用户态控制程序通过IOCTL向控制设备发起创建虚拟设备的请求,并传入所有的物理磁盘(DEV1,DEV2羽参数,如设备名,磁盘大小,虚拟磁盘的块大小等;驱动程序收到该请求后,进行必要的参数检查,然后调用register_blkdev创建一个新的块设备(VDEV)。并设置新设备的相关参数,如IO处理函数,队列大小,设备容量等。3 、虚拟设备地址与物理设备地址映射虚拟设备地址到物理设备的地址映射表在虚拟设备创建是被初始化,并在数据迁移过程中被修改。虚拟设备和物理设备都被分成固定大小的块,块大小可以固定或通过IOCT

7、L由用户指定,但一旦确定,不能更改,一个Block是热度统计以及数据迁移的最小单位;每个Block包含若干个sector(512Byte)。当VDEV收到一个bio,可以由bi_sector和bi_size找出所对应的VDEV的Block以及Block内的偏移量,通过查询映射表,找到各个VDEVBlock所对应的物理设备以及Block,然后读取物理设备Block内的偏移量,如图4所示。地址映射表以及其他的元数据需要存储在物理设备上,以便机器重启时能重构这个虚拟的块设备,且需要采取一定的备份策略,防止断电或磁盘损坏造成数据丢失。4 、IO热度统计IO热度统计也以Block为基本单位,每个Bloc

8、k内的任何一个sector被访问,该Block的热度都为增加。由于大IO以及顺序IO在性能在传统硬盘和SSD上的差异并不是特别大,所以在进行热度统计是应该考虑排除大IO和顺序IO。5 、数据迁移可以采用自动方式或手动方式。自动方式由驱动内的定时器驱动,每隔一定的时间,启动数据迁移的扫描,将IO热度统计中的热数据向高性能存储设备迁移,冷数据向低性能存储设备迁移;手动方式由用户指定,将某块数据向高性能存储设备迁移或低性能设备迁移。手动数据迁移方式增加了更大的灵活性和可扩展性。图4虚拟设备与物理设备的地址映射开源实现BTier基于BlockDevice的分层存储方案的开源实现。BTier最大支持16

9、个设备的虚拟化,这些设备被BTier简单地捆绑成一个btier块设备,因此,其中任何一个设备的失效,都会导致整个btier的失效。编译并以模块形式安装BTier之后,会创建一个名为tiercontrol的字符设备;然后使用BTier提供的btier_setup应用可以创建一个新的块设备btiera,然后就可以对btiera设备进行所有块设备的读写操作,包括分区和创建文件系统。BTier还提供了丰富的sysfs接口,进行控制和信息获取,如数据迁移的开关,间隔时间,IO统计信息等。不过BTier每个Tier层仅支持1个物理设备,同层多个设备的虚拟化需要借助其他的方法,在虚拟化上面,BTier还有可

10、以改善的空间。基于LVM的分层存储方案Linux的逻辑卷管理(LVM)提供了存储虚拟化,可以将多个物理卷(PV)建成一个卷组(VG),然后再在VG里创建虚拟卷(VG)。而且LVM提供了在不同物理卷之间迁移数据的API。因此,基于LVM的分层存储方案借助LVM的虚拟化和数据迁移的能力,实现会更简单。方案结构该方案中,数据一致性的问题以及数据迁移时IO中断的问题都由LVM进行处理,重点在于如何分析并统计IO的热度信息,并且不涉及内核态的开发。该方案的结构如图5所示。图5基于LVM的分层存储方案方案实现该方案的实现主要包括以下内容:使用pvcreate将所有的物理磁盘创建成物理卷(PV);再使用vg

11、create将所有的VG创建成一个卷组(VG);最后使用lvcreate在创建出来的VG上建虚拟卷。2、IO热度统计IO热度统计可以使用blktrace工具,或者实现一个设备驱动来检测IO的热度。使用blkparse可以解析blktrace的输出,然后分析这些IO的分布以及读写频度,从而得到IO的热度统计信息。4、数据迁移根据IO的热度统计信息,使用LVM提供的pvmove工具,可以在属于同一个VG里的不同PV之间进行数据迁移,将热数据和冷数据分布存放在不同的物理卷上。开源实现LVMTS(LVMTiredStorage)是一个使用SSD和HDD来创建混合存储的方案,完全在用户态实现,主要由几个守护进程构成。Lvmtscd负责监测blktrace的输出并统计块设备的访问频度,并将这些统计信息记录在文件中;Lvmtsd负责根据用户配置的信息,启动其他的守护进程,并完成数据迁移。实际使用中发现,LVMTS并不

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论