2010-03-30 11:17:15 来源:万方数据
引言
随着企业级的数据呈指数增长,传统的集中式存储方案已无法满足其存储要求,因而存储区域网(storage area network,SAN)技术被广泛应用,但其存在距离短、价格贵和构建复杂等不足。基于iSCSI协议的IP存储技术是一种新兴的网络存储技术,它将IP网络技术集成到存储I/O之中,在构建异构的存储网络方面具有其它数据访问协议无法比拟的优势?,已经成为当前网络存储技术的研究热点。
使用iSCSI协议来组建存储网络,具有低廉、开放、大容量、兼容性好等特点,而其主要缺点首先是存储和网络使用同一个物理接口,其次是需要频繁地将SCSI命令封装到IP包中以及从IP包中解析出SCSI命令,它们都将加重网络带宽和处理器的负担,影响了系统的响应速度,从而限制了iSCSl技术的发展。本文分析了影响iSCSI协议工作效率的主要因素,提出和实现了以下优化措施:采用并行计算技术改进其校验算法,提高校验速度;设计新的数据缓存策略,缩短命令响应时间:从而有效提高了系统的响应速度。
1 分析
访问iSCSI Target设备的典型I/O流程为:
①当用户向一个iSCSItarget设备发出访问请求时,应用程序通过系统调用访问文件系统:
②文件系统解释这个I/O命令,分析I/O命令所在的设备和地址,然后将请求发送给SCSI上层驱动程序:
③SCSI上层驱动程序将相应的I/O命令转换为SCSI命令,并发送给iSCSI Initiator;
④iSCSI Initiator将SCSI命令封装打包,通过网络发送到iSCSI Target模块;
⑤iSCSl Target模块收到iSCSI命令包后,将iSCSI命令包中的SCSI命令发送给SCSI底层驱动程序;
⑥由SCSI底层驱动程序完成I/O请求,将数据按原路径返回给用户。
以iSCSI读操作为例,其具体处理流程为:
①发送iSCSI命令;
②缓存调度;
③读取数据;
④使用iSCSI协议对数据进行封装;
⑤传输iSCSI协议封装的数据。
其中,步骤④包括封装iSCSI协议包头(含对包头的校验)和对数据进行校验两部份工作。
由于iSCSI命令包的长度只有几十个字节且传输iSCSI命令包的网络延迟较大,可以认为iSCSI读命令的处理时间由以下几个部分组成:命令传输时延、缓存调度时间、数据读取时间、数据封装时间和数据传输时延。其中,由于封装iSCSI协议包头所用时间很短,相对于其它时间可以忽略,所以数据封装时间主要指对数据进行校验所用的时间,而数据校验时间又包括iSCSI Initiator的数据接收校验时间和iSCSITarget的数据发送校验时间。
在上述影响因素中,命令传输时延和数据传输时延取决于具体的网络环境,数据读取时间则主要取决于具体的硬件环境。本文将主要针对数据校验算法和缓存调度策略进行研究和优化,以有效地减少数据校验时间和缓存调度时间。
2 优化
2.1改进数据校验算法
iSCSI协议的数据校验使用CRC-32校验标准。
iSCSI协议的摘要机制分为头摘要和数据摘要两种,因此摘要错误也分为两种:头摘要错误和数据摘要错误。若出现头摘要错误,说明PDU的头部信息被损毁,有可能其长度字段被损毁,所以不仅需要丢弃此PDU的头部,还需继续接收后面的数据段然后丢弃。若出现数据摘要错误,则丢弃此PDU即可。iSCSI对每一个PDU都要进行摘要计算,此计算量是相当大的。CRC-32校验算法是一种串行的校验算法,在数据块比较大的情况下,将需要耗费大量的计算资源与时间。为此,考虑引入一种并行快速CRC算法,并对其进行改进以适用于iSCSIPDU的特点,以有效地提高校验速度,减少资源消耗。该改进的并行快速CRC算法基于有限域的概念,改进后的算法要点如下:

