Xenstore简介及Xenstore读写机制的研究与实现

Xenstore是Xen提供的一个域间共享的存储系统(数据库),也可以说它是一个由Domain 0管理的简单的分层操作系统,其作为虚拟机间的中介通信是基于共享内存页与事件通道来实现的。Xenstore中存储了各个虚拟机(包括Domain 0)的配置信息,例如Domain ID,Domain Name,UUID,前后端设备,启动时间,虚拟机状态等。

Xenstore是一个具有层次结构的目录,类似于Linux中的树形目录。Xenstore中存储了Domain之间共享的配置信息,Domain 0作为管理域,可以查看整个结构的内容,而Domain U只能查看自身的信息,这种设计方法提高了Xenstore的安全性。

Xenstore的数据结构与文件系统非常相似。Xenstore只是用于domain间少量信息的传送,并不用于大规模数据的存储。它也保存着正在运行的domain信息,这些信息存储在一个稳定的位置,所以是易读的。

Xenstore中主要有三个路径:

/vm – 存储了domain的配置信息

/local/domain – 存储了本地节点的虚拟机信息,类似于Linux的/proc结构

/tool-存储了各种工具的信息

Xenstore提供了访问的接口程序,基本的接口包括两个缓冲环(ring buffer)。关于Xenstore的数据内容更新的Request放在1号环,Response 和状态改变的异步通知被放入2号环。第一个环被domU写入,dom0读出,而第二个环由dom0写入,domU读出。

在Xenstore里,可以使用命令xenstore-read和xenstore-write对数据进行读写。

实现代码如下:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

char buf[100] ;
void  xenstore_w(char* key, char* value)           //将key/value的键值对写入xenstore
{
char *a = " '", *b = "'", c[100] = "xenstore-write ";
strcat(c, key);
strcat(c, a);
strcat(c, value);
strcat(c, b);
printf("%s\n", c);                                         //使用xenstore-write命令,即xenstore-write key value
system(c);
}
char* xenstore_r(char* key)                            //从xenstore里读取键值为key的值
{
FILE *stream;
char a[100] = "xenstore-read ";
memset(buf, '\0', sizeof(buf));                        //设buf都设置为'\0',防止乱码
strcat(a, key);
stream = popen(a, "r");                                 //执行命令a,并创建读取其执行结果的流
fread(buf, sizeof(char), sizeof(buf), stream);    //将流中的数据读取到buf中
pclose(stream);
printf("buf=%s\n", buf);
return buf;
}

Posted in C/C++/Others, 虚拟化 | Tagged , | Leave a comment

送给所有的朋友,幸福从爱自己开始~

出生一张纸,开始一辈子;
毕业一张纸,奋斗一辈子;
婚姻一张纸,折磨一辈子;
做官一张纸,斗争一辈子;
金钱一张纸,辛苦一辈子;
荣誉一张纸,虚名一辈子;
看病一张纸,痛苦一辈子;
悼词一张纸,了结一辈子;
淡化这些纸,明白一辈子;
忘了这些纸,快乐一辈子!

这周是世界好友周,如果你愿意,
请把这条资讯发给你所有的好朋友(一定遵命)。
也包括我,看多少人会回发给你(君子之交淡如水,又何必计较这
点呢?)。

当大部分人都在关注你飞得高不高时,
只有少部分人关心你飞得累不累,
这就是友情。
再忙,也要照顾好自己,
朋友虽不常联系,却一直惦念。
天凉时记着多穿衣!
世界好友周快乐!
少喝奶茶、不吃刚烤好的面包,
远离正在充电的电源。
白天多喝水,晚上少喝,
一天不喝多于两杯的咖啡。
少吃油多的食物,

最佳睡眠为晚上十点至早上六点。
晚上五点后少吃大餐,
每天喝酒不超过一杯。
不用冷水服胶囊,
睡前半小时服药忌立刻躺下。
睡眠不足八小时人会变笨,
有午睡习惯的人不易老。

手机电池剩一格时不要打电话,
剩一格时辐射是平时的一千倍。
要用左耳接电话,
用右耳会直接伤害到大脑。

2009新概念
一个中心:一切以健康为中心。
两个基本点:遇事潇洒一点,看世糊涂一点。

三个忘记:
忘记年龄,
忘记过去,
忘记恩怨。

