WayCa鲲鹏虚拟化性能优化:KVM与硬件加速的完美结合指南
WayCa鲲鹏虚拟化性能优化KVM与硬件加速的完美结合指南【免费下载链接】WayCaWayca repo display kunpeng featuer and establish ecology communication项目地址: https://gitcode.com/openeuler/WayCa前往项目官网免费下载https://ar.openeuler.org/ar/openEuler WayCa鲲鹏虚拟化方案是基于KVM与硬件加速技术的完美结合为用户提供高效、稳定的虚拟化环境。该方案通过软硬件协同优化充分发挥鲲鹏处理器的硬件特性提升虚拟机性能和资源利用率。一、虚拟化技术基础虚拟化是一种资源管理技术它将计算机的各种实体资源CPU、内存、存储、网络等予以抽象和转化出来并提供分割、重新组合以达到最大化利用物理资源的目的。虚拟化主要分为CPU虚拟化、内存虚拟化、中断虚拟化、IO设备的虚拟化等。其中qemu-kvm虚拟化技术较为热门。KVM运行在内核空间负责模拟虚拟机的CPU运行内存管理设备管理等QEMU运行在用户空间负责模拟虚拟机的IO设备接口以及用户态控制接口。QEMU通过设备文件/dev/kvm进行IOCTL控制KVM模块的运行过程。二、WayCa鲲鹏虚拟化核心特性2.1 支持TRAP DELAY特性TWE Delay是ARMv8.6扩展中一个可选特性合入代码到内核中进入系统后可以通过以下命令查看是否支持该特性dmesg | grep Delayed Trapping of WFE如果支持会有如下打印CPU features: detected: Delayed Trapping of WFE该特性需要开启内核配置CONFIG_ARM64_TWED。2.2 支持ARM pvspinlock特性对于Guest OS上每个CPU称为VCPU实际上为Host OS上一个线程该线程可称为VCPU线程。当虚拟机上VCPU大于实际CPU数目时很多VCPU线程可能处于被调出SCHED_OUT的状态。在调度和锁的某些场景下这些VCPU线程虽然处于SCHED_OUT状态无法工作但在Guest OS中呈现出这些VCPU处于idle因此在Guest OS中仍尝试将任务往这些VCPU上执行从而造成任务的阻塞或时延增大。在当前内核的调度和锁的某些场景下允许Guest OS通过vcpu_is_preempted()检查VCPU是否被SCHED_OUT从而决定在Guest OS中是否将任务在这些VCPU上执行达到优化性能的目的。使能配置项CONFIG_PARAVIRT CONFIG_PARAVIRT_SPINLOCKS2.3 支持VFIO直通热迁移VFIO直通热迁移功能主要包含两方面内容DMA脏页热迁移和中断状态热迁移。鲲鹏920设计实现SMMU HTTU硬件辅助虚拟化扩展支持硬件自动标记脏页将设备DMA脏页信息记录在页表项为DMA脏页迁移提供了硬件支持。基于此硬件特性在SMMU驱动层实现DMA自动标脏的机制其中包括一套完整的页表操作、时序控制同时在内核定义一套完整的脏页管理接口规范包括开启/关闭标脏、取脏、清脏等用户态接口实现设备DMA脏页热迁移。VFIO直通热迁移场景采用GICv4.1中断透传场景虚拟中断状态维护在VPT表中需要软硬结合维护虚拟中断信息。鲲鹏920设计实现GICv4.1硬件辅助虚拟化扩展通过软件方式同步GIC硬件cache。软件通过访问内存中的虚拟pending表实现中断状态的保存恢复。2.4 支持TLBI广播优化在虚拟化场景硬件不感知一个虚拟机vCPU线程具体在哪些pCPU上运行过因此vCPU的TLBI指令会被统一广播到全系统范围的所有物理核上并在所有物理核上刷新TLB这里会产生不必要的性能开销。从功能上分析硬件只需要在该vCPU运行过的那些pCPU上刷新TLB即可。DVMBM特性用于TLBI广播优化。新增寄存器用于检测硬件是否支持该特性、开启/关闭特性、配置TLBI的广播范围等。开启TLBI广播优化特性后在虚拟化场景通过配置一个pCPU的LSUDVMBM_EL2寄存器可以控制该pCPU上的虚拟机TLBI指令只在指定的CPU范围内广播从而避免不必要的开销。软件上新增了一个内核启动参数可以在用户态全局地开启/关闭DVMBM特性系统默认为关闭。若要使能该特性可以在Host内核的启动命令中配置该参数值为1即kvm-arm.dvmbm_enabled 1。2.5 支持SVE2虚拟化SVE/SVE2虚拟化的目标是要给虚拟机呈现SVE特性包括SVE指令集以及SVE寄存器组从而虚拟机能够基于SVE矢量运算提升整机计算性能如编译性能优化等。SVE使能需要开启以下内核配置CONFIG_ARM64_SVE。qemu启动命令中-cpu 参数可以设置sve长度-cpu host,sve128on或者sve256on等。用户态软件可以通过sys/auxv.h中getauxval(AT_HWCAP)/getauxval(AT_HWCAP2)函数判断当前的硬件和内核是否支持SVE/SVE2通过lscpu命令或/proc/cpuinfo文件可查看SVE/SVE2虚拟化的支持情况。2.6 支持vCPU热插特性虚拟机vCPU热插支持可以帮助虚拟机在高负载的情况下不用停机直接通过热插vCPU的方式动态地为虚拟机进行弹性扩展保证虚拟机里的业务稳定。openEuler社区的qemu-4.1.0实现了aarch64 CPU热插特性qemu-6.2.0中增加了smp.clusters热插支持。虚拟机需要以ACPI的方式启动起虚拟机命令参数示例qemu-system-aarch64 \ ... \ -cpu host -enable-kvm \ -bios QEMU_EFI.fd \ -smp cpus14,maxcpus16,sockets2,clusters2,cores2,threads2 \ ...进入虚拟机后按Ctrl A 松开迅速按下C进入qemu monitor里面执行(qemu)device_add host-arm-cpu,socket-id1,cluster-id1,core-id1,thread-id0,idcore14 (qemu)device_add host-arm-cpu,socket-id1,cluster-id1,core-id1,thread-id1,idcore15同样方法退出qemu monitor后按回车进入虚拟机上线热插的CPUecho 1 /sys/devices/system/cpu/cpu14/online echo 1 /sys/devices/system/cpu/cpu15/online三、WayCa鲲鹏虚拟化最佳实践3.1 虚拟内存/存储配置WayCa鲲鹏虚拟化支持nvdimm/pmem以及内存的热插操作nvdimm用作虚拟机磁盘pc-dimm用作虚拟机内存。nvdimm支持的虚拟机启动命令qemu-system-aarch64 -machine virt,kernel_irqchipon,gic-version3,nvdimmon \ -m 1G,maxmem5G,slots4 \ -object memory-backend-ram,idram1,size1G \ -device nvdimm,iddimm1,memdevram1 \ -enable-kvm -cpu host \ -smp 2 \ -bios ./QEMU_EFI.fd \ -kernel ./Image -initrd ./minifs.cpio.gz -nographic \ -append rdinitinit consolettyAMA0 earlyconpl011,0x90000000 -net nonepc-dimm支持的虚拟机启动命令中添加qemu-system-aarch64 -machine virt,gic-version3 \ -m 4G,maxmem8G,slots4 \ -object memory-backend-ram,idram1,size1G \ -device pc-dimm,iddimm1,memdevram1 \ -enable-kvm -cpu host -smp 4 \ ...3.2 虚拟拓扑配置虚拟拓扑包含虚拟NUMA拓扑虚拟CPU拓扑虚拟cache拓扑。虚拟拓扑的实现是为了提升虚拟机的性能合理地配置虚拟拓扑结构能有效地提升vCPU的访问性能和调度性能。虚拟NUMA拓扑配置示例-object memory-backend-ram,idram-node0,size8G,policydefault -numa node,nodeid0,cpus0-7,memdevram-node0 -object memory-backend-ram,idram-node1,size8G,policydefault -numa node,nodeid1,cpus8-15,memdevram-node1以上参数为虚拟机配置两个NUMA节点每个NUMA节点上内存大小为8G每个NUMA节点上有8个vCPU。虚拟CPU拓扑需以ACPI方式启动虚拟机配置示例-smp cpus16,sockets2,clusters2,cores2,threads2该配置为虚拟机分配16个vCPU这些vCPU平均分配在2个socket上每个socket上有2个cluster每个cluster上有2个core每个core有2个thread。四、总结WayCa鲲鹏虚拟化方案通过KVM与硬件加速技术的深度融合为用户提供了高性能、高可靠性的虚拟化环境。无论是TRAP DELAY、ARM pvspinlock等特性还是VFIO直通热迁移、TLBI广播优化等功能都充分体现了软硬件协同优化的优势。通过合理配置虚拟内存/存储和虚拟拓扑用户可以进一步提升虚拟机性能满足不同业务场景的需求。如果您想了解更多关于WayCa鲲鹏虚拟化的信息可以参考以下文档WayCa-Kunpeng-虚拟化用户使用指南.mdWayCa-Kunpeng-虚拟化模块特性介绍.md要开始使用WayCa鲲鹏虚拟化您可以通过以下命令克隆仓库git clone https://gitcode.com/openeuler/WayCa希望本文能够帮助您更好地理解和使用WayCa鲲鹏虚拟化方案充分发挥其在性能优化方面的优势 【免费下载链接】WayCaWayca repo display kunpeng featuer and establish ecology communication项目地址: https://gitcode.com/openeuler/WayCa创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考