当前位置:首页 > 内存 > 正文

kvm的内存访问

  • 内存
  • 2024-08-06 03:10:48
  • 2711

一、虚拟化技术—QEMU-KVM基于内核的虚拟机

探索虚拟化的顶层:QEMU-KVM的基础和高效运行


QEMU-KVM作为与Linux内核集成的高效虚拟化解决方案,其核心是TYPE1Hypervisor,采用硬件辅助虚拟化技术,与Linux内核紧密配合,凸显其卓越的性能和资源管理能力。要了解KVM,首先要知道它是如何利用硬件支持作为内核模块来提供对虚拟环境的控制和优化,以保证兼容性和效率。


2007年,KVM正式加入Linux家族,支持多核架构(SMP)和NUMA,其功能扩展到LiveMigration和KernelSame-pageMerging(KSM),显着提高了动态性。虚拟机。迁移和内存管理效率。启动时,KVM内核模块以RootMode启动,通过UserApplicationQEMU,像魔术一样模拟虚拟硬件,为虚拟机提供服务。


QEMU,由天才开发者FabriceBellard于2001年推出,名为TYPE2Hypervisor,依靠动态二进制翻译技术来兼容各种CPU架构和设备模拟,虽然性能略低于KVM虽然QEMU的灵活性较差,但QEMU的灵活性使其可以与KVM结合,催生了强大的分支QEMU-KVM,两者都推动了虚拟化技术的创新。


KVM软件组件包括:内核模块、QEMU开源虚拟机管理器、AWS、阿里云等云服务商使用的QEMU-KVM以及virtio驱动程序共同构建为虚拟化技术奠定了坚实的基础。


虽然QEMU-KVM分支是QEMU的一部分,但在KVM环境中,我们更喜欢称QEMU为KVM执行引擎。KVM的工作原理是驻留在内核空间,通过/dev/kvm与用户空间实时交互,并提供libkvm库。QEMU通过open、close和ioctl等系统调用访问KVM接口,进行CPU、内存和I/O虚拟化,而VM管理和I/O模拟则由QEMU独立处理。


创建虚拟机的过程就像一门艺术一样精确:首先打开/dev/kvm,通过ioctl命令创建虚拟机并配置硬件抽象层(HVA)和物理层地址(HPA),并克隆PCI设备。然后映射QEMU映像、构建vCPU并启动GuestOS。在此过程中,主线程不断监听VM退出事件,以响应虚拟环境中的中断和设备访问。


当中断页面错误或设备访问触发退出事件时,KVM接管CPU,Linux内核通过ioctl与QEMU交互,以管理虚拟机及其vCPU。KVM支持三种操作模式:User、Kernel(root模式)和Guest(非root模式)。QEMU通过/dev/kvm实现内存虚拟化,并创建全局页表(GPA)映射以确保GuestOS隔离。对于I/O虚拟化,QEMU负责模拟设备并捕获I/O请求,构建QEMU-KVM架构,该架构由vCPU、虚拟内存、虚拟I/O和GuestOS构建而成,形成独特的用户进程结构。


QEMU-KVM架构智能设计,vCPU在HostOS调度下由GuestOS和HostOS共同管理,形成两层调度:GuestOS负责高层。HostOS(LinuxScheduler)负责涉及vCPU线程、QEMU线程和物理CPU的低级调度。KVM支持SMP和NUMA,允许用户自定义虚拟机的vCPU布局,以确保迁移过程中CPU模型的安全。


通过-qemu-kvm命令,开发人员可以自定义VM的CPU配置并选择自定义型号和功能,但需要注意的是,软件模拟可能会影响性能。默认使用-host模式,磁盘设备选项丰富多样,包括文件路径、接口类型、索引、格式等。-boot等启动选项用于指定启动设备,并根据架构支持不同的字符标识符。QEMU的网卡模拟功能强大,支持各种类型的网卡、MAC地址和VLAN,甚至可以通过Tap接口连接物理网络,支持用户态网络布局设计。


