硬盘IO的个人理解(机械硬盘)

机械硬盘:

1.硬盘的容量 = 磁头数 * 磁道数 * 每道的扇区数 * 每个扇区的存储量。(越靠近外面,扇区就会越大,对应的存储量就越大)

2.一次IO:

    磁盘控制器接收到CPU发送的指令,从某个扇区开始读取若干个扇区的数据,磁盘控制器接收到指令,通过寻道,旋转,再将数据读取到内存的过程叫一次IO(我自己认为的)

3.IOPS指标:

    概念:每秒的IO次数

    计算方法:(理论):1000ms/(平均寻道时间+平均旋转延迟时间+平均数据读取的时间) (假设每次读取数据时间为0,极限情况下,平均IOPS为100,从网上找到的资料也是100~200左右,基本吻合)

    寻道时间:磁头从开始移动到数据所在磁道的时间(3-15ms),平均为10ms。

    旋转延迟:盘片旋转,将请求的数据所在扇区移动到磁头的下方所用的时间,旋转延迟取决于磁盘的转速,假设服务器的转速是15000rpm。算出平均每次转动一圈用时4ms(因为每次不可能转动一圈,即每次最多转动半圈,然后再算平均大概在1ms的时间,相比于寻道时间,旋转延迟相对是很短的)

4.硬盘吞吐量:

   每秒IO吞吐量 = IOPS * 平均每次IO的大小

   每秒IO吞吐量 = 1000ms/(平均寻道时间+平均旋转延迟时间+平均数据读取的时间<取决于转速和扇区容量>) *  平均读取数据的大小

   对于顺序IO 由于没有寻道时间和平均旋转延迟时间,每秒IO吞吐量大概是随机IO的10倍- -大概吧。

5.硬盘的IO优化:

     a.操作系统的一次IO操作并不等同于硬盘的一次IO操作,操作系统会将IO负载到不同的硬盘上,提升性能。比如raid0的一种实现方式。是将数据按规律从多个硬盘进行读写,性能提升了n倍(n=硬盘数)  

      备注一下:raid0不能解决数据可靠性的问题,raid1 会将数据做一份备份。 raid0 + raid1 的模式让我想起了es的集群管理模式。所以技术的“术”虽然不同,但是“道”是相同的!

     b.记得我之前看到的关于并行IO的概念,不清楚并行IO是不是操作系统实现的,还是磁盘厂商实现的,机制类似于raid0(等以后有空再看)

     c.多进程或多线程并发IO,会大大降低IO效率,因为每次读写都会造成磁道较大的偏移。随着并发线程增多,会导致IO性能急剧下降。所以可以考虑使用单独的线程完成IO操作。

    d.不使用传统的raid,而是对每块硬盘进行单独的挂载,并通过程序对多个硬盘进行并发读写,提升性能(可以使用多台机器)。

    e.顺序IO,吞吐量增加10倍 - - 大概。

    f.一次尽可能多的写入或读取,可以减少IO次数。(同时也可以减少CPU指令的发送量)。

6.块,扇区:

   扇区:硬盘读写的最小单位

   块:操作系统针对于硬盘读写的最小单位

猜你喜欢

转载自blog.csdn.net/weixin_40585816/article/details/81023522