基于动态伸缩内存池的流式数据异构计算内存优化方法

文档序号:28916227发布日期:2022-02-16 11:08阅读:129来源:国知局
基于动态伸缩内存池的流式数据异构计算内存优化方法

1.本发明的技术涉及同时具有cpu和gpu的异构计算领域,具体涉及一种基于动态伸缩内存池的流式数据异构计算内存优化方法。


背景技术:

2.随着通用计算gpu和cpu-gpu异构计算的发展,单台异构计算节点的cpu端的主机内存和gpu端的设备内存的物理容量不断增大。统一计算设备架构cuda的内存管理策略面向通用场景实现,还需要考虑gpu的超大规模并行的同步问题,提供的内存分配性能无法满足大规模流式数据在异构计算平台中的内存分配性能需求。因此,针对异构计算的内存优化对于提高异构计算平台的吞吐量,同时降低内存分配的延迟具有重要意义。
3.内存池技术相比于内存分配器具有更好的灵活性、可定制性和可针对特定应用实现更好的性能等优点。在基于异构计算的大规模流量数据处理场景,内存池技术可以针对当前场景的算法实现的内存分配特征,针对性地实现最优的内存管理策略。此外,内存池技术可以通过提前申请内存和延迟释放内存的方式,降低应用的内存分配延迟和系统的内存管理的性能开销,有利于提高异构计算平台的内存管理性能和大规模流式数据处理的吞吐量。
4.现有的内存池技术使用的伸缩策略只能是被动的和静态的,即通过预先设置静态的高水位参数和低水位参数,实现内存池的被动伸缩。但是,大规模流式数据的入流量是随时间变化的,可能出现突发的流量增加和流量下降,传统的被动伸缩策略无法预知未来的流量变化,可能出现内存池扩容不及时导致的内存分配延迟升高和内存池缩容不及时导致的系统内存利用率不高的问题。


技术实现要素:

