1、整体性能
做任何的业务计算都需要占用大量CPU的运算能力,比如直播等视频编解码等,业务高峰期CPU的利用率经常会达到90%以上。
测试工具:我们选择了评测工具SPEC CPU。SPEC CPU是标准性能评价机构 (Standard Performance Evaluation Corporation,简称SPEC)开发的用于评测CPU性能的基准程序测试组,是一套CPU子系统测试工具。处理器、内存和编译器都会影响最终的测试结果,而I/O(磁盘)、网络、操作系统和图形子系统对SPEC CPU2000的影响非常小。目前,SPEC CPU是业界首选的CPU评测工具。我们使用了其中的SPECint基准测试程序来评测各家云服务器的整型处理性能。
2、浮点计算能力/CPU性能
接下来,我们看下浮点运算能力,包括单核、多核浮点性能。使用的工具是Super Pi,这是一个比较聚焦和简单的算例,专门算圆周率,跟CPU的主频密切相关,耗时越短性能越高。
3、内存带宽
测试工具:Stream是业内公认的用于内存性能评估的基准测试软件,其包括Copy(复制)、Scale(乘法)、Add(加法)以及Triad(三者复合)四种不同操作情况下的内存带宽表现。
4、内存延迟
测试工具:MLC为 Intel官方提供的免费内存测试工具,可以有效方便地测试内存延时。
二、网络性能
接下来是网络性能,我们主要看PPS和时延。
1、PPS
PPS是每秒传输的数据包数量,直播等网络要求较高场景对PPS要求比较高。单实例PPS越大,网络性能越强,往往意味着可支撑更大的业务量。
在业务运行过程中,如果PPS比较高,QPS也会相对应更高。比如在非常常见的发弹窗场景,PPS高的机器能承载的发弹窗数量更高,有利于节省业务成本。
测试工具:Netperf是一种网络性能的测量工具,主要针对基于TCP或UDP的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。Netperf测试结果所反映的是一个系统能够以多快的速度向另外一个系统发送数据,以及另外一个系统能够以多块的速度接收数据。
测试方法:在云主机A上安装netperf的netserver作为服务器端,云主机B上安装netperf作为客户端,在不运行应用情况下,云主机B压测云主机A(数据包大小1),测试云主机A的网络 UDP 收PPS性能。
网络压力持续时间为5分钟,取云主机A收到压力50秒后持续200秒的PPS平均值。
2、网络延迟
延迟是大多数企业非常关注指标。因为比如在游戏和直播的业务,对延迟是十分敏感的,这是最关键的指标之一。
测试工具:sockperf,是基于套接字API的网络基准测试实用程序,旨在测试高性能系统的性能(延迟和吞吐量),也适用于测试常规网络系统的性能。它涵盖了大多数套接字API调用和选项。
测试方法:用sockperf测试服务器在PPS 5000压力环境下的时延。
三、存储性能
存储性能取决于不同的存储实现,现阶段不同的云服务器厂商会提供不同的存储解决方案以应对各种使用场景,目前SSD已经成为趋势,Ddv4 暂时不能挂载超级SSD盘,无法测试。
对存储需求最大主要是跑MySQL的场景,只需要用到一块ESSD云盘。但一般来说厂商们出于QoS(质量控制)的原因,即为了保证每台实例的体验(以免有用户买了小规格云盘,却占用了大量带宽),会根据磁盘大小对云盘性能进行限制,因此我们选择了比较大的1.1T的云盘来测试,主要测的是IOPS和延迟。
1、IOPS
存储IOPS影响着单台机器能承载的业务量。电商场景就是非常典型的高IOPS的场景:用户下单,业务场景一般有查询和写入两种情况,查询一般会用很多缓存;写入场景就需要数据及时落盘,要求提高数据的写入并发能力,需要很高的存储IOPS。尤其在大促场景下,单盘更大的IOPS可以支撑更多用户下单。
测试工具:fio是IO性能测试工具,可以运行在Linux、Windows等多种系统之上,可以用来测试本地磁盘、网络存储等的性能。
测试方法:我们在不运行应用情况下,云主机挂载1100G的 SSD云盘,并通过fio压测(4K数据块,随机写、随机读,队列深度为64,numjobs为8)。对存储持续压测一段时间,取write/read的iops值。
2、读写延迟
存储延迟则影响着用户的体验,比如在电商场景下,延迟越低用户下单的响应速度越快。
测试工具:fio
测试方法:Linux 云主机安装 fio,在不运行应用情况下,云主机挂载1100G的 cloud_essd 硬盘,并通过fio压测(4K数据块,随机写、随机读,队列深度为1,numjobs为1)。存储压力持续时间一段时间,取write/read的lat值。
说明:fio 对大目录的元数据验证完整性不够,这里可以用vdbench 和iometer 来进行元数据的iops验证。
四、特定场景测试
即便跑分性能在高,云服务器毕竟是用来跑业务的,机器的性能最终还是要看E2E的性能。因此,我们选择了最为常用的几项应用。
1、MySQL
MySQL 是最流行的RDBMS(Relational Database Management System:关系数据库管理系统),在WEB应用方面 MySQL 是最好的RDBMS应用软件之一。
其因为开源、速度、可靠性和适应性而被广泛使用。因而,运行MySQL的能行,也是衡量云服务器表现的一个重要指标。
测试工具:sysbench是跨平台的基准测试工具,支持多线程,支持多种数据库;主要包括以下几种测试:cpu性能、磁盘io性能、调度程序性能、内存分配及传输速度、POSIX线程性能、数据库性能(OLTP基准测试)。这里主要使用对数据库性能的测试。
测试方法:选取相同配置的2台Linux云主机进行配置:云主机A上安装 mysql 作为服务器端,云主机B上安装mysql client 及 sysbench 作为客户端,在不运行其它应用情况下,云主机B压测云主机A,测试云主机A的 mysql 服务性能,结果为取 QPS。网络压力持续时间为10分钟,使用 sysbench 进行压测,获取平均每秒请求数QPS。
2、Redis
Redis 是一款开源、高性能的key-value分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,当前最热门的NoSql数据库之一。
缓存系统、排行榜(如微博的热搜)、最新列表(如最新的视频或新闻列表)、分布式锁和单线程机制(如秒杀系统)等,都是Redis应用的典型场景,在大多数互联网业务中都非常常见。
测试工具:Redis 自带了一个叫 redis-benchmark 的工具来模拟 N 个客户端同时发出 M 个请求。
测试方法:与MySQL的类似,配置两台云主机,分别作为客户端与服务器端进行压测,获取平均每秒查询数,分别压测 get 、set、sadd、mset 四种方式。
3、Ngnix
Nginx是一款被广泛应用的高性能的http服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。cpu、内存等资源消耗却非常低,运行非常稳定。
测试工具:使用wrk进行压测,wrk是一款简单的HTTP压测工具,能用很少的线程压出很大的并发量。
测试方法:与上类似,在不运行其它应用情况下,作为客户端的云主机B 启动wrk 压测作为服务器端的云主机A,测试云主机A的 nginx服务接受性能。
压测 wrk的测试参数设定,-c参数连接数设为1000, -t线程数根据云主机B的核数计算得出(2倍核数), 获取平均每秒查询数,分别压测长连接和短连接两种场景。
说明:上面的测试工具参考目前市场上云平台的对比参考测试,本文对其中的方法做了部分的补充说明,结果不做参考,只注重测试的工具和方法。