在做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
typedef struct VRing
{//vring中最多有多少各request
unsigned int num;
unsigned int num_default;
//数据对齐比例尺
unsigned int al...
QEMU下的内存结构体很多了,RAMBlock,MemoryRegion,AddressSpace,MemoryRegionSection,KVMSlot和kvm_userspace_memory_region,很多时候看代码时候都会被搅合成一坨,虽然很早时候在KVM源代码分析2:虚拟机的创建与运行和KVM源代码分析4:内存虚拟化都提到了内存虚拟化的过程,但实际上这几个结构体之间的关系并没有理...
KVM tree commit id:2868b2513aa732a99ea4a0a6bf10dc93c1f3dac2 v4.11.0
kvm_mmu_free_page释放MMU page, kvm_mmu_commit_zap_page负责具体的任务,需要被释放的MMU page都挂在invalid_list链表上,而invalid_list生成方式主要有这几种:kvm_sync_page, kvm_sync_pages,kvm_mmu_prepare_zap_page,prepare_zap_olde...
下面是QEMU object Model(QOM)的树状图,使用bash脚本生成的
#!/bin/bash
INFO_FILE="$(pwd)/test.txt"
function catfile()
{ local dir dir="$1"
cat $INFO_FILE | grep "^$dir " | awk -F " -> " '{print $2}' | xargs mkdir
if [ $(ls * | wc -w) -eq 0 ];then return fi
for i in * d...
代码版本:QEMU git release v2.8
x86_64-softmmu/qemu-system-x86_64 -enable-kvm -M q35 -m 256 -smp 1 -drive file=/workspace/kvm_auto_test/kvm_test.qcow2,format=qcow2 -netdev tap,fd=26,id=hostnet0 -device e1000,netdev=hostnet0,id=net0,mac=52:54:00:f1:ec:ba,bus=pcie.0
e1000_class_init是网络设备初...
问题不是出在upstream的版本上,而是内部开发的一个产品。在KVM这个系统里面,很多时候牵一发动全身,某些改动貌似是正确的,其实则不然,内核的其他模块也是类似的系统化,Jike说的“正是内核的开发门槛很高才保证了内核当前的质量”也是有道理的。
进入正题,产品要求VCPU进入guest之前需要等待响应,当存在响应的时...
代码版本:linux-git v4.10.0-rc3
1.kvm clock时钟
struct pvclock_vcpu_time_info {
u32 version;
u32 pad0;
//guest的TSC时间戳,在kvm_guest_time_update中会被更新
u64 tsc_timestamp;
//guest的墙上时间(1970年距今的绝对日期),和上者在一起更新
//system_time = kernel_ns + v->k...
源代码:linux-3.16.37-git, qemu-v2.7
1.vm启动时qemu的代码
virtio block的qemu cmd:
x86_64-softmmu/qemu-system-x86_64 -enable-kvm -cpu host -m 256 -smp 1 -drive file=~/vm/centos6-virtio.qcow2,if=none,id=drive-virtio-disk,format=qcow2 -device virtio-blk-pci,bus=pci.0,drive=drive-virtio-disk,id=...
源代码:git tag, kernel v3.16.37 qemu v2.7 ,上一篇:KVM源代码分析4:内存虚拟化–OenHan
1. PIO指令介绍
80386的I/O指令使得处理器可以访问I/O端口,以便从外设输入数据,或者向外设发送数据。这些指令有一个指定I/O空间端口地址的操作数。有两类的I/O指令:
1、 在寄存器指定的地址传送一个数据(字节、字、双字)。...