加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux内核md源代码解读 七 阵列同步一 :先容阵列同步

发布时间:2016-10-29 23:31:35 所属栏目:Linux 来源:站长网
导读:副标题#e# 阵列同步在md_do_sync,那么入口在哪里呢?就是说阵列同步触发点在哪里呢?听说过md_check_recovery吧,,但这还不是同步的入口点。那raid5d函数是入口点吧?如果要认真分析起来还不算是。 真正的同步入口点在do_md_run函数,就是在运行阵列run函

这里有必要解释一下同步线程的意思,这里的同步是指广义的sync,包括狭义的同步和重建,因为同步和重建实际上做的是同一件事情就是把数据从一个地方拷贝到另一个地方。sync是包括syncing和recovery,所以不要一看到同步线程就以为是做同步操作。

正是这些标志指定同步线程下一步该怎么做,而我们一看到这些标志的时候心里必须要明白此时线程在做什么或者应该做什么。

7804行,这个if分支用于启动重建操作。

7809行,这个分支用于启动同步操作。

7812行,既不同步也不重建那就没有什么可以做的。

7816                 if (mddev->pers->sync_request) {  
7817                         if (spares) {  
...  
7823                         }  
7824                         mddev->sync_thread = md_register_thread(md_do_sync,  
7825                                                                 mddev,  
7826                                                                 "resync");  
7827                         if (!mddev->sync_thread) {  
...  
7837                         } else
7838                                 md_wakeup_thread(mddev->sync_thread);  
7839                         sysfs_notify_dirent_safe(mddev->sysfs_action);  
7840                         md_new_event(mddev);  
7841                 }  
...  
7850                 mddev_unlock(mddev);  
7851         }

7816行,对于没有同步线程的阵列来说,就没什么事情了。7824行,启动同步线程。7838行,唤醒同步线程。7839行,更新同步状态。这时主线程调用md_check_recovery函数就已经结束了,启动的同步线程来做同步的具体事宜。那么为什么主线程自己不做同步而另起一个线程做同步呢?不妨想想现在事情都放在主线程里做有什么负面影响?当主线程在同步的时候是不是就不能很及时响应正常数据流了。而且同步和数据流本来就是两件差异很大的事情。本小节只是介绍到同步入口,同步过程在下一小节开始阅读。

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

(编辑:应用网_丽江站长网)

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

热点阅读