linux内核奇遇记之md(raid)源代码解读
文章平均质量分 81
linux内核源代码MD解读
默默努力的小熊
linux kernel存储技术
展开
-
linux内核奇遇记之md源代码解读之十五bitmap原理
linux内核奇遇记之md源代码解读之十五bitmap原理转载请注明出处:http://blog.csdn.net/liumangxiong 为人不识陈近南,走遍江湖也枉然。做raid不识bitmap,通通都是走过场。那么bitmap究竟是何许人物,能够在raid5的场子里混得风生水起呢?话说最早raid5是没有bitmap这位门客的,突然有一天跑raid5的系统异常掉电了,客户发原创 2014-07-11 11:26:27 · 3796 阅读 · 2 评论 -
linux内核奇遇记之md源代码解读之十四raid5非条块内读
linux内核奇遇记之md源代码解读之十四raid5非条块内读如果是非条块内读,那么就至少涉及到两个条块的读,这就需要分别从这两个条块内读出数据,然后再凑成整个结果返回给上层。接下来我们将看到如何将一个完整的bio读请求拆分成多个子请求下发到磁盘,从磁盘返回之后再重新组合成请求结果返回给上层的。4097 logical_sector = bi->bi_sector & ~((sec原创 2014-07-05 10:34:14 · 3528 阅读 · 1 评论 -
linux内核奇遇记之md源代码解读之十三raid5重试读
linux内核奇遇记之md源代码解读之十三raid5重试读转载请注明出处:http://blog.csdn.net/liumangxiong上节我们讲到条块内读失败,在回调函数raid5_align_endio中将请求加入阵列重试链表,在唤醒raid5d线程之后,raid5d线程将该请求调用retry_aligned_read函数进行重试读:4539static int re原创 2013-11-06 09:45:46 · 3602 阅读 · 0 评论 -
linux内核奇遇记之md源代码解读之十二raid读写
linux内核奇遇记之md源代码解读之十二raid读写转载请注明出处:http://blog.csdn.net/liumangxiong我们都知道,对一个linux块设备来说,都有一个对应的请求队列。注册在这个请求队列上的请求就是该块设备的请求入口。对于raid来说,分配struct mddev时就已经设置好了,在函数md_alloc中有这样的代码:4846 blk_que原创 2013-11-04 20:08:17 · 5952 阅读 · 10 评论 -
linux内核奇遇记之md源代码解读之十一raid5d
linux内核奇遇记之md源代码解读之十一raid5d转载请注明出处:http://blog.csdn.net/liumangxiong正是有了上一篇的读写基础,我们才开始看raid5d的代码。raid5d不是读写的入口,也不是读写处理的地方,只是简简单单的中转站或者叫做交通枢纽。这个枢纽具有制高点的作用,就像美国在新加坡的基地,直接就控制了太平洋和印度洋的交通枢纽。4626 /*原创 2013-10-22 15:15:09 · 4217 阅读 · 0 评论 -
linux内核奇遇记之md源代码解读之十raid5数据流之同步数据流程
linux内核奇遇记之md源代码解读之十raid5数据流之同步数据流程 转载请注明出处:http://blog.csdn.net/liumangxiong上一节讲到在raid5的同步函数sync_request中炸土豆片是通过handle_stripe来进行的。从最初的创建阵列,到申请各种资源,建立每个阵列的personality,所有的一切都是为了迎接数据流而作的准备。就像我们寒窗苦原创 2013-10-13 21:30:11 · 5491 阅读 · 28 评论 -
linux内核奇遇记之md源代码解读之九阵列raid5同步函数sync_request
linux内核奇遇记之md源代码解读之九阵列raid5同步函数sync_request转载请注明出处:http://blog.csdn.net/liumangxiong我们再来回顾一下整个场景:1)在运行阵列的时候调用md_wakeup_thread唤醒主线程2)主线程调用md_check_recovery检查同步3)md_check_recovery函数中检查需要同步调用原创 2013-10-12 10:59:49 · 4545 阅读 · 0 评论 -
linux内核奇遇记之md源代码解读之八阵列同步二
linux内核奇遇记之md源代码解读之八阵列同步二转载请注明出处:http://blog.csdn.net/liumangxiong在上一小节里讲到启动同步线程:7824 mddev->sync_thread = md_register_thread(md_do_sync,7825原创 2013-10-11 17:49:01 · 4247 阅读 · 0 评论 -
linux内核奇遇记之md源代码解读之七阵列同步一
linux内核奇遇记之md源代码解读之七阵列同步一转载请注明出处:http://blog.csdn.net/liumangxiong阵列同步在md_do_sync,那么入口在哪里呢?就是说阵列同步触发点在哪里呢?听说过md_check_recovery吧,但这还不是同步的入口点。那raid5d函数是入口点吧?如果要认真分析起来还不算是。真正的同步入口点在do_md_run函数,就是在运原创 2013-10-11 11:14:53 · 5609 阅读 · 3 评论 -
linux内核奇遇记之md源代码解读之六
linux内核奇遇记之md源代码解读之六转载请注明出处:http://blog.csdn.net/liumangxiongraid10的run函数与raid5的run函数最大区别在于setup_conf,那就直接深入核心:3540 static struct r10conf *setup_conf(struct mddev *mddev)3541 {3542原创 2013-10-10 19:17:39 · 3675 阅读 · 2 评论 -
linux内核奇遇记之md源代码解读之五
linux内核奇遇记之md源代码解读之五转载请注明出处:http://blog.csdn.net/liumangxiong如果看懂了raid1阵列的run函数,那么看raid5阵列run就非常轻松了,因为两者要做的事情都是大同小异。raid5的run函数很长,但很大一部分跟创建运行是没有关系的,特别是有一段跟reshape相关的,大多数系统都不关注该功能,因此可以直接跳过。经过删减原创 2013-10-10 14:15:53 · 4370 阅读 · 3 评论 -
linux内核奇遇记之md源代码解读之四
linux内核奇遇记之md源代码解读之四转载请注明出处:http://blog.csdn.net/liumangxiong运行阵列意味着阵列经历从无到有,建立了作为一个raid应有的属性(如同步重建),并为随后的读写做好的铺垫。那么运行阵列的时候到底做了哪些事情,让原来的磁盘像变形金刚一样组成一个新的巨无霸。现在就来看阵列运行处理流程:5158 static int do_md原创 2013-10-09 16:22:28 · 7589 阅读 · 15 评论 -
linux内核奇遇记之md源代码解读之三
linux内核奇遇记之md源代码解读之三转载请注明出处:http://blog.csdn.net/liumangxiong这一节我们阅读阵列的创建过程。按照常理出牌,我们到ioctl中找阵列创建命令,md对应的ioctl函数是md_ioctl,当找对应的cmd命令字时,却完全没有类似CREATE_ARRAY的命令,那么就说明md设备并不是通过ioctl函数来创建的。其实如果我们仔细原创 2013-10-07 22:02:13 · 6711 阅读 · 15 评论 -
linux内核奇遇记之md源代码解读之二
linux内核奇遇记之md源代码解读之二转载请注明出处:http://blog.csdn.net/liumangxiong在编译完成linux内核源代码的时候,drivers/md目录下会生成多个ko文件,那么这些内核模块哪一个先加载,哪一个后加载的呢?例如md-mod.ko, raid5.ko, raid10.ko,这些模块是一起加载的呢,还是有先后顺序呢?如果熟悉linux内核编程的话原创 2013-10-06 22:49:41 · 5616 阅读 · 2 评论 -
linux内核奇遇记之md源代码解读之一
linux内核奇遇记之md源代码解读之一转载请注明出处:http://blog.csdn.net/liumangxiong最近花了一段时间认真地学习了一下md代码,并且在原代码的基础上开发了一系列的新功能,这些新功能让md更完善、更适合于企业大容量存储,通过增加阵列缓存和bitmap优化大大提升了存储速度,提高了数据的可靠性,在任何掉电的情况下保证数据一致性,超级块异常情况下完全不影响原创 2013-10-05 11:16:59 · 8605 阅读 · 6 评论