5.本发明的目的是提供一种基于动态伸缩内存池的流式数据异构计算内存优化方法,所述的方法包括:
6.(a)根据用户自定义的配置文件创建全局唯一的cpu端主机内存池和gpu端设备内存池。配置项是内存池被动伸缩的必要配置,用于补充动态伸缩不使用的场景需求。
7.所述(a)的具体过程为:
8.(a-1)根据内存池的初始大小count和初始支持内存分配大小,通过乘法计算出初始化需要的总内存大小,然后根据总内存大小除以一个超级块的大小,得到初始化需要的超级块数量n;
9.(a-2)cpu端主机内存池调用n次cudamallochost接口,申请n个主机内存超级块,以大小为初始支持内存分配大小参数划分为多个主机内存块,插入内存池的管理链表中进行缓存;
10.(a-3)gpu端设备内存池调用n次cudamalloc接口,申请n个设备内存超级块,以大小为初始支持内存分配大小参数划分为多个设备内存块,插入内存池的管理链表中进行缓
存;
11.(b)运行基于udp协议的流式数据接收服务端,通过监听udp套接字进行流式数据接收。
12.(c)在每一次流式数据接收前,服务端向cpu端主机内存池申请分配一块主机锁定内存,作为缓冲区存放本次接收的流式数据。
13.所述(c)的具体过程为:
14.(c-1)根据线程标识符和内存分配大小,一对一将请求映射到一个子内存池,如果该子内存池不存在,则根据内存池的初始大小参数创建出子内存池;
15.(c-2)cpu端主机内存池尝试获取子内存池的互斥锁,查看内存管理链表是否有空闲内存块,如果没有则执行子内存池的被动扩容,其中被动扩容的大小会根据内存池的扩容因子计算出实际的扩容大小;
16.(c-3)确定有空闲内存块后,从子内存池的内存管理链表中取出一个内存块,分配给应用,最后释放互斥锁;
17.(d)将流式数据存放到主机锁定内存后,服务端向gpu端设备内存池申请分配一块设备内存。
18.所述(d)的具体过程为:
19.(d-1)根据cuda的流标识符和内存分配大小,一对一将请求映射到一个子内存池,如果该子内存池不存在,则根据内存池的初始大小参数创建出子内存池;
20.(d-2)gpu端设备内存池尝试获取子内存池的互斥锁,查看内存管理链表是否有空闲内存块,如果没有则执行子内存池的被动扩容,其中被动扩容的大小会根据内存池的扩容因子计算出实际的扩容大小;
21.(d-3)确定有空闲内存块后,从子内存池的内存管理链表中取出一个内存块,分配给应用,最后释放互斥锁;
22.(e)设备内存分配成功后,通过pcie总线将流式数据从主机内存复制到设备内存,然后提交异构计算任务给cuda系统。
23.(f)基于udp协议的流式数据接收服务端会不断执行步骤(c)-(e),以实现流式计算的异构计算处理。在此期间,使用通过“拉”的方式定期收集内存池的系统资源使用情况和资源水位情况,然后基于arima的时序预测方法根据历史一段时间的系统内存分配需求预测接下来一段时间的内存分配需求,指导两个内存池进行主动伸缩,或者不进行伸缩。
24.所述(f)的具体过程为:
25.(f-1)通过监控每个时间段的内存分配需求,预测未来一段时间的内存分配需求。具体来说,是使用arima算法,根据系统设定的p、d、q三个参数,计算出下一个时间点的内存分配需求,arima(p,d,q)的表达式为:y_t=\mu+\\varphi_1y_{t-1}+\cdots+\\varphi_py_{t-p}+\\theta_1e_{t-1}+\\cdots+\\theta_qe_{t-q}\;
26.(f-2)定期拉取主机内存池和设备内存池的内存资源使用情况;然后根据内存池资源水位状况和arima的预测结果,指导两个内存池的动态扩容和缩容,或者保持不变。
27.本发明提出了一种基于动态伸缩内存池的流式数据异构计算的内存管理系统,该系统包括:
28.cpu端主机内存池模块,适于为流式数据的异构计算应用快速分配和释放cpu端的
主机锁定内存;
29.gpu端设备内存池模块,适于为流式数据的异构计算应用快速分配和释放gpu端的设备内存;
30.内存池资源统一监控模块,适于以不影响内存池性能的后台线程方式,收集两个内存池管理的cpu主机内存资源和gpu设备内存资源的使用情况,监控两个内存池的资源水位;
31.流式数据内存需求预测模块,适于根据arima时序预测方法,基于历史的系统内存分配需求预测未来一段时间的系统内存分配需求,并根据内存池资源统一监控模块得到的内存池资源水位状况,指导两个内存池的动态扩容和缩容。
32.本发明的有益效果是,本发明提供了一种基于动态伸缩内存池的流式数据异构计算的内存优化方法。其中,内存池包括cpu端主机内存池和gpu端设备内存池,根据提前申请和延迟释放的思想,通过一次分配大的超级块然后切分为小的内存块的方式,大大减少了cuda内存分配api的调用次数,并通过将内存块按照大小作为类型分别管理的策略,减小了内存分配时查找可用内存块的时间,从而降低了流式数据异构计算所需的内存分配延迟。本发明还针对传统的内存被动伸缩容易产生的内存池伸缩不及时问题,通过引入内存池资源统一监控模块和流式数据内存需求预测模块,基于arima算法预测未来一段时间的系统内存分配需求,最终实现了流式数据异构计算场景下的内存池主动伸缩,优化了内存池扩容不及时导致的内存分配延迟升高问题和内存池缩容不及时系统内存利用率不佳问题。
附图说明
33.图1是本发明的内存池的原理图。
34.图2是本发明的内存池的扩容流程图。
35.图3是本发明方法的内存池操作流程图。
36.图4是内存池主动伸缩原理图。
具体实施方式
37.为使本发明的目的、技术方案和优点表达地更加清楚明白,以下结合附图和具体实施步骤对本发明进行详细描述,但不作为对本发明的限定。
38.本发明提供了一种基于动态伸缩内存池的流式数据异构计算的内存优化方法,该方法由四个模块组成,分别是cpu端主机内存池模块、gpu端设备内存池模块、内存池资源统一监控模块和流式数据内存需求预测模块。四个模块的主要作用是,主机内存池模块提前申请锁定内存进行缓存,设备内存池提前申请设备内存进行缓存,满足流式数据异构计算的内存申请需求;内存池资源统一监控模块定期拉取主机内存池和设备内存池的内存资源使用情况,流式数据内存需求预测模块通过监控每个时间段的内存分配需求,预测未来一段时间的内存分配需求,并根据内存池资源统一监控模块得到的内存池资源水位状况,指导两个内存池的动态扩容和缩容,以应对未来的流式数据异构计算内存分配需求。
39.具体来说,以上基于动态伸缩内存池的流式数据异构计算的内存优化方法的具体实施方式是:
40.s1:根据用户自定义的配置文件创建全局唯一的cpu端主机内存池和gpu端设备内
存池,配置文件的配置项包括内存池的初始大小、内存池的扩容因子、内存池的缩容因子、内存池的单次扩容最大限制、内存池的单次缩容最大限制、内存池的高水位阈值和内存池的低水位阈值等。以上配置项是内存池被动伸缩的必要配置,用于补充动态伸缩不必要的场景需求。
41.具体来说,步骤s1包含以下子步骤:
42.s1-1:根据内存池的初始大小count和初始支持内存分配大小,通过乘法计算出初始化需要的总内存大小;
43.s1-2:根据总内存大小除以一个超级块的大小,得到初始化需要的超级块数量n;
44.s1-3:cpu端主机内存池调用n次cudamallochost接口,申请n个主机内存超级块,以大小为初始支持内存分配大小参数划分为多个主机内存块,插入内存池的管理链表中进行缓存;
45.s1-4:gpu端设备内存池调用n次cudamalloc接口,申请n个设备内存超级块,以大小为初始支持内存分配大小参数划分为多个设备内存块,插入内存池的管理链表中进行缓存;
46.s2:运行基于udp协议的流式数据接收服务端,通过监听udp套接字进行流式数据接收。
47.s3:在每一次流式数据接收前,服务端向cpu端主机内存池申请分配一块主机锁定内存,作为缓冲区存放本次接收的流式数据。为快速分配出服务端需要的主机锁定内存,cpu端主机内存池执行以下子步骤:
48.s3-1:根据线程标识符和内存分配大小,一对一将请求映射到一个子内存池,如果该子内存池不存在,则根据内存池的初始大小参数创建出子内存池;
49.s3-2:cpu端主机内存池尝试获取子内存池的互斥锁,查看内存管理链表是否有空闲内存块,如果没有则执行子内存池的被动扩容,其中被动扩容的大小会根据内存池的扩容因子计算出实际的扩容大小;
50.s3-3:确定有空闲内存块后,从子内存池的内存管理链表中取出一个内存块,分配给应用,最后释放互斥锁;
51.s4:将流式数据存放到主机锁定内存后,服务端向gpu端设备内存池申请分配一块设备内存。为快速分配出服务端需要的设备内存,gpu端设备内存池执行以下子步骤:
52.s4-1:根据cuda的流标识符和内存分配大小,一对一将请求映射到一个子内存池,如果该子内存池不存在,则根据内存池的初始大小参数创建出子内存池;
53.s4-2:gpu端设备内存池尝试获取子内存池的互斥锁,查看内存管理链表是否有空闲内存块,如果没有则执行子内存池的被动扩容,其中被动扩容的大小会根据内存池的扩容因子计算出实际的扩容大小;
54.s4-3:确定有空闲内存块后,从子内存池的内存管理链表中取出一个内存块,分配给应用,最后释放互斥锁;
55.s5:设备内存分配成功后,通过pcie总线将流式数据从主机内存复制到设备内存,然后提交异构计算任务给cuda系统。
56.s6:基于udp协议的流式数据接收服务端会不断执行步骤s3-s5,以实现流式计算的异构计算处理。在此过程中,本发明通过引入另外两个模块,即内存池资源统一监控模块
和流式数据内存需求预测模块,进一步优化异构计算平台的内存系统:
57.s6-1:内存资源模块定期拉取主机内存池和设备内存池的内存资源使用情况;
58.s6-2:流式数据内存需求预测模块通过监控每个时间段的内存分配需求,预测未来一段时间的内存分配需求。具体来说,是使用arima算法,根据系统设定的p、d、q三个参数,计算出下一个时间点的内存分配需求,arima(p,d,q)的表达式为:
[0059][0060]
s6-3:流式数据内存需求预测模块根据内存池资源统一监控模块得到的内存池资源水位状况,指导两个内存池的动态扩容和缩容,以应对未来的流式数据异构计算内存分配需求。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1