分类: LINUX
2017-03-12 23:13:15
原文地址:XenStore:使用,结构和原理(1快速入门) . 作者:张子萌
在Xen的半虚拟化(PV)系统中,各个虚拟机(Domain)之间可以利用Xen核心提供的授权表(Grant Table)和事件通道(Event Channel)机制进行域间通信。但是在实际使用中有这样的问题:
显然,想要解决这两个问题,需要Alice和Sanae之间,在建立自定义的授权表、事件通道之前就能够互相通信。
使用XenStore可以很方便地实现这种通信。
XenStore是Xen提供的一个域间共享的存储系统,它以字符串形式存放了管理程序和前、后端驱动程序的配置信息。Dom0管理所有的数据,而DomU通过共享内存,向Dom0请求与自己相关的键值,以此实现域间通信。
XenStore的存储结构类似于Dom树:每一个节点(Node)有一个字符串值(Value),并且可以有多个子节点。在Dom0启动后,XenStore的结构如下:
/
vm
{uuid}
…
local
domain
0
vm
device
control
memory
console
limit
type
name
......
1
…
tool
xenstored
在根(/)下有三个子目录,vm,local(实际上是/local/domain)和tool。vm存放虚拟机管理信息。tool暂时没有数据。而/local/domain存放了活动虚拟机配置和驱动信息。/local/domain中每一个目录项代表一个活动的虚拟机,例如/local/domain/0代表dom0。Dom0可以读写XenStore的全部数据,而Dom-x只能访问/local/domain/x的内容。需要在dom0和domx之间共享的内容,一般都写在这个目录下,所以/local/domain是最常用的目录。
Xen提供了多种接口用来操作XenStore:命令行的xenstore-*命令、用户空间的xs_系列函数、内核的XenBus接口,都可以用来方便地操作XenStore的数据。
操作 |
命令行 |
用户空间
|
内核空间
|
列目录 |
xenstore-ls(递归) xenstore-list(不递归) |
xs_directory |
xenbus_directory |
读写 |
xenstore-read xenstore-write |
xs_read xs_write |
xenbus_read xenbus_write xenbus_scanf xenbus_printf |
建立/删除目录 |
xenstore-mkdir xenstore-rm |
xs_mkdir xs_rm |
xenbus_mkdir xenbus_rm |
监视 |
xenstore-watch |
xs_watch xs_unwatch xs_read_watch |
xenbus_watch xenbus_unwatch |
例子
命令行