CN108536393A - 一种磁盘初始化方法及装置 - Google Patents
一种磁盘初始化方法及装置 Download PDFInfo
- Publication number
- CN108536393A CN108536393A CN201810229420.5A CN201810229420A CN108536393A CN 108536393 A CN108536393 A CN 108536393A CN 201810229420 A CN201810229420 A CN 201810229420A CN 108536393 A CN108536393 A CN 108536393A
- Authority
- CN
- China
- Prior art keywords
- disk
- chunk
- initialization
- bitmap
- tables
- 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
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/0629—Configuration or reconfiguration of storage systems
- G06F3/0632—Configuration or reconfiguration of storage systems by initialisation or re-initialisation of storage systems
-
- 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/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0689—Disk arrays, e.g. RAID, JBOD
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)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供了一种磁盘初始化方法及装置。所述方法包括:根据各磁盘输入/输出IO的偏移获取各磁盘IO对应的定长数据块chunk表,在各chunk表中查找或添加各磁盘IO对应的chunk表节点,将各chunk表节点的状态信息记录在位图bitmap中;对各chunk表节点设置对应的自旋锁,根据各自旋锁将所述bitmap中对应的chunk表节点的状态信息锁定为初始化状态;根据各目标chunk表节点,生成对应的磁盘初始化IO,并将各磁盘初始化IO发送给目标设备,以使所述目标设备执行各磁盘初始化IO,以实现磁盘的初始化;其中,所述目标chunk表节点为状态信息是初始化状态的chunk表节点。本发明实施例实现了初始化磁盘时,能够提前确认磁盘中数据的状态,避免无用的重复操作,加快了磁盘初始化的速度。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种磁盘初始化方法及装置。
背景技术
磁盘阵列(Redundant Arrays of Independent Disks,RAID)是独立磁盘构成的具有冗余能力的阵列,RAID5是一种存储性能、数据安全和存储成本兼顾的存储解决方案。RAID5在读取数据时,通过计算各磁盘上的数据校验值来确认数据的正确性。为了确保校验的可用性,RAID5所有磁盘上的数据必须进行初始化,即清零。
传统方案有两种:一是在创建RAID5之前,对磁盘上的数据进行预处理。二是在创建RAID5之后,再在RAID级别进行初始化操作,可以是后台操作或者前台操作。
方案一,对磁盘进行预处理,则在预处理完成之前,不能使用这些磁盘创建RAID。此方案有以下缺陷:用户需要等待预处理完成才能进行进一步配置,非常影响用户操作配置的便利性;不能在预处理阶段处理其他IO;如果不能保存预处理的状态,一旦发生设备断电等问题,需要重新执行预处理操作;已经初始化过的数据段会被重复初始化。
方案二,在创建RAID5之后,再对磁盘进行初始化。初始化信息会被保存在RAID级别。这就要求按照条带进行初始化,因为若是各个条带的初始化进度不一致,也会影响到校验的计算。按照条带对磁盘进行初始化有如下缺陷:磁盘的写入速度可能不稳定,按照条带进行初始化会把初始化速度限制在各个磁盘在某一时刻的最低速度,即在初始化时,先完成数据写入的磁盘会等待后完成的磁盘,结果导致整体的初始化时间要比单盘的初始化时间要长得多;在初始化的过程中,如果并行的处理RAID的IO,将会导致IO性能很差;重复初始化,在磁盘上部分的数据已经是零的情况下(例如,删除已有RAID5,使用同样的磁盘建立一个新的RAID组),RAID5仍会将所有磁盘上的数据清零。这样显然是很没有效率的。
因此,如何快速高效地实现磁盘的初始化成为一个亟待解决的问题。
发明内容
针对现有技术中的缺陷,本发明实施例提供一种磁盘初始化方法及装置。
第一方面,本发明实施例提供了一种磁盘初始化方法,所述方法包括:
根据各磁盘输入/输出IO的偏移获取各磁盘IO对应的定长数据块chunk表,在各chunk表中查找或添加各磁盘IO对应的chunk表节点,将各chunk表节点的状态信息记录在位图bitmap中;
对各chunk表节点设置对应的自旋锁,根据各自旋锁将所述bitmap中对应的chunk表节点的状态信息锁定为初始化状态;
根据各目标chunk表节点,生成对应的磁盘初始化IO,并将各磁盘初始化IO发送给目标设备,以使所述目标设备执行各磁盘初始化IO,以实现磁盘的初始化;
其中,所述目标chunk表节点为状态信息是初始化状态的chunk表节点。
可选地,所述根据各目标chunk表节点,生成对应的磁盘初始化IO,并将各磁盘初始化IO发送给目标设备,以使所述目标设备执行各磁盘初始化IO,以实现磁盘的初始化之后,还包括:根据各目标chunk表节点,生成对应的磁盘初始化IO,并将各磁盘初始化IO发送给目标设备,以使所述目标设备异步处理所述磁盘IO,以实现磁盘的初始化。
可选地,所述方法还包括:
检查各chunk表节点上是否存在等待的磁盘写IO;
如果存在,则将所述bitmap中对应的chunk表节点的状态信息设置为写入状态,并启动所述bitmap的同步流程;
其中,所述同步流程采用周期性或者立即同步到磁盘。
可选地,所述bitmap设置有读写锁;
其中,所述读写锁包括写锁和读锁;
当所述bitmap启动同步流程时,对所述bitmap设置写锁或读锁。
可选地,所述根据各磁盘输入/输出IO的偏移获取各磁盘IO对应的定长数据块chunk表,在各chunk表中查找或添加各磁盘IO对应的chunk表节点,将各chunk表节点的状态信息记录在位图bitmap中,具体包括:
根据定时器的预设周期和各磁盘输入/输出IO的偏移获取各磁盘IO对应的定长数据块chunk表,在各chunk表中查找或添加各磁盘IO对应的chunk表节点,将各chunk表节点的状态信息记录在位图bitmap中。
可选地,所述根据定时器的预设周期和各磁盘输入/输出IO的偏移获取各磁盘IO对应的定长数据块chunk表,在各chunk表中查找或添加各磁盘IO对应的chunk表节点,将各chunk表节点的状态信息记录在位图bitmap中之前,还包括:
根据磁盘IO计数方式确认是否存在磁盘IO;
如果存在,则增加所述定时器的预设周期,以限制所述磁盘初始化IO的速度。
可选地,所述方法还包括:
若判断获知所述chunk表节点的IO等待队列不为空,或所述chunk表节点记录对应的chunk正在执行对应bitmap的读写操作,则将IO加入等待队列;
若判断获知所述chunk表节点记录的对应的chunk的状态为正在初始化,则继续检查IO的读写属性;若IO的读写属性为读IO,则立即返回全零数据;若IO的读写属性为写IO,则将IO加入等待队列;
若判断获知所述chunk表节点记录的对应的chunk的状态为已写入数据,则将IO直接下发;
若判断获知所述chunk表节点记录的对应的chunk的状态为尚未初始化,则将IO加入chunk的等待队列并执行chunk初始化。
第二方面,本发明实施例提供一种磁盘初始化装置,所述装置包括:
获取模块,用于根据各磁盘输入/输出IO的偏移获取各磁盘IO对应的定长数据块chunk表,在各chunk表中查找或添加各磁盘IO对应的chunk表节点,将各chunk表节点的状态信息记录在位图bitmap中;
锁定模块,用于对各chunk表节点设置对应的自旋锁,根据各自旋锁将所述bitmap中对应的chunk表节点的状态信息锁定为初始化状态;
处理模块,用于根据各目标chunk表节点,生成对应的磁盘初始化IO,并将各磁盘初始化IO发送给目标设备,以使所述目标设备执行各磁盘初始化IO,以实现磁盘的初始化;
其中,所述目标chunk表节点为状态信息是初始化状态的chunk表节点。
可选的,所述处理模块还用于:
根据各目标chunk表节点,生成对应的磁盘初始化IO,并将各磁盘初始化IO发送给目标设备,以使所述目标设备异步处理所述磁盘IO,以实现磁盘的初始化。
可选的,所述装置还包括:
同步流程模块,用于检查各chunk表节点上是否存在等待的磁盘写IO;如果存在,则将所述bitmap中对应的chunk表节点的状态信息设置为写入状态,并启动所述bitmap的同步流程;
其中,所述同步流程采用周期性或者立即同步到磁盘。
可选的,所述bitmap设置有读写锁;
其中,所述读写锁包括写锁和读锁;
当所述bitmap启动同步流程时,对所述bitmap设置写锁或读锁。
可选的,所述获取模块还用于:
根据定时器的预设周期和各磁盘输入/输出IO的偏移获取各磁盘IO对应的定长数据块chunk表,在各chunk表中查找或添加各磁盘IO对应的chunk表节点,将各chunk表节点的状态信息记录在位图bitmap中。
可选的,所述获取模块还用于:
根据磁盘IO计数方式确认是否存在磁盘IO;
如果存在,则增加所述定时器的预设周期,以限制所述磁盘初始化IO的速度。
第三方面,本发明实施例提供了一种电子设备,所述电子设备包括:
至少一个处理器;以及
与所述处理器通信连接的至少一个存储器,其中:
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行上述对应的任一方法。
第四方面,本发明实施例提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机程序,所述计算机程序使所述计算机执行上述对应的任一方法。
本发明实施例提供的磁盘初始化方法及装置,通过设置位图bitmap来保存磁盘各定长数据块chunk表节点的初始化的状态信息,并通过对各chunk表节点设置的对应的自旋锁锁定所述bitmap中的状态信息,生成磁盘初始化IO,实现磁盘初始化;能够在磁盘初始化之前确认磁盘中数据的状态,避免无用的重复操作,实现了高效快速的磁盘的初始化。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中磁盘初始化方法的流程示意图;
图2为本发明实施例中磁盘空间划分的结构示意图;
图3为本发明实施例中bitmap的结构示意图;
图4为本发明实施例中磁盘初始化装置的结构示意图;
图5为本发明另一实施例中磁盘初始化装置的结构示意图;
图6为本发明一个实施例提供的电子设备的逻辑框图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例中磁盘初始化方法的流程示意图,如图1所示,所述方法包括:
步骤S101、根据各磁盘输入/输出IO的偏移获取各磁盘IO对应的定长数据块chunk表,在各chunk表中查找或添加各磁盘IO对应的chunk表节点,将各chunk表节点的状态信息记录在位图bitmap中;
其中,所述磁盘在这里是指机械磁盘,即需要使用磁头在盘片上移动来读取数据的磁盘,磁盘空间划分的结构示意图如图2所示。
所述输入/输出IO在这里是指对磁盘的写操作或读操作。
所述chunk为本发明实施例中磁盘初始化的基本单位,是定长的数据块,长度设定为MB级,例如1MB、2MB、4MB均可,不宜过长或过短,本方案选择了1MB。
所述位图bitmap,用于保存磁盘数据块的状态信息,结构示意图如图3所示,使用2位来保存chunk的状态。
步骤S102、对各chunk表节点设置对应的自旋锁,根据各自旋锁将所述bitmap中对应的chunk表节点的状态信息锁定为初始化状态;
其中,所述自旋锁是为实现保护共享资源而提出一种锁机制。自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。
步骤S103、根据各目标chunk表节点,生成对应的磁盘初始化IO,并将各磁盘初始化IO发送给目标设备,以使所述目标设备执行各磁盘初始化IO,以实现磁盘的初始化;
其中,所述目标chunk表节点为状态信息是初始化状态的chunk表节点。
所述目标设备是指需要进行磁盘初始化操作的磁盘设备。
本方案与背景方案1一样,在磁盘级别进行初始化。对于其使用者而言,可以认为所有磁盘已初始化完成。初始化过程是异步的,使得在真正的初始化完成前,可以并行的处理IO。本方案实质上是一种映射方案:提供一个中间层,将磁盘设备重新映射给用户使用,映射前后的设备类型相同。以linux操作系统为例,本方案以块设备驱动程序的形式实现。映射后,在真实磁盘上保存了数据块的状态等额外的信息,因此映射后的磁盘空间要略小于原始空间。
IO读写的接口,具体的形态与选择的操作系统有关。以linux系统为例,可以是标准的块设备接口。IO接口将用户的磁盘IO请求经过处理和变换后发给磁盘。磁盘IO请求很有可能会和磁盘初始化的IO发生冲突。对磁盘进行访问的行为有上层的IO请求和本层产生的初始化IO两种。上层的IO请求也可能会触发初始化IO。如果对IO执行的顺序不做限定,则有可能后续的初始化IO会将之前的写IO的内容覆盖掉。所以,必须对初始化IO和磁盘IO进行统一管理,以避免冲突。
针对IO冲突,使用chunk表来解决冲突。在处理磁盘IO请求和初始化IO时,根据IO偏移计算出对应的chunk,以此在chunk表中查找或者添加对应的表节点,检查并记录状态信息并将chunk表节点的状态信息记录在位图bitmap中。之后根据状态信息将磁盘IO或初始化IO请求添加到表节点上进行等待。chunk表节点上提供自旋锁,以便对chunk表节点的初始化状态提供保护。根据chunk表节点,生成对应的磁盘初始化IO,并将各磁盘初始化IO发送给目标设备,以使所述目标设备执行各磁盘初始化IO,以实现磁盘的初始化。
具体地,在实际执行过程中,本实施例提供的磁盘初始化方法首先在磁盘级别进行数据初始化操作,将磁盘空间划分为bitmap空间和数据空间,数据空间按照chunk_size划分为等长的chunk;然后使用bitmap空间保存全部chunk的状态,每个chunk的状态分为以下三种:未初始化、已初始化、已写入;bitmap空间中存储的状态信息称为bitmap,bitmap在开始时从磁盘空间载入内存、在内存空间中修改并在需要时同步回磁盘中。使用chunk表保存当前正在访问的chunk的状态,分为以下四种:空闲、待初始化、正在初始化、正在写入数据;每隔预设周期从内从中的bitmap中查找下一个状态为未初始化的chunk-id,在chunk表中查找或创建对应的chunk表节点以记录当前chunk的访问状态;chunk表节点上包含自身的自旋锁,在持有自旋锁的条件下,检查其状态,若状态为空闲,则将chunk表节点的状态设置为待初始化状态,随即释放自旋锁;根据待初始化的chunk表节点信息和chunk_size等信息,生成chunk初始化IO,发送给目标设备;初始化IO完成后,将bitmap中对应chunk的状态设置为已初始化,并立即或周期性的同步到磁盘bitmap空间;每隔预设周期从内从中的bitmap中查找下一个状态为未初始化的chunk-id,在chunk表中查找或创建对应的chunk表节点以记录当前chunk的访问状态;生成对应的磁盘初始化IO,并将各磁盘初始化IO发送给目标设备,以使所述目标设备异步处理所述磁盘IO,以实现磁盘的初始化。
本发明实施例提供的磁盘初始化方法,通过设置位图bitmap来记录保存磁盘各定长数据块chunk表节点的初始化的状态信息,并对各chunk表节点设置对应的自旋锁对所述bitmap中的状态信息进行锁定,生成磁盘初始化IO,实现磁盘初始化;本发明实施例能够在磁盘初始化之前确认磁盘中数据的状态,避免无用的重复操作,实现了高效快速的磁盘的初始化。
在上述方法实施例的基础上,所述根据各目标chunk表节点,生成对应的磁盘初始化IO,并将各磁盘初始化IO发送给目标设备,以使所述目标设备执行各磁盘初始化IO,以实现磁盘的初始化之后,还包括:
根据各目标chunk表节点,生成对应的磁盘初始化IO,并将各磁盘初始化IO发送给目标设备,以使所述目标设备异步处理所述磁盘IO,以实现磁盘的初始化。
其中,所述异步是指非同步的,在后台进行的。
在上述方法实施例的基础上,所述方法还包括:
步骤S104、检查各chunk表节点上是否存在等待的磁盘写IO;
如果存在,则将所述bitmap中对应的chunk表节点的状态信息设置为写入状态,并启动所述bitmap的同步流程;
其中,所述同步流程采用周期性或者立即同步到磁盘。
其中,所述同步流程采用周期性或者立即同步到磁盘是指因为初始化的进度是可丢失的,所以当bitmap中的初始化状态发生变化时,不需要立即同步到磁盘,而是周期性的同步到磁盘即可,每次同步时同步整个bitmap;或者在将bitmap中的某个chunk对应的写入状态设置为1时,为了避免意外断电或者拔出磁盘带来的数据一致性问题,必须立即将bitmap同步到磁盘。
在上述方法实施例的基础上,所述bitmap设置有读写锁;
其中,所述读写锁包括写锁和读锁;
当所述bitmap启动同步流程时,对所述bitmap设置写锁或读锁。
其中,所述读写锁实际是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。这种锁相对于自旋锁而言,能提高并发性,因为在多处理器系统中,它允许同时有多个读者来访问共享资源,最大可能的读者数为实际的逻辑CPU数。写者是排他性的,一个读写锁同时只能有一个写者或多个读者(与CPU数相关),但不能同时既有读者又有写者。
如果读写锁当前没有读者,也没有写者,那么写者可以立刻获得读写锁,否则它必须自旋在那里,直到没有任何写者或读者。如果读写锁没有写者,那么读者可以立即获得该读写锁,否则读者必须自旋在那里,直到写者释放该读写锁。
进一步地,在上述实施例的基础上,所述方法还包括:
步骤S105、若判断获知所述chunk表节点的IO等待队列不为空,或所述chunk表节点记录对应的chunk正在执行对应bitmap的读写操作,则将IO加入等待队列。
步骤S106、若判断获知所述chunk表节点记录的对应的chunk的状态为正在初始化,则继续检查IO的读写属性;若IO的读写属性为读IO,则立即返回全零数据;若IO的读写属性为写IO,则将IO加入等待队列。
步骤S107、若判断获知所述chunk表节点记录的对应的chunk的状态为已写入数据,则将IO直接下发。
步骤S108、若判断获知所述chunk表节点记录的对应的chunk的状态为尚未初始化,则将IO加入chunk的等待队列并执行chunk初始化。
具体地,收到磁盘IO后,根据IO偏移计算chunk序号,在chunk表中查找或创建对应的chunk表节点。在持有chunk表节点的自旋锁的情况下,检查chunk表节点的状态和bitmap中该chunk的状态:
若chunk表节点上的IO等待队列不为空,或者该chunk表节点上记录该chunk正在执行对应bitmap的读写操作,则将IO加入等待队列,待操作完成后继续下发执行。
若chunk表节点上记录该chunk的状态为正在初始化,则继续检查IO的读写属性。若IO为读IO,则立即返回全0的数据;若为写IO,则将IO加入等待队列,待操作完成后继续下发执行。
在不满足上述情况时,对bitmap中chunk的状态进行检查:如果chunk的状态为已写入数据,则将IO直接下发;否则若IO为读IO,则立即返回全零数据;否则若该chunk尚未初始化,则将IO加入chunk的等待队列并执行chunk初始化;否则该IO为写IO,且chunk未写入过数据,此时将IO加入chunk的等待队列,将chunk的状态设置为正在写bitmap,并启动bitmap同步流程。
在上述实施例的基础上,本发明实施例的具体实施方式为:
磁盘初始化一个chunk的流程包括以下步骤:
A1、获取chunk表节点(查找或添加)并增加对其的引用;
A2、锁定chunk表节点;
A3、将chunk表节点的状态设置为初始化中;
A4、解锁chunk表节点;
A5、生成初始化IO,发给目标设备;
A6、目标设备异步处理IO;
A7、初始化IO执行完成;清除chunk表节点上的初始化状态。检查chunk表节点上是否存在等待的写IO,如存在则启动bitmap的同步流程;
A8、释放对chunk表节点的引用。
bitmap周期性同步到磁盘的流程包括以下步骤:
B1、锁定整个bitmap(获取bitmap的写锁);
B2、复制bitmap;
B3、解锁bitmap;
B4、使用复制的bitmap生成同步IO;
B5、将同步IO发送给目标设备。
bitmap立即同步到磁盘的流程包括以下步骤:
C1、获取chunk表节点(查找或添加)并增加对其的引用;
C2、锁定chunk表节点;
C3、将chunk表节点的状态设置为同步中;
C4、解锁chunk表节点;
C5、生成同步IO,发给目标设备;
C6、目标设备异步处理IO;
C7、bitmap同步IO执行完成;清除chunk表节点上的同步状态。检查chunk表节点上是否存在等待的IO,如存在将它们发送给目标设备;
C8、释放对chunk表节点的引用。
本发明实施例提供的磁盘初始化方法,通过对bitmap设置读写锁,启动bitmap的同步流程,以使目标设备同步或异步处理磁盘IO,实现磁盘初始化;本发明实施例能够在磁盘初始化之前确认磁盘中数据的状态,避免无用的重复操作,实现了高效快速的磁盘的初始化。
在上述方法实施例的基础上,所述根据各磁盘输入/输出IO的偏移获取各磁盘IO对应的定长数据块chunk表,在各chunk表中查找或添加各磁盘IO对应的chunk表节点,将各chunk表节点的状态信息记录在位图bitmap中,具体包括:
根据定时器的预设周期和各磁盘输入/输出IO的偏移获取各磁盘IO对应的定长数据块chunk表,在各chunk表中查找或添加各磁盘IO对应的chunk表节点,将各chunk表节点的状态信息记录在位图bitmap中。
其中,所述定时器用于驱动初始化进程。例如定时器设置为5ms,则每5ms下发一个chunk的初始化IO,每个chunk设定为1MB,这样初始化的速度理论峰值可达200MBps。
定时器到期后,会触发定时器处理程序。处理程序将记录下次应该初始化的chunk的id,据此查找bitmap中大于等于该id的第一个需要进行初始化的chunk,并触发对其的初始化工作。
在上述顺序初始化遍历所有的chunk后,会将chunk的初始化记录恢复成0,尝试循环查找。如果之前对某个chunk的初始化失败了,则该方法可以做到自动重试。
在上述方法实施例的基础上,所述根据定时器的预设周期和各磁盘输入/输出IO的偏移获取各磁盘IO对应的定长数据块chunk表,在各chunk表中查找或添加各磁盘IO对应的chunk表节点,将各chunk表节点的状态信息记录在位图bitmap中之前,还包括:
根据磁盘IO计数方式确认是否存在磁盘IO;
如果存在,则增加所述定时器的预设周期,以限制所述磁盘初始化IO的速度。
其中所述限制所述磁盘初始化IO的速度是指,在存在上层IO的时候,需要限制初始化的速度,以避免IO处理延迟过大。在这里使用IO计数的方式来确认是否存在IO。如果在定时器尝试初始化时,发现IO计数与上次保存的值不一样,即可确认存在IO,需要限速。限速的方法是线性的增加定时器的时间长度,直到一个最大值,例如100ms。在定时器设置为100ms,chunk长度设置为1MB时,初始化的理论最高速度为10MBps,达到了限速的目的。
在上述实施例的基础上,本发明实施例的具体实施方式为:
IO流程包括以下步骤:
D1、增加IO计数;
D2、获取chunk表节点(查找或添加)并增加对其的引用;
D3、修改IO的目标设备及目标偏移;
D4、锁定chunk表节点;
D5、若表节点上存在等待的IO,或者对应的bitmap正在同步到磁盘,将IO加入chunk的等待队列;
D6、若chunk正在初始化,需进一步判断IO方向。若是读IO,则直接返回全零的数据;若是写IO,则将IO加入chunk的等待队列;
D7、检查bitmap,并据此得出决策:
a)若chunk已经处于写入状态,则将IO下发给目标设备;
b)否则若是读IO,则直接返回全零的数据;
c)否则若即是写IO又是待初始化的chunk,则将IO加入chunk的等待队列,并启动该chunk的初始化;
d)否则就即是写IO又是初始化完成的chunk,设置bitmap中的位为写入状态,则将IO加入chunk的等待队列,并启动该chunk的bitmap同步流程;
D8、解锁chunk表节点;
D9、执行步骤D7中的决策;
D10、释放对chunk表节点的引用。
本发明实施例提供的磁盘初始化方法,通过设置定时器驱动或限制初始化速度,以使目标设备同步或异步处理磁盘IO,通过初始化流程、bitmap同步流程与IO处理流程的相互配合,在初始化的过程中正确处理磁盘IO;本发明实施例实现了高效快速的磁盘的初始化并在初始化的过程中正确处理磁盘IO。
图4为本发明实施例中磁盘初始化装置的结构示意图,如图4所示,所述装置包括:获取模块401,锁定模块402和处理模块403;其中,
获取模块401用于根据各磁盘输入/输出IO的偏移获取各磁盘IO对应的定长数据块chunk表,在各chunk表中查找或添加各磁盘IO对应的chunk表节点,将各chunk表节点的状态信息记录在位图bitmap中;锁定模块402用于对各chunk表节点设置对应的自旋锁,根据各自旋锁将所述bitmap中对应的chunk表节点的状态信息锁定为初始化状态;处理模块403用于根据各目标chunk表节点,生成对应的磁盘初始化IO,并将各磁盘初始化IO发送给目标设备,以使所述目标设备执行各磁盘初始化IO,以实现磁盘的初始化;其中,所述目标chunk表节点为状态信息是初始化状态的chunk表节点。
本发明实施例提供的磁盘初始化装置,通过在获取模块设置位图bitmap来记录保存磁盘各定长数据块chunk表节点的初始化的状态信息,并在锁定模块对各chunk表节点设置对应的自旋锁对所述bitmap中的状态信息进行锁定,生成磁盘初始化IO,实现磁盘初始化;本发明实施例能够在磁盘初始化之前确认磁盘中数据的状态,避免无用的重复操作,实现了高效快速的磁盘的初始化。
在上述方法实施例的基础上,所述处理模块还用于:
根据各目标chunk表节点,生成对应的磁盘初始化IO,并将各磁盘初始化IO发送给目标设备,以使所述目标设备异步处理所述磁盘IO,以实现磁盘的初始化。
在上述方法实施例的基础上,图5为本发明另一实施例中磁盘初始化装置的结构示意图,如图5所示,所述装置包括:获取模块401,锁定模块402,处理模块403和同步流程模块404;其中,
获取模块401,锁定模块402和处理模块403在上述实施例中已经详细阐述,在此不再赘述。
同步流程模块404用于检查各chunk表节点上是否存在等待的磁盘写IO;如果存在,则将所述bitmap中对应的chunk表节点的状态信息设置为写入状态,并启动所述bitmap的同步流程;
其中,所述同步流程采用周期性或者立即同步到磁盘。
在上述方法实施例的基础上,所述bitmap设置有读写锁;
其中,所述读写锁包括写锁和读锁;
当所述bitmap启动同步流程时,对所述bitmap设置写锁或读锁。
在上述方法实施例的基础上,所述获取模块还用于:
根据定时器的预设周期和各磁盘输入/输出IO的偏移获取各磁盘IO对应的定长数据块chunk表,在各chunk表中查找或添加各磁盘IO对应的chunk表节点,将各chunk表节点的状态信息记录在位图bitmap中。
在上述方法实施例的基础上,所述获取模块还用于:
根据磁盘IO计数方式确认是否存在磁盘IO;
如果存在,则增加所述定时器的预设周期,以限制所述磁盘初始化IO的速度。
本发明提供的磁盘初始化装置是用来实现上述磁盘初始化方法的,所述磁盘初始化方法已经详细描述其具体实施方式,故在此不再赘述。
本发明实施例提供的磁盘初始化装置,通过在处理模块中设置定时器驱动或限制初始化速度,以使目标设备同步或异步处理磁盘IO,通过初始化流程、bitmap同步流程与IO处理流程的相互配合,在初始化的过程中正确处理磁盘IO;本发明实施例实现了高效快速的磁盘的初始化并在初始化的过程中正确处理磁盘IO。
图6为本发明一个实施例提供的电子设备的逻辑框图,如图6所示,所述电子设备,包括:处理器(processor)601、存储器(memory)602和总线603;
其中,所述处理器601和存储器602通过所述总线603完成相互间的通信;所述处理器601用于调用所述存储器602中的程序指令,以执行上述各方法实施例所提供的方法。
本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法。
本实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法。
最后应说明的是:以上各实施例仅用以说明本发明的实施例的技术方案,而非对其限制;尽管参照前述各实施例对本发明的实施例进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明的实施例各实施例技术方案的范围。
Claims (10)
1.一种磁盘初始化方法,其特征在于,所述方法包括:
根据各磁盘输入/输出IO的偏移获取各磁盘IO对应的定长数据块chunk表,在各chunk表中查找或添加各磁盘IO对应的chunk表节点,将各chunk表节点的状态信息记录在位图bitmap中;
对各chunk表节点设置对应的自旋锁,根据各自旋锁将所述bitmap中对应的chunk表节点的状态信息锁定为初始化状态;
根据各目标chunk表节点,生成对应的磁盘初始化IO,并将各磁盘初始化IO发送给目标设备,以使所述目标设备执行各磁盘初始化IO,以实现磁盘的初始化;
其中,所述目标chunk表节点为状态信息是初始化状态的chunk表节点。
2.根据权利要求1所述的方法,其特征在于,所述根据各目标chunk表节点,生成对应的磁盘初始化IO,并将各磁盘初始化IO发送给目标设备,以使所述目标设备执行各磁盘初始化IO,以实现磁盘的初始化之后,还包括:根据各目标chunk表节点,生成对应的磁盘初始化IO,并将各磁盘初始化IO发送给目标设备,以使所述目标设备异步处理所述磁盘IO,以实现磁盘的初始化。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
检查各chunk表节点上是否存在等待的磁盘写IO;
如果存在,则将所述bitmap中对应的chunk表节点的状态信息设置为写入状态,并启动所述bitmap的同步流程;
其中,所述同步流程采用周期性或者立即同步到磁盘。
4.根据权利要求3所述的方法,其特征在于,所述bitmap设置有读写锁;
其中,所述读写锁包括写锁和读锁;
当所述bitmap启动同步流程时,对所述bitmap设置写锁或读锁。
5.根据权利要求1所述的方法,其特征在于,所述根据各磁盘输入/输出IO的偏移获取各磁盘IO对应的定长数据块chunk表,在各chunk表中查找或添加各磁盘IO对应的chunk表节点,将各chunk表节点的状态信息记录在位图bitmap中,具体包括:
根据定时器的预设周期和各磁盘输入/输出IO的偏移获取各磁盘IO对应的定长数据块chunk表,在各chunk表中查找或添加各磁盘IO对应的chunk表节点,将各chunk表节点的状态信息记录在位图bitmap中。
6.根据权利要求5所述的方法,其特征在于,所述根据定时器的预设周期和各磁盘输入/输出IO的偏移获取各磁盘IO对应的定长数据块chunk表,在各chunk表中查找或添加各磁盘IO对应的chunk表节点,将各chunk表节点的状态信息记录在位图bitmap中之前,还包括:
根据磁盘IO计数方式确认是否存在磁盘IO;
如果存在,则增加所述定时器的预设周期,以限制所述磁盘初始化IO的速度。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述方法还包括:
若判断获知所述chunk表节点的IO等待队列不为空,或所述chunk表节点记录对应的chunk正在执行对应bitmap的读写操作,则将IO加入等待队列;
若判断获知所述chunk表节点记录的对应的chunk的状态为正在初始化,则继续检查IO的读写属性;若IO的读写属性为读IO,则立即返回全零数据;若IO的读写属性为写IO,则将IO加入等待队列;
若判断获知所述chunk表节点记录的对应的chunk的状态为已写入数据,则将IO直接下发;
若判断获知所述chunk表节点记录的对应的chunk的状态为尚未初始化,则将IO加入chunk的等待队列并执行chunk初始化。
8.一种磁盘初始化装置,其特征在于,所述装置包括:
获取模块,用于根据各磁盘输入/输出IO的偏移获取各磁盘IO对应的定长数据块chunk表,在各chunk表中查找或添加各磁盘IO对应的chunk表节点,将各chunk表节点的状态信息记录在位图bitmap中;
锁定模块,用于对各chunk表节点设置对应的自旋锁,根据各自旋锁将所述bitmap中对应的chunk表节点的状态信息锁定为初始化状态;
处理模块,用于根据各目标chunk表节点,生成对应的磁盘初始化IO,并将各磁盘初始化IO发送给目标设备,以使所述目标设备执行各磁盘初始化IO,以实现磁盘的初始化;
其中,所述目标chunk表节点为状态信息是初始化状态的chunk表节点。
9.一种电子设备,其特征在于,包括:
至少一个处理器;以及
与所述处理器通信连接的至少一个存储器,其中:
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1至7任一所述的方法。
10.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机程序,所述计算机程序使所述计算机执行如权利要求1至7任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810229420.5A CN108536393B (zh) | 2018-03-20 | 2018-03-20 | 一种磁盘初始化方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810229420.5A CN108536393B (zh) | 2018-03-20 | 2018-03-20 | 一种磁盘初始化方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108536393A true CN108536393A (zh) | 2018-09-14 |
CN108536393B CN108536393B (zh) | 2021-03-19 |
Family
ID=63484931
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810229420.5A Active CN108536393B (zh) | 2018-03-20 | 2018-03-20 | 一种磁盘初始化方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108536393B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113835641A (zh) * | 2021-09-28 | 2021-12-24 | 苏州浪潮智能科技有限公司 | 一种条带初始化控制方法、装置、设备、存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040107314A1 (en) * | 2002-11-29 | 2004-06-03 | Chang-Soo Kim | Apparatus and method for file-level striping |
CN101566924A (zh) * | 2008-04-23 | 2009-10-28 | 中兴通讯股份有限公司 | 一种磁盘阵列的数据读写方法 |
US20120047342A1 (en) * | 2010-08-17 | 2012-02-23 | International Business Machines Corporation | Facilitation of simultaneous storage initialization and data destage |
CN104793897A (zh) * | 2015-02-04 | 2015-07-22 | 北京神州云科数据技术有限公司 | 一种bitmap的存储方法 |
CN107704202A (zh) * | 2017-09-18 | 2018-02-16 | 北京京东尚科信息技术有限公司 | 一种数据快速读写的方法和装置 |
CN107797770A (zh) * | 2017-11-07 | 2018-03-13 | 深圳神州数码云科数据技术有限公司 | 一种磁盘状态信息的同步方法及装置 |
-
2018
- 2018-03-20 CN CN201810229420.5A patent/CN108536393B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040107314A1 (en) * | 2002-11-29 | 2004-06-03 | Chang-Soo Kim | Apparatus and method for file-level striping |
CN101566924A (zh) * | 2008-04-23 | 2009-10-28 | 中兴通讯股份有限公司 | 一种磁盘阵列的数据读写方法 |
US20120047342A1 (en) * | 2010-08-17 | 2012-02-23 | International Business Machines Corporation | Facilitation of simultaneous storage initialization and data destage |
CN104793897A (zh) * | 2015-02-04 | 2015-07-22 | 北京神州云科数据技术有限公司 | 一种bitmap的存储方法 |
CN107704202A (zh) * | 2017-09-18 | 2018-02-16 | 北京京东尚科信息技术有限公司 | 一种数据快速读写的方法和装置 |
CN107797770A (zh) * | 2017-11-07 | 2018-03-13 | 深圳神州数码云科数据技术有限公司 | 一种磁盘状态信息的同步方法及装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113835641A (zh) * | 2021-09-28 | 2021-12-24 | 苏州浪潮智能科技有限公司 | 一种条带初始化控制方法、装置、设备、存储介质 |
CN113835641B (zh) * | 2021-09-28 | 2023-07-25 | 苏州浪潮智能科技有限公司 | 一种条带初始化控制方法、装置、设备、存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108536393B (zh) | 2021-03-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5535381A (en) | Apparatus and method for copying and restoring disk files | |
US7158999B2 (en) | Reorganization and repair of an ICF catalog while open and in-use in a digital data storage system | |
CN102945278B (zh) | 一种数据库记录重做日志的方法和装置 | |
US7529902B2 (en) | Methods and systems for locking in storage controllers | |
US5740434A (en) | System for maintenance of database integrity | |
EP2590078A2 (en) | Shadow paging based log segment directory | |
CN103198122B (zh) | 重启内存数据库的方法和装置 | |
CN108762982B (zh) | 一种数据库恢复方法、装置及系统 | |
US7581135B2 (en) | System and method for storing and restoring a data file using several storage media | |
US9002794B1 (en) | Reclaiming space from a file system | |
CN114721594A (zh) | 一种分布式存储方法、装置、设备及机器可读存储介质 | |
US8577890B2 (en) | Modifying data set name qualifiers | |
CN108536393A (zh) | 一种磁盘初始化方法及装置 | |
CN106933707B (zh) | 基于raid技术的数据存储设备数据恢复方法及系统 | |
CN110377230B (zh) | 一种应用于固态硬盘的原子写入方法及装置 | |
US7600151B2 (en) | RAID capacity expansion interruption recovery handling method and system | |
WO2024077863A1 (zh) | 一种全闪存储系统的恢复方法及相关装置 | |
CN111813603B (zh) | 一种精简卷元数据备份方法、装置、设备及可读存储介质 | |
CN114328018A (zh) | 快照的创建方法、计算设备及存储介质 | |
CN110096232B (zh) | 磁盘锁的处理方法、存储单元的创建方法及相关装置 | |
CN112416657A (zh) | 一种系统克隆方法 | |
US20100077283A1 (en) | Apparatus to manage data stability and methods of storing and recovering data | |
JPH033046A (ja) | ログ記録管理方式 | |
EP2144175A1 (en) | Method for performing a bulk load into a database | |
CN111104373A (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 | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220328 Address after: No. 407, floor 4, No. 9, No. 9, shangdijiu street, Haidian District, Beijing 100085 Patentee after: Shenzhou Yunke (Beijing) Technology Co.,Ltd. Address before: 518131 F3, 11th floor, No. 8 Kefa Road, Yuehai Street, Nanshan District, Shenzhen City, Guangdong Province Patentee before: Shenzhen science and Technology Co.,Ltd. digital cloud data |