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脚本生成的
[crayon-6006a1a8e9cc6327446793/]
QOM在预处理的初始化过程中会注册很多设备类型,具体object树状图如下:
[crayon-6006a1a8e9cd7780251685/]
看Google analytics分析的时候,突然想到之前的一件事,那就是360刚刚做搜索的时候,很多人质疑它宣布的15%的市场占比,后来360股价暴涨后,想到使用CNZZ统计数据的估计能提前预知到这点吧,于是我把最近一段时间内的访问者信息抽象出来,发现了很多有意思的事情。
首先要明确博客受众主要是Linux内核和虚拟化开发人...
代码版本: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是网络设备初...
kernel源代码版本:git-v3.16.39
1.初始化
e1000_init_module下pci_register_driver注册驱动,
[crayon-6006a1a8ebc03917606584/]
在e1000_probe下,e1000_is_need_ioport为真时,执行
[crayon-6006a1a8ebc18427252246/]
这两个ops如下:
[crayon-6006a1a8ebc1c225962034/]
二,网络设备打开
e1000_open是属于e...
问题不是出在upstream的版本上,而是内部开发的一个产品。在KVM这个系统里面,很多时候牵一发动全身,某些改动貌似是正确的,其实则不然,内核的其他模块也是类似的系统化,Jike说的“正是内核的开发门槛很高才保证了内核当前的质量”也是有道理的。
进入正题,产品要求VCPU进入guest之前需要等待响应,当存在响应的时...
代码版本:linux-git v4.10.0-rc3
1.kvm clock时钟
[crayon-6006a1a8ecf22609038322/]
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...
一. epoll用户态使用规范
epoll有2种工作方式:LT和ET。
LT(level triggered,水平触发)是缺省的工作方式,并且同时支持block和no-block socket.在这种做法中,内核告诉你一个文件描述符是否就绪了,然后你可以对这个就绪的fd进行IO操作。如果你不作任何操作,内核还是会继续通知你的,所以,这种模式编程出错误可...
代码版本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...