问题不是出在upstream的版本上,而是内部开发的一个产品。在KVM这个系统里面,很多时候牵一发动全身,某些改动貌似是正确的,其实则不然,内核的其他模块也是类似的系统化,Jike说的“正是内核的开发门槛很高才保证了内核当前的质量”也是有道理的。
进入正题,产品要求VCPU进入guest之前需要等待响应,当存在响应的时...
代码版本:linux-git v4.10.0-rc3
1.kvm clock时钟
[crayon-6011a21be82d8364685741/]
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.8-git
因为eventfd要与epoll配合使用,不清楚epoll的请参考epoll的linux内核工作机制。
一. Eventfd在QEMU下的使用
Eventfd在QEMU下的使用以这三个函数为基础:event_notifier_init和event_notifier_get_fd,以及event_notifier_set_handler。
在event_notifier_init中,初始化E...
源代码:linux-3.16.37-git, qemu-v2.7
1.vm启动时qemu的代码
virtio block的qemu cmd:
[crayon-6011a21bea3e3529317189/]
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、 在寄存器指定的地址传送一个数据(字节、字、双字...
Base是git://git.qemu.org/qemu.git v2.6.0
入口是qemu_init_vcpu,在tcg_enabled下进入qemu_tcg_init_vcpu函数,在qemu_thread_create(cpu->thread, thread_name, qemu_tcg_cpu_thread_fn,
cpu, QEMU_THREAD_JOINABLE)中看到执行函数是qemu_tcg_cpu_thread_fn,下面的函数负责控制在machine完全初始化完成前进行等...
源代码版本:git://git.qemu.org/qemu.git v2.5.0
savevm指令对应的函数是hmp_savevm,loadvm则是hmp_loadvm, 对应的函数是
[crayon-6011a21bed563100175872/]
上面这个代码是编译生成的,在编译目录下面的x86_64-softmmu/hmp-commands.h。
先看hmp_savevm,在qemu monitor console下执行savevm oenhan指令,在...
KVM下steal_time源代码分析
代码版本:https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git branch v4.3
刚好有人在其他文章评论下问到steal_time机制,顺便看了一下,总结如下。
steal_time原意是指在虚拟化环境下,hypervisor窃取的vm中的时间,严格讲就是VCPU没有运行的时间。
在guest中执...
seabios问题的原理还是很简单的,只是我对bios的原理一点也不了解,可谓盲人骑瞎马,夜半看bug,过程记录一下,还是有些意义。
问题就是给定qemu分配78个vcpu的时候,qemu提示找不到硬盘,即是"Boot failed: could not read the boot disk",出现了这样的问题,正确的思路就是看打印,就是seabios的boot_disk里面的:
...
最近要定位Xen migration后nested中xl创建vm panic的问题,于是把migration的过程看一看,记录如下,使用的迁移命令是“xl migrate centos localhost”,下面的代码走读也是以这个命令为标准。
直接从xl命令看,它在toolslibxlxl.c的main函数中,xl受到操作参数之后通过cmdtable_lookup函数进行查表,就是cmd_table,找到...