CN105512052A - 用于处理输入输出操作请求的方法和装置 - Google Patents

用于处理输入输出操作请求的方法和装置 Download PDF

Info

Publication number
CN105512052A
CN105512052A CN201410562464.1A CN201410562464A CN105512052A CN 105512052 A CN105512052 A CN 105512052A CN 201410562464 A CN201410562464 A CN 201410562464A CN 105512052 A CN105512052 A CN 105512052A
Authority
CN
China
Prior art keywords
buffer memory
cache table
memory lattice
lattice
address scope
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
CN201410562464.1A
Other languages
English (en)
Other versions
CN105512052B (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.)
EMC Corp
Original Assignee
EMC Corp
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 EMC Corp filed Critical EMC Corp
Priority to CN201410562464.1A priority Critical patent/CN105512052B/zh
Priority to US14/883,082 priority patent/US9971643B2/en
Publication of CN105512052A publication Critical patent/CN105512052A/zh
Application granted granted Critical
Publication of CN105512052B publication Critical patent/CN105512052B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/145Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being virtual, e.g. for virtual blocks or segments before a translation mechanism
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0689Disk arrays, e.g. RAID, JBOD

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Computer Security & Cryptography (AREA)
  • Quality & Reliability (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明的各实施例提供了一种用于处理输入输出IO操作请求的方法和装置。该方法在包括第一处理器和第二处理器的存储设备中使用,包括:为多个存储阵列组中的每一个维护第一链表以及第一缓存表,第一链表至少保持关于第一处理器所允许的、对相应存储阵列组中的特定存储地址范围的IO操作请求的信息,并且第一缓存表包括第一多个缓存格,每个缓存格保持第二处理器对相应存储阵列组中的特定存储地址范围的IO操作的允许状态;针对第一多个缓存格中的其对应存储地址范围的IO操作请求的次数超过第一预定阈值的缓存格生成包括第二多个缓存格的第二缓存表;以及至少基于第一链表和第一缓存表和/或第二缓存表处理第一处理器接收到的IO操作请求。

Description

用于处理输入输出操作请求的方法和装置
技术领域
本发明的实施例一般地涉及存储领域,并且具体地涉及一种用在包括双处理器的存储设备中对输入输出操作请求进行处理的方法和装置。
背景技术
在存储领域中,包括双存储处理器(SP)的双活(active-active)架构是指能够在两个SP上对相同的RAID(独立盘冗余阵列)组、或对相同的条带(stripe)/逻辑块地址(LBA)区域的并行输入输出(IO)操作请求进行同时处理的架构。这种双活架构使得具有双SP的存储设备的性能得到了显著的提高。例如,当一个SP宕机时,另一个仍在运行的SP可以立即接管所有的逻辑单元(LUN),从而使得在故障过程中用户数据能够保持安全、可靠而且仍然可以被访问。
然而,双SP双活架构的这种操作方式要求双SP存储设备的存储阵列必须在共享的RAID组或RAID条带上保持同步,以避免并行的IO操作搅乱了用户数据。
在当前的双SP双活架构中,为了能够严格控制来自两个SP的读/写操作请求,提出了条带锁(stripelock,SL)的概念。所谓的条带锁实质上是一种用于一个RAID条带的读/写锁。这种读/写锁的基本目的在于能够同时允许对RAID条带的同一个存储区域的多个读操作,但是在一个时间仅允许对同一个存储区域的一个写操作。每一个IO操作在被处理之前都必须首先在从本地SP(即,接收到该IO操作请求的SP)获得本地的条带锁(即,获得本地SP对执行该IO操作的许可)、然后从对端SP获得对端的条带锁(即,获得对端SP对执行该IO操作的许可)。当从本地SP和对端SP二者获得了条带锁后,所请求的IO操作才可以被执行。在IO操作结束后,所获得的对应条带锁都将被释放。在以下描述中所使用的“获得条带锁”和“获得对IO操作的许可”以及类似表述具有相同或相似的含义。
图1示出了现有技术中所使用的条带锁的概念图。在图1中示出了四个磁盘阵列,该四个磁盘阵列构成一个RAID条带并且可以被并行的读取或者写入。如图1所示,当处理器SPA接收到针对所示出的条带的某个存储地址范围的IO操作请求后,将首先从本地SPA获得用于该IO操作的条带锁,即首先从SPA获得执行该IO操作的许可,然后从对端SPA获得用于该IO操作的条带锁,即从对端SPA获得执行该IO操作的许可,随后方可执行所请求的对该条带的IO操作。
为了保证对条带锁的正确使用,需要遵循三条原则:对锁的获取请求需要遵循IO操作请求的接收顺序;对于写操作,必须使用一个独占的锁来保护将被写入的存储地址区域不被其他并行的读操作或写操作占用;并且对于一个读操作,可以使用一个共享锁以使得其他读操作可以同时访问同一个存储地址区域,但是对该存储地址区域的写操作不能进行。
现有的条带锁机制包括两种重要的数据结构,一种被称为条带锁链表并且另一种被称为条带锁缓存表(其具体结构和操作将在下文中详细描述)。在具有双SP的存储设备中,在每一个SP处针对每一个存储阵列组(例如RAID组)都维护一个条带锁链表和一个条带锁缓存表。该条带锁链表记录了关于本地SP(例如图1中的SPA)已经许可的、对于存储阵列组所包括的特定存储地址区域的IO操作请求的信息,而条带锁缓存表记录了对端SP(例如图1中的SPB)对于针对存储阵列组所包括的各存储地址区域的IO操作的当前允许状态。
如前所述,当一个SP接收到与其关联的RAID组的某个存储地址范围的IO操作请求时,该SP首先查询针对该RAID组存储的本地条带锁链表以确保对该存储地址范围的IO操作在本地是被允许的。如果该SP不允许对该存储地址范围的IO操作,则将该IO操作请求置于本地存储的条带锁链表中的等待链中;否则,该SP将继而查询针对该RAID组存储的条带锁缓存表以判断对端SP是否允许所请求的对该存储地址范围的IO操作。
条带锁缓存表通常包括多个缓存格(cacheslot),每一个缓存格对应地表示对端SP对于特定存储地址范围的IO操作的当前允许状态,其决定了条带锁的粒度。如果本地SP对条带锁缓存表的查询结果显示不允许对特定存储地址范围的IO操作,这也就意味着对端SP保持了对该特定存储地址范围的条带锁,那么本地SP将需要通过CMI信道发送一个CMI消息到对端SP以请求对该IO操作的许可。CMI信道是嵌入在存储阵列基板中的并且建立在PCIe链路上的跨SP的信道。该CMI消息需要通过CMI消息收发栈中的对应协议来处理。
通常,通过CMI信道传递CMI消息的速度远远低于本地处理器的存储器内操作的速度、诸如查询本地存储的条带锁缓存表的速度。因此CMI消息的传递成为目前利用条带锁技术的存储设备的瓶颈,而发送CMI消息的频率主要由条带锁缓存格的粒度决定,诸如IO模式、IO负载等其他因素对其的影响相比而言较小。
目前常用的条带锁缓存表通常包括512个缓存格。这种较粗的粒度一方面降低了存储器用于条带锁缓存表的存储预算,但另一方面却增加了存储设备内条带锁冲突的几率。这里所使用的“条带锁冲突”指的是本地SP和对端SP希望同时对同一存储地址范围进行IO操作的冲突,该IO操作至少包括一个写操作。如果一个条带锁缓存格对应的存储地址范围越大,那么对该存储地址范围的IO操作冲突的几率就会越大。这就意味着需要发送更多的CMI消息,从而降低了存储设备的性能。如果一个条带锁缓存格对应的存储地址范围较小,那么一方面对该存储地址范围的IO操作冲突的几率可能降低,但另一方面却需要更多的存储器空间来保持这些条带锁缓存格。
发明内容
针对上述问题,本发明的各示例性实施例提供了一种能够在CMI消息的传输频率以及存储器占用量之间权衡的解决方案。
根据本发明的一个方面,提供了一种用于处理存储设备中的输入输出操作请求的方法,该存储设备包括第一处理器和第二处理器并且包括多个存储阵列组,该方法包括在第一处理器处,针对多个存储阵列组中的每一个存储阵列组维护第一链表以及第一缓存表,其中该第一链表至少保持关于第一处理器所允许的、对相应存储阵列组中的特定存储地址范围的输入输出操作请求的信息,并且该第一缓存表包括第一多个缓存格,其中的每个缓存格保持第二处理器对所述相应存储阵列组中的特定存储地址范围的输入输出操作的允许状态。该方法还包括针对第一多个缓存格中的一个或多个下述缓存格中的一个或多个分别生成第二缓存表:针对该缓存格所对应的特定存储地址范围的输入输出操作请求的次数超过第一预定阈值,其中所述第二缓存表包括第二多个缓存格并且该第二多个缓存格中的每一个缓存格的大小小于第一多个缓存格中的每一个缓存格的大小。该方法进一步包括至少基于第一链表以及第一缓存表和/或第二缓存表对第一处理器接收到的输入输出操作请求进行处理。
在一些实施例中,该方法还可以包括,如果第二缓存表中的第二多个缓存格所保持的允许状态都是相同状态,则可以将第一多个缓存格中的、针对其生成该第二缓存表的缓存格设置为该相同状态并删除该第二缓存表。
在另一些实施中,该方法还可以包括,首先判断针对第二缓存表所对应的存储地址范围的输入输出操作请求的次数是否低于第二预定阈值,如果该次数低于第二预定阈值,则将该第二缓存表收回。
根据本发明的另一方面,提供了一种用于处理存储设备中的输入输出操作请求的装置,该存储设备包括第一处理器和第二处理器并且包括多个存储阵列组,该装置包括表维护单元,其被配置为在第一处理器处,针对多个存储阵列组中的每一个存储阵列组维护第一链表以及第一缓存表,其中第一链表至少保持关于第一处理器所允许的、对相应存储阵列组中的特定存储地址范围的输入输出操作请求的信息,并且第一缓存表包括第一多个缓存格,其中的每个缓存格保持第二处理器对所述相应存储阵列组中的特定存储地址范围的输入输出操作的允许状态。该装置还包括子表生成单元,其被配置为针对第一多个缓存格中的一个或多个下述缓存格中的一个或多个分别生成第二缓存表:针对该缓存格所对应的特定存储地址范围的输入输出操作请求的次数超过第一预定阈值,其中第二缓存表包括第二多个缓存格并且该第二多个缓存格中的每一个缓存格的大小小于第一多个缓存格中的每一个缓存格的大小。该装置进一步包括操作请求处理单元,其被配置为至少基于第一链表以及第一缓存表和/或第二缓存表对第一处理器接收到的输入输出操作请求进行处理。
在一些实施例中,该装置还可以包括子表收回单元,其被配置为如果第二缓存表中的第二多个缓存格所保持的允许状态都是相同状态,则可以将第一多个缓存格中的、针对其生成该第二缓存表的缓存格设置为该相同状态并删除该第二缓存表。
在另一些实施中,该装置还可以包括子表收回单元,其被配置为首先判断针对第二缓存表所对应的存储地址范围的输入输出操作请求的次数是否低于第二预定阈值,如果该次数低于第二预定阈值,则将该第二缓存表收回。
附图说明
结合附图并参考以下详细说明,本发明各实施方式的特征、优点及其他方面将变得更加明显,在此以示例性而非限制性的方式示出了本发明的若干实施方式。在附图中相同或相近的附图标记指示相同或相近的单元或元素,其中:
图1示出了现有技术中所使用的条带锁的概念图;
图2示出了在现有技术中的双SP存储设备中所使用的条带锁链表示意图;
图3示出了在现有技术中的双SP存储设备中所使用的条带锁缓存表的示意图;
图4示出了在现有技术的双SP存储设备中对于IO操作请求的完整处理过程;
图5示出了用以说明根据本发明的一些实施例的用于动态生成分级条带锁缓存表的方法的示例框图;
图6示出了根据本发明的一些实施例的针对子缓存表中所记录的状态彼此不同的情况收回子缓存表的方法的一个示例;
图7示出了根据本发明的实施例的一种用于在存储设备中处理输入输出操作请求的方法700的流程图;以及
图8示出了根据本发明的实施例的一种用于在存储设备中处理输入输出操作请求的装置800的结构图。
具体实施方式
以下将参考附图详细描述本发明的各个示例性实施例。
应当理解,给出这些示例性实施例仅仅是为了使本领域技术人员能够更好地理解并进而实现本发明,而并非以任何方式限制本发明的范围。
在本文中,对“一个实施例”、“另一实施例”或“一个优选实施例”等的引用指示所描述的实施例可以包括特定特征、结构或特性,但每个实施例不一定必须包括该特定特征、结构或特性。而且,这些术语并不一定指相同的实施例。
还应理解,在此处使用的各种术语仅用于描述特定实施例的目的,而不旨在于限制本发明。如这里使用的单数形式“一”和“该”可以包括复数形式,除非上下文中有明确的相反指示。还应理解,此处使用的术语“包括”、“具有”和“包含”指示所述特征、单元和/或组件等的存在,但不排除一个或多个其他特征、单元、组件和/或其组合的存在。如这里使用的术语“多个”表示“两个或更多”。如这里使用的术语“和/或”可以包括关联列出的各项中的一项或多项的任何和所有组合。其他术语的定义将在下文描述中具体给出。
为了更清楚地阐述本发明的各实施例,首先对现有的条带锁链表和条带锁缓存表的结构和操作进行介绍。
图2图示了在现有技术中的双SP存储设备中所使用的条带锁链表示意图。如图所示,该存储设备包括两个SP,即SPA和SPB。每一个SP针对每一个存储阵列组(例如RAID组)存储了一个条带锁链表,分别如图2(a)和图2(b)所示SPA条带锁链表(其也被称为SPA的本地条带锁链表)和SPB条带锁链表(其也被称为SPB的本地条带锁链表)。每个条带锁链表都至少包括一个“允许链”,如图2所示的纵向链,该允许链表示当前本地SP已经允许的、对存储阵列组的特定存储地址范围(例如LBA范围)的IO操作请求的信息。每个纵向链包括多个记录,其在图2中由方框表示。每个记录可以例如包含三个字段{存储地址范围、操作、请求侧}。图2中以“LBA范围”表示存储地址范围。该LBA范围字段记录了已被本地SP允许的IO操作请求所针对的LBA的范围;操作字段记录了已被本地SP允许的IO操作请求的类型,即写操作(W)或者读操作(R);并且请求侧字段记录了该允许的IO操作请求是来自本地SP还是对端SP。例如,如图2(a)中的纵向链中的第一个方框所示,其中的三个字段是“LBA/R/P”,这就意味着本地SP、即SPA已经允许了来自对端SP的对LBA所表示的LBA范围的读操作请求。
每个条带锁链表还可以附加地包含一个或多个等待链,该一个或多个等待链在图2中被表示为一条或多条横向链。等待链中的每个记录表示还未被本地SP允许的IO操作请求,并且同样包含三个字段{LBA范围、操作、请求侧},每个字段的含义如上所述,在此不再赘述。如图2(a)中的横向链中的方框所示,其中的三个字段为“LBA/W/L”,其表明了本地SP、即SPA尚未允许来自SPA的对LBA所表示的LBA范围的写操作请求。
当SP接收到针对存储阵列组的某个存储地址范围的一个新的IO操作请求(该SP在下文中被简称为本地SP)时,本地SP首先要查询针对该存储阵列组所存储的条带锁链表,如果该新的IO操作请求与已经被允许的IO操作请求不冲突,那么本地SP便可以允许该新的IO操作请求并将记录该IO操作请求的信息的一个新的记录添加到该条带锁链表中的允许链的顶端;否则,本地SP不允许该新的IO操作请求并将相应的记录添加到与该IO操作请求所针对的存储地址范围对应的等待链中。例如如图2(a)所示,当新的IO操作请求是由对端SP请求的针对框201中的LBA所表示的LBA范围的一部分或全部的写操作,那么通过查询SPA条带锁链表可以发现目前已经允许了来自对端的针对该地址范围的读操作,因此该新的写操作请求将不能够被允许。作为结果,SPA将一个新的记录添加到与该存储地址范围对应的等待链中,如图2(a)所示,将一个新的方框202添加到方框201的右侧。
对于已经被本地SP允许的IO操作请求,在该请求的IO操作被执行之前,本地SP还需要进一步查询所存储的条带锁缓存表,如图3所示。
图3图示了在现有技术中的双SP存储设备中所使用的条带锁缓存表的示意图。延续参照图2所述的内容,该存储设备包括两个SP,即SPA和SPB。每个SP针对每个存储阵列组存储了一个条带锁缓存表,即SPA条带锁缓存表(其也被称为SPA的本地条带锁缓存表)和SPB条带锁缓存表(其也被称为SPB的本地条带锁缓存表)。每个条带锁缓存表包括多个缓存格。每个缓存格对应于存储阵列组的特定存储地址范围,例如如果一个RAID组的容量大小为4T,那么每个缓存格对应4T/512=8G的范围。
每一个缓存格中记录了对端SP对于该缓存格所对应的存储地址范围的当前允许状态。该允许状态包括三种类型:独占、空闲和共享。
“独占”状态表示对端SP总是允许本地SP对该缓存格所对应的存储地址范围的读和写操作。也就是说当本地SP接收到一个新的IO操作请求时,在查询了条带锁缓存表之后发现与该新的IO请求所针对的存储地址范围对应的缓存格所指示的允许状态是“独占”,那么该SP将不必再请求对端SP对该IO操作的许可。
“空闲”状态表示对与该缓存格所对应的存储地址范围的任何IO操作都必须获得对端SP的许可。
“共享”状态表示对与该缓存格所对应的存储地址范围的读操作请求只要得到本地SP的许可便可执行,而无需获得对端SP的许可;但是对与该缓存格所对应的存储地址范围的写操作请求必须获得本地SP和对端SP二者的许可方可执行。
此外,对于同一存储地址范围,如果一个SP对其所持的允许状态是“独占”,那么另一个SP对其所持的允许状态必须是“空闲”;并且如果一个SP对其所持的允许状态是“共享”,那么另一个SP对其所持的允许状态也是“共享”。
图4图示了在现有技术的双SP存储设备中对于IO操作请求的完整处理过程,其中以SPA和SPB表示存储设备所包括的两个SP。图中圆圈中的数字表示处理步骤的顺序。该处理过程开始于SPA接收到一个IO操作请求。
接收到该请求后,SPA首先在步骤①查询存储的SPA条带锁链表,如果在步骤①的查询结果指示该IO操作请求与已经被允许的IO操作冲突,则将与该新的IO操作请求对应的记录添加到该条带锁链表的等待链中,如图所示的横向链中,然后该处理过程结束。
如果在步骤①的查询结果指示该新的IO操作请求与已经被允许的IO操作都不冲突,则将与该新的IO操作请求对应的记录添加到SPA条带锁链表的允许链(如图所示的纵向链)的顶端,然后继续在步骤②中对SPA条带锁缓存表进行查询。
如果在步骤②的查询结果指示对端SPB对该新的IO操作请求所针对的存储地址范围的允许状态是“独占”,则意味着对端SPB总是允许SPA对该存储地址范围的任何IO操作,那么该新的IO操作请求可以被允许执行。
如果在步骤②的查询结果指示对端SPB对该新的IO操作请求所针对的存储地址范围的允许状态是“空闲”,则意味着本地SPA对该存储地址范围的任何IO操作请求都需要获得对端SPB的许可,因此处理过程进入步骤③。类似地,如果该新的IO操作请求是写操作请求并且在步骤②的查询结果指示对端SPB对该新的IO操作请求所针对的存储地址范围的允许状态是“共享”,那么也要进入步骤③。
在步骤③中,SPA向SPB发送CMI消息以请求SPB对该新的IO操作请求的许可。
SPB在接收到该CMI消息后,在步骤④中对SPB条带锁链表进行查询,如果在步骤④中的查询结果指示该新的IO操作请求与SPB已经许可的IO操作冲突,则将与该新的IO操作请求对应的记录添加到SPB条带锁链表的等待链中,即如图所示的横向链中,然后该处理过程结束。
如果在步骤④中的查询结果指示该新的IO操作请求与所有已经被SPB允许的IO操作都不冲突,则将与该新的IO操作请求对应的记录添加到SPB条带锁链表的允许链的顶端,即如图所示的右侧纵向链的顶端。然后,在步骤⑤中SPB向SPA发送回CMI消息以向SPA通知其允许该新的IO操作请求。
在步骤⑥中,SPA接收到该CMI消息之后,更新SPA条带锁缓存表的对应缓存格中的允许状态,并开始执行所请求的IO操作。例如,如果新的IO操作请求是写操作请求,那么当该写操作请求被许可执行后,将SPA条带锁缓存表中的对应缓存格更新为“独占”,并且相应地对端SPB将SPB条带锁缓存表中的对应缓存格中的状态更新为“空闲”。再例如,如果新的IO操作请求是读操作请求,并且SPA条带锁缓存表中的对应缓存格当前的状态是“空闲”,那么在该新的IO操作请求被允许执行后,可以将该对应缓存格的状态更新为“共享”,并且相应地对端SPB的条带锁缓存表中的对应缓存格的状态也被更新为“共享”。
需要指出的是,对一个缓存格记录的状态的更新是与该缓存格所对应的整个存储地址范围的允许状态的改变相关联的。换句话说,如果SPA要更新SPA条带锁缓存表中的某个缓存格记录的状态,SPA需要针对该缓存格所对应的整个存储地址范围来请求对端SPB的许可。例如,如果SPA接收到了一个仅针对某个缓存格所对应的整个地址范围的一部分的写请求,但是SPA希望将该缓存格的状态更新为“独占”,那么SPA可以向SPB请求对该缓存格所对应的整个存储地址范围的写操作的许可来完成对该缓存格的更新。
此外,在对所请求的IO操作执行完毕之后,SPA可以删除SPA条带锁链表上的对应的记录,即删除如图4左侧所示出的纵链上的对应方框,同时可以在步骤⑦中向SPB发送CMI消息以通知SPB删除SPB条带锁链表上的对应记录。该步骤⑦中的操作也可以紧接在步骤⑤之后执行。
为了说明图4中所示的处理方法的性能,在下表1中给出了一个简单的模型。
表1
在该模型中,假设SPASL缓存表中对应于地址范围LBA1的缓存格中的状态是“独占”,相应的SPBSL缓存表中的缓存格中的状态是“空闲”;SPASL缓存表中对应于地址范围LBA2的缓存格中的状态是“共享”,相应的SPBSL缓存表中的缓存格中的状态也是“共享”;SPASL缓存表中对应于地址范围LBA3的缓存格中的状态是“空闲”,相应的SPBSL缓存表中的缓存格中的状态是“独占”;并且SPA接收到N个新的IO操作请求、SPB也接收到N个新的IO操作请求,那么通过如下几种情况来分析现有的条带锁处理方法的性能:
1、如果所有新的IO操作请求都是针对LBA1的读请求,那么对于SPA来说,不需要发送任何CMI消息;而对于SPB来说,每一个读请求都需要发送3个CMI消息,即:第一个CMI消息用于请求对端SPA的读许可,即请求获得条带锁;第二个CMI消息用于由SPA向SPB授予该许可,即授予条带锁;第三个CMI消息用于由SPB向SPA通知释放所获得的条带锁;那么总共需要发送3N个CMI消息;并且
如果所有新的IO操作请求都是针对LBA1的写请求,那么对于SPA来说,不需要发送任何CMI消息;而对于SPB来说,每一个写请求都需要发送3个CMI消息,即:第一个CMI消息用于请求对端SPA的写许可,即请求获得条带锁;第二个CMI消息用于由SPA向SPB授予该许可,即授予条带锁;第三个CMI消息用于由SPB向SPA通知释放所获得的条带锁;那么总共需要发送3N个CMI消息;
2、如果所有新的IO操作请求都是针对LBA2的读请求,那么无论是SPA还是SPB,都不需要发送任何CMI消息;并且
如果所有新的IO操作请求都是针对LBA2的写请求,那么无论是SPA还是SPB,对于每一个写请求,都需要发送3个CMI消息,即:第一个CMI消息用于请求对端SP的写许可;第二个CMI消息用于由对端SP授予该许可;第三个CMI消息用于向对端SP通知释放所获得的条带锁。那么总共需要发送6N个CMI消息。
3、如果接收到的所有新的IO操作请求都是针对LBA3的请求,那么情况与1类似,在此不再赘述。
从上述性能分析可以看出,在现有的条带锁处理方法中,每一个条带锁缓存格所对应的存储地址范围是固定的并且是相对较大的,也就是说当前的条带锁缓存表使用了较粗的粒度。这种粗粒度增加了IO操作请求冲突的几率,从而导致较高频率的CMI传输。而通过CMI信道的这种传输降低了存储设备的处理速度,进而使得存储设备的性能下降。
针对上述问题,本发明的各实施例提出了一种增强的条带锁处理方案。该增强的条带锁处理方案至少通过在存储设备的使用过程中动态地产生分级的条带锁缓存表来实现,从而能够解决现有技术中的条带锁处理方法中的至少一些问题。在以下描述中,出于简洁的目的,与上述介绍的条带锁处理方法步骤以及概念定义等相同的部分将不再赘述。
图5示出了用以说明根据本发明的一些实施例的用于动态生成分级条带锁缓存表的方法的示例框图。
如图5所示,当包括双SP的存储设备初始化时,每一个SP针对存储设备所包括的每一个存储阵列组(例如RAID组)生成一个单独的条带锁缓存表(以下简称为缓存表),该缓存表被称为0级缓存表,其包括多个缓存格。每一个缓存格对应于存储阵列组中的特定的存储地址范围(例如LBA范围)或者对应于一定的存储空间大小。
随后在该存储设备的使用过程中,如果对于0级缓存表中的多个缓存格中的某一个或多个缓存格所对应的特定存储地址范围的IO操作请求的次数超过了第一预定阈值,那么可以例如将该一个或多个缓存格标记为“热”缓存格。
随后,针对该一个或多个热缓存格中的每个热缓存格生成一个新的缓存表,新生成的缓存表被称为1级缓存表,从其生成该1级缓存表的缓存格被称为该1级缓存表的父缓存格,相应地该1级缓存表被称为其父缓存格的子缓存表。该1级缓存表例如可以通过一个指针被链接到其对应的父缓存格。例如,如图5所示,0级缓存表中的缓存格2链接到一个1级缓存表,那么缓存格2是其所链接到的1级缓存表的父缓存格,相应地该1级缓存表为缓存格2的子缓存表。每一个1级缓存表同样包括多个缓存格。1级缓存表中的每一个缓存格所对应的存储空间的大小是其对应的父缓存格所对应的存储空间的大小除以1级缓存表中的缓存格的数目而得到的数值,其可以通过本领域技术人员熟知的转换方法被转换为相应的存储地址范围,在此不再赘述。在一个优选实施例中,1级缓存表中的缓存格的数目可以与其上一级、即0级缓存表中的缓存格的数目相同。
类似地,如果在随后对存储设备的使用过程中,对于前一级、第N-1级(如图5所示的1级)缓存表中的多个缓存格中的某一个或多个缓存格所对应的存储地址范围的IO操作请求的次数超过了第二预定阈值,即所谓的变“热”,那么可以将该一个或多个缓存格标记为“热”缓存格,通常第二预定阈值小于第一预定阈值。随后,针对该一个或多个热缓存格中的每个热缓存格生成一个新的缓存表,该新生成的缓存表被称为N级(如图5所示的2级)缓存表,从其生成该第N级缓存表的缓存格是该第N级缓存表的父缓存格。N级缓存表所对应的存储地址范围与其父缓存格对应的存储地址范围相同。同样,该第N级缓存表可以通过一个指针被链接到其对应的父缓存格。
以此类推,可以在存储设备的使用过程中动态地建立一个多级缓存链表,各级之间例如可以通过指针链接。通过建立多级缓存链表,可以有效地降低缓存表粒度,从而能够在兼顾缓存表所占用的存储器空间的情况下减小IO操作冲突的机率。
在一个实施例中,可以通过为待建立的多级缓存链表设定所允许的最大存储器空间来限制该多级缓存链表可能包括的最大缓存表级数。例如,如果当前的多级缓存链表所占用的存储器空间已经达到预先设定的最大值,那么将不再允许继续生成更多的子缓存表。
本领域技术人员应当理解,上述示例仅是示例性的,并不以任何特定的方式限制本发明。例如,可以直接针对变“热”的缓存格生成子缓存表而不必预先进行标记。再例如,可以使用其他符号或标识符来对变“热”的缓存格进行标记。
以图5所示的链表为例,如果一个RAID组的大小为4T并且建立了具有三级缓存表的缓存链表,每一级缓存表包含512个缓存格,那么0级缓存表中每一个缓存格所对应的存储空间大小为8G、1级缓存表中每一个缓存格所对应的存储空间大小为16M、并且2级缓存表中的每一个缓存格所对应的存储空间大小为32K、以此类推。
需要注意的是,父缓存格(即存在链接到其上的子缓存表)与对应的子缓存表中的各缓存格中所记录的允许状态之间存在一定的制约关系。例如,如果子缓存表中记录的状态既包括“共享”又包括“独占”,那么对应的父缓存格的状态应当是“共享”而非“独占”;如果子缓存表中记录的状态即包括“共享”又包括“空闲”,那么对应的父缓存格的状态应当是“空闲”而非“共享”。又例如,父缓存格的状态只有在其对应的子缓存表中记录的状态全部是“独占”时才可能是“独占”。
在如上建立了条带锁缓存链表之后,如果此时本地SP接收到了IO操作请求并且在其查询了本地条带锁链表后需要对本地缓存链表进行查询,那么该查询从0级缓存表开始。优选地,如果0级缓存表中的一个父缓存格的状态指示可以允许所请求的IO操作,那么将不必继续查询该缓存格可能链接到的子缓存表。这将大大提升对分级缓存链表的查询效率。
优选地,如果0级缓存表中的父缓存格的状态指示所请求的IO操作需要得到对端SP的许可,那么此时将进一步对该父缓存格所链接到的子缓存表进行查询,如果在该子缓存表中的与该IO操作请求所针对的存储地址范围所对应的缓存格的状态指示可以允许所请求的IO操作、例如该状态为“独占”,那么本地SP可以指令直接开始执行该IO操作而无需发送CMI到对端SP以获得对端SP的许可。通过这种方式,CMI消息的传输数目可以大大减少。
可替代地,如果0级缓存表中包含的缓存格具有对应的子缓存表,那么可以直接跳过对该缓存格的查询而直接进行对子缓存表的查询。
当针对某个父缓存格所对应的存储地址范围的IO操作请求的数目显著减少,例如低于一定阈值以下,即所谓的变“冷”,那么此时仍然保持用于该父缓存格的子缓存表并不能带来更多的益处,相反会不必要的占用宝贵的存储器空间,使得可能无法为其他新近变“热”的缓存格生成必要的子缓存表,从而使存储设备的性能不能如所预期的那样得到提升。此外,当子缓存表中的所有缓存格的状态都相同时,其父缓存格的状态也与之相同,此时没有必要再对子缓存表进行更细化的查询,因为这种更细化的查询与仅查询父缓存格相比并不能带来额外的益处,相反还会增加查询的时间、降低对IO操作请求的处理速度,同时不必要地占用存储器空间。
鉴于此,根据本发明的其他实施例提供了一种收回子缓存表的方法。
在一些实施例中,当SP发现本地条带锁缓存链表中的某一个子缓存表中所记录的状态都相同时,可以将该子缓存表中的所有缓存格合并到其父缓存格中,并且删除该子缓存表并由此收回该缓存表中的所有缓存格所占用的存储器空间。
在另一些实施例中,当子缓存表中所记录的状态彼此不同,但是在一定的时间段期间,针对该子缓存表所对应的存储地址范围的IO操作请求的次数低于一定阈值,那么可以通过将该子缓存表中的所有缓存格全部改变成相同的状态来将其合并到父缓存格中,并删除该子缓存表并由此收回该缓存表中的所有缓存格所占用的存储器空间。
图6示出了根据本发明的一些实施例的针对子缓存表中所记录的状态彼此不同的情况收回子缓存表的方法的一个示例。
如图所示,首先在步骤①中判断是否存在这样的子缓存表:针对该子缓存表所对应的存储地址范围的IO操作请求的次数降低到预定阈值以下;
然后,在步骤②中,将该子缓存表中的所有记录了“空闲”状态的缓存格标记为“冷”;
随后,检查针对该子缓存表中剩余的、未被标记为“冷”的缓存格所对应的存储地址上是否还存在未完成的IO操作;并且如果存在,则等待;否则,向对端SP发送CMI消息以请求允许将本地的这些其上没有未完成IO操作的存储地址所对应的剩余缓存格的状态都改变为“空闲”状态,并进一步地将其标记为“冷”;
最后,如果该子缓存表中的所有缓存格都被标记为“冷”,那么可以将该子缓存表中的所有缓存格合并到父缓存格中,并且删除该缓存表并收回其占用的存储器空间。
本领域技术人员应当理解,上述示例仅是示例性的,并不以任何特定的方式限制本发明。例如,可以通过将子缓存表中的所有缓存格的状态都改变为“共享”来收回该子缓存表。再例如,可以使用其他符号或识别符来对变“冷”缓存格进行标记;甚至可以不对其进行标记,而直接进行合并收回。
通过对于变冷的缓存表的收回或者对于不必要的缓存表的收回,可以减小不必要的存储器空间的占用,同时也能够减少不必要的缓存表的查询,从而可以提高对IO操作的处理速度。
图7示出了根据本发明的实施例的一种用于在存储设备中处理输入输出操作请求的方法700的流程图,该存储设备包括第一处理器和第二处理器并且包括多个存储阵列组、例如RAID组。
如图7所示,首先在框710中,在第一处理器处,针对多个存储阵列组中的每一个存储阵列组维护第一链表以及第一缓存表。
该第一链表例如可以是参考图2所描述的条带锁链表。该链表至少保持关于第一处理器已经允许的、对相应存储阵列组中的特定存储地址范围的输入输出操作请求的信息。需要注意的是该第一缓存表可以是例如图5所示的多级缓存链表中的任一级缓存表。在存储设备初始化时,该第一缓存表可以是初始化的0级缓存表。
该第一缓存表例如可以是参考图5所描述的0级条带锁缓存表,其包括第一多个缓存格。该第一多个缓存格中的每一个缓存格保持第二处理器对该相应存储阵列组中的特定存储地址范围的输入输出操作的允许状态。关于允许状态的更多详细描述已经在上文阐明,出于简洁的目的在此不再赘述。
在框720中,针对第一多个缓存格中的一个或多个下述缓存格中的一个或多个生成第二缓存表:针对该缓存格所对应的特定存储地址范围的输入输出操作请求的次数超过第一预定阈值。该第二缓存表包括第二多个缓存格,其中的每一个缓存格的大小均小于第一多个缓存格中的每一个缓存格的大小。优选地,该第二缓存表所对应的存储地址范围与针对其生成该第二缓存表的前级缓存格所对应的存储地址范围相同,并且该第二多个缓存格的数目等于第一多个缓存格的数目。关于第二缓存表的生成方法已在上文参照图5进行了详细描述,出于简洁的目的在此不再赘述。
然后在框730中,至少基于第一链表以及第一缓存表和/或第二缓存表对第一处理器接收到的输入输出操作请求进行处理。关于该处理方法与上文参照图4进行的描述类似,其不同之处在于对条带锁缓存表进行查询时可能需要查询包括第一缓存表和第二缓存表的多级缓存链表,出于简洁的目的在此不再赘述。
在一个优选实施例中,该方法700可以进一步包括在框740中收回第二缓存表。
在另一个实施例中,框740中的收回操作可以例如包括当第二缓存表中的第二多个缓存格所保持的允许状态都是相同状态时,将第一多个缓存格中的、针对其生成该第二缓存表的缓存格设置为该相同状态并删除第二缓存表。
在又一个实施例中框740中的收回操作还可以包括:首先判断针对第二缓存表所对应的存储地址范围的输入输出操作请求的次数是否低于第二预定阈值;并且如果该次数低于第二预定阈值,则将第二缓存表收回。关于收回缓存表的具体方法已经在上文中参考图6进行了详细描述,在此出于简洁的目的不再赘述。
图8示出了根据本发明的实施例的一种用于在存储设备中处理输入输出操作请求的装置800的结构图,该存储设备包括第一处理器和第二处理器并且包括多个存储阵列组、例如RAID组。
如图8所示,该装置800包括表维护单元810,其被配置为在所述第一处理器处,针对多个存储阵列组中的每一个存储阵列组维护第一链表以及第一缓存表,其中第一链表至少保持关于第一处理器所允许的、对相应存储阵列组中的特定存储地址范围的输入输出操作请求的信息,并且第一缓存表包括第一多个缓存格,其中的每个缓存格保持第二处理器对该相应存储阵列组中的特定存储地址范围的输入输出操作的允许状态。具体地,该表维护单元810被配置为执行与上述方法700的框710中的操作,在此不再赘述。
该装置800还包括子表生成单元820,其被配置为针对第一多个缓存格中的一个或多个下述缓存格中的一个或多个分别生成第二缓存表:针对该缓存格所对应的特定存储地址范围的输入输出操作请求的次数超过第一预定阈值。所生成的第二缓存表包括第二多个缓存格,其中的每一个缓存格的大小均小于第一多个缓存格中的每一个缓存格的大小。优选地,该第二缓存表所对应的存储地址范围与针对其生成该第二缓存表的前级缓存格所对应的存储地址范围相同,并且该第二多个缓存格的数目等于第一多个缓存格的数目。具体地,该子表生成单元820被配置为执行上述方法700的框720中的操作,在此不再赘述。
该装置800进一步包括操作请求处理单元830,其被配置为至少基于第一链表以及第一缓存表和/或第二缓存表对第一处理器接收到的输入输出操作请求进行处理。具体地,该操作请求处理单元830被配置为执行上述方法700的框730中的操作,在此不再赘述。
在一个优选实施例中,该装置800还可以包括子表收回单元840。该子表收回单元可以被配置为如果第二缓存表中的第二多个缓存格所保持的允许状态都是相同状态,则将第一多个缓存格中的、针对其生成该第二缓存表的缓存格设置为该相同状态并删除该第二缓存表。可替代地,该子表收回单元可以被配置为首先判断针对第二缓存表所对应的存储地址范围的输入输出操作请求的次数是否低于第二预定阈值,然后如果该次数低于第二预定阈值,则将第二缓存表收回。具体地,该子表收回单元840被配置为执行上述方法700的框740中的操作,在此不再赘述。
本领域技术人员应当认识到,这里描述的任何结构图表示实现本发明的原理的说明性原理图。类似地,应当理解,这里描述的流程图表示可以在机器可读介质中具体表示并且由机器或处理设备执行的各种过程,不论这样的机器或处理设备是否被明确示出。
本领域普通技术人员还应当理解,根据本发明实施例的装置800所包含的各单元可以利用各种方式来实现,包括软件、硬件、固件或其任意组合。例如,在某些实施方式中,装置800可以利用软件和/或固件来实现。备选地或附加地,装置800可以部分地或者完全地基于硬件来实现。例如,装置800中的一个或多个单元可以实现为集成电路(IC)芯片、专用集成电路(ASIC)、片上系统(SOC)、现场可编程门阵列(FPGA),等等。本发明的范围在此方面不受限制。
本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上记录了用于使处理设备/机器能够实现本发明的各个方面的计算机可读程序指令。
上面结合附图所进行的描述只是为了说明本发明而示例性给出的。本领域技术人员可以理解,能够基于上面所描述的本发明的原理提出不同的结构,虽然这些不同的结构未在此处明确描述或示出,但都体现了本发明的原理并被包括在其精神和范围之内。此外,所有此处提到的示例明确地主要只用于教导目的以帮助读者理解本发明的原理以及发明人所贡献的促进本领域的构思,并不应被解释为对本发明范围的限制。此外,此处所有提到本发明的原则、方面和实施方式的陈述及其特定的示例包含其等同物在内。

Claims (18)

1.一种用于处理存储设备中的输入输出操作请求的方法,所述存储设备包括第一处理器和第二处理器并且包括多个存储阵列组,所述方法至少包括:
在所述第一处理器处,针对所述多个存储阵列组中的每一个存储阵列组维护第一链表以及第一缓存表,
其中所述第一链表至少保持关于所述第一处理器所允许的、对相应存储阵列组中的特定存储地址范围的输入输出操作请求的信息,并且所述第一缓存表包括第一多个缓存格,所述第一多个缓存格中的每个缓存格保持所述第二处理器对所述相应存储阵列组中的特定存储地址范围的输入输出操作的允许状态;
针对所述第一多个缓存格中的一个或多个下述缓存格中的一个或多个分别生成第二缓存表:针对该缓存格所对应的特定存储地址范围的输入输出操作请求的次数超过第一预定阈值,其中所述第二缓存表包括第二多个缓存格;以及
至少基于所述第一链表以及所述第一缓存表和/或所述第二缓存表对所述第一处理器接收到的所述输入输出操作请求进行处理;
其中,所述第二多个缓存格中的每一个缓存格的大小小于所述第一多个缓存格中的每一个缓存格的大小。
2.根据权利要求1所述的方法,其中:
所述第一缓存表中的所有所述缓存格对应于所述相应存储阵列组所包括的整个存储地址范围。
3.根据权利要求1所述的方法,其中生成所述第二缓存表进一步包括:
对所述第一多个缓存格中的、针对其所对应的特定存储地址范围的输入输出操作请求的次数超过所述第一预定阈值的一个或多个缓存格进行标记;以及
针对被标记的所述一个或多个缓存格中的一个或多个分别生成所述第二缓存表。
4.根据权利要求1所述的方法,进一步包括:
如果所述第二缓存表中的所述第二多个缓存格所保持的所述允许状态都是相同状态,则将所述第一多个缓存格中的、针对其生成所述第二缓存表的所述缓存格设置为所述相同状态并删除所述第二缓存表。
5.根据权利要求1所述的方法,进一步包括:
判断针对所述第二缓存表所对应的存储地址范围的输入输出操作请求的次数是否低于第二预定阈值;以及
如果所述次数低于所述第二预定阈值,则将所述第二缓存表收回。
6.根据权利要求5所述的方法,其中将所述第二缓存表收回进一步包括:
对所述第二多个缓存格中的、针对其所对应的特定存储地址范围的输入输出操作请求的次数低于第三预定阈值的一个或多个缓存格进行标记;
检查所述第二多个缓存格中的、未被标记的缓存格所对应的特定存储地址范围上是否存在未完成的输入输出操作;
如果不存在,则对所述未被标记的缓存格进行标记;并且
如果所有所述第二多个缓存格均被标记,则将所述第二缓存表中的所有缓存格合并到所述第一缓存表中的对应缓存格并且删除所述第二缓存表。
7.根据权利要求1所述的方法,其中
所述第一多个缓存格的数目与所述第二多个缓存格的数目相等;并且
所述第二缓存表与所述第一缓存表中的、针对其生成该第二缓存表的缓存格对应相同的存储地址范围。
8.根据权利要求1所述的方法,进一步包括:
针对所述第一缓存表和所述第二缓存表设置最大存储器空间。
9.根据权利要求1-8中的任一权利要求所述的方法,其中所述第一链表进一步保持关于所述第一处理器未允许的、对所述相应存储阵列组中的特定存储地址范围的输入输出操作请求的信息。
10.一种用于处理存储设备中的输入输出操作请求的装置,所述存储设备包括第一处理器和第二处理器并且包括多个存储阵列组,所述装置至少包括:
表维护单元,被配置为在所述第一处理器处,针对所述多个存储阵列组中的每一个存储阵列组维护第一链表以及第一缓存表,
其中所述第一链表至少保持关于所述第一处理器所允许的、对相应存储阵列组中的特定存储地址范围的输入输出操作请求的信息,并且所述第一缓存表包括第一多个缓存格,所述第一多个缓存格中的每个缓存格保持所述第二处理器对所述相应存储阵列组中的特定存储地址范围的输入输出操作的允许状态;
子表生成单元,被配置为针对所述第一多个缓存格中的一个或多个下述缓存格中的一个或多个分别生成第二缓存表:针对该缓存格所对应的特定存储地址范围的输入输出操作请求的次数超过第一预定阈值,其中所述第二缓存表包括第二多个缓存格;以及
操作请求处理单元,被配置为至少基于所述第一链表以及所述第一缓存表和/或所述第二缓存表对所述第一处理器接收到的所述输入输出操作请求进行处理;
其中,所述第二多个缓存格中的每一个缓存格的大小小于所述第一多个缓存格中的每一个缓存格的大小。
11.根据权利要求10所述的装置,其中:
所述第一缓存表中的所有所述缓存格对应于所述相应存储阵列组所包括的整个存储地址范围。
12.根据权利要求10所述的装置,其中所述子表生成单元进一步被配置为:
对所述第一多个缓存格中的、针对其所对应的特定存储地址范围的输入输出操作请求的次数超过所述第一预定阈值的一个或多个缓存格进行标记;以及
针对被标记的所述一个或多个缓存格中的一个或多个分别生成所述第二缓存表。
13.根据权利要求10所述的装置,进一步包括:
子表收回单元,被配置为如果所述第二缓存表中的所述第二多个缓存格所保持的所述允许状态都是相同状态,则将所述第一多个缓存格中的、针对其生成所述第二缓存表的所述缓存格设置为所述相同状态并删除所述第二缓存表。
14.根据权利要求10所述的装置,进一步包括:
子表收回单元,被配置为判断针对所述第二缓存表所对应的存储地址范围的输入输出操作请求的次数是否低于第二预定阈值;以及
如果所述次数低于所述第二预定阈值,则将所述第二缓存表收回。
15.根据权利要求14所述的装置,其中所述子表收回单元进一步被配置为:
对所述第二多个缓存格中的、针对其所对应的特定存储地址范围的输入输出操作请求的次数低于第三预定阈值的一个或多个缓存格进行标记;
检查所述第二多个缓存格中的、未被标记的缓存格所对应的特定存储地址范围上是否存在未完成的输入输出操作;
如果不存在,则对所述未被标记的缓存格进行标记;并且
如果所有所述第二多个缓存格均被标记,则将所述第二缓存表中的所有缓存格合并到所述第一缓存表中的对应缓存格并且删除所述第二缓存表。
16.根据权利要求10所述的装置,其中:
所述第一多个缓存格的数目与所述第二多个缓存格的数目相等;并且
所述第二缓存表与所述第一缓存表中的、针对其生成该第二缓存表的缓存格对应相同的存储地址范围。
17.根据权利要求10所述的装置,进一步包括:
所述第一缓存表和所述第二缓存表的最大存储器空间被设置。
18.根据权利要求10-17中的任一权利要求所述的装置,其中所述第一链表进一步保持关于所述第一处理器未允许的、对所述相应存储阵列组中的特定存储地址范围的输入输出操作请求的信息。
CN201410562464.1A 2014-10-20 2014-10-20 用于处理输入输出操作请求的方法和装置 Active CN105512052B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201410562464.1A CN105512052B (zh) 2014-10-20 2014-10-20 用于处理输入输出操作请求的方法和装置
US14/883,082 US9971643B2 (en) 2014-10-20 2015-10-14 Processing an input/output operation request

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410562464.1A CN105512052B (zh) 2014-10-20 2014-10-20 用于处理输入输出操作请求的方法和装置

Publications (2)

Publication Number Publication Date
CN105512052A true CN105512052A (zh) 2016-04-20
CN105512052B CN105512052B (zh) 2019-01-01

Family

ID=55720053

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410562464.1A Active CN105512052B (zh) 2014-10-20 2014-10-20 用于处理输入输出操作请求的方法和装置

Country Status (2)

Country Link
US (1) US9971643B2 (zh)
CN (1) CN105512052B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109213694A (zh) * 2017-06-30 2019-01-15 伊姆西Ip控股有限责任公司 用于缓存管理的方法和设备
CN109871338A (zh) * 2019-03-15 2019-06-11 北京思特奇信息技术股份有限公司 一种数据存储方法、装置及计算机设备
CN111290711A (zh) * 2020-01-21 2020-06-16 苏州浪潮智能科技有限公司 一种raid系统的io处理方法及相关装置
CN114096948A (zh) * 2019-07-09 2022-02-25 美光科技公司 位串查找数据结构

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9766829B2 (en) * 2015-06-26 2017-09-19 International Business Machines Corporation Address probing for transaction
CN110413217B (zh) * 2018-04-28 2023-08-11 伊姆西Ip控股有限责任公司 管理存储系统的方法、设备和计算机程序产品

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7730491B2 (en) * 2005-08-30 2010-06-01 Intel Corporation Fair scalable reader-writer mutual exclusion
JP4845724B2 (ja) * 2006-12-28 2011-12-28 株式会社日立製作所 バックアップ機能を備えたストレージシステム
CN201153943Y (zh) * 2008-02-19 2008-11-26 浪潮电子信息产业股份有限公司 一种多心跳信号双控存储控制器
US8868844B2 (en) * 2008-06-25 2014-10-21 International Business Machines Corporation System and method for a software managed cache in a multiprocessing environment
CN101630232B (zh) * 2008-07-15 2011-11-23 中兴通讯股份有限公司 双存储控制器的管理方法和装置
JP2010033481A (ja) * 2008-07-31 2010-02-12 Fujitsu Ltd 仮想化スイッチおよびコンピュータシステム
US20100162244A1 (en) * 2008-12-22 2010-06-24 Johney Tsai Computer work chain and a method for performing a work chain in a computer
US8935478B2 (en) * 2011-11-01 2015-01-13 International Business Machines Corporation Variable cache line size management
CN103049225A (zh) * 2013-01-05 2013-04-17 浪潮电子信息产业股份有限公司 一种双控双活的存储系统
CA2867589A1 (en) * 2013-10-15 2015-04-15 Coho Data Inc. Systems, methods and devices for implementing data management in a distributed data storage system
JP5620614B1 (ja) * 2014-04-21 2014-11-05 株式会社日立製作所 ストレージシステム

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109213694A (zh) * 2017-06-30 2019-01-15 伊姆西Ip控股有限责任公司 用于缓存管理的方法和设备
CN109213694B (zh) * 2017-06-30 2023-04-25 伊姆西Ip控股有限责任公司 用于缓存管理的方法和设备
CN109871338A (zh) * 2019-03-15 2019-06-11 北京思特奇信息技术股份有限公司 一种数据存储方法、装置及计算机设备
CN109871338B (zh) * 2019-03-15 2021-01-29 北京思特奇信息技术股份有限公司 一种数据存储方法、装置及计算机设备
CN114096948A (zh) * 2019-07-09 2022-02-25 美光科技公司 位串查找数据结构
CN114096948B (zh) * 2019-07-09 2022-11-11 美光科技公司 位串查找数据结构
US11809868B2 (en) 2019-07-09 2023-11-07 Micron Technology, Inc. Bit string lookup data structure
CN111290711A (zh) * 2020-01-21 2020-06-16 苏州浪潮智能科技有限公司 一种raid系统的io处理方法及相关装置

Also Published As

Publication number Publication date
US9971643B2 (en) 2018-05-15
US20160124855A1 (en) 2016-05-05
CN105512052B (zh) 2019-01-01

Similar Documents

Publication Publication Date Title
CN105512052A (zh) 用于处理输入输出操作请求的方法和装置
US9921910B2 (en) Virtual chunk service based data recovery in a distributed data storage system
US11132300B2 (en) Memory hierarchy using page-based compression
WO2015162752A1 (ja) データベース演算部を備えるフラッシュモジュール、及びストレージ装置
CN104679669B (zh) 高速缓存cache存储器系统及访问缓存行cache line的方法
US7937522B2 (en) Method for flash memory data management
US20080195833A1 (en) Systems, methods and computer program products for operating a data processing system in which a file system's unit of memory allocation is coordinated with a storage system's read/write operation unit
US20180260117A1 (en) Storage controller and method of operating the same
KR20160006709A (ko) 고성능 및 저비용 플래시 변환 계층을 위한 시스템 및 방법
CN103559319A (zh) 分布式集群文件系统的缓存同步方法和设备
US8903804B2 (en) Data existence judging device and data existence judging method
CN110865770A (zh) 存储器系统
KR102680596B1 (ko) 캐시 엔트리 전송을 위한 캐시 위치 정보를 저장하기 위한 시스템 및 방법
US10552049B2 (en) Method and apparatus for managing data access
US20170371804A1 (en) Method for Writing Multiple Copies into Storage Device, and Storage Device
CN104778100A (zh) 一种安全备份数据的方法
CN108959105B (zh) 一种实现地址映射的方法及装置
CN106873905B (zh) 数据存储的方法、装置及固态硬盘
CN101149708A (zh) 移动存储器加密方法和自动运行加密移动存储器方案
US9021321B2 (en) Testing disk drives shared by multiple processors in a supercomputer complex
CN109478163A (zh) 用于在高速缓存条目处标识存储器访问请求的待决的系统和方法
KR20090098275A (ko) 플래시 메모리 시스템
CN107003932A (zh) 多核处理器系统的缓存目录处理方法和目录控制器
CN103617010B (zh) 数据存储方法及存储装置
CN104216666A (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
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20200410

Address after: Massachusetts, USA

Patentee after: EMC IP Holding Company LLC

Address before: Massachusetts, USA

Patentee before: EMC Corp.

TR01 Transfer of patent right