欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

简单梳理RAID算法

程序员文章站 2022-07-10 09:42:42
...

接触raid也算有段时间了,其实对于raid,自己也利用空闲时间尝试过一些东西,raid缓存掉电保护,实现一个简单的raid模块。前者,看过一些技术文章和论文,写过些代码,后来不知道怎么搞就停了,后者,bug很多。总结下来,感觉现在自己还是tai cai。以后必继续搞起,哈哈,先把牛皮吹出去!
     raid文档公司要求也写过一些,至于本篇,先前写了个PPT,本来是要搞一个公司内部raid的简单培训不了了之了,下面主要就是贴到一些ppt截图。见谅,无干水文一篇,目前我想着开个有关linux系统的博客专栏,发现要有15篇原创技术blog,这篇就先用来顶了,以后有机会补充分享有关raid的东西!


简单梳理RAID算法

     什么是RAID?如上图可知RAID所处Linux-IO协议栈的位置,介于通用块层与IO调度层,作为Block I/O layer其中的一个功能拓展模块,正常数据流通不必要经过RAID层。既然是Linux-IO栈中的拓展模块,必定服务于数据IO,其功能:对于要从文件系统下发至实际磁盘的bio来说,它相当于做了一层IO过滤。RAID实现获取和处理bio数据的接口,并实现将RAID阵列以标准块设备的形式提供给Applictions访问,用户也可基于可视化的阵列通过格式化Block-based文件系统使用,如:xfs、ext4以及btrfs等。而对于RAID组件?采取组件方式方便了阵列管理和功能扩展,有个比喻很恰当:面向对象思想,md相当于基类,而raid5(或raid4、raid6等)类似于子类,在继承了基类属性及方法的同时又实现了私有方法,解决业务逻辑。


简单梳理RAID算法


简单梳理RAID算法


简单梳理RAID算法


简单梳理RAID算法

P+Q算法伪代码:
    <1>、生成正反对数列表
    /*MOD_NUM: 2^(w)
     *     w      MOD_NUM    Polynomials                     T_mod_num 
     *     w=4    2^4=16      2^4 + 2^1 + 1              =    19
     *     w=8    2^8=256     2^8 + 2^4 + 2^3 + 2^2 + 1  =    285
     *     w=16   2^16=65536  2^16 + 2^12 + 2^3 + 2 + 1  =    69643
     *     w=32   2^32=...      2^32 + x^22 + x^2 + x + 1  =    ... 
     *     ...
     **/
    TEMP_FILOG_data
    FILOG[0]=1  
    FOR i=0 to MOD_NUM-1
    TEMP_FILOG_data =FLOG[i-1]*2
    If FLOG & MOD_NUM
        FLOG^=T_mod_num
    FILOG[i] = TEMP_FILOG_data
    FLOG[FILOG[i]] = i

<2>、查表编码
    example: FOR a stripe_head

    查表乘编码:
    RETURN FILOG[(log[A]+log[B]) % (MOD_NUM-1)]
    查表除编码:
    RETURN FILOG[(log[A]-log[B]] + (MOD_NUM-1)) % (MOD_NUM-1)]

P+Q简单测试代码可移步github:非原创
https://github.com/Jeoos/jecortech/tree/master/Raid6_PQ/alg_02/alg_256

相关标签: RAID算法