一种分离式键值对存储系统
- 国知局
- 2024-08-30 14:54:04
本发明属于信息存储相关,更具体地,涉及一种分离式键值对存储系统。
背景技术:
1、在新型数据中心架构中将存储资源与计算资源解耦,通过高速网络进行互联,可以应对传统架构的存储服务器中存储资源扩展能力不足、利用率不高、性能孱弱的问题。
2、然而,通过网络进行资源交互和数据传输的场景对数据中心的基础设施提出更高要求,其中,网络带宽是限制系统性能和拓展性的关键因素,由于所有i/o请求及其响应都会通过网络,这样大量的数据往返传输对于网络带宽带来了巨大的压力,从而限制传输速率。
3、因此,如何降低分离式键值对存储系统传输数据的网络流量开销,是目前亟待解决的技术问题。
技术实现思路
1、针对现有技术的以上缺陷或改进需求,本发明提供了一种分离式键值对存储系统,其目的在于降低分离式键值对存储系统传输数据的网络流量开销,提供传输速率。
2、为实现上述目的,本发明提供了一种分离式键值对存储系统,包括主机端和存储端,所述主机端通过rdma网络远程访问所述存储端;所述主机端具有发起远程访问的驱动nvme-of initiator,所述存储端具有接收远程访问的驱动nvme-of target以及用于存储数据的固态硬盘,所述nvme-of target设置有过滤器tfilter;
3、所述主机端用于接收用户的读请求并从主机端寻找目标键值对,若命中,则反馈返回给用户,若未命中,则对nvme读指令进行修改,将键值对偏移值的高32和低32位分别填入nvme读指令的第2双字和第3个双字并修改nvme读指令的操作码,向所述存储端发送修改后的nvme读指令;
4、所述存储端用于接收所述主机端发送的所述nvme读指令并解析用于定位目标键值对的tfilter元数据,从所述nvme-of target的分散聚集单元sge中寻找目标键值对,并利用tfilter根据tfilter元数据修改具有目标键值对的sge的起始地址和长度作为待发送的sge,过滤目标键值对之外的键值对,使待发送的sge中仅包含目标键值对后发送给所述主机端;
5、所述主机端还用于接收所述存储端发送的所述sge,获取目标键值对并返回给用户。
6、进一步地,从所述nvme-of target的分散聚集单元sge中寻找目标键值对,并利用tfilter根据tfilter元数据修改具有目标键值对的sge的起始地址和长度作为待发送的sge,包括:
7、当目标键值对均存在于同一个sge中,则仅修改对应的sge的起始地址和长度,作为待发送sge;
8、当键值对跨越多个sge,则修改所跨越的每个sge的起始地址和长度,作为待发送sge。
9、进一步地,所述系统还具有两级缓存结构tcache,分别为位于所述主机端的缓存kv cache和位于所述存储端的缓存block cache;
10、所述主机端用于:
11、在写入键值对期间,将待存入存储端的键值对同步写入所述kv cache;
12、在读取键值对期间,先在所述kv cache中寻找目标键值对,若命中,则反馈返回给用户,若未命中,则向所述存储端发送修改后的nvme读指令;
13、所述存储端用于:根据nvme读指令先在block cache中寻找具有目标键值对的目标数据块,若命中,则将目标数据块存入sge后再将sge中的目标键值对发送给所述主机端,若未命中,则从所述硬盘中将目标数据块提取至block cache,并将目标数据块存入sge后再将sge中的目标键值对发送给所述主机端。
14、进一步地,所述kv cache包含第一哈希表索引、多个第一lru链表和与第一lru链表一一对应的多个大页内存缓冲区,所述第一哈希表索引用于根据键值对大小定位第一lru链表中的键值对,不同的第一lru链表用于存储不同大小的键值对;
15、所述block cache包含第二哈希表索引、第二lru链表和dma缓冲区,所述第二lru链表用于存储指向dma缓冲区的数据块指针,所述第二哈希表索引用于根据数据块的slab号和块号定位第二lru链表的数据块指针;
16、所述将新的键值对写入所述kv cache,包括:将键值对存入用于存储相同大小键值对的第一lru链表;
17、所述在所述kv cache中寻找目标键值对,包括:根据第一哈希表索引判断kvcache中是否存在目标键值对,若存在,则从对应的第一lru链表中读取所述目标键值对,若不存在,则向所述存储端发送修改后的nvme读指令;
18、所述在block cache中寻找具有目标键值对的目标数据块,包括:根据第二哈希表索引判断block cache中是否存在目标数据块,若存在,则根据第二哈希表索引定位数据块指针并提取数据块指针指向的目标数据块,若不存在,则从所述固态硬盘中提取所述目标数据块至所述dma缓冲区、并从目标数据块中提取目标键值对发送给所述主机端。
19、进一步地,所述主机端还包括缓冲队列,缓冲队列具有多个缓冲空间tbuffer,所述主机端还用于写入键值对,写入键值对的过程包括:
20、将键值对写入队列头的tbuffer,当tbuffer写满后触发异步写i/o请求;
21、将已满的tbuffer提交下刷后出队,队列头指针指向下一个tbuffer用于后续写入;
22、将键值对写入新的队列头指针指向的tbuffer中;
23、等待tbuffer异步下刷的写i/o完成后,将完成数据下刷的tbuffer重新加入到队列的尾部以服务后续写入。
24、进一步地,所述主机端用于对提交下刷的tbuffer进行攒批下刷,当达到最大下刷时间间隔后,对所提交下刷的tbuffer的数据下刷至所述存储端。
25、进一步地,所述主机端包含多个缓冲队列,每个缓冲队列中的tbuffer用于存储不同大小的键值对,所述主机端用于根据键值对的大小选择用于存储相同大小的tbuffer写入键值对。
26、进一步地,所述主机端还分配有多个队列对qp,每个队列对包含一个请求发送队列sq和一个请求完成队列cq,所述主机端用于当向所述存储端发送i/o请求时,将i/o请求写入其中一个qp中的sq中,并通过前台线程轮询cq获取处理结果。
27、进一步地,多个队列对qp分为对应读请求的qp和对应写请求的qp,当执行读请求时,所述主机端申请使用所述读请求的qp,当执行写请求时,所述主机端申请使用所述写请求的qp。
28、进一步地,所述存储端还用于执行空间分配,所述空间分配过程包括:
29、创建新slab逻辑文件,分配一个长度为1数据块的初始数据段,并追加至元数据维护的保存数据段位置和长度信息的有序数组尾部;
30、当申请扩充文件大小时,为目标slab分配长度为已有数据段长度之和的新数据段,并更新其元数据;
31、获取第m个数据块时,所对应的数据段在元信息中的位置为其二进制位数k,同时在该数据段中的偏移offset通过下式计算得到:offset=m-2k-1。
32、总体而言,通过本发明所构思的以上技术方案与现有技术相比,本发明主要具有以下有益效果:
33、1.本发明提出的分离式键值对存储系统,分为主机端和存储端,当主机端需要从存储端读取键值对时,对传统的nvme读指令进行修改,将键值对偏移值存入nvme读指令中的空闲字段并发送给存储端,存储端可以对nvme读指令中进行解析,获取能够过滤出目标键值对的tfilter元数据,利用过滤器tfilter结合tfilter元数据对分散聚集单元sge的数据进行过滤,滤除目标键值对之外的键值对,仅保留目标键值对作为待发送的sge并将其通过网络发送给主机端。在上述系统中,由于在主机端对nvme读指令进行修改,并在存储端增加过滤器tfilter,可以过滤出原始sge中的目标键值对后再发送,相比于将整体sge全部传送给主机端再解析,大大减小了传输数据的网络流量开销,提供传输速率。
34、2.进一步地,通过设计两级缓存结构tcache,可以解决粗粒度缓存空间利用率低的问题设计细粒度划分的横跨主机端和存储端的两层式缓存,减少网络传输和i/o次数。
35、3.进一步地,通过设计tbuffer队列,可以解决写流程中脏页频繁下刷的问题在写入键值对时,通过tbuffer队列来接收写请求,避免每更新一个键值对就下刷带来的冗余网络流量开销。
本文地址:https://www.jishuxx.com/zhuanli/20240830/284418.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。
下一篇
返回列表