OpenStack performance相关分析

来源:互联网 发布:崇祯 知乎 编辑:程序博客网 时间:2024/05/21 07:09

          OpenStack的performance影响主要包括磁盘I/O、 内存、CPU与网络了解它们的影响并根据他们的影响来合理的选择集群设备并做合理的配置, 将决定OpenStack的使用好坏。

          I/O不难理解, instance需要使用存储, instance和image的上传下载等都要进行磁盘的访问, 当instance的增多, 访问的竞争将更加激烈;

          内存也是很重要的影响因素, instance的运行离不开内存的使用,内存的数量及能否合理最优利用也会影响我们的云能力;

          CPU, 处理器的计算能力必然决定云的计算能力。

          网络:包括instance之间的网络, 管理网络(包括openstack组件之间以及instance的快照到glance的上传下载等), 块存储网络(iscsi). 这个无疑是OpenStack的大瓶颈

          接下来我将从两方面讲述,分别是设备资源的选择和资源的合理配置。

设备资源的选择:

          I/O设备:选择高IOPS的高性能I/O设备, 如固态硬盘SSD, 关于SSD, 随便搜到一个特征手册介绍了一些提高性能的特性, 如OP(Over-provisioninghttp://www.pceva.com.cn/topic/crucialssd/index-6_5.html

          CPU和内存则可以根据已有硬件资源,数量足够,计算节点的cpu最好要支持HVM扩展AMD-V or IntelVT, 同时要bios里开启VT.

          网络部分有个基本的参考值,instance 之间的网络:这个可使用1Gb/s的网络连接上对外的交换机,交换机可以为10Gb/s,块存储网络:比如我们使用的存储用iscsi连接, 这个要求比较高,最好是至少10Gb/s,管理网:推荐至少1Gb/s,关于管理网中rpc, 消息中间件暂支持qpid,rabbitMQ, ZeroMq, 现在主流主要使用rabbitMQ,小范围的部署中, 可以共享一个物理网卡使用vlan来做多个网络的模拟,大规模的部署, 还是要提供多个不同的物理连接的。

        此外, OpenStack 中支持不同hypervisor的虚拟化技术, 有KVM, Xen, HyperV, VMware Esx, 这个不好说那个性能好哪个性能差, 暂时还没有数据支持, OpenStack中对Hyper-V的支持有的地方还有欠缺, 而且hyper-v的使用也不广泛, OpenStack使用VMware主要是连接vcenter, 利用vcenter来实现虚拟化。就openstack来说, kvm是使用最广的, 测试最多支持更好的。而且KVM现在进入了linux内核中, 性能也会有所提高. 一个测试KVM 200 vm部署的例子

资源的合理配置:

            首先说说两个OpenStack中的重要概念, flavor 和quota. flavor为instance的type. 告诉可创建的instance的可用磁盘大小, 内存大小, cpu个数. 这个要定义合理, 比如总共有40G硬盘, 16G内存, 定义一个flavor为"1G 内存, 40G硬盘, ..."就不合理了. quota这个概念是配额的意思,是给每个tenant的配额. 这个可以根据每个tenant的资源需求合理的配置资源,比如我们常见的, cinder下, 如果我们不修改配置文件, 那默认像service, admin这些tenant的volume, snapshot就只可创建10个.

          对计算资源的充分利用,可以在scheduler的时候定义filter或者让计算机点虚报更多的资源,因为我们的计算instance并不是完全占有分配给它的资源,是可以超出的, 这也要个度. 合理利用可以更好的利用资源,以nova为例, nova-api把选择合适主机的任务交给nova-scheduler之后, nova- scheduler就要根据我们定义的filter来工作了,各种filter的定义都在nova/scheduler/filters/, 可以详细了解, 这里介绍三种

        1、 Ram

            RamFilter算法:host可被选择的条件:total_usable_ram_mb * FLAGS.ram_allocation_ratio  - used_ram_mb >= requested_ram,是主机可提供内存与实际内存之比, 这个算法的妙处在于FLAGS.ram_allocation_ratio, ram_allocation_ratio可以在配置文件nova.conf中设置,默认值为1.5,也就是说可以超额的设置, 这是为什么呢, 因为在实际使用中很多instance并不会占满cpu, 所以可以在初始分配的时候超额分配.  这个选择要根据设备的使用经验, 我曾经见过一个设置为15, 结果导致instance部署失败.

           可通过free命令查看系统内存使用情况

          这里多说下Linux下的ram管理机制中的MemoryOvercommit (Linux core function),它使得在linux下可以通过配置overcommit_ratio来决定能使用的总内存的比例, 通过overcommit_memory确定能否通过某个对内存资源的请求,手册可见https://www.kernel.org/doc/Documentation/sysctl/vm.txt

        kernel中可以设置这两个参数overcommit_memoryovercommit_ratio, 简单叙述如下

        overcommit_memory:default 0

               0:计算free内存,如果有就同意overcommit

               1:同意overcommit,知道内容没有了,run out

               2:不能overcommit, <swap +total_ram*overcommit_ratio

        overcommit_ratio:default 50意思只能占用50%physicalram

      2、 Disk

         DiskFilter算法: total_usable_disk_mb * CONF.disk_allocation_ratio-used_disk_mb >=requested_disk, disk_allocation_ratio是指主机可提供虚拟disk与主机实际disk之比。这个算法和ramfilter很像, 为了合理利用资源, 主要是合理的配置disk_allocation_ratio, 默认为1.0。 这个可配置,故意配置为大于1, 就是我们处理分配给instance的disk,它们并不是完全占满, 比如qcow2部署的instance, 它的磁盘占用开始是比较小的, 慢慢增长。

      3、Core 即CPU

      CoreFilter算法:host_state.vcpus_total * cpu_allocation_ratio-host_state.vcpus_used >= instance_vcpus, cpu_allocation_ratio是指主机可提供VCPU与主机实际物理CPU之比, 默认值设为16

0 0
原创粉丝点击