IO到底是怎么回事,怎么定义IO问题

一、IO是什么

  IO统称为输入输出(input/output),又分为IO接口和IO设备,比如像USB接口就是IO接口,硬盘的接口;IO设备像硬盘、键盘、蓝牙耳机等;

二、为什么会有IO问题

  ①:CPU访问内存和访问硬盘的速度之差

    是因为cpu的运行速度与IO运行速度数量级的速度之差导致、cpu访问内存比cpu访问硬盘快1000倍,cpu的运行速度是ns级别,而SSD的速度是us级别、HDD是ms毫秒级别,NS = 1000*1000 MS;速度之差如下图:

  

 为什么不用局部性原理? 

   可能你会问,加一个缓存不是就可以了吗?像cpu和memory之间的速度差,加一个告诉缓存L1、L2、L3;cpu访问内存和硬盘速度差,把内存数据放到Redis里面不就行了吗,但现在mysql数据库中,一个表上千万的数据量已经很正常的,内存不可能缓存那么多数据的;

 ②:硬盘的访问更多是随机读写

 顺序读写:文件的指针从头到尾的读写,避免的磁盘的多次寻址和寻道时间

 随机读写:文件的指针可以任意的移动,导致磁盘进行大量的寻址和寻道操作;

 磁盘顺序读写,拿HDD的速度在一秒钟读写20万,但跟平时的开发经验不符合,为什么?

 原因在于磁盘大多数都是在随机读写,而随机读写的速度是顺序读写的几十分之一左右;

 像我电脑SSD随机4k的读取速度是39M/s

 磁盘随机读写,7200转的HDD大概在100次,而SDD大概在10000左右,写最快也就20000次,

 为什么请双击链接(https://www.cnblogs.com/cpThinker/articles/12688934.html)

 

 硬盘的几个核心指标,吞吐率、和响应时间、IOPS;

  吞吐率:

   常规HDD吞吐率是 200M/S, SDD吞吐率是stta3.0的接口,带宽6G/b(小b),大概是700M/S,速度差3倍左右;

  响应时间:

   常规HDD响应时间是 0.6ms, SDD相应时间是0.066ms,相差10倍左右;

  IOPS:

   表示每秒输入输出操作的次数;io的核心指标,大家更关注的指标;

   IOPS = 平均延迟+平均寻道时间

三、在服务器中如何定位io问题

 ①:top命令,wa(如截图)就是表示IOwait的指标,也就是cpu等待IO执行完成花费的时间占cpu的百分比

 

 

 ②:iostat命令,查看每个硬盘的实际读写情况,关注每个硬盘的TPS、read/write 

  没有此命令通过 yum-y install iostat安装

   

 

   ③:通过iotop 找出占用io高的进程,搞定问题

   

 

 

                                                         谢谢阅读、一起进步

posted @ 2020-04-12 21:24  计算机学徒  阅读(7718)  评论(0编辑  收藏  举报