MySQL数据库性能基准测试之sysbench之6—sysbench IO测试
一、sysbench IO测试
1、目的和作用
sysbench 的 IO 测试旨在评估系统的输入输出性能,主要关注磁盘读写速度、随机读写性能、顺序读写性能等指标。以下是sysbench IO测试的主要目的和作用:
性能评估: 通过IO测试,可以评估系统磁盘的读写速度、IOPS(每秒输入/输出操作数)等性能指标,帮助了解系统处理IO操作的效率。 磁盘测试: IO测试可用于测试磁盘的读写性能,包括顺序读写和随机读写,以便了解磁盘在不同读写模式下的表现。 系统稳定性检测:通过对磁盘进行IO压力测试,可以检测系统在高IO负载下的稳定性,发现可能导致系统崩溃或性能下降的问题。 性能调优: IO测试结果可以帮助用户了解系统当前的磁盘IO性能状况,有针对性地调整磁盘缓存、文件系统选项等,优化IO性能。 存储设备比较: 通过对不同存储设备进行IO测试,可以比较它们在IO性能方面的表现,帮助选择适合特定需求的存储设备。 软件优化: 对于开发人员来说,IO测试可以帮助评估程序在不同IO负载下的性能表现,优化数据存储与访问的方式,提高程序的IO效率。
总的来说,sysbench的IO测试可以帮助用户全面了解系统的IO性能表现,优化系统IO配置,提高系统IO吞吐量和效率,同时也可以作为硬件和软件开发过程中的重要工具。
2、语法
sysbench --test=fileio help –-file-num=N 创建文件的数量,默认值:128。 –-file-block-size=N 每次IO操作的block大小,默认值:16K。 –-file-total-size=SIZE 所有文件大小总和,默认值:2G。 –-file-test-mode=STRING 测试模式:seqwr(顺序写), seqrewr(顺序读写), seqrd(顺序读), rndrd(随机读), rndwr(随机写), rndrw(随机读写)。 –-file-io-mode 文件操作模式:sync(同步),async(异步),mmap(快速map映射),默认值:sync。 –-file-async-backlog number of asynchronous operatons to queue per thread [128]。 –-file-extra-flags=STRING 使用额外的标志符来打开文件{sync,dsync,direct}。 –-file-fsync-freq=N 在完成N次请求之后,执行fsync(),0表示不使用fsync,默认值:100。 –-file-fsync-all=[on|off] 每次写操作后执行fsync(),默认值:off。 –-file-fsync-end=[on|off] 测试结束后执行fsync(),默认值:on。 –-file-fsync-mode=STRING 使用fsync或fdatasync方法进行同步,默认值:fsync。 –-file-merged-requests=N 尽可能的合并N个IO请求数,0表示不合并,默认值:0。 –-file-rw-ratio=N 测试时候的读写比例,默认值:1.5(即3:2)。
3、阶段
准备: prepare 运行: run 清理: cleanup
4、案例
(1) 准备阶段:
IO测试,线程数为1,创建大小为10G的测试文件,使用了随机读写模式(rndrw),执行完后会在当前目录下生成一堆小文件。
sysbench fileio --threads=1 --file-total-size=10G --file-test-mode=rndrw prepare
(2)运行阶段
# 运行阶段:IO测试,线程数为4,创建大小为1G的测试文件,使用了随机读/写(rndrw)
sysbench fileio --threads=1 --file-total-size=10G --file-test-mode=rndrw run
(3)清理阶段
sysbench fileio --threads=1 --file-total-size=10G --file-test-mode=rndrw cleanup
(3)内容分析
sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)
Running the test with following options: Number of threads: 1 Initializing random number generator from current time Extra file open flags: (none) 128 files, 80MiB each 10GiB total file size Block size 16KiB Number of IO requests: 0 Read/Write ratio for combined random IO test: 1.50 Periodic FSYNC enabled, calling fsync() each 100 requests. Calling fsync() at the end of test, Enabled. Using synchronous I/O mode Doing random r/w test Initializing worker threads... Threads started! File operations: --文件操作 reads/s: 3317.02 --每秒读取操作数 writes/s: 2211.34 --每秒写入操作数 fsyncs/s: 7088.60 --每秒fsync操作数 Throughput: --吞吐量 read, MiB/s: 51.83 --读取吞吐量 written, MiB/s: 34.55 --写入吞吐量 General statistics: --总体统计 total time: 10.0007s --总测试时间 total number of events: 126079 --总事件数 Latency (ms): --延迟 min: 0.00 --最小延迟 avg: 0.08 --平均延迟 max: 10.23 --最大延迟 95th percentile: 0.24 --第95百分位延迟 sum: 9945.19 --总延迟时间 Threads fairness: --线程公平性: events (avg/stddev): 126079.0000/0.00 --事件数(平均/标准差) execution time (avg/stddev): 9.9452/0.00 --执行时间(平均/标准差)
通过这些指标,你可以了解系统在进行IO测试时的表现情况。例如,
通过每秒读取和写入操作数、吞吐量等指标,可以评估系统的IO性能;
通过延迟指标,可以了解IO操作的响应速度;
通过线程公平性数据,可以了解各个线程执行任务的均衡程度。
5、多重比较
输入 | 输出 | |||||||||||||||
threads | file-total-size | file-test-mode | block-size | reads/s | writes/s | fsyncs/s | read, MiB/s | written, MiB/s | total time | total number of events | min | avg: | max | sum | events | execution time |
1 | 10G | rndrw(随机读写) | 16k | 3317.02 | 2211.34 | 7088.6 | 51.83 | 34.55 | 10.0007 | 126079 | 0 | 0.08 | 10.23 | 9945.19 | 126079.0000/0.00 | 9.9452/0.00 |
1 | 10G | rndwr(随机写) | 16k | 5103.7 | 6538.83 | 79.75 | 10.01 | 116441 | 0 | 0.09 | 10.09 | 9950.65 | 116441.0000/0.00 | 9.9507/0.00 | ||
1 | 10G | rndrd(随机读) | 16k | 7350.31 | 114.85 | 10.0001 | 73522 | 0 | 0.14 | 10.07 | 9960.9 | 73522.0000/0.00 | 9.9609/0.00 | |||
1 | 10G | seqrewr(顺序读写 | 16k | 23764.3 | 30423.51 | 0 | 371.32 | 10.0027 | 542015 | 0 | 0.02 | 17.79 | 9841.93 | 542015.0000/0.00 | 9.8419/0.00 | |
1 | 10G | seqwr(顺序写) | 16k | 22523.4 | 28835.51 | 351.93 | 10.0035 | 513969 | 0 | 0.02 | 18.75 | 9827.43 | 513969.0000/0.00 | 9.8274/0.00 | ||
1 | 10G | seqrd(顺序读) | 16k | 101351 | 1583.62 | 10.0003 | 1013781 | 0 | 0.01 | 12.26 | 9714.08 | 1013781.0000/0.00 | 9.7141/0.00 |