设为首页 收藏本站
查看: 1862|回复: 0

[经验分享] Openstack CPU/Disk/network QoS 功能

[复制链接]

尚未签到

发表于 2015-10-10 14:18:24 | 显示全部楼层 |阅读模式
  在openstack中Instance Recource Quota这个feature很早就加进来了,不过一直没有全部测试过这个feature。今天在havana版本中测试了一下这个功能。
  首先,这个feature在社区的wiki如下:
  https://wiki.openstack.org/wiki/InstanceResourceQuota


  


  测试过程中发现,这个wiki有些信息已经和代码匹配不上了。
  从总体上来说这个feature的功能是通过cgroup和tc来实现的。cgroup限制CPU/Disk的IO,tc来限制network IO.
  首先看一下CPU限制,目前支持一下参数:
  

quota:cpu_shares
quota:cpu_period
quota:cpu_quota
  我仅测试了quota:cpu_period,测试步骤如下:
  

nova flavor-key  test_resource_quato set quota:cpu_period=110000


  通过CLI设置了flavor的Extra Specs. 当然也可以通过dashboard设置,不过目前存在以下bug,虽然可以实际设进去,但是在dashboard上会重定向错误:
  https://bugs.launchpad.net/horizon/+bug/1268860


  然后使用这个flavor启动虚机,在计算节点上查看cgroup如下:
  

[iyunv@ci91szcmp005vcpu0]# pwd
/cgroup/cpu/libvirt/qemu/instance-00000010/vcpu0
[iyunv@ci91szcmp005vcpu0]# cat cpu.cfs_period_us
110000
[iyunv@ci91szcmp005vcpu0]# cd ../vcpu1/
[iyunv@ci91szcmp005vcpu1]# cat cpu.cfs_period_us
110000
  默认的cpu period是100000,这里已经改成了110000,说明起作用了。
  相关代码如下:
  https://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L3012-3019
  对于Network IO的测试我以前写过一个blog,在havana版本中没有太大的变化,只是tc的作用对象从vnetXX变为了tap设备。在此不再累述,可以参考以下blog:
  http://blog.iyunv.com/matt_mao/article/details/15339729


  另外目前支持的network IO的参数如下:
  

quota:vif_inbound_average
quota:vif_inbound_peak
quota:vif_inbound_burst
quota:vif_outbound_average
quota:vif_outbound_peak
quota:vif_outbound_burst

相关代码如下:  
  https://github.com/openstack/nova/blob/master/nova/virt/libvirt/designer.py#L126-133
  测试Disk IO时发现了以下错误日志:
  

2014-01-1603:25:18.9923158 ERROR nova.compute.manager [req-8e364bca-9313-4c38-a900-34d2b7f3f700 ad3955246b8d45c8a808b83e4d51c246 88f530c7b2484336824c87801d6d4950] [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587] Error: unsupported configuration: block I/O throttling not supported withthisQEMU binary
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587] Traceback (most recent call last):
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]   File"/usr/lib/python2.6/site-packages/nova/compute/manager.py", line 1037, in _build_instance
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]     set_access_ip=set_access_ip)
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]   File"/usr/lib/python2.6/site-packages/nova/compute/manager.py", line 1410, in _spawn
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]     LOG.exception(_('Instance failed to spawn'), instance=instance)
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]   File"/usr/lib/python2.6/site-packages/nova/compute/manager.py", line 1407, in _spawn
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]     block_device_info)
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]   File"/usr/lib/python2.6/site-packages/nova/virt/libvirt/driver.py", line 2070, in spawn
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]     block_device_info, context=context)
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]   File"/usr/lib/python2.6/site-packages/nova/virt/libvirt/driver.py", line 3205, in _create_domain_and_network
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]     domain = self._create_domain(xml, instance=instance, power_on=power_on)
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]   File"/usr/lib/python2.6/site-packages/nova/virt/libvirt/driver.py", line 3148, in _create_domain
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]     domain.XMLDesc(0))
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]   File"/usr/lib/python2.6/site-packages/nova/virt/libvirt/driver.py", line 3143, in _create_domain
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]     domain.createWithFlags(launch_flags)
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]   File"/usr/lib/python2.6/site-packages/eventlet/tpool.py", line 187, in doit
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]     result = proxy_call(self._autowrap, f, *args, **kwargs)
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]   File"/usr/lib/python2.6/site-packages/eventlet/tpool.py", line 147, in proxy_call
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]     rv = execute(f,*args,**kwargs)
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]   File"/usr/lib/python2.6/site-packages/eventlet/tpool.py", line 76, in tworker
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]     rv = meth(*args,**kwargs)
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]   File"/usr/lib64/python2.6/site-packages/libvirt.py", line 708, in createWithFlags
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]     ifret == -1: raise libvirtError ('virDomainCreateWithFlags() failed', dom=self)
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587] libvirtError: unsupported configuration: block I/O throttling not supported withthisQEMU binary
2014-01-1603:25:18.9923158 TRACE nova.compute.manager [instance: ab6f99d6-06f4-4ea2-b4d3-fa3dce322587]


  可能由于qemu的bug,目前还不能正常工作。
  https://www.redhat.com/archives/libvirt-users/2012-December/msg00008.html


  



版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-125172-1-1.html 上篇帖子: OpenStack Nova:虚拟机初始化user-data & Cloud-init 下篇帖子: Hadoop分布式文件系统(HDFS)和OpenStack对象存储(Swift)的技术差异
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表