http://blog.csdn.net/wanjia19870902/archive/2010/10/26/5967467.aspx
编译Xen的话,如果需要从网上下载的话就按照Readme里面说的那样make world,make install 。但是通常情况,我们都会自己搞好源码包,那么直接make xen make tools make install-xen make install-tools
编译Dom0 kernel的话,有两种方法,一种是Readme里面说的,make linux-2.6-pvops build / install 我之前就这样编的,不过有些不方便,需要把你dom0 kernel的文件夹链到linux-2.6-pvops.git 。还有一种就是直接编译kernel,拷贝.config文件,make make modules_install make install。
最后重新mkinitrd -v -f --builtin=ehci-hcd --builtin=ohci-hcd --builtin=uhci-hcd --with=aacraid --with=sd_mod initrd-2.6.31.13-wj.img 2.6.31.13-wj,并修改grub文件。
好的,现在环境算是弄好了,把之前的kernel全删了,干净多了。
由于现在有个问题是,如何动态修改xen里面的rate limit。看了netback里面的代码,发现,是在前后端connect的时候,netback会去读xenbus里面的rate值,并在后面一段时间内的tx bytes进行监控,如果超出credit,则等待这段时间过去,重新计时监控。
目前貌似有两种想法:一种是detach vif 在attach vif,这样前后端会重新connect,读新rate,还有一种是让netback watch这个xenstore path被修改的事件,调用callback,改写内存中的credit值。
今天初步试验了下,由于还要赶回家写自己的代码,暂时写到这。等确定方案了,在详细讲解
接着昨天的写,由于detach,attach,重新建立后端和前端握手,对于Linux来说无所谓,windows的话,有点问题。所以采用第二种方法,register xenwatch,callback里面去重新read rate limit。废话少说,直接贴代码。
--- ../dom0_kernel_netback_rate/drivers/xen/netback/xenbus.c2010-10-26 18:50:33.000000000 +0800
+++ ../dom0_kernel_398819_20101019/drivers/xen/netback/xenbus.c2010-04-03 05:29:40.000000000 +0800
@@ -33,8 +33,6 @@
static void connect(struct backend_info *);
static void backend_create_netif(struct backend_info *be);
static void unregister_hotplug_status_watch(struct backend_info *be);
-static void unregister_rate_watch(struct backend_info *be);
-
static int netback_remove(struct xenbus_device *dev)
{
@@ -43,7 +41,6 @@
//netback_remove_accelerators(be, dev);
unregister_hotplug_status_watch(be);
-unregister_rate_watch(be);
if (be->netif) {
kobject_uevent(&dev->dev.kobj, KOBJ_OFFLINE);
xenbus_rm(XBT_NIL, dev->nodename, "hotplug-status");
@@ -355,15 +350,6 @@
be->have_hotplug_status_watch = 0;
}
-static void unregister_rate_watch(struct backend_info *be)
-{
-if (be->have_rate_watch) {
-unregister_xenbus_watch(&be->rate_watch);
-kfree(be->rate_watch.node);
-}
-be->have_rate_watch = 0;
-}
-
static void hotplug_status_changed(struct xenbus_watch *watch,
const char **vec,
unsigned int vec_size)
@@ -385,17 +371,6 @@
kfree(str);
}
-static void rate_changed(struct xenbus_watch *watch,
- const char **vec, unsigned int len)
-{
-
-struct backend_info *be=container_of(watch,struct backend_info, rate_watch);
-
-IPRINTK("rate changed/n");
-xen_net_read_rate(be->dev, &be->netif->credit_bytes,
- &be->netif->credit_usec);
-}
-
static void connect(struct backend_info *be)
{
int err;
@@ -426,16 +401,7 @@
be->have_hotplug_status_watch = 1;
}
-unregister_rate_watch(be);
-err=xenbus_watch_pathfmt(dev, &be->rate_watch,
- rate_changed,"%s/%s", dev->nodename, "rate");
-
-if(!err){
-be->have_rate_watch=1;
-}
-
}
重新编译内核之后,调用xenstore write /local/domain/0/backend/vif/id/0/rate "xxx,xxx",之后进入虚拟机,scp一个文件发现,果然重新限速了。Bingo!
分享到:
相关推荐
xen 4.0 最新源码xen 4.0 最新源码xen 4.0 最新源码
ubuntu 修改XEN loop device数目限制问题.在虚拟机克隆时候的数量问题
XEN4.0内核编译XEN4.0内核编译XEN4.0内核编译XEN4.0内核编译XEN4.0内核编译XEN4.0内核编译XEN4.0内核编译XEN4.0内核编译
xen做为虚拟化的产品,在虚拟化领域做的很不错,本文描述Xen管理内存的机制
Memory CoW in Xen xen memory cow 介绍
《Xen虚拟化技术》主要讲述了:目前,无论是学术界还是工业界,虚拟化技术的研究和应用都是热点。在不断涌现出的虚拟化解决方案中,开源解决方案Xen以其独特的虚拟化设计模式,以及接近单机操作系统的性能被学术界和...
使用yum安装Xen 使用yum安装Xen 使用yum安装Xen 使用yum安装Xen 使用yum安装Xen 使用yum安装Xen 使用yum安装Xen 使用yum安装Xen 使用yum安装Xen 使用yum安装Xen 使用yum安装Xen 使用yum安装Xen
XEN V1.0.7 [CyberNation]
Xen虚拟机最大的特点就是高性能,适合用于生产上。目前Xen已经被用于大型商用,例如亚马逊的ec2就是使用xen虚拟化技术。 本文档是本人根椐自己的实操经验和网上的资料整合出来的,包括Xen的历史,原理和操作命令, ...
Xen多网桥配置 Xen多网桥配置 Xen多网桥配置 Xen多网桥配置
关于Xen的培训资料. 里面系统的讲述了Xen的构架和应用
Xen源码 —— xen-4.1.1.tar.gz xen-4.1.1.tar.gz
基于XEN的虚拟机动态内存迁移研究及优化,付超,,动态迁移已成为虚拟化技术的焦点,而内存迁移却是其瓶颈所在。本文针对xen pre-copy算法的优点与不足,特别是面对频繁更改页面所体现
XEN4.0虚拟机内核编译XEN4.0虚拟机内核编译XEN4.0虚拟机内核编译XEN4.0虚拟机内核编译
xen,api,虚拟化,编程,分析,xen内存虚拟化,xen框架
比较全面的介绍xen的书,专业介绍虚拟化技术xen的资料。希望大家喜欢!
xen文档的分析
xen 安装配置与运维
解释Xen内存虚拟化技术,解释Xen内存虚拟化技术
xen man xen man