存储基础概要

一、CPU和磁盘的通信

1.1、连找发

1.1.1 连

总线提供连的功能

1.1.2 找

IO端口:IO设备在启动时都要向内存中映射一个或者多个地址,这个地址是IO端口,有8位长。
IO端口的数据全部被北桥芯片重定向到总线上实际的设备上。
CPU就可通过IO端口找到实际设备来发生指令。

1.1.3 发

CPU将IO地址放到系统总线上,北桥接受后会等待CPU发送第一个针对外设的指令。

1.3.1 CPU发送的指令

第一条:指令中包含了表示当前指令是读还是写,而且还包含了其他选项,比如操作完成时是否用中断来通知CPU处理,是否启用磁盘缓存。
第二条:指明应当读取的磁盘块号(LBA)
第三条:给出一个内存地址用来存放读取出来的内容

这三条指令被北桥控制器依次发给IO总线上磁盘控制器来执行。

1.2 磁盘控制器的指令

磁盘控制器对磁盘的指令形成了两大体系:ATA指令集和SCSI指令集。
SCSI指令集比ATA指令集高效,所以广泛用于服务器和磁盘阵列中。

二、磁盘原理

交叉因子可以使磁盘的磁头有更多的反应时间。

三、 影响磁盘的性能因素

3.1 转速

转速是影响硬盘连续IO时吞吐量性能的首要因素。读写数据时磁盘不动全靠盘片的转动来讲将对应扇区的数据感应给磁头。

3.2 寻道速度

寻道速度是影响磁盘随机IO性能的首要因素。随机IO情况下磁头臂需要频繁更换磁道,用于数据传输的时间相对于换道消耗的时间来说是很少的。

3.3 单碟容量

单碟容量越高,证明相同空间内的数据两越大,也就是数据密度越大。在相同转速和寻道速度条件下,硬盘密度越高性能越好。

3.4 接口速度

接口速度是影响硬盘性能的最不重要的因素。目前接口速度在理论上都已经满足磁盘所能达到的最高外部传输带宽。

四、硬盘接口技术

硬盘提供的物理接口:
1、用于ATA指令系统的IDE接口。
2、用于ATA指令系统的SATA接口。
3、用于SCSI指令系统的并行SCSI接口。
4、用于SCSI指令系统的串行SCSI(SAS)接口。
5、用于SCSI指令系统的IBM专用串行SCSI接口(SSA)
6、用于SCSI指令系统的并且承载于FabreChannel协议的串行FC接口(FCP)。

4.1 IDE硬盘接口

IDE(Integrated Drive Electronics),电子集成驱动器,本意是把控制电路和盘片、磁头等放在一个容器中的硬盘驱动器。

4.2 IDE数据传输模式

4.2.1 PIO模式(Programming Input/Output model)

一种通过CPU执行I/O端口指令来进行数据读写的数据交换模式。由于CPU占用率很高和传输速率低下,这种模式很快被淘汰。

4.2.2 DMA模式(Direct Memory Access)

直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式。
PIO模式下硬盘和内存之间的数据传输是由CPU控制的,而在DMA模式下,CPU只须向DMA控制器下达指令,让DMA控制器来处理数据的传送。
PIO和DMA两种模式在传输速度上差异并不明显,两者所能达到的最大速率也只有16.6MB/s。DMA模式可分为Single-Word DMA(单字节DMA)和Multi-Word DMA(多字节DMA)两种。

4.2.3 Ultra DMA模式(Ultra Direct Memory Access)

简写为UDMA,含义是高级直接内存访问。UDMA模式采用16-bit Multi-Word DMA(16位多字节DMA)模式为基准,可以理解为是DMA模式的增强版本。UDMA模式在DMA模式的优点的基础上又增加了CRC校验,提高数据传输的准确性。UDMA运用了Double Data Rate技术,数据传输速度有很大的提高。

4.2 SATA硬盘接口

SATA全称Serial ATA,即串行传输ATA。
SATA技术原理:采用连续串行的方式来实现数据传输从而获得较高的传输速率。

4.3 SCSI硬盘接口

SCSI于ATA是目前现行的两大主机与外设通信的协议规范,他们拥有各自的物理接口定义。
ATA协议对应的是IDE接口,SCSI协议对应的是SCSI接口。
SCIS(Small Computer System Interface),小型计算机系统接口,是一种较为特殊的接口总线,具备与多种类型的外设进行通信的能力,比如硬盘、CD-ROM、磁带机和扫描仪等。

