博客访问者的一些有趣数据

看Google analytics分析的时候,突然想到之前的一件事,那就是360刚刚做搜索的时候,很多人质疑它宣布的15%的市场占比,后来360股价暴涨后,想到使用CNZZ统计数据的估计能提前预知到这点吧,于是我把最近一段时间内的访问者信息抽象出来,发现了很多有意思的事情。 首先要明确博客受众主要是Linux内核和虚拟化开发人...

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是网络设备初...

Linux E1000网络驱动源代码分析

kernel源代码版本:git-v3.16.39 1.初始化 e1000_init_module下pci_register_driver注册驱动, static struct pci_driver e1000_driver = { .probe    = e1000_probe, .remove   = e1000_remove, .shutdown = e1000_shutdown, }; 在e1000_probe下,e1000_is_need_ioport为真时,执行 //PCI 6个bar空间...

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

epoll的linux内核工作机制

一. epoll用户态使用规范 epoll有2种工作方式:LT和ET。 LT(level triggered,水平触发)是缺省的工作方式,并且同时支持block和no-block socket.在这种做法中,内核告诉你一个文件描述符是否就绪了,然后你可以对这个就绪的fd进行IO操作。如果你不作任何操作,内核还是会继续通知你的,所以,这种模式编程出错误可...

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

KVM源代码分析5:IO虚拟化之PIO

源代码:git tag, kernel v3.16.37 qemu v2.7 ,上一篇:KVM源代码分析4:内存虚拟化–OenHan 1. PIO指令介绍 80386的I/O指令使得处理器可以访问I/O端口,以便从外设输入数据,或者向外设发送数据。这些指令有一个指定I/O空间端口地址的操作数。有两类的I/O指令: 1、 在寄存器指定的地址传送一个数据(字节、字、双字)。...

qemu tcg translation block机制

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