前言
经过长足的发展, 云计算技术现已越来越成熟和普遍。分类也很多,从用户场景可以分为 公有云、私有云、混合云; 从架构上讲,有IaaS, PaaS, SaaS等等。 针对最普遍的公有云,IaaS, 怎样来衡量一个云资源池的性能多高呢? 更高的vcpu,更大的内存?抑或是更快的网络和磁盘?一方面,想要在有限的硬件资源中部署更多的虚拟资源,又想要同时保证虚拟机的各个性能不至于太低, 这是一个比较头疼的问题。
让我们通过SPEC CLOUD 2018,来揭晓它的逻辑...
什么是SPEC CLOUD 2018
SPEC Cloud IaaS 2018 Benchmark是SPEC开发的评估基于大数据场景下的云基准标准测试套件,采用Yahoo的YCSB与HiBench的K-Means模拟实际的工作负载。主要测试的是IaaS云平台性能,选用两类最重要的和最具代表性的负载:云平台上运行IO密集型和计算密集型负载,通过加压测试数据面性能、可扩展性以及控制面性能来得到测试结果。
SPEC CloudIaaS 2018具有完善技术测试框架,是云计算性能测试的基准,是企业级客户云产品选型的重要参考标准。测试框架主要指标包含如下4个方面:
- 复制的应用实例数:复制的应用实例数表示在测试结束时已完成至少一个有效应用的实例总数。总复制数是K-Means与YCSB的应用实例总和,但二者任何一项的有效应用实例不能超过总数的60%。
- 性能得分:性能得分是所有有效应用实例的得分总和,代表了所有应用在云环境的总体表现。它是SPEC CloudIaaS 2018规范的YCSB和K-Means性能得分的总和。
- 相对可扩展性:相对的伸缩度是当多个应用实例同时运行,云环境未引入其他负载时,每个应用实例能提供与baseline阶段的应用实例相同运行水平的百分比。相对可扩展性是IO密集型负载和计算密集型负载两种负载的相对可伸缩度的平均值,它以百分比表示,结果越高代表相对可扩展性越好。
- 平均实例的配置时间:平均实例的配置时间表示有效应用实例中,所有实例的平均配置时间。每个实例的配置时间都是从创建实例请求开始到cbtool驱动可以ssh到实例的时间间隔。
结果示例:
SPEC CLOUD 2018 测试用例分类
从测试内容上,SPECCLOUD分为两种类型的测试:IO密集型负载测试 和 计算密集型负载测试
IO密集型负载测试:YCSB是Yahoo公司的一个用来对云服务进行基础测试的工具,SPEC CloudIaaS 2018通过创建NoSQL(Cassandra)实例实现YCSB架构。
YCSB 虚拟机架构:
YCSB测试覆盖以下指标:
-
- 吞吐量(throughputs),单位:ops/sec
- 插入响应时间,单位:毫秒
- 读取相应时间,单位:毫秒
计算密集型负载测试:K-Means算法是机器学习中常用的一种聚类算法。SPEC CloudIaaS 2018基准测试使用HiBench K-Means实现计算密集型测试。其测试项包括完成时间、每个应用实例运行的Hadoop迭代计数、平均应用实例配置时间。
K-Means 虚拟机架构:
K-Means 测试套件,在测试中会包含1个Hadoop name node(也叫 HiBench instance)和5个Hadoop data node。其中Hadoop name node上面运行驱动测试的程序和服务,生成一些可用于K-Means算法的数据, 数据处理方面的工作,则是在5个Hadoop data node上进行。同样,K-Means测试套件中,也会有一些由CBTOOL来hardcode的参数,如下:
通过以上YCSB和K-Means2个测试套件, 可以针对以下的指标做出具体的衡量,用于最后的结果计算:
SPEC CLOUD 2018 测试方法分类
根据部署的CBTOOL机器的位置, SPECCLOUD的测试分为白盒测试(white-box) 和 黑盒测试(black-box)两种。
黑盒测试:测试机器CBTOOL部署在被测的资源池中,但是不能与其他用于测试目的的虚拟机共用一个物理环境,换言之,就是不要让CBTOOL机器部署在用于测试的计算节点中。若确实需要部署在某一个计算节点, 那么需要将该物理计算节点在openstack侧进行下线,以避免会有虚拟机在创建时落到该节点。比如可以放到KVM管理节点上。
白盒测试:相对于黑盒测试, 白盒测试中, CBTOOL节点会部署在独立于被测资源池之外的环境中。 然后将CBTOOL节点的网络与被测资源池的网络进行打通从而进行通信。
SPEC CLOUD 2018 部署配置与调试
总体部署内容:
- 根据部署文档,配置各个服务器网络、用户、权限,创建好需要的管理虚拟机以及各个组件。
- 部署SPECCLOUD 2018 工具包至指定机器(即CBTOOL)(虚拟机/物理机)。
- 配置CBTOOL与被测资源之间的网络连接以及CBTOOL本身所需要的配置。
- 部署好后, 执行相关命令对进行测试,确保整个部署成功。
- 测试虚拟机镜像制作
着重讲解一下CBTOOL测试机器部署与配置
对于CBTOOL测试机器,不论是黑盒或者是白盒, 被测试的资源池都需要满足以下条件:
- CBTOOL 机器可以连通外网,进行依赖包的安装
- CBTOOL机器可以连通被测试资源池的计算管理网和存储管理网。
- CBTOOL机器可以与被创建在被测资源池中的虚拟机进行SSH通信,以便CBTOOL机器通过22端口(默认)进行数据交换。因此,测试需要打通数据面与管里面之间的网络连接,在部署被测资源池前,需要规划好资源池网络架构和物理网络。
- NTP服务器,CBTOOL、被测资源池中的计算节点、存储节点以及被创建的虚拟机之间需要进行时间同步,否则会影响测试结果。
- 目前SPECCLOUD 2018仅支持ubuntu/centos 两种OS部署CBTOOL,根据发布出来的结果看,基本上都用的是04/18.04两种版本。
- CBTOOL需要与被创建虚拟机进行交互,存储相关log, 推荐的配置至少为:4C8G, 40G的磁盘空间。
配置好以上内容后,执行命令 cd ~/osgcloud/cbtool/; ./cb --soft_reset如果没有报错,则表示CBTOOL可以与被测资源池的配置完成了。
接下来,开始制作镜像:
- 支持ubuntu/centos等Linux OS镜像
- 测试所依赖的所有基础依赖包
- YCSB: Cassandra 数据库安装及其服务配置
- KMEANS: Hadoop 集群安装及其服务配置和初始化
- NTP 服务安装配置和使能。
- YCSB/K-Means镜像与CBTOOL联调测试
- 上传制作的YCSB(image_ycsb.qcow2) 和 K-Means(image_hadoop.qcow2)镜像至被测资源池
修改配置文件~/osgcloud/cbtool/configs/cbuser_cloud_definitions.txt,在对应的CLOUD配置代码段(我们例子里是MYOS)后面添加以下内容:
[VM_TEMPLATES : OSK_CLOUDCONFIG] # setting various CBTOOL roles and images
# the images have to exist in OpenStack glance.
# choose required images and comment other images.
# ubuntu images
CASSANDRA = size:m1.medium, imageid1:cassandra_ubuntu
YCSB = size:m1.medium, imageid1:cb_speccloud_cassandra
SEED = size:m1.medium, imageid1:cb_speccloud_cassandra
HADOOPMASTER = size:m1.medium, imageid1:cb_speccloud_kmeans
HADOOPSLAVE = size:m1.medium, imageid1:cb_speccloud_kmeans
上面的配置指定了要创建的YCSB/K-Means虚拟机的规格,使用的镜像。 需要确保在被测资源池中已经创建好了相应的flavor和镜像。
- 命令行调试
SSH到CBTOOL,执行命令:
$ ./cb --soft_reset -c configs/cbuser_cloud_definitions.txt
cb> vmattach cassandra
cb> vmattach ycsb
cb> vmattach hadoopmaster
cb> vmattach hadoopslave
cb> vmattach hadoop
上面的vmattach命令执行完成后, 可以通过命令 vm list 来查看创建的虚拟机。 也可以在被测资源池侧通过openstack命令查看。
若上面的vmattach命令都没有问题,那么就可以开始进行测试了。
SPECCLOUD 2018 测试之Baseline
SPECCLOUD 2018 测试分为两个阶段,一个是 baseline,另一个是scale-out,当两个都跑完时,才会有报告生成。scale-out是基于baseline的基础上进行的测试,需要先跑baseline,再跑scale-out。
YCSB Baseline测试: ./all_run.sh -e SPECRUNID -s ycsb_baseline, SPECRUNID为SPECCLOUD测试执行的唯一标识,可以任意设置。
K-means Baseline测试: ./all_run.sh -e SPECRUNID -s kmeans_baseline
测试完成后,在home目录下的~/results/SPECRUNID/perf/下会生成多个测试结果。
在/var/log/cloudBench/下会生成SPECCLOUD测试的日志,一般排查问题时会查看。
SPECCLOUD 2018 测试之Scale-out
在Baseline完成之后,可以执行命令:./all_run.sh -e SPECRUNID_NEW -s scale_out_NC -b ~/results/SPECRUNID_FIRST/perf/baseline_SPECRUNID_FIRST.yaml --yes
也可以直接执行:./all_run.sh -e SPECRUNID_FIRST -s all来一次性跑baseline + scale out的测试
测试报告生成
- 编辑配置文件
yaml
该文件中详细描述了被测资源池的各种跟新,包括, 计算节点配置, 网络配置, 存储配置,控制节点配置,以及YCSB/K-Means测试中使用到的镜像信息等。
具体可以去/home/cbuser/osgcloud/driver/osgcloud_environment.yaml进行查看。
在生成报告之前,需要对里面的信息进行填写和替换。