[转] KVM虚拟化技术生态环境介绍
KVM虚拟化技术生态环境介绍
http://xanpeng.github.io/wiki/virt/kvm-virtulization-echosystem-intro.html
kvm和qemu/qemu-kvm的关系
qemu vs. qemu-kvm:
- 从qemu 1.3开始,kvm userspace code就维护在qemu mainline中(git clone https://git.kernel.org/pub/scm/virt/kvm/qemu-kvm.git, ref)
- qemu: http://git.qemu.org/?p=qemu.git;a=tags
- qemu-kvm: http://git.kernel.org/cgit/virt/kvm/qemu-kvm.git/refs/tags
- 从qemu release_0_5_1开始fork: http://git.kernel.org/cgit/virt/kvm/qemu-kvm.git/commit/?id=be26a5288e43d3177908a92251c526d54fbb936d
- 合入qemu v1.3.0: http://git.qemu.org/?p=qemu.git;a=commit;h=cab1e8f3e37d8e883c270e3afd9c7c1c18332f0e "as of the 1.3 release all qemu-kvm features have been merged into upstream QEMU"( http://wiki.qemu.org/KVM)
- 示意图:
qemu vs. kvm:
- QEMU by itself isn't very fast, as it does a lot of emulation even when running on the hardware compatible with the guest operating system. To make it perform better, QEMU has a kernel module called KVM that allows much of the guest OS's code to run directly on the host processor when running on x86 or x86-64 processors with virtualisation extensions under Linux.
- kvm位于内核中,git clone https://git.kernel.org/pub/scm/virt/kvm/kvm.git.
kvm架构和细节
KVM (Kernel-based Virtual Machine), by RedHat.
- 利用现代CPU虚拟化技术,Intel-VT,AMD-V
- 用户态driver是qemu,通过用户态driver使用processor
- hardware layer是由qemu模拟的
- kvm也可以不使用CPU虚拟化技术,不过那样的话,相当于通过qemu做完全模拟
kvm @kernel:
- kvm core framework
- virt/kvm/* 7309
- arch related kvm codes
- arch/x86/kvm/* 37076
- arch/arm/kvm/* 7751
- arch/powerpc/kvm/* 29307
- arch/s390/kvm/* 4198
- arch/ia64/kvm/* 12328
- arch/mips/kvm/* 5628
- arch/tile/kvm/* 37
- drivers/s390/kvm/* 1447
- kvm header files
- arch//include/asm/kvm 7179
- include/linux/kvm 1238
- include/asm-generic/kvm 21
- kvm docs
- Documentation/virtual/kvm/* 4774
- Documentation//kvm.txt 249
qemu架构和细节
- 安装需要的库:glib-2.12(http://www.gtk.org/download/linux.php)
- 可以模拟一个OS,可以不需要KVM:
- modprobe -r kvm
- qemu-system-x86_64 -name "qemutest" -M pc-0.12 -m 1024 -smp 2 -boot d -drive file=/home/root/kvm/images/opensuse11/disk0.raw,if=virtio,index=0,media=disk,format=raw -drive file=/dev/sr0,index=1,media=cdrom -net nic,model=virtio,macaddr=52:54:00:05:11:11 -vga cirrus -balloon virtio
- lsmod | grep kvm发现kvm.ko没有加载
- 系统在运行,简单凭感觉启动速度和执行速度都要比kvm虚拟机慢
- 支持的image格式(http://en.wikibooks.org/wiki/QEMU/Images#Image_types):
- qcow2: "native" and most flexible, (cow, encryption, compression, vm snapshots)
- raw: plain binary image of disc image
- cow: copy-on-write format, 因历史原因而支持
- qcow: 老版QEMU cow格式,已经被qcow2取代
- vmdk: VMWare 3/4/6 image格式
- vdi: VirtualBox 1.1 image格式
- 使用Windows vm:
- 制作Win7 vm image(http://en.wikibooks.org/wiki/QEMU/Images#Creating_an_image)
- qemu-img create -f qcow2 win7-x86_64-sp1.img 16G (要求>8576M)
- 插入win7的安装光盘
- qemu-system-x86_64 -m 2048 -hda win7-x86_64-sp1.img -cdrom /dev/sr0 -boot d (对内存大小有限制),开始正常的系统安装过程
- 安装完成,在vm内部关机。得到可运行的win7 image,大小为7.4G
- 启动win7 vm:qemu-system-x86_64 -m 2048 win7-x86_64-sp1.img
- 配置
- 制作Win7 vm image(http://en.wikibooks.org/wiki/QEMU/Images#Creating_an_image)
qemu-1.5.1:
- 主程序相关:vl.c, cpu-exec.c, exec.c, translate-all.c, thunk.c, disas.c
- 指令翻译:tcg/
- 硬件模拟:hw/
- 网络传输:slirp/
- image protocol:block/
- block/sheepdog.c
- block/rbd.c
sheepdog, rbd如何被支持:
- libvirt xml文件里写sheepdog/rbd
- libvirt解析xml,向qemu发送对应的命令
- qemu调用sheepdog/rbd driver
libvirt所处的位置、架构和实现
libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和API,而且一些常用的虚拟机管理工具(如virsh、virt- install、virt-manager等)和云计算框架平台(如OpenStack、OpenNebula、Eucalyptus等)都在底层使用 libvirt的应用程序接口。
libvirt是为了更方便地管理平台虚拟化技术而设计的应用程序接口、守护进程和管理工具。它提供的功能:
- 对虚拟化客户机的管理
- 对虚拟化网络和存储的管理
- 支持多种虚拟化方案,包括KVM、QEMU、Xen、VMware、VirtualBox等在内的平台虚拟化方案
- 支持OpenVZ、LXC等Linux容器虚拟化系统
- 支持用户态Linux(UML)的虚拟化
- 提供了为基于AMQP(高级消息队列协议)的消息系统(如Apache Qpid)提供QMF代理,这可以让云计算管理系统中宿主机与客户机、客户机与客户机之间的消息通信变得更易于实现
- 为安全的远程管理虚拟客户机提供了加密和认证等安全措施
代码特性:
- 提供了一套较为稳定的C语言应用程序接口
- 其他一些流行的编程语言中也提供了对libvirt的绑定,在Python、Perl、Java、Ruby、PHP、OCaml等高级编程语言中已经有libvirt的程序库可以直接使用
- 对多种不同的Hypervisor的支持是通过一种基于驱动程序的架构来实现的,在libvirt源代码中,可以很容易找到 qemu_driver.c、xen_driver.c、xenapi_driver.c、vmware_driver.c、vbox_driver.c 这样的驱动程序源代码文件
- 几个重要的概念:Node、Domain、Hypervisor,node表示物理节点,domain表示运行的OS实例。
- 管理功能:
- 域的管理:启动、停止、暂停、保存、恢复和动态迁移;对多种设备类型的热插拔操作,包括磁盘、网卡、内存和CPU;...
- 远程节点的管理
- 存储的管理:创建不同格式的客户机镜像;挂载NFS共享存储系统、查看现有的LVM卷组、创建新的LVM卷组和逻辑卷、对磁盘设备分区、挂载iSCSI共享存储
- 网络的管理:列出现有的网络接口卡,配置网络接口,创建虚拟网络接口,网络接口的桥接,VLAN管理,NAT网络设置,为客户机分配虚拟网络接口
社区特点:
- 免费的开源的软件,使用的许可证是LGPL,使用libvirt库进行链接的软件程序不需要一定选择开源和遵守GPL许可证。
- 目前,libvirt的开发主要由Redhat公司作为强大的支持,由于Redhat公司在虚拟化方面逐渐偏向于支持KVM(而不是Xen),故libvirt对QEMU/KVM的支持非常成熟和稳定
- IBM、Novell等公司以及众多的个人开发者,对libvirt项目的代码贡献量非常大
资料:
1、slide: KVM, KERNEL-BASED VIRTUAL MACHINE, Internals, code and more,有十分清晰的示意图。
2、slide: KVM: Virtualisation The Linux Way,偏重背景介绍。
3、Chris Wright@RedHat: KVM: Linux-based Virtualization,概要介绍。
[转] KVM虚拟化技术生态环境介绍的更多相关文章
- KVM虚拟化技术
KVM虚拟化技术 Qemu-kvm kvm virt-manager VNC Qemu-kvm创建和管理虚拟机 一.KVM简介 KVM(名称来自英语:Kernel-basedVirtual Machi ...
- Office 365开发概述及生态环境介绍(二)
本文于2017年3月19日首发于LinkedIn,原文链接在这里 在上一篇 文章,我给大家回顾了Office发展过来的一些主要的版本(XP,2003,2007,2013等),以及在Office客户端中 ...
- KVM虚拟化技术(二)KVM介绍
KVM:Kernel Virtual Machine KVM是基于虚拟化扩展的x86硬件,是Linux完全原生的全虚拟化解决方案.部分半虚拟化支持,主要是通过半虚拟网络驱动程序的形式用于Linux和W ...
- Office 365开发概述及生态环境介绍(一)
原文于2017年3月13日首发于LinkedIn,请参考这个链接 离上一篇文章,很快又过去了两星期的时间.今天抓紧晚上的时间,开始了Office 365开发系列文章的第一篇,我会帮助大家回顾一下过去O ...
- KVM虚拟化技术(一)虚拟化简介
一 .虚拟化 虚拟化是指计算机元件在虚拟的基础上而不是真实的基础上运行.虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程.CPU的虚拟化技术可以单CPU模 拟多CPU并行,允许一个平台同时运行多个 ...
- KVM虚拟化技术(七)虚拟机配置文件
KVM虚拟机的配置文件在/etc/libvirt/qemu/下,为xml文件 整体结构如下: <domain type='kvm'> 虚拟机整体信息 系统信息 硬件资源特性 突发事件处理 ...
- KVM 虚拟化技术
1.1 前言 1.1.1 什么是虚拟化? 在计算机技术中,虚拟化(技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU.内存.磁盘空间.网络适配器 ...
- KVM虚拟化技术实战全过程
今天准备开始.................... centos安装-kvm 教程: http://www.linuxidc.com/Linux/2017-01/140007.htm http:// ...
- kvm 虚拟化技术 1.1 安装
1.·VMware开启虚拟化设置 2.安装一些虚拟化的必备插件 yum install -y qemu-kvm qemu-kvm-tools libvirt virt-manager virt-ins ...
随机推荐
- idea 用tomcat运行javaWeb
指定tomcat在计算机的安装位置: 给项目加一个启动配置: 添加一个本地tomcat: 配置这个本地tomcat: 运行方面:
- PCIE 3.0中使用的动态均衡概念
一.PCIE 3.0中使用的动态均衡概念 因为PCIE 3.0信号的速率可以达到8Gb/s,而且链路通道走线也可能会很长,这可能会导致高速信号衰减过大,在接收端无法得到张开的眼图.因此在PCIE 3. ...
- linux下进程绑定cpu情况查看的几种方法
1.pidstat命令 查看进程使用cpu情况,如果绑定了多个cpu会都显示出来 pidstat -p `pidof 进程名` -t 1 2.top命令 (1)top (2)按f键可以选择下面配置选项 ...
- chip8模拟器的python3实现-2-指令介绍
CHIP指令表 CHIP-8有35个指令,都为两字节长,以大端方式存储.指令表的指令格式规定如下: NNN:地址 NN:8位常量 N:4位常量 V:寄存器 X和Y:4位,标识寄存器 PC:程序计数器 ...
- 【转载】SQL Server中的Merge关键字
简介 原文地址 Merge关键字是一个神奇的DML关键字.它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句.MSDN对于Merge的解释非常的短小 ...
- mac环境下mongodb的安装和使用
mac环境下mongodb的安装和使用 简介 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据 ...
- 基于IDEA工具 lombok 的使用
一.简介 Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO).它通过注解实现这一目的. 二.lombok的添加和常用注解 ...
- 00.pt-toolkit 目录
一. 好用便利的工具,常用 pt-align 对齐文本格式pt-archiver 循序渐进的归档表,删除表,迁移数据pt-config-diff 对比不同配置文件.服务器配置参数pt-diskstat ...
- Servlet获取 URL 地址
使用 ServletRequest 的如下方法 getContextPath 取得项目名 getServletPath 取得Servlet名 getPathInfo 取得Servlet后的URL名,不 ...
- sql server 临时库文件太大 迁移tempdb数据库
由于装SQL Server时默认装在系统盘,使用一段时间后,tempdb数据库占了68G,导致整个C盘爆满,彻底解决办法就是迁移tempdb物理文件,移至其他大空间磁盘上. 将 tempdb 从其在磁 ...