奇遇科技服务器性能测试工具(预览版)¶
起因参见: 基准测试很难
因为准备对各大厂商的服务器进行性能测试, 所有开发了此程序。
警告
您可以获取此软件的源代码,也可以免费用于非商业用途(结果仅供自己使用),商用请获取授权。
主要包含:
vps_bench 1 CPU、内存、磁盘性能测试
vps_network 2 Ping, Traceroute, 网速测试
vps_compose 3 测试自动化
VPS 信息网站 测试结果展示(当前只允许内部查看)
使用文档 4 。
为什么测试结果不准确?¶
备注
腾讯云的测试服务器是 1核心 2GB 内存 40GB 磁盘
如 基准测试很难 中所示,在腾讯云的服务器上, 如果测试 1GB 磁盘的读写,那么您可能得到如下的结果(时间单位为: 秒):
# vps_bench disk --file-name test.bin -n 1
文件大小: 1073741824 记录块大小: 4096
顺序读写: 读取: 9.465708662 写入: 6.522950584
顺序重读写: 读取: 0.429681788 写入: 7.300880043
随机读写: 读取: 0.678426381 写入: 35.54965614
跳跃读写: 读取: 0.604654152 写入: 61.462532305
倒序读写: 读取: 0.622710396 写入: 7.74615848
虽然这个结果是实际 “测量” 出来的,但是这个结果实实在在是错误的(顺序重读的速度超过了 2GB/s)。
警告
令人惊讶的是网上有很多测试结果都是这种错误的结果。 (有的比这还要糟糕,测试报告里面只有顺序读写。)
错误的原因就在于:
重要
忽略了系统性的偏差。
因为系统(2GB)有足够的内存缓存这个文件,后面读取的效果相当于直接从内存中读取(速度当然超块)。
让我们增大文件的大小再来看一下测试结果:
# vps_bench disk --file-name hello.bin -n 4
文件大小: 4294967296 记录块大小: 4096
顺序读写: 读取: 37.33398404 写入: 35.289427454
顺序重读写: 读取: 38.143020175 写入: 36.218555249
随机读写: 读取: 448.698573539 写入: 367.017263288
跳跃读写: 读取: 120.809023658 写入: 415.889601139
倒序读写: 读取: 347.250639267 写入: 36.043712078
这个结果看起来就正常多了(顺序读写速度大约为 100+MB/s)。
重要
测试磁盘性能的时候,为了避免文件系统缓存的影响,应该把测试文件的大小至少设置为 内存大小的 2 倍以上。
内存读写速度¶
读取测试流程: 读取 1GB 内存,每次读取 1 字节并且计算读取数据之和的结果。
写入测试流程: 写入 1GB 内存,每次写入 1 字节。
备注
黄颜色的线条是随机读
红颜色的线条是随机写
下面的两个线条是 顺序读 和 顺序写
随机读 和 顺序读 性能差了大概 350 倍.
随机写 和 顺序写 性能差了大概 150 倍.
让我感到意外的是: 随机读 比 随机写 性能还要差。
根据测试流程,随机读 比 随机写 多了一个计算的步骤。 但是这并不足以说明 他们之间的吞吐量会相差这么大的(因为 顺序读写 只相差了 0.03s)。
导致性能差距过大的根本原因应该是: 局部性原理 5
读取的时候,因为是随机读,所以 Cache 的里面的数据全部都是无效的(相当于 Cache 命中率为 0)。
写入的时候,虽然写入的位置都是随机的,但是 “现代” 的 CPU 都使用了 “Write-Back”(写回) 技术,导致比没有命中缓存的读要快。