libvirt框架分析

原创 2015年07月10日 20:53:48

libvirt框架分析

libvirt

Author:Wang Yi up2wing#gmail.com
libvirt revision: 1.2.14


术语概念

  • node:一个物理机器称为一个node

  • hypervisor:一个软件层抽象,其作用是虚拟化一个node,运行一系列不同配置的虚拟机

  • domain:运行于虚拟机上的OS实例。

常用对象

libvirt的目标是提供一个通用层,以 安全地管理node上的domain,因此libvirt的API暴露了所有 管理主流操作系统 需要的资源。

第一个通过API操作的对象是virConnectPtr,它表示与hypervisor的连接。应用程序获取与hypervisor的连接virConntectPtr后,就可以管理该hypervisor上的domain及相关虚拟化资源,如存储、网络等。任何使用libvirt的程序(openstack、virsh等)开始都要调用virConnectOpen系列函数,来得到virConnectPtr,你会发现这些函数都传入一个char* name表示 connection URI ,用来选择打开哪个hypervisor。 因为libvirt支持多种类型的虚拟化(通常被称为“drivers”或“hypervisor”),因此需要指定要用的是哪个driver,通过网络连接远程机器上的driver时也是如此。 例如:在一个Linux node上,可能同时使用KVM和LinuxContainer。name为NULL时默认为上次选择的hypervisor,但多数情况下这样并不明智。

connection URI 页面有关于连接URI的详细描述。常用的有:

qemu:///... QEMU and KVM URIs

支持qemu所用的URIs。有两种类型:

  • qemu:///system:连接到system模式

  • qemu:///session:连接到session模式

Remote URIs

remote URIs由本地URIs和主机名组成。比如,迁移时就需要连接远程的URI:qemu+tcp://192.168.1.100/system,其中的192.168.1.100就是迁移命令行中指定的目的主机的ip。

test:///... Test URIs

test driver是出于测试目的的一个虚拟hypervisor。

The Libvirt Drivers

driver是libvirt处理具体的hypervisor driver请求的基本单元。每个driver都有一个注册API,加载libvirt API调用的函数引用。下面是一个简单的hypervisor driver机制图。

Daemon和远程控制

访问libvirt driver主要由libvirt守护进程通过RPC remote driver处理。某些hypervisor支持client-side连接和回应,例如Test、OpenVZ、VMware、Xen、Parallels等。
libvirt 客户程序使用URI来获取virConnectPtr,virConnectPtr跟踪driver连接及其它各种连接,然后被用于其它虚拟化函数的入参。取决于所用的dirver,调用会通过remote driver“漫游”到libvirtd 守护进程。守护进程引用特定的连接driver,以获取所需的信息,(处理过后)然后通过连接将执行结果或数据返回客户程序。客户程序再处理返回数据,如显示、写日志等。Migrate就是使用了这中架构的一个例子。

reference

1、http://libvirt.org/api.html

openstack关于libvirt相关代码的分析(一)

这段时间研究openstack+xen可惜资料太少,决定看一下源代码得了。 如果看过一篇关于启动Openstack中启动一个虚拟机的过程的文章的话,就一定知道有一个叫做Spawn instance的...

OpenStack基于Libvirt的虚拟化平台调度实现----Nova虚拟机动态迁移源码分析

这篇博文开始,我们来解析一下Nova虚拟机动态迁移的实现源码。这里不会再像前面那样对代码进行逐行的详细解析,目的是来整理Nova虚拟机动态迁移的实现步骤和相关源码部分架构。 首先我们来看虚拟机动态迁...

Libvirt源码分析Part1-存储池和卷的表象与细节之存储池

  一般而言,程序之中最最重要的是数据结构,故而我们从查找核心数据结构开始,但最初的表象切入点是libvirt的交互工具virsh。  1. 存储池的核心数据结构          typedef s...
  • xpx3216
  • xpx3216
  • 2011年02月24日 12:11
  • 3661

OpenStack基于Libvirt的虚拟化平台调度实现----Nova虚拟机动态迁移源码分析

这篇博文开始,我们来解析一下Nova虚拟机动态迁移的实现源码。这里不会再像前面那样对代码进行逐行的详细解析,目的是来整理Nova虚拟机动态迁移的实现步骤和相关源码部分架构。 首先我们来看虚拟机动态迁移...

virtio驱动分析之libvirt层的参数配置

一直在研究kvm的para-virtualization driver - virtio,可能是太熟的原因吧,今天突然发现不知道咋在libvirt层配置kvm采用virtio驱动了,问题在于,看到下面...

OpenStack基于Libvirt的虚拟化平台调度实现----Nova虚拟机动态迁移源码分析

这篇博文开始,我们来解析一下Nova虚拟机动态迁移的实现源码。这里不会再像前面那样对代码进行逐行的详细解析,目的是来整理Nova虚拟机动态迁移的实现步骤和相关源码部分架构。 首先我们来看虚拟机动...

libvirt架构及源码分析

libvirt是用来管理虚拟机或虚拟化功能的软件集合,主要包括:libvirt API,libvirtd进程和virsh工具集三部分。最初的目的是为不同的hypervisor提供统一的管理接口。  ...
  • llwszjj
  • llwszjj
  • 2015年03月20日 09:44
  • 711

libvirt架构及源码分析

http://blog.chinaunix.net/uid-20940095-id-3813601.html libvirt是用来管理虚拟机或虚拟化功能的软件集合,主要包括:libvirt AP...
  • beckdon
  • beckdon
  • 2015年04月16日 15:25
  • 562

virtio驱动分析之libvirt层的参数配置

一直在研究kvm的para-virtualization driver - virtio,可能是太熟的原因吧,今天突然发现不知道咋在libvirt层配置kvm采用virtio驱动了,问题在于,看到下面...

libvirt中错误码和错误信息的分析

libvirt每一个重要的操作之前大都会调用virResetLastError函数来清除错误信息,这是为了使本次操作的错误结果可以存储在错误信息结构里面,同时使上一次的错误不会影响本次操作的结果判断。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:libvirt框架分析
举报原因:
原因补充:

(最多只允许输入30个字)