CN113608674A - 一种实现分布式块存储系统读写的方法及装置 - Google Patents
一种实现分布式块存储系统读写的方法及装置 Download PDFInfo
- Publication number
- CN113608674A CN113608674A CN202110709741.7A CN202110709741A CN113608674A CN 113608674 A CN113608674 A CN 113608674A CN 202110709741 A CN202110709741 A CN 202110709741A CN 113608674 A CN113608674 A CN 113608674A
- Authority
- CN
- China
- Prior art keywords
- read
- write
- vector
- request
- readv
- 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
- 238000000034 method Methods 0.000 title claims abstract description 82
- 239000013598 vector Substances 0.000 claims abstract description 150
- 239000000872 buffer Substances 0.000 claims abstract description 38
- 230000002776 aggregation Effects 0.000 claims abstract description 12
- 238000004220 aggregation Methods 0.000 claims abstract description 12
- 238000006243 chemical reaction Methods 0.000 claims abstract description 9
- 230000006870 function Effects 0.000 claims description 17
- 230000003139 buffering effect Effects 0.000 claims description 2
- 230000008569 process Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 238000012546 transfer Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 1
- 239000006185 dispersion Substances 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000006386 memory function Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请公开了一种实现分布式块存储系统读写的方法及装置,该方法包括:获取IO向量队列参数,当IO向量队列参数为writev时,采用缓存暂存的方法,对分布式块存储系统进行聚集写操作;当IO向量队列参数为readv时,采用内存转换的方法,对分布式块存储系统进行散布读操作;当IO向量队列参数为write/read时,采用缓存暂存与合并下发的方法,将多个缓存区的连续读写请求,统一下发至分布式块存储系统。该系统包括:IO向量参数获取模块、聚集写模块、散布读模块和连续读写模块。通过本申请,能够有效提高分布式块存储系统的存储效率。
Description
技术领域
本申请涉及分布式存储技术领域,特别是涉及一种实现分布式块存储系统读写的方法及装置。
背景技术
随着信息化技术的发展,用户的存储需要越来越高,相比于传统的存储系统,云存储以其扩展性强、性价比高、容错性好等优势,得到了业界的广泛认同。而云存储中的重要技术之一就是分布式块存储技术,在信息化的海量存储需求中,如何对分布式块存储系统进行读写,从而提升分布式块存储系统的读写效率,是个重要的技术问题。
目前分布式块存储系统的读写方法,通常是:当一个虚拟磁盘有多个缓冲区获取到分布式块存储的读命令或者写命令时,按照读操作和写操作对不同命令进行分类,然后逐一执行读操作和写操作,直到完成当前命令的所有读写操作。
然而,目前分布式块存储系统的读写方法中,由于分布式存储所对接的场景不断丰富,虚拟化场景也越来越多,面对一个磁盘存在多个缓冲区同时进行读写的操作时,由于单个虚拟磁盘的IOPS(Input/Output Operations Per Second,每秒进行读写(I/O)操作的次数)存在着上线,这种逐一执行读操作和写操作,会占用大量的读写时间,从而降低存储系统的存储效率,进而无法满足用户越来越高的存储需求。
发明内容
本申请提供了一种实现分布式块存储系统读写的方法及装置,以解决现有技术中分布式块存储读写方法导致存储效率较低的问题。
为了解决上述技术问题,本申请实施例公开了如下技术方案:
一种实现分布式块存储系统读写的方法,所述方法包括:
获取IO向量队列参数,所述IO向量队列参数为:聚集写参数writev、散布读参数readv以及分散读写参数write/read中的一种;
当IO向量队列参数为writev时,采用缓存暂存的方法,对分布式块存储系统进行聚集写操作;
当IO向量队列参数为readv时,采用内存转换的方法,对分布式块存储系统进行散布读操作;
当IO向量队列参数为write/read时,采用缓存暂存与合并下发的方法,将多个缓存区的连续读写请求,统一下发至分布式块存储系统。
可选地,所述当IO向量队列参数为writev时,采用缓存暂存的方法,对分布式块存储系统进行聚集写操作,包括:
获取writev IO向量的偏移量和长度;
根据所述writev IO向量的偏移量和长度,分配新的向量和第一内存缓存区,所述新的向量用于接收转移后的writev IO向量的偏移量和长度,所述第一内存缓存区用于接收writev IO向量中的buf;
根据所述writev IO向量的偏移量和长度,将缓存数据转移至所述第一内存缓存区;
将第一内存缓存区的内存缓存区指针传入回调函数中,所述回调函数用于请求异步回调空间;
根据转移后的writev IO向量的偏移量和长度,以及所述第一内存缓存区,计算请求writev操作的数据对应的数据块和物理磁盘地址;
根据所述数据块和物理磁盘地址,对请求writev操作的数据执行异步写请求;
写入完成后,根据所述内存缓存区指针释放所述内存缓存区。
可选地,所述当IO向量队列参数为readv时,采用内存转换的方法,对分布式块存储系统进行散布读操作,包括:
获取所有readv IO向量的偏移量和长度;
根据任一所述readv IO向量的偏移量和长度,分配一个向量指针和一个第二内存缓存区,所述第二内存缓存区用于接收IO向量中的缓存数据;
将每个readv IO向量的地址传递至所述向量指针,并将所述向量指针传入回调函数中,所述回调函数用于请求异步回调空间;
根据任一所述readv IO向量的偏移量和长度,以及对应的第二内存缓存区,计算请求readv操作的数据所对应的数据块和物理磁盘地址;
根据请求readv操作的数据所对应的数据块和物理磁盘地址,对请求readv操作的数据执行异步读请求;
读取完成后,根据所述向量指针遍历所有readv IO向量,获取每个readv请求的偏移量、长度和第二内存缓存区;
单步读取磁盘缓存buf中的数据,将磁盘缓存buf中的数据写入每个readv IO向量地址所对应的第二内存缓存区。
可选地,所述单步读取磁盘缓存buf中的数据,将磁盘缓存buf中的数据写入每个readv IO向量地址所对应的第二内存缓存区,具体为:
根据每个readv请求的偏移量和长度,依次读取磁盘缓存buf中的数据,将磁盘缓存buf中的数据写入每个readv IO向量地址所对应的第二内存缓存区。
可选地,所述当IO向量队列参数为write/read时,采用缓存暂存与合并下发的方法,将多个缓存区的连续读写请求,统一下发至分布式块存储系统,包括:
申请两个队列,分别用于暂存所获取的读请求和写请求;
针对任一读请求和写请求,分配一个设置有请求超时阈值的时钟;
采用一线程对每个队列中的读请求和写请求,进行遍历与合并;
针对任一读请求或写请求,根据所述时钟判断所述读请求或写请求是否为超时请求;
如果是,判断前后两个请求是否为相邻请求;
如果是相邻请求,则合并相邻的读请求或写请求;
对合并后的读请求或写请求进行相应的读操作或写操作。
可选地,所述合并相邻的读请求或写请求,包括:
将相邻的所述读请求或写请求合并为一个较大的合并请求;
将每个所述合并请求的回调暂存至回调池;
将所述合并请求的时钟更新为合并前两个相邻读请求或写请求中时间较大的值。
可选地,所述请求超时阈值为100毫秒。
可选地,当所述读请求或写请求判定为超时请求时,所述采用缓存暂存与合并下发的方法,将多个缓存区的连续读写请求,统一下发至分布式块存储系统的方法,还包括:
针对任一读请求或写请求,判断所述读请求或写请求的请求长度是否超出合并长度阈值;
如果是,从所述队列中出队,并直接执行读操作或写操作。
可选地,对合并后的读请求或写请求进行相应的读操作或写操作之后,所述方法还包括:
编辑回调池中不同请求的回调;
根据不同请求的回调,分发转移相应数据,并通过逐个调用不同请求的回调完成请求读写。
一种实现分布式块存储系统读写的装置,所述装置包括:
IO向量参数获取模块,用于获取IO向量队列参数,所述IO向量队列参数为:聚集写参数writev、散布读参数readv以及分散读写参数write/read中的一种;
聚集写模块,用于当IO向量队列参数为writev时,采用缓存暂存的方法,对分布式块存储系统进行聚集写操作;
散布读模块,用于当IO向量队列参数为readv时,采用内存转换的方法,对分布式块存储系统进行散布读操作;
连续读写模块,用于当IO向量队列参数为write/read时,采用缓存暂存与合并下发的方法,将多个缓存区的连续读写请求,统一下发至分布式块存储系统。
本申请的实施例提供的技术方案可以包括以下有益效果:
本申请提供一种实现分布式块存储系统读写的方法,该方法首先获取IO向量队列参数,当IO向量队列参数为writev时,采用缓存暂存的方法,对分布式块存储系统进行聚集写操作,当IO向量队列参数为readv时,采用内存转换的方法,对分布式块存储系统进行散布读操作;当IO向量队列参数为write/read时,采用缓存暂存与合并下发的方法,将多个缓存区的连续读写请求,统一下发至分布式块存储系统。本实施例根据所获取的不同IO向量队列参数,采用不同的方法执行相应的读请求、写请求或多个缓存区的连续读写请求,这种方法使得本实施例既能够支持业务层传入的已有的readv读向量参数、writev写向量参数,又能够实现分散write/read请求的统一处理,从而大大提高分布式块存储系统的存储业务上限和存储效率,提高用户体验,有利于提高分布式块存储系统的市场竞争力。尤其是当IO向量队列参数为write/read时,采用缓存暂存与合并下发的方法,将多个缓存区的连续读写请求进行合并,能够有效提高存储业务上限,从而提高存储效率。
本申请还提供一种实现分布式块存储系统读写的装置,该装置主要包括:IO向量参数获取模块、聚集写模块、散布读模块和连续读写模块。通过IO向量参数获取模块获取到不同的参数后,根据不同的参数启动聚集写模块、散布读模块或连续读写模块,从而采用不同的方法执行不同的读写操作,这种结构设计,根据不同的IO向量参数而定,有针对性,既支持已经存在的内核readv、writev参数,又能够实现分散write/read请求的统一处理,有利于提高存储的灵活性,以及存储业务的上限,从而大大提高分布式块存储系统的存储效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例所提供的一种实现分布式块存储系统读写的方法的流程示意图;
图2为本申请实施例所提供的一种实现分布式块存储系统读写的装置的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
为了更好地理解本申请,下面结合附图来详细解释本申请的实施方式。
实施例一
参见图1,图1为本申请实施例所提供的一种实现分布式块存储系统读写的方法的流程示意图。由图1可知,本实施例中实现分布式块存储系统读写的方法,包括如下过程:
S1:获取IO向量队列参数。
本实施例的方法运行于l inux平台,IO向量队列参数为:聚集写参数writev、散布读参数readv以及分散读写参数write/read中的一种。
根据不同的IO向量队列参数,采用不同的方法执行不同的读操作或写操作。
当IO向量队列参数为writev时,执行步骤S2:采用缓存暂存的方法,对分布式块存储系统进行聚集写操作。
具体地,步骤S2包括如下过程:
S21:获取writev IO向量的偏移量和长度。
也就是获取writev请求下iovec的偏移和长度。
S22:根据writev IO向量的偏移量和长度,分配新的向量和第一内存缓存区,新的向量用于接收转移后的writev IO向量的偏移量和长度,第一内存缓存区用于接收writevIO向量中的buf。
S22:根据writev IO向量的偏移量和长度,将缓存数据转移至第一内存缓存区。
S24:将第一内存缓存区的内存缓存区指针传入回调函数中,回调函数用于请求异步回调空间。
也就是,将第一内存缓存区的内存缓存区指针传入回调函数,请求异步回调空间,以便于writev请求完成时释放缓存区空间。
S25:根据转移后的writev IO向量的偏移量和长度,以及第一内存缓存区,计算请求writev操作的数据对应的数据块和物理磁盘地址。
也就是根据转移后的writev IO向量的偏移量和长度,以及第一内存缓存区,确定请求writev操作的数据属于哪部分数据块,以及该数据的物理磁盘所在地址。
S26:根据数据块和物理磁盘地址,对请求writev操作的数据执行异步写请求。
S27:写入完成后,根据内存缓存区指针释放内存缓存区。
写入完成后,根据回调空间中的buf指针,释放缓存空间,完成writev请求,至此,聚集写请求中的分散的请求全部写入分布式块存储系统的持久化区域。释放缓存空间时,可以采用系统释放内存函数,释放buf指针所指向的缓存空间。
继续参见图1可知,当IO向量队列参数为readv时,执行步骤S3:采用内存转换的方法,对分布式块存储系统进行散布读操作。
具体地,步骤S3包括如下过程:
S31:获取所有readv IO向量的偏移量和长度。
也就是获取readv请求下iovec的偏移和长度。
S32:根据任一readv IO向量的偏移量和长度,分配一个向量指针和一个第二内存缓存区,第二内存缓存区用于接收IO向量中的缓存数据。
S33:将每个readv IO向量的地址传递至向量指针,并将向量指针传入回调函数中,回调函数用于请求异步回调空间。
也就是建立向量指针与用户向量地址之间的映射关系,并传入请求异步回调空间,以便于readv请求完成时进行缓存分配。
由步骤S32和S33可知,本实施例中,readv需要记录每个向量的偏移、长度、buf指针,readv请求完成后将读取的数据依次放入buf中。
S34:根据任一readv IO向量的偏移量和长度,以及对应的第二内存缓存区,计算请求readv操作的数据所对应的数据块和物理磁盘地址。
S35:根据请求readv操作的数据所对应的数据块和物理磁盘地址,对请求readv操作的数据执行异步读请求。
也就是根据readv请求的偏移量、长度、申请的缓存区,计算readv操作的数据属于哪部分数据,以及readv操作的数据的物理磁盘所在地址,执行异步读请求。
S36:读取完成后,根据向量指针遍历所有readv IO向量,获取每个readv请求的偏移量、长度和第二内存缓存区。
S37:单步读取磁盘缓存buf中的数据,将磁盘缓存buf中的数据写入每个readv IO向量地址所对应的第二内存缓存区。
由步骤S36和S37可知,从磁盘读取完成后,根据回调空间中的向量指针,遍历该向量结构,获取到各个请求的偏移量、长度以及二内存缓存区,单步读取磁盘的缓存buf中分段读取数据,然后写入各个向量地址空间对应的第二内存缓存区,完成缓存至第二内存缓存区的内存转移。
进一步地,本实施例中步骤S37的实现方法,具体为:
根据每个readv请求的偏移量和长度,依次读取磁盘缓存buf中的数据,将磁盘缓存buf中的数据写入每个readv IO向量地址所对应的第二内存缓存区。
继续参见图1可知,当IO向量队列参数为write/read时,执行步骤S4:采用缓存暂存与合并下发的方法,将多个缓存区的连续读写请求,统一下发至分布式块存储系统。
具体地,步骤S4包括如下过程:
S40:申请两个队列,分别用于暂存所获取的读请求和写请求。
S41:针对任一读请求和写请求,分配一个设置有请求超时阈值的时钟。
本实施例中请求超时阈值为100毫秒,也就是当请求时间大于等于100毫秒时,判定为请求超时,执行请求超时的后续步骤,当请求时间小于100毫秒时,判定为请求没有超时,继续维持请求状态。
S42:采用一线程对每个队列中的读请求和写请求,进行遍历与合并。
S43:针对任一读请求或写请求,根据时钟判断读请求或写请求是否为超时请求。
如果读请求或写请求为超时请求,执行步骤S44:判断前后两个请求是否为相邻请求。
本实施例中的相邻请求指的是相邻偏移量请求。
判定为请求超时的时候,出队,并继续判断前后两个请求是否为相邻请求,当判定为请求没有超时的时候,继续在队列中等待即可。
如果是相邻请求,执行步骤S45:则合并相邻的读请求或写请求。
具体地,步骤S45又包括如下过程:
S451:将相邻的读请求或写请求合并为一个较大的合并请求。
可以采用向前合并的方式,也可以采用向后合并的方式,将当前的两个相邻的请求合并为一个合并请求。
S452:将每个合并请求的回调暂存至回调池。
S453:将合并请求的时钟更新为合并前两个相邻读请求或写请求中时间较大的值。
也就是,比对合并前两个相邻请求的时间,选定时间较大的值,采用这个时间较大的值作为合并请求的时钟。
S46:对合并后的读请求或写请求进行相应的读操作或写操作。
进一步地,本实施例对合并后的读请求或写请求进行相应的读操作或写操作之后,还包括步骤S47:编辑回调池中不同请求的回调。
S48:根据不同请求的回调,分发转移相应数据,并通过逐个调用不同请求的回调完成请求读写。
进一步地,当读请求或写请求判定为超时请求时,采用缓存暂存与合并下发的方法,将多个缓存区的连续读写请求,统一下发至分布式块存储系统的方法,还包括对请求长度的判断。具体地,包括步骤S49:针对任一读请求或写请求,判断读请求或写请求的请求长度是否超出合并长度阈值。本实施例中合并长度阈值取值为1MB。
如果读请求或写请求的请求长度超出合并长度阈值,队列中出队,并直接执行读操作或写操作,否则继续在队列中等待。
通过步骤S48,在线程遍历队列时,同时判断时钟是否超时和请求长度是否超长,能够提高判断的准确性,有利于进一步提高分布式块存储系统的读写效率。
实施例二
在图1所示实施例的基础上参见图2,图2为本申请实施例所提供的一种实现分布式块存储系统读写的装置的结构示意图。由图2可知,本实施例中实现分布式块存储系统读写的装置主要包括:IO向量参数获取模块、聚集写模块、散布读模块和连续读写模块。
其中,IO向量参数获取模块,用于获取IO向量队列参数,IO向量队列参数为:聚集写参数writev、散布读参数readv以及分散读写参数write/read中的一种;聚集写模块,用于当IO向量队列参数为writev时,采用缓存暂存的方法,对分布式块存储系统进行聚集写操作;散布读模块,用于当IO向量队列参数为readv时,采用内存转换的方法,对分布式块存储系统进行散布读操作;连续读写模块,用于当IO向量队列参数为write/read时,采用缓存暂存与合并下发的方法,将多个缓存区的连续读写请求,统一下发至分布式块存储系统。
进一步地,聚集写模块包括:第一偏移量和长度获取单元、向量和内存缓存区分配单元、数据转移单元、第一指针传入单元、第一计算单元、异步写请求单元和释放单元。
其中,第一偏移量和长度获取单元,用于获取writev IO向量的偏移量和长度;向量和内存缓存区分配单元,用于根据writev IO向量的偏移量和长度,分配新的向量和第一内存缓存区,新的向量用于接收转移后的writev IO向量的偏移量和长度,第一内存缓存区用于接收writev IO向量中的buf;数据转移单元,用于根据writev IO向量的偏移量和长度,将缓存数据转移至第一内存缓存区;第一指针传入单元,用于将第一内存缓存区的内存缓存区指针传入回调函数中,回调函数用于请求异步回调空间;第一计算单元,用于根据转移后的writev IO向量的偏移量和长度,以及第一内存缓存区,计算请求writev操作的数据对应的数据块和物理磁盘地址;异步写请求单元,用于根据数据块和物理磁盘地址,对请求writev操作的数据执行异步写请求;释放单元,用于写入完成后,根据内存缓存区指针释放内存缓存区。
散布读模块包括:第二偏移量和长度获取单元、向量指针和内存缓存区分配单元、第二指针传入单元、第二计算单元、异步读请求单元、第一遍历单元和单步读取单元。其中,第二偏移量和长度获取单元,用于获取所有readv IO向量的偏移量和长度;向量指针和内存缓存区分配单元,用于根据任一readv IO向量的偏移量和长度,分配一个向量指针和一个第二内存缓存区,第二内存缓存区用于接收IO向量中的缓存数据;第二指针传入单元,用于将每个readv IO向量的地址传递至向量指针,并将向量指针传入回调函数中,回调函数用于请求异步回调空间;第二计算单元,用于根据任一readv IO向量的偏移量和长度,以及对应的第二内存缓存区,计算请求readv操作的数据所对应的数据块和物理磁盘地址;异步读请求单元,用于根据请求readv操作的数据所对应的数据块和物理磁盘地址,对请求readv操作的数据执行异步读请求;第一遍历单元,用于读取完成后,根据向量指针遍历所有readv IO向量,获取每个readv请求的偏移量、长度和第二内存缓存区;单步读取单元,用于单步读取磁盘缓存buf中的数据,将磁盘缓存buf中的数据写入每个readv IO向量地址所对应的第二内存缓存区。
连续读写模块包括:队列申请单元、时钟分配单元、第二遍历单元、第一判断单元、第二判断单元、合并单元和读写操作单元。其中,队列申请单元,用于申请两个队列,分别用于暂存所获取的读请求和写请求;时钟分配单元,用于针对任一读请求和写请求,分配一个设置有请求超时阈值的时钟;第二遍历单元,用于采用一线程对每个队列中的读请求和写请求,进行遍历与合并;第一判断单元,用于针对任一读请求或写请求,根据时钟判断读请求或写请求是否为超时请求;第二判断单元,用于当读请求或写请求为超时请求时,判断前后两个请求是否为相邻请求;合并单元,用于当前后两个请求为相邻请求时,合并相邻的读请求或写请求;读写操作单元,用于对合并后的读请求或写请求进行相应的读操作或写操作。
该实施例中实现分布式块存储系统读写的装置的工作原理和工作方法,在图1所示的实施例中已经详细阐述,在此不再赘述,
以上所述仅是本申请的具体实施方式,使本领域技术人员能够理解或实现本申请。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种实现分布式块存储系统读写的方法,其特征在于,所述方法包括:
获取IO向量队列参数,所述IO向量队列参数为:聚集写参数writev、散布读参数readv以及分散读写参数write/read中的一种;
当IO向量队列参数为writev时,采用缓存暂存的方法,对分布式块存储系统进行聚集写操作;
当IO向量队列参数为readv时,采用内存转换的方法,对分布式块存储系统进行散布读操作;
当IO向量队列参数为write/read时,采用缓存暂存与合并下发的方法,将多个缓存区的连续读写请求,统一下发至分布式块存储系统。
2.根据权利要求1所述的一种实现分布式块存储系统读写的方法,其特征在于,所述当IO向量队列参数为writev时,采用缓存暂存的方法,对分布式块存储系统进行聚集写操作,包括:
获取writev IO向量的偏移量和长度;
根据所述writev IO向量的偏移量和长度,分配新的向量和第一内存缓存区,所述新的向量用于接收转移后的writev IO向量的偏移量和长度,所述第一内存缓存区用于接收writev IO向量中的buf;
根据所述writevIO向量的偏移量和长度,将缓存数据转移至所述第一内存缓存区;
将第一内存缓存区的内存缓存区指针传入回调函数中,所述回调函数用于请求异步回调空间;
根据转移后的writev IO向量的偏移量和长度,以及所述第一内存缓存区,计算请求writev操作的数据对应的数据块和物理磁盘地址;
根据所述数据块和物理磁盘地址,对请求writev操作的数据执行异步写请求;
写入完成后,根据所述内存缓存区指针释放所述内存缓存区。
3.根据权利要求1所述的一种实现分布式块存储系统读写的方法,其特征在于,所述当IO向量队列参数为readv时,采用内存转换的方法,对分布式块存储系统进行散布读操作,包括:
获取所有readv IO向量的偏移量和长度;
根据任一所述readv IO向量的偏移量和长度,分配一个向量指针和一个第二内存缓存区,所述第二内存缓存区用于接收IO向量中的缓存数据;
将每个readv IO向量的地址传递至所述向量指针,并将所述向量指针传入回调函数中,所述回调函数用于请求异步回调空间;
根据任一所述readv IO向量的偏移量和长度,以及对应的第二内存缓存区,计算请求readv操作的数据所对应的数据块和物理磁盘地址;
根据请求readv操作的数据所对应的数据块和物理磁盘地址,对请求readv操作的数据执行异步读请求;
读取完成后,根据所述向量指针遍历所有readv IO向量,获取每个readv请求的偏移量、长度和第二内存缓存区;
单步读取磁盘缓存buf中的数据,将磁盘缓存buf中的数据写入每个readv IO向量地址所对应的第二内存缓存区。
4.根据权利要求3所述的一种实现分布式块存储系统读写的方法,其特征在于,所述单步读取磁盘缓存buf中的数据,将磁盘缓存buf中的数据写入每个readv IO向量地址所对应的第二内存缓存区,具体为:
根据每个readv请求的偏移量和长度,依次读取磁盘缓存buf中的数据,将磁盘缓存buf中的数据写入每个readv IO向量地址所对应的第二内存缓存区。
5.根据权利要求1所述的一种实现分布式块存储系统读写的方法,其特征在于,所述当IO向量队列参数为write/read时,采用缓存暂存与合并下发的方法,将多个缓存区的连续读写请求,统一下发至分布式块存储系统,包括:
申请两个队列,分别用于暂存所获取的读请求和写请求;
针对任一读请求和写请求,分配一个设置有请求超时阈值的时钟;
采用一线程对每个队列中的读请求和写请求,进行遍历与合并;
针对任一读请求或写请求,根据所述时钟判断所述读请求或写请求是否为超时请求;
如果是,判断前后两个请求是否为相邻请求;
如果是相邻请求,则合并相邻的读请求或写请求;
对合并后的读请求或写请求进行相应的读操作或写操作。
6.根据权利要求5所述的一种实现分布式块存储系统读写的方法,其特征在于,所述合并相邻的读请求或写请求,包括:
将相邻的所述读请求或写请求合并为一个较大的合并请求;
将每个所述合并请求的回调暂存至回调池;
将所述合并请求的时钟更新为合并前两个相邻读请求或写请求中时间较大的值。
7.根据权利要求5所述的一种实现分布式块存储系统读写的方法,其特征在于,所述请求超时阈值为100毫秒。
8.根据权利要求5所述的一种实现分布式块存储系统读写的方法,其特征在于,当所述读请求或写请求判定为超时请求时,所述采用缓存暂存与合并下发的方法,将多个缓存区的连续读写请求,统一下发至分布式块存储系统的方法,还包括:
针对任一读请求或写请求,判断所述读请求或写请求的请求长度是否超出合并长度阈值;
如果是,从所述队列中出队,并直接执行读操作或写操作。
9.根据权利要求6所述的一种实现分布式块存储系统读写的方法,其特征在于,对合并后的读请求或写请求进行相应的读操作或写操作之后,所述方法还包括:
编辑回调池中不同请求的回调;
根据不同请求的回调,分发转移相应数据,并通过逐个调用不同请求的回调完成请求读写。
10.一种实现分布式块存储系统读写的装置,其特征在于,所述装置包括:
IO向量参数获取模块,用于获取IO向量队列参数,所述IO向量队列参数为:聚集写参数writev、散布读参数readv以及分散读写参数write/read中的一种;
聚集写模块,用于当IO向量队列参数为writev时,采用缓存暂存的方法,对分布式块存储系统进行聚集写操作;
散布读模块,用于当IO向量队列参数为readv时,采用内存转换的方法,对分布式块存储系统进行散布读操作;
连续读写模块,用于当IO向量队列参数为write/read时,采用缓存暂存与合并下发的方法,将多个缓存区的连续读写请求,统一下发至分布式块存储系统。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110709741.7A CN113608674B (zh) | 2021-06-25 | 2021-06-25 | 一种实现分布式块存储系统读写的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110709741.7A CN113608674B (zh) | 2021-06-25 | 2021-06-25 | 一种实现分布式块存储系统读写的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113608674A true CN113608674A (zh) | 2021-11-05 |
CN113608674B CN113608674B (zh) | 2024-02-23 |
Family
ID=78336824
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110709741.7A Active CN113608674B (zh) | 2021-06-25 | 2021-06-25 | 一种实现分布式块存储系统读写的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113608674B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5938743A (en) * | 1997-03-17 | 1999-08-17 | Xerox Corporation | Method of using the UNIX physio to allow data to be transferred on a plurality of channels concurrently |
US6678855B1 (en) * | 1999-12-02 | 2004-01-13 | Microsoft Corporation | Selecting K in a data transmission carousel using (N,K) forward error correction |
US20050210475A1 (en) * | 2004-03-22 | 2005-09-22 | Paul Hepworth | Object identifier readers that are configured to automatically send and/or store data read from an object identifier |
EP2154615A1 (en) * | 2008-08-12 | 2010-02-17 | Software AG | Method and interprocess communication driver for managing reqests of a database client to a database server |
CN107632784A (zh) * | 2017-09-14 | 2018-01-26 | 郑州云海信息技术有限公司 | 一种存储介质和分布式存储系统的缓存方法、装置及设备 |
CN108664412A (zh) * | 2018-05-18 | 2018-10-16 | 广州优视网络科技有限公司 | Io数据流处理方法、装置、存储介质和终端 |
CN111159176A (zh) * | 2019-11-29 | 2020-05-15 | 中国科学院计算技术研究所 | 一种海量流数据的存储和读取的方法和系统 |
CN111708488A (zh) * | 2020-05-26 | 2020-09-25 | 苏州浪潮智能科技有限公司 | 一种基于分布式内存盘的Ceph性能优化的方法和设备 |
CN112269539A (zh) * | 2020-10-16 | 2021-01-26 | 苏州浪潮智能科技有限公司 | 一种基于iSCSI的分布式块存储系统的卷映射方法及装置 |
-
2021
- 2021-06-25 CN CN202110709741.7A patent/CN113608674B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5938743A (en) * | 1997-03-17 | 1999-08-17 | Xerox Corporation | Method of using the UNIX physio to allow data to be transferred on a plurality of channels concurrently |
US6678855B1 (en) * | 1999-12-02 | 2004-01-13 | Microsoft Corporation | Selecting K in a data transmission carousel using (N,K) forward error correction |
US20050210475A1 (en) * | 2004-03-22 | 2005-09-22 | Paul Hepworth | Object identifier readers that are configured to automatically send and/or store data read from an object identifier |
EP2154615A1 (en) * | 2008-08-12 | 2010-02-17 | Software AG | Method and interprocess communication driver for managing reqests of a database client to a database server |
CN107632784A (zh) * | 2017-09-14 | 2018-01-26 | 郑州云海信息技术有限公司 | 一种存储介质和分布式存储系统的缓存方法、装置及设备 |
CN108664412A (zh) * | 2018-05-18 | 2018-10-16 | 广州优视网络科技有限公司 | Io数据流处理方法、装置、存储介质和终端 |
CN111159176A (zh) * | 2019-11-29 | 2020-05-15 | 中国科学院计算技术研究所 | 一种海量流数据的存储和读取的方法和系统 |
CN111708488A (zh) * | 2020-05-26 | 2020-09-25 | 苏州浪潮智能科技有限公司 | 一种基于分布式内存盘的Ceph性能优化的方法和设备 |
CN112269539A (zh) * | 2020-10-16 | 2021-01-26 | 苏州浪潮智能科技有限公司 | 一种基于iSCSI的分布式块存储系统的卷映射方法及装置 |
Non-Patent Citations (4)
Title |
---|
RAJESH KUMAR ET AL: "A Multimodal Malware Detection Technique for Android IoT Devices Using Various Features", 《IEEE ACCESS》, vol. 7 * |
VAJAY VASUDEVAN ET AL: "Using vector interfaces to deliver millions of IOPS from a networked key-value storage server", 《SOCC\'12》, no. 8 * |
丰超: "高性能电力大数据服务器软件系统设计与关键算法研究", 《中国硕士学位论文电子期刊》, vol. 2018, no. 8 * |
刘典型;: "多虚拟机下基于内存缓存的动态块迁移算法", 计算机应用与软件, no. 03 * |
Also Published As
Publication number | Publication date |
---|---|
CN113608674B (zh) | 2024-02-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110515859B (zh) | 一种固态硬盘读写请求并行处理方法 | |
US8325603B2 (en) | Method and apparatus for dequeuing data | |
CN103634379B (zh) | 一种分布式存储空间的管理方法和分布式存储系统 | |
CN112527494A (zh) | 信息处理设备和方法以及非暂态计算机可读记录介质 | |
CN103425538A (zh) | 进程通讯方法及系统 | |
US10860352B2 (en) | Host system and method for managing data consumption rate in a virtual data processing environment | |
CN110058816B (zh) | 一种基于ddr的高速多用户队列管理器及方法 | |
CN106648832A (zh) | 提高虚拟机资源利用率的装置及方法 | |
CN109062826A (zh) | 数据传输方法及系统 | |
CN108733585A (zh) | 缓存系统及相关方法 | |
CN103685544A (zh) | 一种基于性能预估的客户端缓存分配方法和系统 | |
WO2020125362A1 (zh) | 文件系统及数据布局方法 | |
CN106469119A (zh) | 一种基于nvdimm的数据写缓存方法及其装置 | |
CN107220069B (zh) | 一种针对非易失性内存的Shuffle方法 | |
CN116893991B (zh) | 一种axi协议下的存储模块转换接口及其转换方法 | |
CN113608674B (zh) | 一种实现分布式块存储系统读写的方法及装置 | |
CN117215491A (zh) | 一种快速数据访问方法、快速数据访问装置及光模块 | |
CN108052296B (zh) | 一种数据读取方法、设备及计算机存储介质 | |
CN114564420A (zh) | 多核处理器共享并行总线的方法 | |
CN115712486A (zh) | 虚拟机的热迁移控制方法和装置、介质和计算机设备 | |
CN112114967A (zh) | 一种基于服务优先级的gpu资源预留方法 | |
CN111694777B (zh) | 基于PCIe接口的DMA传输方法 | |
CN109992217A (zh) | 一种服务质量控制方法、装置、电子设备和存储介质 | |
CN116820333B (zh) | 一种基于多线程的ssdraid-5持续写入方法 | |
CN111831397B (zh) | 处理io请求的方法、装置、设备及存储介质 |
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 |