面向NVM键值数据库的NUMA感知优化系统及方法

文档序号:37422922发布日期:2024-03-25 19:10阅读:17来源:国知局
面向NVM键值数据库的NUMA感知优化系统及方法

本发明涉及非易失性内存领域、numa感知领域、数据库领域、数据结构设计领域和算法设计领域,具体地,涉及一种面向nvm键值数据库的numa感知优化系统及方法。


背景技术:

1、键值数据库是一种非关系型数据库,相对于关系型数据库,键值数据库使用键值方法存储、检索和管理关联数据。传统键值数据库基于块存储设备设计,针对块存储设备的特点,提出了诸如日志结构合并树(log structured merge tree,lsm)等针对块设备优化的数据结构,将删除操作转换为另一种类型的写操作和原始的写操作写入到同一批操作集合中,利用块设备顺序写入性能较高的特性批量追加到块设备存储文件尾部来提高性能。但由于块存储设备较低的i/o性能,基于块存储设备的键值数据库始终受限于存储设备的性能瓶颈。

2、非易失性内存(non-volatile memory,nvm)是一种介于dram和块存储设备之间的新型存储介质,nvm提供了接近dram的读写速度同时具有块设备的持久化特性,同时nvm相比dram具有更大的容量,因此nvm的出现为提升键值数据库性能提供了一种新的思路。由于nvm相对传统块设备例如hdd、ssd等具有字节寻址等新的特性,键值数据库需要针对这些特点设计新的数据结构来利用nvm硬件,相关领域也有一些工作被提出,例如viper、flatstore、matrixkv等。

3、尽管nvm具有一些新的特性,但仍然在读写带宽、远端访问、并发场景下存在一些不足。首先在nvm与dram带宽对比上,nvm相对于dram仍然存在读写性能上的差距,在读写带宽上,nvm的顺序读、写带宽相对于dram降低63%、78%,nvm的随机读、写带宽相对于dram降低85%、95%。其次,nvm在非一致性内存访问(non-uniform memory access,numa)架构下存在远端访问性能下降的问题,numa架构对于nvm的访问分为两种访问,访问线程所在节点nvm称为“本地访问”,访问其他节点称为“远端访问”,在存在两个节点的情况下,nvm本地访问读写带宽是nvm远端访问读写带宽的1.2-1.79倍和1.68-2.53倍。最后,nvm存在并发读写性能下降的问题,对于单节点的nvm,并发线程数达到4-6时能够充分利用nvm写带宽,随着并发数量增加,写性能出现下降,读性能最佳并发数相对写性能更高。

4、而当前随着数据量的爆发式增长,对于数据库容量扩充的需求使得基于nvm的键值数据库不可避免的需要在服务器numa架构的多节点上部署nvm来增加数据库容量,这就需要考虑numa架构中nvm的性能问题。目前已有一些工作提出了实现了numa感知的nvm的键值数据库方案,例如listdb、pmdb等。

5、这些方案的解决路径可以分为两类:第一类是通过代理线程方式将所有远端访问转换为本地访问,第二类是通过设计numa感知的数据结构去维护一个全局数据结构来消除远端访问带来的影响。但目前这些解决方案均存在一定不足,首先,使用代理方式的方案只使用一个线程来做请求的代理处理,面对负载较高的场景,单线程方案的通信延迟开销较大,大量请求阻塞导致性能下降。其次,使用numa感知数据结构在涉及到纯远端访问时仍然不能避免性能下降问题。

6、除此以外,两种设计方案均没有考虑到高并发访问场景对于nvm性能的影响,没有对nvm的并发程度进行控制。

7、在公开号为cn111262753a的中国专利文献中,公开了一种numa节点个数自动配置方法、系统、终端及存储介质,包括:利用lscpu命令获取当前测试环境的cpu信息;通过grep命令从所述cpu信息中提取numa node个数;通过脚本将所述numa node个数赋值给运行参数group_count,并根据所述数group_count执行spec jbb2015测试。但该专利文献仅避免了测试人员手动配置的繁琐过程,仍无法解决上述问题。


技术实现思路

1、针对现有技术中的缺陷,本发明的目的是提供一种面向nvm键值数据库的numa感知优化系统及方法。

2、根据本发明提供的一种面向nvm键值数据库的numa感知优化系统,包括:

3、代理模块:为numa各节点创建代理线程池;所述线程池通过代理方式将从各节点发送的对本地节点的数据操作请求转换为本地访问;

4、监控模块:监控系统的运行状态并采集运行数据;所述运行数据包括代理线程层级的运行数据、代理节点层级的运行数据和系统层级的运行数据;

