Home > Linux, 工具介绍 > Fio模拟Mysql服务器IO压力脚本

Fio模拟Mysql服务器IO压力脚本

September 7th, 2011

原创文章,转载请注明: 转载自系统技术非业余研究

本文链接地址: Fio模拟Mysql服务器IO压力脚本

fio是个非常好用的io压力模拟工具,功能非常齐全, 有兴趣的同学参看 这里
这里我用fio模拟我们线上mysql服务器的压力来为厂家送来的pci-ssd卡做压力测试,底下是脚本(已经测试正确),也许有的同学有用。

$ cat mysql-test
# QPS: 40000(10 cores)
# Dataset: 200G
# R/W: 8/2
# ThreadPool Num: 64
#  IO ThreadNum: 32

[global]
runtime=86400
time_based
group_reporting
directory=/your_dir
ioscheduler=deadline
refill_buffers

[mysql-binlog]
filename=test-mysql-bin.log
bsrange=512-1024
ioengine=sync
rw=write
size=24G
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=200G
direct=1
rwmixread=80
numjobs=32

thinktime=600
thinktime_spin=200
thinktime_blocks=2

[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

$ sudo fio mysql-test
mysql-binlog: (g=0): rw=write, bs=512-1K/512-1K, ioengine=sync, iodepth=1
...
mysql-binlog: (g=0): rw=write, bs=512-1K/512-1K, ioengine=sync, iodepth=1
innodb-data: (g=0): rw=randrw, bs=16K-16K/16K-16K, ioengine=psync, iodepth=1
...
innodb-data: (g=0): rw=randrw, bs=16K-16K/16K-16K, ioengine=psync, iodepth=1
innodb-trxlog: (g=0): rw=write, bs=512-2K/512-2K, ioengine=sync, iodepth=1
...
innodb-trxlog: (g=0): rw=write, bs=512-2K/512-2K, ioengine=sync, iodepth=1
fio 1.50.2
Starting 160 threads
...

要注意的事项是:
1. 对iops的限制是针对每个线程的,总的限制是 限制*线程数
2. 在thinktime_blocks个io开始前先等待thinktime(其中thinktime_spin用于消耗cpu, 剩余时间用于sleep)
3. 每个io需要花费时间。这个时间随着设备的不同差别很大,最好的方法是测试。用一个线程测试,然后用strace查看。

上面的数字要根据具体的设备和mysql场景去调整。

玩得开心!

Post Footer automatically generated by wp-posturl plugin for wordpress.

Categories: Linux, 工具介绍 Tags: , ,
  1. April 20th, 2012 at 18:36 | #1

    hi, do you want to test LSI WarpDrive PCIe SSD?

    Yu Feng Reply:

    我们好像有这个型号的盘。

  2. dukope
    July 17th, 2013 at 09:55 | #2

    DNA-613:/vobiledata/fiotest# fio –filename=/vobiledata/fiotest/test –direct=1 –rw=randrw –rwmixwrite=20 –bs=16k –size=20G –numjobs=16 –runtime=100–new_group –group_reporting –name=mytest
    fio: failed parsing group_reporting=–name=mytest

  3. dukope
    July 17th, 2013 at 09:57 | #3

    DNA-613:/vobiledata/fiotest# fio –filename=/vobiledata/fiotest/test –direct=1 –rw=randrw –rwmixwrite=20 –bs=16k –size=20G –numjobs=16 –runtime=100–new_group –group_reporting –name=mytest
    fio: failed parsing group_reporting=–name=mytest 出错了 大侠 请问这时什么原因?

    Yu Feng Reply:

    最好把参数写在文件里,这种方式很乱。

    dukope Reply:

    后面我换成版本2.0.7的就可以运行了,还想问个问题,现在正在测试SSD,您该blog对我的测试
    来说非常有帮助,目前SSD是三星840系列,请问参数iodepth,ioengine numjobs 该如何测试比较好?
    我使用的是普通PC机测试CPU: Intel(R) Core(TM) i3-2100 CPU @ 3.10GHz 4核 测试模拟方向: mysql
    另外对于测试SSD 有什么注意项么? 比如需要先将整个SSD 填满 ==

    Best Regards!

    mryufeng Reply:

    iodepth,ioengine numjobs 根据实际情况来调,调到IO模式和你直接跑mysql差不多就好。 准备工作需要把整个SSD全盘饱和写个1-2天

Comments are closed.