CN111694770A - 一种处理io请求的方法及装置 - Google Patents
一种处理io请求的方法及装置 Download PDFInfo
- Publication number
- CN111694770A CN111694770A CN201910199176.7A CN201910199176A CN111694770A CN 111694770 A CN111694770 A CN 111694770A CN 201910199176 A CN201910199176 A CN 201910199176A CN 111694770 A CN111694770 A CN 111694770A
- Authority
- CN
- China
- Prior art keywords
- request
- specified
- combined
- requests
- processing
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0871—Allocation or management of cache space
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请提供一种处理IO请求的方法及装置,该方法包括:为指定IO请求分配缓存块;其中,指定IO请求包括写请求和读请求两种类型,指定IO请求中的数据长度不大于本地的缓存块大小;检查是否存在命中同一缓存块的同一类型的至少两个逻辑处理地址连续的指定IO请求;若是,合并指定IO请求得到组合IO请求;对组合IO请求进行处理,以将组合IO请求所指示的数据写入到缓存块中。在本申请中,通过对命中同一缓存块的同类型的逻辑处理地址连续的指定IO请求进行合并,可在多个指定IO请求并行的情况下,避免串行处理导致响应IO请求的时间增加,有效地提高了存储系统的效率。
Description
技术领域
本申请涉及存储领域,特别涉及一种处理IO请求的方法及装置。
背景技术
为提高存储系统的读写性能,通常可为存储系统的LUN(Logical Unit Number,逻辑单元号)分配缓存空间,降低响应前端发起的IO(Input/Output,写入/读取)请求。其中,上述缓存空间包括多个缓存块(Cache块),各缓存块可根据应用环境设定固定大小。
存储设备在处理读请求时,可将读请求所请求的目标数据从磁盘空间读取到缓存空间中,然后返回针对该读请求的目标数据。当存储设备后续接收到读取上述目标数据的读请求时,可直接从缓存空间获取上述目标数据并返回,提高了响应读请求的速度。
存储设备在处理写请求时,可将写请求中的待写入数据写入至缓存空间中,然后返回写入成功消息,提高响应写请求的速度。当然,后续存储设备可从缓存空间中将待写入数据写入至磁盘空间。
在实际应用中,存储设备可能会并发地接收到多个IO请求,且上述IO请求中的数据长度小于一个缓存块大小。在这种情况下,存储设备可能会将多个IO请求分配至同一缓存块,换而言之,多个IO请求命中同一缓存块。此时,存储设备需先后处理命中同一缓存块的多个IO请求。换而言之,存储设备并行接收到多个IO请求后,不同的IO请求命中同一缓存块时变成串行处理,提高了IO请求的响应时长。
发明内容
有鉴于此,本申请提供一种处理IO请求的方法及装置,用以提高基于缓存技术响应IO请求的响应速度。
具体地,本申请是通过如下技术方案实现的:
一种处理IO请求的方法,应用于存储设备,包括:
为指定IO请求分配缓存块;其中,所述指定IO请求包括写请求和读请求两种类型,所述指定IO请求中的数据长度不大于本地的缓存块大小;
检查是否存在命中同一缓存块的同一类型的至少两个逻辑处理地址连续的指定IO请求;其中,每一指定IO请求的逻辑处理地址由该指定IO请求的LUN标识、逻辑起始地址和数据长度确定;
若是,合并所述指定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请求中的LUN标识、逻辑起始地址和数据长度从磁盘空间读取目标数据,并将读取到的所述目标数据写入到为所述组合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请求的LUN标识、逻辑起始地址和数据长度确定;
合并单元,用于若是,合并所述指定IO请求得到组合IO请求;
处理单元,用于对所述组合IO请求进行处理,以将所述组合IO请求所指示的数据写入到缓存块中。
在本申请技术方案中,存储设备为各指定IO请求分配缓存块后,可基于分配给每一指定IO请求的缓存块,检查是否存在命中同一缓存块的同一类型的至少两个逻辑处理地址连续的指定IO请求;若是,则合并命中同一缓存块的同一类型的指定IO请求,获得组合IO请求,然后对上述组合IO请求进行处理,以将上述组合IO请求所指示的数据写入到缓存块中;
由于在处理指定IO请求前首先对命中同一缓存块的同类型的逻辑处理地址连续的指定IO请求进行合并,从而在多个指定IO请求并行的情况下,可以同时处理,避免串行处理导致响应IO请求的时间增加,有效地提高了存储系统的效率。
附图说明
图1是本申请示出的一种存储系统的设备架构图;
图2是本申请示出的一种处理并发写请求的示意图;
图3是本申请示出的一种处理IO请求的方法的流程图;
图4是本申请示出的一种合并IO请求的示意图;
图5是本申请示出的一种处理IO请求的示意图;
图6是本申请示出的一种处理IO请求的装置的实施例框图;
图7是本申请示出的一种处理IO请求的装置的硬件结构图。
具体实施方式
为了使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对现有技术方案和本发明实施例中的技术方案作进一步详细的说明。
如果IO请求中的数据长度较小,则存储设备可能会为多个IO请求分配同一缓存块。此时,在处理并行的多个IO请求时,存储设备需先后处理命中同一缓存块的多个IO请求,这同样会导致响应IO请求的时间增加。
在另一种情况下,参见图1,为本申请示出的一种存储系统的设备架构图。如图1所示,存储设备接收到服务器下发的IO请求后,确定该IO请求指示的LUN中的目标数据后,可通过缓存空间对上述目标数据进行处理,从而提升返回IO响应的速度。
而由于存储设备为不同的IO请求拆分出的子IO请求分配的缓存块可能相同,因此,在处理并行的多个IO请求时,存储设备需先后处理命中同一缓存块的多个子IO请求,这会导致响应IO请求的时间增加。
参见图2,为本申请示出的处理并发写请求的示意图。如图2所示,服务器下发了六个写请求(图2中以不同的数字区分的写请求中的待写入数据),各写请求中的待写入数据为4KB,而缓存块大小为32KB。
六个写请求中的待写入数据加起来仍不足一个缓存块大小,并且六个写请求为连续写请求。在这种情况下,存储设备将这六个写请求分配同一缓存块。图2中最下面的圆圈中的数字表示不同写请求的处理顺序,依次为“1”、“4”、“2”、“5”、“3”、“6”。因此,存储设备在将写请求1中的待写入数据写入到缓存块时,其它5个写请求排队等待处理;进一步地,存储设备将写请求2中的待写入数据写入到缓存块,另外4个写请求排队等待处理,以此类推,直到最后将写请求6中的待写入数据写入到缓存块中。
由此可见,在处理命中同一缓存块的多个写请求时,多个并行的写请求必须被串行处理,除第一个处理的写请求外,其它写请求均需等待,这无疑增加了存储设备响应写请求的时长。
同理,在处理命中同一缓存块的多个读请求时,多个并行的读请求必须被串行处理,这同样会增加存储设备响应读请求的时长。
有鉴于此,在本申请实施例中,通过合并命中同一缓存块并且逻辑处理地址连续的指定IO请求,可同时处理命中同一缓存块的同一类型的指定IO请求,减少了处理指定IO请求的等待时间,极大提高了处理IO请求的响应速度。
参见图3,为本申请示出的一种处理IO请求的方法的流程图,该方法应用于存储设备,包括以下步骤:
步骤301:为指定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请求的逻辑处理地址查找本地缓存表,确定是否存在对应的缓存表项。其中,缓存表包括对应于各缓存块的缓存表项,各缓存表项记录该缓存块对应的LUN上的逻辑区块地址(Logical Block Address,LBA)。
上述逻辑处理地址依据指定IO请求中的LUN标识、逻辑起始地址和数据长度确定。由于缓存块大小固定,因此根据缓存表项记录的LUN标识和逻辑区块地址即可判断IO请求的逻辑处理地址是否在缓存块的地址范围内,即IO请求是否命中该缓存块。
一方面,如果存在对应的缓存表项,存储设备可以进一步检查该缓存表项对应的缓存块是否被占用。在实际应用中,可以通过加锁的方式避免缓存块同时被两个以上的线程使用,任一内存块加锁后,该内存块对应的锁管理内存上可置1,反之则置0。存储设备通过检查锁管理内存可确定上述缓存表项对应的缓存块是否被占用。
一种情况下,如果上述缓存块被占用,则可以等待一段时间后重新检查该缓存块是否被占用。这个过程可以重复多次,直到缓存块空闲。
另一种情况下,如果上述缓存块未被占用,则可以检查上述指定IO请求的类型。
如果上述指定IO请求为读请求,存储设备可以从上述缓存块中读取目标数据,然后生成针对该指定IO请求的读取完成消息,其中,该读取完成消息携带该目标数据。
如果上述指定IO请求为写请求,存储设备可以向上述缓存块中写入上述指定IO请求携带的数据,然后生成针对该指定IO请求的写入完成消息。
另一方面,如果不存在对应的缓存表项,则可以执行为上述指定IO请求分配缓存块的步骤。具体地分配方式可参照现有相关技术,在此不再赘述。
需要指出的是,存储设备在为每一指定IO请求分配缓存块时,可以记录该缓存块对应的LUN标识和逻辑区块地址。因此,基于指定IO请求中的逻辑处理地址可以确定其在缓存块中占用的实际位置。存储设备可通过任何可行的数据结果来记录缓存块分配结果,比如链表、红黑树等,具体不作限定。
步骤302:检查是否存在命中同一缓存块的同一类型的至少两个逻辑处理地址连续的指定IO请求;其中,每一指定IO请求的逻辑处理地址由该指定IO请求的LUN标识、逻辑起始地址和数据长度确定。
步骤303:若是,合并所述指定IO请求得到组合IO请求。
在对上述指定IO请求分配缓存块后,存储设备可遍历缓存块分配结果,检查是否存在命中同一缓存块的同一类型的逻辑处理地址连续的指定IO请求,进而对满足条件的指定IO请求进行合并。
作为一种实施例,如果通过红黑树记录缓存块分配结果,存储设备可以遍历红黑树的各个节点,根据各节点记录的缓存块对应的LUN标识和逻辑区块地址与指定IO请求中的逻辑处理地址进行匹配,从而确定指定IO请求命中的缓存块。
进一步地,当存在至少两个命中同一缓存块的指定IO请求时,存储设备可检查上述指定IO请求是否均为写请求或读请求。
如果命中同一缓存块的指定IO请求有至少两个写请求或至少两个读请求,存储设备接着检查同类型的至少两个指定IO请求的逻辑处理地址是否连续。
比如:若命中同一缓存块的指定IO请求有五个,其中三个为读请求,两个为写请求,则可以检查上述三个读请求的逻辑处理地址是否连续,以及,检查上述两个写请求的逻辑处理地址是否连续。
一方面,不存在至少两个同类型的指定IO请求的逻辑处理地址连续。此时,存储设备无法合并上述指定IO请求。
另一方面,存在至少两个同类型的指定IO请求的逻辑处理地址连续。此时,存储设备确定出命中同一缓存块、类型相同且逻辑处理地址连续的至少两个指定IO请求,可对上述指定IO请求进行合并处理,从而得到组合IO请求。其中,该组合IO请求的逻辑处理地址即为各指定IO请求的逻辑处理地址之和,因此,该组合IO请求包括唯一的LUN标识、逻辑起始地址和数据长度。
参见图4,为本申请示出的一种合并IO请求的示意图。如图4所示,“R1”、“R2”和“R3”为三个类型为读请求的指定IO请求,且命中同一缓存块;“W1”、“W2”和“W3”为三个类型为写请求的指定IO请求,且命中同一缓存块。存储设备可在确定上述IO请求命中同一缓存块时,依据接收上述IO请求的顺序对上述IO请求进行记录(可通过多种方式进行记录,比如,记录在红黑树上该缓存块中)。存储设备在合并过程中,首先将读请求“R1”和“R2”合并为组合IO请求“NR1”,接着将“NR1”与读请求“R3”合并为新的组合IO请求“NR2”。进一步地,将写请求“W1”和“W2”合并为组合IO请求“NW1”,然后将组合IO请求“NW1”和写请求“W3”合并为新的组合IO请求“NW2”。
作为一种实施例,在将合并得到组合IO请求后,存储设备可以建立组合IO请求与合并出该组合IO请求的多个指定IO请求的组合关联关系。作为一种实施例,存储设备可以通过关联链表的形式记录上述合并关联关系,在上述关联链表中存在对应于各组合关联关系的记录,每一记录的首个节点分别记录组合IO请求,首节点后的若干节点则分别记录构成该组合IO请求的指定IO请求。当然,存储设备还可以通过其它任何可行的数据结果记录上述组合关联关系,具体不作限定。
步骤304:对所述组合IO请求进行处理,以将所述组合IO请求所指示的数据写入到缓存块中。
作为一种实施例,如果上述组合IO请求为读请求,则可基于上述组合IO请求中的LUN标识、逻辑起始地址和数据长度从磁盘空间读取目标数据,然后将读取到的上述目标数据写入到为上述组合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优化线程用于执行上述步骤301、步骤302和步骤303。读写处理线程用于执行上述步骤304。
由于多个线程分别并行处理不同的步骤,存储设备可以同时处理不同批次的IO请求,从而有效地提高了响应IO请求的速度。
为更清楚地说明本申请技术方案,参见图5,为本身示出的一种处理IO请求的示意图。
如图5所示,存储设备在第1步中,首先接收到服务器下发的IO请求,上述IO请求包括写请求和读请求。在第2步中,存储设备通过IO优化线程从上述IO请求中确定出指定IO请求,并为各指定IO请求分配缓存块。在第3步和第4步中,存储设备通过IO优化线程检查命中同一缓存块的同一类型的指定IO请求,然后合并得到组合IO请求,进而将组合IO请求交由读写处理线程。在第5步和第6步中,读写处理线程可对组合IO请求进行处理。在第7步中,存储设备通过读写处理线程返回针对指定IO请求的处理完成消息,而在第8步中,可返回针对上述IO请求的处理完成消息。
综上所述,在本申请技术方案中,存储设备为各指定IO请求分配缓存块后,可基于分配给每一指定IO请求的缓存块,检查是否存在命中同一缓存块的同一类型的至少两个逻辑处理地址连续的指定IO请求;若是,则合并命中同一缓存块的同一类型的指定IO请求,获得组合IO请求,然后对上述组合IO请求进行处理,以将上述组合IO请求所指示的数据写入到缓存块中;
由于在处理指定IO请求前首先对命中同一缓存块的同类型的逻辑处理地址连续的指定IO请求进行合并,从而在多个指定IO请求并行的情况下,可以同时处理,避免串行处理导致响应IO请求的时间增加,有效地提高了存储系统的效率。
与前述处理IO请求的方法的实施例相对应,本申请还提供了处理IO请求的装置的实施例。
参见图6,为本申请示出的一种处理IO请求的装置的实施例框图:
如图6所示,该处理IO请求的装置60,包括:
分配单元610,用于为指定IO请求分配缓存块;其中,所述指定IO请求包括写请求和读请求两种类型,所述指定IO请求中的数据长度不大于本地的缓存块大小;
检查单元620,用于检查是否存在命中同一缓存块的同一类型的至少两个逻辑处理地址连续的指定IO请求;其中,每一指定IO请求的逻辑处理地址由该指定IO请求的LUN标识、逻辑起始地址和数据长度确定;
合并单元630,用于若是,合并所述指定IO请求得到组合IO请求;
处理单元640,用于对所述组合IO请求进行处理,以将所述组合IO请求所指示的数据写入到缓存块中。
在本例中,所述分配单元610,进一步用于:
接收到前端下发的IO请求,检查所述IO请求中的数据长度是否不大于一个缓存块大小;
若是,则将所述IO请求作为指定IO请求;
若否,则基于缓存块大小将所述IO请求拆分为多个子IO请求,并将各子IO请求作为指定IO请求;
基于所述指定IO请求的逻辑处理地址查找本地缓存表,确定是否存在对应的缓存表项,若不存在对应的缓存表项,执行为所述指定IO请求分配缓存块的步骤。
在本例中,所述分配单元610,进一步用于:
如果存在对应的缓存表项,检查所述缓存表项对应的缓存块是否被占用;
若该缓存块未被占用,检查所述指定IO请求的类型;
如果所述指定IO请求为读请求,从该缓存块中读取目标数据;
如果所述指定IO请求为写请求,向该缓存块中写入所述指定IO请求携带的数据。
在本例中,所述处理单元640,进一步用于:
如果所述组合IO请求为读请求,基于所述组合IO请求中的LUN标识、逻辑起始地址和数据长度从磁盘空间读取目标数据,并将读取到的所述目标数据写入到为所述组合IO请求分配的缓存块中;
如果所述组合IO请求为写请求,将所述组合IO请求中的数据写入到为所述组合IO请求分配的缓存块中。
在本例中,所述处理单元640,进一步用于:
在处理所述组合IO请求后,基于已建立的组合关联关系,生成针对各指定IO请求的处理完成消息;其中,所述组合关联关系在合并得到组合IO请求时建立,所述组合关联关系表征组合IO请求与合并得到该组合IO请求的指定IO请求之间的关联关系。
在本例中,所述处理单元640,进一步用于:
如果存在未合并的指定IO请求,在对所述组合IO请求进行处理时,对未合并的指定IO请求进行处理,以将未合并的指定IO请求所指示的数据写入到缓存块中;
在处理未合并的指定IO请求后,生成针对各指定IO请求的处理完成消息。
在本例中,所述处理单元640,进一步用于:
获取各指定IO请求的处理完成消息后,依据已建立的拆分关联关系确定是否收齐IO请求中所有指定IO请求的处理完成消息;其中,所述拆分关联关系在从前端接收的IO请求确定出指定IO请求时建立,所述拆分关联关系表征IO请求和所述IO请求拆分得到的指定IO请求的关联关系;
如果收齐所述IO请求中所有指定IO请求的处理完成消息,合并所有指定IO请求的处理完成消息得到目标处理完成消息,并返回针对所述IO请求的目标处理完成消息。
在本例中,所述处理单元640,进一步用于:
检查是否已为所述组合关联关系中所有指定IO请求生成处理完成消息;
如果是,删除所述组合关联关系。
本申请处理IO请求的装置的实施例可以应用在存储设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在存储设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图7所示,为本申请处理IO请求的装置所在存储设备的一种硬件结构图,除了图7所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的存储设备通常根据该处理IO请求的装置的实际功能,还可以包括其他硬件,对此不再赘述。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (10)
1.一种处理IO请求的方法,应用于存储设备,其特征在于,包括:
为指定IO请求分配缓存块;其中,所述指定IO请求包括写请求和读请求两种类型,所述指定IO请求中的数据长度不大于本地的缓存块大小;
检查是否存在命中同一缓存块的同一类型的至少两个逻辑处理地址连续的指定IO请求;其中,每一指定IO请求的逻辑处理地址由该指定IO请求的LUN标识、逻辑起始地址和数据长度确定;
若是,合并所述指定IO请求得到组合IO请求;
对所述组合IO请求进行处理,以将所述组合IO请求所指示的数据写入到缓存块中。
2.根据权利要求1所述的方法,其特征在于,在为所述指定IO请求分配缓存块前,所述方法还包括:
接收到前端下发的IO请求,检查所述IO请求中的数据长度是否不大于一个缓存块大小;
若是,则将所述IO请求作为指定IO请求;
若否,则基于缓存块大小将所述IO请求拆分为多个子IO请求,并将各子IO请求作为指定IO请求;
基于所述指定IO请求的逻辑处理地址查找本地缓存表,确定是否存在对应的缓存表项,若不存在对应的缓存表项,执行为所述指定IO请求分配缓存块的步骤。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
如果存在对应的缓存表项,检查所述缓存表项对应的缓存块是否被占用;
若该缓存块未被占用,检查所述指定IO请求的类型;
如果所述指定IO请求为读请求,从该缓存块中读取目标数据;
如果所述指定IO请求为写请求,向该缓存块中写入所述指定IO请求携带的数据。
4.根据权利要求1所述的方法,其特征在于,所述对所述组合IO请求进行处理,以将所述组合IO请求所指示的数据写入到缓存块中,包括:
如果所述组合IO请求为读请求,基于所述组合IO请求中的LUN标识、逻辑起始地址和数据长度从磁盘空间读取目标数据,并将读取到的所述目标数据写入到为所述组合IO请求分配的缓存块中;
如果所述组合IO请求为写请求,将所述组合IO请求中的数据写入到为所述组合IO请求分配的缓存块中。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在处理所述组合IO请求后,基于已建立的组合关联关系,生成针对各指定IO请求的处理完成消息;其中,所述组合关联关系在合并得到组合IO请求时建立,所述组合关联关系表征组合IO请求与合并得到该组合IO请求的指定IO请求之间的关联关系。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
如果存在未合并的指定IO请求,在对所述组合IO请求进行处理时,对未合并的指定IO请求进行处理,以将未合并的指定IO请求所指示的数据写入到缓存块中;
在处理未合并的指定IO请求后,生成针对各指定IO请求的处理完成消息。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
获取各指定IO请求的处理完成消息后,依据已建立的拆分关联关系确定是否收齐IO请求中所有指定IO请求的处理完成消息;其中,所述拆分关联关系在从前端接收的IO请求确定出指定IO请求时建立,所述拆分关联关系表征IO请求和所述IO请求拆分得到的指定IO请求的关联关系;
如果收齐所述IO请求中所有指定IO请求的处理完成消息,合并所有指定IO请求的处理完成消息得到目标处理完成消息,并返回针对所述IO请求的目标处理完成消息。
8.根据权利要求1所述的方法,其特征在于,所述存储设备包括IO优化线程和读写处理线程;
所述IO优化线程用于为指定IO请求分配缓存块,并检查是否存在命中同一缓存块的同一类型的至少两个逻辑处理地址连续的指定IO请求;若是,合并所述指定IO请求得到组合IO请求;
所述读写处理线程用于对所述组合IO请求进行处理,以将所述组合IO请求所指示的数据写入到缓存块中。
9.根据权利要求5所述的方法,其特征在于,所述方法还包括:
检查是否已为所述组合关联关系中所有指定IO请求生成处理完成消息;
如果是,删除所述组合关联关系。
10.一种处理IO请求的装置,应用于存储设备,其特征在于,包括:
分配单元,用于为指定IO请求分配缓存块;其中,所述指定IO请求包括写请求和读请求两种类型,所述指定IO请求中的数据长度不大于本地的缓存块大小;
检查单元,用于检查是否存在命中同一缓存块的同一类型的至少两个逻辑处理地址连续的指定IO请求;其中,每一指定IO请求的逻辑处理地址由该指定IO请求的LUN标识、逻辑起始地址和数据长度确定;
合并单元,用于若是,合并所述指定IO请求得到组合IO请求;
处理单元,用于对所述组合IO请求进行处理,以将所述组合IO请求所指示的数据写入到缓存块中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910199176.7A CN111694770B (zh) | 2019-03-15 | 2019-03-15 | 一种处理io请求的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910199176.7A CN111694770B (zh) | 2019-03-15 | 2019-03-15 | 一种处理io请求的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111694770A true CN111694770A (zh) | 2020-09-22 |
CN111694770B CN111694770B (zh) | 2022-12-02 |
Family
ID=72475493
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910199176.7A Active CN111694770B (zh) | 2019-03-15 | 2019-03-15 | 一种处理io请求的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111694770B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113760524A (zh) * | 2020-11-17 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 任务执行方法和装置 |
CN114036077A (zh) * | 2021-11-17 | 2022-02-11 | 海光信息技术股份有限公司 | 数据处理方法及相关装置 |
CN114104880A (zh) * | 2021-11-15 | 2022-03-01 | 云知声(上海)智能科技有限公司 | 电梯呼叫控制系统及其控制方法 |
CN114879909A (zh) * | 2022-05-07 | 2022-08-09 | 北京星辰天合科技股份有限公司 | 数据存储方法及装置、电子设备、存储介质 |
WO2023071101A1 (zh) * | 2021-10-25 | 2023-05-04 | 苏州浪潮智能科技有限公司 | Io任务处理方法、装置和计算机设备和存储介质 |
WO2023087640A1 (zh) * | 2021-11-17 | 2023-05-25 | 海光信息技术股份有限公司 | 数据处理方法、装置、缓存器、处理器及电子设备 |
CN116340198A (zh) * | 2023-05-26 | 2023-06-27 | 苏州浪潮智能科技有限公司 | 固态硬盘的数据写入方法、其装置及固态硬盘 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060200633A1 (en) * | 2005-03-07 | 2006-09-07 | Fujitsu Limited | Address snoop method and multi-processor system |
CN102087586A (zh) * | 2009-12-02 | 2011-06-08 | 成都市华为赛门铁克科技有限公司 | 数据处理方法及装置 |
US20130042073A1 (en) * | 2010-03-30 | 2013-02-14 | Zte Corporation | Hybrid Automatic Repeat Request Combiner and Method for Storing Hybrid Automatic Repeat Request Data |
US20150067262A1 (en) * | 2013-08-30 | 2015-03-05 | Vmware, Inc. | Thread cache allocation |
CN105511964A (zh) * | 2015-11-30 | 2016-04-20 | 华为技术有限公司 | I/o请求的处理方法和装置 |
CN106683158A (zh) * | 2016-12-12 | 2017-05-17 | 中国航空工业集团公司西安航空计算技术研究所 | 一种GPU纹理映射非阻塞存储Cache的建模结构 |
CN107066393A (zh) * | 2017-01-12 | 2017-08-18 | 安徽大学 | 提高地址映射表中映射信息密度的方法 |
CN107797760A (zh) * | 2016-09-05 | 2018-03-13 | 北京忆恒创源科技有限公司 | 基于缓存优化写命令处理的方法、装置与驱动器 |
CN107861895A (zh) * | 2017-10-23 | 2018-03-30 | 深圳市楠菲微电子有限公司 | 基于分布式仲裁的可编程输入输出pio写合并装置和方法 |
CN108319430A (zh) * | 2018-01-17 | 2018-07-24 | 杭州宏杉科技股份有限公司 | 处理io请求的方法及装置 |
-
2019
- 2019-03-15 CN CN201910199176.7A patent/CN111694770B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060200633A1 (en) * | 2005-03-07 | 2006-09-07 | Fujitsu Limited | Address snoop method and multi-processor system |
CN102087586A (zh) * | 2009-12-02 | 2011-06-08 | 成都市华为赛门铁克科技有限公司 | 数据处理方法及装置 |
US20130042073A1 (en) * | 2010-03-30 | 2013-02-14 | Zte Corporation | Hybrid Automatic Repeat Request Combiner and Method for Storing Hybrid Automatic Repeat Request Data |
US20150067262A1 (en) * | 2013-08-30 | 2015-03-05 | Vmware, Inc. | Thread cache allocation |
CN105511964A (zh) * | 2015-11-30 | 2016-04-20 | 华为技术有限公司 | I/o请求的处理方法和装置 |
CN107797760A (zh) * | 2016-09-05 | 2018-03-13 | 北京忆恒创源科技有限公司 | 基于缓存优化写命令处理的方法、装置与驱动器 |
CN106683158A (zh) * | 2016-12-12 | 2017-05-17 | 中国航空工业集团公司西安航空计算技术研究所 | 一种GPU纹理映射非阻塞存储Cache的建模结构 |
CN107066393A (zh) * | 2017-01-12 | 2017-08-18 | 安徽大学 | 提高地址映射表中映射信息密度的方法 |
CN107861895A (zh) * | 2017-10-23 | 2018-03-30 | 深圳市楠菲微电子有限公司 | 基于分布式仲裁的可编程输入输出pio写合并装置和方法 |
CN108319430A (zh) * | 2018-01-17 | 2018-07-24 | 杭州宏杉科技股份有限公司 | 处理io请求的方法及装置 |
Non-Patent Citations (1)
Title |
---|
吴淑玮等: "企业级信息系统数据迁移", 《计算机系统应用》, 15 July 2013 (2013-07-15) * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113760524A (zh) * | 2020-11-17 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 任务执行方法和装置 |
WO2023071101A1 (zh) * | 2021-10-25 | 2023-05-04 | 苏州浪潮智能科技有限公司 | Io任务处理方法、装置和计算机设备和存储介质 |
CN114104880A (zh) * | 2021-11-15 | 2022-03-01 | 云知声(上海)智能科技有限公司 | 电梯呼叫控制系统及其控制方法 |
CN114104880B (zh) * | 2021-11-15 | 2024-03-08 | 云知声(上海)智能科技有限公司 | 电梯呼叫控制系统及其控制方法 |
CN114036077A (zh) * | 2021-11-17 | 2022-02-11 | 海光信息技术股份有限公司 | 数据处理方法及相关装置 |
WO2023087640A1 (zh) * | 2021-11-17 | 2023-05-25 | 海光信息技术股份有限公司 | 数据处理方法、装置、缓存器、处理器及电子设备 |
CN114879909A (zh) * | 2022-05-07 | 2022-08-09 | 北京星辰天合科技股份有限公司 | 数据存储方法及装置、电子设备、存储介质 |
CN116340198A (zh) * | 2023-05-26 | 2023-06-27 | 苏州浪潮智能科技有限公司 | 固态硬盘的数据写入方法、其装置及固态硬盘 |
CN116340198B (zh) * | 2023-05-26 | 2023-08-04 | 苏州浪潮智能科技有限公司 | 固态硬盘的数据写入方法、其装置及固态硬盘 |
Also Published As
Publication number | Publication date |
---|---|
CN111694770B (zh) | 2022-12-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111694770B (zh) | 一种处理io请求的方法及装置 | |
CN108459826B (zh) | 一种处理io请求的方法及装置 | |
US11461027B2 (en) | Deduplication-aware load balancing in distributed storage systems | |
US9710283B2 (en) | System and method for pre-storing small data files into a page-cache and performing reading and writing to the page cache during booting | |
CN110858162B (zh) | 内存管理方法及装置、服务器 | |
CN107122130B (zh) | 一种数据重删方法及装置 | |
US10572180B1 (en) | Method and apparatus to perform a function level reset in a memory controller | |
CN108319430B (zh) | 处理io请求的方法及装置 | |
US10282103B1 (en) | Method and apparatus to delete a command queue | |
US9934248B2 (en) | Computer system and data management method | |
JPH0668736B2 (ja) | 2個のシステムクロックサイクルを利用する書込み動作をもったキャッシュメモリユニットを供与する装置及び方法 | |
WO2016119597A1 (zh) | Oltp集群数据库中页面查询方法及数据处理节点 | |
CN109213423B (zh) | 基于地址屏障无锁处理并发io命令 | |
CN106095331B (zh) | 一种固定大文件内部资源的控制方法 | |
US11061676B2 (en) | Scatter gather using key-value store | |
CN108334457B (zh) | 一种io处理方法及装置 | |
US11803469B2 (en) | Storing data in a log-structured format in a two-tier storage system | |
US11474938B2 (en) | Data storage system with multiple-size object allocator for disk cache | |
US7421536B2 (en) | Access control method, disk control unit and storage apparatus | |
CN114489480A (zh) | 高并发存储数据的方法及系统 | |
CN111399753B (zh) | 写入图片的方法和装置 | |
CN108984432B (zh) | 一种处理io请求的方法及装置 | |
CN109213424B (zh) | 并发io命令的无锁处理方法 | |
CN111209304A (zh) | 数据处理方法、装置及系统 | |
CN111694504B (zh) | 一种处理读请求的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |