Virtualization

libvirt的Job队列机制分析

在libvirt下这两个函数配对使用,负责对任务建立队列关系 qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) qemuDomainObjEndJob(driver, vm) 看qemuDomainObjBeginJob的入参,qemuDomainJob: typedef enum {     QEMU_JOB_NONE = 0,  /* Always set to 0 for easy if (jobActive) conditions */  ...

QEMU block cache参数分析

代码:git://git.qemu-project.org/qemu.git  v2.9.0 在QEMU doc描述的块设备cache参数: cache is "none", "writeback", "unsafe", "directsync" or "writethrough" and controls how the host cache is used to access block data. cache mode cache.writeback cache.direct cache.no-flush writeback ...

virtIO vring工作机制分析

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下的内存结构MemoryRegion和AddressSpace

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

KVM MMU page释放机制

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树状图

下面是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虚拟网络E1000源代码分析

代码版本: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是网络设备初...

QEMU/KVM下VCPU同步引发的死锁

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

kvmclock时钟虚拟化源代码分析

代码版本: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...

QEMU下的eventfd机制及源代码分析

代码版本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...