Centos测试磁盘读写性能
测试命令
#使用dd命令创建一个1G的文件,建议可以设置10000次,更好的观察。 dd if=/dev/zero of=testfile bs=1M count=1000 conv=fdatasync #使用yum install iotop -y 命令安装,这里查看磁盘吞吐速度 iotop #测试磁盘的iops工具,使用yum install fio -y 命令安装 fio --name=random-read --ioengine=libaio --rw=randread --bs=4k --iodepth=64 --size=1G --runtime=30s --direct=1 --group_reporting #测试iops写性能 fio --name=write-test --ioengine=libaio --rw=write --bs=4k --iodepth=64 --size=1G --runtime=30s --direct=1 --group_reporting
dd命令介绍
这个命令的各个参数含义如下:
if=/dev/zero:if 参数指定了输入文件,这里使用了特殊设备 /dev/zero,它会不断输出 0。
of=testfile:of 参数指定了输出文件,这里将数据写入到名为 testfile 的文件中。
bs=1M:bs 参数指定了每次 I/O 操作的块大小,这里设置为 1MB。
count=1000:count 参数指定了要写入的块数量,这里设置为 1000,意味着总共写入 1000 个块,即 1GB。
conv=fdatasync:conv 参数指定了数据写入到文件后执行的同步操作,fdatasync 表示等待数据真正写入磁盘后再返回。
执行这条命令后,dd 将会持续地将随机数据写入 testfile 文件中,每次写入一个 1MB 的块,直到总共写入了 1GB 的数据为止。这样就可以进行持续的写入测试。
请注意:这样的测试可能会对磁盘产生较大的负载,请谨慎使用,尤其是在生产环境中。确保在进行测试前备份好重要数据,并且避免在正在使用的文件系统上执行此操作。
iotop命令介绍
iotop 的输出中,每一行代表一个进程的磁盘 I/O 活动情况。以下是一条 iotop 输出的示例数据以及其各个参数的含义:
Total DISK READ:显示所有进程总共从磁盘读取的数据量,以每秒字节数 (B/s) 的形式显示。
Total DISK WRITE:显示所有进程总共写入到磁盘的数据量,以每秒字节数 (B/s) 的形式显示。
Actual DISK READ:显示实际磁盘读取速率,以每秒字节数 (B/s) 的形式显示。
Actual DISK WRITE:显示实际磁盘写入速率,以每秒字节数 (B/s) 的形式显示。
PID:进程 ID。
PRIO:进程优先级。
USER:拥有该进程的用户。
DISK READ:该进程从磁盘读取的数据量,以每秒字节数 (B/s) 的形式显示。
DISK WRITE:该进程写入到磁盘的数据量,以每秒字节数 (B/s) 的形式显示。
SWAPIN:该进程在交换空间中交换的数据量。
IO>:进程的 I/O 活动百分比,即进程的 I/O 占总 I/O 的百分比。
COMMAND:进程名称。
fio命令介绍
fio --name=random-read --ioengine=libaio --rw=randread --bs=4k --iodepth=64 --size=1G --runtime=30s --direct=1 --group_reporting
如下为执行命令后输出的结果截图,读性能
fio --name=write-test --ioengine=libaio --rw=write --bs=4k --iodepth=64 --size=1G --runtime=30s --direct=1 --group_reporting
如下为执行命令后输出的结果截图,写性能
这个 fio 测试的输出提供了许多关于磁盘 IOPS、延迟、吞吐量等性能指标的信息。上图信息参数说明如下:
random-read: 这是测试任务的名称。
(g=0): 表示这个任务所属的组号。
rw=randread: 指定了测试中执行的操作,这里是随机读取(random read)。
bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B: 指定了读、写和总体操作的块大小。在这个测试中,读、写和总体操作的块大小都是 4KB。
ioengine=libaio: 指定了使用的 I/O 引擎,这里使用了异步 I/O 引擎 libaio。
iodepth=64: 指定了每个线程的 I/O 操作队列深度。
size=1G: 指定了要读取的数据大小,这里是 1GB。
runtime=30s: 指定了测试运行的时间,这里是 30 秒。
direct=1: 表示使用直接 I/O,即绕过文件系统缓存。
group_reporting: 表示对所有线程的结果进行汇总报告。
下面是测试结果的解释:
IOPS: 表示每秒钟的 I/O 操作数。在这个测试中,读取操作的平均 IOPS 是 26.4k,即每秒约有 26400 次读取操作。
BW: 表示带宽,即数据传输速率。这里是 103MB/s,表示每秒传输了 103MB 的数据。
slat (nsec): 表示起始延迟,即发起 I/O 请求到开始执行的延迟。包括最小值、最大值、平均值和标准差。
clat (usec): 表示完成延迟,即发起 I/O 请求到完成的延迟。包括最小值、最大值、平均值和标准差。
lat (usec): 表示总体延迟,包括起始延迟和完成延迟。
lat percentiles (usec): 表示延迟的百分位数,例如第 50 百分位数表示 50% 的 I/O 操作的延迟小于等于该值。
bw (KiB/s): 表示带宽的详细信息,包括最小值、最大值、平均值和标准差。
iops: 表示 IOPS 的详细信息,包括最小值、最大值、平均值和标准差。
lat (usec): 表示延迟的详细信息,包括各个延迟区间的占比。
cpu: 表示 CPU 使用情况,包括用户态 CPU 使用率、内核态 CPU 使用率等。
IO depths: 表示 I/O 操作的队列深度分布情况。
issued rwts: 表示发出的读取和写入请求数量。
latency: 表示延迟的详细信息,包括目标延迟、窗口大小、百分位数和队列深度。
Run status group 0 (all jobs): 表示整个测试任务组的运行状态。
READ: 表示读取操作的性能指标。
Disk stats (read/write): 提供了磁盘的统计信息,包括读取的 I/O 操作数、合并的 I/O 操作数、磁盘 ticks、队列中的 I/O 操作数以及磁盘的利用率。