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

关于如何限制虚拟机的网络流量问题,可以使用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'

posted on 2012-05-14 18:21  lin_victor  阅读(2066)  评论(0编辑  收藏  举报

导航