QEMU-KVM虚拟化:内存调整控制
以下命令行亲自执行有效,执行环境:
Compiled against library: libvirt 4.5.0
Using library: libvirt 4.5.0
Using API: QEMU 4.5.0
Running hypervisor: QEMU 1.5.3
内存虚拟化的映射实现
- A –> 虚拟地址(VA),指GuestOS提供给其应用程序使用的线性地址空间。
- B –> 物理地址(PA),经VMM抽象的,虚拟机看到的伪物理地址
- C –> 机器地址(MA),真是的机器物理地址,即地址总线上出现的地址信号
内存地址的映射关系::
GuestOS:PA = f(VA) #GuestOS维护着一套页表,负责VA到PA的映射
VMM:MA = g(PA) #VMM维护着一套页表,负责PA到MA的映射
通过转换方法实现了从虚拟地址到机器地址的映射。实际运行时,用户程序访问VA1,经过GuestOS的页表转换得到PA1,再由VMM介入并使用VMM的页表将PA1转换为MA1 。
QEMU内存结构
QEMU 利用mmap
系统调用,在Host 进程的虚拟地址空间中申请连续大小的空间,作为 Guest 的物理内存。
QEMU 作为 Host 上的一个进程运行,Guest 的每个 vCPU 都是 QEMU 进程的一个子线程。而 Guest 实际使用的仍是 Host 上的物理内存,因此对于 Guest 而言,在进行内存寻址时需要完成以下地址转换过程:
Guest虚拟内存地址(GVA) | Guest线性地址 | Guest物理地址(GPA) | Guest ------------------ | Host Host虚拟地址(HVA) | Host线性地址 | Host物理地址(HPA)
其中,GVA->GPA
的映射由 Guest OS 维护,HVA->HPA
的映射由 Host OS 维护,因此需要一种机制,来维护GPA->HVA
之间的映射关系。
细节原理非常复杂,只需要理解HOST和Guest分别通过页表进行内存地址转换,把物理地址转换为Guest的“虚拟地址“即可。
在此不再深入,可参看
https://www.binss.me/blog/qemu-note-of-memory/
https://www.cnblogs.com/ck1020/p/6729224.html
https://abelsu7.top/2019/07/07/kvm-memory-virtualization/
https://juniorprincewang.github.io/2018/07/20/qemu%E5%86%85%E5%AD%98%E8%99%9A%E6%8B%9F%E5%8C%96/
https://www.anquanke.com/post/id/86412
内存调整控制
查看虚拟机内存
只有1G
也可以通过host查看
virsh qemu-monitor-command centos7 --hmp --cmd info balloon
修改增加内存
先关机 virsh shutdown centos7 设置最大内存,2G virsh setmaxmem centos7 2097152 开机 virsh start centos7 设置内存 virsh setmem centos7 2097152
查看结果
查看域信息
virsh dominfo server3
原文地址:https://www.cnblogs.com/starcrm/p/13287289.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- linux contos6.8下部署kafka集群的方法
- 基于Electron的touchbar开发
- Redis数据结构-简单动态字符串
- 使用new Function创建async方法
- Canvas系列(14):实战-小球碰撞
- IOC CreateBean
- Hugo搭建博客(二)— Hugo+Github Pages搭建博客
- 创建bean的实例
- Spring-IOC-默认标签的解析
- Spring-IoC -加载 Bean-总览
- Spring-IOC-创建Bean-属性填充
- vi与vim如何修改tab为4个空格方法示例
- Linux使用Crontab定时访问某个路由地址的方法
- jmeter 在linux服务器的安装和运行教程图解
- Linux中改变文件权限的chmod命令详析