SCSI采用ASPI(高级SCSI编程接口)的标准软件接口使驱动器和计算机内部安装的SCSI适配器进行通信。SCSI接口是一种广泛应用于小型机上的高速数据传输技术。
SCSI接口为存储产品提供了强大、灵活的连接方式和很高的性能,可以有8个到16个的SCSI设备连接在一个SCSI通道上,其缺点是价格昂贵。
SCSI接口的设备一般需要配个价格不菲的SCSI卡一起使用(如果主板上已经集成了SCSI控制器,则不需要额外的适配器)。
在系统中应用SCSI必须要有专门的SCSI控制器,也就是一块SCSI控制卡,才能支持SCSI设备。在SCSI控制器上有一个相当于CPU的芯片,它对SCSI设备进行控制,能处理大部分工作,减小CPU占有率。

五、SCSI协议

5.1 SCSI协议的链路层

SCSI协议利用CRC校验码来校验每个指令或数据的帧。如果校验错误,那么会丢弃这个帧,发送方便会重传这个帧。

5.2 SCSI协议的网络层

5.2.1 SCSI 总线编址机制

问:面对总线或者交换架构下的多个节点,各个节点之间是如何区分对方的?
答:SCSI协议利用了一个叫SCSI ID的概念来区分每个节点。
由于总线是一种共享的线路,总线上的每个节点都会同时感知到这条线路上的电位信号,所以同一时刻只能由一个节点向这条总线上放数据,也就是给这条线路上加高低电位。其他每个节点都能感知到这个电位的增降,但是只有接受方节点才会将感知到的电位增降信号保存到自己的缓存。

5.2.2 台式机主板接入scsi磁盘

普通台式机主板一般不集成SCSI控制器,如果向接入SCSI磁盘需要增加SCSI卡。
SCSI卡一端接入主机的PCI总线,另一端用一个SCSI控制器接入SCSI总线。卡上有自己的CPU,通过执行ROM中的代码来控制整个SCSI卡的工作。
SCSI卡将SCSI总线上的所有设备经过PCI总线传递给内存中运行着的SCSI卡的驱动程序,这样操作系统便会知道SCSI总线上的所有设备。

5.2.3 SCSI 几个阶段

空闲阶段:总线最开始处于的阶段,没有节点想要通信。BSY和SEL两条控制信号线状态为False,此时任何节点都可以发起通信。
仲裁阶段:节点是通过在8条或者16条数据总线上提升自己对应的那条线路的电位来申请总线的使用权的。提升自己ID对应线路的电位的同时,这个节点也提升BSY线路的电位。每个ID号对应着8或16条线中的一条。SCSI设备上都有跳线用来设置这个设备的ID号。跳线设置好之后,这个设备每次申请仲裁都只会在SCSI接口的8或16条数据线中的对应它自身ID的那条线提升电位。如果同时有多个节点提升了各自线路上的电位,那么所有发起申请的节点都判断总线上的这些信号优先级,如果自己是最高就保留,低的就撤销。最高优先级获得总线使用权并将SEL信号线提升电位。,
选择阶段:仲裁阶段后,获胜的节点会把BSY和SEL信号线置位,然后将8或16条数据总线上对应它自身ID的线路和对应它要通信的目标ID的线路的电位提升,使得能感知自己的线路来的信号。

5.3 SCSI协议的传输层

发起方在获得总线仲裁之后,会发送一个SCSI Command写命令帧,其中包含对应的LUN号(LUN的全称是Logical Unit Number,也就是逻辑单元号)以及LBA逻辑区块地址(Logical Block Address)地址段。接收端接收后,就会准备接收数据,准备好后会向发起方发生一个XFER_RDY帧之后,向发起方表示已经做好准备。
发起方收到XFER_RDY帧之后会立刻发送数据。每发送一帧数据,接收方就回送一个XFER_RDY帧,表示上一帧成功收到并且无错误,可以发送下一帧。
接收方发送一个RESPONSE帧来表示这条SCSI命令执行完毕。

六、磁盘控制器

磁盘控制器的作用:参与底层的总线初始化、仲裁等过程以及指令传输过程、指令传输状态机、重传、ACK等,将这些太过底层的机制过滤掉,从而向驱动程序提供一种简洁的接口。
驱动程序只要将要读写的设备好、起始地址等信息,即指令描述块(Command Description Block,CDB)传递给控制器即可,控制器接收指令并作相应动作,将执行后的结果返回给驱动程序。

七、驱动控制电路

磁盘驱动器控制电路位于磁盘驱动器上,它专门负责直接驱动磁头臂做运动来读写数据。

