Jerasure库接口简介及性能测试

时间:2017-03-02 17:00:29   收藏:0   阅读:319

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

 

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

Reed-Solomon编解码接口

1)     编码矩阵生成

// generate matrix, last m rows 

  matrix = talloc(int, m*k); 

  for (i = 0; i < m; i++) { 

for (j = 0; j < k; j++) { 

     matrix[i*k+j] = galois_single_divide(1, i ^ (m + j), w); 

     } 

  } 

2)编码接口

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

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)

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

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

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

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)

        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)

5)Cauchy Reed-Solomon编解码接口

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

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

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

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

原文:http://www.cnblogs.com/sylar5/p/6490993.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!