光纤磁盘阵列控制器raid核心算法研究与实现

上传人:ji****en 文档编号:107886662 上传时间:2019-10-21 格式:PDF 页数:58 大小:1.82MB
返回 下载 相关 举报
光纤磁盘阵列控制器raid核心算法研究与实现_第1页
第1页 / 共58页
光纤磁盘阵列控制器raid核心算法研究与实现_第2页
第2页 / 共58页
光纤磁盘阵列控制器raid核心算法研究与实现_第3页
第3页 / 共58页
光纤磁盘阵列控制器raid核心算法研究与实现_第4页
第4页 / 共58页
光纤磁盘阵列控制器raid核心算法研究与实现_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《光纤磁盘阵列控制器raid核心算法研究与实现》由会员分享,可在线阅读,更多相关《光纤磁盘阵列控制器raid核心算法研究与实现(58页珍藏版)》请在金锄头文库上搜索。

1、分类号分类号 学号学号 2004612100113 学校代码学校代码104 87 密级密级 硕士学位论文硕士学位论文 光纤磁盘阵列控制器光纤磁盘阵列控制器 RAID 核心算法的研究与实现核心算法的研究与实现 学位申请人学位申请人 聂洪杰聂洪杰 学 科 专 业学 科 专 业 : 计算机系统结构计算机系统结构 指 导 教 师指 导 教 师 : 谢长生谢长生 教授教授 答 辩 日 期答 辩 日 期 : 2007.1.31 A Thesis Submitted in Partial Fulfillment of the Requirements for the Degree of Master of

2、Engineering The Research and Implementation of RAID Kernel Arithmetic in Fiber RAID Controller Candidate : Nie Hongjie Major : Computer Architecture Supervisor: Prof. Xie Changsheng Huazhong University of Science /标识结构体的类型 struct _STRIPE_T * pstStripe; /该请求的 Stripe 信息 BOOLX bIsRead:1; /标识请求的读写特性 BOO

3、LX bFailed:1; /标识请求的完成结果 PVOID pCmStripe; /挂接跟该请求 Stripe 有关的 CM 中的结构 体 PVOID pRkStripe; /挂接跟该请求Stripe有关的SI中的结构体 CM_RK_STRIPE_T, * PCM_RK_STRIPE_T; struct _RK_SI_RINFO_T 是 RK 模块向 SI 模块发送的请求的数据结构,同时也是 SI 模块向 RK 模块回送的响应的数据结构,其定义如下: typedef struct _RK_SI_RINFO_T STRUCT_TYPE_E enStructType; /标识结构体的类型 PDI

4、SK_T pstDisk; /磁盘数据请求所在的磁盘的信息 U32X uOffsetLba; /磁盘数据请求在磁盘上的偏移 U32X uLenLba; /磁盘数据请求在磁盘上的长度 PCHARX * ppcBuf; /磁盘数据请求的数据 U8X u8PieceNum; /磁盘数据请求有多少个 Piece BOOLX bIsRead : 1; /磁盘数据请求的读写类型 BOOLX bFailed : 1; /磁盘数据请求的完成结果 BOOLX bIsHigh : 1; /磁盘数据请求的优先级 PVOID pRkRinfo; /指向一个 struct _RK_RINFO_T 类型的 /结构体,包含

5、具体的请求和响应信息 PVOID pSiRinfo; /指向与该请求相关的 SI 中的数据结构体 RK_SI_RINFO_T, * PRK_SI_RINFO_T; 结构体 struct _RK_RINFO_T 的定义如下: 华华 中中 科科 技技 大大 学学 硕硕 士士 学学 位位 论论 文文 19 typedef struct _RK_RINFO_T PRK_SI_RINFO_T pstRkSiRinfo; /回指到 struct _RK_SI_RINFO_T struct _RK_STRIPE_T * pstRkStripe; /该请求对应 Stripe 在 RK 中的数据结构 U8X u

