博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【虚拟化实战】VM设计之二内存机制
阅读量:5986 次
发布时间:2019-06-20

本文共 2328 字,大约阅读时间需要 7 分钟。

作者:范军 (Frank Fan) 新浪微博:@frankfan7

虚拟机需要配置多大的内存合适?怎样才能最佳利用主机的物理内存?怎么把握Over-Commitment的度?本文从概念到实战来阐述如何做好虚拟机上内存资源规划。

如何分配内存?

首先我们明确一些概念。

上图分三层,他们分别是是App层,OS层和Hypervisor层。对于物理服务器而言,所有的内存资源都分配给单独的操作系统和上面运行的应用。应用将请求先发送给操作系统,然后操作系统调度物理的内存资源。

我们以下面一个场景为例,来分析内存在各层中是如何分配的。

假设我们先启动ESXi主机,这时Hypervisor加载物理内存,这和任何其他操作系统加载物理内存的原理一样。在这一层Hypervisor加载的内存称作“Machine memory。然后我们在该ESXi主机上创建了虚拟机,并为其设置4G内存(Configured Memory Size,这也称为“Guest Physical Memory”,由于这是Virtual Hardware为该虚拟机所分配的内存。对于操作系统而言,这和物理内存没有区别,就认为自己是完全控制该4G内存的。然后我们启动该VM,上面的OS开始运行。之后运行一个应用,该应用通过系统调用(syscall)向OS发出请求,然后获得内存。这里称作“Virtual Memory

上面说的是内存分配的过程,那么内存是如何释放的呢?

App通过系统调用告诉OS来释放不需要的内存。可OS认为所有设置在虚拟机上的内存都是专门分配给自己的,并不会释放Guest Physical Memory,而是创建一个Free List来记录该内存是可以被重新分配的。而Hypervisor根本无法访问这个Free list。所以根本无法释放物理内存。

Hypervisor如何释放物理内存?

这下问题来了,根本别指望通过Guest来能释放物理内存。那究竟Hypervisor是怎么释放内存的呢?主要有下面几个技术:

TPS Transparent Page SharingTPS缺省是一直自动运行的。比如一台ESXi主机上运行多个虚拟机,他们的OSApp很类似,必然很多内存页的内容是一样的,Hypervisor就会比较这些页面,在物理内存去除冗余,仅仅保留单个页面的信息。从而减少了物理内存的消耗。

Blooning

在虚拟机上安装的VMtools就包括了ballooningdriver它告诉Hypervisor哪些不活动的内存页面可以被收回。这对虚拟机上应用的性能是没有任何影响的。关于Blooning技术的原理,delxu的博文解释的非常清楚,赞一个。我在此不再赘述。

Compression:缺省是启动的。在启动Swaping之前系统会尝试将虚拟内存页面压缩,如果小于2KB,可以保存在虚拟机的Comression Cache内。

Swapping

如果在TPSblooningCompression都用上了的情况下,仍然有物理内存不足的情况。那么不得已最后一招就是Swapping因为页面交换和Disk进行的,这对应用性能很可能造成大的负面影响。参见Frank Denneman博文

内存Over-commitment:

顾名思义,就是说分配出去的内存比实际拥有的内存多。那么Over-commitment是如何衡量的呢?带来的影响是什么?

更多的关于内存的衡量指标参考:

http://www.vmware.com/support/developer/vc-sdk/visdk400pubs/ ReferenceGuide/memory_counters.html

上图很好的解释了在虚拟机这一层常用的一些与内存相关的术语和他们的关系。

这里特别要注意的是Active Memory. 指的是虚拟机中应用经常访问的内存。它并不能等同于这个虚拟机最少需要的内存,可是它可以帮助你判断该虚拟机的内存页面的活动情况,以及在该虚拟机上运行的应用是繁忙还是空闲。

Configured MemoryOvercommitment = Sum of VMs’ configured memory/ Host memoryavailable for VMs

比方说ESXi主机物理内存是16G,运行6VM,每个VMConfigured Memory4G,那么该值是(6*4/16 = 1.5

Active MemoryOvercommitment = (Sum of VMs’ machineactive memory)/host memory available for VMs

ESXi主机物理内存是16G,运行6VM,每个VMConfigured Memory4G,假设每个VMActive Memory2.5G那么该值是6*2.5/16=0.93

Configured MemoryOvercommitment > 1的时候,并不能说明什么问题,也不能推断出应用有性能下降。因为Hypervisor可以利用balloning,TPScompression等方式把物理内存释放。一般来讲,这个值超过1.5甚至更多,可以最大化的利用好物理内存。

Active MemoryOvercommitment 接近1的时候,就需要格外注意了。有可能某些应用已经濒临性能下降的边缘。ESXi主机的物理内存肯能已经不能满足Active Memory的需要了。这时需要把一些VM vMotion到其他有充足内存的主机。

参考:

转载地址:http://gbulx.baihongyu.com/

你可能感兴趣的文章
Java MVC 1.0规范开始进入公开评审阶段
查看>>
(翻译) MongoDB(14) 在 Debian 上安装MongoDB社区版
查看>>
WeX5中input拍照上传图片方法分享,可单图与多图
查看>>
android servicemanager与binder源码分析二 ------ servicemanager服务提供者
查看>>
href的那些事
查看>>
RecyclerView中Adapter和ViewHolder的封装
查看>>
xcache 源码包编译安装
查看>>
前端开发思考与实践
查看>>
tcp/ip参数控制
查看>>
[分享]iOS开发-UIView顺时针旋转、逆时针旋转
查看>>
防止 DDoS 攻击的五个「大招」!
查看>>
epoll LT/ET 深入剖析
查看>>
如何使用Android UI Fragment开发“列表-详情”界面
查看>>
啥是中台?
查看>>
使用keepalived实现nginx的高可用
查看>>
前端小报 - 201903月刊
查看>>
Ingress-nginx 源码分析
查看>>
centos7安装配置rsync以及遇到问题
查看>>
[kuangbin带你飞]专题一 简单搜索 题解报告
查看>>
阿里云 Aliplayer高级功能介绍(六):进度条标记
查看>>