2.2新的缓存调度策略
基本思路是设计一种适应于iSCSI存储系统的缓存系统,利用一定的内存空间作为远程网络磁盘的缓存,使得部分I/O请求直接在缓存上完成,从而提高存储系统的性能。
以Linux系统为例,可以将缓存子系统设计成将内核模块直接加载到Linux内核中,在启动时根据不同的情况来申请一定空间的内存作为缓存使用。经常被读写的数据一般放入缓存,即本地内存中。带缓存系统的一个简单的结构如图1所示,其中的内存空间作为远端存储设备的一个数据缓冲区。
缓存的组织结构如图2所示,用作缓存的内存空间有3个部分:Head_Info、Bitmap_Table和BlockData。其中Head Info由多个信息块组成,每个信息块具有惟一的ID,每一个缓存中完成的I/O请求均对应其中的一项,其主要数据结构为:Addr_Cache表明请求的数据块在缓存中的地址,它是一个整数值,标明了从数据区地址开始偏移多少个数据块长度单位;Data_Len说明其长度;Status描述该数据块的状态;LBA是指逻辑块地址,即I/O命令的逻辑操作地址;Time表示该请求的时间。

图1 存储系统结构

图2 缓存系统的组织结构
上述Stams可能取3个值:Valid表示该数据块已经和远程的磁盘上数据同步,即数据一致;Dirty表示该数据和远程磁盘上的数据不一致,需要稍后与远程磁盘上的数据进行同步操作;None表明该数据为空,是无效数据,同时也表明该项可供后续I/O请求使用。
Bitmap_Table表明了BlockData的使用情况,其中的每一个表明数据区中的某一块是否被缓存系统使用。BlockData中提供不同规模的数据块,以满足不同的需求,而Bitmap_Table和BiockData之间的表项数目是一致的。
缓存系统初始化时,根据设定的内存大小申请内存,分配上述3个部分的大小并且进行数据的初始化操作。当一个写操作被接收时,缓存系统根据操作的逻辑地址(LBA)在信息头区查找一个空闲的表项,它们之间通过哈希表技术来建立对应关系以加快查找速度。
缓存系统收到一个写操作请求时,首先通过其逻辑块地址查找哈希表。如果己经有该逻辑地址的表项,那么直接在其数据区中进行数据覆盖,同时将状态设为Dirty;否则得到一个空闲的表项,填充适当的控制信息,将数据写入缓存的数据区。如果整个表项已经用完,同步线程会进行同步工作,释放缓存数据区。如果写请求直接在缓存系统中执行完毕就能够返回,则不必占用IP网络资源,可以在很大程度上减少操作延迟。
缓存系统收到一个读操作请求时,同样首先通过其逻辑块地址查找哈希表。如果需要读取的数据恰好在缓存系统中,则可以直接从数据区中读取数据从而完成该读数据的操作;否则需要将该请求包装为iSCSI包,通过口网络到远端磁盘上读取数据。在数据访问局部性比较明显的应用中,该缓存
系统能够较大程度改善存储系统性能。为了保证缓存系统和远端磁盘之间数据的一致性和数据的安全性,在缓存系统中,专门使用一个线程用于数据的同步操作。
3 测试
本文作者采用上述优化措施,对Universityof NewHampshire的unh iscsi软件进行了优化。并且,采用Intet公司开发的系统I/O(包括磁盘、网络等)速度测试软件iometer,对未优化的iSCSI存储系统和优化后的iSCSI存储系统的读写性能进行了测试。系统使用两台普通PC机(CPU PIV2.0 G,512 MB内存)分别挂载一个UItra3 LvdSCSI硬盘,接入100 Mpbs以太网,系统平台为RedhatLinux9,内核2.4.28,测试结果如图3.4所示。

图3 系统响应时间测试结果

图4 CPU占用率测试结果
从图3看出,当请求数据块较小时,未优化的系统和优化后系统的性能差别不是很明显,随着请求数据块逐步增大,两者的MBps的差距越来越大。因此,改进后的校验算法和新的缓冲策略可以有效地缩短系统数据读写响应时间。图4说明,优化后的系统在CPU利用率上比未优化前减少了4%左右。
4 结束语
为了有效提高基于iSCSI协议的IP存储系统的响应速度,减少资源消耗,本文分析了影响iSCSI协议性能的主要因素,在此基础上提出了一种改进的并行快速CRC校验算法和优化的缓存调度策略等优化措施。测试和实际应用情况表明,在请求数据块较大时,与未优化的系统比较,优化后的系统可以有效地缩短系统数据读写响应时间;同时,在数据访问局部性比较明显的应用中,优化后的系统能够较大程度地改善存储系统性能,从而有效地减少资源消耗。
免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。
