Git Product home page Git Product logo

Comments (3)

darrenldl avatar darrenldl commented on June 14, 2024

Clarification : using Reed-Solomon as erasure code rather than error correction code for easier implementation (can translate from implementation done by Backblaze : https://github.com/Backblaze/JavaReedSolomon)

The error detection scheme remains to be decided : using a SBX block as base unit vs using smaller blocks within SBX block as base unit.

The former allows error correction of the entire file, but not useful if all blocks are a bit corrupted thus failing the CRC checks.
The latter allows error correction of each individual SBX block, but need extra CRC codes for all smaller blocks within individual SBX blocks.

from ocaml-seqbox.

darrenldl avatar darrenldl commented on June 14, 2024

Progress update

Finished Galois module for the finite field calculation stuff
Finished Reed-Solomon matrix module
Reed-Solomon module still needs a lot of work

Gonna come back later after a few days of break

Note to self

  • May want to change Galois stuff from using int to using bytes/char
  • Current setup requires conversion from string/bytes to int in order to do RS calculations, this may be slow
  • Klaus Post's Go implementation achieves 1GB/s per core, Backblaze's Java Implementation achieves 500MB/s
  • SBx encoding currently takes quite a while anyway due to CRC and crypto hashing and not optimized for speed(around 50MB/s), so no need to try to catch up really
  • Add is_reedsolomon_enabled predicate for common_params in sbx_blocks, which just returns true for the RS enabled versions, and use this predicate for reworking encode, decode module
  • Not much to do for rescue or show module, maybe show more metadata regarding RS stuff
  • Add RSC field to metadata block to indicate percentage of redundancy
  • User should express redundancy as percentage in integer in [1, 100], same as parchive2
  • Calculate RS stuff per 100 blocks, let n be the percentage, then arrangement of every 100 + n blocks = 100 data blocks + n parity blocks. Do things slightly differently if fewer than 100 blocks remain, use function below
calc_parity_blocks_number (blocks_remaining : int) (redundancy_percent : int) : int =
  (* use integer ceiling *)
  ((min 100 blocks_remaining) * redundancy_percent + 100 - 1) / 100
  • Look into randomizing block ordering maybe, this will complicate encode module somewhat, but encode module is well written enough to add some changes(only need to modify encoder generation part)
  • Look into allowing specification of a separate metadatablock file during decoding, this will complicate current reference block logic somewhat, but shouldn't be too bad since some decoder generation code can be reused

from ocaml-seqbox.

darrenldl avatar darrenldl commented on June 14, 2024

Development effort now directed towards rsbx.

Osbx is now under maintenance mode.

Closing all issues related to adding features.

from ocaml-seqbox.

Related Issues (7)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.