QEMU-KVM是虚拟化技术的卓越之旅,以卓越的性能和灵活性引领我们探索更高级别的计算世界。无论是基本配置还是高级功能,QEMU-KVM以优秀的工程设计为云计算和虚拟化环境提供了强有力的支持。


二、KVM之四:内存balloon的奇妙

玩转KVM:内存气球奇迹

上一篇文章介绍了KSM内存合并技术,了解了KSM的应用场景。另外,下面还有KVMBLADDERMEMORY。

Balloon应用技术场景
这是对内存balloon的使用总结:
Ballooning在内存保留和软内存绑定方面具有明显的优势。

①由于ballooned是可以控制和监控的,所以ballooned电量可以节省大量内存。它与页面共享技术不同(KSM由内核自动实现,不受支持)。通过气球来识别变化。

②Ballooning在容纳内存方面很灵活。它可能需要少量的详细内存,或者在原始模式下需要大量内存。

③Hypervisor利用气球让VM返回一部分内存,从而缓解其内存压力。并且气球中保存的内存不需要分配给另一个进程(或另一个VM)。

另一方面,KVM中的Balloons不方便且不完善,具有以下缺点。

①Ballooning需要VM操作系统加载virtio_balloon驱动程序。但并不是每个VM系统都有这个驱动(例如Windows需要自己安装驱动)。

②如果虚拟机系统消耗大量内存,气球膨胀可能会降低虚拟机操作系统的性能。另一方面,内存耗尽会导致VM中分配用于磁盘数据的内存,从而增加VM中的磁盘I/O访问;不够的话,还会导致VMA进程因内存不足而失败。

③目前还没有战略技术和自动化机器来管理气球。气球通常是通过在QEMUmonitor中执行气球命令来完成的。如果没有对虚拟机的有效监控,也没有自动膨胀机制,则很难在生产环境中进行大规模自动化部署。

④动态内存的增加或减少可能会因内存使用性能降低而受到不必要的破坏。此外,内存崩溃优化了VM核心内存使用的变化。例如,最初内核在当前状态下使用某种策略进行内存分配,但突然由于气泡而导致可用内存大大减少。此时,最初的内存设计还不算太优化。

KVM中的气球是通过主机和虚拟机的协作完成的。Linux主机必须使用2.6.27及以上版本的内核(包括KVM模块)和较新的qemu-kvm(如0.13及以上版本),在VM中也使用2.6.27及以上内核并编译“CONFIG_VIRTIO_BALLON”模块或进入内核。许多Linux发行版中都配置了“CONFIG_VIRTIO_BALLOON=m”,因此当使用现代Linux作为VM系统时,通常不需要进一步配置virtio_balloon驱动程序,只需使用默认的内核配置即可。

我完成了膀胱应用程序,在windows2008R2和centos7下工作。

VM状态气球检查:
在vm中,通过内核、加载模块、pci设备等检查气球是否正常运行。

根据上面的输出,virtio_balloon模块已加载到VM中,PCI设备名为“RedHat,IncVirtiomemoryballoon”,它使用virtio_pci驱动程序。如果是WindowsVM,可以在“设备管理器”中看到VirtIOBalloon设备,稍后查看。

检查并将气球放置在主机上:

我使用virsh工具,

>删除
virsh#qemu-monitor-commandcentos7.0--hmp--cmdballoon2046

“气球”尚未激活”。“balloon2046”命令将VM内存设置为2046MB。

(4)当虚拟机内存达到512MB后,在虚拟机中查看,如下。

[root@kvm-guest~]#libero-m

如果是WindowsVM(如Win7),当气球将其可用内存从2GB减少到512MB时,在它的“任务管理器”中的“总内存”仍然显示为2GB,但其内存使用量会增加1536MB(例如从原来的使用量350MB增加到1886MB)。这1536MB被气球设备占用了。Windows中的其他程序VM不再使用这1636MB内存此时,主机系统可以再次在这里分配1536MB内存用于其他用途,QEMU在命令行中设置为2048MB,如果在Monitor中执行“balloon4096”,则设置为4096MB。内存不会生效,其值将被设置为启动命令行上的最大值(即2048MB)。

上一篇:苹果6p扩内存多少钱

下一篇:内存访问