zoukankan      html  css  js  c++  java
  • Jerasure库接口简介及性能测试

    http://blog.chinaunix.net/uid-20196318-id-3277600.html

    Jerasure库提供Reed-Solomon和Cauchy Reed-Solomon两种编码算法的实现.

    Reed-Solomon编解码接口

    1)     编码矩阵生成

     1 // generate matrix, last m rows 
     2 
     3   matrix = talloc(int, m*k); 
     4 
     5   for (i = 0; i < m; i++) { 
     6 
     7     for (j = 0; j < k; j++) { 
     8 
     9          matrix[i*k+j] = galois_single_divide(1, i ^ (m + j), w); 
    10 
    11      } 
    12 
    13   } 

    2)编码接口

    void jerasure_matrix_encode(int k, int m, int w, int *matrix,  char **data_ptrs, char **coding_ptrs, int size)

    • k: 数据块个数
    • m: 校验块个数
    • w: WORD SIZE
    • matrix:编码矩阵 (m*k,上面的k*k为单位阵)
    • data_ptrs:数据块指针 (长度为k的指针数组)
    • coding_ptrs:校验块指针(长度为m的指针数组)
    • size:数据块大小(必须是sizeof(long)的倍数)

    3)解码接口

    根据存活的块,恢复出所有的数据块,如果有校验块丢失,最后会根据数据块计算出对应的校验块。

    int jerasure_matrix_decode(int k, int m, int w, int *matrix, int row_k_ones, int *erasures, char **data_ptrs, char **coding_ptrs, int size)

    • k: 数据块个数
    • m: 校验块个数
    • w: WORD SIZE
    • matrix:编码矩阵 (m*k,上面的k*k为单位阵)
    • row_k_ones: 编码的第一行是否全为1,用于优化
    • erasueres: 记录哪些块丢失了,长度超过m则不能恢复,以-1做为结束标识

           erasures[0] = 0; // 第0个块丢失

    erasures[1] = 3; // 第3个块丢失

    erasures[2] = -1; // -1, 结束标识 

    • data_ptrs:数据块指针
    • coding_ptrs:校验块指针
    • size:数据块大小(必须是sizeof(long)的倍数)

    4)恢复指定块

    如果只丢失一个数据块,要运用3中的接口,则必须获取到前k个存活的块;要想使用任意K个块恢复丢失的某个数据,可先根据存活的块,计算出解码矩阵,运用矩阵乘法恢复出指定块的数据。

    int jerasure_make_decoding_matrix(int k, int m, int w, int *matrix, int *erased,  int *decoding_matrix, int *dm_ids)

    • k: 数据块个数
    • m: 校验块个数
    • w: WORD SIZE
    • matrix:编码矩阵 (m*k,上面的k*k为单位阵)
    • erased:记录哪些块丢失,1代表存活,0代表丢失

            for (i = 0; i < m + k; i++) erased[i] = 0; 
          erased[0] = 1; // 第0个块丢失 
          erased[1] = 1; // 第1个块丢失 

      decoding_matrix: 解码矩阵(输出)

      dm_ids: 存储的数据块 (输出)

    void jerasure_matrix_dotprod(int k, int w, int *matrix_row,

    int *src_ids, int dest_id, char **data_ptrs, char **coding_ptrs, int size)

    • k: 数据块个数
    • w: WORD SIZE
    • matrix_row:解码矩阵,使用上一步的输出decoding_matrix
    • src_ids: 运用哪些块计算,直接使用上一步的输出dm_ids
    • dest_id: 计算目标块号
    • data_ptrs: 数据块指针
    • coding_ptrs: 校验块指针
    • size: 数据块大小

    5)Cauchy Reed-Solomon编解码接口

    接口及使用方式与Reed-Solomon的类似,对应的接口分别为: 

    • jerasure_bitmatrix_encode // 编码
    • jerasure_bitmatrix_decode // 解码
    • jerasure_make_decoding_bitmatrix // 生成解码矩阵
    • jerasure_bitmatrix_dotprod // 矩阵相乘,计算指定行的数据

    不同的是,Cauchy Reed-Solomon使用的编码矩阵需要先经过转化。

    int *jerasure_matrix_to_bitmatrix(int k, int m, int w, int *matrix)

    • k: 数据块个数
    • m: 校验块个数
    • w: WORD SIZE
    • matrix:RS编码矩阵 (m*k,上面的k*k为单位阵)

    返回值即为Cauchy Reed-Solomon的编码矩阵。

  • 相关阅读:
    Charles抓https请求详细步骤
    【转载】http proxy原理
    Mac使用笔记大全
    Android自动化之Monkey测试(二)
    Android自动化之Monkey环境搭建(一)
    解决删除镜像时image is referenced in multiple repositories
    SQL Injection-Http请求的参数中对特殊字符的处理
    Python 同一文件中,有unittest不执行“if __name__ == '__main__”,不生成HTMLTestRunner测试报告的解决方案
    Spring Boot-右键maven build成功但是直接运行main方法出错的解决方案
    maven+ssm项目环境搭建后测试404
  • 原文地址:https://www.cnblogs.com/sylar5/p/6490993.html
Copyright © 2011-2022 走看看