磁盘 IO

寻址–毫秒ms级别的。

对于磁盘来说一个完整的IO操作是这样进行的:当控制器对磁盘发出一个IO操作命令的时候,磁盘的驱动臂(Actuator Arm)带读写磁头(Head)离开着陆区(Landing Zone,位于内圈没有数据的区域),移动到要操作的初始数据块所在的磁道(Track)的正上方,这个过程被称为寻址(Seeking),对应消耗的时间被称为寻址时间(Seek Time);但是找到对应磁道还不能马上读取数据,这时候磁头要等到磁盘盘片(Platter)旋转到初始数据块所在的扇区(Sector)落在读写磁头正上方的之后才能开始读取数据,在这个等待盘片旋转到可操作扇区的过程中消耗的时间称为旋转延时(Rotational Delay);接下来就随着盘片的旋转,磁头不断的读/写相应的数据块,直到完成这次IO所需要操作的全部数据,这个过程称为数据传送(Data Transfer),对应的时间称为传送时间(Transfer Time)。完成这三个步骤之后一次IO操作也就完成了。 ———————————————— 版权声明:本文为CSDN博主「人工智」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_35789269/article/details/117536357

HDD机械磁盘的性能标准

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
最大IOPS的理论计算方法
IOPS = 1000 ms/ (寻道时间 + 旋转延迟)。可以忽略数据传输时间。
7200   rpm的磁盘 IOPS = 1000 / (9 + 4.17)  = 76 IOPS  13ms
10000 rpm的磁盘IOPS = 1000 / (6+ 3) = 111 IOPS         9ms
15000 rpm的磁盘IOPS = 1000 / (4 + 2) = 166 IOPS       6ms

常见磁盘平均物理寻道时间为:
7200转/分的STAT硬盘平均物理寻道时间是9ms
10000转/分的STAT硬盘平均物理寻道时间是6ms
15000转/分的SAS硬盘平均物理寻道时间是4ms

常见硬盘的旋转延迟时间为:  

7200   rpm的磁盘平均旋转延迟大约为601000/7200/2 = 4.17ms
10000 rpm的磁盘平均旋转延迟大约为601000/10000/2 = 3ms,
15000 rpm的磁盘其平均旋转延迟约为60*1000/15000/2 = 2ms。

©著作权归作者所有:来自51CTO博客作者Darren_Wen的原创作品,请联系作者获取转载授权,否则将追究法律责任 HDD机械磁盘的性能标准 https://blog.51cto.com/wendashuai/2852767

磁道 (Track)

https://blog.csdn.net/badbad_boy/article/details/4313645

以前见到的很多磁道的示意图都是这样的: 注意标线的位置,“指向一条线”,我当时的理解好像是这条线就是磁道。还有的解释是说磁道就是一个"同心圆"的集合

那么,我的疑问就是,既然那条线是同心圆,那么两条线之间的那快空白是什么呀? 什么也不是? 空着的? 就是为了分开磁道?晕倒。那这浪费的部分也太多了吧。毕竟两条线中间部分的宽度看起来比磁道可实在是宽太多了。

后来,查了下别的图片,才发现磁道原来应该是这样子的: 不是"同心圆”,应该是"同心圆环”

到此,我关于磁道的疑问才终于有了答案。 汗自己一个!!!

后来又联想到了其他的问题:

每个磁道上的扇区数目是一样的么?

早期的磁盘每个磁道上的扇区数目是一样,限制了磁盘的容量;后来为了增大磁盘容量采用了新技术,也就是说越往外每磁道扇区数目越多

早期的硬盘是每个磁道有相同的扇区,但是现在的硬盘采用线性寻址,所以每个磁道上扇区数不一样,外面的多,里面的少.光盘跟硬盘差不多.但是用螺线的.不像硬盘采用同心圆

不过,还是可以用CHS (柱面,磁道(磁头),扇区) 的方式来定位, 因为IDE磁盘做了内部转换,让你看起来好像每条磁道上面的簇数量都是一样的

0磁道是在磁盘的外圈还是内圈

