存储相关名词概念介绍

存储单元

扇区(Sector)

扇区是存储介质上的最小可寻址单位,通常是硬盘或固态硬盘(SSD)上的物理存储单位。一个扇区的大小通常是512字节或4KB,但在现代硬盘和SSD中,也出现了更大的扇区大小。

块(Block)

块是文件系统中的逻辑单位,通常由多个扇区组成。文件系统以块为单位来管理存储空间,执行读取和写入操作。块的大小可以根据文件系统的要求而变化,但通常是扇区大小的整数倍。

条带(Stripe)

条带是一种数据布局方式,通常用于RAID(独立冗余磁盘阵列)等存储系统中。在条带化存储中,数据被划分为连续的块,并分布在多个物理磁盘上。这样做可以提高数据的读写性能和冗余容错能力。

段(Segment)

一个条带所占用的单块磁盘上的区域,称为一个段。段是固态硬盘(SSD)中的一个概念,它是由多个块组成的较大单元,用于管理闪存芯片的擦除和写入操作。SSD通常将数据以段为单位进行操作,而不是以块或扇区为单位,以提高性能和延长SSD的寿命。

条带长度(Stripe Length)

条带长度是指在RAID中使用的磁盘数量,也称为RAID级别中的数据盘数量。条带长度决定了RAID系统的容错能力和可用存储空间大小,不同的RAID级别有不同的条带深度要求和性能特点。

条带深度(Stripe Depth)

条带深度是指RAID中一个条带中所包含的数据块的数量。条带深度的选择会影响RAID系统的性能和容错能力,较长的条带长度可以提高顺序读取操作的性能,但可能降低小块随机读取操作的性能。

示例

20240423204703

如图所示的5个竖条,分别代表5个磁盘。然后在磁盘相同偏移处横向逻辑分割,形成 Stripe。一个 Stripe 横跨过的扇区或块的个数或字节容量,就是条带长度,即 Stripe Length。而一个 Stripe所占用的单块磁盘上的区域,称为一个Segment。一个Segment 中所包含的 data Block 或者扇区的个数或者字节容量,称为 Stripe Depth。Data Block 可以是N倍个扇区大小的容量,应该可调,或者不可调,由控制器而定。

与IO相关概念

读/写IO

读 IO 就是发指令从磁盘读取某段序号连续的扇区的内容。指令一般是通知磁盘开始扇区位置,然后给出需要从这个初始扇区往后读取的连续扇区个数,同时给出动作是读还是写。磁盘收到这条指令就会按照指令的要求读或者写数据。控制器发出这种指令加数据并得到对方回执的过程就是一次 IO 读或 IO 写。

注意:一个IO所要提取的扇区段一定是连续的,如果想提取或写人两段不连续的扇区段,只能将它们放入两个IO中分别执行,这也就是为何随机 IO 对设备的IOPS 指标要求较高的原因。

大/小块IO

指控制器的指令中给出的连续读取扇区数目的多少。如果数目很大,如128、64等,就应该算是大块 IO;如果很小,比如1、4、8等,就应该算是小块 IO。大块和小块之间没有明确的界限。

连续/随机 IO

连续和随机是指本次IO给出的初始扇区地址和上一次IO的结束扇区地址是不是完全连续的或者相隔不多的。如果是,则本次 IO 应该算是一个连续 IO;如果相差太大,则算一次随机 IO。连续 IO 因为本次初始扇区和上次结束扇区相隔很近,则磁头几乎不用换道或换道时间极短。如果相差太大,则磁头需要很长的换道时间。如果随机 IO 很多,会导致磁头不停换道,效率大大降低。

顺序/并发IO

磁盘控制器如果可以同时对一个 RAID 系统中的多块磁盘同时发送 IO 指令(当然这里的同时是宏观的概念,如果所有磁盘都在一个总线或者环路上,则这里的同时就是指向一块磁盘发送一条指令后不必等待它回应,接着向另一块磁盘发送 I0 指令),并且这些最底层的 IO数据包含了文件系统级下发的多个 IO 的数据,则为并发 IO。如果这些直接发向磁盘的 IO 只包含了文件系统下发的一个 IO 的数据,则此时为顺序 IO,即控制器缓存中的文件系统下发的 IO 队列,只能一个一个来。并发 IO 模式在特定的条件下可以很大程度地提高效率和速度。

持续/间断IO

持续不断地发送或者接受 IO 请求数据流,这种情况为持续 IO;IO 数据流时断时续则为间断 IO。

稳定/突发IO

某存储设备或者某程序在一段时间内接收或者发送的 IOPS 以及 Throughput(吞吐量)保持相对稳定和恒定,则称为稳定IO;如果单位时间的 IOPS 或者 Throughput 突然猛增,则为突发IO。

实/虚 IO

某 IO 请求中包含对应实际数据地址的,比如磁盘 LBA 地址,或者文件偏移量,请求读或者写实际文件或者磁盘扇区数据的,称为实IO;而应用程序针对文件元数据操作的(在文件系统层以上没有文件主体数据操作),或者针对磁盘发送的非实体数据IO 请求,比如 Repont LUN、SCSISense Request等控制性 IO,称为虚 IO。

IO并发几率

单盘,IO 并发几率为0,因为一块磁盘同时只可以进行一次IO。对于RAID 0,在2块盘情况下,条带深度比较大的时候(条带太小不能并发 IO),并发两个 IO 的几率为 1/2。其他情况请自行运算。

IOPS

完成一次 IO 所用的时间=寻道时间+旋转延迟时间+数据传输时间,IOPS=IO 并发系数/(寻道时间+旋转延迟时间+数据传输时间)。由于寻道时间相对于传输时间要大几个数量级,所以影响 IOPS 的关键因素就是降低寻道时间。在连续 IO 的情况下,寻道时间很短,仅在换磁道时候需要寻道。在这个前提下,传输时间越少,IOPS 就越高。

每秒IO吞吐量

显然,每秒 IO 吞吐量=IOPSx平均 IO SIZE。IO SIZE 越大,IOPS 越高,每秒 IO 吞吐量就越高。设磁头每秒读写数据速度为 V,V 为定值。则 IOPS=IO 并发系数/(寻道时间+旋转延迟时间+IO SIZE/V)。代入得每秒IO 吞吐量=IO 并发系数xIO SIZExV/(Vx寻道时间+Vx旋转延迟时间+IO SIZE)。可以看出影响每秒 IO 吞吐量的最大因素就是 IO SIZE 和寻道时间以及旋转延迟时间。IO SIZE 越大,寻道时间越小,吞吐量越高。相比能显著影响 IOPS 的因素只有一个,就是寻道时间。

posted @ 2024-04-24 09:30  岸南  阅读(86)  评论(0编辑  收藏  举报