四个拥有:
无论你有多弱或多强,一定要
拥有真正爱你的人,
拥有知心的朋友,
拥有向上的事业,
拥有温暖的住所。

五个要:
要唱,
要跳,
要俏,
要笑,
要苗条。

六个不能:
不能饿了才吃,
不能渴了才喝,
不能困了才睡,
不能累了才歇,
不能病了才检查,
不能老了再后悔。

看到了,发给每一个你珍惜的朋友.

Posted in C/C++/Others | Tagged , | Leave a comment

武大SFD的嘉宾够大牌,这次得出丑了

  这次要同时在我校和武汉大学进行SFD主题演讲,本校还好,虽说有中科红旗和IBM的工程师参加,但我觉得自己不会紧张,毕竟在自己的地盘,而且工程师与自己年龄相差不大,有较多的共同语言。

  但 是这次武大的演讲嘉宾够大牌:现任EMC中国首席科学家,前惠普中国首席科学家毛文波博士,以及未来网技术总监都将有30-45分钟的演讲,而自己的 session正好夹在中间,这回可真会有些紧张了。VMware现在已经成为EMC的子公司,所以EMC已成为世界上最强大的虚拟化公司。EMC跟我们 实验室联系非常紧密,毛博士和金海院长也是非常要好的朋友,我也在一次国际会议上跟毛博士有过几天的接触。虽然我们实验室进EMC的人并不多(加起来不到 10个),但是EMC应该是虚拟化研究人员最向往的公司,待遇也是相当的丰厚(不比百度低)。

  这次得好好把握机会,给毛博士、未来网技术总监以及IBM、中科红旗的工程师们留下一个好的印象。

  武汉大学SFD安排:

  • 1. 现任EMC中国首席科学家,前惠普中国首席科学家毛文波博士介绍:“EMC中国实验室的研究2.0与自由开源软件”
  • 2 .武汉Linux User Group的嘉宾介绍 :Linux & SFD
  • 3 .华中科技大学网格实验室研究生、Sun实习生,蒋海鸥介绍:OpenSolaris,虚拟化与SFD
  • 4. 未来网技术总监介绍:开源IDE-Eclipse
  • 5. 武汉大学Mozilla Firefox校园大使龚文茂同学介绍 :Firefox&SFD
  • 6. Sun Wonderland/Darkstar相关的技术演示 曹祺
Posted in C/C++/Others | Leave a comment

庆祝自由软件日——华科分站,期待大家的参与

想知道如何使用开源技术玩转你的电脑吗?

想了解Linux、Solaris、AIX等非Windows操作系统吗?

想现场感受开源技术的巨大魅力吗?

参加自由软件日(SFD)将是你不二的选择!

“自 由软件日(SFD)”是全世界自由/开源软件(FOSS)一年一度的盛大节日。我们希望通过活动的举办能让大家感受到自由/开源软件的巨大魅力;我们希望 在现今即透明又公开的全球数字一体化的大背景下,任何人都可以使用免费的开源软件进行自由联络、信息共享和创新发展;我们也希望大家都能够满怀热情地参与 到开源社区,为开源技术的发展、科学的进步贡献自己的力量。

自由软件日——华科分站将于2009年09月21晚19:00于华中科技大学东九楼C401拉开帷幕,欢迎大家的光临,我们将有U盘、T恤、技术书籍、帽子、笔、Linux和OpenSolaris光盘等众多精美礼品送出。

活动的安排如下:

19:00-19:30  开源--软件的发展趋势                  中科红旗Engineer

19:30-20:00  OpenSolaris2009.06 overview 蒋海鸥(华中科技大学计算机系统结构硕士)

20:00-20:30  操作系统启动过程探秘               陈华才(华中科技大学计算机系统结构博士)

20:30-21:00  属于你的Firefox                        龚文茂(武汉大学Firefox校园大使)

21:00-21:30  核心开源技术及产品                   IBM Engineer

21:30-22:00  Q&A

有问题请Email至superhaiou#superhaiou.com

Posted in C/C++/Others | Leave a comment

在RHEL 5上安装Xenoprof

