XenStore:使用,結構和原理(1快速入門)

來源:互聯網
上載者:User
文章目錄
  • 0. 動機
  • 1. 快速入門
摘要:XenStore是Xen提供的一個域間共用的儲存系統,它以字串形式存放了管理程式和前、後端驅動程式的配置資訊。Dom0管理所有的資料,而DomU通過共用記憶體,向Dom0請求與自己相關的索引值,以此實現域間通訊。Xen提供了多種介面用來操作XenStore:命令列的xenstore-*命令、使用者空間的xs_系列函數、核心的XenBus介面,都可以用來方便地操作XenStore的資料。


0. 動機

在Xen的半虛擬化(PV)系統中,各個虛擬機器(Domain)之間可以利用Xen核心提供的授權表(Grant Table)和事件通道(Event Channel)機制進行域間通訊。但是在實際使用中有這樣的問題:

  •   Alice使用授權表共用了一個頁面,但是Sanae想要拿來用,必須事Crowdsourced Security Testing道它的授權引用(gref);
  •   Alice開啟一個事件通道(unbound evtchn),但是Sanae想要綁定這個通道,必須事Crowdsourced Security Testing道Alice使用的連接埠號碼(remote port)。

顯然,想要解決這兩個問題,需要Alice和Sanae之間,在建立自訂的授權表、事件通道之前就能夠互相通訊。

使用XenStore可以很方便地實現這種通訊。

1. 快速入門

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的資料。

操作

命令列

使用者空間

#include <xs.h>-lxenstore

核心空間

#include “xen/xenbus.h”

列目錄

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

例子

命令列

xenstore-write example/Alice hello!

使用者空間

struct xs_handle *xh = xs_open(0);int xt=xs_transaction_begin(xh);xs_write(xh,xt,"/local/domain/0/example/Alice", "hello!", sizeof("hello!"));xs_transaction_end(xh, xt, 0);xs_close(xh);

核心空間

struct xenbus_transaction trans;xenbus_transaction_start(&trans);xenbus_printf(trans, "example", "Alice", "Hello! trans_id = %d", trans.id);xenbus_transaction_end(trans, 0);

Note: example/Alice相當於/local/domain/{當前domain}/example/Alice
具體的使用方法,可以查看相應的標頭檔

快速參考:

http://wiki.xen.org/xenwiki/XenStoreReference

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.