首页 > 代码库 > 磁盘IO初探

磁盘IO初探

背景

数据库系统是一个IO密集型系统,在排查问题时经常遇到IO相关的问题,数据库insert/update慢是否由于磁盘IO慢导致的呢?正常的磁盘IO应该在什么数量级呢?

测试

  • 测试思路:根据从领导那里学来的方法,在系统空闲时段分别在三种不同的操作系统(磁盘设备)上写入大文件,查看写入速度

测试一 虚拟磁盘

  • 查看OS版本
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

 

  • 查看磁盘设备信息
[root@localhost ~]# cat /proc/scsi/scsi
Attached devices:
Host: scsi2 Channel: 00 Id: 00 Lun: 00
  Vendor: VMware   Model: Virtual disk     Rev: 1.0 
  Type:   Direct-Access                    ANSI  SCSI revision: 02
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: NECVMWar Model: VMware IDE CDR10 Rev: 1.00
  Type:   CD-ROM                           ANSI  SCSI revision: 05

 

  • 写入1G大小文件测试
[root@localhost home]# time dd if=/dev/zero of=/home/1kb.1GBFILE bs=1k count=1048576
记录了1048576+0 的读入
记录了1048576+0 的写出
1073741824字节(1.1 GB)已复制,74.0427 秒,14.5 MB/秒

real    1m14.121s
user    0m0.142s
sys 0m2.434s

[root@localhost home]# time dd if=/dev/zero of=/home/4kb.1GBFILE bs=4k count=262144
记录了262144+0 的读入
记录了262144+0 的写出
1073741824字节(1.1 GB)已复制,82.6433 秒,13.0 MB/秒

real    1m22.646s
user    0m0.041s

[root@localhost home]# time dd if=/dev/zero of=/home/8kb.1GBFILE bs=8k count=131072
记录了131072+0 的读入
记录了131072+0 的写出
1073741824字节(1.1 GB)已复制,65.9848 秒,16.3 MB/秒

real    1m5.987s
user    0m0.041s
sys 0m1.272s

[root@localhost home]# time dd if=/dev/zero of=/home/16kb.1GBFILE bs=16k count=65536
记录了65536+0 的读入
记录了65536+0 的写出
1073741824字节(1.1 GB)已复制,65.156 秒,16.5 MB/秒

real    1m5.159s
user    0m0.017s
sys 0m1.131s

 

测试二 传统机械硬盘

  • 查看OS版本
[wangzhen@localhost ~]$ uname -a
Linux localhost.localdomain 4.11.3-202.fc25.x86_64 #1 SMP Mon Jun 5 16:38:21 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

 

 
  • 查看磁盘设备信息
[wangzhen@localhost ~]$ cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: WDC WD10JPVX-08J Rev: 1A05
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: SanDisk SSD U110 Rev: 001 
  Type:   Direct-Access                    ANSI  SCSI revision: 05

 

  • 写入1G大小文件测试
[wangzhen@localhost ~]$ time dd if=/dev/zero of=/home/wangzhen/1kb.1GBFILE bs=1k count=1048576
记录了1048576+0 的读入
记录了1048576+0 的写出
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 9.6718 s, 111 MB/s

real    0m9.674s
user    0m0.100s
sys 0m1.997s

[wangzhen@localhost ~]$ time dd if=/dev/zero of=/home/wangzhen/4kb.1GBFILE bs=4k count=262144
记录了262144+0 的读入
记录了262144+0 的写出
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 10.3533 s, 104 MB/s

real    0m10.355s
user    0m0.040s
sys 0m0.858s

[wangzhen@localhost ~]$ time dd if=/dev/zero of=/home/wangzhen/8kb.1GBFILE bs=8k count=131072
记录了131072+0 的读入
记录了131072+0 的写出
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 9.71665 s, 111 MB/s

real    0m9.719s
user    0m0.019s
sys 0m0.796s


[wangzhen@localhost ~]$ time dd if=/dev/zero of=/home/wangzhen/16kb.1GBFILE bs=16k count=65536
记录了65536+0 的读入
记录了65536+0 的写出
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 9.90074 s, 108 MB/s

real    0m9.903s
user    0m0.008s
sys 0m0.793s

 

测试三 磁盘阵列

  • 查看OS版本
[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
  • 查看磁盘设备信息
[root@localhost ~]# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 02 Id: 00 Lun: 00
  Vendor: LSI      Model: RAID 510i        Rev: 2.13
  Type:   Direct-Access                    ANSI  SCSI revision: 05

 

  • 写入1G大小文件测试
[root@localhost ~]# time dd if=/dev/zero of=/home/1kb.1GBFILE bs=1k count=1048576
记录了1048576+0 的读入
记录了1048576+0 的写出
1073741824字节(1.1 GB)已复制,2.16015 秒,497 MB/秒

real    0m2.162s
user    0m0.097s
sys 0m2.061s

[root@localhost ~]# time dd if=/dev/zero of=/home/4kb.1GBFILE bs=4k count=262144
记录了262144+0 的读入
记录了262144+0 的写出
1073741824字节(1.1 GB)已复制,0.937081 秒,1.1 GB/秒

real    0m0.939s
user    0m0.025s
sys 0m0.912s

[root@localhost ~]# time dd if=/dev/zero of=/home/8kb.1GBFILE bs=8k count=131072
记录了131072+0 的读入
记录了131072+0 的写出
1073741824字节(1.1 GB)已复制,0.872579 秒,1.2 GB/秒

real    0m0.874s
user    0m0.014s
sys 0m0.858s

[root@localhost ~]# time dd if=/dev/zero of=/home/16kb.1GBFILE bs=16k count=65536
记录了65536+0 的读入
记录了65536+0 的写出
1073741824字节(1.1 GB)已复制,0.921259 秒,1.2 GB/秒

real    0m0.923s
user    0m0.007s
sys 0m0.915s

 

结论

不同的磁盘类型和架构方式,磁盘的写入速度相差近10倍,以下为各个磁盘类型写入速度数量级

  • 测试一 虚拟磁盘的写入速度稳定在16M/秒
  • 测试二 机械硬盘的写入速度稳定在110M/秒
  • 测试三 磁盘阵列的写入速度稳定在1.2G/秒

测试过程和方法可能不严谨,仅供参考和学习交流,欢迎批评指正!

磁盘IO初探