Openstack中的网络QoS功能
2014-04-24 15:11
423 查看
转载自:http://blog.csdn.net/matt_mao/article/details/15339729
在openstack Grizzly版本中,其实已经集成了网络的qos功能,之前一直没有注意,有一个叫做instanc resource quota的功能:
https://wiki.openstack.org/wiki/InstanceResourceQuota
这个功能实现了CPU,disk IO和network IO的限流功能。 不过由于以下bug,真正可以正常工作的版本必须是2013.1.3以上版本。
https://bugs.launchpad.net/nova/+bug/1185030
另外, wiki上的命令中key是不准确的,key的值可以参考以下源码:
这些限流功能其实是libvirt本身就提供的,openstack在设置flavor时,可以想这些限流信息设定好。当启动虚机时,写入虚机的/var/lib/nova/instance/XXX/libvirt.xml中就可以了。
我大致实验了一下发现效果还是比较明显的,实验步骤如下:
1. 创建flavor。
2. 使用以下命令设置网络qos:
nova flavor-key matt_test set quota:vif_outbound_average=1024 ß outbound limit是 1024
kbyte
nova flavor-key matt_test set quota:vif_inbound_average=2048 ß inbound limit 是 2048
kbyte
3. 使用这个flavor启动instance,测试上下行速度, 我使用的是netperf+iptraf。发现qos功能正常。
以下截图是使用scp拷贝文件,可以很明显的看出效果:
无QoS,下行速度80MByte/s:
有QoS,下行速度2MByte/s左右:
可以看到libvirt.xml中添加了qos的信息:
<interface type="bridge">
<mac address="fa:16:3e:40:85:d1"/>
<model type="virtio"/>
<source bridge="br101"/>
<filterref filter="nova-instance-instance-0000006c-fa163e4085d1"/>
<bandwidth>
<inbound average="2048"/>
<outbound average="1024"/>
</bandwidth>
</interface>
在host主机中使用tc命令发现在vnet0上设置了qos规则,看来libvirt也是使用host主机的TC来实现qos功能的:
# tc -s -d qdisc
…
qdisc htb 1: dev vnet0root refcnt 2 r2q 10 default 1 direct_packets_stat 0 ver3.17 ß Outbound QoS
Sent 310426919bytes 286434 pkt (dropped 0, overlimits 106276 requeues 0)
rate 0bit 0ppsbacklog 0b 0p requeues 0
qdisc ingress ffff: devvnet0 parent ffff:fff1 ---------------- ß Inbound QoS
Sent 191950889 bytes80382 pkt (dropped 806, overlimits 0 requeues 0)
rate 0bit 0ppsbacklog 0b 0p requeues 0
# tc class show devvnet0
class htb 1:1 root prio0 rate 16384Kbit ceil 16384Kbit burst 1597b cburst1597b
在openstack Grizzly版本中,其实已经集成了网络的qos功能,之前一直没有注意,有一个叫做instanc resource quota的功能:
https://wiki.openstack.org/wiki/InstanceResourceQuota
这个功能实现了CPU,disk IO和network IO的限流功能。 不过由于以下bug,真正可以正常工作的版本必须是2013.1.3以上版本。
https://bugs.launchpad.net/nova/+bug/1185030
另外, wiki上的命令中key是不准确的,key的值可以参考以下源码:
这些限流功能其实是libvirt本身就提供的,openstack在设置flavor时,可以想这些限流信息设定好。当启动虚机时,写入虚机的/var/lib/nova/instance/XXX/libvirt.xml中就可以了。
我大致实验了一下发现效果还是比较明显的,实验步骤如下:
1. 创建flavor。
2. 使用以下命令设置网络qos:
nova flavor-key matt_test set quota:vif_outbound_average=1024 ß outbound limit是 1024
kbyte
nova flavor-key matt_test set quota:vif_inbound_average=2048 ß inbound limit 是 2048
kbyte
3. 使用这个flavor启动instance,测试上下行速度, 我使用的是netperf+iptraf。发现qos功能正常。
以下截图是使用scp拷贝文件,可以很明显的看出效果:
无QoS,下行速度80MByte/s:
有QoS,下行速度2MByte/s左右:
可以看到libvirt.xml中添加了qos的信息:
<interface type="bridge">
<mac address="fa:16:3e:40:85:d1"/>
<model type="virtio"/>
<source bridge="br101"/>
<filterref filter="nova-instance-instance-0000006c-fa163e4085d1"/>
<bandwidth>
<inbound average="2048"/>
<outbound average="1024"/>
</bandwidth>
</interface>
在host主机中使用tc命令发现在vnet0上设置了qos规则,看来libvirt也是使用host主机的TC来实现qos功能的:
# tc -s -d qdisc
…
qdisc htb 1: dev vnet0root refcnt 2 r2q 10 default 1 direct_packets_stat 0 ver3.17 ß Outbound QoS
Sent 310426919bytes 286434 pkt (dropped 0, overlimits 106276 requeues 0)
rate 0bit 0ppsbacklog 0b 0p requeues 0
qdisc ingress ffff: devvnet0 parent ffff:fff1 ---------------- ß Inbound QoS
Sent 191950889 bytes80382 pkt (dropped 806, overlimits 0 requeues 0)
rate 0bit 0ppsbacklog 0b 0p requeues 0
# tc class show devvnet0
class htb 1:1 root prio0 rate 16384Kbit ceil 16384Kbit burst 1597b cburst1597b
相关文章推荐
- charles添加https支持
- TCP连接建立与关闭
- 带你认清所谓实时优化、内存整理、网络优化、注册表清理的骗局
- TCP/IP全数字楼宇可视对讲行业预想
- [翻译] PBJNetworkObserver 网络监控
- ueditor图片上传,网络连接错误的解决方案
- 关于神经网络
- Ubuntu10.10的网络配置
- android用https发送post请求
- http状态 4000 码
- [转]无线网络
- webview详解 转载地址http://m.blog.csdn.net/blog/qeqeqe236/7951409
- NSURLConnection实现HTTPS(SSL)链接请求
- HttpClient开发 入门 get Post 等方式
- TCP/IP子网掩码教程
- Java发送HTTP的POST请求
- ubuntu下安装tcpcopy离线版
- tcpcopy
- spring tool suite 设置 http://127.0.0.1:8080报404错误
- HTTP请求方法及响应码详解(http get post head)