加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux内核md源代码解读 八 阵列同步二:同步过程

发布时间:2016-01-18 12:31:33 所属栏目:Linux 来源:网络整理
导读:在上一小节里讲到启动同步线程: 7824 mddev-sync_thread = md_register_thread(md_do_sync, 7825 mddev, 7826 resync); md_register_thread函数如下: 6697 st

7348行,同步默认是physical size,也可以是virtual size。如果你第一次阅读就能明白其中的意思,那么恭喜你是一个内核天才。如果我这一次讲完你能看懂,那么恭喜你是一个内核人才。如果看不懂也没有多大关系,毕竟大多数人都只是想混混日子而已,只要有一颗向上努力的心,始终都有市场的。想当初我也是抱着赵炯博士的linux内核完全注释足足看了七遍,整本书都已经被我笔记得体无完肤了,但是仍然只是一知半解。所以看不懂没有关系,但是要把握两点:一是要把握方法,看懂原理挑重点看,二是多动手修改几行代码试试,并且持之以恒。

那什么是physical size,什么是virtual size?物理大小就是单个磁盘用于创建阵列空间的大小,虚拟大小就是阵列大小。怎么样,终于相信自己是内核天才了吧!那为什么同步要有这样的区别呢?这就要跟阵列的特性相关了,raid5阵列是属于前者,按磁盘从头到尾同步,raid10阵列是属于后者,是按照镜像对进行同步的。
7351行,所以对于不同阵列,max_sectors代表不同的含义。

接下来是reshape和重建,跳过。

7375行,打印阵列同步信息。

7376-7380行,打印同步速度信息。同步有速度控制是为了不影响正常数据流。

7382行,初始化rdev->last_events。函数is_mddev_idle用于控制同步速度,当一小段时间内IO太多时会休眠来降低同步速度。

7384         io_sectors = 0;  
7385         for (m = 0; m < SYNC_MARKS; m++) {  
7386                 mark[m] = jiffies;  
7387                 mark_cnt[m] = io_sectors;  
7388         }  
7389         last_mark = 0;  
7390         mddev->resync_mark = mark[last_mark];  
7391         mddev->resync_mark_cnt = mark_cnt[last_mark];  
7392   
7393         /* 
7394          * Tune reconstruction: 
7395          */
7396         window = 32*(PAGE_SIZE/512);  
7397         printk(KERN_INFO "md: using %dk window, over a total of %lluk.n",  
7398                 window/2, (unsigned long long)max_sectors/2);  
7399   
7400         atomic_set(&mddev->recovery_active, 0);  
7401         last_check = 0;  
7402   
7403         if (j>2) {  
7404                 printk(KERN_INFO   
7405                        "md: resuming %s of %s from checkpoint.n",  
7406                        desc, mdname(mddev));  
7407                 mddev->curr_resync = j;  
7408         }  
7409         mddev->curr_resync_completed = j;

7385-7391行,同步点记录的初始化。这里设置了几个观察点,用几个观察点之间下发的数据流速度来控制同步线程。

7396行,设置窗口大小,数据流大小这个窗口大小才进入观察点。

7400行,下发但未返回请求的大小。

7403行,继续同步的。

7409行,设置同步完成点。

(编辑:云计算网_泰州站长网)

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

热点阅读