本文围绕ARMv8 CPU的虚拟化展开; 本文会结合Qemu + KVM的代码分析,捋清楚上层到底层的脉络; 本文会提供一个Sample Code,用于类比Qemu和KVM的关系. 先来两段前戏。 1.1 CPU工作原理 AI的世界,程序的执行不再冰冷,CPU对a.out说,hello啊,world已经ok啦,下来return吧! 既然要说CPU的虚拟化,那就先简要介绍一下CP...
VMCS之于VCPU的作用类似于进程描述符之于进程的作用: (用于进程调度)传统上操作系统的进程会共享物理CPU资源,操作系统负责在多个进程之间分配CPU,每个进程都有进程描述符来保存进程的信息,并且在进程切换时保存硬件上下文,使得进程能够在下次被调度的时候正常运行。 (用于VCPU调度)VCPU之间会共享物理CPU,VMM负责在多个VCP...
进入文件系统,就可以在/sys/devices/system/cpu/cpu0/cpufreq目录调频 看一下当前频率 cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq 看一下当前模式 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 设置成333MHz echo 333334 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_set...
VMWare早期方案:虚拟化用户态的程序直接在CPU上执行,但是一些特权指令会通过动态的二进制翻译去执行。 VMWare Xen方案:修改虚拟机操作系统内核的代码,使虚拟机内核运行在ring1,并且对虚拟机中操作系统内核的敏感指令进行替换进而使其陷入到ring0的Xen内核。
QEMU与多CPU多核心有关的参数是-smp,官方对-smp参数的解释如下: -smp n[,cores=cores][,threads=threads][,sockets=sockets][,maxcpus=maxcpus] Simulate an SMP system with n CPUs. On the PC target, up to 255 CPUs are supported. On Sparc32 target, Linux limits the number of usable CPUs to ...
KVM的所有虚拟化实现(Intel和AMD)都会向KVM模块注册一个kvm_x86_ops结构体,这样KVM中的一些函数就仅仅作为一个外壳,它可能首先会调用kvm_arch_xxx函数,表示的是调用CPU架构相关的函数,而如果kvm_arch_xxx函数需要调用到实现相关的代码,则会调用kvm_x86_ops结构中的相关回调函数。
1.使用 qemu-system-x86_64 -cpu help 列出所有可以使用的CPU 2.选择一个比较接近的CPU模型 例:Cascadelake-Server-v5-x86_64-cpu 按照这个写出一个启动命令 qemu-system-x86_64 -M q35 -m 1024 -hda 镜像位置 -cpu Cascadelake-Server-v5 3.在CPU后面加上 famly='数值1',model='数值2',stepping='数...
基本的 CPU 模拟 下面的指令模拟了一个具有 1 个物理 CPU, 两个逻辑 CPU 的系统 $ qemu -enable-kvm -m 1024 ArchLinux.img -smp 2,sockets=1 在guest 上看看 cpuinfo 的信息: 可以看到两个逻辑 CPU 是双核的, 没有使用超线程技术。 指定核心数 ...