
QEMU-KVM虚拟化
文章平均质量分 70
luo_brian
这个作者很懒,什么都没留下…
展开
-
How to write QMP commands using the QAPI framework
https://github.com/qemu/qemu/blob/master/docs/writing-qmp-commands.txt= How to write QMP commands using the QAPI framework =This document is a step-by-step guide on how to write new QMP comm转载 2013-01-01 13:35:54 · 577 阅读 · 0 评论 -
Qemu-KVM Guest OS Time Tick Source (1)
一个操作系统要跑起来,必须有time tick,它就像是身体的脉搏。普通情况下,OS time tick由PIT(i8254)或APIC Timer设备提供—PIT定期(1ms in Linux)产生一个timer interrupt,作为global tick,APIC Timer产生一个local tick。在虚拟化情况下,必须为guest OS模拟一个PIT和APIC Timer。模拟的转载 2013-01-07 00:26:02 · 1118 阅读 · 0 评论 -
Qemu-KVM Guest OS Time Tick Source(2)
上一篇文章已经讨论过了在有内核模拟时钟情况下,kvm是如何给guest OS提供时钟源的。后面,我对Linux时间子系统做了一定的研究,体现在博文[Timer学习]系列,为了进一步加深理解,我就想,能不能把没有内核模拟时钟时,即原来Qemu用户空间模拟时钟的机制搞清楚。通过研究qemu-kvm-0.12.3代码,有了一定的认识,下面总结一下。 还是先来看一下Qemu用户态模转载 2013-01-07 00:28:42 · 751 阅读 · 0 评论 -
【QEMU-KVM代码分析之二】 Threading model & IO thread
目前Qemu 1.3.0的线程模型是这个样子的:每个vcpu是一个单独的thread; vcpu thread在VM_ENTER以后执行客户机代码, 在VM_EXIT以后根据退出原因执行PIO或者MMIO。一个独立的io线程,主要用来处理:轮询IO,包括定时信号 (alarm signalfd), AIO (eventfd), 并执行事件对应的回调函数(poll, read, w原创 2013-01-22 23:37:14 · 2913 阅读 · 1 评论 -
The Definitive KVM (Kernel-based Virtual Machine) API Documentation
The Definitive KVM (Kernel-based Virtual Machine) API Documentation===================================================================1. General description----------------------The kvm AP转载 2013-01-06 23:36:13 · 1298 阅读 · 0 评论 -
qemu-kvm-0.12.3主要函数路径
Entry point:main(vl.c) |kvm_init(qemu-kvm.c) -> machine->init(pc_init_pci in ./hw/pc.c)-> main_loop(vl.c) | |转载 2013-01-10 02:30:54 · 823 阅读 · 0 评论 -
kvm qemu内幕介绍
====================================目录1 硬件虚拟化技术背景2 KVM的内部实现概述 2.1 KVM的抽象对象 2.2 KVM的vcpu 2.3 KVM的IO虚拟化 2.3.1 IO的虚拟化 2.3.2 VirtIO3 KVM-IO可能优化地方 3.1 Virt-IO的硬盘优化转载 2013-01-10 02:33:02 · 1244 阅读 · 0 评论 -
【QEMU-KVM代码分析之一】 背景
把虚拟化平台尝试从从Xen切换到KVM已经有好几个月了,二者从架构,特性,性能等维度的优劣对比网上相关的文章很多,也不再重复了。KVM虽然好,但是我们对它还是不尽满意,原因有这么几个:1)代码结构:不管是还是QEMU还是KVM, 都被IBM严重绑架,这么说可能有点夸大其实,但是我至今也想不通有什么技术和架构原因QEMU需要将ppc和s390静态包含进来; 还有官方git的commit, p原创 2013-01-21 01:54:36 · 2259 阅读 · 3 评论 -
Linux 定时器
时间间隔定时器interval timer(时间间隔定时器)系统调用自从被POSIX标准化后,首次出现于4.2BSD,能够提供比alarm()还多的控制:#include int getitimer(int which, struct itimerval *value);int setitimer(int which, const struct itimerval *value转载 2013-01-20 04:34:43 · 441 阅读 · 0 评论 -
KVM Fault Tolerance: Kemari for KVM
It has been a while coming, but we have finally started work onKemari's port to KVM. For those not familiar with it, Kemari providesthe basic building block to create a virtualization-based faultto转载 2013-02-19 12:45:25 · 1402 阅读 · 1 评论 -
KVM性能分析工具
跟踪KVM事件# echo 1 >/sys/kernel/debug/tracing/events/kvm/enable# cat /sys/kernel/debug/tracing/trace_pipe[...] kvm-5664 [000] 11906.220178: kvm_entry: vcpu 0 kvm-5664 [0原创 2013-02-23 01:25:46 · 2081 阅读 · 0 评论 -
【QEMU-KVM代码分析之三】IO thread源码浅析之main loop
IO thread初始化Qemu IO thread初始化函数位于main-loop.c:int qemu_init_main_loop(void){ int ret; GSource *src; init_clocks(); if (init_timer_alarm() < 0) { fprintf(stderr, "co原创 2013-03-17 02:34:16 · 4469 阅读 · 1 评论 -
【KVM新概念】 - Exit-less Interrupt (ELI)
背景基于X86的虚拟化技术(intel vt-x),虚拟机可以通过主机或者直通的方式访问外部设备。两种方式都会造成一定的性能损耗,主要原因是外部设备中断的处理离不开主机的干预:当外部设备中断到达时,hypervisor中断客户机,并注入相应的虚拟中断;当客户机完成中断服务程序后,也需要退出到hypervisor, 向外部设备发送EOI (end of interrupt), 整个过程和bare原创 2013-03-18 14:17:41 · 1580 阅读 · 3 评论 -
【KVM新概念】 - Paravirtualized End-of-Interrupt Indication (PV-EOI)
背景X86 PC体系架构中的中断控制器,早先是8259A,现在更普遍使用的是APIC,他们处理中断的流程遵循如下流程:外部设备产生一个中断,如果该中断没有被屏蔽掉,中断控制器将IRR寄存器中相应的位置1,表示收到中断,但是还未提交给CPU处理;中断控制器将该中断提交给CPU,CPU收到中断请求后,会应答中断控制器;中断控制器收到CPU的中断应答后,将IRR寄存器中相应的位清0,并将原创 2013-04-01 00:27:03 · 2190 阅读 · 0 评论 -
【KVM新概念】 - 虚拟机CPU热拔插
背景CPU和内存热拔插其实很早被目前主流的操作系统支持了,微软从Windows Server 2008开始支持,Linux从3.2.0的内核开始支持。状态Qemu也是很早就规划了CPU热拔插特性,但是一直没有合入主干版本,因为实现中相关的bug和限制很多。最新的cpu热拔插分支是:https://github.com/imammedo/qemu/tree/cpu_add.v2,原创 2013-04-06 02:45:01 · 2099 阅读 · 0 评论 -
QEMU主要特性开发分支 (持续更新)
QEMU很多特性因为考虑到稳定性,兼容性等诸多因素,并没有合入主干版本,下面这些是当前更新比较频繁的git分支:主干分支:git://git.qemu.org/qemu.gitcpu热拔插:https://github.com/imammedo/qemu.git虚拟机热迁移优化:git://github.com/plieven/qemu.gitusb staging:git://git原创 2013-04-06 07:27:24 · 1175 阅读 · 0 评论 -
【KVM小技巧】- 虚拟磁盘瘦身 (Disk Shrink)
背景虚拟磁盘瘦分配(Thin Provisioning)可以大大节省存储空间,实现存储空间按需分配。但是因为客户机(Guest OS)删除文件的时候,仅仅只是把相应文件的inode做一个删除标识,而不会将其物理空间清零(Zero Filling)释放。所以从主机测看来,经常会看到,客户机中报告磁盘使用空间是1G,但是对应的虚拟镜像文件(vmdk, qcow2, vhd...)实际大小甚至会原创 2013-05-04 22:00:01 · 1954 阅读 · 0 评论 -
【RedHat OVirt 】Node Troubleshooting
如何解决文件系统只读问题Ovirt Node的根文件系统默认是只读的,如果需要对其进行修改,需要重新挂载为读写模式:# mount -o rw,remount /如何使用root密码登陆系统1. 找一台linux主机,执行: # openssl passwd ovirtnqsaxeG1J8l1U 2 启动景象,在boot menu的时候按键3. 将rootpw=原创 2013-06-15 14:10:16 · 841 阅读 · 0 评论 -
Inter-VM shared memory PCI device
Support an inter-vm shared memory device that maps a shared-memory objectas a PCI device in the guest. This patch also supports interrupts betweenguest by communicating over a unix domain socket.转载 2013-01-06 23:37:57 · 573 阅读 · 0 评论 -
Qemu-KVM TSC研究总结
响应延时的实时测试需要读TSC,但是这两天做实验发现一个很奇怪的问题,用VxWorks作为guest时,对于类似“tsc1=rdtsc;nanosleep(100);tsc2=rdtsc;” 的程序,tsc2却总是比tsc1要小了。而用Linux作为guest时,对于类似的程序,是没有问题的。那么,是否是kvm中对于TSC的处理有问题呢?带着这个问题,我把kvm-kmod-2.6.33.1中的TS转载 2013-01-07 00:31:59 · 1198 阅读 · 0 评论 -
Qemu-KVM Guest OS Time Tick Source (3)
在(1)中详细阐述了KVM是如何模拟内核PIT以及如何将timer中断注入到guest中去的。但是,那时对这一整套的机制理解还不够深,现在通过研究代码,理解又上升了一层,所以加深的总结一下。核心想搞清楚的问题是如下几个:1. 假如guest中设定PIT的频率为1000Hz,那么KVM如何为模拟PIT产生这个1000Hz的时钟源2. 当时钟周期到时,会产生物理中断,KVM是如何将这个物理转载 2013-01-07 00:31:07 · 743 阅读 · 0 评论 -
Timekeeping Virtualization for X86-Based Architectures
Timekeeping Virtualization for X86-Based Architectures Zachary Amsden Copyright (c) 2010, Red Hat. All rights reserved.1) Overview2) Timing Devices3) TSC Hardware4) Virtualization Pr转载 2013-01-01 02:28:51 · 544 阅读 · 0 评论 -
kvm-qemu 设备IO虚拟化
1. 虚拟设备的IO地址注册如我们所知,KVM虚拟机的设备模拟是在QEMU中实现的,而KVM实现的实质上只是IO的拦截。换句话说,真正的虚拟设备IO地址注册是在QEMU代码里面实现的。在QEMU中,在初始化我们的硬件设备的时候需要注册我们的IO空间,在这里有下面两种IO注册方法:(1) PIO(port IO) 端口IO(2) MIO(memory may IO)内存映射IO转载 2012-12-30 23:53:38 · 1289 阅读 · 0 评论 -
QEMU
KVM 是 Linux 內核的一個模組,它會以裝置 /dev/kvm 向外界提供它的功能。QEMU 透過ioctl 去讀寫該裝置請求 KVM 完成特定任務。KVM 主要的工作有兩個: 第一,它負責檢視客戶機 VM Exit 的原因並做相對應的處理; 第二,它負責透過 VM Entry 啟動客戶機。客戶機若因為操作 IO 而觸發 VM Exit,KVM 會轉交QEMU 完成 IO。整個 KVM转载 2013-01-02 00:50:34 · 668 阅读 · 0 评论 -
虚拟化原理之kvm
2.1 kvm技术基础KVM(kernel-based virtual machine)的名字,基于kernel的虚拟机,已经很准确的说出了kvm的设计思路:也就是依赖linux内核,完全利用linux内核来实现cpu的调度,内存管理的功能。而另一个开源虚拟机xen,则自己开发了一套底层操作系统功能。从vcpu调度到内存管理一应俱全。虽然xen这个系统也是基于linux的,但是发展路线不同,和转载 2013-01-01 02:19:28 · 2795 阅读 · 2 评论 -
qemu-kvm 中断虚拟化
中断,这个概念相信大家已经不陌生了,我也没什么资格来介绍中断,就简单的说一下。我认为它从宏观上看可以分为软件部分和硬件部分。软件部分:软件部分在操作系统中实现,如Linux中断的x86,每一个中断对应一个中断门,中断门中包含中断处理函数(ISR或者别的)地址,优先级等等。CPU可以通过LIDT加载这个描述符表,跳转到指定的中断门。硬件部分:中断硬件部分就是产生中断脉冲,传给中断控制转载 2012-12-30 23:58:02 · 736 阅读 · 0 评论 -
北桥. PCI. linux PCI中断处理
PCI bus 和北桥从上面linux内核暴露的数据看,几乎所有的设备都出现在PCI总线上. 从intel的芯片手册看来, 确实是这样的. 下面参考P35的芯片手册,大概学习一下.MCH的简介可以参考: http://en.wikipedia.org/wiki/Northbridge_(computing) MCH 负责 CPU, RAM, AGP, PCI (PCIE), s转载 2013-01-02 04:14:20 · 769 阅读 · 0 评论 -
PCI 中断路由
PCI中断路由机制PCI中断是可选的,中断是电平触发,低电平有效,集电极开路驱动。中断信号与PCI CLK异步,设备一旦断言为低,则要维持低电平状态,直到驱动程序清除这个中断请求。PCI中断可以为通过链的方式来共享。下文会仔细分析。1. PCI 中断的硬件组成如图1所示:在PCI 总线上中断请求信号引出脚有INTA# - INTD# 4个,单功能设备只能使用INTA#,而对于多功能设备转载 2013-01-02 02:55:24 · 545 阅读 · 0 评论 -
QEMU源码中一些有用的脚本
QMP/qom-listQEMU Monitor Protocol (QMP ) 是一个允许应用程序与QEMU 's Monitor通信的协议。qom-list是QMP下的一个脚本,这个命令会列出在device model中一个给定路径的设备的所有属性。参数是在device model中的路径,返回的是DevicePropertyInfo中所有属性。使用qom-list需要增加一个配置文件转载 2013-01-01 13:41:39 · 748 阅读 · 0 评论 -
Linux 内核中断内幕
什么是中断Linux 内核需要对连接到计算机上的所有硬件设备进行管理,毫无疑问这是它的份内事。如果要管理这些设备,首先得和它们互相通信才行,一般有两种方案可实现这种功能:轮询(polling) 让内核定期对设备的状态进行查询,然后做出相应的处理;中断(interrupt) 让硬件在需要的时候向内核发出信号(变内核主动为硬件主动)。第一种方案会让内核做不少的无用功,因为轮询总转载 2013-01-02 03:15:47 · 425 阅读 · 0 评论 -
QEMU的PCI总线与设备
最近研究了一下QEMU的虚拟PCI设备,打算虚拟一个PCI-PCI桥和一个PCI设备,设备挂在桥上,桥挂在pci主桥上。并且给设备固定映射一个IO基地址,但是发现还是件头疼的事情,经过几天的辛苦,终于算是有点收获,和大家分享一下,有什么问题希望大家支持,一起讨论,共同提高。 申明:本文主要针对x86架构进行说明。 1. PCI 结构简介为了大家更加容易的理解后文,先来回顾一下PCI转载 2012-12-31 00:13:11 · 972 阅读 · 0 评论 -
MSI Howto中文版
1. 什么是MSIMSI全称Message Signaled Interrupt。当设备向一个特殊地址写入时,会向CPU产生一个中断,即也MSI中断。MSI能力最初在PCI 2.2里定义,在PCI 3.0里被强化,使得每个中断都可以单独控制。PCI 3.0还引入了MSI-X能力,相比MSI,每个设备可以支持更多的中断,并且可以独立配置。设备可以同时支持MSI和MSI-X,但同一转载 2013-01-02 04:29:53 · 1145 阅读 · 0 评论 -
关于键盘(总论8042)
说到键盘就不得不先说“键盘控制器”。只有明确了键盘的工作原理和其的组成之后,才能进一步开始用代码的形式来用信息控制的方式表达。单片微处理器8042,大多集成在南桥中,控制整个键盘的工作。包括加电自检、键盘扫描码的缓冲以及与主板的通讯。8042分输入缓冲和输出缓冲,数据传输在I/O口的60h和64h进行,前者是数据口,后者是命令和状态口。从键盘输入到cpu读取,这中间要经过很多的过程,但是具转载 2013-01-03 03:00:23 · 1110 阅读 · 0 评论 -
Interrupt--PIC--APIC
Interrupt(中断)1. 概念所谓中断,是指CPU在正常执行程序的过程中,由于某个外部或内部事件的作用,强迫CPU停止当前正在执行的程序,转去为该事件服务(称为中断服务),待服务结束后,又能自动返回到被中断的程序中继续执行。2. 背景中断是计算机发展中一个重要的技术,它的出现很大程度上解放了CPU,提高了CPU的执行效率。在中断出现之前,CPU对IO采用的是轮询的方式进行转载 2013-01-03 06:06:15 · 533 阅读 · 0 评论 -
vhost architecture
The vhost drivers in Linux provide in-kernel virtio device emulation. Normally the QEMU userspace process emulates I/O accesses from the guest. Vhost puts virtio emulation code into the kernel, taking转载 2013-01-05 01:44:34 · 889 阅读 · 0 评论 -
vhost in qemu
vhost的用户态程序接口定义在/usr/include/linux/vhost.hvhost目前只支持tap network backendvhost.h/vhost.c------------------------------vhost的memory write log机制vhost使用一个bitmap记录对Guest物理内存的改变,每VHOST_LOG_转载 2013-01-05 01:45:18 · 1081 阅读 · 0 评论 -
qemu memory API
The memory API==============The memory API models the memory and I/O buses and controllers of a QEMUmachine. It attempts to allow modelling of: - ordinary RAM - memory-mapped I/O (MMIO)转载 2013-01-05 23:11:21 · 706 阅读 · 0 评论 -
QEMU treading model
without pausing guest execution if a disk I/O or monitor command takes a long time to complete. There are two popular architectures for programs that need to respond to events from multiple sources:转载 2013-01-05 21:48:27 · 496 阅读 · 0 评论