Xenoprof是HP公司针对OProfile工具开发的一个接口,它使得OProfile能够适用于基于Xen的虚拟环境,从而能够对内核、应用程序等的性能信息进行监控,在官网http://xenoprof.sourceforge.net/上有详细的介绍。之前我在《OpenSolaris, Fedora and Xen 之 Fedora 10上Xen 3.3.1的安装与配置》一文中写了关于Xen 3.3.1的安装过程,本文我将介绍如何在RHEL 5上安装Xenoprof。
安装好Xen后,进入Dom0,如果你还未安装Xenoprof,键入opcontrol --reset命令,会有以下错误信息,而正常情况下是没有任何提示信息的。
[root@v6 oprofile-0.9.3]# opcontrol --reset
FATAL: Module oprofile not found.
FATAL: Module oprofile not found.
Kernel doesn't support oprofile
具体安装过程如下:
1. 从http://oprofile.sourceforge.net/上下载oprofile-0.9.3(虽然目前的最新版是0.9.5,但目前Xenoprof只支持到oprofile 0.9.3);
2. 从Xenoprof官方网站http://xenoprof.sourceforge.net/上下载oprofile-0.9.3-xen-r2.patch
3. tar xzvf oprofile-0.9.3.tar.gz解压oprofile,并将oprofile-0.9.3-xen.r2.patch复制进oprofile-0.9.3文件夹,然后执行patch -p1 <  oprofile-0.9.3-xen-r2.patch 打补丁;
4. 执行./configure --with-kernel-support命令进行编译前的配置(可能提示没有liberty library,需要yum install binutils-devel,同时需要gcc-c++编译器,可通过挂载CentOS或RHEL镜像进行安装);
5. 配置好以后,/make/make install即可完成OProfile的安装(打过补丁的OProfile);
6. 接下来就是对Xen的重新编译了,具体编译过程在《OpenSolaris, Fedora and Xen 之 Fedora 10上Xen 3.3.1的安装与配置》 一文里作了详细介绍,在这里就不再赘述。不过在编译前,需要修改一下配置文件,进入Xen源代码目录使用命令make linux-2.6-xen-config CONFIGMODE=menuconfig,进入图形界面后需要将instrumentation support中的OProfile选中(一共两个选项,选择第一个选项以及第一个选项下的子选项即可),保存并退出,然后就是Xen的编译及安装过程 了;
PS:编译时可以采用轻量级的编译,即make linux-2.6-xen-build,然后再使用make linux-2.6-xen-install命令进行安装。
7. 重启系统,使用opcontrol --reset命令测试一下,如果没有任何错误提示信息,就说明安装成功了。

Posted in C/C++/Others, Linux&Minix, 虚拟化 | Tagged , , , | Leave a comment

如何远程使用chime

在《OpenSolaris 2009.06的DTrace GUI工具——Chime》一文中介绍了Chime这个可视化的DTrace监控工具,本文将介绍如何在C/S结构上远程使用Chime工具。

在服务器端运行chime的命令如下:

haiou@opensolaris:~$ chime server
Listening for remote DTrace consumers on port 5088
Press the Enter key to stop the server.
在客户端连接服务器:
chime 192.168.203.234
这时,会有一个Java RMI相关的小问题导致连接失败,错误信息如下图所示:


有两种方法来解决这个问题:
一是把你的服务器IP地址添加到/etc/hosts里,然后重启chime服务器,添加的内容如下:
127.0.0.1      opensolaris opensolaris.local localhost loghost
192.168.203.234     opensolaris
同时,你也可以在服务器上编辑/opt/OSOL0chime/bin/chime这个脚本文件,使它包括JVM属性,具体属性信息如下所示:
JMX_FLAGS="${JMX_FLAGS} -Djava.rmi.server.hostname=192.168.203.234"
采用以上任何一种方法后,你都将能成功地对远程的系统进行监控。

参考文献: http://blogs.sun.com/observatory/entry/remote_systems_tracing_with_chime

Posted in Solaris | Tagged , | Leave a comment

Fedora 10为Firefox安装Flash Player plugin

本文介绍的是在Fedora 10下如何为Firefox安装64位的Flash Player plugin。

首先去官网下载64位的Flash Player插件,下载地址:http://labs.adobe.com/downloads/flashplayer10.html

两条命令搞定:

tar xzvf libflashplayer-10.0.32.18.linux-x86_64.so.tar.gz

sudo mv libflashplayer.so /usr/lib64/mozilla/plugins

然后重启Firefox即可。

Posted in Linux&Minix | Leave a comment

OpenSolaris 2009.06的DTrace GUI工具——Chime

什么是chime?

