动态修改Xen netback 的rate limit

本文介绍了一种在Xen虚拟环境中实现网络流量速率限制的方法。通过使用registerxenwatch注册监听器,并在回调中重新读取速率限制值,实现了在detach、attach操作后的前后端重新连接时动态调整速率限制。此方法特别适用于解决Windows环境下速率限制失效的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接着昨天的写,由于detach,attach,重新建立后端和前端握手,对于Linux来说无所谓,windows的话,有点问题。所以采用第二种方法,register xenwatch,callback里面去重新read rate limit。废话少说,直接贴代码。

 

 

 

--- ../dom0_kernel_netback_rate/drivers/xen/netback/xenbus.c 2010-10-26 18:50:33.000000000 +0800
+++ ../dom0_kernel_398819_20101019/drivers/xen/netback/xenbus.c 2010-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!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值