【Linux】磁盘读写 测试
一、如何查看当前磁盘的IO使用情况
使用命令:iotop
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | Total DISK READ: 3.89 K /s | Total DISK WRITE: 0.00 B /s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 14060 be /2 root 3.89 K /s 0.00 B /s 0.00 % 0.09 % AliYunDun 14695 be /4 www 0.00 B /s 89.42 K /s 0.00 % 0.00 % nginx: worker process 14697 be /4 www 0.00 B /s 256.61 K /s 0.00 % 0.00 % nginx: worker process 14698 be /4 www 0.00 B /s 38.88 K /s 0.00 % 0.00 % nginx: worker process 14699 be /4 www 0.00 B /s 66.10 K /s 0.00 % 0.00 % nginx: worker process 1 be /4 root 0.00 B /s 0.00 B /s 0.00 % 0.00 % init 2 be /4 root 0.00 B /s 0.00 B /s 0.00 % 0.00 % [kthreadd] 3 rt /4 root 0.00 B /s 0.00 B /s 0.00 % 0.00 % [migration /0 ] 4 be /4 root 0.00 B /s 0.00 B /s 0.00 % 0.00 % [ksoftirqd /0 ] 5 rt /4 root 0.00 B /s 0.00 B /s 0.00 % 0.00 % [stopper /0 ] 6 rt /4 root 0.00 B /s 0.00 B /s 0.00 % 0.00 % [watchdog /0 ] 7 rt /4 root 0.00 B /s 0.00 B /s 0.00 % 0.00 % [migration /1 ] 8 rt /4 root 0.00 B /s 0.00 B /s 0.00 % 0.00 % [stopper /1 ] 9 be /4 root 0.00 B /s 0.00 B /s 0.00 % 0.00 % [ksoftirqd /1 ] 10 rt /4 root 0.00 B /s 0.00 B /s 0.00 % 0.00 % [watchdog /1 ] 11 rt /4 root 0.00 B /s 0.00 B /s 0.00 % 0.00 % [migration /2 ] 12 rt /4 root 0.00 B /s 0.00 B /s 0.00 % 0.00 % [stopper /2 ] 13 be /4 root 0.00 B /s 0.00 B /s 0.00 % 0.00 % [ksoftirqd /2 ] 14 rt /4 root 0.00 B /s 0.00 B /s 0.00 % 0.00 % [watchdog /2 ] 15 rt /4 root 0.00 B /s 0.00 B /s 0.00 % 0.00 % [migration /3 ] 16 rt /4 root 0.00 B /s 0.00 B /s 0.00 % 0.00 % [stopper /3 ] 17 be /4 root 0.00 B /s 0.00 B /s 0.00 % 0.00 % [ksoftirqd /3 ] 18 rt /4 root 0.00 B /s 0.00 B /s 0.00 % 0.00 % [watchdog /3 ] 19 rt /4 root 0.00 B /s 0.00 B /s 0.00 % 0.00 % [migration /4 ] 20 rt /4 root 0.00 B /s 0.00 B /s 0.00 % 0.00 % [stopper /4 ] |
使用命令sar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [root@ test ~] # sar -b 1 10 Linux 2.6.32-573.22.1.el6.x86_64 ( test ) 01 /08/2019 _x86_64_ (8 CPU) 06:10:37 PM tps rtps wtps bread /s bwrtn /s 06:10:38 PM 273.47 4.08 269.39 32.65 10195.92 06:10:39 PM 4.08 2.04 2.04 16.33 16.33 06:10:40 PM 4.12 2.06 2.06 16.49 16.49 06:10:41 PM 3.09 3.09 0.00 24.74 0.00 06:10:42 PM 12.00 4.00 8.00 32.00 560.00 06:10:43 PM 263.92 2.06 261.86 16.49 10169.07 06:10:44 PM 4.17 4.17 0.00 125.00 0.00 06:10:45 PM 3.09 3.09 0.00 49.48 0.00 06:10:46 PM 2.08 2.08 0.00 16.67 0.00 06:10:47 PM 3.09 2.06 1.03 16.49 404.12 Average: 57.45 2.88 54.57 34.53 2141.83 |
说明:
-
tps: 每秒向磁盘设备请求数据的次数,包括读、写请求,为rtps与wtps的和。出于效率考虑,每一次IO下发后并不是立即处理请求,而是将请求合并(merge),这里tps指请求合并后的请求计数。
-
rtps: 每秒向磁盘设备的读请求次数
-
wtps: 每秒向磁盘设备的写请求次数
-
bread: 每秒从磁盘读的bytes数量
-
bwrtn: 每秒向磁盘写的bytes数量
二、磁盘读写速率测试
1、获取blocksize
1 2 | [root@ test ~] # blockdev --getbsz /dev/vda1 4096 |
blocksize是4KB大小
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | [root@iZ23e3f2jdcZ ~] # time dd if=/dev/zero of=test.dbf bs=4K count=50000 oflag=direct 50000+0 records in 50000+0 records out 204800000 bytes (205 MB) copied, 35.9065 s, 5.7 MB /s real 0m35.908s user 0m0.099s sys 0m1.797s [root@iZ23e3f2jdcZ ~] # time dd if=/dev/zero of=test.dbf bs=4K count=50000 50000+0 records in 50000+0 records out 204800000 bytes (205 MB) copied, 1.09874 s, 186 MB /s real 0m1.103s user 0m0.025s sys 0m0.254s [root@iZ23e3f2jdcZ ~] # time dd if=/dev/vda1 of=/dev/null bs=4K count=50000 50000+0 records in 50000+0 records out 204800000 bytes (205 MB) copied, 1.49831 s, 137 MB /s real 0m1.500s user 0m0.021s sys 0m0.180s [root@ test ~] # hdparm -Tt /dev/vda1 /dev/vda1 : Timing cached reads: 19468 MB in 1.99 seconds = 9766.52 MB /sec Timing buffered disk reads: 384 MB in 3.00 seconds = 127.88 MB /sec |
2、工具介绍
使用hdparm命令
这是一个是用来获取ATA/IDE硬盘的参数的命令,是由早期Linux IDE驱动的开发和维护人员 Mark Lord开发编写的( hdparm has been written by Mark Lord <mlord@pobox.com>, the primary developer and maintainer of the (E)IDE driver for Linux, with suggestions from many netfolk).该命令应该也是仅用于Linux系统,对于UNIX系统,ATA/IDE硬盘用的可能比较少,一般大型的系统都是使用磁盘阵列的
使用方法很简单
1 | hdparm -Tt /dev/vda1 |
可以看到,2秒钟读取了19468MB的缓存,约合9766.52MB/sec,在3.11秒中读取了384MB磁盘(物理读),读取速度约合127.88 MB/sec
使用dd命令
这不是一个专业的测试工具,不过如果对于测试结果的要求不是很苛刻的话,平时可以使用来对磁盘的读写速度作一个简单的评估,另外由于这是一个免费软件,基本上×NIX系统上都有安装,对于Oracle裸设备的复制迁移,dd工具一般都是首选.
首先了解两个特殊设备
-
/dev/null 伪设备,回收站.写该文件不会产生IO
-
/dev/zero 伪设备,会产生空字符流,对它不会产生IO
测试方法:
a.测试磁盘的IO写速度
1 | time dd if = /dev/zero of= test .dbf bs=4k count=300000 # 如果要测试实际速度 还要在末尾加上 oflag=direct测到的才是真实的IO速度 |
b.测试磁盘的IO读速度
1 | dd if = test .dbf bs=4k count=300000 of= /dev/null #表示 每次写入/读取8k的数据,执行300000次 |
dd语法
功能说明:读取,转换并输出数据。
语法:dd [bs=<字节数>][cbs=<字节数>][conv=<关键字>][count=<区块数>][ibs=<字节数>][if=<文件>][obs=<字节数>][of=<文件>][seek=<区块数>][skip=<区块数>][--help][--version]
补充说明:dd可从标准输入或文件读取数据,依指定的格式来转换数据,再输出到文件,设备或标准输出。
参数:
-
bs=<字节数> 将ibs( 输入)与obs(输出)设成指定的字节数。
-
cbs=<字节数> 转换时,每次只转换指定的字节数。
-
conv=<关键字> 指定文件转换的方式。
-
count=<区块数> 仅读取指定的区块数。
-
ibs=<字节数> 每次读取的字节数。
-
if=<文件> 从文件读取。
-
obs=<字节数> 每次输出的字节数。
-
of=<文件> 输出到文件。
-
seek=<区块数> 一开始输出时,跳过指定的区块数。
-
skip=<区块数> 一开始读取时,跳过指定的区块数。
-
--help 帮助。
-
--version 显示版本信息。
dd常用参数详解
-
if=xxx 从xxx读取,如if=/dev/zero,该设备无穷尽地提供0,(不产生读磁盘IO)
-
of=xxx 向xxx写出,可以写文件,可以写裸设备。如of=/dev/null,"黑洞",它等价于一个只写文件. 所有写入它的内容都会永远丢失. (不产生写磁盘IO)
-
bs=8k 每次读或写的大小,即一个块的大小。
-
count=xxx 读写块的总数量。
避免操作系统“写缓存”干扰测试成绩,使用sync、fsync、fdatasync
- 作者:踏雪无痕
- 出处:http://www.cnblogs.com/chenpingzhao/
- 本文版权归作者和博客园共有,如需转载,请联系 pingzhao1990#163.com
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
2016-01-08 Linux下使用iostat 监视I/O状态
2016-01-08 【mysql】关于checkpoint机制