虚拟化平台IO劣化分析

发布时间 2023-06-27 13:12:48作者: 济南小老虎

虚拟化平台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