写操作优化策略主要采用地址映射和异地数据更新实现将非顺序访问转换为顺序访问。
顺序数据访问能够充分发挥磁盘性能,如日志文件系统创建或改写文件时,新数据以顺序写方式添加到日志中;网络文件系统Zebra把每个客户端的写数据组成一个连续的日志,条带化后分布存储到各服务器上。以上方法均把多个小的、随机写操作转换为大的、顺序写操作,以提高存储系统的写性能。
连续数据存储系统非常适合进行地址映射,首先该类系统以写操作为主,把非顺序写转换为顺序写后,可显著提高写性能和整体性能;其次读操作以数据回放为主,即重复以前某时间段内的写操作,如视频监控中的视频回放等,通常可获得与写性能接近的读性能。
常见的地址映射方法有单块映射和块组映射,单块映射需要记录每个数据块的映射关系,多块映射时效率不高,典型应用有NILFS文件系统。块组映射以若干个连续数据块为单位进行映射,多块映射时效率高,但存在块组数据的“读写”问题,即改写块组中部分数据时,需要读取其余未修改数据,与新数据一起重新进行地址映射,典型应用有HP AutoRAID,块组大小为64 KB。
连续数据存储系统以写新数据为主,较少进行改写操作,适合采用块组映射,地址映射信息为存储容量的8/(1 024 x),其中8个字节(64位)记录一个块组地址,x为块组大小,以KB为单位。当Ripple-RAID的存储容量为30 TB,块组大小为64 KB时,地址映射信息仅为3.67 GB,适合采用SSD进行存储,运行时甚至可以完全调入内存,以加快读、写操作中的地址转换速度。
把非顺序写转换为顺序写,需要面对垃圾回收问题,垃圾存储空间是改写操作产生的,在连续数据存储中,如视频监控、CDP、备份、归档等应用,改写的数据量不大,可在负载较轻时进行垃圾回收;如果追求性能,也可牺牲少量存储空间而忽略垃圾回收。
地址映射把非连续的虚拟地址映射为连续的物理地址,并在映射表中记录映射关系,其中虚拟地址为应用程序发来的读写请求地址,物理地址为数据在Ripple-RAID内的存储地址(Shadow Band不参与编址)。在此基础上Ripple-RAID执行异地数据更新:向某物理地址写数据时,数据不直接写入该地址,而是写入其影子地址(影子Bank即Shadow Bank中与其偏移量相同的地址),并在适当时候修改映射表,令影子地址取代该物理地址。
假设Ripple-RAID由N块磁盘组成,划分出N + 1个Bank,任取其一作为影子Bank(Shadow Bank),其余为基本Bank(Data Bank),则Ripple-RAID的异地数据更新流程如下:(www.daowen.com)
①向某基本Bank即Data Bank写数据时,数据并不直接写入该Bank,而是写入Shadow Bank;
②根据写入数据、Shadow Bank中已写数据的校验数据运算,生成Shadow Bank的新校验数据;
③判断数据写入是否结束,若结束,转到⑤;
④判断Shadow Bank是否写满,没写满转到①;
⑤修改地址映射关系,令Shadow Bank取代Data Bank,本次循环结束;
⑥被取代的Data Bank此时无映射关系,可在下一循环中作为Shadow Bank。
在以上写操作过程中,由于进行了地址映射,所以是依次向每个基本Bank顺序写入数据,而不会同时向两个基本Bank写数据,也不会在一个基本Bank没有写满的情况下,向另外一个基本Bank写数据。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。