6、8Id; /标识 SU 的标识号 PCHARX a_pcTempBufMAX_BUF_PIECE_NUM; /临时数据缓冲区 PSU_T pstSu; /相关 SU 的信息 U8X u8Action; /请求的操作类型,如正常读、降级读 RK_RINFO_T, *PRK_RINFO_T; 3.3 RAID 核心算法的动态分析核心算法的动态分析 RAID 核心算法的软件流程可以分为两个主要部分:请求处理和响应处理。下面 分别对这两部分进行动态分析。 3.3.1 请求处理动态分析请求处理动态分析 当 CM 模块收到上层模块的读写请求后,如果数据此时不在 Cache 中,那么 CM 模块就会组织一个

7、 struct _CM_RK_STRIPE_T 的结构体,并通过 RK 模块向 CM 模块 提供的接口将该结构体插入到 RK_MsgQueue 的末尾。RK_MainThread 会循环遍历到 这个请求,并通过判断消息头部的类型字段 enStructType 来将消息分流,因此上述流 程会进入到 RK_HandleReq 子模块,该模块的入口函数为 RK_HandleCmRkStripe,该 函数根据参数中的 RAID 级别信息,调用相应的 RAID 级别请求处理函数,形如 RAIDx_HandleReq,它们根据当前 SLICE 的运行状态及读写类型来将 Stripe 请求作相 应拆分,生成

8、新的类型为 struct _RK_SI_RINFO_T 的读写请求结构体,然后调用 SI 模 块提供的接口函数 SI_SendReqFromRk 将读写请求下发,整个请求处理流程如图 3.3 所示: 华华 中中 科科 技技 大大 学学 硕硕 士士 学学 位位 论论 文文 20 RK_HandleCmRkStripe 控 RAID 控 控 控 控 CM控 控 RAID5_HandleReq 控 SLICE 控 控 控 控 RAID5_HandleReqOk RAID5_HandleReqDegrad ed RAID5_HandleReqErr 控 控 控 控 控 RAID5_HandleReqO

9、kRea d RAID5_HandleReqOkWrite SI控 控SI控 控 JBOD控 控 控 控控 控 控 控 控 控 控 控 SI控 控SI控 控 图 3.3 RAID 核心算法请求处理流程 3.3.2 响应处理动态分析响应处理动态分析 SI 模块完成请求后再调用 RK 模块提供的接口函数 RK_SendRspFromSI 将响应信 息 插 入 到 RK_MsgQueue 的 末 尾 , RK_MainThread 对 此 消 息 分 流 后 会 进 入 RK_HandleRsp 子模块,其入口函数为 RK_HandleRkSiRinfo,该函数根据参数中的 RAID 级别信息调用相

10、应的响应处理函数,形如 RAIDx_HandleRsp,按照响应信息中 所标记的读写操作类型进行分流,然后根据返回响应消息中的状态来确定请求实际完 成的情况来明确目前所出的处理阶段, 最后调用各自级别内部的函数继续向 SI 模块发 送读写请求,或直接调用 CM_SendReqFromRk 接口向 CM 模块发送请求完成的响应 来结束 CM 模块发起的本次请求。整个响应处理流程如图 3.4 所示: 华华 中中 科科 技技 大大 学学 硕硕 士士 学学 位位 论论 文文 21 RK_HandleRkSiRinfo 控 RAID 控 控 控 控 SI控 控 RAID5_HandleRsp SI控 控

11、 控 控 CM控 控 控 控 控 控 控 控 RAID5_HandleRs pReadOk 控 控 控 控 控 RAID5_HandleRspReadRAID5_HandleRspWrite 控 控 控 控 控 控 RAID5_HandleRs pWriteOkWriteFull SI控 控 控 控 CM控 控 JBOD控 控 控 控 控 控 控 控 控 控 控 控 控 控 控 控 控 控 控控 控 控 控 控 控 控 SI控 CM控 控 图 3.4 RAID 核心算法响应处理流程 3.4 本章小结本章小结 本章通过比较 MD 以及 RAIDFRAME 这两种不同的设计思路的优劣,明确了将 R

