正文
虚拟化平台IO劣化分析
背景
最近同事让帮忙做几个虚拟机进行性能测试.
本来应该搭建CentOS/Winodws平台进行相关的测试工作.
但是为了环境一致性, 使用了ESXi6.7 进行虚拟化
然后这段时间一直进行IO方面的学习与研究.
一开始发现总是有很多对不上的地方, 今天早上再给windows平台进行测试时发现了数据比linux好
感觉比较奇怪, 最后才发现应该是 虚拟化平台下IO争用导致的问题.
这里总结一下, 便于后期学习和参考
结论
1. 专用的物理机器的资源是可以保证的. 虚拟化的资源无法保证. 如果挂载同样存储的机器在进行高IO的操作,会影响自己的业务IO能力.
2. 虚拟化的写入总计应该不如物理机的优秀. 虚拟化层有一定的损耗. 也就是两个虚拟机的合计IO应该不如单台物理机器来的好.
当然前提条件是物理机的 num_jobs和io_depth 与两个虚拟机的参数能够匹配起来.
3. 不同发行版的IO侧重不同,有的读性能好的, 有的写入性能好. 跟内核参数,还有IO调度算法有较大的关系.
4. 不同文件系统, 不同操作系统(Win和linux) 因为进程模型,IO模型,不太一样.不太好直接进行比较.
使用的配置文件
[global]
runtime=120
time_based
group_reporting
directory=/fiotest
refill_buffers
[innodb-trxlog]
filename=test-innodb.log
bsrange=512-2048
ioengine=sync
rw=write
size=2G
fsync=1
overwrite=1
rate_iops=64
invalidate=1
numjobs=64
[mysql-binlog]
filename=test-mysql-bin.log
bsrange=512-1024
ioengine=sync
rw=write
size=12G
sync=1
rw=write
overwrite=1
fsync=100
rate_iops=64
invalidate=1
numjobs=64
[innodb-data]
filename=test-innodb.dat
bs=16K
ioengine=psync
rw=randrw
size=20G
direct=1
rwmixread=80
numjobs=32
#thinktime=600
#thinktime_spin=200
#thinktime_blocks=2
使用的工具
Linux平台 fio
Windows平台 diskspd, fio.
配置文件与命令
fio mysql.conf
fio.exe mysql.conf
或者是
diskspd.exe -b4K -t4 -r -w30 -o32 -d10 -Sh C:\Users\Administrator\test-innodb.dat
测试结果分析-物理机器的参考结果
Raid卡配置 |
读IOPS |
写IOPS |
8块SSD Raid5 |
45.7k |
15.1k |
12块SSD Raid10 |
80.5k |
26.5k |
测试结果分析-单个虚拟机的参考结果 22块960GSSD-Raid5
Raid卡配置 |
读IOPS |
写IOPS |
OpenEuler |
41.3K |
14.7k |
CentOS79 |
42k |
14.5k |
rocky87 |
36.2k |
12.5k |
kylinv10 |
39.3k |
14.1k |
Windows2019 |
36.6k |
13.5k |
测试结果分析-4个虚拟机的参考结果 22块960GSSD-Raid5
系统类型 |
读取 |
写入 |
openeuler2203 |
7.6k |
5.1k |
CentOS79 |
8.6k |
4.9k |
rocky87 |
8.8k |
3.3k |
kylinv10 |
9.0k |
4.6k |
合计 |
34k |
17.9k |
虚拟机增加num_jobs的数值
系统类型 |
读取 |
写入 |
kylinv10-4个机器并发 |
9.0k |
4.6k |
kylinv10-160 jobs |
39.3k |
14.1k |
kylinv10-640 jobs |
53.5k |
15.3k |