首页 > 系统相关 >详细讲述了CPU的调度原理,本篇讲一下内存的分配过程。

详细讲述了CPU的调度原理,本篇讲一下内存的分配过程。

时间:2023-01-10 12:22:46浏览次数:43  
标签:本篇 VMkernel 虚拟机 应用程序 分配 内存 OS CPU


运行在ESXi主机上的虚拟机分配内存之和可以超过物理机的实际内存大小,这个技术叫做超额分配(overcommitment),即使单个虚拟机的内存分配值都可以超分。但是超分的结果就是可能会引起内存资源竞争,从而有可能影响到性能。

 

VMkernel中有另外一个组件叫做memory allocator,用来负责内存资源的分配,(负责CPU调度的是scheduler,上一篇提到过),如下图:

 

ESXi 内存分配原理

 

那么内存分配的过程究竟是怎样的呢?我们来详细描述一下:

 

  • 首先,内存分为三个级别,主机物理内存,客户机物理内存(虚拟机分配的内存大小),客户机虚拟内存(应用程序使用的内存)。虚拟机开机后,VMkernel 不会立即分配所有的客户机物理内存给虚拟机,初始阶段是根据OS和应用程序的需要按需分配,如下图所示。这个时候,VMkernel会把物理机的内存页面地址映射给客户机物理内存页面,从而实现内存虚拟化。

 

ESXi 内存分配原理

 

  • 其次,当OS和应用程序释放内存的时候,Guest OS会把这些内存页面地址放在free list,但是VMkernel并不知道这个list,也就是说,VMkernel是不知道Guest里边有内存释放,也不会知道哪些应用程序正在占用哪些内存页面,它只知道虚拟机分配的内存大小。(是不是感觉VMkernel挺傻的,自己的东西分给别人了,但是别人用不用也不知道,直到最后自己的东西被分完了。)如下图所示:

 

ESXi 内存分配原理

 

其中,free list是Guest OS没有分配给应用程序的,左侧第一个“红色”内存页面是应用程序暂时不用的,被称为“Idle--闲置”内存,其他三个内存页面(黄色,蓝色,灰色)是应用程序正在使用的,被称为“Active--活动”内存,所以Guest OS会把内存分为下图的树形结构:

 

ESXi 内存分配原理

 

最后,当内存超分时,虚拟机请求的内存达到或者超过实际的物理内存大小时,VMkernel就要对分配出去的内存进行回收,从而触发四种内存回收机制,目的是为了保证所有的虚拟机都可以共享到内存资源,默认情况下,物理内存是平均分配的,但是如果管理员设置了资源控制参数(预留,限制,份额),那么VMkernel就会按照优先级对虚拟机的内存请求进行重分配。

标签:本篇,VMkernel,虚拟机,应用程序,分配,内存,OS,CPU
From: https://www.cnblogs.com/lcword/p/17039794.html

相关文章

  • 如何避免VMware平台ESXi主机CPU使用率的“坑”?
    https://mp.weixin.qq.com/s?__biz=MjM5NTk0MTM1Mw==&mid=2650636818&idx=1&sn=c43f3a3146092ffc7c63535aceeb1cd6&chksm=bef9fc94898e75822a891c8b66f83b3b46d6c53fdba77a......
  • Redis的String类型,原来这么占内存
    Redis的String类型,原来这么占内存存一个Long类型这么占内存,Redis的内存开销都花在哪儿了?1、场景介绍假设现在我们要开发一个图片存储系统,要求这个系统能够根据图片......
  • linux 命令使用6--free(内存)
    一:free命令 free命令显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存  二:free命令显示的各项参数 第一行Mem部分:total物理内存的......
  • C语言动态分配内存
    初创建于:2022-02-0900:30C语言的动态分配内存是十分重要的主要有四个函数:void*malloc(intnum)void*calloc(intnum,intsize)void*realloc(void*address,i......
  • 安装oracle 19.3,dbca到第9步时报错DBT-50000,无法检查可用内存
    问题描述:安装oracle19.3,dbca到第9步时报错DBT-50000,无法检查可用内存.系统:windows11专业版安装包:LINUX.X64_193000_db_home.zip解决方案:使用dbca-J-Doracle.assistants.......
  • 【前端调试】- 利用 Performance 和 Memory 分析内存
    欢迎阅读本系列其他文章【前端调试】-更好的调试方式VSCodeDebugger【前端调试】-断点调试的正确打开方式【前端调试】-借助Performance分析并优化性能分析:下面......
  • .NET CORE 获取LINUX硬件CPU使用率等状态信息
    cat/proc/stat​​vmstat,top,psaux​​三个命令都可以查看CPU内存或者进程等情况然后看下面的代码usingSystem;usingSystem.Diagnostics;usingSystem.Runtime.Int......
  • linux 内存空间(三) 内存地址范围和例子
    先放一张虚拟地址空间分布图(图截至深入理解计算机系统第三版):对于这张图有好多种不同的画法和呈现方式。       通过上面这几张图,我们应该清晰认识到linux......
  • [c++实践]内存对齐与伪共享
    内存对齐与伪共享时间测试类该类会在后续的测试中用于运行时间测试。//public/timer.h#include<chrono>#include<iostream>#include<functional>structScopeTimer{......
  • Java内存区域有哪些构成?
    目录前言Java内存区域程序计数器虚拟机栈本地方法栈堆方法区字符串常量池运行时常量池直接内存小结作者:小牛呼噜噜|https://xiaoniuhululu.com计算机内功、JAVA底层......