日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Jerasure库接口简介及性能测试

發布時間:2025/7/25 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Jerasure库接口简介及性能测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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)

  • 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: 數據塊大小


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的編碼矩陣。


編解碼性能測試

使用Reed-Solomon(RS)和Cauchy Reed-Solomon(CRS)分別進行編解碼測試。

Intel(R) Xeon(R) CPU E5310 @ 1.60GHz 4 cores


1. 編碼不同大小的數據

上圖為使用RS和CRS分別編解碼1M-10M大小的數據,可以看出,編碼的時間與編碼數據大小成正比,并且編解碼的時間基本相同,使用RS編碼1M的數據耗時約為114ms,使用CRS編碼1M的數據耗時約為37ms。


2. 采用不同的WORD SIZE編碼

上圖為RS和CRS分別使用WORD SIZE為8、16、32來編解碼1M的數據(RS、CRS要求m+k<2^w),RS在WORD SIZE為16時性能最佳,而CRS在WORD SIZE為8時性能最佳。


3. 采用不同的數據塊數

上圖為RS和CRS在數據塊數分別為4-10,校驗塊數為2(容2錯)的情況下編解碼1M的數據,可以看出,數據塊數越多(存儲成本越低),編解碼時間越長。


4. CRS采用不同的packet size

上圖為CRS在不同的packet size情況下編解碼1M的數據(RS無此參數, CRS要求size % (w * packet_size) == 0),可以看出,但packet size較小時,packet size的增加極大的降低了編解碼的時間,而當packet size增加至1024及以上時,packet size的增加對編解碼時間影響不大。


轉載于:https://www.cnblogs.com/yunnotes/archive/2013/04/19/3032308.html

總結

以上是生活随笔為你收集整理的Jerasure库接口简介及性能测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。