CN116301636A - 一种数据结构、管理数据结构的方法以及基于哈希算法实现键值协议的硬件加速器 - Google Patents
一种数据结构、管理数据结构的方法以及基于哈希算法实现键值协议的硬件加速器 Download PDFInfo
- Publication number
- CN116301636A CN116301636A CN202310284589.1A CN202310284589A CN116301636A CN 116301636 A CN116301636 A CN 116301636A CN 202310284589 A CN202310284589 A CN 202310284589A CN 116301636 A CN116301636 A CN 116301636A
- Authority
- CN
- China
- Prior art keywords
- buf
- data
- key
- command
- value information
- 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 12
- 238000007726 management method Methods 0.000 claims abstract description 14
- 238000013523 data management Methods 0.000 claims abstract description 5
- 238000012217 deletion Methods 0.000 claims description 11
- 230000037430 deletion Effects 0.000 claims description 11
- 238000013507 mapping Methods 0.000 abstract description 6
- 238000010586 diagram Methods 0.000 description 10
- 238000012545 processing Methods 0.000 description 6
- 238000003780 insertion Methods 0.000 description 4
- 230000037431 insertion Effects 0.000 description 4
- 101100524516 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) RFA2 gene Proteins 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 101100033865 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) RFA1 gene Proteins 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005265 energy consumption 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/0604—Improving or facilitating administration, e.g. storage management
-
- 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/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- 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/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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
本发明公开了一种用来管理键值信息的数据结构,数据结构名为KI_BUF,键值之间的映射关系转换为键值与物理块地址之间的映射关系,本发明还公开了一种使用哈希算法来管理数据结构的方法以及对应的硬件加速器。在本发明中,利用自定义的数据结构以及采用哈希函数来优化数据管理,能够更加高效的实现对键值数据的管理。本发明设计的专用硬件加速器KV_ENGINE。KV_ENGINE能够自动完成键值数据的查找、添加、删除等操作,并通过命令数据和状态数据与上位CPU进行交互,极大减轻了上位CPU的工作负载,有效的提升了键值数据的管理效率。
Description
技术领域
本发明涉及一种用来管理键值信息的数据结构以及使用哈希算法来管理数据结构的方法。
本发明还涉及一种数据存储领域的一种基于NVME协议的SSD控制器,具体涉及一种基于哈希算法实现键值协议的硬件加速器。
背景技术
最近,NVME协议标准组织发布了最新的NVME 2.0协议标准。在最新的NVME 2.0协议标准中,该协议添加了基于key-value的命令集。Key-value协议将特定值数据(value)和特定键值(key)绑定,即键值对,实现基于特定键值信息的数据读取(key_retrive)、搜索(key_exist)、存储(key_store)、删除(key_delete)和列出(key_list)操作。
在键值协议中,一个特定的键值信息由键值和键值信息的长度两个方面共同组成,键值信息的长度决定了键值中有效信息的长度;同时一个特定的值数据信息也是由值数据信息和值数据信息长度共同构成。而为了实现对于键值协议的数据管理,存在着以下几个难点:
首先键值信息的最大有效位宽为128bit(16Byte),这意味着如果直接使用键值信息去索引数据,那么键值的最大理论索引空间为2128,但当前的硬件水平在实际实现中无法支持如此大的索引空间。
其次值数据信息的长度是以字节为单位,这意味着一个特定键值对信息的大小是不固定的而且可能变化非常大。在这种情况下如果直接对于键值对信息进行管理则十分困难。
另外在键值协议中,数据存储在后端存储介质(通常为NAND FLASH)上,对NANDFLASH的访问基于物理块地址(Physic Block Address,PBA)。这意味着对于键值命令,需要额外维护键值信息和物理块地址之间的映射关系。
发明内容
为了解决键值对信息的大小不固定、直接管理困难的问题,本发明提出了一种新的数据结构——KI_BUF。KI_BUF大小固定并且将键值之间的映射关系转换为键值与物理块地址之间的映射关系。基于KI_BUF能够将键值协议中的对于键值对的管理转换为对于KI_BUF的管理,实现对SSD上键值数据的更有效管理。
而为解决键值协议中索引空间过大的问题,本发明采用哈希算法来缩减索引空间,这样能够更加高效的管理数据同时也能更好的利用系统缓存空间。
而为了解决直接使用CPU来管理键值对信息低效率、高能耗的问题,本发明提供一种基于哈希算法实现键值协议的硬件加速器。硬件加速器能够使用命令、状态信息与上位CPU进行交互同时自动实现对KI_BUF数据的管理,这样降低了上位CPU的工作负载同时也更加高效。
本发明主要针对最新的NVME2.0协议,在NVME2.0协议中,协议提出了一种基于键值模式的数据组织、管理标准。在键值协议的基础上,我们设计了一个专用的硬件加速器,名为KV_ENGINE,该模块能够高效的支持键值协议中所定义的存储、读取、删除、搜索和列出命令,从而能够更高效的管理SSD上的键值数据。
本发明提供如下技术方案:
本发明的一个方面提供了一种新的数据结构(Key Information Buffer,KI_BUF),来管理键值信息和物理块地址之间的映射关系。KI_BUF的具体定义和每个数据字段的含义如下表1所示。在KI_BUF中,将键值信息与物理块地址进行绑定,物理块地址标识了数据在存储介质中存储的起始地址,结合KI_BUF中的值数据长度信息,可以准确地访问存储介质中的值数据。通过定义的KI_BUF数据结构,可以将Key-value中的对于键值对的管理转换为对于KI_BUF的管理。数据结构KI_BUF由键值信息域、偏移地址域、值数据长度域、键值信息长度域、命名空间标识符域和值数据的起始物理块地址域这六个域构成。如下表1中描述:
表 1: KI_BUF数据结构
一个KI_BUF实例占32Byte。
当KEYLEN域为0xFF时,表明当前KI_BUF中的键值信息是无效的,即为NULLKI_BUF。
当BUF_PTR域为0xFFFFFFFF时,表明当前KI_BUF是链表中的最后一个。
定义完整键值信息为{KEYLEN,KEY};完整键值信息的长度为17Byte。
本发明的第二方面还提供了一种使用哈希算法来管理数据结构的方法。在实施例的第一个方面,本发明将对键值数据的管理转换为对KI_BUF数据的管理,但是如果KI_BUF数据是随机组织的,因此对特定键值信息的搜索和删除将是非常低效的。因此,本发明提供了一种基于哈希算法的KI_BUF数据管理方法。在该方法中,使用完整键值信息作为哈希运算的输入,哈希运算的输出用于索引相应的KI_BUF。在哈希运算之后,可以快速找到具有特定键值信息的KI_BUF。同时,相较于直接使用键值信息作为索引,该方法能够根据不同的哈希算法来动态的调整其对应的索引空间,解决索引空间过大的问题。能够有效的适应具有不同缓存容量的存储系统。
当使用哈希算法来管理KI_BUF数据,哈希算法本身存在哈希冲突的问题——即两个不同的完整键值信息,哈希运算后的结果是相同的。为了解决这个问题,本发明结合了链表的数据结构来解决哈希算法本身具有的哈希冲突问题。当发生哈希冲突时,新的KI_BUF将被添加到相应的链接列表的末尾。根据链表结构的特征,可以通过确定链表表头的地址来访问链表中的每个元素。在KV_ENGINE正常工作一段时间后,KI_BUF将被组织成一个如图2所示的数据结构。称由这些KI_BUFs组织成的数据结构为KI_BUF数据池(KI_POOL)。整个KI_BUF数据池被分为两个区域——头部区域和随机区域,头部区域将被哈希运算的结果索引;随机区域中的KI_BUF可以通过KI_BUF内部的BUF_PTR访问(链表中前一个KI_BUF中的BUF_PTR域指示下一个KI_BUF的位置)。
本发明的第三方面还设计了特殊的硬件加速器——KV_ENGINE。KV_ENGINE可以自动完成对于完整键值信息的哈希运算,同时还可以向上位CPU提供访问接口。上位CPU将命令数据发送给KV_ENGINE,KV_ENGINE自动执行相应的处理,处理后将状态数据返回给上位CPU。通过KV_ENGINE可以大大降低CPU的工作负载。KV_ENGINE支持的命令数据的数据格式和返回的状态数据的数据格式见表2和表3。
表 2:命令数据的数据结构
表 3: 状态数据的数据结构
KV_ENGINE支持6个操作命令,即键值信息读取(key_rd)、键值信息添加(key_add)、键值信息删除(key_del)、键值信息列出(key_list)、键值信息哈希运算(key_hd)和KI_BUF写入命令(ki_buf_wr)。KV_ENGINE使用这些命令来实现对于KI_BUF数据管理,从而实现对于key-value协议的支持。
对于键值信息读取操作,KV_ENGINE可以通过命令中包含的完整键值信息自动执行哈希运算,并根据哈希运算的结果被索引到相应的KI_BUF链表。进一步的,KV_ENGINE模块可以自动遍历整个KI_ BUF链表,并匹配到特定的完整键值信息。进一步的,KV_ENGINE模块可以根据匹配和比较的结果自动生成相应的状态信息,并返回给上位CPU。
对于键值信息添加操作,KV_ENGINE可以通过命令中包含的完整键值信息自动执行哈希运算,并根据哈希运算的结果索引到相应的KI_BUF链表。进一步的,KV_ENGINE模块可以自动遍历整个KI_BUF链表,并匹配到特定的完整键值信息。进一步的,KV_ENGINE模块可以根据匹配的结果和命令中的存储选项信息来判断是重写还是添加。此外,KV_ENGINE模块可以根据操作结果生成相应的状态信息,并将其返回给上位CPU。
对于键值信息删除操作,KV_ENGINE可以通过命令中包含的完整键值信息自动执行哈希运算,并根据哈希运算的结果被索引到相应的KI_BUF链表。进一步的,KV_ENGINE模块可以自动遍历整个KI_BUF链表,并匹配到特定的完整键值信息。进一步的,KV_ENGINE模块可以根据匹配和比较的结果来判断是否删除相应的KI_BUF。此外,KV_ENGINE模块可以根据操作结果生成相应的状态信息,并将其返回给上位CPU。
对于键值信息列出操作,KV_ENGINE能够根据命令中包含的完整键值信息自动进行哈希运算,并根据哈希运算的结果索引到对应的KI_BUF链表。进一步的,KV_ENGINE模块能够自动遍历整个KI_BUF链表并匹配比对特定的完整键值信息。如果找到匹配的KI_BUF,则将对应的完整键值信息读取出来并按照要求的格式放到命令中指定的缓存区。如果没有找到匹配的KI_BUF,则读取搜索结束时对应的KI_BUF,将其完整键值信息按照要求的格式放到命令中指定的缓冲区。然后KV_ENGINE将会从头部区域的第一个KI_BUF开始,遍历访问整个KI_BUF数据池,读取KI_BUF中的完整键值信息,并按照要求的格式放到命令指定的缓冲区中。等到指定的缓冲区被填满或者整个KI_BUF数据池遍历完成,键值信息列出操作完成并生成状态信息返回给上位CPU。
对于键值信息哈希运算操作,KV_ENGINE可以通过命令中包含的完整键值信息自动执行哈希运算,并根据哈希运算的结果生成相应的状态信息。进一步的,相应的状态信息被返回给上位CPU。
对于KI_BUF写入命令,KV_ENGINE可以根据命令中包含的偏移地址信息自动访问相应的KI_BUF,并将命令中的物理块地址信息写入特定的KI_BUF。进一步的,生成相应的状态信息并返回给上位CPU。
与现有技术相比,本发明的有益效果是:本发明通过自定义的KI_BUF数据结构,可以将键值协议中对于键值对的管理转换为对于KI_BUF数据的管理,解决键值对信息的大小不固定、直接管理困难的问题。
通过采用哈希操作,本发明将键值协议中定义的巨大索引空间转换为当前硬件支持的哈希空间,优化存储空间的使用,解决索引空间过大的问题。并利用链表的数据结构解决哈希冲突的问题。
本发明设计的一种硬件加速器来管理KI_BUF数据。硬件加速器KV_ENGINE接收到来自上位CPU的命令,并执行相应的操作。当操作完成后,它会将状态返回给上位CPU。这样,就大大简化了上CPU的处理任务,硬件自动处理远比上位CPU使用软件处理的更高效、更节能。
附图说明
图 1 为初始化后的KI_BUF数据池结构示意图。
图 2为工作一段时间后的KI_BUF数据池结构示意图。
图 3 为硬件加速器KV_ENGINE内部结构图。
图4 为执行添加操作的键值信息添加命令示意图。
图5 为执行插入操作的键值信息添加命令示意图。
图 6为执行头部区域重写操作的键值信息添加命令示意图。
图 7为执行随机区域重写操作的键值信息添加命令示意图。
图8为执行头部区域插入操作的键值信息添加命令示意图。
图 9为执行头部区域删除操作的键值信息删除命令示意图。
图 10为执行随机区域删除操作的键值信息删除命令示意图。
图 11为核心内部状态跳转图。
实施方式
下面将参照附图更详细地描述本发明的示例性实施例。尽管在附图中示例了本发明的示范性实施例,但应该理解,本发明可以以各种形式实现,并且不应受本文中描述的实施例的限制。相反,提供这些实施例是为了能够更彻底地了解本发明。
硬件加速器KV_ENGINE的详细结构设计如下图3所示。KV_ENGINE模块和外部模块主要有两个接口,一个AHB寄存器配置接口和一个全功能的AXI4接口,用于访问系统缓存。KV_ENGINE中的每个模块通过内部接口连接,内部接口通过vld和rdy信号握手。
比较两个完整键值信息意味着:首先比较键值长度,如果它们的键值长度相同,然后比较键值信息,如果它们的键值信息也是相同的,那么则意味着这两个完整键值信息是互相匹配的。
在随机区域中,这些KI_BUF是按照一定的顺序排列组织的(这些KI_BUF按照完整键值信息保持递增的顺序排列)。但是在头部区域中,KI_BUF的完整键值信息不一定是最小的。这种数据的组织方式可以减少在随机区域内搜索特定KI_BUF的搜索时间。在随机区域中,如果KI_BUF中的当前完整键值信息大于需要匹配的完整键值信息,并且没有被匹配,则可以确定当前链表中没有匹配的KI_BUF。
在KV_ENGINE模块正常工作之前,需要进行初始化操作。初始化过程如下:
(1)上位CPU配置系统缓存基址寄存器、随机区域头指针寄存器、随机区域尾指针寄存器、头部区域头指针寄存器这四个寄存器,分别配置为系统缓存基地址、随机区域起始的偏移地址、随机区域结束的偏移地址和头部区域起始的偏移地址。通过这四个寄存器确定整个KI_BUF数据池在系统缓存中的位置。
(2)上位CPU配置KV_ENGINE控制寄存器,设置寄存器中的hash_type域和init_en域,选择采用的哈希算法类型以及启动硬件初始化操作。
(3)初始化头部区域:
KI_BUF0的物理地址= 系统缓存基址+头部区域头指针*32;
KI_BUF1的物理地址= 系统缓存基址+(头部区域头指针+1) *32;
KI_BUF2的物理地址= 系统缓存基址+(头部区域头指针+2) *32;
……;
KI_BUF(n-1)的物理地址=系统缓存基址+(头部区域头指针+n-1) ;*32, n的最大值为CRC算法的最大输出(例如crc_21, n=221);
每一个KI_BUF的BUF_PTR域和KEY_LEN域都是一样的,BUF_PTR=0xFFFFFFFF, KEY_LEN=0xFF。
(4)初始化随机区域:
第一个KI_BUF的物理地址为系统缓存基址+随机区域头指针*32;
第一个KI_BUF的BUF_PTR域的值为随机区域头指针+1;
第二个KI_BUF的BUF_PTR域的值为随机区域头指针+2;
……;
倒数第二个KI_BUF的BUF_PTR域的值为随机区域尾指针;
最后一个KI_BUF的BUF_PTR域的值为0xFFFFFFFF。
(5)当初始化操作完成之后,控制模块将会置位KV_ENGINE状态寄存器的init_done域,上位CPU可以通过查询此寄存器来判断初始化操作是否结束。
在初始化操作过程中,步骤(3)和步骤(4)均由硬件自动完成。当整个初始化操作完成之后,整个KI_BUF数据池在系统缓存中的数据结构如图1所示。
在KV_ENGINE模块内部,控制模块负责命令解析、命令执行和最终状态信息的生成。控制模块完成对KI_BUF数据的查找、添加、删除操作之后即可生成对应的状态数据并写入到寄存器配置模块,主机访问寄存器配置模块获取对应的状态数据。对于不同的命令,对应的处理流程如下:
进一步的,对于键值信息读取命令,控制模块将执行以下操作:
(1)主机将命令数据发送给寄存器配置模块,控制模块将命令数据从寄存器配置模块中读取出来;
(2)控制模块解析命令数据,获取对应的完整键值信息。控制模块将完整键值信息送往哈希运算模块进行哈希运算。记ID为哈希运算的结果,计算出头部区域中对应的KI_BUF的物理地址(KI_BUF物理地址=系统缓存基址+ (头部区域头指针+ID) *32);
(3)控制模块将读取命令和对应的物理地址发送给AXI总线生成模块,让AXI总线生成模块去访问系统缓存获取对应的KI_BUF数据。当对应的KI_BUF数据返回后,AXI总线生成模块将对应数据返回给控制模块;
(4)控制模块将AXI总线生成模块返回的完整键值信息与命令数据中的完整键值信息进行匹配比对,如果没有匹配上,则计算出下一个KI_BUF的地址(下一个 KI_BUF物理地址 =系统缓存基址+当前KI_BUF中的BUF_PTR*32),然后重复步骤(3);如果匹配上,则跳出循环并置位完成信号同时生成对应的状态数据(将当前KI_BUF中的物理块地址(PBA)、VALUE_LEN和当前KI_BUF的偏移地址信息填入状态数据中)写入寄存器配置模块;
(5)如果一直搜寻到链表的尾部仍然没有找到匹配的KI_BUF或者当搜寻到随机区域,并且当前KI_BUF中完整键值信息大于命令数据中的完整键值信息,那么则表明在当前KI_BUF链表中将不存在匹配的KI_BUF。控制模块将跳出循环并生成对应的状态数据(置位状态数据中的KEY_RD_ERR域,同时将搜索结束时KI_BUF中的VALUE_LEN、PBA和KI_BUF的偏移地址信息填入状态数据中)同时将状态数据写入寄存器配置模块。
进一步的,对于键值信息添加命令,控制模块将执行以下操作:
(1)主机将命令数据发送给寄存器配置模块,控制模块将命令数据从寄存器配置模块中读取出来;
(2)控制模块解析命令数据,获取对应的完整键值信息。控制模块将完整键值信息送往哈希运算模块进行哈希运算,计算出头部区域中对应的KI_BUF的物理地址;
(3)控制模块将读取命令和对应的物理地址发送给AXI总线生成模块,让AXI总线生成模块去访问系统缓存获取对应的KI_BUF数据。当对应的KI_BUF数据返回后,AXI总线生成模块将对应数据返回给控制模块;
(4)控制模块将AXI总线生成模块返回的完整键值信息与命令数据中的完整键值信息进行匹配比对,如果没有匹配上,则重复步骤3)遍历KI_BUF链表,直到匹配上或者遍历结束仍然没有匹配到。根据匹配的结果选择下列中的一种操作;
(a)添加操作,对于添加操作可以参考图4所示。
当头部区域非NULL时,读取最后一个KI_BUF(名为KI_BUF3)并且发现命令数据中的完整键值信息大于KI_BUF3中的完整键值信息,则表明没有匹配上,遍历KI_BUF链表结束。
当命令数据中新增标志位为1时:
控制模块置位完成信号并生成对应的状态数据(将KI_BUF3中的PBA、VALUE_LEN和KI_BUF3的偏移地址填充到状态数据中)返回给主机。
当命令数据中新增标志位为0时:
在KI_BUF3之后添加一个新的KI_BUF(命名为KI_BUF4)。对于KI_BUF4中的NSID、KEY_LEN、KEY、VALUE_LEN域,使用命令数据中的信息来填充;对于KI_BUF4中的BUF_PTR域,填充0xFFFFFFFF。而对于KI_BUF3的BUFPTR域,需要修改为命令数据中的BUF_PTR域。控制模块置位完成信号并生成对应的状态数据(将状态数据中的KI_BUF_STS域设为3’h0,将KI_BUF4的偏移地址和KI_BUF4内部的BUF_PTR域分别设置为状态数据中的BUF_PTR0和KI_PBA_LOW)返回给主机。
当操作完成之后,主机不需要在NAND FLASH中删除旧的值数据。
(b)插入操作,对于插入操作可以参考图5所示。
当头部区域非NULL时,读取随机区域中的KI_BUF3并且发现命令数据中的完整键值信息小于KI_BUF3中的完整键值信息,则表明没有匹配上,遍历KI_BUF链表结束。
当命令数据中新增标志位为1时:
控制模块置位完成信号并生成对应的状态数据(将KI_BUF3中的PBA、VALUE_LEN和KI_BUF3的偏移地址填充到状态数据中)返回给主机。
当命令数据中新增标志位为0时:
在KI_BUF3之前添加一个新的KI_BUF(命名为KI_BUF4)。对于KI_BUF4中的NSID、KEY_LEN、KEY、VALUE_LEN域,使用命令数据中的信息来填充;对于KI_BUF4中的BUF_PTR域,填充KI_BUF2中的BUF_PTR域。而对于KI_BUF2的BUF_PTR域,需要修改为命令数据中的BUF_PTR域。控制模块将置位完成信号并生成对应的状态数据(将状态数据中的KI_BUF_STS域设为3’h1,将KI_BUF4的偏移地址和KI_BUF4内部的BUF_PTR域分别设置为状态数据中的BUF_PTR0和KI_PBA_LOW)返回给主机。
当操作完成之后,主机不需要在NAND FLASH中删除旧的值数据。
(c)头部区域重写,对于头部区域重写操作可以参考图6。
当读取头部区域中的KI_BUF1并且发现命令数据中的完整键值信息等于KI_BUF1中的完整键值信息,则表明匹配成功,遍历KI_BUF链表结束。
当命令数据中重写标志位为1时:
控制模块置位完成信号并生成对应的状态数据(将KI_BUF1中的PBA、VALUE_LEN和KI_BUF1的偏移地址填充到状态数据中)返回给主机。
当命令数据中重写标志位为0时:
将KI_BUF1替换成一个新的KI_BUF(命名为KI_BUF4)。对于KI_BUF4中的NSID、KEY_LEN、KEY、VALUE_LEN域,使用命令数据中的信息来填充;对于KI_BUF4中的BUF_PTR域,和KI_BUF1中的BUF_PTR域保持一致。控制模块将置位完成信号并生成对应的状态数据(将状态数据中的KI_BUF_STS域设为3’h2,将KI_BUF4的偏移地址和KI_BUF4内部的BUF_PTR域分别设置为状态数据中的BUF_PTR0和KI_PBA_LOW)返回给主机。
当操作完成之后,主机需要在NAND FLASH中删除旧的值数据。
(d)随机区域重写, 对于随机区域重写操作可以参考图7。
当读取到随机区域中的KI_BUF2并且发现命令数据中的完整键值信息等于KI_BUF2中的完整键值信息,则表明匹配成功,遍历KI_BUF链表结束。
当命令数据中重写标志位为1时:
控制模块置位完成信号并生成对应的状态数据(将KI_BUF2中的PBA、VALUE_LEN和KI_BUF2的偏移地址填充到状态数据中)返回给主机。
当命令数据中重写标志位为0时:
将KI_BUF2替换成一个新的KI_BUF(命名为KI_BUF4)。对于KI_BUF4中的NSID、KEY_LEN、KEY、VALUE_LEN域,使用命令数据中的信息来填充;对于KI_BUF4中的BUFPTR域,和KI_BUF2中的BUF_PTR域保持一致。控制模块将置位完成信号并生成对应的状态数据(将状态数据中的KI_BUF_STS域设为3’h3,将KI_BUF4的偏移地址和KI_BUF4内部的BUF_PTR域分别设置为状态数据中的BUF_PTR0和KI_PBA_LOW)返回给主机。
当操作完成之后,主机需要在NAND FLASH中删除旧的值数据。
(e)头部区域插入, 对于头部区域插入操作可以参考图8。
当头部区域中的KI_BUF(命名为KI_BUF1)为NULL时并且无法找到匹配的KI_BUF时,匹配失败并且搜索结束。
当命令数据中新增标志位为1时:
控制模块置位完成信号并生成对应的状态数据(将KI_BUF1中的PBA、VALUE_LEN和KI_BUF1的偏移地址填充到状态数据中)返回给主机。
当命令数据中新增标志位为0时:
将KI_BUF1替换成一个新的KI_BUF(命名为KI_BUF4)。对于KI_BUF4中的NSID、KEY_LEN、KEY、VALUE_LEN域,使用命令数据中的信息来填充;对于KI_BUF4中的BUF_PTR域,和KI_BUF1中的BUF_PTR域保持一致。控制模块将置位完成信号并生成对应的状态数据(将状态数据中的KI_BUF_STS域设为3’h4,将KI_BUF4的偏移地址和KI_BUF4内部的BUF_PTR域分别设置为状态数据中的BUF_PTR0和KI_PBA_LOW)返回给主机。
当操作完成之后,主机不需要在NAND FLASH中删除旧的值数据。
进一步的,对于键值信息删除命令,控制模块将执行以下操作:
(1)主机将命令数据发送给寄存器配置模块,控制模块将命令数据从寄存器配置模块中读取出来。
(2)控制模块解析命令数据,获取对应的完整键值信息。控制模块将完整键值信息送往哈希运算模块进行哈希运算。计算出头部区域中对应的KI_BUF的物理地址。
(3)控制模块将读取命令和对应的物理地址发送给AXI总线生成模块,让AXI总线生成模块去访问系统缓存获取对应的KI_BUF数据。当对应的KI_BUF数据返回后,AXI总线生成模块将对应数据返回给控制模块。
(4)控制模块将AXI总线生成模块返回的完整键值信息与命令数据中的完整键值信息进行匹配比对,如果没有匹配上,则重复步骤3)遍历KI_BUF链表,如果遍历结束仍然没有匹配上,则直接生成对应的状态数据(将状态数据中的KEY_DEL_ERR域置位)并返回给主机。如果匹配上则根据匹配的结果选择下列中的一种操作。
(a)头部区域删除,对于头部区域删除操作可以参考图9。
当读取头部区域中的KI_BUF(命名为KI_BUF1)并且发现KI_BUF1中的完整键值信息与命令中的完整键值信息相匹配,匹配成功并且搜索结束。
删除KI_BUF1,即将KI_BUF1中的KEY_LEN域设置为0xFF,但是KI_BUF1中的BUF_PTR域保持不变。控制模块置位完成信号并且生成对应的状态数据(将状态数据中的KI_BUF_STS域设为3’h0,将KI_BUF1对应的偏移地址填充到状态数据中)并返回给主机。
当操作完成后,并且主机需要删除在NAND FLASH中删除旧的值数据。
(b)随机区域删除,对于随机区域删除操作可以参考图10。
当读取随机区域中的KI_BUF(命名为KI_BUF2)并且发现KI_BUF2中的完整键值信息与命令中的完整键值信息相匹配,匹配成功并且搜索结束。
删除KI_BUF2,将KI_BUF2中的KEY_LEN域设置为0xFF,将KI_BUF1中的BUF_PTR域替换成KI_BUF2中的BUF_PTR域。控制模块置位完成信号并且生成对应的状态数据(将状态数据中的KI_BUF_STS域设为3’h1,将KI_BUF2对应的偏移地址填充到状态数据中)并返回给主机。
当操作完成后,并且主机需要删除在NAND FLASH中删除旧的值数据。
进一步的,对于键值信息列出命令,控制模块将执行以下操作:
(1)主机将命令数据发送给寄存器配置模块,控制模块将命令数据从寄存器配置模块中读取出来。
(2)控制模块解析命令数据,获取对应的完整键值信息。控制模块将完整键值信息送往哈希运算模块进行哈希运算,计算出头部区域中对应的KI_BUF的物理地址。
(3)控制模块将读取命令和对应的物理地址发送给AXI总线生成模块,让AXI总线生成模块去访问系统缓存获取对应的KI_BUF数据。当对应的KI_BUF数据返回后,AXI总线生成模块将对应数据返回给控制模块。
(4)控制模块将AXI总线生成模块返回的完整键值信息与命令数据中的完整键值信息进行匹配比对,如果没有匹配上,则重复步骤3)遍历KI_BUF链表,如果遍历结束仍然没有匹配上,则直接执行步骤5);如果匹配上,则将读出相应的完整键值信息,并按照特定的格式放入命令数据中指定的缓冲区中,然后执行步骤5)。
(5)控制模块将从头部区域的第一个KI_BUF开始,遍历访问整个KI_BUF数据池,读取KI_BUF中有效的完整键值信息,并将其以特定的格式放在命令指定的缓冲区中。等待指定的缓冲区被填充或遍历完成整个KI_BUF数据池,键值信息列出操作完成,生成对应的状态数据返回给主机。
键值信息列出命令返回的数据结构如下表4、表5和表6所示,主机配置KV_CTRL_REG寄存器的bit[2:0]来决定哈希运算的类型,默认值为0。主机配置KV_ENGINE控制寄存器的bit [5:4]来决定键值信息列出操作返回的数据结构,默认返回的数据结构如表5所示。
表 4: KEY_LIST 返回数据的数据格式
表 5: 键值信息数据格式 (KeyLength域占用2Byte)
表 6: 键值信息数据格式 (KeyLength域占用1Byte)
进一步的,对于键值信息哈希运算命令,控制模块将执行以下操作:
(1)主机将命令数据发送给寄存器配置模块,控制模块将命令数据从寄存器配置模块中读取出来。
(2)控制模块解析命令数据,获取对应的完整键值信息。控制模块将完整键值信息送往哈希运算模块进行哈希运算。记ID为完整键值信息经过哈希运算后的结果。
(3)控制模块置位完成信号并生成对应的状态数据(将ID填入状态数据中的BUF_PTR0域)回给主机。
进一步的,对于KI_BUF写入命令,控制模块将执行以下操作:
(1)主机将命令数据发送给寄存器配置模块,控制模块将命令数据从寄存器配置模块中读取出来。
(2)控制模块解析命令数据,获取对应的KI_BUF的偏移地址、PBA和需要写入的BUF_PTR信息。计算出对应的KI_BUF的物理地址(KI_BUF物理地址=系统缓存基地址+KI_BUF的偏移地址*32)。
(3)控制模块将写入命令和对应的物理地址发送给AXI总线生成模块,让AXI总线生成模块去访问系统缓存并写入对应的KI_BUF数据。当对应的KI_BUF数据写入完成后,AXI总线生成模块将对应的完成状态返回给控制模块。
(4)控制模块生成对应的状态数据并返回给主机。
根据上述命令处理流程,控制模块内部的状态跳转如图11所示。
在寄存器配置模块中,主要是实例化一些配置寄存器和状态寄存器,并为上位CPU提供一个基于AHB总线的访问接口。另一方面,在寄存器配置模块中,使用寄存器数组实现命令数据FIFO和状态数据FIFO。对于命令数据FIFO,在寄存器模块中实例化了36个命令寄存器,每个寄存器大小为4字节。同时,为命令数据FIFO提供了两个寄存器,命令头指针和命令尾指针。当上位CPU将命令数据发送到KV_ENGINE时,将会以命令头指针为起点,将命令数据被写入相应的命令寄存器。命令数据写入完成后,上层CPU将更新命令头指针(命令头指针=(命令头指针+9)%36)。控制模块从命令寄存器读取命令数据时,以命令尾指针为起点,并从相应的命令寄存器读取命令数据。读取命令数据后,控制模块将更新命令尾指针(命令头指针=(命令头指针+9)%36)。对于状态数据FIFO,它操作和命令数据FIFO是类似的,但它相应的状态头指针由控制模块更新,而状态尾指针由上层CPU更新。
AXI总线生成模块接收控制模块发送的命令信息和数据,并生成相应的AXI总线操作。对于写操作,AXI总线生成模块从命令接口获取写命令和写地址,从数据接口获取KI_BUF数据,在AXI总线上生成相应的信号,等待写操作完成,将AXI总线上的响应信号返回控制模块;对于读操作,AXI总线生成模块从命令接口获取读取命令和读取地址,然后在AXI总线上生成相应的信号。在等待数据返回后,它解析数据并返回到控制模块,并将AXI总线上的响应信号返回到控制模块。
对于哈希运算模块,哈希运算模块和控制模块的接口相对简单,主要是哈希数据输入接口和哈希结果输出接口。这两个接口也使用vld和rdy信号进行握手。在本模块中,以CRC-32算法作为哈希函数。在这个模块中,136位数据作为输入,32位数据作为输出(crc_out)。在控制模块中,根据哈希算法类型(通过寄存器配置指定算法类型)截取适当的长度作为哈希运算的结果(例如,hash_type=0,选择crc_out [20:0]作为哈希运算的结果)。
以上的例子仅旨在说明本发明的技术概念和特征,并旨在使那些熟悉本技术的人能够理解本发明的内容并相应地实施它。它们并不限制本发明的保护范围。根据本发明精神做出的任何同等变更或修改应包括在本发明的保护范围内。
Claims (13)
1.一种用来管理键值信息的数据结构,其特征在于:数据结构名为KI_BUF,数据结构KI_BUF由键值信息域、偏移地址域、值数据长度域、键值信息长度域、命名空间标识符域和值数据的起始物理块地址域这六个域构成;在数据结构KI_BUF中将键值信息与物理块地址进行绑定,物理块地址标识了数据在存储介质中存储的起始地址,结合KI_BUF中的值数据长度信息,通过访问存储介质中的值数据,从而将键值协议中的对于键值对的管理转换为对于KI_BUF的管理。
2.一种使用哈希算法来管理数据结构的方法,其特征在于:引入哈希算法来对KI_BUF数据进行管理,将完整键值信息作为哈希算法的输入,利用哈希算法的输出来索引对应的KI_BUF,迅速定位到包含有完整键值信息的KI_BUF。
3.根据权利要求2所述的一种使用哈希算法来管理数据结构的方法,其特征在于:当发生哈希冲突时,通过遍历链表,找到与完整键值信息匹配的KI_BUF数据;或者当发生哈希冲突时,将新增的KI_BUF数据添加到链表上。
4.一种基于哈希算法实现键值协议的硬件加速器,其特征在于:硬件加速器名为KV_ENGINE,包括寄存器配置模块、控制模块、AXI总线生成模块和哈希运算模块,硬件加速器自动完成对于完整键值信息的哈希运算,接收上位CPU发送的命令数据并自动执行相应的操作,当操作完成之后,硬件加速器将生成对应的状态数据提供给上位CPU查询。
5.根据权利要求4所述的一种基于哈希算法实现键值协议的硬件加速器,其特征在于:寄存器配置模块接收主机发生的命令数据,控制模块将命令数据从寄存器配置模块中读取出来;
控制模块解析命令数据,获取对应的完整键值信息,控制模块将完整键值信息送往哈希运算模块进行哈希运算;
控制模块将读取命令和对应的物理地址发送给AXI总线生成模块,让AXI总线生成模块去访问系统缓存获取对应的KI_BUF数据;
控制模块完成对KI_BUF数据的查找、添加、删除操作之后即可生成对应的状态数据并写入到寄存器配置模块,主机访问寄存器配置模块获取对应的状态数据。
6.根据权利要求4所述的一种基于哈希算法实现键值协议的硬件加速器,其特征在于:硬件加速器KV_ENGINE支持多个操作命令,即键值信息读取、键值信息添加、键值信息删除、键值信息列出、键值信息哈希运算和KI_BUF写入命令,KV_ENGINE使用这些命令来实现对于KI_BUF数据管理,从而实现对于键值协议的支持。
7.根据权利要求6所述的一种基于哈希算法实现键值协议的硬件加速器,其特征在于:键值信息读取操作:KV_ENGINE通过命令中包含的完整键值信息自动执行哈希运算,并根据哈希运算的结果被索引到相应的KI_BUF链表;遍历整个KI_ BUF链表,并匹配到完整键值信息;根据匹配和比较的结果自动生成相应的状态信息,并返回给上位CPU。
8.根据权利要求6所述的一种基于哈希算法实现键值协议的硬件加速器,其特征在于:键值信息添加操作:KV_ENGINE通过命令中包含的完整键值信息自动执行哈希运算,并根据哈希运算的结果索引到相应的KI_BUF链表;遍历整个KI_BUF链表,并匹配到完整键值信息;根据匹配的结果和命令中的存储选项信息来判断是重写还是添加;根据操作结果生成相应的状态信息,并将其返回给上位CPU。
9.根据权利要求6所述的一种基于哈希算法实现键值协议的硬件加速器,其特征在于:键值信息删除操作:KV_ENGINE通过命令中包含的完整键值信息自动执行哈希运算,并根据哈希运算的结果被索引到相应的KI_BUF链表;遍历整个KI_BUF链表,并匹配到完整键值信息;根据匹配和比较的结果来判断是否删除相应的KI_BUF;根据操作结果生成相应的状态信息,并将其返回给上位CPU。
10.根据权利要求6所述的一种基于哈希算法实现键值协议的硬件加速器,其特征在于:键值信息列出操作:KV_ENGINE根据命令中包含的完整键值信息自动进行哈希运算,并根据哈希运算的结果索引到对应的KI_BUF链表;遍历整个KI_BUF链表并匹配比对完整键值信息;将完整键值信息放到命令中指定的缓冲区;然后KV_ENGINE将会从头部区域的第一个KI_BUF开始,遍历访问整个KI_BUF数据池,读取KI_BUF中的完整键值信息,并按照要求的格式放到命令指定的缓冲区中;等到指定的缓冲区被填满或者整个KI_BUF数据池遍历完成,键值信息列出操作完成并生成状态信息返回给上位CPU。
11.根据权利要求10所述的一种基于哈希算法实现键值协议的硬件加速器,其特征在于:匹配比对完整键值信息:如果找到匹配的KI_BUF,则将对应的完整键值信息读取出来并按照要求的格式放到命令中指定的缓存区;如果没有找到匹配的KI_BUF,则读取搜索结束时对应的KI_BUF,将其完整键值信息按照要求的格式放到命令中指定的缓冲区。
12.根据权利要求6所述的一种基于哈希算法实现键值协议的硬件加速器,其特征在于:键值信息哈希运算操作:KV_ENGINE通过命令中包含的完整键值信息自动执行哈希运算,并根据哈希运算的结果生成相应的状态信息;相应的状态信息被返回给上位CPU。
13.根据权利要求6所述的一种基于哈希算法实现键值协议的硬件加速器,其特征在于:KI_BUF写入命令:KV_ENGINE根据命令中包含的偏移地址信息自动访问相应的KI_BUF,并将命令中的物理块地址信息写入KI_BUF;生成相应的状态信息并返回给上位CPU。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310284589.1A CN116301636B (zh) | 2023-03-22 | 2023-03-22 | 一种管理数据结构的方法以及基于哈希算法的硬件加速器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310284589.1A CN116301636B (zh) | 2023-03-22 | 2023-03-22 | 一种管理数据结构的方法以及基于哈希算法的硬件加速器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116301636A true CN116301636A (zh) | 2023-06-23 |
CN116301636B CN116301636B (zh) | 2023-12-22 |
Family
ID=86822006
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310284589.1A Active CN116301636B (zh) | 2023-03-22 | 2023-03-22 | 一种管理数据结构的方法以及基于哈希算法的硬件加速器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116301636B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130042060A1 (en) * | 2011-08-08 | 2013-02-14 | Takao Marukame | Memory system including key-value store |
CN108614671A (zh) * | 2016-12-12 | 2018-10-02 | 北京忆恒创源科技有限公司 | 基于命名空间的键-数据访问方法与固态存储设备 |
US20190258729A1 (en) * | 2018-02-22 | 2019-08-22 | Samsung Electronics Co., Ltd. | Key-value storage device and operating method thereof |
CN112000845A (zh) * | 2020-08-19 | 2020-11-27 | 东北大学 | 一种基于gpu加速的超空间哈希索引方法 |
US20210064582A1 (en) * | 2019-08-27 | 2021-03-04 | Vmware, Inc. | Organize chunk store to preserve locality of hash values and reference counts for deduplication |
CN114265958A (zh) * | 2022-03-01 | 2022-04-01 | 南京得瑞芯存科技有限公司 | Kv ssd的映射管理方法、装置及存储介质 |
-
2023
- 2023-03-22 CN CN202310284589.1A patent/CN116301636B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130042060A1 (en) * | 2011-08-08 | 2013-02-14 | Takao Marukame | Memory system including key-value store |
CN108614671A (zh) * | 2016-12-12 | 2018-10-02 | 北京忆恒创源科技有限公司 | 基于命名空间的键-数据访问方法与固态存储设备 |
US20190258729A1 (en) * | 2018-02-22 | 2019-08-22 | Samsung Electronics Co., Ltd. | Key-value storage device and operating method thereof |
US20210064582A1 (en) * | 2019-08-27 | 2021-03-04 | Vmware, Inc. | Organize chunk store to preserve locality of hash values and reference counts for deduplication |
CN112000845A (zh) * | 2020-08-19 | 2020-11-27 | 东北大学 | 一种基于gpu加速的超空间哈希索引方法 |
CN114265958A (zh) * | 2022-03-01 | 2022-04-01 | 南京得瑞芯存科技有限公司 | Kv ssd的映射管理方法、装置及存储介质 |
Non-Patent Citations (1)
Title |
---|
梅飞等: "SSDKV:一种SSD友好的键值对存储系统", 计算机工程与科学, no. 07 * |
Also Published As
Publication number | Publication date |
---|---|
CN116301636B (zh) | 2023-12-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9871727B2 (en) | Routing lookup method and device and method for constructing B-tree structure | |
US20200242021A1 (en) | Logical to physical mapping management using low-latency non-volatile memory | |
JP5698238B2 (ja) | データベース動作を意識するストライピング技術 | |
US6477616B1 (en) | Storage device, storage system, memory management method, recording medium, and computer data signal | |
US9298384B2 (en) | Method and device for storing data in a flash memory using address mapping for supporting various block sizes | |
US7475185B2 (en) | Nonvolatile memory system, nonvolatile memory device, memory controller, access device, and method for controlling nonvolatile memory device | |
KR100725390B1 (ko) | 수정 빈도를 고려하여 데이터를 비휘발성 캐쉬부에저장하는 장치 및 방법 | |
US20180349285A1 (en) | Managing Multiple Namespaces in a Non-Volatile Memory (NVM) | |
US11580162B2 (en) | Key value append | |
US11210020B2 (en) | Methods and systems for accessing a memory | |
JPS59114658A (ja) | デ−タ記憶空間の管理方法 | |
US20020184184A1 (en) | Virtual file system for dynamically-generated web pages | |
US8688948B2 (en) | Flexible memory controller for autonomous mapping of memory | |
CN113138945B (zh) | 一种数据缓存方法、装置、设备及介质 | |
US20200320015A1 (en) | Logical to physical data storage mapping | |
CN110737607A (zh) | 管理hmb内存的方法、装置、计算机设备及存储介质 | |
CN116301636B (zh) | 一种管理数据结构的方法以及基于哈希算法的硬件加速器 | |
CN111241090B (zh) | 存储系统中管理数据索引的方法和装置 | |
CN117573676A (zh) | 基于存储系统的地址处理方法、装置、存储系统及介质 | |
CN111026678B (zh) | 基于固态硬盘的缓存设计方法、装置及计算机设备 | |
TWI715408B (zh) | 快閃記憶體控制器、記憶體裝置以及存取快閃記憶體模組之方法 | |
CN110309081B (zh) | 基于压缩存储和地址映射表项的ftl读写数据页的方法 | |
CN116755625A (zh) | 一种数据处理方法、装置、设备及可读存储介质 | |
WO2023082902A1 (zh) | 索引的创建方法、计算设备及存储介质 | |
CN111625198A (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 | ||
PE01 | Entry into force of the registration of the contract for pledge of patent right |
Denomination of invention: A method for managing data structures and a hardware accelerator based on hash algorithm Granted publication date: 20231222 Pledgee: Industrial and Commercial Bank of China Limited Nanjing Jiangbei New Area Branch Pledgor: Pengti storage technology (Nanjing) Co.,Ltd. Registration number: Y2024980002260 |
|
PE01 | Entry into force of the registration of the contract for pledge of patent right |