CN103605833A - 一种对存储阵列系统的性能进行仿真的方法及装置 - Google Patents

一种对存储阵列系统的性能进行仿真的方法及装置 Download PDF

Info

Publication number
CN103605833A
CN103605833A CN201310529354.0A CN201310529354A CN103605833A CN 103605833 A CN103605833 A CN 103605833A CN 201310529354 A CN201310529354 A CN 201310529354A CN 103605833 A CN103605833 A CN 103605833A
Authority
CN
China
Prior art keywords
data
read
message
request message
module
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.)
Granted
Application number
CN201310529354.0A
Other languages
English (en)
Other versions
CN103605833B (zh
Inventor
陈刚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Digital Technologies Suzhou Co Ltd
Original Assignee
Huawei Digital Technologies Suzhou Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Digital Technologies Suzhou Co Ltd filed Critical Huawei Digital Technologies Suzhou Co Ltd
Priority to CN201310529354.0A priority Critical patent/CN103605833B/zh
Publication of CN103605833A publication Critical patent/CN103605833A/zh
Application granted granted Critical
Publication of CN103605833B publication Critical patent/CN103605833B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明公开了一种对存储阵列系统的性能进行仿真的方法及装置,属于计算机领域。所述方法包括:接收IO请求消息,所述IO请求消息中至少携带所述IO请求消息访问的逻辑地址;根据预设的消息路径和所述消息路径包括的每个系统性能模块的路由规则,从存储阵列系统包括的控制器阵列中查找缓存模块;根据所述IO请求消息访问的逻辑地址,在所述查找的缓存模块中读取或写入数据,以实现对所述存储阵列系统的性能进行仿真。所述装置包括:接收模块、查找模块和读取或写入模块。本发明对该控制器和存储介质阵列都进行仿真,提高了对该存储阵列系统进行仿真的仿真度。

Description

一种对存储阵列系统的性能进行仿真的方法及装置
技术领域
本发明涉及计算机领域,特别涉及一种对存储阵列系统的性能进行仿真的方法及装置。
背景技术
随着海量数据存储的时代到来,存储数据的存储阵列系统会越来越复杂,当对该存储阵列系统的参数进行调整或者对该存储阵列系统重新部署时都要进行测试,而测试的周期较长,规模较大,成本较高,所以对存储阵列系统的性能进行仿真的方法受到了广泛的关注。
其中,存储阵列系统包括控制器阵列和存储介质阵列,存储介质阵列包括硬盘,现有技术对该硬盘进行仿真,例如,卡梅隆大学的disksim软件是一个高效、准确和高度可配置的磁盘系统模拟器。由于控制器阵列是影响存储阵列系统性能的最大因素,而现有技术只是简单地对该存储介质阵列包括的硬盘进行仿真,并没有对该存储阵列系统包括的控制器阵列进行仿真,所以现有技术对该存储阵列系统的性能进行仿真的仿真度较低。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种对存储阵列系统的性能进行仿真的方法及装置。所述技术方案如下:
第一方面,提供了一种对存储阵列系统的性能进行仿真的方法,所述方法包括:
接收输入输出IO请求消息,所述IO请求消息中至少携带所述IO请求消息访问的逻辑地址;
根据预设的消息路径和所述消息路径包括的每个系统性能模块的路由规则,从存储阵列系统包括的控制器阵列中查找缓存模块;
根据所述IO请求消息访问的逻辑地址,在所述查找的缓存模块中读取或写入数据,以实现对所述存储阵列系统的性能进行仿真。
结合第一方面,在上述第一方面的第一种可能的实现方式中,所述根据预设的消息路径和所述消息路径包括的每个系统性能模块的路由规则,从存储阵列系统包括的控制器阵列中查找缓存模块,包括:
将接收所述IO请求消息的系统性能模块确定为当前系统性能模块;
判断所述当前系统性能模块是否为所述控制器阵列包括的缓存模块;
如果是,则将所述当前系统性能模块确定为查找的缓存模块;
如果否,则根据预设的消息路径和所述当前系统性能模块的路由规则,将所述IO请求消息转发到所述消息路径包括的下一个系统性能模块,返回判断所述当前系统性能模块是否为所述控制器阵列包括的缓存模块。
结合第一方面,在上述第一方面的第二种可能的实现方式中,如果所述IO请求消息为写请求消息,则所述IO请求消息中还携带待写入的数据,
相应地,所述根据所述IO请求消息访问的逻辑地址,在所述查找的缓存模块中读取或写入数据,包括:
如果所述IO请求消息为读请求消息,则根据所述逻辑地址从所述缓存模块中读取对应的数据,并返回IO读响应消息,所述IO读响应消息包括所述逻辑地址和读取的数据;
如果所述IO请求消息为写请求消息且采用回写方式写数据,则将所述待写入的数据插入所述缓存模块包括的写数据列表,并返回IO写响应消息。
结合第一方面的第二种可能的实现方式,在上述第一方面的第三种可能的实现方式中,所述根据所述逻辑地址从所述缓存模块中读取对应的数据,并返回IO读响应消息,包括:
根据所述逻辑地址从所述缓存模块包括的读数据列表中读取对应的数据;
如果读取到所述逻辑地址对应的所有数据,则产生IO读响应消息,返回所述IO读响应消息,并将所述读取的数据移动至所述读数据列表的表尾;
如果没有读取到数据或者读取到所述逻辑地址对应的部分数据,则向存储介质阵列发送预读请求,所述预读请求中携带读取数据失败的逻辑地址;
当从所述存储介质阵列中获取到数据时,接收预读响应消息,将所述获取的数据存储在所述读数据列表中;
根据所述IO请求消息需要读取的数据的原数据长度和所述读数据列表中所述IO请求消息对应的数据的当前数据长度,产生IO读响应消息,并返回所述IO读响应消息。
结合第一方面的第三种可能的实现方式,在上述第一方面的第四种可能的实现方式中,所述将所述获取的数据存储在所述读数据列表中,包括:
如果所述读数据列表已满或者所述读数据列表未满且所述读数据列表剩余的空间小于所述获取的数据占用的空间,则从所述读数据列表的表头开始删除数据,以使所述获取的数据存储到所述读数据列表中;
如果所述读数据列表未满且所述读数据列表剩余的空间大于或等于所述获取的数据占用的空间,则将所述获取的数据直接插入所述读数据列表中。
结合第一方面的第三种可能的实现方式,在上述第一方面的第五种可能的实现方式中,所述根据所述逻辑地址从所述缓存模块包括的读数据列表中读取对应的数据之前,还包括:
将所述IO请求消息存储在所述缓存模块包括的请求消息列表中;
相应地,所述根据所述IO请求消息需要读取的数据的原数据长度和所述读数据列表中所述IO请求消息对应的数据的当前数据长度,产生IO读响应消息,并返回所述IO读响应消息,包括:
将所述IO请求消息需要读取的数据的原数据长度与所述读数据列表中所述IO请求消息对应的数据的当前数据长度进行比较;
如果所述原数据长度等于所述当前数据长度,则根据所述预读响应消息从所述请求消息列表中删除所述IO请求消息,并产生IO读响应消息,返回所述IO读响应消息;
如果所述原数据长度大于所述当前数据长度,则销毁所述预读响应消息,继续等待,直至所述原数据长度等于当前数据长度,返回IO读响应消息。
结合第一方面的第二种可能的实现方式,在上述第一方面的第六种可能的实现方式中,所述返回IO写响应消息之后,还包括:
接收定时消息,获取所述写数据列表中的脏数据个数,所述脏数据为所述写数据列表中没有写入存储介质阵列的数据;
如果所述脏数据个数大于第一阈值且小于第二阈值,则从所述写数据列表中删除一个脏数据;
如果所述脏数据个数小于或等于所述第一阈值且系统空闲,则从所述写数据列表中删除一个脏数据;
如果所述脏数据个数大于或等于所述第二阈值且系统繁忙,则从所述写数据列表中删除一个脏数据;
如果所述脏数据个数大于或等于所述第二阈值且系统空闲,则从所述写数据列表中删除脏数据,直至所述写数据列表中脏数据个数小于所述第二阈值。
结合第一方面,在上述第一方面的第七种可能的实现方式中,所述接收输入输出IO请求消息之前,还包括:
确定存储介质阵列系统处理IO消息的系统性能模块,并根据所述系统性能模块建立消息路径;
建立所述消息路径包括的每个系统性能模块处理IO消息的路由规则。
第二方面,提供了一种对存储阵列系统的性能进行仿真的装置,所述装置包括:
接收模块,用于接收输入输出IO请求消息,所述IO请求消息中至少携带所述IO请求消息访问的逻辑地址;
查找模块,用于根据预设的消息路径和所述消息路径包括的每个系统性能模块的路由规则,从存储阵列系统包括的控制器阵列中查找缓存模块;
读取或写入模块,用于根据所述IO请求消息访问的逻辑地址,在所述查找的缓存模块中读取或写入数据,以实现对所述存储阵列系统的性能进行仿真。
结合第二方面,在上述第二方面的第一种可能的实现方式中,所述查找模块包括:
第一确定单元,用于将接收所述IO请求消息的系统性能模块确定为当前系统性能模块;
判断单元,用于判断所述当前系统性能模块是否为所述控制器阵列包括的缓存模块;
第二确定单元,用于如果是,则将所述当前系统性能模块确定为查找的缓存模块;
转发单元,用于如果否,则根据预设的消息路径和所述当前系统性能模块的路由规则,将所述IO请求消息转发到所述消息路径包括的下一个系统性能模块,返回判断所述当前系统性能模块是否为所述控制器阵列包括的缓存模块。
结合第二方面,在上述第二方面的第二种可能的实现方式中,如果所述IO请求消息为写请求消息,则所述IO请求消息中还携带待写入的数据,
相应地,所述读取或写入模块包括:
读取单元,用于如果所述IO请求消息为读请求消息,则根据所述逻辑地址从所述缓存模块中读取对应的数据,并返回IO读响应消息,所述IO读响应消息包括所述逻辑地址和读取的数据;
插入单元,用于如果所述IO请求消息为写请求消息且采用回写方式写数据,则将所述待写入的数据插入所述缓存模块包括的写数据列表,并返回IO写响应消息。
结合第二方面的第二种可能的实现方式,在上述第二方面的第三种可能的实现方式中,所述读取单元包括:
读取子单元,用于根据所述逻辑地址从所述缓存模块包括的读数据列表中读取对应的数据;
移动子单元,用于如果读取到所述逻辑地址对应的所有数据,则产生IO读响应消息,返回所述IO读响应消息,并将所述读取的数据移动至所述读数据列表的表尾;
发送子单元,用于如果没有读取到数据或者读取到所述逻辑地址对应的部分数据,则向存储介质阵列发送预读请求,所述预读请求中携带读取数据失败的逻辑地址;
第一存储子单元,用于当从所述存储介质阵列中获取到数据时,接收预读响应消息,将所述获取的数据存储在所述读数据列表中;
产生子单元,用于根据所述IO请求消息需要读取的数据的原数据长度和所述读数据列表中所述IO请求消息对应的数据的当前数据长度,产生IO读响应消息,并返回所述IO读响应消息。
结合第二方面的第三种可能的实现方式,在上述第二方面的第四种可能的实现方式中,所述第一存储子单元,具体用于:
如果所述读数据列表已满或者所述读数据列表未满且所述读数据列表剩余的空间小于所述获取的数据占用的空间,则从所述读数据列表的表头开始删除数据,以使所述获取的数据存储到所述读数据列表中;
如果所述读数据列表未满且所述读数据列表剩余的空间大于或等于所述获取的数据占用的空间,则将所述获取的数据直接插入所述读数据列表中。
结合第二方面的第三种可能的实现方式,在上述第二方面的第五种可能的实现方式中,所述读取单元还包括:
第二存储子单元,用于将所述IO请求消息存储在所述缓存模块包括的请求消息列表中;
相应地,所述产生子单元,具体用于:
将所述IO请求消息需要读取的数据的原数据长度与所述读数据列表中所述IO请求消息对应的数据的当前数据长度进行比较;
如果所述原数据长度等于所述当前数据长度,则根据所述预读响应消息从所述请求消息列表中删除所述IO请求消息,并产生IO读响应消息,返回所述IO读响应消息;
如果所述原数据长度大于所述当前数据长度,则销毁所述预读响应消息,继续等待,直至所述原数据长度等于当前数据长度,返回IO读响应消息。
结合第二方面的第二种可能的实现方式,在上述第二方面的第六种可能的实现方式中,所述读取或写入模块还包括:
获取单元,用于接收定时消息,获取所述写数据列表中的脏数据个数,所述脏数据为所述写数据列表中没有写入存储介质阵列的数据;
第一删除单元,用于如果所述脏数据个数大于第一阈值且小于第二阈值,则从所述写数据列表中删除一个脏数据;
第二删除单元,用于如果所述脏数据个数小于或等于所述第一阈值且系统空闲,则从所述写数据列表中删除一个脏数据;
第三删除单元,用于如果所述脏数据个数大于或等于所述第二阈值且系统繁忙,则从所述写数据列表中删除一个脏数据;
第四删除单元,用于如果所述脏数据个数大于或等于所述第二阈值且系统空闲,则从所述写数据列表中删除脏数据,直至所述写数据列表中脏数据个数小于所述第二阈值。
结合第二方面,在上述第二方面的第七种可能的实现方式中,所述装置还包括:
第一建立模块,用于确定存储阵列系统处理IO消息的系统性能模块,并根据所述系统性能模块建立消息路径;
第二建立模块,用于建立所述消息路径包括的每个系统性能模块处理IO消息的路由规则。
第三方面,提供了一种对存储阵列系统的性能进行仿真的装置,所述装置包括:存储器和处理器,用于执行所述一种对存储阵列系统的性能进行仿真的方法。
在本发明实施例中,建立该存储阵列系统处理IO消息的路径,并对该消息路径包括的每个系统性能模块设置路由规则,根据该消息路径和该消息路径包括的每个系统性能模块的路由规则,将该IO请求消息进行处理,实现了对该存储阵列系统进行仿真。其中,由于该控制器阵列包括的缓存模块是影响存储阵列系统性能的最大关键模块,所以对该控制器和存储介质阵列都进行仿真,提高了对该存储阵列系统进行仿真的仿真度。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例一提供的一种对存储阵列系统的性能进行仿真的方法流程图;
图2是本发明实施例二提供的一种对存储阵列系统的性能进行仿真的方法流程图;
图3是本发明实施例二提供的一种消息路径的示意图;
图4是本发明实施例三提供的一种对存储阵列系统的性能进行仿真的装置结构示意图;
图5是本发明实施例四提供的一种对存储阵列系统的性能进行仿真的装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例一
本发明实施例提供了一种对存储阵列系统的性能进行仿真的方法,参见图1,该方法包括:
步骤101:接收输入输出IO请求消息,该IO请求消息中至少携带该IO请求消息访问的逻辑地址;
步骤102:根据预设的消息路径和该消息路径包括的每个系统性能模块的路由规则,从存储阵列系统包括的控制器阵列中查找缓存模块;
步骤103:根据该IO请求消息访问的逻辑地址,在查找的缓存模块中读取或写入数据,以实现对该存储阵列系统的性能进行仿真。
其中,根据预设的消息路径和该消息路径包括的每个系统性能模块的路由规则,从存储阵列系统包括的控制器阵列中查找缓存模块,包括:
将接收该IO请求消息的系统性能模块确定为当前系统性能模块;
判断当前系统性能模块是否为该控制器阵列包括的缓存模块;
如果是,则将当前系统性能模块确定为查找的缓存模块;
如果否,则根据预设的消息路径和当前系统性能模块的路由规则,将该IO请求消息转发到该消息路径包括的下一个系统性能模块,返回判断当前系统性能模块是否为该控制器阵列包括的缓存模块。
其中,如果该IO请求消息为写请求消息,则该IO请求消息中还携带待写入的数据,
相应地,根据该IO请求消息访问的逻辑地址,在查找的缓存模块中读取或写入数据,包括:
如果该IO请求消息为读请求消息,则根据逻辑地址从缓存模块中读取对应的数据,并返回IO读响应消息,该IO读响应消息包括逻辑地址和读取的数据;
如果该IO请求消息为写请求消息且采用回写方式写数据,则将待写入的数据插入缓存模块包括的写数据列表,并返回IO写响应消息。
其中,根据逻辑地址从缓存模块中读取对应的数据,并返回IO读响应消息,包括:
根据逻辑地址从缓存模块包括的读数据列表中读取对应的数据;
如果读取到逻辑地址对应的所有数据,则产生IO读响应消息,返回该IO读响应消息,并将读取的数据移动至该读数据列表的表尾;
如果没有读取到数据或者读取到逻辑地址对应的部分数据,则向存储介质阵列发送预读请求,该预读请求中携带读取数据失败的逻辑地址;
当从该存储介质阵列中获取到数据时,接收预读响应消息,将获取的数据存储在该读数据列表中;
根据IO请求消息需要读取的数据的原数据长度和该读数据列表中该IO请求消息对应的数据的当前数据长度,产生IO读响应消息,并返回该IO读响应消息。
其中,将获取的数据存储在读数据列表中,包括:
如果读数据列表已满或者读数据列表未满且读数据列表剩余的空间小于获取的数据占用的空间,则从读数据列表的表头开始删除数据,以使获取的数据存储到读数据列表中;
如果读数据列表未满且读数据列表剩余的空间大于或等于获取的数据占用的空间,则将获取的数据直接插入读数据列表中。
进一步地,根据逻辑地址从缓存模块包括的读数据列表中读取对应的数据之前,还包括:
将该IO请求消息存储在缓存模块包括的请求消息列表中;
相应地,根据该IO请求消息需要读取的数据的原数据长度和读数据列表中IO请求消息对应的数据的当前数据长度,产生IO读响应消息,并返回该IO读响应消息,包括:
将该IO请求消息需要读取的数据的原数据长度与读数据列表中该IO请求消息对应的数据的当前数据长度进行比较;
如果原数据长度等于当前数据长度,则根据预读响应消息从请求消息列表中删除IO请求消息,并产生IO读响应消息,返回该IO读响应消息;
如果原数据长度大于当前数据长度,则销毁预读响应消息,继续等待,直至原数据长度等于当前数据长度,返回IO读响应消息。
可选地,返回IO写响应消息之后,还包括:
接收定时消息,获取写数据列表中的脏数据个数,脏数据为写数据列表中没有写入存储介质阵列的数据;
如果脏数据个数大于第一阈值且小于第二阈值,则从写数据列表中删除一个脏数据;
如果脏数据个数小于或等于第一阈值且系统空闲,则从写数据列表中删除一个脏数据;
如果脏数据个数大于或等于第二阈值且系统繁忙,则从写数据列表中删除一个脏数据;
如果脏数据个数大于或等于第二阈值且系统空闲,则从写数据列表中删除脏数据,直至写数据列表中脏数据个数小于第二阈值。
进一步地,接收输入输出IO请求消息之前,还包括:
确定存储阵列系统处理IO消息的系统性能模块,并根据系统性能模块建立消息路径;
建立消息路径包括的每个系统性能模块处理IO消息的路由规则。
在本发明实施例中,建立该存储阵列系统处理IO消息的路径,并对该消息路径包括的每个系统性能模块设置路由规则,根据该消息路径和该消息路径包括的每个系统性能模块的路由规则,将该IO请求消息进行处理,实现了对该存储阵列系统进行仿真。其中,由于该控制器阵列包括的缓存模块是影响存储阵列系统性能的最大关键模块,所以对该控制器和存储介质阵列都进行仿真,提高了对该存储阵列系统进行仿真的仿真度。
实施例二
本发明实施例提供了一种对存储阵列系统的性能进行仿真的方法,参见图2,该方法包括:
步骤201:确定存储阵列系统处理IO(input/output,输入/输出)消息的系统性能模块,根据确定的系统性能模块建立消息路径;
其中,存储阵列系统包括控制器阵列和存储介质阵列,控制器阵列的系统性能模块包括:TGT(target,目标)、LUN(Logical Unit Number,逻辑单元号)、Volume(卷)、一级cache(缓存)、RAID(Redundant Arrays of Inexpensive Disks,磁盘阵列)、二级cache和BDM(Bottom Driver Management,底层驱动管理),该存储介质阵列的主要系统性能模块包括:Disk(磁盘),所以根据确定的系统性能模块建立的消息路径为TGT-LUN-Volume-一级cache-RAID-二级cache-BDM-Disk。
其中,一级cache和二级cache的大小不同。
其中,在本发明实施例中对存储介质阵列的仿真与现有技术相同,所以本发明实施例中对存储介质阵列的仿真不再进行具体地描述。
由于控制器阵列包括的缓存模块是影响存储阵列系统性能的最大关键模块,所以对该控制器阵列包括的缓存模块进行仿真,可以提高对该存储阵列系统进行仿真的仿真度。
其中,本发明实施例中的存储阵列系统可以为网络存储阵列系统。
步骤202:建立该消息路径包括的每个系统性能模块处理IO消息的路由规则;
具体地,本步骤可以分为如下(1)-(2)的步骤来实现,包括:
(1)、为每个IO请求消息的类型设置类型字段,根据IO请求消息的类型字段设置对应的IO响应消息的类型字段;
具体地,从小于第一数值的数值中为每个IO请求消息的类型分别选择一个类型字段,并将每个IO请求消息的类型字段分别与第一数值进行相加,得到每个IO请求消息对应的IO响应消息的类型字段。
例如,该IO请求消息包括读请求消息、写请求消息、cache读请求消息和cache写请求消息,第一数值为10,设置读请求消息的类型字段为0,设置写请求消息的类型字段为1,设置cache读请求消息的类型字段为2,以及设置cache写请求消息的类型字段为3。读请求消息对应的读响应消息的类型字段为10,写请求消息对应的写响应消息的类型字段为11,cache读请求消息对应的cache读响应消息的类型字段为12,以及cache写请求消息对应的cache写响应消息的类型字段为13,并将每个IO请求消息的名称与其类型字段存储在如下表1的消息类型名称与类型字段的对应关系中,以及将每个IO请求消息对应的IO响应消息名称与该IO响应消息的类型字段存储在如下表1的消息类型名称与类型字段的对应关系中。
表1
消息类型名称 类型字段
读请求消息 0
写请求消息 1
cache读请求消息 2
cache写请求消息 3
读响应消息 20
写响应消息 21
cache读响应消息 22
cache写响应消息 23
(2)、根据每个IO消息的类型字段,设置该消息路径包括的每个系统性能模块处理IO消息的路由规则。
其中,对于TGT、LUN和BDM模块设置的路由规则为:如果IO消息的类型字段小于第一数值,则将该IO消息发送给该消息路径包括的下一个系统性能模块;如果IO消息的类型字段大于或者等于第一数值,则将该IO消息发送给该消息路径包括的上一个系统性能模块。
其中,对于Volume和RAID模块设置的路由规则包括如下(1)-(6)的规则,包括:
(1)、如果IO消息的类型字段等于读请求消息的类型字段或者等于写请求消息的类型字段,则将将该IO消息发送给该消息路径包括的cache系统性能模块;
其中,本步骤中cache系统性能模块可以为该消息路径中的一级cache模块或二级cache模块。
(2)、如果IO消息的类型字段等于读响应消息的类型字段或者等于写响应消息的类型字段,则将该IO消息发送给该消息路径包括的cache系统性能模块;
其中,本步骤中cache系统性能模块可以为该消息路径中的一级cache模块或二级cache模块。
(3)、如果IO消息的类型字段等于cache读响应消息的类型字段,则将该IO消息的类型字段修改为读响应消息的类型字段,并将该IO消息发送给该消息路径包括的上一个系统性能模块;
(4)、如果IO消息的类型字段等于cache写响应消息的类型字段,则将该IO消息的类型字段修改为写响应消息的类型字段,并将该IO消息发送给该消息路径包括的上一个系统性能模块;
(5)、如果IO消息的类型字段等于cache读请求消息的类型字段,则将该IO消息的类型字段修改为读请求消息的类型字段,并将该IO消息发送给该消息路径包括的下一个系统性能模块;
(6)、如果IO消息的类型字段等于cache写请求消息的类型字段,则将该IO消息的类型字段修改为写请求消息的类型字段,并将该IO消息发送给该消息路径包括的下一个系统性能模块。
其中,对于Disk模块设置的路由规则为:将接收的IO请求消息的类型字段与第一数值相加,得到该IO请求消息对应的IO响应消息,并将该IO响应消息发送给该消息路径包括的上一个系统性能模块。
其中,如图3所示,图3中表示出IO请求消息和IO响应消息在该存储阵列系统包括的系统性能模块的路径,且图3中表示的是缓存模块中没有该IO请求消息访问的逻辑地址对应的数据。
当对处理IO消息的消息路径和该消息路径包括的每个系统性能模块的路由规则建立之后,可以接收IO请求消息并对该存储阵列系统的性能进行仿真。
步骤203:接收IO请求消息,该IO请求消息中至少携带该IO请求消息访问的逻辑地址;
其中,如果该IO请求消息为读请求消息,则该IO请求消息中携带该IO请求消息访问的逻辑地址,如果该IO请求消息为写请求消息,则该IO请求消息中携带该IO请求消息访问的逻辑地址和待写入的数据。
步骤204:根据预设的消息路径和该消息路径包括的每个系统性能模块的路由规则,从存储阵列系统包括的控制器阵列中查找缓存模块;
具体地,本步骤可以分为如下(a)-(d)的步骤来实现,包括:
(a)、将接收IO请求消息的系统性能模块确定为当前系统性能模块;
(b)、判断当前系统性能模块是否为该控制器阵列包括的缓存模块;
其中,缓存模块用于暂时存储IO请求消息,并且存储该存储介质阵列中的部分数据,当写数据的方式为回写方式时,该缓存模块还用于存储待写入的数据。
(c)、如果是,则将当前系统性能模块确定为查找的缓存模块;
(d)、如果否,则根据预设的消息路径和当前系统性能模块的路由规则,将该IO请求消息转发到该消息路径包括的下一个系统性能模块,将下一个系统性能模块确定为当前系统系能模块,返回步骤(b)。
步骤205:如果该IO请求消息为读请求消息,则将该IO请求消息存储在查找的缓存模块包括的请求消息列表中,并根据该IO请求消息访问的逻辑地址从查找的缓存模块包括的读数据列表中读取对应的数据;
具体地,如果该IO请求消息为读请求消息,则将该IO请求消息插入该缓存模块包括的请求消息列表的表尾,并根据该IO请求消息访问的逻辑地址从查找的缓存模块包括的读数据列表中读取对应的数据。
步骤206:如果读取到该逻辑地址对应的所有数据,则产生IO读响应消息,返回该IO读响应消息,并将读取的数据移动至该读数据列表的表尾,IO读响应消息包括该逻辑地址和读取的数据;
其中,该IO读响应消息也是根据消息路径和该消息路径包括的每个系统性能模块的路由规则进行发送的。
其中,由于缓存模块包括的读数据列表的长度是固定的,所以当该读数据列表中的没有可用的空间时,需要对该读数据列表中存储的数据进行删除。一般是从该读数据列表的表头开始删除数据,由于根据该逻辑地址从该读数据列表中读取到数据,增大了读取的数据的概率,所以将读取的数据移动至该读数据列表的表尾时,可以减小读取的数据被删除的概率。
步骤207:如果没有读取到数据或者读取到该逻辑地址对应的部分数据,则向存储介质阵列发送预读请求,该预读请求中携带读取数据失败的逻辑地址;
其中,可以将该预读请求划分为多个请求消息,即将读取数据失败的逻辑地址划分为多个片段,每个请求消息携带一个逻辑地址片段。
其中,如果没有从该缓存模块包括的读数据列表中读取到数据,则将没有读取到数据的逻辑地址确定为读取数据失败的逻辑地址。
可选地,如果从该读数据列表中没有读取到数据或者从该读数据列表中读取到该逻辑地址对应的部分数据,则根据读取数据失败的逻辑地址判断已经向存储介质阵列发送的预读请求中是否存在读取数据失败的逻辑地址,如果存在,则不需要向该存储介质阵列发送预读请求,等待接收已经发送的预读请求返回的响应消息,并从该响应消息中获取读取数据失败的逻辑地址对应的数据。
可选地,如果该控制器阵列包括多个缓存模块,则可以先根据读取数据失败的逻辑地址,从该控制器阵列包括的其他缓存模块中读取数据,如果读取到数据,则返回响应消息,如果没有读取到数据或者读取到部分数据,则再向该存储介质阵列发送预读请求。
其中,从该控制器包括的缓存模块中读取数据,而不用从存储介质阵列中读取数据,可以提高读取数据的速度。
步骤208:当从该存储介质阵列中获取到数据时,接收预读响应消息,将获取的数据存储在该缓存模块包括的读数据列表中;
具体地,当从该存储介质阵列中获取到数据时,接收预读响应消息,如果读数据列表已满或者该读数据列表未满且该读数据列表剩余的空间小于获取的数据占用的空间,则从该读数据列表的表头开始删除数据,以使获取的数据存储到该读数据列表中;如果该读数据列表未满且该读数据列表剩余的空间大于或等于获取的数据占用的空间,则将获取的数据直接插入该读数据列表中。
其中,将获取的数据直接插入该读数据列表的具体操作为:将获取的数据插入该读数据列表的表尾。
其中,如果该控制器阵列包括多个缓存模块,则将从存储介质阵列中获取的数据存储在每个缓存模块包括的读数据列表中。
其中,可以设置该控制器阵列包括的缓存模块的空间大小不同,当从存储介质阵列中获取到数据时,将获取的数据存储在每个缓存模块包括的读数据列表中。由于每个缓存模块的空间大小不同,且当缓存模块包括的读数据列表已满时从该读数据列表的表头开始删除数据,所以随着时间的递增,每个缓存模块包括的读数据列表中存储的数据会不同。
步骤209:根据该IO请求消息需要读取的数据的原数据长度和读数据列表中该IO请求消息对应的数据的当前数据长度,产生IO读响应消息,并返回该IO读响应消息;
其中,如果将预读请求划分为多个请求,则需要根据原数据长度和当前数据长度,判断是否获取到该IO请求消息需要读取的所有数据。
具体地,本步骤可以通过如下(1)-(3)的步骤来实现,包括:
(1)、将该IO请求消息需要读取的数据的原数据长度与该读数据列表中该IO请求消息对应的数据的当前数据长度进行比较;
(2)、如果原数据长度等于当前数据长度,则根据预读响应消息从该缓存模块包括的请求消息列表中删除该IO请求消息,并产生IO读响应消息,返回该IO读响应消息;
具体地,如果原数据长度等于当前数据长度,则根据预读响应消息从该缓存模块包括的请求消息列表中获取该IO请求消息,并删除该IO请求消息,根据该IO请求访问的逻辑地址和获取的数据产生IO读响应消息,返回该IO读响应消息。
(3)、如果原数据长度大于当前数据长度,则销毁该预读响应消息,继续等待,直至原数据长度等于当前数据长度,返回IO读响应消息。
可选地,当将预读请求划分为多个请求消息时,本发明实施例还可以设置一个计数器,当接收到划分的多个请求消息对应的一个响应消息时,将计数器的计数值增加1,然后判断该计数器的计数值与划分的请求消息的个数是否相等,如果相等,则产生IO读响应消息,并返回该IO读响应消息,如果不相等,则继续等待响应消息,直到该计数器的计数值等于划分的请求消息的个数。
步骤210:如果该IO请求消息为写请求消息且采用回写方式写数据,则将待写入的数据插入该缓存模块包括的写数据列表,并返回IO写响应消息,以实现对存储介质阵列系统的性能进行仿真。
其中,当采用回写方式写数据时,接收到待写入的数据并插入该缓存模块包括的写数据列表后,返回IO写响应消息。然后该缓存模块将该写数据列表中待写入的数据发送给存储介质阵列,使存储介质阵列根据待写入的数据对应的逻辑地址,将待写入的数据写入该存储介质阵列中。
进一步地,由于写数据列表的长度固定,所以需要定时对写数据列表中的脏数据进行删除,包括如下(1)-(5)的步骤:
(1)、接收定时消息,获取该写数据列表中的脏数据个数,该脏数据为写数据列表中没有写入存储介质阵列的数据;
(2)、如果脏数据个数大于第一阈值且小于第二阈值,则从写数据列表中删除一个脏数据;
其中,第一阈值小于或等于第二阈值。
(3)、如果脏数据个数小于或等于第一阈值且系统空闲,则从写数据列表中删除一个脏数据;
其中,可以获取该系统的CPU使用率,根据该系统的CPU使用率判断该系统处于空闲状态还是繁忙状态。
(4)、如果脏数据个数大于或等于第二阈值且系统繁忙,则从写数据列表中删除一个脏数据;
(5)、如果脏数据个数大于或等于第二阈值且系统空闲,则从写数据列表中删除脏数据,直至写数据列表中脏数据个数小于第二阈值。
进一步地,也可以不用定时删除该写数据列表中的脏数据,当待写入的数据都发送到该存储介质阵列后,直接删除待写入的数据。
进一步地,如果该缓存模块包括的读数据列表中存在剩余空间,则可以将该写数据列表中的脏数据存储在该读数据列表中,当下一个IO请求消息到达时,从该读数据列表中读取数据的概率较大。
其中,如果采用透写方式写数据时,则根据该消息路径和该消息路径包括的每个系统性能模块的路由规则,将该IO请求消息发送给该存储介质阵列,使该存储介质阵列根据待写入的数据对应的逻辑地址,将待写入的数据写入该存储介质阵列中。
其中,网络存储阵列系统仿真设计和开发过程是选取一款比如OPNET(Optimize performance network engine engineering tools,优化性能网络引擎工程工具)、GPSS(Global Purchase Supervision System,全球采购监理系统)仿真软件工具进行设计开发,设计一些端到端或者局部时延、Mbps、IOPS(Input/Output Operations Per Second,每秒进行读写操作的次数)等性能指标,开发阶段根据仿真软件工具要求采用c语言、java语言、自定义脚本语言进行开发。网络存储阵列系统仿真验证过程是在相同输入情况下的仿真结果与真实产品的输出结果进行误差对比,根据误差程度进行反向调整仿真建模。
在本发明实施例中,建立该存储阵列系统处理IO消息的路径,并对该消息路径包括的每个系统性能模块设置路由规则,根据该消息路径和该消息路径包括的每个系统性能模块的路由规则,将该IO请求消息进行处理,高效地仿真该存储阵列系统,降低了仿真复杂度,缩短了研发该存储阵列系统的周期并减小了研发风险。其中,由于该控制器阵列包括的缓存模块是影响存储阵列系统性能的最大关键模块,所以对该控制器和存储介质阵列都进行仿真,提高了对该存储阵列系统进行仿真的仿真度,可以有效地指导产品性能设计和产品性能优化。
实施例三
参见图4,本发明实施例提供了一种对存储阵列系统的性能进行仿真的装置,该装置包括:
接收模块301,用于接收输入输出IO请求消息,该IO请求消息中至少携带该IO请求消息访问的逻辑地址;
查找模块302,用于根据预设的消息路径和该消息路径包括的每个系统性能模块的路由规则,从存储阵列系统包括的控制器阵列中查找缓存模块;
读取或写入模块303,用于根据该IO请求消息访问的逻辑地址,在查找的缓存模块中读取或写入数据,以实现对该存储阵列系统的性能进行仿真。
其中,查找模块302包括:
第一确定单元,用于将接收该IO请求消息的系统性能模块确定为当前系统性能模块;
判断单元,用于判断当前系统性能模块是否为该控制器阵列包括的缓存模块;
第二确定单元,用于如果是,则将当前系统性能模块确定为查找的缓存模块;
转发单元,用于如果否,则根据预设的消息路径和当前系统性能模块的路由规则,将该IO请求消息转发到该消息路径包括的下一个系统性能模块,返回判断当前系统性能模块是否为该控制器阵列包括的缓存模块。
其中,如果该IO请求消息为写请求消息,则该IO请求消息中还携带待写入的数据,
相应地,读取或写入模块303包括:
读取单元,用于如果该IO请求消息为读请求消息,则根据逻辑地址从该缓存模块中读取对应的数据,并返回IO读响应消息,该IO读响应消息包括该逻辑地址和读取的数据;
插入单元,用于如果该IO请求消息为写请求消息且采用回写方式写数据,则将待写入的数据插入该缓存模块包括的写数据列表,并返回IO写响应消息。
其中,读取单元包括:
读取子单元,用于根据逻辑地址从该缓存模块包括的读数据列表中读取对应的数据;
移动子单元,用于如果读取到该逻辑地址对应的所有数据,则产生IO读响应消息,返回该IO读响应消息,并将读取的数据移动至该读数据列表的表尾;
发送子单元,用于如果没有读取到数据或者读取到该逻辑地址对应的部分数据,则向存储介质阵列发送预读请求,该预读请求中携带读取数据失败的逻辑地址;
第一存储子单元,用于当从该存储介质阵列中获取到数据时,接收预读响应消息,将获取的数据存储在该读数据列表中;
产生子单元,用于根据该IO请求消息需要读取的数据的原数据长度和该读数据列表中该IO请求消息对应的数据的当前数据长度,产生IO读响应消息,并返回该IO读响应消息。
其中,第一存储子单元,具体用于:
如果读数据列表已满或者该读数据列表未满且该读数据列表剩余的空间小于获取的数据占用的空间,则从该读数据列表的表头开始删除数据,以使获取的数据存储到该读数据列表中;
如果该读数据列表未满且该读数据列表剩余的空间大于或等于该获取的数据占用的空间,则将获取的数据直接插入该读数据列表中。
进一步地,读取单元还包括:
第二存储子单元,用于将该IO请求消息存储在该缓存模块包括的请求消息列表中;
相应地,产生子单元,具体用于:
将该IO请求消息需要读取的数据的原数据长度与该读数据列表中该IO请求消息对应的数据的当前数据长度进行比较;
如果原数据长度等于当前数据长度,则根据该预读响应消息从该请求消息列表中删除该IO请求消息,并产生IO读响应消息,返回该IO读响应消息;
如果原数据长度大于当前数据长度,则销毁该预读响应消息,继续等待,直至原数据长度等于当前数据长度,返回IO读响应消息。
可选地,读取或写入模块303还包括:
获取单元,用于接收定时消息,获取该写数据列表中的脏数据个数,该脏数据为该写数据列表中没有写入存储介质阵列的数据;
第一删除单元,用于如果该脏数据个数大于第一阈值且小于第二阈值,则从该写数据列表中删除一个脏数据;
第二删除单元,用于如果该脏数据个数小于或等于该第一阈值且系统空闲,则从该写数据列表中删除一个脏数据;
第三删除单元,用于如果该脏数据个数大于或等于该第二阈值且系统繁忙,则从该写数据列表中删除一个脏数据;
第四删除单元,用于如果该脏数据个数大于或等于该第二阈值且系统空闲,则从该写数据列表中删除脏数据,直至该写数据列表中脏数据个数小于该第二阈值。
进一步地,该装置还包括:
第一建立模块,用于确定存储阵列系统处理IO消息的系统性能模块,并根据该系统性能模块建立消息路径;
第二建立模块,用于建立该消息路径包括的每个系统性能模块处理IO消息的路由规则。
在本发明实施例中,建立该存储阵列系统处理IO消息的路径,并对该消息路径包括的每个系统性能模块设置路由规则,根据该消息路径和该消息路径包括的每个系统性能模块的路由规则,将该IO请求消息进行处理,实现了对该存储阵列系统进行仿真。其中,由于该控制器阵列包括的缓存模块是影响存储阵列系统性能的最大关键模块,所以对该控制器和存储介质阵列都进行仿真,提高了对该存储阵列系统进行仿真的仿真度。
实施例四
参见图5,本发明实施例提供了一种对存储阵列系统的性能进行仿真的装置,该装置包括存储器和处理器,用于执行如下所述一种对存储阵列系统的性能进行仿真的方法,包括:
接收输入输出IO请求消息,所述IO请求消息中至少携带所述IO请求消息访问的逻辑地址;
根据预设的消息路径和所述消息路径包括的每个系统性能模块的路由规则,从存储阵列系统包括的控制器阵列中查找缓存模块;
根据所述IO请求消息访问的逻辑地址,在所述查找的缓存模块中读取或写入数据,以实现对所述存储阵列系统的性能进行仿真。
其中,所述根据预设的消息路径和所述消息路径包括的每个系统性能模块的路由规则,从存储阵列系统包括的控制器阵列中查找缓存模块,包括:
将接收所述IO请求消息的系统性能模块确定为当前系统性能模块;
判断所述当前系统性能模块是否为所述控制器阵列包括的缓存模块;
如果是,则将所述当前系统性能模块确定为查找的缓存模块;
如果否,则根据预设的消息路径和所述当前系统性能模块的路由规则,将所述IO请求消息转发到所述消息路径包括的下一个系统性能模块,返回判断所述当前系统性能模块是否为所述控制器阵列包括的缓存模块。
其中,如果所述IO请求消息为写请求消息,则所述IO请求消息中还携带待写入的数据,
相应地,所述根据所述IO请求消息访问的逻辑地址,在所述查找的缓存模块中读取或写入数据,包括:
如果所述IO请求消息为读请求消息,则根据所述逻辑地址从所述缓存模块中读取对应的数据,并返回IO读响应消息,所述IO读响应消息包括所述逻辑地址和读取的数据;
如果所述IO请求消息为写请求消息且采用回写方式写数据,则将所述待写入的数据插入所述缓存模块包括的写数据列表,并返回IO写响应消息。
其中,所述根据所述逻辑地址从所述缓存模块中读取对应的数据,并返回IO读响应消息,包括:
根据所述逻辑地址从所述缓存模块包括的读数据列表中读取对应的数据;
如果读取到所述逻辑地址对应的所有数据,则产生IO读响应消息,返回所述IO读响应消息,并将所述读取的数据移动至所述读数据列表的表尾;
如果没有读取到数据或者读取到所述逻辑地址对应的部分数据,则向存储介质阵列发送预读请求,所述预读请求中携带读取数据失败的逻辑地址;
当从所述存储介质阵列中获取到数据时,接收预读响应消息,将所述获取的数据存储在所述读数据列表中;
根据所述IO请求消息需要读取的数据的原数据长度和所述读数据列表中所述IO请求消息对应的数据的当前数据长度,产生IO读响应消息,并返回所述IO读响应消息。
其中,所述将所述获取的数据存储在所述读数据列表中,包括:
如果所述读数据列表已满或者所述读数据列表未满且所述读数据列表剩余的空间小于所述获取的数据占用的空间,则从所述读数据列表的表头开始删除数据,以使所述获取的数据存储到所述读数据列表中;
如果所述读数据列表未满且所述读数据列表剩余的空间大于或等于所述获取的数据占用的空间,则将所述获取的数据直接插入所述读数据列表中。
进一步地,所述根据所述逻辑地址从所述缓存模块包括的读数据列表中读取对应的数据之前,还包括:
将所述IO请求消息存储在所述缓存模块包括的请求消息列表中;
相应地,所述根据所述IO请求消息需要读取的数据的原数据长度和所述读数据列表中所述IO请求消息对应的数据的当前数据长度,产生IO读响应消息,并返回所述IO读响应消息,包括:
将所述IO请求消息需要读取的数据的原数据长度与所述读数据列表中所述IO请求消息对应的数据的当前数据长度进行比较;
如果所述原数据长度等于所述当前数据长度,则根据所述预读响应消息从所述请求消息列表中删除所述IO请求消息,并产生IO读响应消息,返回所述IO读响应消息;
如果所述原数据长度大于所述当前数据长度,则销毁所述预读响应消息,继续等待,直至所述原数据长度等于当前数据长度,返回IO读响应消息。
可选地,所述返回IO写响应消息之后,还包括:
接收定时消息,获取所述写数据列表中的脏数据个数,所述脏数据为所述写数据列表中没有写入存储介质阵列的数据;
如果所述脏数据个数大于第一阈值且小于第二阈值,则从所述写数据列表中删除一个脏数据;
如果所述脏数据个数小于或等于所述第一阈值且系统空闲,则从所述写数据列表中删除一个脏数据;
如果所述脏数据个数大于或等于所述第二阈值且系统繁忙,则从所述写数据列表中删除一个脏数据;
如果所述脏数据个数大于或等于所述第二阈值且系统空闲,则从所述写数据列表中删除脏数据,直至所述写数据列表中脏数据个数小于所述第二阈值。
进一步地,所述接收输入输出IO请求消息之前,还包括:
确定存储阵列系统处理IO消息的系统性能模块,并根据所述系统性能模块建立消息路径;
建立所述消息路径包括的每个系统性能模块处理IO消息的路由规则。
在本发明实施例中,建立该存储阵列系统处理IO消息的路径,并对该消息路径包括的每个系统性能模块设置路由规则,根据该消息路径和该消息路径包括的每个系统性能模块的路由规则,将该IO请求消息进行处理,实现了对该存储阵列系统进行仿真。其中,由于该控制器阵列包括的缓存模块是影响存储阵列系统性能的最大关键模块,所以对该控制器和存储介质阵列都进行仿真,提高了对该存储阵列系统进行仿真的仿真度。
需要说明的是:上述实施例提供的对存储阵列系统的性能进行仿真的装置在对存储阵列系统的性能进行仿真时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的对存储阵列系统的性能进行仿真的装置与对存储阵列系统的性能进行仿真的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (17)

1.一种对存储阵列系统的性能进行仿真的方法,其特征在于,所述方法包括:
接收输入输出IO请求消息,所述IO请求消息中至少携带所述IO请求消息访问的逻辑地址;
根据预设的消息路径和所述消息路径包括的每个系统性能模块的路由规则,从存储阵列系统包括的控制器阵列中查找缓存模块;
根据所述IO请求消息访问的逻辑地址,在所述查找的缓存模块中读取或写入数据,以实现对所述存储阵列系统的性能进行仿真。
2.如权利要求1所述的方法,其特征在于,所述根据预设的消息路径和所述消息路径包括的每个系统性能模块的路由规则,从存储阵列系统包括的控制器阵列中查找缓存模块,包括:
将接收所述IO请求消息的系统性能模块确定为当前系统性能模块;
判断所述当前系统性能模块是否为所述控制器阵列包括的缓存模块;
如果是,则将所述当前系统性能模块确定为查找的缓存模块;
如果否,则根据预设的消息路径和所述当前系统性能模块的路由规则,将所述IO请求消息转发到所述消息路径包括的下一个系统性能模块,返回判断所述当前系统性能模块是否为所述控制器阵列包括的缓存模块。
3.如权利要求1所述的方法,其特征在于,如果所述IO请求消息为写请求消息,则所述IO请求消息中还携带待写入的数据,
相应地,所述根据所述IO请求消息访问的逻辑地址,在所述查找的缓存模块中读取或写入数据,包括:
如果所述IO请求消息为读请求消息,则根据所述逻辑地址从所述缓存模块中读取对应的数据,并返回IO读响应消息,所述IO读响应消息包括所述逻辑地址和读取的数据;
如果所述IO请求消息为写请求消息且采用回写方式写数据,则将所述待写入的数据插入所述缓存模块包括的写数据列表,并返回IO写响应消息。
4.如权利要求3所述的方法,其特征在于,所述根据所述逻辑地址从所述缓存模块中读取对应的数据,并返回IO读响应消息,包括:
根据所述逻辑地址从所述缓存模块包括的读数据列表中读取对应的数据;
如果读取到所述逻辑地址对应的所有数据,则产生IO读响应消息,返回所述IO读响应消息,并将所述读取的数据移动至所述读数据列表的表尾;
如果没有读取到数据或者读取到所述逻辑地址对应的部分数据,则向存储介质阵列发送预读请求,所述预读请求中携带读取数据失败的逻辑地址;
当从所述存储介质阵列中获取到数据时,接收预读响应消息,将所述获取的数据存储在所述读数据列表中;
根据所述IO请求消息需要读取的数据的原数据长度和所述读数据列表中所述IO请求消息对应的数据的当前数据长度,产生IO读响应消息,并返回所述IO读响应消息。
5.如权利要求4所述的方法,其特征在于,所述将所述获取的数据存储在所述读数据列表中,包括:
如果所述读数据列表已满或者所述读数据列表未满且所述读数据列表剩余的空间小于所述获取的数据占用的空间,则从所述读数据列表的表头开始删除数据,以使所述获取的数据存储到所述读数据列表中;
如果所述读数据列表未满且所述读数据列表剩余的空间大于或等于所述获取的数据占用的空间,则将所述获取的数据直接插入所述读数据列表中。
6.如权利要求4所述的方法,其特征在于,所述根据所述逻辑地址从所述缓存模块包括的读数据列表中读取对应的数据之前,还包括:
将所述IO请求消息存储在所述缓存模块包括的请求消息列表中;
相应地,所述根据所述IO请求消息需要读取的数据的原数据长度和所述读数据列表中所述IO请求消息对应的数据的当前数据长度,产生IO读响应消息,并返回所述IO读响应消息,包括:
将所述IO请求消息需要读取的数据的原数据长度与所述读数据列表中所述IO请求消息对应的数据的当前数据长度进行比较;
如果所述原数据长度等于所述当前数据长度,则根据所述预读响应消息从所述请求消息列表中删除所述IO请求消息,并产生IO读响应消息,返回所述IO读响应消息;
如果所述原数据长度大于所述当前数据长度,则销毁所述预读响应消息,继续等待,直至所述原数据长度等于当前数据长度,返回IO读响应消息。
7.如权利要求3所述的方法,其特征在于,所述返回IO写响应消息之后,还包括:
接收定时消息,获取所述写数据列表中的脏数据个数,所述脏数据为所述写数据列表中没有写入存储介质阵列的数据;
如果所述脏数据个数大于第一阈值且小于第二阈值,则从所述写数据列表中删除一个脏数据;
如果所述脏数据个数小于或等于所述第一阈值且系统空闲,则从所述写数据列表中删除一个脏数据;
如果所述脏数据个数大于或等于所述第二阈值且系统繁忙,则从所述写数据列表中删除一个脏数据;
如果所述脏数据个数大于或等于所述第二阈值且系统空闲,则从所述写数据列表中删除脏数据,直至所述写数据列表中脏数据个数小于所述第二阈值。
8.如权利要求1所述的方法,其特征在于,所述接收输入输出IO请求消息之前,还包括:
确定存储阵列系统处理IO消息的系统性能模块,并根据所述系统性能模块建立消息路径;
建立所述消息路径包括的每个系统性能模块处理IO消息的路由规则。
9.一种对存储阵列系统的性能进行仿真的装置,其特征在于,所述装置包括:
接收模块,用于接收输入输出IO请求消息,所述IO请求消息中至少携带所述IO请求消息访问的逻辑地址;
查找模块,用于根据预设的消息路径和所述消息路径包括的每个系统性能模块的路由规则,从存储阵列系统包括的控制器阵列中查找缓存模块;
读取或写入模块,用于根据所述IO请求消息访问的逻辑地址,在所述查找的缓存模块中读取或写入数据,以实现对所述存储阵列系统的性能进行仿真。
10.如权利要求9所述的装置,其特征在于,所述查找模块包括:
第一确定单元,用于将接收所述IO请求消息的系统性能模块确定为当前系统性能模块;
判断单元,用于判断所述当前系统性能模块是否为所述控制器阵列包括的缓存模块;
第二确定单元,用于如果是,则将所述当前系统性能模块确定为查找的缓存模块;
转发单元,用于如果否,则根据预设的消息路径和所述当前系统性能模块的路由规则,将所述IO请求消息转发到所述消息路径包括的下一个系统性能模块,返回判断所述当前系统性能模块是否为所述控制器阵列包括的缓存模块。
11.如权利要求9所述的装置,其特征在于,如果所述IO请求消息为写请求消息,则所述IO请求消息中还携带待写入的数据,
相应地,所述读取或写入模块包括:
读取单元,用于如果所述IO请求消息为读请求消息,则根据所述逻辑地址从所述缓存模块中读取对应的数据,并返回IO读响应消息,所述IO读响应消息包括所述逻辑地址和读取的数据;
插入单元,用于如果所述IO请求消息为写请求消息且采用回写方式写数据,则将所述待写入的数据插入所述缓存模块包括的写数据列表,并返回IO写响应消息。
12.如权利要求11所述的装置,其特征在于,所述读取单元包括:
读取子单元,用于根据所述逻辑地址从所述缓存模块包括的读数据列表中读取对应的数据;
移动子单元,用于如果读取到所述逻辑地址对应的所有数据,则产生IO读响应消息,返回所述IO读响应消息,并将所述读取的数据移动至所述读数据列表的表尾;
发送子单元,用于如果没有读取到数据或者读取到所述逻辑地址对应的部分数据,则向存储介质阵列发送预读请求,所述预读请求中携带读取数据失败的逻辑地址;
第一存储子单元,用于当从所述存储介质阵列中获取到数据时,接收预读响应消息,将所述获取的数据存储在所述读数据列表中;
产生子单元,用于根据所述IO请求消息需要读取的数据的原数据长度和所述读数据列表中所述IO请求消息对应的数据的当前数据长度,产生IO读响应消息,并返回所述IO读响应消息。
13.如权利要求12所述的装置,其特征在于,
所述第一存储子单元,具体用于:
如果所述读数据列表已满或者所述读数据列表未满且所述读数据列表剩余的空间小于所述获取的数据占用的空间,则从所述读数据列表的表头开始删除数据,以使所述获取的数据存储到所述读数据列表中;
如果所述读数据列表未满且所述读数据列表剩余的空间大于或等于所述获取的数据占用的空间,则将所述获取的数据直接插入所述读数据列表中。
14.如权利要求12所述的装置,其特征在于,所述读取单元还包括:
第二存储子单元,用于将所述IO请求消息存储在所述缓存模块包括的请求消息列表中;
相应地,所述产生子单元,具体用于:
将所述IO请求消息需要读取的数据的原数据长度与所述读数据列表中所述IO请求消息对应的数据的当前数据长度进行比较;
如果所述原数据长度等于所述当前数据长度,则根据所述预读响应消息从所述请求消息列表中删除所述IO请求消息,并产生IO读响应消息,返回所述IO读响应消息;
如果所述原数据长度大于所述当前数据长度,则销毁所述预读响应消息,继续等待,直至所述原数据长度等于当前数据长度,返回IO读响应消息。
15.如权利要求11所述的装置,其特征在于,所述读取或写入模块还包括:
获取单元,用于接收定时消息,获取所述写数据列表中的脏数据个数,所述脏数据为所述写数据列表中没有写入存储介质阵列的数据;
第一删除单元,用于如果所述脏数据个数大于第一阈值且小于第二阈值,则从所述写数据列表中删除一个脏数据;
第二删除单元,用于如果所述脏数据个数小于或等于所述第一阈值且系统空闲,则从所述写数据列表中删除一个脏数据;
第三删除单元,用于如果所述脏数据个数大于或等于所述第二阈值且系统繁忙,则从所述写数据列表中删除一个脏数据;
第四删除单元,用于如果所述脏数据个数大于或等于所述第二阈值且系统空闲,则从所述写数据列表中删除脏数据,直至所述写数据列表中脏数据个数小于所述第二阈值。
16.如权利要求9所述的装置,其特征在于,所述装置还包括:
第一建立模块,用于确定存储阵列系统处理IO消息的系统性能模块,并根据所述系统性能模块建立消息路径;
第二建立模块,用于建立所述消息路径包括的每个系统性能模块处理IO消息的路由规则。
17.一种对存储阵列系统的性能进行仿真的装置,其特征在于,所述装置包括:存储器和处理器,用于执行如权利要求1-8任一权利要求所述一种对存储阵列系统的性能进行仿真的方法。
CN201310529354.0A 2013-10-30 2013-10-30 一种对存储阵列系统的性能进行仿真的方法及装置 Expired - Fee Related CN103605833B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310529354.0A CN103605833B (zh) 2013-10-30 2013-10-30 一种对存储阵列系统的性能进行仿真的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310529354.0A CN103605833B (zh) 2013-10-30 2013-10-30 一种对存储阵列系统的性能进行仿真的方法及装置

Publications (2)

Publication Number Publication Date
CN103605833A true CN103605833A (zh) 2014-02-26
CN103605833B CN103605833B (zh) 2017-01-04

Family

ID=50124054

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310529354.0A Expired - Fee Related CN103605833B (zh) 2013-10-30 2013-10-30 一种对存储阵列系统的性能进行仿真的方法及装置

Country Status (1)

Country Link
CN (1) CN103605833B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104778015A (zh) * 2015-02-04 2015-07-15 北京神州云科数据技术有限公司 一种磁盘阵列性能优化方法及系统
CN105760108A (zh) * 2014-12-16 2016-07-13 华为数字技术(苏州)有限公司 一种数据存储的方法和装置
CN106934081A (zh) * 2015-12-29 2017-07-07 伊姆西公司 磁盘驱动器模拟方法和装置
CN108846248A (zh) * 2018-08-27 2018-11-20 中国科学院计算技术研究所 一种应用建模及性能预测方法
CN114490224A (zh) * 2022-03-31 2022-05-13 苏州浪潮智能科技有限公司 存储阵列的性能检测方法、系统、电子设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020169589A1 (en) * 2000-12-29 2002-11-14 Banki Attila D. Computer system and method having a facility management logic architecture
CN102945213A (zh) * 2012-09-24 2013-02-27 无锡众志和达存储技术股份有限公司 一种基于fpga的乱序内存控制器及其实现方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020169589A1 (en) * 2000-12-29 2002-11-14 Banki Attila D. Computer system and method having a facility management logic architecture
CN102945213A (zh) * 2012-09-24 2013-02-27 无锡众志和达存储技术股份有限公司 一种基于fpga的乱序内存控制器及其实现方法

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105760108A (zh) * 2014-12-16 2016-07-13 华为数字技术(苏州)有限公司 一种数据存储的方法和装置
CN105760108B (zh) * 2014-12-16 2018-12-07 华为数字技术(苏州)有限公司 一种数据存储的方法和装置
CN104778015A (zh) * 2015-02-04 2015-07-15 北京神州云科数据技术有限公司 一种磁盘阵列性能优化方法及系统
CN106934081A (zh) * 2015-12-29 2017-07-07 伊姆西公司 磁盘驱动器模拟方法和装置
CN106934081B (zh) * 2015-12-29 2020-03-20 伊姆西Ip控股有限责任公司 磁盘驱动器模拟方法和装置
CN108846248A (zh) * 2018-08-27 2018-11-20 中国科学院计算技术研究所 一种应用建模及性能预测方法
CN114490224A (zh) * 2022-03-31 2022-05-13 苏州浪潮智能科技有限公司 存储阵列的性能检测方法、系统、电子设备及存储介质
CN114490224B (zh) * 2022-03-31 2022-08-09 苏州浪潮智能科技有限公司 存储阵列的性能检测方法、系统、电子设备及存储介质

Also Published As

Publication number Publication date
CN103605833B (zh) 2017-01-04

Similar Documents

Publication Publication Date Title
CN102467408B (zh) 一种虚拟机数据的访问方法和设备
TWI735545B (zh) 一種模型的訓練方法和裝置
CN102111448B (zh) 分布式哈希表dht存储系统的数据预取方法、节点和系统
CN104850358B (zh) 一种磁光电混合存储系统及其数据获取和存储方法
CN103605833A (zh) 一种对存储阵列系统的性能进行仿真的方法及装置
CN111046072A (zh) 一种数据查询方法、系统、异构计算加速平台及存储介质
CN104156380A (zh) 一种分布式存储器哈希索引方法及系统
CN105243033A (zh) 数据处理方法及电子设备
CN112632069B (zh) 哈希表数据存储管理方法、装置、介质和电子设备
CN103747072A (zh) 一种读写数据的方法和应用服务器
CN103716174A (zh) 测试日志撷取系统及方法
CN105808163A (zh) 一种访问叠瓦式磁记录smr硬盘的方法及服务器
CN103914483A (zh) 文件存储方法、装置及文件读取方法、装置
CN111258978A (zh) 一种数据存储的方法
CN104657435A (zh) 一种应用数据的存储管理方法和网络管理系统
CN103002046A (zh) 多系统数据拷贝的rdma架构
CN103488523A (zh) 一种页的访问方法和页的访问装置、服务器
CN109086141A (zh) 内存管理方法和装置以及计算机可读存储介质
CN102959548A (zh) 数据存储方法、查找方法及装置
CN101576854A (zh) 文件访问的方法、装置及系统
CN108304142B (zh) 一种数据管理方法和装置
US20130339612A1 (en) Apparatus and method for testing a cache memory
CN111831691B (zh) 一种数据读写方法及装置、电子设备、存储介质
CN110727399A (zh) 存储阵列管理方法及装置
CN107430546A (zh) 一种文件更新方法及存储设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20170104

Termination date: 20191030