由于历史原因 , 磁盘的0磁道在最外圈 (过去的老式硬盘,每条磁道上的簇的数量都是一样多的。也就是说最里面和最外面的磁道的簇的数目是一样的。显然,磁密度越低,数据的安全越有保障。而MBR放在0柱面的,第0个磁道的,第1个簇上面,为了这个关键数据的安全,所以磁道要从最外开始安排。)

但是,光盘的0磁道和磁盘,软盘刚好相反,光盘的0磁道是在最内圈的

尽管扇区是能独立寻址的最小单位,但资源分配的最小单位是簇

所以文件的大小和文件所占用的磁盘空间是不同的。所占用的磁盘空间往往多余文件的大小

硬盘簇的大小设为多少才合适

默认的情况下,在格式化的时侯如果没有指定簇的大小,那么系统会根据分区的大小选择默认的簇值

其实在NTFS文件系统中格式化的时候,可以在"Format"命令后面添加”/a: UnitSize"参数来指定簇的大小,UnitSize表示簇大小的值,NTFS支持512/1024/2048/4096/8192/16K/32K/64KB

在NTFS文件系统中,簇的大小会影响到磁盘文件的排列,设置适当的簇大小可以减少磁盘空间丢失和分区上碎片的数量。如果簇设置过大,会影响到磁盘存储效率;反之如果设置过小,虽然会提高利用效率,但是会产生大量磁盘碎片.

IOPS

一秒内,磁盘进行多少次 I/O 读写。

IOPS (Input/Output Per Second) 即每秒的输入输出量 (或读写次数) ,即指每秒内系统能处理的I/O请求数量。随机读写频繁的应用,如小文件存储等,关注随机读写性能,IOPS是关键衡量指标。可以推算出磁盘的IOPS = 1000ms / (Tseek + Trotation + Transfer),如果忽略数据传输时间,理论上可以计算出随机读写最大的IOPS。常见磁盘的随机读写最大IOPS为: - 7200rpm的磁盘 IOPS = 76 IOPS - 10000rpm的磁盘IOPS = 111 IOPS - 15000rpm的磁盘IOPS = 166 IOPS

吞吐量

吞吐量 (Throughput) ,指单位时间内可以成功传输的数据数量。顺序读写频繁的应用,如视频点播,关注连续读写性能、数据吞吐量是关键衡量指标。它主要取决于磁盘阵列的架构,通道的大小以及磁盘的个数。不同的磁盘阵列存在不同的架构,但他们都有自己的内部带宽,一般情况下,内部带宽都设计足够充足,不会存在瓶颈。磁盘阵列与服务器之间的数据通道对吞吐量影响很大,比如一个2Gbps的光纤通道,其所能支撑的最大流量仅为250MB/s。最后,当前面的瓶颈都不再存在时,硬盘越多的情况下吞吐量越大。

虽然15000rpm的磁盘计算出的理论最大IOPS仅为166,但在实际运行环境中,实际磁盘的IOPS往往能够突破200甚至更高。这其实就是在系统调用过程中,操作系统进行了一系列的优化。

那么操作系统是如何操作硬盘的呢?类似于网络的分层结构,下图显示了Linux系统中对于磁盘的一次读请求在核心空间中所要经历的层次模型。从图中看出: 对于磁盘的一次读请求,首先经过虚拟文件系统层 (VFS Layer) ,其次是具体的文件系统层 (例如Ext2) ,接下来是Cache层 (Page Cache Layer) 、通用块层 (Generic Block Layer) 、I/O调度层 (I/O Scheduler Layer) 、块设备驱动层 (Block Device Driver Layer) ,最后是物理块设备层 (Block Device Layer) 。

簇 cluster

A typical size is 8 sectors to the cluster

块和簇 由于扇区的空间比较小且数目众多,在寻址时比较困难,所以操作系统就将多个的扇区组合在一起,形成一个更大的单位,再对这个单位进行整体的操作。这个单位,在Windows下,FAT,FAT32和NTFS 文件系统中叫做簇(cluster);在Linux下如Ext4等文件系统中叫做块(block)。每个簇或者块可以包括2、4、8、16、32、64…2的n次方个扇区。 ———————————————— 版权声明:本文为CSDN博主「晚安丶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/william_munch/article/details/84347788

https://www.cnblogs.com/liwei0526vip/p/4998614.html