在做KVM模块热升级的过程中碰到了这个坑,通读代码时本来以为msr在vcpu load和vcpu exit中进行切换,便忽略了kvm_shared_msr_cpu_online,没想到它能直接重置了host,连投胎的过程都没有,直接没办法debug,还是要多亏这个问题在某种情况下不必现,chengwei才更快找到原因,顺便看了一下kvm_shared_msrs机制,理清楚了问...

http://git.qemu.org/git/qemu.git v2.8.0 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git 4.4.70 1.VRing的初始化 QEMU下的VRing [crayon-5da647f990f5c348991684/] VirtQueue在QEMU端的初始化,即virtio_add_queue, virtio最多有1024个虚拟队列,且每个队列最多容纳1024个request单位...

QEMU下的内存结构体很多了,RAMBlock,MemoryRegion,AddressSpace,MemoryRegionSection,KVMSlot和kvm_userspace_memory_region,很多时候看代码时候都会被搅合成一坨,虽然很早时候在KVM源代码分析2:虚拟机的创建与运行和KVM源代码分析4:内存虚拟化都提到了内存虚拟化的过程,但实际上这几个结构体之间的关系并没有理...

问题不是出在upstream的版本上,而是内部开发的一个产品。在KVM这个系统里面,很多时候牵一发动全身,某些改动貌似是正确的,其实则不然,内核的其他模块也是类似的系统化,Jike说的“正是内核的开发门槛很高才保证了内核当前的质量”也是有道理的。 进入正题,产品要求VCPU进入guest之前需要等待响应,当存在响应的时...

代码版本:linux-git v4.10.0-rc3 1.kvm clock时钟 [crayon-5da647f99363b481431502/] 1)KVM clock 在guest中: kvmclock_init负责在guest启动过程中初始化kvm clock,首先更新了两个MSR值: #define MSR_KVM_WALL_CLOCK_NEW 0x4b564d00 #define MSR_KVM_SYSTEM_TIME_NEW 0x4b564d01 然后为每个CPU分配struct...

源代码:linux-3.16.37-git, qemu-v2.7 1.vm启动时qemu的代码 virtio block的qemu cmd: [crayon-5da647f9940d2857629354/] qemu中virtio blk代码所在的重点文件如下: hw\virtio\virtio.c hw\virtio\virtio-bus.c hw\virtio\virtio-rng.c hw\block\virtio-blk.c hw\net\virtio-net.c 在type_ini...

源代码:git tag, kernel v3.16.37 qemu v2.7 ,上一篇:KVM源代码分析4:内存虚拟化–OenHan 1. PIO指令介绍 80386的I/O指令使得处理器可以访问I/O端口,以便从外设输入数据,或者向外设发送数据。这些指令有一个指定I/O空间端口地址的操作数。有两类的I/O指令: 1、 在寄存器指定的地址传送一个数据(字节、字、双字...