一、概述

磁盘接口

Linux磁盘接口一般分为两种:

  • 并行:IDE(133MB/s)、SCSI(640MB/s); 设备名称hd*
  • 串口:SATA(6Gbp/s) 、SAS(6Gp/s) 、USB(480MB/s); 设备名称sd*

串口的传输速度比并口的更块,为什么?

单个磁盘来说,由一个个的同心圆组成,一个同心圆就是一个磁道,每个磁道由多个扇区组成,每个扇区之间由没有磁性的间隙分隔。扇区有磁性物质,支持读和写操作。

盘面

硬盘一般会有一个或多个盘片,每个盘片可以有两个面(Side),即第1个盘片的正面称为0面,反面称为1面;第2个盘片的正面称为2面,反面称为3面…依次类推。每个盘面对应一个磁头(head)用于读写数据。第一个盘面的正面的磁头称为0磁头,背面称为1磁头;第二个盘片正面的磁头称为2磁头,背面称为3磁头,以此类推。盘面数和磁头数是相等的。

磁道

每个盘片的每个盘面被划分成多个狭窄的同心圆环,数据就是存储在这样的同心圆环上,我们将这样的圆环称为磁道(Track),每个盘面可以划分多个磁道。关机时磁头停留在硬盘的着陆区(Landing Zone),这个着陆区以前是位于离盘心最近的区域,不存放任何数据。

在每个盘面的最外圈,离盘心最远的地方是“0”磁道,向盘心方向依次增长为1磁道,2磁道,等等。硬盘数据的存放就是从最外圈开始。

扇区

根据硬盘规格的不同,磁道数可以从几百到成千上万不等。每个磁道上可以存储数KB的数据,但计算机并不需要一次读写这么多数据。在这一这基础上,又把每个磁道划分成若干弧段,每段称为一个扇区(Sector)。

每个磁道的扇区数量是一个常量,每个扇区的大小一般是4KB。扇区是磁盘基本的物理单元。

扇区是硬盘上存储的物理单位,每个扇区可存储128×2N次方(N=0,1,2,3)字节的数据。从DOS时代起,每扇区是128×22=512字节,现在已经成了业界不成文的规定。

也就是说即使计算机只需要硬盘上存储的某个字节,也须一次把这个字节所在的扇区中的全部512字节读入内存,再选择所需的那个字节。扇区的编号是从1开始,而不是0。 在硬盘磁道中,扇区号是按照某个间隔跳跃着编排。比如,2号扇区并不是1号扇区后的按顺序的第一个而是第八个,3号扇区又是2号扇区后的按顺序的第八个,依此类推,这个“八”称为交叉因子。( 数据读取经常需要按顺序读取一系列相邻的扇区(逻辑数据相邻)。如对磁道扇区按物理顺序进行编号,很有可能出现当磁头读取完第一个扇区后,由于盘片转速过快来不及读取下一个扇区,(要知道物理相邻扇区位置距离是极小的),必须等待转完一圈,这极大浪费了时间。所以就用交叉来解决这个问题。)

柱面

柱面其实是我们抽象出来的一个逻辑概念,前面说过,离盘心最远的磁道为0磁道,依此往里为1磁道,2磁道,3磁道....,不同面上相同磁道编号则组成了一个圆柱面,即所称的柱面(Cylinder)。

硬盘数据的读写是按柱面进行,即磁头读写数据时首先在同一柱面内从0磁头开始进行操作,依次向下在同一柱面的不同盘面(即磁头上)进行操作,只有在同一柱面所有的磁头全部读写完毕后磁头才转移到下一柱面,因为选取磁头只需通过电子切换即可,而选取柱面则必须通过机械切换。电子切换比从在机械上磁头向邻近磁道移动快得多。因此,数据的读写按柱面进行,而不按盘面进行。

将物理相邻的若干个扇区称为了一个块。操作系统读写磁盘的基本单位是扇区,而文件系统的基本单位是块(Cluster),存储系统都采用逻辑单元块来表示基本的数据单位,这样可以提高存储的效率。 块越大存储性能越好,但空间浪费严重。块越小性能相对越低,但空间利用率高。NTFS格式的文件系统簇的大小为4K。

二、磁盘性能因素

而磁盘的读写有3个步骤,即寻道时间 + 旋转延迟 + 传输时间

寻道时间Tseek

寻道时间,其实就是磁臂移动到指定磁道所需要的时间,目前磁盘的平均寻道时间一般在3-15ms

寻道时间=启动磁臂的时间+常数*所需移动的磁道数

旋转延迟Trotation

旋转延迟指的是把扇区移动到磁头下面的时间(取决于磁盘转速)

计算方式:7200 rpm的磁盘平均旋转延迟大约为60*1000/7200/2 = 4.17ms

传输时间Ttransfer

