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 = ; i < m; i++) { 

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

          matrix[i*k+j] = galois_single_divide(, 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)

  • 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的编码矩阵。

Jerasure库接口简介及性能测试的更多相关文章

  1. Jerasure库简介及使用范例

    刚刚写这篇文章之前看了下上一篇博客的时间:2013年7月19日.居然已经过了3个月了!好快!感叹时间的同时不由的又感叹了下自己的懒惰,其实仔细想想,这段时间自己也做了很多事情: 完成了一篇副本同步相关 ...

  2. Robot Framework(十五) 扩展RobotFramework框架——远程库接口

    4.2远程库接口 远程库接口提供了在运行Robot Framework本身的机器上运行测试库的方法,以及使用除本机支持的Python和Java之外的其他语言实现库的方法.对于测试库,用户远程库看起来与 ...

  3. Linux中的IO复用接口简介(文件监视?)

    I/O复用是Linux中的I/O模型之一.所谓I/O复用,指的是进程预先告诉内核,使得内核一旦发现进程指定的一个或多个I/O条件就绪,就通知进程进行处理,从而不会在单个I/O上导致阻塞. 在Linux ...

  4. Raphael Js矢量库API简介:

    Raphael Js矢量库API简介:Raphael Javascript 是一个 Javascript的矢量库. 2010年6月15日,著名的JavaScript库ExtJS与触摸屏代码库项目jQT ...

  5. java多线程Lock接口简介使用与synchronized对比 多线程下篇(三)

    前面的介绍中,对于显式锁的概念进行了简单介绍 显式锁的概念,是基于JDK层面的实现,是接口,通过这个接口可以实现同步访问 而不同于synchronized关键字,他是Java的内置特性,是基于JVM的 ...

  6. c++ 日志输出库 spdlog 简介(1)

    参考文章: log库spdlog简介及使用 - 网络资源是无限的 - CSDN博客 http://blog.csdn.net/fengbingchun/article/details/78347105 ...

  7. SoapUI SoapUI测试WebService协议接口简介

    SoapUI测试WebService协议接口简介 by:授客 QQ:1033553122 1. 创建项目,入口:File -> New SOAP Project,或者右键默认项目Project- ...

  8. SQLite3 C/C++ 开发接口简介

    SQLite3 C/C++ 开发接口简介 1.0 总览 SQLite3是SQLite一个全新的版本,它虽然是在SQLite 2.8.13的代码基础之上开发的,但是使用了和之前的版本不兼容的数据库格式和 ...

  9. soapUI 使用soapUI测试http+json协议接口简介

    使用soapUI测试http+json协议接口简介 by:授客 QQ:1033553122 SoapUI-Pro-x64-5.1.2_576025(含破解文件),软件下载地址: http://pan. ...

随机推荐

  1. 洛谷 P1996 约瑟夫问题

    题目背景 约瑟夫是一个无聊的人!!! 题目描述 n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出 ...

  2. LinuxShell(脚本如何编译问题)

    想学shell的同学请记住: 如果你写好脚本后不给脚本执行权限那也是不行的: 添加执行权限: chmod +x 脚本名.sh 在Linux shell中有一个脚本编译命令: bash -v 脚本名.s ...

  3. myna代码

    https://github.com/TalkingData/Myna/tree/master/Dataset https://github.com/TalkingData/Myna

  4. Java调用存储过程出现Bug,sql语法错误

    因为SQL Server运行没有正常,检查了传入参数的值,发现问题,然后传入默认参数,解决了问题.

  5. Codeforces 1012A Photo of The Sky

    作为一个蒟蒻,\(\tt{CF}\)止步\(Div.2\;C\) 这个题主要考察思维,正解代码炒鸡短-- 以下大部分搬运自官方题解 题目大意: 给你一段长度为\(2n\)的数列,将这个数列分为两个可重 ...

  6. iOS Crash

    常见原因及解决方法: 1. 访问数组类对象越界或插入了空对象NSMutableArray/NSMutableDictionary/NSMutableSet 等类下标越界,或者 insert 了一个 n ...

  7. Luogu P3727 曼哈顿计划E 点分治+hash

    题目: P3727曼哈顿计划E 分析: 大长题面容易给人一种不可做的错觉,但是这题考的知识点都是我们熟悉的. 稍加分析我们可以得到,我们可以把每个点当成一个单独的游戏,如果k=1,就是简单的nim游戏 ...

  8. 【Java_多线程并发编程】基础篇—线程状态及实现多线程的两种方式

    1.Java多线程的概念 同一时间段内,位于同一处理器上多个已开启但未执行完毕的线程叫做多线程.他们通过轮寻获得CPU处理时间,从而在宏观上构成一种同时在执行的假象,实质上在任意时刻只有一个线程获得C ...

  9. 【Java_基础】cmd下使用java命令运行class文件提示“错误:找不到或无法加载主类“的问题分析

    1.问题如下 当在命令行使用java命令执行字节码文件时提示“错误:找不到或无法加载主类” 2. 问题分析 这是由于在运行时类的全名应该是包名+类名,例如在包net.xsoftlab.baike下的类 ...

  10. (2)zabbix硬件需求

    1. 硬件需求 无非就是cpu.内存.硬盘之类的1.1 CPU由你的zabbix数据库使用情况来做决定,如果你监控的项目越多,那你的cpu要越好.具体多好,下面有个表格 1.2 内存与硬盘最基本的需求 ...