xen tools代码结构
来源:互联网 发布:会计软件中的成本核算 编辑:程序博客网 时间:2024/04/27 22:49
XenAPI:一个Xen的项目,目的是提供管理控制Xen所需要的数据模型和远程调用接口。
XenStore:一个存储Xen运行信息的机构,包含各个VM的信息,类似于Win中的注册表。
libxc 是一个C语言库,它提供了一些简单易用的API,使用户程序可以方便的和Hypervisor进行通信。它的工作原理很简单,主要封装了dom0中的/proc/xen/privcmd,/dev/xen/evtchn以及/dev/xen/gntdev提供的IOCTL接口。也就是说,我们本来可以直接通过上面这些内核级设备驱动进行相关的操作控制,但有了libxc之后,只需要调用其相应接口函数,由它负责数据结构的解析/封装,然后再与底层hypervisor通信。这就是为什么说xm发出命令之后,到达xend,而xend需要调用libxc再处理后才与底层hypervisor通信:libxc是一个接口库。
看到有这样的解析,借鉴一下:
/proc/xen/privcmd
1. xc_interface_open()
打开/proc/xen/privcmd,获得文件描述符。
2. xc_sysctl()
填充xen_sysctl结构体,发送ioctl请求。
3. xc_interface_close()
关闭1中打开的文件描述
/dev/xen/evtchn
1. xc_evtchn_open
2. xc_evtchn_notify等函数
evtchn的操作比较简单,不需要填充结构体,一般指明远程Dom id,port即可
3. xc_evtchn_close
/dev/xen/gntdev
1. xc_gnttab_open
2. xc_gnttab_map_grant_ref等
3. xc_gnttab_close
用来控制Xen内核的库,位于xen-../tools/libxc。包括两个部分:
一个是libxenctrl,封装了各种Hypercall提供的功能,其函数列表在xenctrl.h中列出;
另一个是libxenguest,提供在内核中创建domain的方法,其函数列表在xenguest.h中列出。
若在内核中通过修改hypercall的方式为Xen添加功能,需要在libxenctrl中进行封装。
libxc中的函数的第一个参数均为int xc_handler,这其实是一个句柄,这个句柄对应着dom0中与guest kernel进行交互的proc文件,即/proc/xen/privcmd。
libxc中进行Hypercall的调用可以利用do_domctl这个函数,这个函数的定义在xc_private.h中。do_domctl的第二个参数struct xen_domctl封装了一个hypercall的number and arguments。
如要在其中加入自己的新接口,需要在libxc目录下执行make install命令,之后,可以自己编写一个小型C程序,并引用<xenctrl.h>,在编译时加入参数-lxenctrl就可以了。
Python
教程:http://docs.python.org/tutorial/
C与Python进行交互:http://docs.python.org/c-api/ 重点参考:http://docs.python.org/c-api/concrete.html
在xen-.../tools/python/lowlevel文件夹下,有xc和xs两个子目录,其中分别实现了对libxc和libxenstore的封装。我们在libxc中添加自己的功能后,还需要在xc中进行python的封装,这样才能在python的代码中调用这个功能。
在python的代码中,初始化C封装的类通常会以如下代码:
import xen.lowlevel.xc
xc=xen.lowlevel.xc.xc()
Xend
Xend是一个守护进程,它的一个重要作用是充当各种RPC(Remote Procedure Call)服务器。其代码位于python/xen/xend目录下。其中的server子目录下是和RPC服务器有关的代码。server/XMLRPCServer.py这个文件中的run方法,是关于Xend把那些方法暴露到远程去的。
关于XMLRPC,参考文档:http://docs.python.org/library/xmlrpclib.html?highlight=xmlrpc#module-xmlrpclib和http://docs.python.org/library/simplexmlrpcserver.html?highlight=register_function#SimpleXMLRPCServer.SimpleXMLRPCServer.register_function
Xend中常见的功能:
XendConfig.py 这个类代表了创建domain的配置文件,它负责解析各种格式的domain配置文件并将他们转化为接近于XenAPI的表示方式。
XendDomain.py这个类表示了Xend中的一个虚拟机。也就是说它代表了Xend本身所存储的关于一个Domain的信息以及相关的方法。在XendDomain中形似domain_*的方法会被自动加入RPC服务器中,被添加成xend.domain.*方法。
XendDomainInfo.py这个类表示了Xen中的一个虚拟机。也就是说它代表了从Xen中通过hypercall获取的一个domain的信息,同时提供了操作domain的方法。XendDomainInfo中的方法往往是直接向Xen发命令,而XendDomain中的方法往往会调用XendDomainInfo中的方法。
XendAPI.py,这个是用来实现XenAPI的。
Xend的调试问题。Xend的标准输出是不会输出到屏幕上的,因此无法用print进行调试。解决方法是再xend
的配置文件/etc/xen/xend-config.sxp中加入loglevel DEBUG这一行,然后在平时用print的地方改用log.debug。最后在/var/log/xen/xend.log中可以看到输出的内容。另外,终端下推荐使用tail -f /var/log/xen/xend.log这一命令,它会把向一个文件中追加的内容打印到屏幕上。
xm,这个命令仅仅是解析命令行参数,创建一个远程过程调用实例(就是server这变量),然后根据配置文件的不同,如果使用XenAPI,就调用server.api.*这一系的方法,如果不使用XenAPI(默认情况),就调用server.xend.*这一系的方法。
0 0
- xen tools代码结构
- Xen Tools 代码阅读心得
- Xen Tools 代码阅读心得
- xen-tools
- Xen使用记录 - 使用xen-tools复制VM
- debian xen-tools 虚拟机的时区管理
- Ubuntu 11.10中用xen-tools安装虚拟机
- Install xen-tools for VM on Xenserver
- 使用Xen-tools工具建Pv domain
- Xen 虚拟机 网络结构分析
- Xen api的层次结构
- Xen api 的层次结构
- Xen--内存代码阅读小记
- XEN VT-D 代码部分
- 在debian5环境使用xen-tools安装centos5虚拟机
- Ubuntu 11.10中用xen-tools安装虚拟机(Ubuntu&CentOS)
- Xen
- Xen
- quick-cocos2d-x -2 打不开"player.app"
- libsvm使用步骤
- 一键安装 redmine on windows 和发邮件设置
- A Performance Evaluation and Examination of Open-Source Erasure Coding Libraries For Storage
- Qt学习笔记2014.7.17.14:04——设置文字加粗、倾斜、下划线、颜色
- xen tools代码结构
- Xcode4.6下添加百度地图ios版(BMapKit)详细教程(_BMKMapManager错误解决)
- windows下Appium安装教程
- C语言中的回调函数实例
- Response.ContentType 类型简介
- 解决Eclipse无法打开“Failed to load the JNI shared library”
- CentOS yum有时出现“Could not retrieve mirrorlist ”的解决办法——resolv.conf的配置
- REST概述
- testerhome