云服务器产品性能测试指南
2010年,在创新工场创业时,便开始使用国外的AWS云服务,部署了公司的官网和游戏后台服务
2013年,在小米工作期间,便免费使用了国内新浪云的SAE,部署了自己的第一个网站:米扑博客
2014年,从小米辞职创业,便花钱购买了国内的阿里云,部署了米扑科技,成为一名付费的云服务用户
米扑科技产品,全部搭建在云服务器上,采用了腾讯云、阿里云、AWS等,可供大家参考
米扑科技官网: http://mimvp.com
本文采用的云服务器 Ubuntu 操作系统,并且用户默认为 root 用户。
根据本文所述指南,对腾讯云和阿里云的三个云计算基础产品进行了评测,产品类别包括云服务器、云数据库、对象存储。
运用云计算产品性能测试指南,进行云服务器厂商评测的实例,请参考米扑博客的两篇文章:
用户使用评测:阿里云腾讯云谁性价比更高 (推荐)
国内外公有云对比:功能介绍、性能测试 (推荐)
云服务器
在开始测试云服务器之前,推荐按量计费方式购买实例。同时确保用于对比的云服务器配置规格相同或具有可比性。
通过服务商提供的账户名和密码登陆云服务器之后,请先更新系统(本文所有操作均针对 Debian 系统)。
sudo
apt-get -y update
在云服务器的测试过程,将先通过 UnixBench 和 GeekBench 这两个常用的基准测试工具,获得对主机的一个总体评分。
然后再从 CPU、内存、磁盘 I/O 等方面进行单项测试。
1. UnixBench
UnixBench 官网: https://github.com/kdlucas/byte-unixbench
UnixBench 是测试类 Unix 系统性能的老牌工具,也是常用的基准测试工具。
它会执行 11 个单项测试,包括字符串处理、浮点运算效率、 文件数据传输、管道吞吐等,然后将结果与一个基准系统进行比较,得到一个指数值。指数值越高,性能越好。
最终的得分比单个测试的结果根据参考价值,而且也方便对服务器进行比较。
在安装 UnixBench 之前,要先准备好相关的依赖。请执行:
sudo
apt-get -y install libx11-dev libgl1-mesa-dev libxext-dev perl perl-modules make gcc
下载安装包,然后按下面的提示操作。官方的源在 googlecode 上,国内访问不便,我已经将文件上传到对象存储服务。
wget https://github.com/kdlucas/byte-unixbench/archive/master.zip
unzip master.zip
cd UnixBench
make
运行 make 之前,确保将 Makefile 文件中 GRAPHICS_TEST = defined
行被注释掉,因为我们是在服务器端进行测试,不需要做 2D/3D 图形测试。
最后,执行:
./Run
如果一切正常,应该会出现类似下面的文字:
UnixBench 测试的运行时间比较长,期间可以离开去干别的事情。
运行 ./Run 即可开始测试,等待十几分钟即可
1) 运行输出的部分结果:
Benchmark Run: Mon Sep 04 2017 20:22:53 - 20:51:13 1 CPU in system; running 1 parallel copy of tests Dhrystone 2 using register variables 23736936.0 lps (10.0 s, 7 samples) Double-Precision Whetstone 3556.3 MWIPS (10.1 s, 7 samples) Execl Throughput 3570.1 lps (29.9 s, 2 samples) File Copy 1024 bufsize 2000 maxblocks 565755.4 KBps (30.0 s, 2 samples) File Copy 256 bufsize 500 maxblocks 177397.0 KBps (30.0 s, 2 samples) File Copy 4096 bufsize 8000 maxblocks 1337004.0 KBps (30.0 s, 2 samples) Pipe Throughput 1145152.0 lps (10.0 s, 7 samples) Pipe-based Context Switching 254288.8 lps (10.0 s, 7 samples) Process Creation 11098.7 lps (30.0 s, 2 samples) Shell Scripts (1 concurrent) 4001.7 lpm (60.0 s, 2 samples) Shell Scripts (8 concurrent) 547.7 lpm (60.1 s, 2 samples) System Call Overhead 1846761.4 lps (10.0 s, 7 samples) System Benchmarks Index Values BASELINE RESULT INDEX Dhrystone 2 using register variables 116700.0 23736936.0 2034.0 Double-Precision Whetstone 55.0 3556.3 646.6 Execl Throughput 43.0 3570.1 830.2 File Copy 1024 bufsize 2000 maxblocks 3960.0 565755.4 1428.7 File Copy 256 bufsize 500 maxblocks 1655.0 177397.0 1071.9 File Copy 4096 bufsize 8000 maxblocks 5800.0 1337004.0 2305.2 Pipe Throughput 12440.0 1145152.0 920.5 Pipe-based Context Switching 4000.0 254288.8 635.7 Process Creation 126.0 11098.7 880.9 Shell Scripts (1 concurrent) 42.4 4001.7 943.8 Shell Scripts (8 concurrent) 6.0 547.7 912.9 System Call Overhead 15000.0 1846761.4 1231.2 ======== System Benchmarks Index Score 1064.1
2)运行后的目录结构
# ll total 144 -rw-r--r-- 1 root root 10133 Jun 30 08:19 Makefile drwxr-xr-x 2 root root 4096 Sep 4 20:22 pgms -rw-r--r-- 1 root root 17753 Jun 30 08:19 README drwxr-xr-x 2 root root 4096 Sep 4 20:22 results -rwxr-xr-x 1 root root 60436 Jun 30 08:19 Run drwxr-xr-x 2 root root 4096 Jun 30 08:19 src drwxr-xr-x 2 root root 4096 Sep 4 20:51 testdir drwxr-xr-x 2 root root 4096 Sep 4 20:36 tmp -rw-r--r-- 1 root root 17890 Jun 30 08:19 USAGE -rw-r--r-- 1 root root 4622 Jun 30 08:19 WRITING_TESTS
3) 查看 results/ 目录下的html结果
http://demo.mimvp.com/unixbench/
上图测试的腾讯云,企业免费版(米扑科技),试用6个月,1核1GB,系统盘20GB的最低配版
一般来说,得分在 1000 以上的云服务器就算还不错的,
2. GeekBench
GeekBench 官网: http://www.geekbench.com
GeekBench 是另一款知名的性能测试工具,目前的最新版本为 GeekBench 4
相较于 GeekBench 3,最新版对测试标准进行了调整,能够更好地模拟真实任务和应用。
它支持测试单核和多核性能,不过由于我们选择的虚拟机只有 1 核,在测试时请忽略多核的测试得分。
还要注意的是,GeekBench 是一款收费的商业软件,可供免费使用的只有 32 位。
如果你想在 64 位服务器上使用该工具,则需先添加必备的运行时库。
dpkg --add-architecture i386
sudo apt-get -y update
sudo apt-get -y install libc6:i386 libstdc++6:i386
然后下载安装包
# 官方地址下载较慢,替换为国内源。
wget http://codingpy-1252715393.cosgz.myqcloud.com/archive/Geekbench-4.0.0-Linux.tar.gz
解压缩并执行测试:
tar -zxvf Geekbench-4.0.0-Linux.tar.gz
cd build.pulse/dist/Geekbench-4.0.0-Linux/
./geekbench_x86_64 // CentOS 下测试
测试结束后,GeekBench 会将结果上传到其官网的网站,并返回一个访问链接给我们,打开链接查看评测结果。
1)运行后,输出的部分结果
# ./geekbench_x86_64 Geekbench 4.0.0 Tryout : http://www.primatelabs.com/geekbench/ Geekbench 4 is in tryout mode. Geekbench 4 requires an active Internet connection when in tryout mode, and automatically uploads test results to the Geekbench Browser. Other features are unavailable in tryout mode. Buy a Geekbench 4 license to enable offline use and remove the limitations of tryout mode. If you would like to purchase Geekbench you can do so online: https://store.primatelabs.com/ If you have already purchased Geekbench, enter your email address and license key from your email receipt with the following command line: ./geekbench_x86_64 -r <email address> <license key> Running Gathering system information System Information Operating System Linux 3.10.0-514.26.2.el7.x86_64 x86_64 Model Bochs Bochs Motherboard N/A Processor Intel(R) Xeon(R) CPU E5-26xx v3 @ 2.29 GHz 1 Processor Processor ID GenuineIntel Family 6 Model 63 Stepping 2 L1 Instruction Cache 32.0 KB L1 Data Cache 32.0 KB L2 Cache 4.00 MB L3 Cache 0.00 B Memory 993 MB BIOS Bochs Bochs Compiler Clang 3.8.0 (tags/RELEASE_380/final)
2)运行后的目录结构
# ll total 121488 -rwxrwxr-x 1 1000 1000 231820 Aug 30 2016 geekbench4 -rw-rw-r-- 1 1000 1000 60874278 Aug 30 2016 geekbench.plar -rwxrwxr-x 1 1000 1000 31467864 Aug 30 2016 geekbench_x86_32 -rwxrwxr-x 1 1000 1000 31680232 Aug 30 2016 geekbench_x86_64
3)评测完毕后,链接提示如下
Uploading results to the Geekbench Browser. This could take a minute or two depending on the speed of your internet connection. Upload succeeded. Visit the following link and view your results online: https://browser.geekbench.com/v4/cpu/3896131 Visit the following link and add this result to your profile: https://browser.geekbench.com/v4/cpu/3896131/claim?key=286251
4)打开其给的评测链接
https://browser.geekbench.com/v4/cpu/3896131
3. CPU Cyclictest
Cyclictest 官网:https://wiki.linuxfoundation.org/realtime/documentation/howto/tools/cyclictest
Cyclictest 是一个高精度测试程序,可用来衡量 CPU 的平均延迟,即完成一个 CPU 周期所需的时间。
通过这个数据,我们可以判断物理 CPU 的超卖情况;特定时间内,有多少虚拟 CPU 在排队等候物理 CPU 进行处理。
因此,这个测试的数据越低,说明 CPU 的响应越快,延迟越低。
cyclictest 是 rt-tests 包的一部分,我们按如下操作安装并运行:
sudo apt-get -y install rt-tests
sudo cyclictest -D 10s -q
我们将使用测试结果中的 avg_lat
值。
$ sudo cyclictest -D 10s -q # /dev/cpu_dma_latency set to 0us T: 0 (18612) P: 0 I:1000 C: 9914 Min: 6 Act: 11 Avg: 26 Max: 3964
4. 内存性能
Mbw 是一个 Linux 内存性能测试工具,可以测试内存数据拷贝操作的速度。速度越快,性能越高。
在内存大小相同的情况下,该指标就显得比较重要,该指标越高越好。
因为通常内存数据操作是计算的常见瓶颈之一。
按如下操作安装并运行:
apt-get install mbw // CentOS 无此命令
mbw -n 250 -t 0 200
取测试结果中 avg_copy
的值。
$ mbw -n 250 -t 0 200 Long uses 8 bytes. Allocating 2*26214400 elements = 419430400 bytes of memory. Getting down to business... Doing 250 runs per test. 0 Method: MEMCPY Elapsed: 0.18799 MiB: 200.00000 Copy: 1063.909 MiB/s 1 Method: MEMCPY Elapsed: 0.17289 MiB: 200.00000 Copy: 1156.825 MiB/s 2 Method: MEMCPY Elapsed: 0.14985 MiB: 200.00000 Copy: 1334.632 MiB/s 3 Method: MEMCPY Elapsed: 0.16442 MiB: 200.00000 Copy: 1216.412 MiB/s ..... 246 Method: MEMCPY Elapsed: 0.21887 MiB: 200.00000 Copy: 913.789 MiB/s 247 Method: MEMCPY Elapsed: 0.22585 MiB: 200.00000 Copy: 885.536 MiB/s 248 Method: MEMCPY Elapsed: 0.21463 MiB: 200.00000 Copy: 931.841 MiB/s 249 Method: MEMCPY Elapsed: 0.21643 MiB: 200.00000 Copy: 924.091 MiB/s AVG Method: MEMCPY Elapsed: 0.18964 MiB: 200.00000 Copy: 1054.622 MiB/s
5. 磁盘 I/O
磁盘 I/O 也是云服务器性能的重要指标,一般是选择读写速度快的。磁盘 I/O 性能测试主要分为两类:顺序读写和随机读写。顺序读写频繁,应该关注数据吞吐量指标;随机读写频繁,核心指标则是 IOPS,即每秒的输入输出量(或读写次数)。我们的云服务器上主要是存储一些小文件,更注重随机读写性能。
Fio 是测试磁盘 I/O 的传统基准工具。安装非常简单:
sudo apt-get -y install fio
1)使用如下命令测试磁盘 随机读性能:
fio --name=randread --ioengine=libaio --direct=1 --bs=4k --iodepth=64 --size=4G --rw=randread --gtod_reduce=1
部分选项的说明如下:
- direct=1:测试过程绕过机器自带的 buffer,使测试结果更加真实。
- rw=randread:测试随机读的 I/O
- size=4G:本次测试文件的大小为 4G
- bs=4k:单次 I/O 的块文件大小为 4KB
- iodepth=64:一次执行 64 个操作。
运行结果如下:
# fio --name=randread --ioengine=libaio --direct=1 --bs=4k --iodepth=64 --size=4G --rw=randread --gtod_reduce=1 randread: (g=0): rw=randread, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64 fio-2.2.8 Starting 1 process randread: Laying out IO file(s) (1 file(s) / 4096MB) Jobs: 1 (f=1): [r(1)] [53.8% done] [11748KB/0KB/0KB /s] [2937/0/0 iops] [eta 02m:43s] Jobs: 1 (f=1): [r(1)] [100.0% done] [15000KB/0KB/0KB /s] [3750/0/0 iops] [eta 00m:00s] randread: (groupid=0, jobs=1): err= 0: pid=13059: Tue Sep 5 01:44:52 2017 read : io=4096.0MB, bw=11665KB/s, iops=2916, runt=359562msec cpu : usr=1.43%, sys=3.50%, ctx=344831, majf=0, minf=95 IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0% issued : total=r=1048576/w=0/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0 latency : target=0, window=0, percentile=100.00%, depth=64 Run status group 0 (all jobs): READ: io=4096.0MB, aggrb=11665KB/s, minb=11665KB/s, maxb=11665KB/s, mint=359562msec, maxt=359562msec Disk stats (read/write): vda: ios=1048296/606, merge=0/300, ticks=22947662/64194, in_queue=23011797, util=100.00%
2)使用如下命令测试磁盘 随机写性能:
fio --name=randwrite --ioengine=libaio --direct=1 --bs=4k --iodepth=64 --size=4G --rw=randwrite --gtod_reduce=1
运行结果如下:
# fio --name=randwrite --ioengine=libaio --direct=1 --bs=4k --iodepth=64 --size=4G --rw=randwrite --gtod_reduce=1 randwrite: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64 fio-2.2.8 Starting 1 process randwrite: Laying out IO file(s) (1 file(s) / 4096MB) Jobs: 1 (f=1): [w(1)] [67.8% done] [0KB/11892KB/0KB /s] [0/2973/0 iops] [eta 01m:57s] Jobs: 1 (f=1): [w(1)] [99.7% done] [0KB/13554KB/0KB /s] [0/3388/0 iops] [eta 00m:01s] randwrite: (groupid=0, jobs=1): err= 0: pid=13640: Tue Sep 5 01:52:17 2017 write: io=4096.0MB, bw=11653KB/s, iops=2913, runt=359927msec cpu : usr=1.44%, sys=2.98%, ctx=140341, majf=0, minf=28 IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0% issued : total=r=0/w=1048576/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0 latency : target=0, window=0, percentile=100.00%, depth=64 Run status group 0 (all jobs): WRITE: io=4096.0MB, aggrb=11653KB/s, minb=11653KB/s, maxb=11653KB/s, mint=359927msec, maxt=359927msec Disk stats (read/write): vda: ios=10354/1048736, merge=1/1593, ticks=150656/22858317, in_queue=22992530, util=100.00%
IOPS 的值越高,磁盘读写性能越好
磁盘性能的另一个指标是延迟,可以通过 IOPing 工具进行测试。
IOPing 会运行指定数量的磁盘 I/O 请求,并测试响应的时间。
输出结果测试使用 ping 命令测试网络延迟的输出。
操作如下提示安装 IOPing:
wget https://launchpad.net/ubuntu/+archive/primary/+files/ioping_0.9-2_i386.deb
dpkg -i ioping_0.9-2_i386.deb
然后通过下面的命令运行测试:
ioping -c 10 .
输出结果类似下面这样,我们取其中 avg 对应的值。
4 KiB from . (ext3 /dev/vda1): request=1 time=1.87 ms
4 KiB from . (ext3 /dev/vda1): request=2 time=1.57 ms
4 KiB from . (ext3 /dev/vda1): request=3 time=2.02 ms
4 KiB from . (ext3 /dev/vda1): request=4 time=1.78 ms
4 KiB from . (ext3 /dev/vda1): request=5 time=1.79 ms
4 KiB from . (ext3 /dev/vda1): request=6 time=1.56 ms
4 KiB from . (ext3 /dev/vda1): request=7 time=2.14 ms
4 KiB from . (ext3 /dev/vda1): request=8 time=1.96 ms
4 KiB from . (ext3 /dev/vda1): request=9 time=2.64 ms
4 KiB from . (ext3 /dev/vda1): request=10 time=1.69 ms
--- . (ext3 /dev/vda1) ioping statistics ---
10 requests completed in 9.02 s, 525 iops, 2.05 MiB/s
min/avg/max/mdev = 1.56 ms / 1.90 ms / 2.64 ms / 303 us
请求响应时间越低,说明磁盘性能越好。
数据库服务器
首先,我们在测试用的云服务器上安装 sysbench 和 mysql-client:
apt-get -y install sysbench mysql-client
这里安装的 sysbench 版本为 0.4.12 。
然后登陆到购买的数据库实例,并创建测试数据库 dbtest。
mysql -h [云数据库IP] -P [云数据库端口号] -uroot -p[云数据库密码]
云数据库内网 IP 或访问地址,可从厂商的云数据库实例管理界面获取。如没有数据库服务器,请在腾讯云、阿里云等厂商以按量计费模式新建实例。
实例创建后,需要手动在控制台点击“初始化”来初始化实例,在此过程中会弹出窗口要求设置 root 用户的密码。阿里云 RDS 则需要在数据库登陆管理界面新建一个用户,指定用户名和密码;同时将 测试 ECS 的内网 IP 地址添加到服务器服务器的白名单中。具体操作参见管理页面。
登陆至云数据库服务器后,我们创建用户测试的数据库 dbtest。
create database dbtest;
然后,使用 sysbench 的 prepare 语句在指定数据中生成用于执行测试的表。
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=dbtest --mysql-host=[云数据库访问IP/地址] --mysql-user=[云数据库用户名] --mysql-password=[云数据库密码] prepare
该命令将新建一个名为 sbtest 的表,其中包含一百万行数据。在实际测试过程中,发现阿里云 RDS 在创建测试数据时用的时间明显较长。
你可以登陆数据库检查是否创建成功:
mysql> use dbtest;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+------------------+
| Tables_in_dbtest |
+------------------+
| sbtest |
+------------------+
1 row in set (0.00 sec)
mysql> SELECT COUNT(*) FROM sbtest;
+----------+
| COUNT(*) |
+----------+
| 1000000 |
+----------+
1 row in set (0.12 sec)
接下来,就可以使用 sysbench 命令进行针对 MySQL 的 OLTP 基准测试了。先执行一个数据库只读测试(oltp-read-only=on):
sysbench --test=oltp --oltp-table-size=1000000 --oltp-test-mode=complex --oltp-read-only=on --num-threads=6 --max-time=60 --max-requests=0 --mysql-db=dbtest --mysql-host=[云数据库访问IP/地址] --mysql-user=[云数据库用户名] --mysql-password=[云数据库密码] run
如果要执行读写测试,只需要将 oltp-read-only 的值设置为 off 即可。
测试输出如下图所示。
对象存储服务
对象存储服务性能测试的注意事项,请参考:论云存储服务性能评测的正确姿势。
推荐的测试方法:
-
使用对应厂商位于同一区域的云服务器
-
确保测试机性能不弱,CPU等资源充足
-
随机生产指定数量、大小的测试文件,如
-
10000 个 50KB 文件
-
1000 个 2MB 文件
-
100 个 50MB 文件
-
-
通过 SDK 计算上传、下载、删除等操作的用时
-
使用同一批文件,通过 SDK 做高并发测试
测试脚本(基于 Python SDK)位于 Github 项目中的 test_cos 目录下。
测试数据位于 csv 目录下。
参考推荐:
用户使用评测:阿里云腾讯云谁性价比更高 (推荐)
国内外公有云对比:功能介绍、性能测试 (推荐)
全球云服务商对比:阿里云,太贵了 (推荐)
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2018-01-18 23:25:29
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!
转载注明: 云服务器产品性能测试指南 (米扑博客)