它是每个OpenSolaris的用户都应该装的工具,因为它为DTrace这个强大的系统监控工具提供了一 个友好的图形用户接口,使你即使不懂得使用DTrace也能得到有用的系统性能信息。本文主要介绍如何在OpenSolaris 2009.06上使用chime这个强大的工具。

首先从OpenSolaris官网上下载chime的安装包

http://www.opensolaris.org/os/project/dtrace-chime/install/osol0chime-i386-1.4.pkg.gz

使用gunzip Downloads/osol0chime-i386-1.4.pkg.gz命令进行解压;

安装chime:pfexec pkgadd –d osol0chime-i386-1.4.pkg

由于安装chime后其命令默认路径为/opt/OSOLOchime/bin/chime,可以使用命令ln –s /opt/OSOLOchime/bin/chime /usr/bin/chime为其创建一个软链接。

使用以下命令可以查看系统中探针(Probes)的数目:

haiou@opensolaris:~$ pfexec dtrace -l | wc -l
64303

探针的数目会随着各种新的软件的安装而不断增加,就拿chime来说,它本身就有超过70个探针。

探针的命名主要是以下四部分组成:

  • provider (a library of related probes)
  • module (the module that contains the function)
  • function (the function that contains the probe)
  • name (the name of the probe)

就拿syscall:::entry探针来说,它的provider是syscall,name为entry,而module和function为空。

使用 pfexec chime命令运行chime,选择File菜单中的List Probes,可以可视化地查看系统的探针,如下图所示:

接下来将通过一个具体的实例来介绍chime的使用。

首要写一个D语言的脚本文件:

haiou@opensolairs:~$ vi syscalls_overtime.d
syscall:::entry
{
@a[execname] = count();
}

运行该脚本一段时间后CTRL+Z停止,结果如下图所示:

有了chime后,我们可以非常直观地查看各种系统调用的统计,如图所示:

同时,我们还可以通过drill-down查看更加详细的信息,如下图所示:



参考文献:

http://blogs.sun.com/observatory/entry/chime

Posted in Solaris | Tagged , | Leave a comment

在Fedora 10下安装Xen 3.3.1

近年来随着计算机硬件的高速发展,虚拟化技术已经成为计算机业的焦点之一。虚拟化技术从实现途径上来说,由两种典型的派别:泛虚拟化(para-virtualization)和完全虚拟化(HVM)。前者通过修改客户操作系统来配合虚拟化的环境,从而达到较高的性能,但也付出了兼容性和维护性方面的限制,而Xen就是泛虚拟化技术的杰出代表;而完全虚拟化技术常常需要得到处理器级别的硬件支持(如Intel VTAMD-V处理器),或者通过对客户机执行代码进行动态二进制代码转换,然后可以无需修改的直接运行一个已有的操作系统,使得虚拟化技术的应用更加容易。完全虚拟化的代表产品有VMware, VirtualPC, QEMU等。

即使你研究的不是虚拟化,体验一下Xen这个目前世界上最流行的虚拟机管理器(VMM)并感受其巨大的魅力也是值得的。本文主要介绍如何在Fedora 10下使用源码安装Xen 3.3.1

首先准备好两个源代码包:xen-3.3.1.tar.gzlinux-2.6.18-xen.hg.gz,可从http://xen.org上下载。

使用tar xzvf xen3.3.1.tar.gz命令解压xen.3.3.1.tar.gzFedora 10系统目录(可以为任一目录,我将其解压在/usr/local目录)

打开README文件可以查看安装Xen前必须安装的软件包:

* GCC v3.4 or later

* GNU Make

* GNU Binutils

* Development install of zlib (e.g., zlib -dev)

* Development install of Python v2.3 or later (e.g., python-dev)

* Development install of curses (e.g., libncurses -dev)

* Development install of openssl (e.g., openssl -dev)

* Development install of x11 (e.g. xorg-x11-dev)

* bridge-utils package (/sbin/brctl )

* iproute package (/sbin/ip )

* hotplug or udev

进入xen3.3.1/tools/check目录,运行./chk build命令,可查看目前这些必需的软件包的安装状态。可运行./chk install进行安装,也可使用yum install命令对那些必需软件进行在线安装,如:

yum install gcc

yum install binutils

yum install zlib-devel

yum install python-devel

yum install ncurses-devel

yum install openssl-devel

yum install libX11-devel

yum install bridge-utils

yum install iproute

