您的位置:首页 > 理论基础 > 计算机网络

linux下的虚拟机网络流量控制

2012-05-14 18:21 609 查看
关于如何限制虚拟机的网络流量问题,可以使用linux下的TC (traffic control),关于如何使用linux的tc命令参加下面几个链接:

利用TC命令为KVM限制各VM的网卡带宽 :http://www.fuwuqiweihu.com/iproute-tc-kvm-vm-network-limit/

TC控制流量: http://www.chinaunix.net/jh/4/350969.html

http://www.bitscn.com/os/linux/201003/183181_7.html

http://www.chinaz.com/server/2009/0807/85806.shtml
发现ubuntu已有tc命令于是:

输入命令:

tc qdisc add dev eth0 root tbf rate 10Mbit latency 50ms burst 10000 mpu 64 mtu 150000

出现错误:

RTNETLINK answers: No such file or directory

问题出在相关模块没有加载,遂查找流量控制内核选项要求 http://linux-ip.net/articles/Traffic-Control-HOWTO/ 第5章 Software and tools 中有介绍 “Kernel requirements”:

#
# QoS and/or fair queueing
#
CONFIG_NET_SCHED=y
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_HTB=m
CONFIG_NET_SCH_CSZ=m
CONFIG_NET_SCH_PRIO=m
CONFIG_NET_SCH_RED=m
CONFIG_NET_SCH_SFQ=m
CONFIG_NET_SCH_TEQL=m
CONFIG_NET_SCH_TBF=m
CONFIG_NET_SCH_GRED=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCH_INGRESS=m
CONFIG_NET_QOS=y
CONFIG_NET_ESTIMATOR=y
CONFIG_NET_CLS=y
CONFIG_NET_CLS_TCINDEX=m
CONFIG_NET_CLS_ROUTE4=m
CONFIG_NET_CLS_ROUTE=y
CONFIG_NET_CLS_FW=m
CONFIG_NET_CLS_U32=m
CONFIG_NET_CLS_RSVP=m
CONFIG_NET_CLS_RSVP6=m
CONFIG_NET_CLS_POLICE=y

重新按照上述要求编译内核,重启后问题解决。

相关信息及测试数据:

系统版本: Linux nc2 3.2.0-rc3 #4 SMP Mon May 14 17:09:56 CST 2012 i686 GNU/Linux

未流量控制前信息:

root@nc2:~/lguest/botnet_lguest# tc -s qdisc ls dev eth0
qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Sent 10413 bytes 86 pkt (dropped 0, overlimits 0 requeues 0)

测试网络流量:

root@nc2:~/start-kvm# scp ubuntu161.img root@nc1:/root
ubuntu161.img 20% 539MB 63.3MB/s 00:33 ETA

吞吐量为63.3MB/s

执行流量控制:

root@nc2:~/start-kvm# tc qdisc add dev eth0 root tbf rate 10Mbit latency 50ms burst 10000 mpu 64 mtu 150000

执行流量控制后信息:

root@nc2:~/start-kvm# tc qdisc ls dev eth0
qdisc tbf 8003: root refcnt 2 rate 10000Kbit burst 9997b lat 50.0ms

测试网络流量:

root@nc2:~/start-kvm# scp ubuntu161.img root@nc1:/root

ubuntu161.img 0% 18MB 1.2MB/s 36:13 ETA

吞吐量为1.2MB/s

测试结果显示流量控制成功!

Note: linux 下的流量控制只控发不控收,因此假设linux虚拟机的虚拟eth0 对应的TUN/TAP端口名称为tap0, 则如何对虚拟eth0实行TC控制,控制的是虚拟机的发包,如果对tap0设置TC控制则是对间接对虚拟机的接包进行控制。

通过命令 'tc qdisc ls dev eth0'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: