CN115525580A - 一种namespace设置方法、装置及可读存储介质 - Google Patents
一种namespace设置方法、装置及可读存储介质 Download PDFInfo
- Publication number
- CN115525580A CN115525580A CN202211131081.XA CN202211131081A CN115525580A CN 115525580 A CN115525580 A CN 115525580A CN 202211131081 A CN202211131081 A CN 202211131081A CN 115525580 A CN115525580 A CN 115525580A
- Authority
- CN
- China
- Prior art keywords
- namespace
- linked list
- read
- virtual
- setting method
- 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.)
- Pending
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/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C16/00—Erasable programmable read-only memories
- G11C16/02—Erasable programmable read-only memories electrically programmable
- G11C16/06—Auxiliary circuits, e.g. for writing into memory
- G11C16/10—Programming or data input circuits
- G11C16/14—Circuits for erasing electrically, e.g. erase voltage switching circuits
- G11C16/16—Circuits for erasing electrically, e.g. erase voltage switching circuits for erasing blocks, e.g. arrays, words, groups
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C16/00—Erasable programmable read-only memories
- G11C16/02—Erasable programmable read-only memories electrically programmable
- G11C16/06—Auxiliary circuits, e.g. for writing into memory
- G11C16/26—Sensing or reading circuits; Data output circuits
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种namespace设置方法、装置及可读存储介质,涉及信息技术领域。本申请所提供的namespace设置方法,通过namespace中设置多个长度不同的步长指针建立多级虚拟链表,在接收到读取指令后读取指令获得需要读取的namespace的ID,并从长度最高的虚拟链表开始在不同级的虚拟链表依次缩小搜索范围,从而获取得到需要读取的namespace,与现有的namespace设置方法相比,本方案中通过多级的步长指针构建的虚拟链表,可以先确定一个较大的范围,随后依次缩小搜索范围,在虚拟链表中搜寻范围的效率更高,且可以通过ID逐渐缩小索引范围,从而有效提高索引效率。
Description
技术领域
本申请涉及信息技术领域,特别是涉及一种namespace设置方法、装置及可读存储介质。
背景技术
近年来,固态硬盘技术的日渐成熟,因其在性能、功耗、可靠性上优势,正在逐步替代传统机械硬盘的位置,再加上计算存储等新领域的开辟,大容量闪存出现带来成本越来越低,固态硬盘市场占有率逐渐提高。非易失性存储器(Non-Volatile Memory express,NVMe)在使用时一般情况下作为计算机拓展总线(peripheral component interconnectexpress,PCIe)设备下挂在主机,而每个NVMe固态硬盘中的闪存空间可以划分为若干个独立的命名空间(namespace)。
现有的namespace设置方法一般是通过线性表管理,线性表常见形式有数组和链表;考虑到为了线性表的灵活性,多采取链表的形式,对于链表内存不连续,可以任意添加元素,但索引时间复杂度较高,需要对链表中的每个namespace元素依次进行索引,随着链表长度的增加,索引效率会越来越低,从而对数据传输效率产生负面影响。
鉴于上述技术,寻找一种索引效率较高的namespace设置方法是本领域技术人员亟待解决的问题。
发明内容
本申请的目的是提供一种namespace设置方法,以便于解决当前的namespace的索引时间复杂度较高,需要对链表中的每个namespace元素依次进行索引,随着链表长度的增加,索引效率会越来越低,从而对数据传输效率产生负面影响的问题。
为解决上述技术问题,本申请提供一种namespace设置方法,包括:
接收读取指令,并解析所述读取指令获得需要读取的namespace的ID;
根据第一虚拟链表以及所述ID的获取得到需要读取的所述namespace的第一范围,所述第一虚拟链表为预先通过在所述namespace中设置的长度最长的步长指针构建的虚拟链表,所述步长指针为所述namespace指向ID序号为n后的所述namespace的指针;
将所述namespace的索引转向下一级虚拟链表,根据所述ID以及所述下一级虚拟链表在所述第一范围中获取需要读取的所述namespace的第二范围,确定出需要读取的所述namespace的第二范围;
判断当前虚拟链表是否为基础链表,所述基础链表为预先根据各所述namespace的ID进行排序的步长指针长度为1的链表;
若否,则回到所述将所述namespace的索引转向下一级虚拟链表的步骤;
若是,则根据所述ID序号获取得到需要读取的所述namespace。
优选地,在所述重复上述步骤直到从基础链表中获取得到需要读取的所述namespace,还包括:
根据所述读取指令判断是否需要删除所述namespace;
若是,则将所述namespace的标志位置0,用于表征所述namespace不再接收请求指令。
优选地,该方案还包括:
接收到所述namespace建立指令,在所述基础链表中搜寻是否存在置0的所述标志位;
若所述基础链表中存在置0的所述标志位,则将所述标志位置1并修改所述namespace的相应信息。
优选地,接收到所述namespace建立指令,在所述基础链表中搜寻是否存在置0的所述标志位之后,还包括:
若所述基础链表中不存在置0的所述标志位,则将所述namespace置于所述基础链表的末尾,并且新建立的所述namespace的ID为上一个所述namespace的ID值加1。
优选地,在所述将所述namespace置于所述基础链表的末尾之后,还包括:
确认所述namespace的ID值是否能被各所述虚拟链表整除;
将所述namespace的ID加入至所有能整除的所述虚拟链表中。
优选地,接收读取指令,并解析所述读取指令获得需要读取的namespace的ID包括;
通过异步传输的方式接收所述读取指令,并通过异步的方式解析所述读取指令获得需要读取的所述namespace的ID。
优选地,还包括:
记录从接收所述读取指令到获取到所述namespace的时间,判断是否高于预设时间;
若是,则根据全部所述namespace重新构建各所述虚拟链表。
优选地,所述接收读取指令为NVMe制定的主机与SSD之间通信命令。
优选地,所述接收读取指令,并解析所述读取指令获得需要读取的namespace的ID包括:
接收的IO命令后,解析命令得到NSID;
根据所述NSID中的所述namespace,在所述namespace对应的闪存空间进行读写;
在所述闪存空间中获取所述namespace的ID。
优选地,还包括:
在所述虚拟链表出现故障时,进行报警。
优选地,所述随机链表与所述基础链表均为有序链表。
为解决上述问题,本申请还提供一种namespace设置装置,包括:
接收模块,用于接收读取指令,并解析所述读取指令获得需要读取的namespace的ID;
读取模块,用于根据第一虚拟链表以及所述ID的获取得到需要读取的所述namespace的第一范围,所述第一虚拟链表为预先通过在所述namespace中设置的长度最长的步长指针构建的虚拟链表,所述步长指针为所述namespace指向ID序号为n后的所述namespace的指针;
循环模块,用于将所述namespace的索引转向下一级虚拟链表,根据所述ID以及所述下一级虚拟链表在所述第一范围中获取需要读取的所述namespace的第二范围,确定出需要读取的所述namespace的第二范围;
获取模块,用于重复进行循环模块直到从基础链表中获取得到需要读取的所述namespace时,所述基础链表为预先根据各所述namespace的ID进行排序的步长指针长度为1的链表。
优选地,该装置还包括:
判读模块,用于根据所述读取指令判断是否需要删除所述namespace,当需要删除所述namespace时,开启置0模块;
置0模块,用于将所述namespace的标志位置0,用于表征所述namespace不再接收请求指令。
优选地,该装置还包括:
搜寻模块,用于接收到所述namespace建立指令,在所述基础链表中搜寻是否存在置0的所述标志位,若所述基础链表中存在置0的所述标志位开启置1模块;
置1模块,用于将所述标志位置1并修改所述namespace的相应信息。
优选地,该装置还包括:
建立模块,当若所述基础链表中不存在置0的所述标志位时开启,用于将所述namespace置于所述基础链表的末尾,并且新建立的所述namespace的ID为上一个所述namespace的ID值加1。
优选地,该装置还包括:
确认模块,用于确认所述namespace的ID值是否能被各所述虚拟链表整除;
整除模块,将所述namespace的ID加入至所有能整除的所述虚拟链表中。
优选地,该装置还包括:
记录模块,用于记录从接收所述读取指令到获取到所述namespace的时间,判断是否高于预设时间,若是,开启重构模块;
重构模块,用于根据全部所述namespace重新构建各所述虚拟链表。
为解决上述问题,本申请还提供一种namespace设置装置,包括存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上述的namespace设置方法的步骤。
为解决上述问题,本申请还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述的namespace设置方法的步骤。
本申请所提供的namespace设置方法,通过namespace中设置多个长度不同的步长指针建立多级虚拟链表,在接收到读取指令后读取指令获得需要读取的namespace的ID,根据需要读取的namespace的ID并从长度最高的虚拟链表开始在不同级的虚拟链表依次缩小搜索范围,从而获取得到需要读取的namespace,与现有的namespace设置方法相比,由于现有的方案是通过依次搜寻链表中全部namespace,因此当链表过长时,对每个namespace进行验证所需要的时间较长,索引效率较低,而本方案中通过多级的步长指针构建的虚拟链表,可以先确定一个较大的范围,随后依次缩小搜索范围,通过namespace的个数合理设置虚拟链表的级数以及各级虚拟链表的长度,由于是通过ID中的指针进行搜寻,因此在虚拟链表中搜寻范围的效率更高,且可以通过ID逐渐缩小索引范围,从而有效提高namespace的索引效率。
本申请namespace设置装置及计算机可读介质与上述的namespace方法对应,有益效果同上。
附图说明
为了更清楚地说明本申请实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种namespace设置方法的流程图;
图2为本申请实施例提供的一种namespace设置装置的示意图;
图3为本申请另一实施例提供的namespace设置装置的结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下,所获得的所有其他实施例,都属于本申请保护范围。
本申请的核心是提供一种namespace设置方法,以便于解决当前的namespace的索引时间复杂度较高,需要对链表中的每个namespace元素依次进行索引,随着链表长度的增加,索引效率会越来越低,从而对数据传输效率产生负面影响的问题。
为了使本技术领域的人员更好地理解本申请方案,下面结合附图和具体实施方式对本申请作进一步的详细说明。
图1为本申请实施例提供的一种namespace设置方法的流程图,如图1所示,该方法包括:
S10:接收读取指令,并解析读取指令获得需要读取的namespace的ID;
需要说明的是,namespace即“命名空间”,也称“名称空间”。是许多编程语言使用的一种代码组织的形式,通过命名空间来分类,区别不同的代码功能,避免不同的代码片段(通常由不同的人协同工作或调用已有的代码片段)同时使用时由于不同代码间变量名相同而造成冲突。
身份标识号码(Identity document,ID),也称为序列号或帐号,是某个体系中相对唯一的编码,相当于是一种“身份证”在某一具体的事物中,身份标识号一般是不变的,至于用什么来标识该事物,则由设计者自己制定的规则来确定。
在本实施例中对于读取指令以及发送读取指令的对象不进行限定,可以理解的是读取指令的具体后续操作可以是调取存储器中的某个namespace元素,也可以是需要删除存储器中的某个namespace元素等等,在本实施例中对于获取到需要读取的namespace之后的流程也不进行限定,可以理解的是,namespace的ID即经由namespace的命名规则在存储器中的链表中的每个namespace的独立编号。
S11:根据第一虚拟链表以及ID的获取得到需要读取的namespace的第一范围;
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
第一虚拟链表为预先通过在namespace中设置的长度最长的步长指针构建的虚拟链表,步长指针为namespace指向ID序号为n后的namespace的指针,例如,步长指针的长度为4,则第一虚拟链表包括ID为0的namespace,ID为4的namespace,以及在同一链表中后续的所有的能被4整除的namespace,且本实施例中对于第一虚拟链表的具体步长以及长度均不进行限定,可以理解的是,对于第一链表而言,构建第一链表的具体元素并非是由namespace进行构建,而是由namespace中的步长指针进行构建的,因此为虚拟链表。
S12:进入下一级虚拟链表进行索引,根据ID以及下一级虚拟链表获取得到更精准的namespace的范围;
需要说明的是,本实施例中的下一级虚拟链表即表示步长指针长度低于上一级虚拟链表的后一个链表,例如一个namespace中存在有为2,4,8的步长指针,则长度为8的步长指针构建的为上述的第一虚拟链表,第一虚拟链表之后的下一级虚拟链表则为长度为4的虚拟链表,长度为4的虚拟链表的下一级虚拟链表则为长度为2的虚拟链表,在本实施例中对于虚拟链表的个数以及对应的步长指针的长度等等均不进行限定。
S13:判断当前的虚拟链表是否为基础链表,若是,进入S14,若否,回到S12;
需要说明的是基础链表为预先根据各namespace的ID进行排序的步长指针长度为1的虚拟链表,即包含所有的namespace的链表,且通过ID依次排序,通过namespace中的初始指针即指向上一个和下一个元素的指针进行构建的最初始的链表。
S14:根据ID获取得到需要读取的namespace。
在本实施例中,对于获取得到namespace之后的具体步骤,例如针对该namespace中的内容进行修改,删除,调取等等均不进行限定。
本实施例所提供的namespace设置方法,通过namespace中设置多个长度不同的步长指针建立多级虚拟链表,在接收到读取指令后读取指令获得需要读取的namespace的ID,根据需要读取的namespace的ID并从长度最高的虚拟链表开始在不同级的虚拟链表依次缩小搜索范围,从而获取得到需要读取的namespace,与现有的namespace设置方法相比,由于现有的方案是通过依次搜寻链表中全部namespace,因此当链表过长时,对每个namespace进行验证所需要的时间较长,索引效率较低,而本方案中通过多级的步长指针构建的虚拟链表,可以先确定一个较大的范围,随后依次缩小搜索范围,通过namespace的个数合理设置虚拟链表的级数以及各级虚拟链表的长度,由于是通过ID中的指针进行搜寻,因此在虚拟链表中搜寻范围的效率更高,且可以通过ID逐渐缩小索引范围,从而有效提高namespace的索引效率。
考虑到在删除namespace时,由于本申请中采取的构建步长指针的方式,从而要对步长指针进行修改,在此提供优选方案,在根据ID获取得到需要读取的namespace之后,还包括:
根据读取指令判断是否需要删除namespace;
若是,则将namespace的标志位置0,用于表征namespace不再接收请求指令。
在本申请中,对于位于链表尾部的namespace实例进行增删时,虽然也需要对链表中部分namespace的步长指针进行更新,耗时还不算大;但若在链表中间进行实例增删,则需对更改实例前部分实例,以及其后所有实例的步长指针进行更新,这样会使链表删除和创建变的极其复杂,在链表创建删除耗费资源是很难被接受的。为了解决这个问题,我们在链表元素中增设了一个标志位,当链表删除namespace实例时,只需要在链表索引到该元素,将该标志位置0,不再接收请求,这样主机层面就可以认为该namespace实例被删除,也无需更新其他链表的步长指针,从而节省了运行资源,提高了运行效率。
考虑到在建立namespace时对于存储空间的利用,在此提出优选方案,该方案还包括:
接收到namespace建立指令,在基础链表中搜寻是否存在置0的标志位;
若基础链表中存在置0的标志位,则将标志位置1并修改namespace的相应信息。
在本实施例中对于namespace的具体的建立指令不进行限定,可以理解的是,建立指令可以是建立一个或多个namespace,且基于建立该namespace时,则寻找是否存在上述实施例中提到的需要删除被置0的标志位,通过将该标志位置1,并且将建立指令中的对应信息修改到该标志位对应的namespace中,从而保证了存储空间的准确利用,也可以减小由于建立新的namespace从而要对步长指针进行一定的修改的步骤,从而增加系统的运行效率。
在上述实施例中提到的建立新的namespace流程中,考虑到可能存在基础链表中不存在置0的标志位,在此提供优选方案,接收到namespace建立指令,在基础链表中搜寻是否存在置0的标志位之后,还包括:
若基础链表中不存在置0的标志位,则将namespace置于基础链表的末尾,并且新建立的namespace的ID为上一个namespace的ID值加1。
即检测到不存在置0的标志位后,则将namespace置于表尾,并且根据命名规则,赋予namespace的新ID,可以理解的是,本实施例中对于新建的namespace的个数不进行限定,因此可以是多个namespace同时置于末尾并按命名规则一次对其ID进行加1从而建立,在本实施例中不进行具体鉴定,通过上述方式保证对于namespace的及时建立,以及准确命名。
上述实施例中提出,在不存在置0的标志位后,则将namespace置于表尾,考虑到由于步长指针的存在,在此提供优选方案,本实施例中的在将namespace置于基础链表的末尾之后,还包括:
确认namespace的ID值是否能被各虚拟链表整除;
将namespace的ID加入至所有能整除的虚拟链表中。
即对于新建立的namespace进行步长指针的建立,并将该步长指针加入到对应的虚拟链表中,保证了索引的完整性以及准确性。
考虑到在数据传输以及读取中进一步增加运行效率,接收读取指令,并解析读取指令获得需要读取的namespace的ID包括;
通过异步传输的方式接收读取指令,并通过异步的方式解析读取指令获得需要读取的namespace的ID。
异步传输(Asynchronous Transfer Mode,ATM)是每一个字符独立形成一个帧进行传输,一个连续的字符串同样被封装成连续的独立帧进行传输,各个字符间的间隔可以是任意的,所以这种传输方式称为异步传输。异步传输模式是一种信元交换和多路复用技术。ATM采用信元作为传输单位,信元具有固定长度,总共53字节,前5字节是信头,其余48字节是数据段。信头中有信元去向的逻辑地址、优先级、信头差错控制、流量控制等信息。数据段中装入被分解成数据块的各种不同业务的用户信息或其他管理信息,并透明地穿过网络,通过采取异步传输方式从而增加了传输以及索引的效率。
考虑到实际利用效率的具体检测,在此提供优选方案,该方法还包括:
记录从接收读取指令到获取到namespace的时间,判断是否高于预设时间;
若是,则根据全部namespace重新构建各虚拟链表。
在本实施例中对于预设时间不进行具体限定,可以视链表长度而定,例如通过传统的方式依次搜寻namespace所用得平均时间即可以作为本实施例中的预设时间,从而可以判断是否高于传统方式的效率,若低于传统方式的效率,则是构建的各级虚拟链表的范围以及长度不够合理,从而重新对虚拟链表的长度以及范围进行构建,从而保证能及时对效率较低的虚拟链表构建方式进行调整。
在上述实施例中,对于namespace设置方法进行了详细描述,本申请还提供namespace设置装置对应的实施例。需要说明的是,本申请从两个角度对装置部分的实施例进行描述,一种是基于功能模块的角度,另一种是基于硬件的角度。
上述实施例中对于通信方式未进行具体的限定,在此提出优选方案,接收读取指令为NVMe制定的主机与SSD之间通信命令。
固态硬盘(Solid State Drives,SSD),简称固盘,固态硬盘用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与传统硬盘的完全相同,在产品外形和尺寸上也完全与传统硬盘一致,但I/O性能相对于传统硬盘大大提升。
namespace,简称NS,将SSD中闪存空间划分为若干个独立的逻辑空间,每个独立逻辑空间地址从0到N-1,我们将划分出来的每一个逻辑空间我们叫做namespace。namespace的全局唯一标识是NSID。通过本实施例限定了通信是主机与SSD之间的通信,即限定了namespace的存储实在SSD中,因此存储性能更加强大。
根据上述的存储空间为namespace的优选方案,在此提供进一步的优选方案,接收读取指令,并解析读取指令获得需要读取的namespace的ID包括:
接收的IO命令后,解析命令得到NSID;
根据NSID中的namespace,在namespace对应的闪存空间进行读写;
在闪存空间中获取namespace的ID。
闪速存储器是一种可编程只读存储器的电子形式,在操作过程中可以多次擦除和写入。该技术主要用于计算机和其他数字产品(如存储卡和闪存驱动器)之间的通用数据存储和数据交换。闪存是一种用宏块写入的特殊存储。在早期阶段,一旦闪存被擦除,整个芯片上的数据就会被擦除。根据本实施例提供的闪存,从而保证数据的安全性能。
考虑到虚拟链表在读写中出现问题时需要及时解决以防止数据丢失,在此提供优选方案,还包括:
在虚拟链表出现故障时,进行报警。
需要说明的是,本实施例中对于具体的报警方式不进行限定,可以采用警示灯,蜂鸣器等等,也可以采用其他的一些方式进行,例如给设备终端发送警告信息,通过添加报警的方式,从而保证。
图2为本申请实施例提供的一种namespace设置装置的示意图,该装置包括:
接收模块10,用于接收读取指令,并解析读取指令获得需要读取的namespace的ID;
读取模块11,用于根据第一虚拟链表以及ID的获取得到需要读取的namespace的第一范围,第一虚拟链表为预先通过在namespace中设置的长度最长的步长指针构建的虚拟链表,步长指针为namespace指向ID序号为n后的namespace的指针;
循环模块12,用于将namespace的索引转向下一级虚拟链表,根据ID以及下一级虚拟链表在第一范围中获取需要读取的namespace的第二范围,确定出需要读取的namespace的第二范围;
获取模块13,用于重复进行循环模块12直到从基础链表中获取得到需要读取的namespace时,基础链表为预先根据各namespace的ID进行排序的步长指针长度为1的链表。
优选地,该装置还包括:
判读模块,用于根据读取指令判断是否需要删除namespace,当需要删除namespace时,开启置0模块;
置0模块,用于将namespace的标志位置0,用于表征namespace不再接收请求指令。
优选地,该装置还包括:
搜寻模块,用于接收到namespace建立指令,在基础链表中搜寻是否存在置0的标志位,若基础链表中存在置0的标志位开启置1模块;
置1模块,用于将标志位置1并修改namespace的相应信息。
优选地,该装置还包括:
建立模块,当若基础链表中不存在置0的标志位时开启,用于将namespace置于基础链表的末尾,并且新建立的namespace的ID为上一个namespace的ID值加1。
优选地,该装置还包括:
确认模块,用于确认namespace的ID值是否能被各虚拟链表整除;
整除模块,将namespace的ID加入至所有能整除的虚拟链表中。
优选地,该装置还包括:
记录模块,用于记录从接收读取指令到获取到namespace的时间,判断是否高于预设时间,若是,开启重构模块;
重构模块,用于根据全部namespace重新构建各虚拟链表。
由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
本申请所提供的namespace设置装置,包括存储器与处理器,处理器执行存储器中存储的程序时可以实现通过namespace中设置多个长度不同的步长指针建立多级虚拟链表,在接收到读取指令后读取指令获得需要读取的namespace的ID,根据需要读取的namespace的ID并从长度最高的虚拟链表开始在不同级的虚拟链表依次缩小搜索范围,从而获取得到需要读取的namespace,与现有的namespace设置方法相比,由于现有的方案是通过依次搜寻链表中全部namespace,因此当链表过长时,对每个namespace进行验证所需要的时间较长,索引效率较低,而本方案中通过多级的步长指针构建的虚拟链表,可以先确定一个较大的范围,随后依次缩小搜索范围,通过namespace的个数合理设置虚拟链表的级数以及各级虚拟链表的长度,由于是通过ID中的指针进行搜寻,因此在虚拟链表中搜寻范围的效率更高,且可以通过ID逐渐缩小索引范围,从而有效提高namespace的索引效率。
图3为本申请另一实施例提供的namespace设置装置的结构图,如图3所示,namespace设置装置包括:存储器20,用于存储计算机程序;
处理器21,用于执行计算机程序时实现如上述实施例中所提到的namespace设置方法的步骤。
本实施例提供的namespace设置装置可以包括但不限于智能手机、平板电脑、笔记本电脑或台式电脑等。
其中,处理器21可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器21可以采用数字信号处理(Digital Signal Processor,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable LogicArray,PLA)中的至少一种硬件形式来实现。处理器21也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称中央处理器(CentralProcessing Unit,CPU);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器21可以在集成有图像处理器(Graphics Processing Unit,GPU),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器21还可以包括人工智能(Artificial Intelligence,AI)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器20可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器20还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器20至少用于存储以下计算机程序201,其中,该计算机程序被处理器21加载并执行之后,能够实现前述任一实施例公开的namespace设置放啊的相关步骤。另外,存储器20所存储的资源还可以包括操作系统202和数据203等,存储方式可以是短暂存储或者永久存储。其中,操作系统202可以包括Windows、Unix、Linux等。数据203可以包括但不限于上述实施例中所提供的namespace设置方法中涉及的数据等。
在一些实施例中,namespace设置装置还可包括有显示屏22、输入输出接口23、通信接口24、电源25以及通信总线26。
本领域技术人员可以理解,图3中示出的结构并不构成对namespace设置装置的限定,可以包括比图示更多或更少的组件。
本申请实施例提供的namespace设置装置,包括存储器和处理器,处理器在执行存储器存储的程序时,能够实现如下方法:上述实施例中提供的namespace设置方法。
由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
本申请所提供的namespace设置装置,包括存储器与处理器,处理器执行存储器中存储的程序时可以实现通过namespace中设置多个长度不同的步长指针建立多级虚拟链表,在接收到读取指令后读取指令获得需要读取的namespace的ID,根据需要读取的namespace的ID并从长度最高的虚拟链表开始在不同级的虚拟链表依次缩小搜索范围,从而获取得到需要读取的namespace,与现有的namespace设置方法相比,由于现有的方案是通过依次搜寻链表中全部namespace,因此当链表过长时,对每个namespace进行验证所需要的时间较长,索引效率较低,而本方案中通过多级的步长指针构建的虚拟链表,可以先确定一个较大的范围,随后依次缩小搜索范围,通过namespace的个数合理设置虚拟链表的级数以及各级虚拟链表的长度,由于是通过ID中的指针进行搜寻,因此在虚拟链表中搜寻范围的效率更高,且可以通过ID逐渐缩小索引范围,从而有效提高namespace的索引效率。
最后,本申请还提供一种计算机可读存储介质对应的实施例。计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述方法实施例中记载的步骤。
可以理解的是,如果上述实施例中的方法以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
由于可读存储介质部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例及其对应的有益效果请参见方法部分的实施例的描述,这里暂不赘述。
本申请所提供的计算机可读存储介质,其中存储的程序在被执行时可以达到通过namespace中设置多个长度不同的步长指针建立多级虚拟链表,在接收到读取指令后读取指令获得需要读取的namespace的ID,根据需要读取的namespace的ID并从长度最高的虚拟链表开始在不同级的虚拟链表依次缩小搜索范围,从而获取得到需要读取的namespace,与现有的namespace设置方法相比,由于现有的方案是通过依次搜寻链表中全部namespace,因此当链表过长时,对每个namespace进行验证所需要的时间较长,索引效率较低,而本方案中通过多级的步长指针构建的虚拟链表,可以先确定一个较大的范围,随后依次缩小搜索范围,通过namespace的个数合理设置虚拟链表的级数以及各级虚拟链表的长度,由于是通过ID中的指针进行搜寻,因此在虚拟链表中搜寻范围的效率更高,且可以通过ID逐渐缩小索引范围,从而有效提高namespace的索引效率
以上对本申请所提供的一种namespace设置方法、装置及可读存储介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
Claims (15)
1.一种namespace设置方法,其特征在于,包括:
接收读取指令,并解析所述读取指令获得需要读取的namespace的ID;
根据第一虚拟链表以及所述ID的获取得到需要读取的所述namespace的第一范围,所述第一虚拟链表为预先通过在所述namespace中设置的长度最长的步长指针构建的虚拟链表,所述步长指针为所述namespace指向ID序号为n后的所述namespace的指针;
将所述namespace的索引转向下一级虚拟链表,根据所述ID以及所述下一级虚拟链表在所述第一范围中获取需要读取的所述namespace的第二范围,确定出需要读取的所述namespace的第二范围;
判断当前虚拟链表是否为基础链表,所述基础链表为预先根据各所述namespace的ID进行排序的步长指针长度为1的链表;
若否,则回到所述将所述namespace的索引转向下一级虚拟链表的步骤;
若是,则根据所述ID序号获取得到需要读取的所述namespace。
2.根据权利要求1所述的namespace设置方法,其特征在于,在所述根据所述ID序号获取得到需要读取的所述namespace之后,还包括:
根据所述读取指令判断是否需要删除所述namespace;
若是,则将所述namespace的标志位置0,用于表征所述namespace不再接收请求指令。
3.根据权利要求2所述的namespace设置方法,其特征在于,还包括:
接收到所述namespace建立指令,在所述基础链表中搜寻是否存在置0的所述标志位;
若所述基础链表中存在置0的所述标志位,则将所述标志位置1并修改所述namespace的相应信息。
4.根据权利要求3所述的namespace设置方法,其特征在于,接收到所述namespace建立指令,在所述基础链表中搜寻是否存在置0的所述标志位之后,还包括:
若所述基础链表中不存在置0的所述标志位,则将所述namespace置于所述基础链表的末尾,并且新建立的所述namespace的ID为上一个所述namespace的ID值加1。
5.根据权利要求4所述的namespace设置方法,其特征在于,在所述将所述namespace置于所述基础链表的末尾之后,还包括:
确认所述namespace的ID值是否能被各所述虚拟链表整除;
将所述namespace的ID加入至所有能整除的所述虚拟链表中。
6.根据权利要求1至5任意一项所述的namespace设置方法,其特征在于,接收读取指令,并解析所述读取指令获得需要读取的namespace的ID包括;
通过异步传输的方式接收所述读取指令,并通过异步的方式解析所述读取指令获得需要读取的所述namespace的ID。
7.根据权利要求6所述的namespace设置方法,其特征在于,还包括:
记录从接收所述读取指令到获取到所述namespace的时间,判断所述namespace的时间是否高于预设时间;
若是,则根据全部所述namespace重新构建各所述虚拟链表。
8.根据权利要求7所述的namespace设置方法,其特征在于,接收的所述读取指令为NVMe制定的主机与SSD之间通信命令。
9.根据权利要求8所述的namespace设置方法,其特征在于,所述接收读取指令,并解析所述读取指令获得需要读取的namespace的ID包括:
接收的IO命令后,解析命令得到NSID;
根据所述NSID中的所述namespace,在所述namespace对应的闪存空间进行读写;
在所述闪存空间中获取所述namespace的ID。
10.根据权利要求1所述的namespace设置方法,其特征在于,还包括:
在所述虚拟链表出现故障时,进行报警。
11.根据权利要求10所述的namespace设置方法,其特征在于,所述随机链表与所述基础链表均为有序链表。
12.根据权利要求10所述的namespace设置方法,其特征在于,在所述虚拟链表出现故障时,进行报警之后,还包括:
重置所述虚拟链表,并进入所述接收读取指令,并解析所述读取指令获得需要读取的namespace的ID的步骤。
13.一种namespace设置装置,其特征在于,包括:
接收模块,用于接收读取指令,并解析所述读取指令获得需要读取的namespace的ID;
读取模块,用于根据第一虚拟链表以及所述ID的获取得到需要读取的所述namespace的第一范围,所述第一虚拟链表为预先通过在所述namespace中设置的长度最长的步长指针构建的虚拟链表,所述步长指针为所述namespace指向ID序号为n后的所述namespace的指针;
循环模块,用于将所述namespace的索引转向下一级虚拟链表,根据所述ID以及所述下一级虚拟链表在所述第一范围中获取需要读取的所述namespace的第二范围,确定出需要读取的所述namespace的第二范围;
判断模块,用于判断当前虚拟链表是否为基础链表,所述基础链表为预先根据各所述namespace的ID进行排序的步长指针长度为1的链表,若否,则回到所述循环模块,若是,则进入所述获取模块;
获取模块,用于根据所述ID序号获取得到需要读取的所述namespace。
14.一种namespace设置装置,其特征在于,包括存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至12任一项所述的namespace设置方法的步骤。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至12任一项所述的namespace设置方法的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211131081.XA CN115525580A (zh) | 2022-09-16 | 2022-09-16 | 一种namespace设置方法、装置及可读存储介质 |
PCT/CN2023/085856 WO2024055571A1 (zh) | 2022-09-16 | 2023-04-03 | 一种namespace设置方法、装置及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211131081.XA CN115525580A (zh) | 2022-09-16 | 2022-09-16 | 一种namespace设置方法、装置及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115525580A true CN115525580A (zh) | 2022-12-27 |
Family
ID=84698221
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211131081.XA Pending CN115525580A (zh) | 2022-09-16 | 2022-09-16 | 一种namespace设置方法、装置及可读存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN115525580A (zh) |
WO (1) | WO2024055571A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117149093A (zh) * | 2023-10-27 | 2023-12-01 | 四川省华存智谷科技有限责任公司 | 一种通过ssd缩容提升存储系统可靠性的方法 |
WO2024055571A1 (zh) * | 2022-09-16 | 2024-03-21 | 山东云海国创云计算装备产业创新中心有限公司 | 一种namespace设置方法、装置及可读存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10095701B1 (en) * | 2015-09-30 | 2018-10-09 | EMC IP Holding Company LLC | Translation-based name node configuration for object access in a multi-tier storage system |
CN110377436B (zh) * | 2019-07-12 | 2021-04-27 | 清华大学 | 持久性内存的数据存储访问方法、设备及装置 |
CN111651269A (zh) * | 2020-05-18 | 2020-09-11 | 青岛镕铭半导体有限公司 | 实现设备虚拟化的方法、装置及计算机可读存储介质 |
CN113065964B (zh) * | 2021-04-13 | 2024-05-03 | 上证所信息网络有限公司 | 一种采用可变步长跳表的数据存储系统及方法 |
CN115525580A (zh) * | 2022-09-16 | 2022-12-27 | 山东云海国创云计算装备产业创新中心有限公司 | 一种namespace设置方法、装置及可读存储介质 |
-
2022
- 2022-09-16 CN CN202211131081.XA patent/CN115525580A/zh active Pending
-
2023
- 2023-04-03 WO PCT/CN2023/085856 patent/WO2024055571A1/zh unknown
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024055571A1 (zh) * | 2022-09-16 | 2024-03-21 | 山东云海国创云计算装备产业创新中心有限公司 | 一种namespace设置方法、装置及可读存储介质 |
CN117149093A (zh) * | 2023-10-27 | 2023-12-01 | 四川省华存智谷科技有限责任公司 | 一种通过ssd缩容提升存储系统可靠性的方法 |
CN117149093B (zh) * | 2023-10-27 | 2024-03-26 | 四川省华存智谷科技有限责任公司 | 一种通过ssd缩容提升存储系统可靠性的方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2024055571A1 (zh) | 2024-03-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115525580A (zh) | 一种namespace设置方法、装置及可读存储介质 | |
CN111241389B (zh) | 一种基于矩阵的敏感词过滤方法、装置、电子设备、存储介质 | |
CN106874348B (zh) | 文件存储和索引方法、装置及读取文件的方法 | |
CN100566177C (zh) | 转换方法以及系统 | |
CN110168532B (zh) | 数据更新方法和存储装置 | |
CN104360865A (zh) | 一种序列化方法、反序列化方法及相关设备 | |
CN113569508B (zh) | 基于id进行数据索引与访问的数据库模型构建方法及设备 | |
CN106126486A (zh) | 时间信息编码方法、编码值检索方法、解码方法与装置 | |
CN113721862B (zh) | 数据处理方法及装置 | |
CN109407985B (zh) | 一种数据管理的方法以及相关装置 | |
CN102867049A (zh) | 一种基于单词查找树实现的汉语拼音快速分词方法 | |
CN106909554A (zh) | 一种数据库文本表数据的加载方法及装置 | |
CN110704334B (zh) | 一种重要产品数据管理的方法、系统及设备 | |
CN111291022A (zh) | 一种基于区块链的数据存储系统 | |
CN116662019B (zh) | 请求的分配方法、装置、存储介质及电子装置 | |
CN111124883B (zh) | 一种基于树形表格的测试用例库引入方法、系统及设备 | |
CN116842012A (zh) | 一种Redis集群的分片存储方法、装置、设备及存储介质 | |
CN111028092A (zh) | 基于Louvain算法的社区发现方法、计算机设备及其可读存储介质 | |
CN115221360A (zh) | 树形结构配置方法和系统 | |
CN116127154A (zh) | 知识标签推荐方法、装置、电子设备及存储介质 | |
CN111026682B (zh) | 板卡芯片的数据访存方法、装置及计算机可读存储介质 | |
CN114238548A (zh) | 索引用存储系统、方法、电子设备和可读存储介质 | |
CN114070901A (zh) | 基于多数据对齐的数据发送和接收方法、装置和设备 | |
CN103678695B (zh) | 一种并行处理方法及装置 | |
CN106775586A (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 |