yum install udev

由于安装过程可能需要联网,所以最好使用yum install mercurialyum install hg命令使得hg可用。

最后./chk build全部OK后才能进入下一步安装。

如果网络条件足够好,并可以顺利从国外网站上下载东西,不需要修改配置文件即可进行安装;如果网络条件不够好,则需要修改xen3.3.1目录下的Makefile文件和buildconfigs目录下的src.hg-clone文件。因为当安装stubdom时需要从国外服务器上下载文件,而stubdom是从xen3.3引入的,并不是必需的,故可以Makefile文件里将stubdom相关的代码注释掉;而在编译过程中默认会从国外服务器上使用hg clone一个linux-2.6.18-xen.hg目录(200M),其实就是我们准备好的linux-2.6.18-xen.hg.gz,可对src.hg-clone文件的一些hg代码进行删除。

在编译之前介绍一下make world这个命令。进入Makefile可以发现,其实make world就是make cleanmake kdeletemake dist这三个命令的集合。前两个命令主要用作编译操作的回滚,而负责安装工作的就是make dist这个命令。

解压linux-2.6.18-xen.hg.gz后,将linux-2.6.18-xen.hg这个文件夹拷贝到xen3.3.1目录下,如果编译前没修改任何配置文件的话,不推荐使用make world这个命令。因为使用make world命令后,make cleanmake kdelete会将拷贝进来的linux-2.6.18-xen.hg文件夹删除,并在编译时再从国外服务器上重新下载这个200M的文件夹,将极大地影响编译的效率。所以,要么使用make代替make world进行编译,要么修改Makefile$MAKE clean$MAKE kdelete 注释掉。

我使用make命令进行编译,然后使用make install进行安装。

安装成功后没有successful提示,但安装不成功会有错误提示。如果没有任何错误提示(警告提示是正常的),说明已经安装成功了。Xen安装成功后会生成/etc/xen目录,/lib/modules下会多一个xen相关的目录,/boot目录下也会多几个像xen-3.3.1.gzvmlinuz的文件,也可以检查并确认一下Xen的安装状态。

接下来在boot目录下使用mkinitrd -v -f --with=aacraid --with=sd_mod --with=scsi_mod initrd-2.6.18.8-xen.img 2.6.18.8-xen命令生成initrd-2.6.18.8-xen.img镜像文件。(当然我针对的是有专门的boot分区的fedora系统,可在/boot/grub/menu.lst/boot/grub/grub.conf文件里查看,如果有专门的boot分区,fedoragrub代码前会有/boot)

最后修改grub配置文件(/boot/grub/menu.lst/boot/grub/grub.conf文件)

title Xen 3.3

root (hd0, 7) //这个依据你的fedora分区而定

kernel /boot/xen-3.3.1.gz console=vga //有没有/boot可以参照fedora的引导代码

module /boot/vmlinuz-2.6.18.8-xen ro console=tty0

module /boot/initrd-2.6.18.8-xen.img

重启,进入grub后选择Xen 3.3.1,这时你就可以体验Xen并感受虚拟化的魅力了。

Posted in C/C++/Others, Linux&Minix, 虚拟化 | Leave a comment

SCTS/CGCL09年暑期年会

实验室一年一度的暑期年会于81-3日在武汉蔡甸风翔岛度假村召开,今年是第九届,而我也是第二次参加暑期年会。

跟去年参加暑期年会相比,今年的我少了一些新鲜感,毕竟经过一年的学习和生活,已经对实验室的研究工作有了较清晰的认识,而年会就是对这些工作在过去一年的总结以及新的一年的展望,由计算机学院院长、实验室主任金海教授把关。

130多号人的队伍齐聚风翔岛,好不热闹。这三天吃得不错,玩得也挺开心。第一天晚上没有篝火的篝火晚会,被刘老师拉去做主持,大家玩得还是挺开心的,金老师也给大家献上了《亲亲我的宝贝》等两首情歌,把本次晚会推向了高潮;第二天晚上杀人杀到天亮,让大家尝到了我做土匪的厉害。

本次年会也对实验室的11个研究小组进行了整合和部分调整,比如将云计算和多机虚拟化两小组整合到了一块。我还是在原来的虚拟性能评测组,继续做我的profile工具。

nianhui09

nianhui09_2

Posted in 娱乐天地, 真实生活 | Tagged , | 1 Comment