一种基于LSM树的持久化KV存储的I/O调度方法和系统
背景技术:
::0、技术背景1、随着互联网、大数据和云计算技术的快速进步,传统关系型数据库在处理大量、高速、非结构化数据时面临性能限制。应对此挑战,持久化kv存储(如rocksdb、leveldb和cassandra)通过其高效的键值(key-value,简称kv)对模型,显著优化了数据读写效率。此外,新型存储设备的引进,尤其是nvme ssd,相较于传统hdd和旧接口的satassd,展现了显著的性能提升。这得益于nvme ssd的出色并行处理能力、更高吞吐量及低延迟,显著提升了持久化kv存储系统的性能,不仅增强了数据处理效率,也扩展了其应用领域。因此,持久化kv存储与新型存储硬件技术的融合,为满足日益增长的数据密集型应用的性能和可靠性需求,提供了强有力的支持。2、随着新型存储设备性能的不断进步,持久化kv存储系统面临的性能开销挑战变得日益明显,成为限制数据密集型环境性能提升的主要瓶颈。为应对此挑战,迫切需要针对持久化kv存储系统的特性,在存储架构层面进行精细化的优化与调整。这一过程旨在充分利用新型存储硬件如nvme ssd的高性能特点,以优化数据处理速度和提高系统的整体可靠性,从而显著提升存储系统的性能效率。这要求深入分析持久化kv存储系统与存储硬件之间的交互机制,制定出既能满足高效数据访问需求,又能保证数据完整性和系统稳定性的策略。3、持久化kv存储的性能提升,源自lsm树(log-structured merge tree)的引入,根据lsm树的设计,i/o请求分成前台i/o请求和后台i/o请求。前台i/o请求,例如读、写操作;后台i/o请求,例如,刷新和压缩操作。由于前台i/o和后台i/o之间存在依赖关系,且前后台i/o请求共同占用存储堆栈,造成存储带宽的争用,进而造成i/o请求延迟的增加、吞吐量的下降。因此,需要对前后台i/o进行更好的优先级划分,在此基础上,对前后台i/o进行更好的调度,以减少系统的延迟。目前,持久化键值存储系统采用静态优先级划分i/o请求,在密集型读写场景下,缺乏对i/o请求关系的实时分析以及对i/o优先级的动态调整,因此,针对存储堆栈的调度策略,迫切需要探索新的优化方法,以便更好地动态调整前后台i/o请求,以适应持续进化的硬件技术和数据处理需求的迅速变化,从而保证存储系统性能的持续提升。技术实现思路1、本发明提供了一种基于lsm树的持久化kv存储的i/o调度方法,以达到有效的减少持久化kv存储的系统延迟,增大持久化kv存储的吞吐量,降低i/o优先级反转问题的发生,优化持久化kv存储性能开销的效果。2、本发明采用的技术方案如下:3、一种基于lsm树的持久化kv存储的i/o调度方法,包括以下步骤:4、在以内核旁路(kernel bypass)构建的操作系统存储堆栈的基础上,构造多层调度模型,包括第一层i/o依赖探测层、第二层i/o调度层和第三层i/o异步化组装层;5、第一层i/o依赖探测层,在i/o请求池中区分出前后台i/o请求,通过对密集型读写类型进行区分,分析前后台i/o请求的种类和内部之间的联系,确定前后台i/o请求之间的依赖关系,根据依赖关系动态调整前后台i/o请求的优先级;6、第二层i/o调度层:将不同优先级的i/o请求根据不同的依赖关系,分配到多核处理,且将具有依赖关系的i/o请求分配到同一个核上处理;7、第三层i/o异步化组装层:确保i/o请求在存储堆栈的各层之间(文件系统层和块层)按优先级高低有效的传播,按照高优先级i/o请求在前,低优先级i/o请求在后的优先级次序进行异步化i/o队列的组装,最后将i/o队列发送到存储硬件。8、进一步地,所述第一层i/o依赖探测层采用以下步骤探测前后台i/o请求之间形成的依赖关系:9、获取前后台i/o请求的信息,包括前台请求的类型和后台请求的类型;10、根据内存和硬盘资源动态变化情况和i/o请求的具体种类,判断i/o请求之间是否存在依赖关系。11、进一步地,所述根据内存和硬盘资源动态变化情况和i/o请求的具体种类,判断i/o请求之间是否存在依赖关系,包括:12、通过i/o请求之间对资源的占用情况判断i/o请求之间的依赖关系;13、对i/o请求的元数据进行解析,通过i/o请求执行的顺序判断i/o请求之间的依赖关系。14、进一步地,所述根据依赖关系动态调整前后台i/o请求的优先级,包括:15、通过解析i/o请求的元数据,获取前台i/o请求和后台i/o请求以及i/o带宽占用信息,并将多级压缩请求的信息存储在压缩关系表中;16、通过监控一段时间内的读写i/o请求的数量,确定当前i/o类型是读密集型还是写密集型:17、如果是写密集型,首先查询硬盘中l0层级的sstable表的写入情况,如果l0层级的sstable表中数据已满且l0~l1层正在进行压缩时,提升该l0~l1层级的压缩请求的优先级与写入请求的优先级相同,同时根据在压缩关系表中查询到的压缩关系,停止与l0~l1层压缩有关的级联压缩,待l0~l1层压缩完成时,再继续执行级联压缩操作;当查询到硬盘中l0层级的sstables表未写满时,根据i/o请求的带宽流量的信息,由于ln至ln+1层级的压缩占用大量的带宽,因此提升ln至ln+1层级的压缩,将其调整到与写入请求相同的优先级;18、如果是读密集型,当存在读取i/o请求时,查询需读取数据的位置,如果数据存在于内存中,则直接对数据进行读取,无需调整i/o请求优先级;如果数据存在于硬盘中,则提升该数据所在的压缩操作的优先级,调整其与读取操作的优先级相同。19、进一步地,在动态调整前后台i/o请求的优先级之前,设定初始化的i/o请求优先级为:write/read>flush>l0~l1低级别压缩>ln~ln+1高级别压缩。20、进一步地,在所述第二层i/o调度层中,在确定i/o请求的依赖关系以及对i/o请求进行优先级的动态划分后,根据i/o请求之间的依赖关系,将依赖关系紧密的i/o请求划分到同一个核上进行处理,通过对i/o请求进行多核处理增大持久化kv存储的吞吐量,同时在i/o请求上打上标记tag,以在存储堆栈层之间的i/o请求传播时使用。21、进一步地,在所述第三层i/o异步化组装层中,创建i/o请求控制器,在i/o请求通过存储堆栈中文件系统层和块层时,对i/o请求的tag信息进行分析,将优先级高的i/o请求优先通过存储堆栈;并且,按照优先级的高低进行i/o队列的组装,高优先级i/o请求在前,低优先级i/o请求在后,将组装好的i/o队列发送到数据通路,最后到达存储设备。22、一种基于lsm树的持久化kv存储的i/o调度系统,其包括在操作系统的存储堆栈基础上构造的多层调度模型,所述多层调度模型包括第一层i/o依赖探测层、第二层i/o调度层和第三层i/o异步化组装层;所述第一层i/o依赖探测层探测前后台i/o请求之间形成的依赖关系,根据依赖关系动态调整前后台i/o请求的优先级;所述第二层i/o调度层将不同优先级的i/o请求分配到多核处理,且将具有依赖关系的i/o请求分配到同一个核上处理;所述第三层i/o异步化组装层确保i/o请求在存储堆栈的各层之间按优先级高低有效地传播,将i/o请求按照优先级的高低进行异步化i/o队列的组装,并将i/o队列发送到存储硬件。23、本发明的有益效果如下:24、基于上述本发明的方案,第一层i/o依赖探测层,通过分析前后台i/o请求的种类和产生关系,确定前后台i/o请求之间形成的依赖关系,根据依赖关系动态调整前后台i/o请求的优先级;第二层i/o调度层:将不同优先级的i/o请求分配到多核处理,且将具有依赖关系的i/o请求分配到同一个核上处理;第三层i/o异步化组装层:确保i/o请求在存储堆栈的各层之间按优先级高低有效的传播,进行异步化的队列组装;采用多层调度的方法,可以达到有效的减少持久化kv存储的系统延迟,增大持久化kv存储的吞吐量,降低i/o优先级反转问题的发生,优化持久化kv存储性能开销的效果。当前第1页12当前第1页12
文档序号 :
【 40048703 】
技术研发人员:朱春晖,陶秋铭
技术所有人:中国科学院软件研究所
备 注:该技术已申请专利,仅供学习研究,如用于商业用途,请联系技术所有人。
声 明 :此信息收集于网络,如果你是此专利的发明人不想本网站收录此信息请联系我们,我们会在第一时间删除
技术研发人员:朱春晖,陶秋铭
技术所有人:中国科学院软件研究所
备 注:该技术已申请专利,仅供学习研究,如用于商业用途,请联系技术所有人。
声 明 :此信息收集于网络,如果你是此专利的发明人不想本网站收录此信息请联系我们,我们会在第一时间删除
