RAID卡的结构详解
软件RAID的缺点如此之多,使人们不断地思考更多实现RAID的方法。既然软件缺点太多,那么用硬件实现如何呢?
RAID卡就是一种利用独立硬件来实现RAID功能的方法。要在硬件上实现RAID功能,必须找一个物理硬件作为载体,SCSI卡或者主板上的南桥无疑就是这个载体了。人们在SCSI卡上增加了额外的芯片用于实现RAID功能。这些芯片是专门用来执行RAID算法的,可以是ASIC这样的高成本高速度运算芯片,也可以是通用指令CPU这样的通用代码执行芯片,可以从ROM中加载代码直接执行,也可以现在入RAM后执行,从而实现RAID功能。
实现了RAID功能的板卡(SCSI卡或者IDE拓展卡)就叫做RAID卡。同样,在主板南桥芯片上也可以实现RAID功能。由于南桥中的芯片不能靠CPU来完成它们的功能,所以这些芯片完全靠电路逻辑来自己运算,尽管速度很快,但是功能相对插卡式的RAID卡要弱。
对于软件RAID,至少操作系统最底层还是能感知到实际物理磁盘的,但是对于硬件RAID来说操作系统根本无法感知底层的物理磁盘。而只能通过厂家提供的RAID卡的管理软件来查看卡上所连接的物理磁盘。而且,配置RAID卡的时候,也不能在操作系统下完成,而必须进入这个硬件来完成(或者在操作系统下通过RAID卡配置工具来设置)。一般的RAID卡都是在开机自检的时候,进入它的ROM配置程序来配置各种RAID功能。
RAID卡的结构
带CPU的RAID卡俨然就是一个小的计算机系统,有自己的CPU、内存、ROM、总线和IO接口,只不过这个小计算机是为大计算机服务的。
SCSI RAID卡上一定要包含SCSI控制器,因为其后端连接的依然是SCSI物理磁盘。其前端连接到主机的PCI总线上,所以一定要有一个PCI总线控制器来维护PCI总线的仲裁、数据发送接收等功能。还需要有一个ROM,一般都是用Flash芯片作为ROM,其中存放着初始化RAID卡必须的代码以及实现RAID功能所需的代码。
RAM的作用,首先是作为数据缓存,提高性能;其次作为RAID卡上的CPU执行RAID运算所需要的内存空间。XOR芯片是专门用来做RAID3、5、6等这类校验型RAID的校验数据计算用的。如果让CPU来做校验计算,需要执行代码,将耗费很多周期。而如果直接使用专用的数字电路,一进一出就立即得到结果。所以为了解脱CPU,增加了这块专门用于XOR运算的电路模块,大大增加了数据校验计算的速度。
RAID卡与SCSI卡的区别就在于RAID功能,其他没有太大区别。如果RAID卡上有多个SCSI通道,那么就称为多通道RAID卡。目前SCSI RAID卡最高有4通道的,其后端可以接入4条SCSI总线,所以最多可连接64个SCSI设备(16位总线)。
RAID思想中有个条带化的概念。所谓的条带化,并不是真正的像低级格式化一样将磁盘划分成条和带。这个条带化是虚拟的,也就是体现在程序代码上。因为条带的位置、大小一旦设置之后,就是固定的。一个虚拟盘上的某个LBA地址块,就对应了真正物理磁盘上的一个或者多个LBA块,这些映射关系都是预先通过配置界面设定好的。而且某种RAID算法往往体现为一些复杂公式,而不是去用一张表来记录每个虚拟磁盘LBA和物理磁盘LBA的对应,用表的效率会很差。因为每个IO到来之后,RAID都要查询这个表来获取对应物理磁盘的LBA,而查询速度是非常慢的,更何况面对如此大的一张表。如果用一个逻辑LBA与物理LBA之间的函数关系公式来做运算,则速度是非常快的。
正是因为映射完全通过公式来进行,所以物理磁盘上根本不用写入什么标志,以标注所谓的条带。条带的概念只是逻辑上的,物理上并不存在。所以,条带等概念只需“记忆”在RAID程序代码之中就可以了,要改变也是改变程序代码即可。唯一要向磁盘上写入的就是一些RAID信息,这样即使将这些磁盘拿下来,放到同型号的另一块RAID卡上,也能无误地认出以前做好的RAID信息。SNIA协会定义了一种DDF RAID信息标准格式,要求所有RAID卡厂家都按照这个标准来存放RAID信息,这样,所有RAID卡就都通用了。
RAID卡的结构详解的更多相关文章
- Android系统目录结构详解
Android系统基于linux内核.JAVA应用,算是一个小巧精致的系统.虽是开源,但不像Linux一般庞大,娇小可亲,于是国内厂商纷纷开发出自己基于Android的操作系统.在此呼吁各大厂商眼光放 ...
- Linux文件系统的目录结构详解
Linux文件系统的目录结构详解 一.前 言 文章对Linux下所有目录一一说明,对比较重要的目录加以重点解说,以帮助初学者熟练掌握Linux的目录结构. 二.目 录 1.什么是文件系统 2.文件 ...
- 软RAID管理命令mdadm详解
软RAID管理命令mdadm详解 mdadm是linux下用于创建和管理软件RAID的命令,是一个模式化命令.但由于现在服务器一般都带有RAID阵列卡,并且RAID阵列卡也很廉价,且由于软件RAID的 ...
- BS模式的模型结构详解
编号:1004时间:2016年4月12日16:59:17功能:BS模式的模型结构详解 URL:http://blog.csdn.net/icerock2000/article/details/4000 ...
- Linux下的文件目录结构详解
Linux下的文件目录结构详解 / Linux文件系统的上层根目录 /bin 存放用户可执行的程序 /boot 操作系统启动时所需要的文件 /dev 接口设备文件目录,例如:had表示硬盘 /etc ...
- PHP扩展代码结构详解
PHP扩展代码结构详解: 这个是继:使用ext_skel和phpize构建php5扩展 内容 (拆分出来) Zend_API:深入_PHP_内核:http://cn2.php.net/manual/ ...
- vue 文件目录结构详解
vue 文件目录结构详解 本篇文章主要介绍了vue 文件目录结构详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 项目简介 基于 vue.js 的前端开发环境,用于前后 ...
- [转帖]Tomcat目录结构详解
Tomcat目录结构详解 https://www.cnblogs.com/veggiegfei/p/8474484.html 之前应该是知道一点 但是没有这么系统 感谢原作者的描述. 1.bin: 该 ...
- web标准 浏览器介绍 开发工具介绍 HTML介绍 HTML颜色介绍 规范 HTML结构详解 {前端之前端初识}
前端之前端初识 前端初识 本节目录 一 web标准 二 浏览器介绍 三 开发工具介绍 四 HTML介绍 五 HTML颜色介绍 六 规范 七 HTML结构详解 一 web标准 web准备介绍: 1. ...
随机推荐
- P1439 【模板】最长公共子序列
题目描述 给出1-n的两个排列P1和P2,求它们的最长公共子序列. 输入输出格式 输入格式: 第一行是一个数n, 接下来两行,每行为n个数,为自然数1-n的一个排列. 输出格式: 一个数,即最长公共子 ...
- javascript 中isPrototypeOf 、hasOwnProperty、constructor、prototype等用法
hasOwnProperty:是用来判断一个对象是否有你给出名称的属性或对象,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员. isPrototypeOf是用来判断要检查 ...
- 基于Verilog的偶数、奇数、半整数分频以及任意分频器设计
在FPGA的学习过程中,最简单最基本的实验应该就是分频器了.由于FPGA的晶振频率都是固定值,只能产生固定频率的时序信号,但是实际工程中我们需要各种各样不同频率的信号,这时候就需要对晶振产生的频率进行 ...
- Spring源码分析(九)解析默认标签中的自定义标签元素
摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 到这里我们已经完成了分析默认标签的解析与提取过程,或许涉及的内容太多,我 ...
- P2434 [SDOI2005]区间
题目描述 现给定n个闭区间[ai, bi],1<=i<=n.这些区间的并可以表示为一些不相交的闭区间的并.你的任务就是在这些表示方式中找出包含最少区间的方案.你的输出应该按照区间的升序排列 ...
- DB2创建表、操作表等常用命令
转载:http://hi.baidu.com/ufobject/item/7fd03aeebf7be1266dabb881 一.创建库表 1.创建库 1).创建数据语句 CREATE DATABASE ...
- 【vue】如何在 Vue-cli 创建的项目中引入iView
根据vue项目的搭建教程,一下记录下如何在Vue-cli创建的项目中引入iView. 1)安装iView,在项目下 cnpm install iview --save 2 ) 在 webpack ...
- java常用API之Date类
Date类: 类 Date 表示特定的瞬间,精确到毫秒. 毫秒概念:1000毫秒=1秒 毫秒的0点: System.currentTimeMillis() 返回值long类型参数 用于获取当前日 ...
- Mysql linux 安装文档
1.安装依赖包 yum -y install gcc-c++ ncurses-devel cmake make perl gcc autoconf automake zlib libxml libgc ...
- WPF 访问资源中的Storyboard
原文:WPF 访问资源中的Storyboard <UserControl.Resources> <Storyboard x:Key="testStoryboard" ...