一、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高的进程,搞定问题
谢谢阅读、一起进步