Jerasure库接口简介及性能测试
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库接口简介及性能测试的更多相关文章
- Jerasure库简介及使用范例
刚刚写这篇文章之前看了下上一篇博客的时间:2013年7月19日.居然已经过了3个月了!好快!感叹时间的同时不由的又感叹了下自己的懒惰,其实仔细想想,这段时间自己也做了很多事情: 完成了一篇副本同步相关 ...
- Robot Framework(十五) 扩展RobotFramework框架——远程库接口
4.2远程库接口 远程库接口提供了在运行Robot Framework本身的机器上运行测试库的方法,以及使用除本机支持的Python和Java之外的其他语言实现库的方法.对于测试库,用户远程库看起来与 ...
- Linux中的IO复用接口简介(文件监视?)
I/O复用是Linux中的I/O模型之一.所谓I/O复用,指的是进程预先告诉内核,使得内核一旦发现进程指定的一个或多个I/O条件就绪,就通知进程进行处理,从而不会在单个I/O上导致阻塞. 在Linux ...
- Raphael Js矢量库API简介:
Raphael Js矢量库API简介:Raphael Javascript 是一个 Javascript的矢量库. 2010年6月15日,著名的JavaScript库ExtJS与触摸屏代码库项目jQT ...
- java多线程Lock接口简介使用与synchronized对比 多线程下篇(三)
前面的介绍中,对于显式锁的概念进行了简单介绍 显式锁的概念,是基于JDK层面的实现,是接口,通过这个接口可以实现同步访问 而不同于synchronized关键字,他是Java的内置特性,是基于JVM的 ...
- c++ 日志输出库 spdlog 简介(1)
参考文章: log库spdlog简介及使用 - 网络资源是无限的 - CSDN博客 http://blog.csdn.net/fengbingchun/article/details/78347105 ...
- SoapUI SoapUI测试WebService协议接口简介
SoapUI测试WebService协议接口简介 by:授客 QQ:1033553122 1. 创建项目,入口:File -> New SOAP Project,或者右键默认项目Project- ...
- SQLite3 C/C++ 开发接口简介
SQLite3 C/C++ 开发接口简介 1.0 总览 SQLite3是SQLite一个全新的版本,它虽然是在SQLite 2.8.13的代码基础之上开发的,但是使用了和之前的版本不兼容的数据库格式和 ...
- soapUI 使用soapUI测试http+json协议接口简介
使用soapUI测试http+json协议接口简介 by:授客 QQ:1033553122 SoapUI-Pro-x64-5.1.2_576025(含破解文件),软件下载地址: http://pan. ...
随机推荐
- HDU 3377 Plan (插头DP,变形)
题意:有一个n*m的矩阵,每个格子中有一个值(可能负值),要从左上角走到右下角,求路径的最大花费. 思路: 除了起点和终点外,其他的点可以走,也可以不走. (2)我用的是括号表示法,所以起始状态为') ...
- POJ 2831 Can We Build This One?
Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 1728 Accepted: 643 Case Time Limit: 2 ...
- COGS 1786. 韩信点兵
★★★ 输入文件:HanXin.in 输出文件:HanXin.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] 韩信是中国军事思想“谋战”派代表人物,被后人奉为“ ...
- codevs 2618 核电站问题
时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 一个核电站有N个放核物质的坑,坑排列在一条直线上.如果连续M个坑中放入核物质,则会 ...
- codevs 1155 金明的预算方案
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房 ...
- 优先队列的使用——Expedition
一.题目描述 你需要驾驶一辆卡车行驶L单位距离.最开始时,卡车上有P单位的汽油.卡车每开1单位距离需要消耗1单位的汽油.如果在途中车上的汽油耗尽,卡车就无法继续前行,因而无法到达终点.中途共有N个加油 ...
- flex常用属性
<1>align-items: 垂直方向的对齐方式 align-items: stretch(拉伸,布满父容器) | center(垂直居中) | flex-start(上对齐) | fl ...
- Open Scene Graph:让VS支持不含后缀的头文件
让VS支持不含后缀的头文件 看OSG源码时,会遇到不含后缀的头文件无定位信息的尴尬,很让人苦恼. 就是单击VS中“工具菜单栏”——>”选项(O)….”如下图所示: 菜单项,弹出选项对话框,单击“ ...
- AOP日志组件 多次获取post参数
AOP日志组件 多次获取post参数 需求:新增接口日志组件.通过拦截器对接口URL进行拦截处理,然后将接口post请求的参数与结果,写入日志表. 问题:POST方法的参数是存储在request.ge ...
- Mac 电源管理
在安装BatteryManager后,可以删除NullPowerMananger,AppleIntelPowerMananger, AppleIntelPowerClientMananger三个kex ...