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 align; //VRingDe...

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_oldest...

源代码版本:git://git.qemu.org/qemu.git v2.5.0 savevm指令对应的函数是hmp_savevm,loadvm则是hmp_loadvm, 对应的函数是 { .name = "savevm", .args_type = "name:s", .params = "[tag|id]", .help = "save a VM snapshot. If no tag or id are provided, a new snapshot is created", .mhandler....

在非虚拟化环境上,Linux的内存寻址就不多说了,不了解的参考Linux内存寻址,只提一下相关的权限检查,在分页机制上进行多级寻址,每次获取下一级地址都需要访问页表项的值进行计算,在读取之前,kernel会将页表项里面的权限值和当前访问线程的属性进行比较,如果不满足权限,则进行page_fault。基本页表项内容如下: ...

终于把KVM源代码分析3:CPU虚拟化写完了,虽然还有run的部分另外在写,还是先看一下内存虚拟化部分。 代码版本:https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git v3.16.37 在虚拟机的创建与运行中pc_init_pci负责在qemu中初始化虚拟机,内存初始化也是在这里完成的,还是一步步从qemu说起,...

终于把KVM源代码分析3:CPU虚拟化写完了,虽然还有run的部分另外在写,还是先看一下内存虚拟化部分。 代码版本:https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git v3.16.37 在虚拟机的创建与运行中pc_init_pci负责在qemu中初始化虚拟机,内存初始化也是在这里完成的,还是一步步从qemu说起,...

又一次开始土法炼钢了,测试部发现很多环境panic了,从黑匣子看到的信息是OOM了,虽然kill掉了占用比最大的进程,但是监控进程发现后reboot了单板。然后把meminfo收集到的信息,对比发现,slab增长的非常快,发现task_struct占用了很多,通过硬件中断和jprobe挂钩子发现是一个驱动访问所有进程的atomic_t usage,调用get...

13年的时候准备挖“KVM源代码分析”的坑,陆陆续续2年过去了,坑也没有填上,当时是因为对KVM了解的肤浅,真正的理解必然要深入到代码级别,所谓“摈弃皮毛,看到血肉,看到真相”,当时计划写KVM基本工作原理、虚拟机的创建、VCPU调度原理、KVM内存管理、KVM设备管理等,实际发现代码过程还是很多,估计后续会针对于不同的...

swap分区出现是因为硬件落后的时候,被OS设计人员搞出来承担一部分内存工作的,那时候的硬盘的速度和内存速度的差别对性能的影响还不明显,但随着现在高性能程序的要求,swap分区的读写速度严重影响了性能。 swappiness又被留出来作为控制swap使用程度的接口,关于/proc/sys/vm/swappiness的介绍wiki有 Swappiness is...