KVM,QEMU核心分析
现在的问题是学习虚拟化软件KVM相关实施原则、处理,的源代码的分析总结,,若有不对的地方,希望大家提出。
因为有一些代码结构图或者是架构图上传比較麻烦。所以博文都放在了自己的个人博客上。麻烦大家移步查看:
总入口:我的个人blog:http://www.royluo.org
文章列表(可直接点击进入)
依据这段时间对Linux KVM的研究。现将KVM的安装与Virtual OS的启动进行总结说明。【点击查看完整文章】
《kvm安装与启动过程说明》进行了通用桌面系统的虚拟机安装。
在本文中将介绍自行编译linux Kernel内核源代码,无桌面OS虚拟机安装和启动。为兴许内核调试打下基础。
传统OS环境中,CPU对内存的訪问都必须通过MMU将虚拟地址VA转换为物理地址PA从而得到真正的Physical Memory Access,即:VA->MMU->PA。
虚拟执行环境中因为Guest OS所使用的物理地址空间并非真正的物理内存,而是由VMM供其所使用一层虚拟的物理地址空间,为使MMU可以正确的转换虚实地址,Guest中的地址空间的转换和訪问都必须借助VMM来实现,这就是内存虚拟化的主要任务。即:GVA->MMU
Virtualation->HPA。【点击查看完整文章】
在嵌套虚拟环境(Nested Virtualization)下,执行在hypervisor上的Virtual Machine仍能够作为hypervisor去执行其他的Virutal Machine,而KVM也支持了这样的强大的特性。而在《KVM硬件辅助虚拟化之 EPT》一文中,我们具体分析了单层虚拟机并引入硬件辅助虚拟化EPT功能的环境下,Guest OS中的虚拟地址到真实物理地址的訪问方法,即在EPT页表的帮助下,通过二维的页表机制。终于实现GVA到HPA的转换。那么在多层嵌套虚拟机情况下,EPT又是怎样发挥作用的呢?【点击查看完整文章】
Xen, KVM等。
而本文的主要内容是介绍KVM。【点击查看完整文章】
前端网络流的建立; 2. 虚拟网卡的创建; 3. 网络I/O虚拟化 in Guest OS。
本篇主要讲述“前端网络流的建立”。
上文针对Qemu在前端网络流路径的建立方面做了具体的描写叙述,数据包从Host的物理网卡经过Host Linux内核中的Bridge, 经过Tap设备到达了Qemu的用户态空间。而Qemu是怎样把数据包送进Guest中的呢。这里必定要说到到虚拟网卡的建立。
当命令行传入nic相关參数时,Qemu就会解析网络相关的參数后进入虚拟网卡的创建流程。而在上文中提到对于全部-net类型的设备。都视作一个net client来对待。而在net client的建立之前,须要先创建Qemu内部的hub和相应的port,来关联每个net client,而对于每个创建的-net类型的设备都是能够能够配置其接口的vlan号。从而控制数据包在当中配置的vlan内部进行转发,从而做到多个虚拟设备之间的switch。【点击查看完整文章】
OS中进进出出的呢,本文就是重点讲述Guest OS的数据包的收发路径。当中涉及到一个重要的虚拟化技术。即I/O虚拟化.【点击查看完整文章】
1. Xen
2. KVM
3. VMware's VMI
4. IBM's System p
5. IBM's System z
6. User Mode Linux
7. lguest
8. IBM's legacy iSeries
而新的系统也在不断的涌现。各个系统在网络设备、块设备、console及其他设备驱动在新特性支持和性能优化方面存在着瓶颈。
为解决这些问题,Rusty Russell开发了virtio机制,其是一个在hypervisor之上的抽象API接口,让客户机知道自己执行在虚拟化环境中。从而与hypervisor依据virtio标准协作,从而在Guest中达到更好的性能(特别是I/O性能),关于virtio在其论文中如此定义:【点击查看完整文章】
bus类型总线上,并由virtio driver来驱动。
virtio设备对于Linux Kernel中的设备类型来说是作为pci设备被使用的,因此具有pci设备的全部属性,所以其也具备了PCI配置空间。【点击查看完整文章】
KVM上设备I/O虚拟化的性能问题长期存在,此时由Rusty Russell开发的virtio引起了开发人员们的注意并逐渐被KVM等虚拟化平台接纳并作为了其I/O虚拟化最基本的一个通用框架。
Virtio使用virtqueue来实现其I/O机制,每一个virtqueue就是一个承载大量数据的queue。
vring是virtqueue的详细实现方式。【点击查看完整文章】
userspace的第二次拷贝,这样的多次的数据拷贝和CPU特权级的切换对性能有相当大的影响。为加速virtio设备的I/O性能,VHOST通过driver的形式在Host Kernel中直接实现了virtio设备的模拟。通过在Host Kernel中对virtios设备的模拟执行同意Guest与Host Kernel直接进行数据交换,从而避免了用户空间的system call与数据拷贝的性能消耗。【点击查看完整文章】
。
KVM,QEMU核心分析的更多相关文章
- KVM+QEMU虚拟化概念
概念: KVM,即Kernel-basedvirtual machine,由redhat开发,是一种开源.免费的虚拟化技术.对企业来说,是一种可选的虚拟化解决方案. 定义:基于Linux内核的虚拟机 ...
- 深入浅出 kvm qemu libvirt
在所谓的kvm技术中,应用到的其实有2个东西:qemu+kvmkvm负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但kvm不能模拟其他设备:qemu是模拟IO设备(网卡,磁盘),kvm加上 ...
- KVM/QEMU/qemu-kvm/libvirt 概念全解
目录 目录 前言 KVM QEMU KVM 与 QEMU qemu-kvm Libvirt Libvirt 在 OpenStack 中的应用 前言 如果是刚开始接触虚拟机技术的话, 对上述的概念肯定会 ...
- gentoo在KVM+QEMU中安装笔记
gentoo是比较难安装的,本笔记主要是记录本次安装过程,以备参考. 1.首先,下载镜像,可以去国内各大镜像网站下载,我选择的是清华的镜像源:https://mirrors.tuna.tsinghua ...
- KVM/QEMU桥接网络设置及kvm资料
KVM/QEMU桥接网络设置 配置kvm的网络有2种方法.其一,默认方式为用户模式网络(Usermode Networking),数据包由NAT方式通过主机的接口进行传送.其二,使用桥接方式(Brid ...
- KVM+Qemu+Libvirt实战
上一篇的文章是为了给这一篇文件提供理论的基础,在这篇文章中我将带大家一起来实现在linux中虚拟出ubuntu的server版来 我们需要用KVM+Qemu+Libvirt来进行kvm全虚拟化,创建虚 ...
- ChIP-seq 核心分析 下游分析
http://icb.med.cornell.edu/wiki/index.php/Elementolab/ChIPseeqer_Tutorial [怪毛匠子 整理] ChIP-seq[核心分析 下游 ...
- kvm/qemu虚拟机桥接网络创建与配置
首先阐述一下kvm与qemu的关系,kvm是修改过的qemu,而且使用了硬件支持的仿真,仿真速度比QEMU快. 配置kvm/qemu的网络有两种方法.其一,默认方式为用户模式网络(Usermode N ...
- IDC机房KVM应用案例分析
IDC机房KVM应用案例分析 一.背景介绍 随着信息技术的发展,各行各业都在马不停蹄的开展着各自的信息化建设步伐.对于设计制造创新科技产品为运行主业的设计院而言,内部IT基础设备与机房管理结构的完善与 ...
随机推荐
- 1.1 Introduction中 Distribution官网剖析(博主推荐)
不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Distribution 分布式(Distribution) The partiti ...
- ORACLE11g R2【RAC+ASM→RAC+ASM】
ORACLE11g R2[RAC+ASM→RAC+ASM] 本演示案例所用环境:RAC+ASM+OMF primary standby OS Hostname node1,node2 dgnode ...
- Cscope how to support java and c++
Cscope 首先在文件夹下建立cscope索引文件 find -name '*.c' > cscope.file cscope -Rbkq 这个命令会生成三个文件:cscope.out, cs ...
- CNTK 搞深度学习-1
CNTK 搞深度学习 Computational Network Toolkit (CNTK) 是微软出品的开源深度学习工具包.本文介绍CNTK的基本内容,如何写CNTK的网络定义语言,以及跑通一个简 ...
- 9.11 Binder系统_分层
1.Binder系统过程分析,情景分析 server提供服务 (1)addService(服务名称,xxx)执行后会导致binder驱动在server的内核空间为服务创建一个binder_node结构 ...
- MySQL数据导出导入任务脚本
#!/usr/bin/env python#-*- encoding: utf8 -*- import timeimport osimport mysql.connector #定义一些全局变量 w ...
- 数学之路-python计算实战(5)-初识numpy以及pypy下执行numpy
N .有用的线性代数.傅里叶变换和随机数生成函数.numpy和稀疏矩阵运算包scipy配合使用更加方便.NumPy(Numeric Python)提供了很多高级的数值编程工具,如:矩阵数据类型.矢量处 ...
- 分层抽样(Stratified sampling)
1. 基本概念 统计学理论中,分层抽样针对的是对一个总体(population)进行抽样的方法.尤其适用于当总体内部,子总体(subpopulations)间差异较大时.每一个 subpopulati ...
- stm32 DMA+timer+DAC
是有延迟的:
- Mysql错误: ERROR 1205: Lock wait timeout exceeded解决办法(MySQL锁表、事物锁表的处理方法)
Java执行一个SQL查询未提交,遇到1205错误. java.lang.Exception: ### Error updating database. Cause: java.sql.SQLExc ...