5、调度模块:对代理模块中的代理线程进行调度。

6、优选的,所述代理模块包括基于一致性哈希算法实现的请求分片器,将请求转发到对应的numa节点,代理线程方式将请求转为本地执行的节点代理。

7、优选的,所述监控模块包括执行监控逻辑的监控线程,周期采集数据;保存代理线程状态的数据结构delegateworkerdata类,保存节点状态的数据结构nodestatus类,保存系统状态的数据结构dbstatus类。

8、优选的,基于delegateworkerdata类、nodestatus类和dbstatus类对系统中的运行数据进行记录并提供采样接口;监控模块调用采样接口完成数据采集。

9、优选的,所述调度模块包括控制代理线程开关机制和调度策略;所述调度策略在系统负载发生变化时调整节点代理线程数量和节点开关,平衡系统性能和资源开销;所述调度策略包括负载趋势预测策略、队列水位线策略和线程自旋等待策略。

10、优选的,所述负载趋势预测策略包括统计前n个周期的系统监控数据s0,s1,...,sn,关注其中的指标t,t=t0,t1,...,tn,计算平均指标tavg=avg(t0,t1,t2,...,tn),计算历史周期内平均指标相对于第一个周期的指标的变化幅度tspeedup=(tavg-t0)/t0,得到过往周期内关注指标的变化趋势;若tspeedup为负数,则该指标处于下降趋势,若tspeedup为正数,则该指标处于上升趋势;基于变化幅度|tspeedup|的值动态调整节点的代理线程数量;

11、所述队列水位线策略包括将队列划出分高度不同的水位线完成对于节点线程的调整;在每一个周期开始时,基于策略检查当前节点的消息队列剩余消息数量;所述消息队列包括最高水位线、次高水位线、次低水位线和最低水位线;当节点中所有队列剩余请求数低于次低水位线时,关闭一个线程;当节点中所有队列剩余请求数低于最低水位线时,关闭两个线程;当节点中所有队列剩余请求数位于最高水位线和最低水位线之间时,系统不做调整;当节点中所有队列剩余请求数位于次高水位线和最高水位线中间时,增加一个线程;当节点中所有队列剩余请求数高于最高水位线时,增加两个线程;

12、所述线程自旋等待策略包括在发送到代理线程前,客户端计算自旋时间;所述自旋时间由基准键值大小和请求中键值大小的比例得出,将基准自旋时间按照该比例缩放得到请求的自旋时间;代理线程循环内部判断当前是否超时,若超时,则关闭线程,否则取请求执行;在取出请求后根据请求内的自旋时间更新停止时间,判断当前消息队列是否已满,若已满,则唤醒一个新线程。

13、优选的,所述节点代理包括操作请求发送到指定节点时,对应节点代理接收请求并放入缓冲消息队列,代理线程取请求并做操作处理;所述节点代理包括代理线程池、环形缓冲区和代理线程。

14、优选的,所述代理线程池包括在系统运行过程中对每个节点维护一组代理线程,在接收到指定节点的请求后,选择该节点对应的一组代理线程并基于请求分离策略分流特殊类型请求绕过代理;对于经过代理的请求,随机选择一个代理线程将该请求发送到代理线程绑定的环形缓冲区中;所述环形缓冲区包括环形缓冲区采用数组完成环形队列,并使用基于自旋锁的轮询方式作为环形缓冲区与代理线程的通信机制;所述代理线程包括代理线程循环从缓冲区中取出请求并解析请求做本地代理操作。

15、优选的,所述代理线程池的分离策略包括读写分离策略和键值大小分离策略;当请求类型为读操作时,请求将绕过代理直接操作下层数据库引擎和nvm部分;当请求类型为写操作时,通过键值大小分离策略将部分请求经过代理方式处理;在写操作中,小于预设键值对的请求绕过代理直接操作下层数据库引擎和nvm部分处理,大于预设键值对的请求经代理方式处理。

16、根据本发明提供的一种面向nvm键值数据库的numa感知优化方法,包括:

17、步骤s1:为numa各节点创建代理线程池;所述线程池通过代理方式将从各节点发送的对本地节点的数据操作请求转换为本地访问;

18、步骤s2:监控系统的运行状态并采集运行数据;所述运行数据包括代理线程层级的运行数据、代理节点层级的运行数据和系统层级的运行数据;

19、步骤s3:对代理模块中的代理线程进行调度。

20、优选的,所述代理模块包括基于一致性哈希算法实现的请求分片器,将请求转发到对应的numa节点,代理线程方式将请求转为本地执行的节点代理。

