网站首页 | 邮箱 | 办公 | 收藏本站
设为首页 | 关于我们
革命老区 老促会简介
领导关怀 各地老促会
政策方针 老区概况
老区新闻 工作动态
特别关注 媒体关注
视频新闻 图片新闻
老区经济 老区资源 红色旅游
特色品牌 老区扶持 老区基金
老区科技 招商引资 企业风采
老区文化 老区风采
老区故事 老区人物
老区文明 爱国基地
天气预告:
您所在的位置:主页 > 国内 >

华云计算团队在内存大页动态分配的探索与实践

时间: 2021-08-30 作者:编辑 来源:互联网 点击:

前言

持续提升虚拟机性能是所有云计算工程师研究的方向,其中一个重要方式便是使用大页内存。本文从内存映射出发为读者浅析大页内存的相关概念和基础操作,并以此为延伸,与各位分享华云产品技术中心计算团队在大页内存动态分配方面的探索与实践。

MMU与内存映射

在计算机系统结构中,我们知道,CPU是通过寻址来访问内存的。例如,32位 CPU的寻址宽度是 0~0xFFFFFFFF,通过换算可得为 4G,即可支持的物理内存最大是 4G。

然而在实践过程中会产生各种各样的问题,若某个程序需要使用 4G内存,而此时可用的物理内存小于 4G,这就导致程序不得不降低内存的占用。因此为了解决此类问题,现代 CPU引入了 MMUMemory Management Unit内存管理单元。MMU的核心思想是利用虚拟地址替代物理地址,即CPU寻址时使用虚址,由 MMU负责将虚址映射为物理地址。 MMU的引入,解决了对物理内存的限制。

而内存映射则是将虚拟内存地址映射到物理内存地址。为了完成内存映射,内核为每个进程都维护了一张页表,记录虚拟地址与物理地址的映射关系。

页表实际上存储在 CPU的内存管理单元 MMU中,这样,CPU就可以直接通过硬件,找出要访问的内存。

什么是 HugePages

大页内存HugePages,顾名思义就是拥有更大页面的内存页,HugePages提供了 4K页面大小的替代方案,即提供更大的页面,在特定场景下对于性能有着非常明显的提升。

HugePages的查看与分配

在 Linux中,可以使用如下命令查看大页内存

我们对其中的字段分别做一下解释

AnonHugePages:透明大页的大小HugePages_Total:大页资源池中的大页总量HugePages_Free:池中未使用的大页的数量HugePages_Rsvd:已经被分配预留但是还没有使用的大页数目HugePages_Surp:池中大于/proc/sys/vm/nr_hugepages中值的 HugePages数量HugePagesize:单块大页的大小

通常来说,我们会使用 2M的大页,即 HugePagesize = 2048 KB。

请注意,这里关于大页所有的单位都是数量页,而不是大小KB。举个例子,如图所示,HugePages_Total的值为 100,那么在这台机器上大页会占用多少的内存呢?

答案是 200M,即 HugePages_Total HugePagesize,100 2048KB = 200M。

那么,如何分配 HugePages呢?

分配 HugePages主要有两种方法。

一是修改 /etc/grub2.cfg文件中启动菜单的内核参数,这样做的好处在于,当系统启动时,拥有连续内存的空间用于 HugePages分配的机会要大得多。

二是通过 sysctl vm.nr_hugepages的命令进行临时分配,这种方式胜在分配灵活,而弊端则是,当系统内存被使用到一定程度时,连续内存页的数量会变少,即在物理内存有剩余时,却无法分配 HugePages。

OpenStack社区的方案

在 OpenStack中,libvirt的 driver会去检查用户是否在 flavor中配置大页的相关选项,并直接从已分配的资源池中划分相关资源给虚拟机。

这就带来了一个问题,即大页资源池需要用户提前分配。提前分配好的大页资源池会直接占据这部分的内存空间,且随着资源池内可用大页数量的降低,用户在一段时间后无法继续创建大页内存的虚拟机。

归根结底,OpenStack本身并没有提供一套用于管理和维护大页资源池的机制。

ArStack做了哪些尝试

这就回到了这篇分享的主题,有什么办法能够尽可能多地创建高性能的大页虚拟机,同时又避免云平台初期大页资源池分配时,过多地占用系统内存呢?

基于这一出发点,华云计算团队设计了一套动态维护大页资源池的系统。

用户可以在系统初始化时,以一个较低的值手动设置初始大页资源池的大小,Nova的某个周期性定时任务会在一定时间间隔内检查各个计算节点的大页资源池是否满足预设的策略。

当初始资源池消耗殆尽时,Nova会对大页资源池进行自动扩容,以维持一个资源相对富裕的状态。同时,Nova-Scheduler在创建大页虚拟机时也会对各个节点的计算资源进行检查,若都不满足虚拟机所需资源, Nova-Scheduler会计算相应的资源缺口,并尝试进行扩容。

在大页虚拟机被删除后,相应的大页资源会被释放,并流入大页资源池。此时,Nova检测到该计算节点的大页资源池存在过多未被分配的大页时,会进行缩容操作,以释放被占用的物理内存,从而减少了物理内存占用过多的情况。

基于这套动态分配方案,最终实现了性能与灵活兼得的目标。

后记

OpenStack中很多逻辑都是牵一发而动全身的,在实践过程中,Nova-Scheduler、NUMA以及 ArStack的内存预分配都针对 HugePages相关场景进行了对应的调整和优化。

在此感谢计算团队所有同学的辛勤付出。未来,ArStack会继续努力,持续为用户提供更加优质的私有云产品。

最新新闻

更多>>

金种子馥合香紧跟 随着白酒核心消费人群代际的更替,年轻消费者对白酒的个性化…

推荐阅读

更多>>

网龙华渔教育开创 2017年5月8日至9日,第二届“数字教育与出版”论坛在网龙网络公…
关于我们 | 中财新闻 | 中财百科 | 中财论坛 | 网站地图
Copyright @ 中财网 版权所有 联系我们
免责声明:本站为非营利性网站,部分图片或文章来源于互联网 如果无意中对您的权益构成了侵犯,我们深表歉意,请您联系,我们立即删除。