CN1279455C - 光纤通道-存储区域网络***的逻辑单元号高速缓存方法 - Google Patents
光纤通道-存储区域网络***的逻辑单元号高速缓存方法 Download PDFInfo
- Publication number
- CN1279455C CN1279455C CN 200310113532 CN200310113532A CN1279455C CN 1279455 C CN1279455 C CN 1279455C CN 200310113532 CN200310113532 CN 200310113532 CN 200310113532 A CN200310113532 A CN 200310113532A CN 1279455 C CN1279455 C CN 1279455C
- Authority
- CN
- China
- Prior art keywords
- lun
- read
- data
- cache
- submodule
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 20
- 238000012545 processing Methods 0.000 claims abstract description 15
- 239000013307 optical fiber Substances 0.000 claims description 9
- 230000008859 change Effects 0.000 claims description 8
- 238000009826 distribution Methods 0.000 claims description 3
- 238000004088 simulation Methods 0.000 claims description 3
- 230000007246 mechanism Effects 0.000 abstract description 7
- 230000004044 response Effects 0.000 abstract description 6
- 238000012360 testing method Methods 0.000 abstract description 6
- 238000013461 design Methods 0.000 abstract description 4
- 230000003139 buffering effect Effects 0.000 abstract 1
- 230000003111 delayed effect Effects 0.000 abstract 1
- 230000002349 favourable effect Effects 0.000 abstract 1
- 238000007726 management method Methods 0.000 description 17
- 230000006870 function Effects 0.000 description 12
- 238000010586 diagram Methods 0.000 description 7
- 239000011800 void material Substances 0.000 description 4
- 230000007717 exclusion Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 238000013500 data storage Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
- 238000011056 performance test Methods 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
Images
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
FC-SAN存储子***的LUN CACHE方法属于存储区域网络存储技术领域,其特征在于它是由逻辑单元号高速缓存LUN CACHE模块运行在FC-SAN中I/O处理节点的嵌入式操作***上来实现的;它使用改进的CACHE替换算法提高高速缓存利用率,使得读写操作能在I/O处理节点中高速缓冲地完成,而不是发送到具体的SCSI设备;使用延迟写的技术使数据更新操作能在后台完成,极大地提高了用户的响应时间;使用读写锁的机制保证多用户之间共享数据的一致性;良好的接口设备设计使得LUN CACHE对用户完全透明。经测试,读写操作性能比不用LUN CACHE有极大提高。
Description
技术领域
光纤通道—存储区域网络***的逻辑单元号高速缓存方法属于光纤通道—存储区域网络中存储技术的领域
背景技术
在数据存储领域,相对于CPU性能和内存容量以摩尔定律的提高,作为外存的主要设备--硬磁盘却由于机械运动的本质导致性能提高非常有限。与此同时,磁盘存储的密度却每年提高约60%,这一点甚至高于CPU和内存的提高速度。针对容量不断扩大、速度增加非常有限的情况,目前磁盘上全部具有MB级的缓存子***,以提高磁盘的性能。研究表明,磁盘上的高速缓存能极大的提高磁盘的读写性能。
我们提出的LUN CACHE方法不同于以往的技术,不是将用户发出的命令直接交给磁盘执行,而是将该命令缓存在FC-SAN的I/O节点之上,并根据缓冲区策略分治执行。
发明内容
本发明的目的在于在不降低数据一致性和可靠性的同时提高FC-SAN存储***的响应速度。本方法的核心在于:使用改进的Cache替换算法提高Cache利用率,使得读写操作能够在Cache中完成,而不是发送到具体的SCSI设备;使用延迟写的技术使得数据更新操作能够在后台完成,极大的提高了用户的响应时间;使用读写锁的机制保证多用户之间共享数据的一致性;以及良好的接口设计使得LUN CACHE完全对用户透明。
本发明的特征在于:它是一种光纤通道—存储区域网络FC-SAN环境下运行在I/O处理节点上的基于逻辑单元号LUN的高速缓存CACHE方法,它是由LUN CACHE模块运行在FC-SAN中I/O处理节点的嵌入式操作***之上来实现的,LUN CACHE模块的结构如下:
接口子模块:它是模拟小型计算机***接口,与SCSI目标模拟器中间层STML同I/O子***的接口,它设有:
(1)与SCSI目标模拟器中间层STML模块的接口,是通过注册由STML模块定义的数据结构Scsi_Target_Template来实现的。
(2)与I/O子***的接口,是通过调用I/O子***中的scsi_do_req函数来实现的。
共享锁子模块:设有如下二种逻辑单元号LUN读写锁:
(1)公共的READER-WRITER LOCK:BUFFER LOCK,即LUN读写锁;它是一种当接口子模块从STML模块得到SCSI命令,转发给缓冲区管理子模块之前,必须首先从共享锁子模块获得的逻辑单元号LUN读写锁,否则将转入等待状态。
(2)为每个固定大小的数据块设定的READER-WRITER LOCK,即I/O读写锁,它是一种当缓冲区管理子模块发送给I/O子***SCSI命令进行实际的物理磁盘存取之前,必须首先从共享锁子模块出获得的I/O读写锁,否则也将转入等待状态。
相应于不同的逻辑单元号LUN读写锁表示为LUN id,读写锁是使用读写锁算法来获得的。
缓冲区管理子模块:它为每一个逻辑单元号LUN建立一个哈希表,把所有STML模块分发的SCSI命令所涉及到的数据保存在LUN CACHE的缓冲区中,它接受来自STML模块的SCSI命令,从缓冲区或I/O子***中读写数据。
数据同步子模块:它根据用户访问的频度更新缓冲区的内容,同时把缓冲区中的数据更新到磁盘***中。
缓冲区数据的更新是在每次LUN CACHE进行实际的I/O读写操作后,用最新最久未使用算法实现的。
磁盘***数据的更新也在每次LUN CACHE进行缓冲区读写操作后在后台定时的把缓冲区的数据更新到磁盘***中去的。
初始化和退出子模块:它在LUN CACHE加载时进行启动工作,卸载时进行退出工作,同时申请并初始化内存数据结构。
含有上述子模块的LUN CACHE模块依次按以下步骤运行在I/O处理节点的嵌入式操作***上:
(1)SCSI目标模拟器中间层STML向接口子模块发出SCSI操作;
(2)接口子模块从STML得到SCSI命令后,在转发给缓冲区管理子模块之前,向共享锁子模块申请LUN读写锁,若从共享锁子模块处获得LUN读写锁,便向缓冲区管理子模块发送SCSI命令,否则转入等待状态。
(3)缓冲区管理子模块收到来自STML的SCSI命令,首先从SCSI命令中获取命令读写数据的地址,再根据地址进行缓冲区查找操作,若命令所需要的数据在缓冲区中,则直接在缓冲区中读写数据。读写完毕,把数据结果返回给SCSI目标模拟器中间层STML,同时,数据同步子模块按规定的时间间隔把缓冲区中的数据更新到磁盘***中;若在缓冲区中找不到所需的数据,则执行以下步骤。
(4)缓冲区子模块便向共享锁子模块申请I/O读写锁,若从共享锁子模块处得不到I/O读写锁,便转入等待状态;否则执行以下步骤。
(5)缓冲区管理子模块申请到I/O读写锁,便通过接口子模块把SCSI命令传送给I/O子***并获得数据,数据读写完毕,便把结果数据返回给SCSI目标模拟器中间层STML;同时数据同步子模块用最新最久未使用算法去更新缓冲区中的数据。
(6)结束。
所述的读写锁算法,它是通过不同粒度的READER-WRITER锁来实现的:READER-WRITER锁的数据结构为:
struct RWLock{
struct semaphore rw_sem;//信号量
spinlock_t rw_spin_lock;//共享锁
int flag;//LUN读写锁或者是I/O读写锁位
Target_Scsi_Cmnd*cmnd;//SCSI命令
unsigned int bgblock;//数据段开始长度
unsigned int length;//数据段长度
}
所述的最新最久未使用的算法,它为缓冲区的每个数据块和每个逻辑单元号LUN各设置一个访问次数计数和访问时间标记,每次数据操作都会更新相应的访问次数计数和访问时间标记,当需要更新缓冲区时,它从缓冲区中选出离当前一段时间内访问次数较少,并且所在的逻辑单元号访问次数最少的数据块予以删除。
测试证明:写操作性能大约提高4倍,读操作性能随着负载的增加而提高,到达一定程度后,与没有CACHE的***接近。
附图说明
图1.海量网络存储器设备的硬件子***体系结构,Myrinet是一种高速互联技术。
图2.I/O节点硬件子***模块结构
图3.海量存储***的模块结构示意图。其中,STML是一个基于软件的可动态调整性能的SCSI命令和任务处理模块。
图4.LUN CACHE的模块结构示意图。
图5.LUN CACHE***程序流程图。
图6.有无LUN CACHE的读操作性能比较图。
图7.有无LUN CACHE的写操作性能比较图。
具体实施方式
本发明的硬件环境为清华大学海量网络存储设备(简称为TH-MNSM),具体运行在TH-MNSM的I/O处理节点之上。清华大学海量网络存储设备的硬件结构如图1所示。
它主要包括以下部件:
(1)主机节点(HNODE)
控制中心,对***进行监测、备份等管理。主机节点的硬件子***包括INTEL CPU、标准的PCI总线、SCSI接口卡、标准的以太网接口卡(HBA)、Myrinet接口卡、硬盘。主机节点可以运行WINDOWS 2000等多种操作***和WEB服务器软件***。
(2)I/O处理节点(INODE)
海量网络存储器设备最基本、最重要的部分。主要功能包括数据存储、光纤通道协议处理、SCSI协议处理。I/O处理节点由2-4个INTEL XEON处理器,512M内存、基于PCI总线的主板、Myrinet接口卡、FLASH DISK、光纤通道接口卡、SCSI接口卡组成,具有较高性能。
(3)高密度磁盘阵列(HARRAY)
每个I/O节点采用标准的SCSI卡直接连接目前商用的磁盘阵列,每个I/O节点最大可以连接8个磁盘阵列,最大支持150TB的容量。
(4)基于Myrinet的互联网络
是I/O处理节点与主机节点相互连接的***互联部件,基于Myrinet的互联网络取代了传统设计中的高速背板。该方式具有经济、可靠等优点。
(5)电源子***
采用N+1方式的商业化电源。
主机节点采用商业化商用PC机如联想天瑞3130,因此它的结构同PC机器结构相同。每个I/O处理节点的硬件子***的模块结构如图2所示。
每个I/O节点的主板采用商用的服务器主板如Supermicro(超微)公司X5DA8、X5DAE主板等,所有的CPU采用INTEL公司XEON系列CPU。每个I/O节点包括2个商用的光纤通道HBA,如QLOGIC公司的QLA2310F系列,它们之间可以实现容错备份或者捆绑功能。每个I/O节点包括2-3个商用的SCSI接口卡,如ADAPTEC公司的7XXX系列接口卡,他们连接高密度的磁盘阵列子***如ISD PinnacleRAID 500。电源子***采用目前标准的、商用的N+1方式电源如山特公司的3C3系列,FLASH DISK负责存储各种软件,如M-SYSTEMS公司的DOC2000系列。Myrinet接口卡采用Myricom公司的LANai9系列接口卡。
LUN CACHE运行在海量网络存储器中I/O处理节点的嵌入式操作***之上,海量网络存储器的软件结构示意图及LUN CACHE所在的I/O逻辑位置如图3所示。
根据LUN CACHE在海量网络存储器软件结构的位置,结合海量网络存储器嵌入式操作***的***结构特点,我们设计了LUN CACHE的软件结构。如图4所示,LUN CACHE的软件结构包括了:缓冲区管理子模块,共享锁子模块,数据同步子模块,接口子模块,初始化和退出子模块。具体模块的结构及作用详述如下:
接口子模块分为两个部分:
(1)与SCSI目标器中间层的接口。
(2)与I/O子***的接口。
接口子模块的目的是为了保证LUN CACHE***不影响整个FC-SAN的I/O路径,使LUNCACHE对用户透明,不影响用户程序的正常运行。在没有LUN CACHE的FC-SAN中,SCSI目标器中间层是与I/O子***进行交互的,因此LUN CACHE中接口子模块的主要功能就是模拟SCSI目标器中间层与I/O子***的接口。
与SCSI目标器的接口是通过注册SCSI目标器定义的数据结构Scsi_Target_Template来实现的:
#define ISP_TARGET{\
name:″ISP″,\
detect:isp_detect,\
release:isp_release,\
xmit_response:isp_xmit_response,\
rdy_to_xfer:isp_rdy_to_xfer,\
task_mgmt_fn_done:isp_task_mgmt_done,\
report_aen:isp_report_aen \
}
Scsi_Target_Template my_template=ISP_TARGET;
与I/O子***的接口是通过调用scsi_do_req函数来实现的,该函数由I/O子***提供:
void scsi_do_req(Scsi_Request*SRpnt,const void*cmnd,void*buffer,unsigned bufflen,void(*done)(Scsi_Cmnd*),int timeout,int retries)
其中Scsi_Request是Linux定义的数据结构,用来存储SCSI命令,buffer是返回值所填的数据区,bufflen表示该数据区有效数据的长度,done函数是返回函数,当I/O子***处理完该SCSI命令以后,调用done函数返回给LUN CACHE***。
FC-SAN是一个多用户共享的存储设备,在增加LUN CACHE后,用户不仅共享磁盘***,还同时共享Cache***,为了使***能正常工作,就必须保证用户数据的一致性。为此我们提出了读写锁机制,与其他的共享锁机制如Sistina公司的GFS中的DLOCK机制不同,我们的读写锁不需要用户增加新的SCSI命令,同时因为采用阻塞机制,不会像DLOCK一样会产生SPIN-LOCK的问题,而且具有较好的可扩展性。
当接口子模块从STML得到SCSI命令,转发给缓冲区管理子模块之前,必须首先从共享锁子模块处获得LUN读写锁,否则将转入等待状态。而当缓冲区管理子模块发送给I/O子***SCSI命令进行实际物理磁盘存取之前,必须首先从共享锁子模块处获得I/O读写锁,否则也将转入等待状态。获得读写锁的算法见算法A,将在下面具体叙述。
由于缓冲区管理子模块的缓冲区操作主要为内存操作,速度比较快,而实际物理磁盘的存取操作相对很慢,因此对于LUN读写锁与I/O读写锁我们使用了不同的粒度级别的共享锁控制。对于LUN读写锁,我们使用一个公共的READER-WRITER LOCK:BUFFER LOCK进行控制;对于I/O读写锁,我们给每个固定大小的数据块(默认值为16M)设定一个READER-WRITER LOCK。
由于FC-SAN的各个LUN之间的磁盘空间是独立的,各个LUN之间不会产生读写相关的操作,结合这一特点,我们对读写锁进一步细化,给每个读写锁加上LUN id属性,加快了读写锁互斥的判断。
算法A 读写锁算法
此算法的核心在于通过不同粒度的READER-WRITER锁,为缓冲区操作和I/O操作提供互斥机制,并且结合LUN判断锁是否互斥。
由于缓冲区操作速度较快,所以采用单一的READER-WRITER锁,以降低存取锁的时间消耗;而I/O操作相对较慢,存取锁的时间与之相比可以忽略,为此针对每个数据块建立一个READER-WRITER锁。
对于READER-WRITER锁,存在以下原则:任何一个锁支持多个SCSI命令同时读,而一个锁仅仅存在一个在线写的SCSI命令。但是每个锁允许多个读写SCSI命令等待执行,如果存在多个SCSI等待命令,则写命令优先于任何一个读命令。
由于FC-SAN中各LUN之间磁盘空间独立,因此对于不同LUN之间的READER-WRITER锁,它们也是完全独立的,即不同的LUN对应不同的锁空间,它们之间不存在交互的关系。
在具体实现上,算法维护一个READER-WRITER锁的数组,根据上面所述READER-WRITER锁的原则决定一个SCSI命令是否获得相应的读写锁,如果未获得则放入等待线程中,直到获得读写锁为止才能进行下一步的操作。
在实际运行中,此算法很好的保证了用户数据的唯一性,同时READER-WRITER锁保证了读操作可以尽可能的并行执行,提高了***的性能。
缓冲区管理子模块是整个LUN CACHE的核心,所有STML模块分发的SCSI命令所涉及到的数据都可以根据特定的管理策略保存在LUN CACHE的缓冲区中。
缓冲区管理子模块接受来自接口子模块的的SCSI命令,首先从SCSI命令中获取命令读写数据的地址,然后根据地址进行缓冲区查找操作,如果命令所需要的数据在缓冲区中,则直接在缓冲区中读写数据,否则将SCSI命令转发给I/O子***。
为了加快缓冲区的查找过程,缓冲区使用哈希表组织,同时针对FC-SAN的不同LUN之间磁盘空间相互独立这一特点,对于不同LUN,为每个LUN建立一个哈希表,这样可以大大的提高查找缓冲区的速度。
数据同步子模块的目的是根据用户访问的频度更新缓冲区的内容,使得LUN CACHE能够保证较高的Cache命中率;同时定时将缓冲区中的数据更新到磁盘***中,保证用户数据的一致性。
每次LUN CACHE进行实际的I/O读写操作以后,都要根据最近最久未使用算法更新缓冲区,最近最久未使用算法的详细描述见算法B,将在下面详细叙述。
每次LUN CACHE进行缓冲区读写操作以后,都会导致缓冲区中的数据与实际磁盘中的数据不一致,因此需要在后台定时的将缓冲区中的数据更新到磁盘***中,如果固定时间间隔已到,不管具体数据量的大小,都要执行磁盘写操作,这样可以较好的保持数据的一致性。由于更新操作是使用后台线程的方式运行,因此不会对I/O节点机的性能造成影响。
算法B 最近最久未使用算法
此算法的核心在于通过对缓冲区中数据块访问次数的统计,结合该块所属LUN被访问的频度,决定该数据块是否继续保留在缓冲区中。
根据统计,用户一般的I/O操作大部分为连续的读写操作,并且一个数据块被相近的I/O操作所访问到的几率相对较大。因此如果一个数据块在较长时间内没有被访问到,那么为了提高缓冲区利用率,就可以将该数据块从缓冲区中删除,用最近被访问到的数据块来代替。
在FC-SAN中,不同LUN之间的磁盘空间是独立的。由于用户访问数据的连续性,连续访问同一LUN的可能性要比访问不同LUN的可能性要大。因此我们在决定一个数据块是否被删除的同时考虑到了LUM的信息,如果一个LUN在最近的访问中出现的次数比较多,则属于该LUN的数据块会被保留下来。
在具体实现上,算法为缓冲区的每个数据块和每个LUN保持一个访问计数和时间标记,每次数据操作都会更新相应的访问计数和时间标记。当需要更新缓冲区的时候,算法从缓冲区中选出离当前一段时间内访问次数较少,并且所在LUN访问次数最少的数据块删除。
此算法能够很好的保证缓冲区中数据的命中率,使得用户的大部分操作都能在缓冲区中执行,从而有效的减少了***的响应时间。
初始化和退出子模块的主要任务是在LUN CACHE加载时进行启动化工作,卸载时进行退出工作。具体执行的任务包括:
(1)执行嵌入式***加载/卸载模块时所必需执行的函数。
(2)申请并初始化内存数据结构。
(3)执行LUN CACHE模块与STML模块、I/O子***接口所必需的函数。
LUN CACHE方法的程序流程图见图5。
本***已经使用c语言编程实现,可以在在PC机上的Linux操作***上运行。下面给出一个运行实例,以说明***的执行过程。
实例一:
首先***启动,加载LUN CACHE***。
1.用户发出读命令M1。STML模块接收到读命令以后,通过接口子模块将命令M1传递给***。
2.***申请LUM读写锁,申请成功获得读写锁,然后进入缓冲区管理子模块。
3.缓冲区管理子模块查找缓冲区,发现缓冲区没有M1所需要的数据。
4.释放LUN读写锁,申请I/O读写锁。
5.申请I/O读写锁失败,进入等待队列。
6.经过等待M1获得I/O读写锁,通过接口函数将M1传送给底层的I/O子***进行实际I/O读写锁。
7.底层I/O子***通过接口函数将M1的结果数据返回给LUN CACHE***。
8.释放I/O读写锁,并将M1的结果数据通过接口子模块返回给STML模块。
9.数据同步子模块定时根据最近最久未使用算法更新缓冲区。
实例二:
首先***启动,加载LUN CACHE***。
1.用户发出写命令M2。STML接收到写命令后,通过接口子模块将命令M2传递给***。
2.***申请LUN读写锁,申请未成功,进行等待。
3.共享锁子模块通知M2获得LUN读写锁。
4.缓冲区管理子模块查找缓冲区,发现缓冲区有M2所需要的数据。
5.直接往缓冲区内写入M2的数据。(执行命令M2)
6.释放LUN读写锁,将M2的结果通过接口子模块返回给STML模块。
7.数据同步子模块定时根据最近最久未使用算法更新缓冲区。
我们分别对用户的写操作和读操作在清华大学海量存储***上进行了性能测试。测试环境如下:用户为32位安腾双CPU服务器,CPU主频为2.4G,用户的操作***为Linux(Kernel2.4.18-3),挂接TH-MNSM海量存储***。
读操作性能
测试结果如图6所示。图中纵轴表示响应时间,单位为ms,横轴表示I/O请求的大小。测试是在负载密集的情况下得到的。所示分别为使用了LUN CACHE的TH-MNSM***和没有使用LUN CACHE的TH-MNSM***的读性能。从图中可以看出,随着负载的增加,读性能就越高。当然,负载增加到一定程度以后,CACHE的作用逐渐减小,***读的性能趋向于没有CACHE的***读性能。
写操作性能
测试结果如图7所示。图中纵轴表示响应时间,单位为ms,横轴表示I/O请求的大小,单位为KB。从图中可以看出,LUN CACHE的存在极大的提高了***写的性能,这是因为LUN CACHE总是尽可能将写操作缓冲在缓冲区内,然后通过后台线程更新数据。图中数据说明性能的提高大约在4倍左右。
本发明的主要特色如下:
(1)结合海量存储***的体系结构特点,采用改进的缓存替换策略,提高了缓存的实际利用率,减少了实际I/O的操作。
(2)设计了不同粒度的读写锁及申请读写锁的算法。保证用户数据一致性的同时,充分提高了I/O操作的并发性,最大化数据读写性能。
(3)良好的接口设计使得整个***对用户完全透明。
(4)在TH-MSNM的基础上无需增加任何新的硬件即可实现,节省了成本。
Claims (3)
1、光纤通道-存储区域网络***的逻辑单元号高速缓存方法,含有高速缓存CACHE方法,其特征在于:它是一种光纤通道-存储区域网络FC-SAN环境下运行在I/O处理节点上的基于逻辑单元号LUN的高速缓存CACHE方法,它是由LUN CACHE模块运行在FC-SAN中I/O处理节点的嵌入式操作***之上来实现的,LUN CACHE模块的结构如下:
接口子模块:它是模拟小型计算机***接口,与SCSI目标模拟器中间层STML和I/O子***的接口,它设有:
(1)与SCSI目标模拟器中间层STML模块的接口,是通过注册由STML模块定义的数据结构Scsi_Target_Template来实现的;
(2)与I/O子***的接口,是通过调用I/O子***中的scsi_do_req函数来实现的;
共享锁子模块:设有如下二种逻辑单元号LUN读写锁:
(1)公共的READER-WRITER LOCK:BUFFER LOCK,即LUN读写锁;它是一种当接口子模块从STML模块得到SCSI命令,转发给缓冲区管理子模块之前,必须首先从共享锁子模块获得的逻辑单元号LUN读写锁,否则将转入等待状态;
(2)为每个固定大小的数据块设定的READER-WRITER LOCK,即I/O读写锁,它是一种当缓冲区管理子模块发送给I/O子***SCSI命令进行实际的物理磁盘存取之前,必须首先从共享锁子模块出获得的I/O读写锁,否则也将转入等待状态;
相应于不同的逻辑单元号LUN读写锁表示为LUN id,读写锁是使用读写锁算法来获得的;
缓冲区管理子模块:它为每一个逻辑单元号LUN建立一个哈希表,把所有STML模块分发的SCSI命令所涉及到的数据保存在LUN CACHE的缓冲区中,它接受来自STML模块的SCSI命令,从缓冲区或I/O子***中读写数据;
数据同步子模块:它根据用户访问的频度更新缓冲区的内容,同时把缓冲区中的数据更新到磁盘***中;
缓冲区数据的更新是在每次LUN CACHE进行实际的I/O读写操作后,用最新最久未使用算法实现的;
磁盘***数据的更新也在每次LUN CACHE进行缓冲区读写操作后在后台定时的把缓冲区的数据更新到磁盘***中去的;
初始化和退出子模块:它在LUN CACHE加载时进行启动工作,卸载时进行退出工作,同时申请并初始化内存数据结构;
含有上述子模块的LUN CACHE模块依次按以下步骤运行在I/O处理节点的嵌入式操作***上:
(1)SCSI目标模拟器中间层STML向接口子模块发出SCSI操作;
(2)接口子模块从STML得到SCSI命令后,在转发给缓冲区管理子模块之前,向共享锁子模块申请LUN读写锁,若从共享锁子模块处获得LUN读写锁,便向缓冲区管理子模块发送SCSI命令,否则转入等待状态;
(3)缓冲区管理子模块收到来自STML的SCSI命令,首先从SCSI命令中获取命令读写数据的地址,再根据地址进行缓冲区查找操作,若命令所需要的数据在缓冲区中,则直接在缓冲区中读写数据;读写完毕,把数据结果返回给SCSI目标模拟器中间层STML,同时,数据同步子模块按规定的时间间隔把缓冲区中的数据更新到磁盘***中;若在缓冲区中找不到所需的数据,则执行以下步骤;
(4)缓冲区子模块便向共享锁子模块申请I/O读写锁,若从共享锁子模块处得不到I/O读写锁,便转入等待状态;否则执行以下步骤:
(5)缓冲区管理子模块申请到I/O读写锁,便通过接口子模块把SCSI命令传送给I/O子***并获得数据,数据读写完毕,便把结果数据返回给SCSI目标模拟器中间层STML;同时数据同步子模块用最新最久未使用算法去更新缓冲区中的数据;
(6)结束。
2、根据权利要求1所述的光纤通道-存储区域网络***的逻辑单元号高速缓存方法,其特征在于:所述的读写锁算法,它是通过不同粒度的权利要求1所述READER-WRITER LOCK来实现的:READER-WRITER LOCK中包含的数据有:信号量,共享锁,用来标示是LUN读写锁还是I/O读写锁的标志位,SCSI命令,数据段的开始地址,数据段的长度。
3、根据权利要求1所述的光纤通道-存储区域网络***的逻辑单元号高速缓存方法,其特征在于:所述的最新最久未使用的算法,它为缓冲区的每个数据块和每个逻辑单元号LUN各设置一个访问次数计数和访问时间标记,每次数据操作都会更新相应的访问次数计数和访问时间标记,当需要更新缓冲区时,它从缓冲区中选出离当前一段时间内访问次数较少,并且所在的逻辑单元号访问次数最少的数据块予以删除。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200310113532 CN1279455C (zh) | 2003-11-14 | 2003-11-14 | 光纤通道-存储区域网络***的逻辑单元号高速缓存方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200310113532 CN1279455C (zh) | 2003-11-14 | 2003-11-14 | 光纤通道-存储区域网络***的逻辑单元号高速缓存方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1545033A CN1545033A (zh) | 2004-11-10 |
CN1279455C true CN1279455C (zh) | 2006-10-11 |
Family
ID=34336904
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200310113532 Expired - Fee Related CN1279455C (zh) | 2003-11-14 | 2003-11-14 | 光纤通道-存储区域网络***的逻辑单元号高速缓存方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1279455C (zh) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7290094B2 (en) * | 2005-05-17 | 2007-10-30 | International Business Machines Corporation | Processor, data processing system, and method for initializing a memory block to an initialization value without a cache first obtaining a data valid copy |
CN100353307C (zh) * | 2006-02-16 | 2007-12-05 | 杭州华三通信技术有限公司 | 一种存储***以及存储数据的方法和读取数据的方法 |
KR101023877B1 (ko) * | 2009-04-17 | 2011-03-22 | (주)인디링스 | 캐시 및 디스크 관리 방법 및 상기 방법을 이용한 컨트롤러 |
CN102033796B (zh) * | 2009-09-25 | 2013-01-16 | ***通信集团公司 | 测试***和方法 |
CN103309818B (zh) * | 2012-03-09 | 2015-07-29 | 腾讯科技(深圳)有限公司 | 存储数据的方法及装置 |
CN102681892B (zh) * | 2012-05-15 | 2014-08-20 | 西安热工研究院有限公司 | Key-Value型单写多读锁池软件模块及其运行方法 |
CN102843183A (zh) * | 2012-08-27 | 2012-12-26 | 成都成电光信科技有限责任公司 | 一种光纤通道网络数据监控装置 |
CN104321754B (zh) * | 2012-12-21 | 2017-12-15 | 华为技术有限公司 | 一种Cache工作模式的设置方法和装置 |
CN103106048A (zh) * | 2013-01-30 | 2013-05-15 | 浪潮电子信息产业股份有限公司 | 一种多控多活的存储*** |
CN103327074A (zh) * | 2013-05-24 | 2013-09-25 | 浪潮电子信息产业股份有限公司 | 一种全局共享缓存的紧耦合多控多活存储***的设计方法 |
CN103441948B (zh) * | 2013-07-03 | 2017-09-05 | 华为技术有限公司 | 一种数据访问方法、网卡及存储*** |
CN104102515A (zh) * | 2014-07-18 | 2014-10-15 | 浪潮(北京)电子信息产业有限公司 | 一种处理外挂存储设备的逻辑单元号的方法及服务器 |
CN104360966B (zh) * | 2014-11-21 | 2017-12-12 | 浪潮(北京)电子信息产业有限公司 | 对块数据进行输入输出操作的方法和装置 |
US9983995B2 (en) | 2016-04-18 | 2018-05-29 | Futurewei Technologies, Inc. | Delayed write through cache (DWTC) and method for operating the DWTC |
CN108170544B (zh) * | 2017-12-29 | 2020-08-28 | 中国人民解放军国防科技大学 | 面向数据无冲突程序的共享数据动态更新方法 |
CN111506436B (zh) * | 2020-03-25 | 2024-05-14 | 炬星科技(深圳)有限公司 | 实现内存共享的方法、电子设备和共享内存数据管理库 |
CN111459849B (zh) * | 2020-04-20 | 2021-05-11 | 网易(杭州)网络有限公司 | 一种内存的设置方法及装置、电子设备、存储介质 |
CN112636908B (zh) * | 2020-12-21 | 2022-08-05 | 武汉船舶通信研究所(中国船舶重工集团公司第七二二研究所) | 密钥查询方法及装置、加密设备及存储介质 |
CN113643326B (zh) * | 2021-06-07 | 2022-04-08 | 深圳市智绘科技有限公司 | 一种基于SoC的KNN计算装置和路径规划*** |
-
2003
- 2003-11-14 CN CN 200310113532 patent/CN1279455C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN1545033A (zh) | 2004-11-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1279455C (zh) | 光纤通道-存储区域网络***的逻辑单元号高速缓存方法 | |
Maruf et al. | Tpp: Transparent page placement for cxl-enabled tiered-memory | |
US10769059B2 (en) | Apparatus and system for object-based storage solid-state device | |
RU2571366C2 (ru) | Виртуальная архитектура неоднородного доступа к памяти для виртуальных машин | |
KR102044023B1 (ko) | 키 값 기반 데이터 스토리지 시스템 및 이의 운용 방법 | |
US8402152B2 (en) | Apparatus and system for object-based storage solid-state drive | |
CN1300685C (zh) | 模块化服务器***、存储叶片和对服务器进行供应的方法 | |
US8719527B2 (en) | Increasing memory capacity in power-constrained systems | |
CN1707417A (zh) | 自适应存储*** | |
EP1650666A2 (en) | Using external memory devices to improve system performance | |
CN1940849A (zh) | Raid***及其重构/回拷处理方法 | |
CN1832489A (zh) | 一种对目的磁盘进行访问的方法和扩展磁盘容量的*** | |
CN1821979A (zh) | 存储*** | |
CN101079902A (zh) | 海量数据分级存储方法 | |
CN1862475A (zh) | 磁盘阵列缓存的管理方法 | |
CN1717645A (zh) | 用于多线程处理器性能控制的装置和方法 | |
US20150261289A1 (en) | Adaptive power control of address map memory devices | |
CN1545030A (zh) | 基于磁盘特征的数据分布动态映射的方法 | |
CN1241098C (zh) | 存储***中检验数据的方法及设备 | |
CN1748198A (zh) | 存储装置和信息处理*** | |
WO2023125524A1 (zh) | 数据存储方法、***、存储访问配置方法及相关设备 | |
CN1908910A (zh) | 备份及恢复数据的方法 | |
US8769196B1 (en) | Configuring I/O cache | |
US10572464B2 (en) | Predictable allocation latency in fragmented log structured file systems | |
CN1508714A (zh) | 确定高可用性集群之活跃度的方法和*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C19 | Lapse of patent right due to non-payment of the annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |