QEMU-KVM
文章平均质量分 72
上善若水75
这个作者很懒,什么都没留下…
展开
-
virtio 介绍
KVM是必须使用硬件虚拟化辅助技术(如Intel VT-x、AMD-V)的hypervisor,在CPU运行效率方面有硬件支持,其效率是比较高的;在有Intel EPT特性支持的平台上,内存虚拟化的效率也较高。QEMU/KVM提供了全虚拟化环境,可以让客户机不经过任何修改就能运行在KVM环境中。不过,KVM在I/O虚拟化方面,传统的方式是使用QEMU纯软件的方式来模拟I/O设备(如第4章中提到模拟转载 2013-07-05 21:15:41 · 5383 阅读 · 0 评论 -
Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(十八)
到目前为止,我们用spice客户端连接虚拟机的命令如下:dev@devhost:/opt/vm# sudo spicec –h 127.0.0.1 –p 4000 //127.0.0.1可以用实际的主机IP地址代替,这样在其他机器上也可以远程连接到这台虚拟机 。 这样连上去的效果,看到的虚拟机窗口缺省是一个640x480的窗口,那么有没有办法让虚拟机窗口全屏呢,原创 2013-07-18 20:56:50 · 7229 阅读 · 1 评论 -
Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(八)
Libvirt是用c写的一个管理虚拟机及其资源(如网络、存储和外设等)的工具库,它不仅支持KVM/QEMU,它还支持xen,Vmware,OpenVZ和VirtualBox等其他HyperVisor,关于它的详细信息参考http://www.libvirt.org/。 我们从 https://launchpad.net/ubuntu/+source/libvirt/1原创 2013-07-02 21:47:03 · 2512 阅读 · 1 评论 -
Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(九)
Libvirt其实并没有太多“实质”的东西,它所做的大部分都是要通过Hypervisor(如KVM-Qemu,XEN等)来实现的,它本质上就是一个适配器和管理库。但是它又是非常有价值的,它一方面封装了不同Hypervisor的底层不同实现,提供了统一的使用接口给上层应用,另一方面它通过规范的XML定义、命令行工具和API使得我们对虚拟机的使用和管理变得更方便。Libvirt其实并没有太多“原创 2013-07-04 22:13:35 · 3017 阅读 · 0 评论 -
Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(十九)
Spice 客户端和spice 服务端通常运行在不同的机器上,运行spice服务端的主机通常有着多颗多核的CPU以及几十G以上的内存,通过底层支持虚拟化的KVM+qemu环境虚拟出几台到几十台虚拟机,供运行Spice客户端的终端连接使用,这些终端通常配置较低,仅仅充当虚拟桌面的显示之用,当然还有键盘、鼠标的输入和声音的输出等基本功能,这些在我们之前介绍的spice连接中都已经具备。原创 2013-07-20 22:52:38 · 7610 阅读 · 14 评论 -
KVM虚拟机代码揭秘——QEMU代码结构分析
前言:本文主要概括了QEMU的代码结构,特别从代码翻译的角度分析了QEMU是如何将客户机代码翻译成TCG代码和主机代码并且最终执行的过程。并且在最后描述了QEMU和KVM之间联系的纽带。申明:本文前面部分从qemu detailed study第七章翻译而来。1.代码结构如我们所知,QEMU是一个模拟器,它能够动态模拟特定架构的CPU指令,如X86,PPC,ARM等等。QEMU模拟转载 2013-07-23 21:11:41 · 2680 阅读 · 0 评论 -
基于virtio在虚拟机与主机之间传递消息
Virtio是Linux虚拟机平台上统一的虚拟IO接口驱动。通常主机为了让客户机像在真实环境中一样运行,需要为客户机创建各式各样的虚拟设备,如磁盘,网卡,显卡,时钟,USB 等。这些虚拟设备大大降低了客户机的性能。使用virtio。虚拟机guest不用关注如何创建各种虚拟硬件设备(如磁盘,网卡,显卡等),可以用统一的虚拟设备,因此大大提高虚拟机的性能。这个统一的虚拟设备就是virtio。转载 2013-07-24 15:53:51 · 7563 阅读 · 0 评论 -
KVM-QEMU vdagent实现机制分析(一)
在Ubuntu12.10下搭建基于KVM-QEMU的虚拟机环境(十八)中我们实验了通过在虚拟机里面安装vdagent(Spice Agent)程序来自动适应屏幕分辨率的功能,这个vdagent是运行在虚拟机里面的,而分辨率的信息来自spice client,这中间隔着spice server,qemu等模块,中间的过程还是比较复杂的。通过分析这个流程,有助于帮助我们理解更多KVM-QEMU原创 2013-07-25 10:59:42 · 11989 阅读 · 4 评论 -
KVM-QEMU vdagent实现机制分析(二)
1. 虚拟串口模块的初始化注册在QEMU中与虚拟串口(virtio-serial)通信相关的文件主要有以下几个:Virtio-pci.cvirtio-serial-bus.c(h) //从名字上看也像virtio-console.cvl.c //qemu的main函数在这里原创 2013-07-25 16:36:10 · 5427 阅读 · 0 评论 -
Spice代码阅读一:Spice Client 与 Spice Server 通道建立过程
文件方法描述Application.cppinit_globals()初始化Log,ssl库,canvas(或opengl canvas)和quic压缩库 Process_cmd_line()解析命令行连接参数 init_platform_globals(原创 2013-08-04 19:56:14 · 8229 阅读 · 1 评论 -
Spice代码阅读二:Primary surface 创建过程
Spice 主窗口表面的创建应该由虚拟机的QXL驱动发起,经由QEMU将相关参数传递给spice server(主要由负责显示的red_worker.c完成),最后spice server将SPICE_SURFACE_FLAGS_PRIMARY 消息发给spice client完成。上图中省略了QXL driver与 spice client相关部分的过程,用文字来说明。原创 2013-08-05 18:54:35 · 5805 阅读 · 0 评论 -
KVM-QEMU vdagent实现机制分析(三)
承接KVM-QEMUvdagent实现机制分析(2),在qemu将vdagent通过虚拟串口打开字符设备的事件传给spice server之后,spice server的处理是怎么样的呢?还是用图来说明比较形象一点: 上图中的步骤解释:1. 当在虚拟机里启动vdagent,qemu的spice_chr_guest_open被触发,调用spice server 的spi原创 2013-07-28 22:32:21 · 4168 阅读 · 0 评论 -
Qemu, Spice 消息模型
作者“达沃时代” 原文链接:http://www.cnblogs.com/D-Tec/archive/2013/03/21/2973339.html网络事件处理是libspice设计中最关键的部分,可以说是整个Spice的骨架,用以支撑Spice的运行,是理解Spice运作方式的切入口之一(VDI是另一个阅读代码的切入口)。Spice的server和client通信方式采用了三种转载 2013-08-06 15:16:38 · 2674 阅读 · 0 评论 -
Spice VDI接口工作方式
作者“达沃时代” 原文链接:http://www.cnblogs.com/D-Tec/archive/2013/03/01/2939311.htmlVDI接口工作方式Spice中的VDI(Virtual Device Interfaces)是一个经过专门设计的接口规范,其设计哲学可以推广到很多需要做功能扩展的软件项目中。此类接口设计的主要目标是在尽量不改变原有代码的情况下,通过转载 2013-08-06 15:28:03 · 6662 阅读 · 1 评论 -
spice client 和 spice server 通信机制
作者:“达沃时代” 原文链接:http://www.cnblogs.com/D-Tec/archive/2013/04/19/3030129.html〇、基本原理目前的Channel类型枚举值定义如下:enum { SPICE_CHANNEL_MAIN = 1, SPICE_CHANNEL_DISPLAY, SPICE_CHANNEL_IN转载 2013-08-06 15:38:40 · 6746 阅读 · 0 评论 -
Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(十七)
今天我们实验一些libvirt虚拟机XML定义文件中的配置参数。 XP_VM4 92f1ab08-e115-4016-a522-b550ff593af8 1024000 1024000 1 hvm原创 2013-07-16 21:55:41 · 2852 阅读 · 0 评论 -
Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(六)
正如本系列第一篇文章架构图所示Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(一),除了在内核空间的KVM模块之外,在用户空间需要QEMU来模拟所需要CPU和设备模型以及用于启动客户机进程,这样才有了一个完整的KVM运行环境。而qemu-kvm是为了针对KVM专门做了修改和优化的QEMU分支,具体关于KVM,QEMU-KVM的介绍还是请参阅相关的官方网站:http://www.li原创 2013-06-29 20:18:07 · 6054 阅读 · 16 评论 -
Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(十)
在Ubuntu12.10下搭建基于KVM-QEMU的虚拟机环境(九)中我们用libvirt定义创建、启动和使用了基本的虚拟机过程。今天开始我们通过对XML的更多tag的改变来尝试更多新的功能。 今天要实验的是virtio 的功能,有关virtio的介绍参阅:http://www.linux-kvm.org/page/Virtio 和http://www.ibm.com原创 2013-07-05 21:47:44 · 3879 阅读 · 0 评论 -
Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(十一)
上一个介绍主要讲了如何virtio驱动对于虚拟机性能改善的重要性以及如何安装针对磁盘的虚拟驱动,接下来我们继续安装其他几个虚拟驱动:QXL虚拟显卡、虚拟网卡、虚拟串口和改善显示和鼠标体验的vdagent程序。在继续之前我们先还是有针对性的修改定义虚拟机的XML定义文件,参阅红色字体部分: XP_VM2 91f15b08-e115-4016-a522-b550f原创 2013-07-06 23:24:13 · 4328 阅读 · 0 评论 -
Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(十二)
Libvirt除了在虚拟机的定义文件中可以初始挂载光驱之外,还有一种动态换盘挂载的方式,那就是采用 virsh命令中的attach-device命令,该命令的具体格式如下: dev@devhost:/opt/vm/xpvm1$ sudo virsh attach-device filename 其中,filename是一个用XML格式定义的文件(我们原创 2013-07-08 22:55:47 · 3860 阅读 · 0 评论 -
Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(十三)
今天我们实验libvirt提供的快照功能,快照可以用于系统恢复,防止安装了某些软件或中病毒等情况导致系统损毁的情况。一、快照类型1) 磁盘快照内部的:快照驻留在原来的镜像文件内部外部的:快照以一个新的外部独立文件的形式存在,在此之后,原镜像变成只读,所有改变记录到快照文件里磁盘快照由virsh snapshot-create命令创建2) 内存快照原创 2013-07-09 22:34:26 · 2445 阅读 · 1 评论 -
Ubuntu下libvirt 禁用 apparmor的方法
Libvirt在做某些事情的时候会被Apparmor阻挡,因此为了确保Libvirt始终有必须的权限,必须禁用apparmor。方法如下:1. 在编译libvirt的时候选择--without-apparmor选项;2. 执行下面的命令为libvirt禁用 apparmor:$ ln -s /etc/apparmor.d/usr.sbin.libvirt原创 2013-07-09 21:56:33 · 5863 阅读 · 1 评论 -
Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(十四)
今天我们继续试验snapshot的功能。1. 启动虚拟机,在空的D盘上新建一个文本文档test.txt;2. 定义创建snapshot的XML: snap1 也即定义了创建这个虚拟机的外部快照。3. 执行创建外部原创 2013-07-10 23:28:54 · 2660 阅读 · 0 评论 -
Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(一)
经过几年的发展,基于KVM-QEMU的虚拟化技术变得越来越成熟,redhat也已经初步形成了以此为基础的虚拟化产品。同时其他的Linux平台(如Ubuntu)也对此有了完善的支持方案,加上各类配套软件的开源特性,以此技术为基础搭建一套可用的虚拟机环境变得不再困难。本系列将以Ubuntu12.10为主机环境,实验如何从裸的系统搭建出整个环境。由于网上对KVM-QEMU的介绍已经很多,对此技术不再介绍原创 2013-06-26 21:34:42 · 4626 阅读 · 0 评论 -
Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(二)
在正式开始之前,有几点说明:1. 我选择的主机操作系统是Ubuntu12.10桌面版,可以从http://releases.ubuntu.com/12.10/官方网站下载,注意要选择64位的,32位不适合;2. 用于实验的主机必须是支持虚拟化的,可以用下面的命令来检验:cat /proc/cpuinfo | grep vmx或 cat /proc/cpuin原创 2013-06-26 22:34:55 · 3090 阅读 · 0 评论 -
Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(十五)
接下来我们试验虚拟机的网络配置功能,KVM虚拟机网络配置主要有两种方式:NAT方式和Bridge方式。今天我们主要理解和实验NAT方式的网络配置。NAT方式是kvm安装后的默认方式,它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机,因为NAT的全称是Network Address Translation(网络地址转换),即虚拟机和主机在一个特定的内部子网内,虚拟原创 2013-07-11 20:45:29 · 5914 阅读 · 0 评论 -
Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(十六)
今天我们继续实验Bridge方式的网络配置。Bridge的逻辑原理图如下: 上图中的“br0”就充当了一个桥的作用,主机上的物理网口eth0等根据需要加入到这个桥里面,所有虚拟机要跟外界通信都通过这个br0, br0再经过真实的物理接口eth0等与外界通信。与NAT不同,桥接方式虚拟机跟主机一样能获得主机所在网络的IP地址,不再由主机进行伪装。那么br0是如何在Ubuntu主机上创原创 2013-07-13 11:13:48 · 4711 阅读 · 1 评论 -
Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(四)
接下来要编译的是Usbredir,在编译之前大致介绍一下什么是Usbredir:usbredir is the name of a networkprotocol for sending usb device traffic over a network connection. It is alsothe name of the software package offering a pars原创 2013-06-28 21:57:44 · 3724 阅读 · 2 评论 -
Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(三)
原则上来说,qemu, libvirt, libusb, usbredir, spice等都可以通过 apt-get install的方式从Ubuntu源在线安装。但是这样如果碰到一点问题,就比较难办,如果自己从源代码开始编译,那么出了问题可以通过阅读和修改源码,修复相关问题。我们要搭建的各个软件模块是有相互依赖性的,比如qemu依赖libspice-server, Usbredir依赖lib原创 2013-06-27 22:30:34 · 3933 阅读 · 0 评论 -
Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(五)
今天要编译的是Spice,Spice是一个类似RDP的远程连接协议,它基于网络连接,适用于本地、局域网或广域网(说实在的,以目前中国广域网的带宽和延迟,如果没有很好的优化,还是不太适合的)。与RDP的相对独立性不同,Spice并不能独立工作,它需要与Qemu-KVM等结合使用。Spice是一种Client——Server的架构,虚拟化主机这端驻留SpiceServer,要使用远程桌面的终端这边原创 2013-06-29 09:46:30 · 4095 阅读 · 0 评论 -
Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(七)
qemu编译出来以后,其实就已经可以做一些虚拟机的使用体验了,因此在继续下一步之前,我们先小小的体验一下,感受一下创建和使用虚拟机的乐趣。一.创建镜像文件我们平常装在PC上的操作系统是驻留在硬盘上的,硬盘逻辑上又可以分为多个驱动器,如C盘对应系统盘,D盘对应数据盘等。虚拟机也有类似盘的概念,只不过它通常以文件的形式存在,我们也可以分别创建对应系统盘和数据盘的镜像文件。创建这种镜像文件的原创 2013-06-30 10:49:40 · 2778 阅读 · 0 评论 -
QXL驱动分析(一)
QXL安照windows2000显示架构编写,见下图: QXL实现的功能主要包含两块:Display Driver 和 Video Miniport。1. Display DriverDisplay Driver以动态链接库qxldd.dll的形式提供,处于内核态,主要是提供绘图API给GDI,这样当最上层的应用需要绘图的时候,通过调用GDI API(gdi32.dll),GDI原创 2013-08-13 17:50:02 · 33473 阅读 · 0 评论