kvm中到底是怎么模拟的CPU和内存?

收到了大量的

这里有一个裸的调用kvm接口的实例,超赞:

使用kvm的API来实现Emulator Demo,同样赞:

//-----2017.12.17  打开tracepoint,这是研究kvm的好方法:

qemu-system-x86-10102 [001] d... 13485.390144: kvm_entry: vcpu 0
qemu-system-x86-10102 [001] .N.. 13485.393300: kvm_exit: reason EXTERNAL_INTERRUPT rip 0x4009b2 info 0 800000ef
qemu-system-x86-10102 [001] d... 13485.393301: kvm_fpu: unload
qemu-system-x86-10102 [001] .... 13485.401393: kvm_ple_window: vcpu 0: ple_window 4096 (shrink 4096)
qemu-system-x86-10102 [001] .... 13485.401398: kvm_fpu: load
qemu-system-x86-10102 [001] .... 13485.401399: kvm_apic_accept_irq: apicid 0 vec 239 (Fixed|edge)
qemu-system-x86-10102 [001] .... 13485.401400: kvm_inj_virq: irq 239
qemu-system-x86-10102 [001] d... 13485.401401: kvm_entry: vcpu 0
qemu-system-x86-10102 [001] .... 13485.401419: kvm_eoi: apicid 0 vector 239
qemu-system-x86-10102 [001] .... 13485.401419: kvm_pv_eoi: apicid 0 vector 239
qemu-system-x86-10102 [001] .... 13485.401420: kvm_exit: reason MSR_WRITE rip 0xffffffff81064508 info 0 0
qemu-system-x86-10102 [001] .... 13485.401421: kvm_apic: apic_write APIC_TMICT = 0xafd2
qemu-system-x86-10102 [001] .... 13485.401422: kvm_msr: msr_write 838 = 0xafd2
qemu-system-x86-10102 [001] d... 13485.401422: kvm_entry: vcpu 0
qemu-system-x86-10102 [001] .... 13485.402142: kvm_exit: reason EXTERNAL_INTERRUPT rip 0x4009b2 info 0 800000ef
qemu-system-x86-10102 [001] .... 13485.402142: kvm_apic_accept_irq: apicid 0 vec 239 (Fixed|edge)
qemu-system-x86-10102 [001] .... 13485.402143: kvm_inj_virq: irq 239
qemu-system-x86-10102 [001] d... 13485.402143: kvm_entry: vcpu 0
qemu-system-x86-10102 [001] .... 13485.402146: kvm_eoi: apicid 0 vector 239
qemu-system-x86-10102 [001] .... 13485.402146: kvm_pv_eoi: apicid 0 vector 239
qemu-system-x86-10102 [001] .... 13485.402146: kvm_exit: reason MSR_WRITE rip 0xffffffff81064508 info 0 0
qemu-system-x86-10102 [001] .... 13485.402146: kvm_apic: apic_write APIC_TMICT = 0x3cee0
qemu-system-x86-10102 [001] .... 13485.402146: kvm_msr: msr_write 838 = 0x3cee0
qemu-system-x86-10102 [001] d... 13485.402147: kvm_entry: vcpu 0
qemu-system-x86-10102 [001] .N.. 13485.403339: kvm_exit: reason EXTERNAL_INTERRUPT rip 0x4009b2 info 0 800000ef
qemu-system-x86-10102 [001] d... 13485.403341: kvm_fpu: unload
qemu-system-x86-10102 [001] .... 13485.403521: kvm_ple_window: vcpu 0: ple_window 4096 (shrink 4096)
qemu-system-x86-10102 [001] .... 13485.403523: kvm_fpu: load
qemu-system-x86-10102 [001] d... 13485.403523: kvm_entry: vcpu 0
qemu-system-x86-10102 [001] .N.. 13485.404571: kvm_exit: reason EXTERNAL_INTERRUPT rip 0x4009b2 info 0 800000ef
qemu-system-x86-10102 [001] d... 13485.404573: kvm_fpu: unload
qemu-system-x86-10102 [001] .... 13485.406671: kvm_ple_window: vcpu 0: ple_window 4096 (shrink 4096)
qemu-system-x86-10102 [001] .... 13485.406676: kvm_fpu: load
qemu-system-x86-10102 [001] .... 13485.406677: kvm_apic_accept_irq: apicid 0 vec 239 (Fixed|edge)
qemu-system-x86-10102 [001] .... 13485.406679: kvm_inj_virq: irq 239
qemu-system-x86-10102 [001] d... 13485.406680: kvm_entry: vcpu 0
qemu-system-x86-10102 [001] .... 13485.406702: kvm_eoi: apicid 0 vector 239
qemu-system-x86-10102 [001] .... 13485.406703: kvm_pv_eoi: apicid 0 vector 239
qemu-system-x86-10102 [001] .... 13485.406704: kvm_exit: reason MSR_WRITE rip 0xffffffff81064508 info 0 0
qemu-system-x86-10102 [001] .... 13485.406706: kvm_apic: apic_write APIC_TMICT = 0x34720
qemu-sys

神秘的kvm,服务器端直接运行在,guest按理说也是要有中断的:

   39839 __apic_accept_irq ([kvm])