整个结构是CPU通过主板上的导线发送SCSI或ATA指令(CDB)给同样处于主板上的磁盘控制器,磁盘控制器继而通过线缆将指令发送给磁盘驱动器并维护底层指令交互状态机,由磁盘驱动器解析收到的指令从而根据指令的要求来控制磁头臂。
SCSI或者ATA指令CDB是有OS内核的磁盘控制器驱动程序生成并发送的。CPU通过执行磁盘驱动器驱动程序,生产指令发送给磁盘控制器,控制器收到这些CDB后会做一定程度的翻译映射工作,生成最底层的磁盘可接收的纯SCSI指令,然后通过底层的物理操作,比如总线仲裁,然后编码,再在线缆上将指令发送给对应的磁盘。

八、磁盘控制器驱动程序

刚开机的时候CPU必须执行磁盘控制器的驱动程序才能于控制器交互,才能读写数据。所以系统BIOS中存放了初始化系统所必须的基本代码。系统BIOS初始化过程中有一步是去发现并执行磁盘控制器的Optional ROM(该ROM被保存在磁盘通道控制器中或者单独的Flash芯片内),该ROM内包含了该控制器的最原始的、可在主BIOS下执行的驱动程序,主BIOS通过执行驱动程序使得CPU可以发送对应的指令,提取磁盘的0磁道的第一个扇区中的代码载入内存执行从而加载OS。

九、内部传输速率

磁盘的内部传输速率指的是磁头读写磁盘时的最高速率。这个速率不包括寻道以及等待扇区旋转到磁头下所耗费时间的影响。

十、外部传输速率。

磁头从盘片上将数据读出,然后存放到硬盘驱动器电路板上的缓存芯片内,再将数据从缓存内取出,通过外部接口传送给主板上的硬盘控制器。从外部接口传送给硬盘控制器时的传输速率就是硬盘的外部传输速率。

十一、 串行并行传输

并行有技术困难。电路高速震荡的时候数据线之间会产生很大的干扰,所以传输频率不能太高。串行传输干扰小传输频率可以很高。

十二、 磁盘的IOPS和传输带宽

12.1 IOPS

磁盘的IOPS是磁盘每秒进行多少次IO。
对于磁盘来说,每次IO就是指一次SCSI指令交互回合。一个回合中可能包含了若干SCSI指令,而这个回合里只能完成一次IO。
写10 240个1KB的文件和写一个10MB的文件虽然总的大小都为10MB,但是前者要做好几万或十几万IO才能完成,而后者如果这个文件在磁盘上是连续存放的那么只需要几十个IO就可以完成。前者需要较高的IOPS磁盘来提速。后者如果用较高的IOPS磁盘也不会有提升,需要用较大传输带宽的硬盘才能体现优势。

12.2 传输带宽

传输带宽指的是硬盘或设备在传输数据的时候数据流的速度。
如果写入10 240个1KB的文件需要10s,那么传输带宽为1MB/s,而写入10MB的文件用了0.1s,传输带宽为100MB/s/

12.3 总结

具有较高IOPS的硬盘在传输小块不连续的数据具有优势,具有较高带宽规格的硬盘在传输大块连续数据时具有优势。

十三、RAID磁盘阵列

13.1 RAID简介

RAID ( Redundant Array of Independent Disks )即独立磁盘冗余阵列,简称为「磁盘阵列」,其实就是用多个独立的磁盘组成在一起形成一个大的磁盘系统,从而实现比单块磁盘更好的存储性能和更高的可靠性。

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

13.2 IO相关概念

13.2.1 读/写IO

发指令读取或写入从磁盘某段序号连续的扇区的内容。控制器发出这种指令加数据并得到对方回执的过程就是一次IO的读或写。一个IO所要提取的扇区段一定是连续的,如果不连续,只能放入两个IO分别执行。

13.2.2 大/小块IO

指控制器的指令中给出的连续读取扇区数目的多少。如果数目很大(128、64)算大块,数目很小(1、4、8)算小块。大块小块之间没有明确的界限。

13.2.3 连续/随机IO

连续和随机是指本次IO给出的初始扇区地址和上一次IO的结束扇区地址是不是完全连续或者相隔不多。

13.2.4 顺序/并发IO

磁盘控制器并发的给多个磁盘发指令不等待回应是并发IO。等回应的是顺序。

13.2.5 持续/间断IO

持续不断地发送或者接受IO请求数据流为持续IO。IO数据流时断时续为间断IO。

13.2.6 稳定/突发IO

一段时间内的IOPS和Throughput(吞吐量)是否稳定。
磁盘的吞吐量也就是每秒磁盘 I/O 的流量,即磁盘写入加上读出的数据的大小。