12、AIDFRAME 作为 RAID 核心算法的设计参考,然后介绍了组成 RAID 核心算法的各 个子模块的功能,同时还对模块的核心数据结构进行了介绍。 华华 中中 科科 技技 大大 学学 硕硕 士士 学学 位位 论论 文文 22 4 RAID 核心算法的设计与实现核心算法的设计与实现 在 RAID 核心算法中已经实现的 RAID 级别有 JBOD、RAID0、RAID1、RAID10、 RAID3、RAID5 以及 RAID6,考虑到算法之间的重复性,下面只介绍 JBOD、RAID0、 RAID1、RAID5、RAID6 这几种典型算法的具体实现。 4.1 JBOD 算法的实现算法的实现 JBO

13、D 将多块硬盘当作一块硬盘来进行操作,是当一块磁盘的空间用尽时,数据 就会被自动写入到下一块磁盘中。由于没有任何冗余信息, 因而 JBOD 的实现比后 面将要介绍的几种要简单的多。 但是 JBOD 的实现也有两点需要注意:首先,对于任何一个 Stripe 不可能同时存 储在两个磁盘上,这是在 GC 模块保证的,每次建立 JBOD 时,GC 模块就自动将该 JBOD 级别包括的各个磁盘的大小减小了 2MB (对用户透明) , 由于 Su 最大为 128KB, 所以就保证了在建立包括 2MB/128KB=16 个磁盘的 JBOD 时 Stripe 也不会跨盘,而系 统目前硬件结构上最多也只能插 1

14、6 个磁盘, 所以任何请求的 Stripe 都只可能分布在一 个磁盘上;其次,在 JBOD 中,逻辑上相邻的 Su 在物理上也是相邻的,所以只要计 算出 Stripe 的起始偏移就可以计算出 Stripe 中每个 Su 的偏移,这个工作在函数 JBOD_CommonCompute 中完成,此函数在进行请求分流前调用,所以在任何分支处 理中,各个 Su 对应的磁盘序号以及其在磁盘上的偏移都是已经计算好了的。下面是 JBOD 算法的具体实现: 1 正常读 此情形的入口函数为 JBOD_HandleReqOkRead,在该函数中会对满足下列条件的 Su 发送请求:该 Su 上有请求(即 pstSu-

15、bAccessMe 为 TRUE) ;该 Su 中的数据目前 没有全部存放在 Cache 中。在发送请求前,会先通过 RK_PrepareSuReadBuf 来为该 Su 申请一个临时的缓冲区 TempBuf, SI 模块读出来的数据就放在 TempBuf 中。 响应消息 会在 JBOD_HandleRspReadOk 中处理,当发给 SI 模块的所有请求的响应都正确返回 后,会调用 RK_UpdateStripeBuf 来将 TempBuf 中的数据(磁盘上的老数据)同步到 华华 中中 科科 技技 大大 学学 硕硕 士士 学学 位位 论论 文文 23 pstSu-a_pcBuf(CACHE

16、中的新数据)中,同步完成后会调用 CM 模块注册的接口 l_stFuncToRk.pfnSendRspFromRk 将该次请求的响应回送到 CM 模块的消息队列中, 该 响应会在 CM 模块的线程中进行处理。 2 正常写 若请求 Stripe 上的所有数据 Su 中的数据全部存放在 Cache 中, 那么称该次写操作 为 满 写 , 所 以 正 常 写 可 以 分 为 正 常 满 写 和 正 常 非 满 写 。 满 写 会 调 用 JBOD_HandleReqOkWriteFull,它调用 JBOD_WriteSu 对需要更新的 Su 发写请求,其 响应在 JBOD_HandleRspWriteOkWrite 中,该函数只有

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 电子/通信 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号