加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux内核md源代码解读 五 先容raidd5阵列的运行

发布时间:2016-10-29 13:18:33 所属栏目:Linux 来源:站长网
导读:副标题#e# 如果看懂了raid1阵列的run函数,那么看raid5阵列run就非常轻松了,因为两者要做的事情都是大同小异。 raid5的run函数很长,但很大一部分跟创建运行是没有关系的,特别是有一段跟reshape相关的,大多数系统都不关注该功能,因此可以直接跳过。经过

1480行,新申请一个struct stripe_head。

1484行,关联struct r5conf。

1488行,grow_buffers,为每个struct r5dev申请一个page页用于stripe_head页拷贝和计算校验。页指针保存在sh->dev[].page指针中。

1494行,,设置struct stripe_head计数器,在1497行release_stripe中会递减。

1495行,递增阵列活跃条带数。

1496行,lru链表初始化。

1497行,释放struct stripe_head,添加到空闲条带空闲链表。release_stripe最终会调用到do_release_stripe,do_release_stripe里会执行到下面几行:

228                         list_add_tail(&sh->lru, &conf->inactive_list);  
229                         wake_up(&conf->wait_for_stripe);  
230                         if (conf->retry_read_aligned)  
231                                 md_wakeup_thread(conf->mddev->thread);

228行,添加struct stripe_head到inactive_list,即条带空闲链表。229行,唤醒等待空闲条带的请求,因为每个阵列的struct stripe_head资源是有限的,申请不到时就在等待队列上等候。231行,唤醒条块读请求。继续返回到setup_conf函数中,这里已经通过grow_stripes为阵列申请了NR_STRIPES个struct stripe_head。5262行,创建raid5主线程。这样setup_conf函数也结束了,继续返回到run函数中。5434-5437行,conf和mddev的关联和赋值。5494-5556行,mddev相关域的赋值。5558行,mddev请求队列struct queue_limits设置等等初始化。小结一下,raid5的run函数同raid1基本作用是一样的,都是向上虚拟一个块设备,向下包装磁盘,建立读写请求的通道。区别在于raid5的读写是以struct stripe_head为基础的,而在raid5的读写中也是围绕着struct stripe_head展开的。下一小节介绍raid10阵列的运行。

出处:http://blog.csdn.net/liumangxiong

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读