3aa20 kvm_apic_local_deliver ([kvm])
3ac7d kvm_inject_apic_timer_irqs ([kvm])
3824e kvm_inject_pending_timer_irqs ([kvm])
1ebfe kvm_arch_vcpu_ioctl_run ([kvm])
610d kvm_vcpu_ioctl ([kvm])
4200ff do_vfs_ioctl ([kernel.kallsyms])
420369 sys_ioctl ([kernel.kallsyms])
a244f2 entry_SYSCALL_64_fastpath ([kernel.kallsyms])

关键函数是

kvm是如何模拟时钟中断的?

kvm_create_pit   create_pit_timer

kvm_create_

有专门的一章,是讨论中断的虚拟化;

还要个超有意思的函数是:kvm_msr事件,

kvm搭建完成了,那么问题来了,到底是什么原理的更多相关文章

  1. kvm 搭建

    一,准备环境   物理机 虚拟机 操作系统 CentOS 6.8 x64 CentOS 6.8 x64 CPU/内存 10核超线程x2/64G 2核/4G 外网IP -- 内网IP eth1_192. ...

  2. Centos7利用kvm搭建Windows虚拟机

    这几天玩了一下kvm虚拟化,真的很有意思,我把这几天踩的坑,还有收获,都记录下来,作为以后的复习和检查. 首先说一下我的基本逻辑,我有一台win7的笔记本,我的底层虚拟化是使用VMWare构建的Cen ...

  3. Liunx之KVM搭建图形化的WEB

    作者:邓聪聪 我们常在Windowns下使用VMware,当然在Liunx中也有这样的软件供我们使用.生产环境的KVM宿主机越来越多,需要对宿主机的状态进行调控.这里用webvirtmgr进行管理.图 ...

  4. kvm搭建

    今日做公司项目时恰好是这个,然后就做一个博客,希望可以帮助到你们 1.把虚拟机zmedu63内存调成6G以上,因为我们要在VMware虚拟中安装KVM,然后在KVM中再安装虚拟机,需要内存大一些.zm ...

  5. 基于C语言的Socket网络编程搭建简易的Web服务器(socket实现的内部原理)

    首先编写我们服务器上需要的c文件WebServer.c 涉及到的函数API: int copy(FILE *read_f, FILE * write_f) ----- 文件内容复制的方法 int Do ...

  6. ubuntu配置kvm服务

    虚拟化第一弹,lei了lei了~ 首先,简单介绍一下KVM服务. KVM 全称是 Kernel-Based Virtual Machine,它是一种常用的虚拟化工具.是基于linux内核所开发的虚拟平 ...

  7. 【日记】搭建一个node本地服务器

    用node搭建一个本地http服务器.首先了解htpp服务器原理 HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端.HTTP协议采用了请求/响应模型 ...

  8. KVM 介绍(1):简介及安装

    学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...

  9. 搭建PHP建站环境

    PHP是一种网站后端脚本语言,通常在web开发中使用apache+PHP+MYSQL这种黄金搭档来建立支持PHP的站点,PHP运行环境或者说任何技术的运行环境都不是简单的加法,即使是安装有apache ...

随机推荐

  1. 前端jQuery之属性操作

    属性操作主要分为四个部分:html属性操作,dom属性操作,类样式操作和值操作 HTML属性操作:属性的读取,设置,以及移除,如attr().removeAttr() DOM属性操作:属性的读取,设置 ...

  2. H5新增的Web Storage本地存储

    html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage. sessionStorage用于本地存储一个会话(session)中的数据,这些数据只 ...

  3. MySQL - Mac下安装MySQL

    1. 去官网下载dmg的安装文件. 2. 下载完成后,运行安装文件,按步骤进行安装,安装完成后会弹出一个框显示临时密码! 3. 编辑~/.bashrc文件,配置快速启动/停止/重启/cdhome/别名 ...

  4. Linux文件服务器实战(系统用户)

    ftp匿名用户设置完成之后任何人都可以访问服务器端文件,目录,甚至可以修改删除文件和目录,,那如何存放私密文件并保证文件或者目录专属于拥有者呢,就需要使用vsftp系统用户来实现了. 1.在linux ...

  5. 读键值对封装成Map

    描述: 有配置文件address_relation.properties,记录地址关系,有如下数据:ZSSS=ZS%,ZSPD, 封装到Map代码如下: public static void main ...

  6. 项目配置中 提示access denied的问题 解决方案

    项目配置中 提示access denied的问题,一般原因是你的服务器或虚拟主机的pathinfo没开.... 具体解决办法如下 在PHP安装文件夹下找到php.ini.在文件中搜索cgi.fix_p ...

  7. php扩展开发-常量

    //常量在内核中的结构 typedef struct _zend_constant { zval value; int flags; char *name; uint name_len; int mo ...

  8. Git版本控制使用方法入门教程

    1. 概述 对于软件版本管理工具,酷讯决定摒弃CVS而转向Git了. 为什么要选择Git? 你真正学会使用Git时, 你就会觉得这个问题的回答是非常自然的.然而当真正需要用文字来回答时,却觉得文字好像 ...

  9. 超简单开发自己的php框架一点都不难

    (转)https://blog.csdn.net/qq_33862644/article/details/79344331 写框架的极简思路: 接收,打印参数想怎么弄.如 获取配置文件的方法,根据传过 ...

  10. 图解HTTP总结(2)——简单的HTTP协议

    HTTP协议是一种不保存状态,即无状态(stateless)协议.HTTP协议自身不对请求和响应之间的通信状态进行保存.也就是说在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理. 使用H ...