传输时间指的是从磁盘读出或将数据写入磁盘的时间

三、磁盘性能指标

IOPS

IOPS表示存储每秒传输IO的数量 IOPS通常对于小I/O,且传输I/O的数量比较大的情况下,是一个最主要的衡量指标,关注随机读写性能

而理论上磁盘的最大IOPS,即IOPS = 1000 ms/ (Tseek + Troatation)

例如7200转/分钟的 IOPS = 1000 / (3 + 60000/7200/2) = 140

吞吐量

Throughput吞吐量则表示每秒数据的传输总量 Throughput吞吐量衡量对于大I/O,特别是传输一定数据的时候最小化耗时非常有用,关注连续读写性能

每秒 I/O 吞吐量= IOPS* 平均 I/O SIZE

随机读写频繁的应用,如小文件存储(图片)、OLTP数据库、邮件服务器 顺序读写频繁的应用,传输大量连续数据,如电视台的视频编辑,视频点播VOD

四、磁盘性能优化

上面硬盘读写数据所分的三部分时间不难看出,大部分参数是和硬件相关的,操作系统无力优化。只有所需移动的磁道数是可以通过操作系统来进行控制的,所以减少所需移动的磁道数是减少整个硬盘的读写时间的唯一办法,可以通过调度算法和其他一些手动来优化。

调度算法

优化寻址操作,内核不会一旦接收到I/O请求后,就按照请求的次序发起块I/O请求。为此Linux实现了几种I/O调度算法,算法基本思想就是通过合并和排序I/O请求队列中的请求,以此大大降低所需的磁盘寻道时间.

常见的I/O调度算法包括Noop调度算法(No Operation)、CFQ(完全公正排队I/O调度算法)、DeadLine(截止时间调度算法)、AS预测调度算法等.

其他手段

局部原理

所谓的局部性原理分为时间和空间上的。由于程序是顺序执行的,因此当前数据段附近的数据有可能在接下来的时间被访问到。这就是所谓的空间局部性。而程序中还存在着循环,因此当前被访问的数据有可能在短时间内被再次访问,这就是所谓的时间局部性原理。

提前读(Read-Ahead)

提前读也被称为预读。根据磁盘原理我们不难看出,在磁盘读取数据的过程中,真正读取数据的时间只占了很小一部分,而大部分时间花在了旋转延迟和寻道时间上,因此根据空间局部性原理,SQL Server每次读取数据的时间不仅仅读取所需要的数据,还将所请求数据附近的数据进行读取。这在SQL Server中被称为预读。SQL Server通过预读可以有效的减少IO请求。

延迟写(Delayed write)

同样,根据时间局部性原理,最近被访问的数据有可能再次被访问,因此当数据更改之后不马上写回磁盘,而是继续放在内存中,以备接下来的请求读取或者修改,是减少磁盘IO的另一个有效手段,在SQL Server中,实现延迟写是buffer pool,当一个修改请求被commit之后,并不会立刻写回磁盘,而是将修改的页标记为“脏”,然后根据某种机制通过checkpoint或lazy writer写回磁盘,关于checkpoint和lazy writer的原理

五、从虚拟内存的角度理解磁盘和主存的数据交换

从虚拟内存的角度来说,虚拟页和磁盘中的块映射起来

当虚拟页被加载到内存的物理页的时候,就由DMA把虚拟内存对应的磁盘块加载到内存的对应地址的物理页中;

当物理页写回到磁盘时,也是由DMA把数据传输到磁盘控制器,由磁盘控制器写到磁盘块对应的扇区。

内存和磁盘交换数据的时候实际采用了内存的缓冲区来加速磁盘的访问速度,有了内存缓冲区,CPU要访问某个磁盘文件的某些数据,只需要提供该数据所处的磁盘块号,就可以从内存缓冲区寻找是否已经缓存了该磁盘块的内容

六、参考

linux学习之硬盘的存储原理和内部架构 - 云+社区 - 腾讯云​cloud.tencent.com磁盘IO那些事​tech.meituan.com