13.2.7 实/虚IO

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

13.2.8 IO并发几率

单盘IO并发几率为0。RAID0在2块盘情况条带深度达到的时候并发两个IO几率为1/2.

13.2.9 IOPS

13.2.10 每秒IO吞吐量

每秒IO吞吐量=IOPS * 平均IO SIZE

13.2 RAID0

RAID0 是一种非常简单的的方式,它将多块磁盘组合在一起形成一个大容量的存储。当我们要写数据的时候,会将数据分为N份,以独立的方式实现N块磁盘的读写,那么这N份数据会同时并发的写到磁盘中,因此执行性能非常的高。

RAID0的问题: 不提供数据校验或冗余备份,因此一旦某块磁盘坏了数据就丢了。

13.3 RAID1

RAID1 是磁盘阵列中单位成本最高的一种方式。因为它的原理是在往磁盘写数据的时候,将同一份数据无差别的写两份到磁盘,分别写到工作磁盘和镜像磁盘,那么它的实际空间使用率只有50%了,两块磁盘当做一块用.
RAID1其实与RAID0效果刚好相反。RAID1 这种写双份的做法,就给数据做了一个冗余备份。这样的话,任何一块磁盘损坏了,都可以再基于另外一块磁盘去恢复数据,数据的可靠性非常强,但性能就没那么好了。

13.4 RAID2

RAID2 称为纠错海明码磁盘阵列,其设计思想是利用海明码实现数据校验冗余。海明码的数据冗余开销太大, RAID2 数据重建非常耗时。由于这些显著的缺陷,再加上大部分磁盘驱动器本身都具备了纠错功能,因此 RAID2 在实际中很少应用,没有形成商业产品,目前主流存储磁盘阵列均不提供 RAID2 支持。

13.5 RAID3

RAID3的每个条带设计为文件系统块的大小
将数据按照RAID0的形式,分成多份同时写入多块磁盘,但是还会另外再留出一块磁盘用于写奇偶校验码。RAID3 至少需要三块磁盘,不同磁盘上同一带区的数据作 XOR 校验,校验值写入校验盘中。RAID 3 使用专门的校验盘,所以校验盘成为瓶颈、校验盘压力很大、往往校验盘最先坏。读性能高、连续写性能高、随机写性能差,最少 3 个盘、有效容量 N-1、允许坏 1 个盘。出现错误不能判断是哪一位,更不能修正错误。

13.6 RAID4

RAID4 提供了非常好的读性能,但单一的校验盘往往成为系统性能的瓶颈。对于写操作,RAID4 只能一个磁盘一个磁盘地写,并且还要写入校验数据,因此写性能比较差。而且随着成员磁盘数量的增加,校验盘的系统瓶颈将更加突出。正是如上这些限制和不足,所以不推荐 RAID4 在实际应用。

13.7 RAID5

整条写、重构写、读改写。
RAID5模式对RAID3进行改进,把校验信息分布到各个磁盘上。例如,总共有N块磁盘,那么会将要写入的数据分成N份,并发的写入到N块磁盘中,同时还将数据的校验码信息也写入到这N块磁盘中(数据与对应的校验码信息必须得分开存储在不同的磁盘上)。一旦某一块磁盘损坏了,就可以用剩下的数据和对应的奇偶校验码信息去恢复损坏的数据。
RAID5的方式,最少需要三块磁盘来组建磁盘阵列,允许最多同时坏一块磁盘。如果有两块磁盘同时损坏了,那数据就无法恢复了。
RAID 5与RAID 3相比,RAID 5的连续读写不如RAID 3,因为RAID 3 的条带深度很小,每次IO可以牵动所有的磁盘为之服务。
RAID 5 每次IO一般只使用一块数据盘,先放满一个Segment,再去下一个磁盘的Segment存放,块编号是横向进行。。
新数据校验数据=(老数据 EOR 新数据) EOR 老校验数据。

RAID5底层就实现了并发,任何文件系统的IO都可以实现较高的并发几率,又称盲并发。

13.8 RAID6

RAID6除了每块磁盘上都有同级数据XOR校验区以外,还有针对每个数据块的XOR校验区,这样的话,相当于每个数据块有两个校验保护措施,因此数据的冗余性更高了。
但是RAID6的这种设计也带来了很高的复杂度,虽然数据冗余性好,读取的效率也比较高,但是写数据的性能就很差。因此RAID6在实际环境中应用的比较少。
RAID6可以同时坏两块盘。

十四、 Fibre Channel协议

14.1 Fibre Channel简介

