Linux分区性能测试方法与工具
在Linux系统中,对分区进行性能测试是评估其I/O能力、识别瓶颈的关键步骤。以下是常用的测试方法及工具,覆盖从基础到高级的场景:
dd是Linux自带的简单工具,适合快速测试分区的顺序读写速度,但无法测试随机I/O或细粒度指标(如IOPS、延迟)。
dd if=/dev/zero of=/mnt/sda1/testfile bs=1G count=1 oflag=direct
参数说明:if=/dev/zero(输入源,生成空字符)、of=/mnt/sda1/testfile(输出文件,需替换为目标分区挂载路径)、bs=1G(块大小,1GB)、count=1(块数量,1块)、oflag=direct(绕过缓存,直接写入磁盘,结果更真实)。dd if=/mnt/sda1/testfile of=/dev/null bs=1G count=1 iflag=direct
参数说明:if=/mnt/sda1/testfile(输入文件)、of=/dev/null(输出目标,丢弃数据)、iflag=direct(绕过缓存,直接读取磁盘)。rm /mnt/sda1/testfile),避免占用空间。hdparm是专门用于测试硬盘性能的工具,可评估缓存读取速度(内存加速)和不带缓存的磁盘读取速度(真实磁盘性能)。
sudo apt-get install hdparmsudo yum install hdparmsudo hdparm -Tt /dev/sda1
参数说明:-T(测试缓存读取速度)、-t(测试不带缓存的磁盘读取速度)。/dev/sda1:
Timing cached reads: 10000 MB in 2.00 seconds = 5000.00 MB/sec
Timing buffered disk reads: 500 MB in 3.00 seconds = 166.67 MB/sec
解释:“Timing cached reads”为缓存读取速度(受内存影响),“Timing buffered disk reads”为真实磁盘读取速度(反映磁盘本身性能)。sudo umount /dev/sda1),避免缓存干扰(可选)。fio(Flexible I/O Tester)是Linux下最强大的性能测试工具,支持多线程/多进程、随机/顺序I/O、不同块大小、IOPS/延迟测量等,适合专业场景。
sudo apt-get install fiosudo yum install fiofio --name=seq_read --ioengine=libaio --rw=read --bs=1M --direct=1 --size=4G --numjobs=1 --runtime=60 --time_based --filename=/dev/sda1
rw=read为rw=write)。fio --name=seq_write --ioengine=libaio --rw=write --bs=1M --direct=1 --size=4G --numjobs=1 --runtime=60 --time_based --filename=/dev/sda1
fio --name=rand_read --ioengine=libaio --rw=randread --bs=4k --direct=1 --size=1G --numjobs=1 --runtime=60 --time_based --filename=/dev/sda1
rw=randread为rw=randwrite)。fio --name=rand_write --ioengine=libaio --rw=randwrite --bs=4k --direct=1 --size=1G --numjobs=1 --runtime=60 --time_based --filename=/dev/sda1
--ioengine=libaio:使用Linux异步I/O引擎(提升测试效率);--rw:读写模式(read/write/randread/randwrite);--bs:块大小(如1M、4k,根据测试场景选择);--direct=1:绕过缓存,直接访问磁盘(结果更真实);--size:测试数据大小(如4G、1G);--runtime:测试运行时间(如60秒);--time_based:以时间为基础结束测试(即使数据未写完)。READ: bw=512MiB/s (537MB/s), 512MiB/s-512MiB/s (537MB/s-537MB/s), io=30.0GiB (32.2GB), run=60000-60000msec
表示顺序读取带宽为512MB/s,IOPS约为512MB/s / 4k = 128000(若块大小为4k),延迟为测试期间的平均响应时间。iostat(属于sysstat包)可监控分区的实时I/O性能,如吞吐量、IOPS、利用率、队列长度等,适合配合测试工具使用,分析性能瓶颈。
sudo apt-get install sysstatsudo yum install sysstatiostat -x 1
iostat -x /dev/sda1 1
关键指标说明:
- `%util`:磁盘利用率(百分比,接近100%表示磁盘繁忙);
- `await`:平均I/O响应时间(毫秒,包括队列等待和处理时间);
- `r/s`/`w/s`:每秒读/写操作数(IOPS);
- `rkB/s`/`wkB/s`:每秒读/写数据量(KB/s)。