linux物理硬盘和sd的对应关系_计算机硬盘相关推荐

  1. 电脑我的计算机硬盘刷新慢,事实:如果计算机硬盘的读取速度变得很慢该怎么办?...

    1.磁盘碎片过多.硬盘碎片过多会导致硬盘的读写速度太慢.我们可以通过去除硬盘碎片来优化硬盘的速度.我们需要做的第一步是右键单击计算机的系统磁盘,然后单击"属性".第二步是在属性的常 ...

  2. linux物理硬盘和sd的对应关系_Linux 学习 --- 磁盘分区/关系+挂载+表示方法

    对hda1的解释: hd:IDE硬盘.如果是SCSI硬盘,则为sd,这个只能记住,没有更好的办法. a:: 第一块硬盘.如果是第二块硬盘,则为b,依此类推c,d-- 1: 主分区.其中1,2,3,4都 ...

  3. linux物理硬盘和sd的对应关系_Linux物理存储结构以及磁盘划分

    在上一篇讲解mount命令的时候,有提到过挂载光驱或U盘,那么我们如何知道光驱就是在/dev/cdrom呢?在Linux系统中一切都是文件,硬件设备也不例外.既然是文件,就必须有文件名称.系统内核中的 ...

  4. 电脑硬盘是干什么用的_电脑硬盘位不够用?有了它就不担心、奥睿科硬盘柜体验...

    许多新装机的用户可能会有很深刻的体会,新上市的机箱对机械硬盘越来越不友好,机械硬盘位越来越少,有的甚至直接取消了,不再对它支持.都是因为固态硬盘的价格不断下跌,并且其读写速度要快得多,所以很有要取代机 ...

  5. 服务器pci-e硬盘,PCI-E固态硬盘在客户端的机会_希捷硬盘_服务器评测与技术-中关村在线...

    随着客户端不断轻巧.便捷,人们对固态硬盘的体积也要求越来越高,更小.更薄.更敏捷的客户端对于PCI-E固态硬盘的诉求也变得越来越迫切.从原来的2.5英寸.1.8英寸再到mSATA接口,通过迷你版PCI ...

  6. 计算机显示硬盘故障是怎么回事,如果计算机硬盘出现故障怎么办

    第一个: 系统无法识别硬盘 首先,让我谈一个常见的故障问题,即无法启动硬盘,并且无法从A盘进入C盘. cmos中的自动监视功能无法找到硬盘的存在. 这种故障将出现在连接电缆中. 或在IDE端口上,硬盘 ...

  7. 计算机硬盘磁道损坏有什么症状,计算机硬盘扇区损坏,读取数据时出现死机现象的解决方法...

    长时间使用计算机硬盘时,许多用户遇到了坏扇区,这将大大降低硬盘的使用寿命. 读取坏扇区数据时,在严重的情况下会冻结甚至崩溃. 如果计算机的硬盘上有坏道,则必须修复逻辑坏道. 如何修复计算机硬盘上的坏道 ...

  8. 计算机硬盘加密的原理,一种计算机硬盘加密方法及装置

    主权项: 权利要求书\r\r\r\r\n1.一种计算机硬盘加密方法及装置,其特征在于:在常规的计\r\r\r\r\n算机基础上,增加了加密芯片而组成的加密电路,对进出硬盘的数\r\r\r\r\n据流选 ...

  9. 在哪里能看到计算机缓存大小,如何查看硬盘缓存信息?如何查看计算机硬盘缓存大小的插图...

    最近,一位网友"飞飞"问小编一个与计算机硬盘有关的问题:您如何看待硬盘缓存?硬盘缓存容量越大越好吗?由于通常在Windows系统的铭牌和硬盘表面上直接看不到硬盘缓存的大小,因此如何 ...

最新文章

  1. Maven的pom文件那些事
  2. labview连接mysql数据库_labview使用DSN与数据库的连接包括access,mysql
  3. 主存储器与CPU的连接
  4. javaSE各阶段练习题--数据类型运算符
  5. 修改使用计算机的名称,Windows 10中修改计算机名称的方法,你知道几种?
  6. 第一节 7算述运算符
  7. raspberry pi_在Raspberry Pi上使用Mathematica进行高级数学运算
  8. [Swift]LeetCode212. 单词搜索 II | Word Search II
  9. 要想完全放弃Windows使用Linux需要多少勇气?
  10. DMTF云计算开放管理标准内容
  11. php中的资源是什么意思,PHP 和 COM
  12. 你知道微服务如何拆分,能解决哪些问题?
  13. Centos8.0: 环境搭建,看这里就够了。
  14. 双击.bat文件闪退
  15. 如何抓包分析BLE 空口报文(GAP + GATT + LESC procedure)?
  16. IT技术相关学习网站推荐
  17. linux 查看服务器资源(cpu型号、cpu数量、内存大小、磁盘空间)
  18. 浅谈TCP半连接攻击与全连接攻击
  19. JDBC Java对数据库增删改查(完整案例)
  20. 使用C#编写一个计时器-.NET教程,C#语言

热门文章

  1. SpringSecurity简单应用(二)
  2. magento二次开发的基本步骤分享
  3. asp.net发送邮件
  4. 云服务器上MySQL安装教程(Windows)
  5. IOS中的枚举的写法...
  6. java开发环境及数据类型实验_实验项目1 Java开发环境与语言基础
  7. android获取本地图片后缀,Android向图片文件添加扩展信息EXIF如地点,时间,人物等...
  8. 信息收集——Office钓鱼
  9. java射击游戏_Java Swing打猎射击游戏源码
  10. python asyncio和celery对比_如何将Celery与asyncio结合? - python