中文名为网状通道。FC协议的物理层到传输层的逻辑,大部分运行在FC适配卡的芯片中,只有小部分关于上层API的逻辑运行与操作系统FC卡驱动程序中,这样就使FC协议的速度和效率都较TCP/IP协议高。这么做肯定要增加成本,但是FC网络本来就不是为大众设计的,增加成本来提高速度和效率是值得的。

14.2 FC物理层

底层使用同步串行传输方式,传输编码方式采用NMb编码方式保证传输过程中的电直流平衡、时钟恢复和纠错等特性。FC协议集中物理层的电气子层名为FC0,编码子层名为FC1.

14.3 FC链路层

14.3.1 控制字

FC协议定义了一系列帧控制策略及对应的字符。这些控制字符不是ASCII码,二十单独定义了一套专门用于FC协议的字符集,称为“有序集”。其中每个控制字符其实是由4个8位字节组成的,称为一个字(word),而每个控制字开头的一个字节总是经过8 10b编码之后的0011111010(左旋)或者1100000101(右旋)。左右旋是指1和0对调。编码电路可以根据上一个10位中所包含的1的个数来选择下一个10位中1的个数。如果上一个1的个数比0的个数少,那么下一个10位中就编码成1的个数比0的个数多,这样总体平衡了1和0的个数。
K28.5 未经过8 10b编码之前的值是十六进制BC,即101 1100,低5位11100为十进制的28,高三位为101为十进制的5.然后加一个描述符号K(控制字符)或者D(数据字符)。K28.5这个字符没有ASCII字符编码与其冲突,它的二进制流中又包含了连续5个1,很容易被电路识别到。
每个控制字符均由K28.5字符开头,后接3个其他字符(可以是数据字符),由这4个字符组成的字来代表一种意义,如SOF(Start Of Frame)、EOF(End Of Frame)等。

14.3.2控制帧头

FC协议定义了一个24B的帧头。帧头有寻址,传输保障的功能。

14.3.3 链路层流量控制

FC定义了两种流控策略:端到端、缓存到缓存。
缓存到缓存:在一条链路的两端首先面对链路的一个部件就是缓存。接收电路将一帧成功接收后就放到缓存。如果由于上位程序处理缓慢而造成缓存已经充满,FC协议还有机制来通知发送方减缓发送。如果链路的一端是FC终端设备,另外一端是FC交换机,则二者之间缓存到缓存的流量控制只能控制这个FC终端到FC交换机之间的流量。
端到端:通信最终目标可能是网络上另外一个FC终端,在这之间可能经过多个FC交换机和多条链路。如果数据流在另外一个FC终端之上发生拥塞,则这个FC终端必须向发起端说要降低频率。

14.3.4 MTU

一般情况下以太网的MTU为1500B,而FC链路层的MTU为2112B。

14.4 FC 网络层

FC有两种网络拓扑模式:FC-AL和Fabric。

14.4.1 FC-AL

类似以太网共享总线拓扑,但是连接方式不是总线,而是仲裁环(Arbitral loop)每个FC AL设备首尾相接构成了一个环路,一个环路能接入的最多节点是128个(1个字节寻址容量)。环路中如果有设备故障,会将这个节点Bypass掉不影响其他设备工作。
数据帧在仲裁环内是一跳一跳被传输,并且按照一个方向。

A节点若要向h通信,必须经过bcdefg。

AL架构下,不管接入的节点有多少,带宽为恒定,即共享环路带宽

14.4.2 Fabric

网状交换矩阵。交换矩阵架构相对于冲裁环路来说,转发效率大大提高,连入这个矩阵的所有节点之间可以同时进行点对点通信,加上包交换所带来的并发和资源充分利用,可使得交换架构获得的总带宽为所有端口带宽之和。

FC终端设备接入矩阵端点,一个设备发给另一个设备数据帧被交换矩阵收到后,矩阵会拨动交叉处的开关,连通电路,传输数据。所以可以把交换矩阵是一个大的电路开关矩阵,根据通信的源和目的决定波动哪些开关。

14.4.3 编制

任何网络都需要寻址机制,所以需要对FC网络的每个设备定义一个唯一的标识。
WWNN(World Wide Node Name):每个设备自身有一个WWNN
WWPN(World Wide Port Name):FC设备的每个端口都一个WWPN,是世界上唯一的。
以太网交换设备的端口不需要有MAC地址,而FC交换机却需要每个端口都有自己的WWPN。这是因为FC要做的工作比以太网交换机多,许多FC的逻辑都集成在了FC交换机。 需要处理到FC协议的最上层。而以太网相对简单,因为上层逻辑都被交给TCP/IP这样的上层协议来实现了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值