21、优选的,所述监控模块包括执行监控逻辑的监控线程,周期采集数据;保存代理线程状态的数据结构delegateworkerdata类,保存节点状态的数据结构nodestatus类,保存系统状态的数据结构dbstatus类。

22、优选的,基于delegateworkerdata类、nodestatus类和dbstatus类对系统中的运行数据进行记录并提供采样接口;监控模块调用采样接口完成数据采集。

23、优选的,所述调度模块包括控制代理线程开关机制和调度策略;所述调度策略在系统负载发生变化时调整节点代理线程数量和节点开关,平衡系统性能和资源开销;所述调度策略包括负载趋势预测策略、队列水位线策略和线程自旋等待策略。

24、优选的,所述负载趋势预测策略包括统计前n个周期的系统监控数据s0,s1,...,sn,关注其中的指标t,t=t0,t1,...,tn,计算平均指标tavg=avg(t0,t1,t2,...,tn),计算历史周期内平均指标相对于第一个周期的指标的变化幅度tspeedup=(tavg-t0)/t0,得到过往周期内关注指标的变化趋势;若tspeedup为负数,则该指标处于下降趋势,若tspeedup为正数,则该指标处于上升趋势;基于变化幅度|tspeedup|的值动态调整节点的代理线程数量;

25、所述队列水位线策略包括将队列划出分高度不同的水位线完成对于节点线程的调整;在每一个周期开始时,基于策略检查当前节点的消息队列剩余消息数量;所述消息队列包括最高水位线、次高水位线、次低水位线和最低水位线;当节点中所有队列剩余请求数低于次低水位线时,关闭一个线程;当节点中所有队列剩余请求数低于最低水位线时,关闭两个线程;当节点中所有队列剩余请求数位于最高水位线和最低水位线之间时,系统不做调整;当节点中所有队列剩余请求数位于次高水位线和最高水位线中间时,增加一个线程;当节点中所有队列剩余请求数高于最高水位线时,增加两个线程;

26、所述线程自旋等待策略包括在发送到代理线程前,客户端计算自旋时间;所述自旋时间由基准键值大小和请求中键值大小的比例得出,将基准自旋时间按照该比例缩放得到请求的自旋时间;代理线程循环内部判断当前是否超时,若超时,则关闭线程,否则取请求执行;在取出请求后根据请求内的自旋时间更新停止时间,判断当前消息队列是否已满,若已满,则唤醒一个新线程。

27、优选的,所述节点代理包括操作请求发送到指定节点时,对应节点代理接收请求并放入缓冲消息队列,代理线程取请求并做操作处理;所述节点代理包括代理线程池、环形缓冲区和代理线程。

28、优选的,所述代理线程池包括在系统运行过程中对每个节点维护一组代理线程,在接收到指定节点的请求后,选择该节点对应的一组代理线程并基于请求分离策略分流特殊类型请求绕过代理;对于经过代理的请求,随机选择一个代理线程将该请求发送到代理线程绑定的环形缓冲区中;所述环形缓冲区包括环形缓冲区采用数组完成环形队列,并使用基于自旋锁的轮询方式作为环形缓冲区与代理线程的通信机制;所述代理线程包括代理线程循环从缓冲区中取出请求并解析请求做本地代理操作。

29、优选的,所述代理线程池的分离策略包括读写分离策略和键值大小分离策略;当请求类型为读操作时,请求将绕过代理直接操作下层数据库引擎和nvm部分;当请求类型为写操作时,通过键值大小分离策略将部分请求经过代理方式处理;在写操作中,小于预设键值对的请求绕过代理直接操作下层数据库引擎和nvm部分处理,大于预设键值对的请求经代理方式处理。

30、与现有技术相比,本发明具有如下的有益效果:

31、1、本发明提出了节点多代理方式,可将任意节点对于本地nvm访问请求转换通过一定数量的代理线程做本地访问,解决了numa架构下nvm数据库跨端访问和高并发访问的性能下降问题。

32、2、本发明通过提出针对代理线程与系统负载关系的调度策略,解决了代理线程系统资源消耗过高的问题,使得系统能够平衡性能与资源开销。

33、3、本发明通过提出针对不同类型请求以及不同位置请求的分离策略,解决了代理过程中部分特殊类型请求开销过大的问题,提升了系统的可用性。

34、本发明的其他有益效果,将在具体实施方式中通过具体技术特征和技术方案的介绍来阐述,本领域技术人员通过这些技术特征和技术方案的介绍,应能理解所述技术特征和技术方案带来的有益技术效果。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1