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

架构细节可查看:CPU 和内存虚拟化

https://www.cnblogs.com/sammyliu/p/4543597.html

内存虚拟化的映射实现

  • 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 centos7  

 到此,我们已成功实现guest内存增加。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值