首页 > 其他 > 详细

QEMU-KVM虚拟化:内存调整控制

时间:2020-07-12 10:58:47      阅读:78      评论:0      收藏:0      [点我收藏+]

以下命令行亲自执行有效,执行环境:

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 centos7  

技术分享图片

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

 

QEMU-KVM虚拟化:内存调整控制

原文:https://www.cnblogs.com/starcrm/p/13287289.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!