磁盘IO初探

背景

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

测试

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

测试一 虚拟磁盘

  • 查看OS版本
[[email protected] ~]# 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
  • 查看磁盘设备信息
[[email protected] ~]# 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大小文件测试
[[email protected] 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

[[email protected] 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

[[email protected] 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

[[email protected] 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版本
[[email protected] ~]$ 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
 
  • 查看磁盘设备信息
[[email protected] ~]$ 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大小文件测试
[[email protected] ~]$ 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

[[email protected] ~]$ 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

[[email protected] ~]$ 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

[[email protected] ~]$ 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版本
[[email protected] ~]# 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
  • 查看磁盘设备信息
[[email protected] ~]# 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大小文件测试
[[email protected] ~]# 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

[[email protected] ~]# 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

[[email protected] ~]# 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

[[email protected] ~]# 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/秒

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

时间: 2024-11-05 12:24:58

磁盘IO初探的相关文章

磁盘IO单线程顺序写时最快的,如果多线程写,磁盘的磁头要不断重新寻址,所以写入速度反而会慢

(1) 读写最好还是不要多线程,硬盘读写的速度有限,单线程时已经满负荷了,多线程又会增加线程之间的切换,会增加时间. 如果想增加读写速度,应该增加硬盘,做raid (2)首先是硬盘的写入是串行的,CPU的计算才是并行的,如果你偏重计算那么多线程能提高,要不怎么叫做并行计算呢: 如果侧重存储,除非数据量达到足以体现优势的程度,否则加上线程之间切换的损耗当然会效率更加地下. (3)这个是按照算法来说的,目前来说大多数的算法都是很快的,瓶颈都在磁盘的IO上,我们针对大多数的算法都进行过测试,基本一半以

通过blktrace, debugfs分析磁盘IO

前几天微博上有同学问我磁盘util达到了100%时程序性能下降的问题,由于信息实在有限,我也没有办法帮太大的忙,这篇blog只是想给他列一下在磁盘util很高的时候如何通过blktrace+debugfs找到发生IO的文件,然后再结合自己的应用程序,分析出这些IO到底是谁产生的,最终目的当然是尽量减少不必要的IO干扰,提高程序的性能. blktrace是Jens Axobe写的一个跟踪IO请求的工具,linux系统发起的IO请求都可以通过blktrace捕获并分析,关于这个工具的介绍请自行Goo

Cacti监控磁盘IO(rhel)

1.检查net-snmp是否支持IO监控 snmpwalk -v 1 -c public 监控机的IP UCD | more 执行如上命令,如果返回类似如下数据,则表示支持disk io的监控,否则需要重新编译增加diskio-module模块. 1. UCD-DISKIO-MIB::diskIOIndex.1 = INTEGER: 1 2. UCD-DISKIO-MIB::diskIOIndex.2 = INTEGER: 2 3. UCD-DISKIO-MIB::diskIOIndex.3 =

zabbix监控磁盘IO(二)

1.磁盘发现脚本 vim disk_io.sh  #!/bin/bash  diskarray=(`cat /proc/diskstats |grep -E "\bsd[a-z]\b|\bxvd[a-z]\b|\bvd[a-z]\b"|awk '{print $3}'|sort|uniq   2>/dev/null`)    length=${#diskarray[@]} printf "{\n" printf  '\t'"\"data\&

【好书摘要】性能优化中CPU、内存、磁盘IO、网络性能的依赖

系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上的优化就适合眼下正在运行的系统,不同的系统.不同的硬件.不同的应用优化的重点也不同. 优化的方法也不同.优化的参数也不同.性能监测是系统优化过程中重要的一环,如果没有监测.不清楚性能瓶颈在哪里,怎么优化呢?所以找到性能 瓶颈是性能监测的目的,也是系统优化的关键.系统由若干子系统构成,通常修改一个子系

Linux服务器用iotop命令分析服务器磁盘IO情况

Linux下的IO统计工具如iostat, nmon等大多数是只能统计到per设备的读写情况, 如果你想知道每个进程是如何使用IO的就比较麻烦.如果会systemtap, 或者blktrace这些事情难不到大家, 但是没专用工具总不是很舒服的. 幸运的是Linux 2.6.20内核以后提供了基于每个进程的IO记账功能,所以就有了类似iotop这样方便的工具.可以通过iotop工具进行分析,查看哪个进程占有读写比较高. 官网地址: http://guichaz.free.fr/iotop/ Iot

standby 磁盘IO性能较差,影响Primary性能

1. 近日处理一个由于standby 磁盘IO性能较差,导致Primary的性能受到影响.主库主要是等待"log file switch completion",通过ASH dump分析,最终发现实际等待事件是"LGWR-LNS wait on channel".这个事件基本上可以将问题归结到网络性能和standby的IO性能,而客户的传输模式是"MAXIMUM AVAILABILITY"最后提出两个解决方案,(1). 更换性能更好的standb

Linux运维 第三阶段(8) 磁盘IO性能监控 iostat

Linux下的iostat命令 #iostat -d -k -t 2 -d:显示系统中的设备 -k:表示以每秒kb的形式显示 -t:打印出时间信息 2:表示每2秒统计一次 每次输出都会打印时间信息, 接下来显示磁盘IO情况列表. Device: 显示磁盘名称tps: 表示每秒钟输出到物理磁盘的传输次数.一次传输就是一个对物理磁盘的 I/O 请求.多个逻辑请求可被并为对磁盘的一个单一 I/O 请求.传输具有中等的大小.kB_read/s: 每秒从磁盘读取的数据量,单位为KB.kB_wrtn/s:

sysbench利用fabric磁盘IO测试

利用sysbench测试磁盘IO: 10台机器并发测试,一台fabric控制server,控制端需要安装fabric,测试server安装sysbench,测试时生成15G的测试文件:测试案例如下: fabric的远程管理,可以看一下上篇博文: http://xujunxian.blog.51cto.com/8614409/1730780 测试执行: 1.创建11台ubuntu台虚拟机,1台安装fabric,10台安装sysbench,并配置好IP地址,fabric需要直接访问安装sysbenc