问题不是出在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.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: 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、 在寄存器指定的地址传送一个数据(字节、字、双字)。...

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完全初始化完成前进行等...

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中执行to...

seabios问题的原理还是很简单的,只是我对bios的原理一点也不了解,可谓盲人骑瞎马,夜半看bug,过程记录一下,还是有些意义。 问题就是给定qemu分配78个vcpu的时候,qemu提示找不到硬盘,即是"Boot failed: could not read the boot disk",出现了这样的问题,正确的思路就是看打印,就是seabios的boot_disk里面的: ca...

最近要定位Xen migration后nested中xl创建vm panic的问题,于是把migration的过程看一看,记录如下,使用的迁移命令是“xl migrate centos localhost”,下面的代码走读也是以这个命令为标准。 直接从xl命令看,它在toolslibxlxl.c的main函数中,xl受到操作参数之后通过cmdtable_lookup函数进行查表,就是cmd_table,找到...