BRICS

BRICS - Bit Flip Resilience for In-Memory Column Stores

Research project on detecting and correcting transient hardware errors (bit flips) during query processing in main-memory-centric database systems (especially, column stores).

View the Project on GitHub

Coding Reliability

On these pages we provide our findings and results regarding code reliability. More contents will follow in the near future.

AN Coding

For AN coding, the choice of the code parameter is the most crucial part. As it turned out in our studies, for each data bit width each A behaves differently! Since in-memory database systems operate on each individual data width ranging from 1 to 32 bits, we had to compute the “goodness” of each A for all these bit widths.

For a given and data bit width , we can compute the probability of silent data corruption (SDC) for a certain bit flip weight . This means, how likely it is for a specific AN code (with given and ) that a -bit flip results in another code word and is therefore not detectable.

For each combination of data bit width () and bit width of the parameter () we want a “best” . We define “goodness” as giving a maximum lower bound of the detectable bit flip weight. In other words, it is those which generate AN codes of width with largest minimal Hamming distance. For each combination of and , there is typically a set of candidate s, from which the best needs to be selected. To select a single best , you can define optimization functions and an optimality criterion. In our case, we define two optimization functions:

  1. For a given data width and some , this functions returns the lower bound of the detectable bit flip weight:

    This essentially defines the candidate set.
  2. From that candidate set, we select that which has the lowest first non-zero probability of silent data corruption (SDC):

Using these target functions, we define our optimization problem:

It takes all (computed) s of a given parameter bit width () and checks for the largest minimal detectable bit flip weight (the guarantee to detect all -bit flips, with maximum x among the available s) and the smallest first non-zero SDC probability.

In the following four tables we list all of the golden s determined through the above optimization problem. In small font and parantheses we also list for the given combination of and the minimal detectable bit flip weight.

$$|A|$$ $$k$$
1 2 3 4 5 6 7 8
2 3 (1) 3 (1) 3 (1) 3 (1) 3 (1) 3 (1) 3 (1) 3 (1)
3 7 (2) 7 (1) 7 (1) 7 (1) 7 (1) 7 (1) 7 (1) 7 (1)
4 15 (3) 13 (2) 13 (1) 13 (1) 13 (1) 13 (1) 13 (1) 13 (1)
5 31 (4) 29 (2) 29 (2) 27 (2) 29 (2) 29 (2) 29 (2) 29 (2)
6 63 (5) 53 (3) 45 (3) 45 (2) 45 (2) 45 (2) 59 (2) 59 (2)
7 127 (6) 117 (3) 117 (3) 89 (3) 117 (3) 115 (2) 115 (2) 115 (2)
8 255 (7) 213 (4) 229 (3) 229 (3) 233 (3) 233 (3) 217 (3) 233 (3)
9 511 (8) 469 (4) 467 (4) 467 (3) 443 (3) 471 (3) 471 (3) 487 (3)
10 1023 (9) 853 (5) 917 (4) 933 (4) 933 (4) 809 (3) 933 (3) 857 (3)
11 2047 (10) 1877 (5) 1837 (5) 1867 (4) 1909 (4) 1899 (4) 1803 (4) 1939 (4)
12 4095 (11) 3285 (6) 3673 (5) 3737 (4) 3787 (4) 3813 (4) 3813 (4) 3813 (4)
13 8191 (12) 6613 (6) 7349 (6) 6777 (5) 7085 (5) 7837 (5) 7637 (4) 7463 (4)
14 16383 (13) 13141 (7) 13779 (6) 14937 (5) 15221 (5) 14159 (5) 13963 (5) 13963 (5)
15 32767 (14) 26453 (7) 23733 (7) 31385 (6) 31373 (6) 31373 (5) 27247 (5) 27247 (5)
16 65535 (15) 52565 (8) 56501 (7) 47729 (6) 59973 (6) 62739 (6) 55831 (6) 55831 (6)
$$|A|$$ $$k$$
9 10 11 12 13 14 15 16
2 3 (1) 3 (1) 3 (1) 3 (1) 3 (1) 3 (1) 3 (1) 3 (1)
3 7 (1) 7 (1) 7 (1) 7 (1) 7 (1) 7 (1) 7 (1) 7 (1)
4 13 (1) 13 (1) 13 (1) 13 (1) 13 (1) 13 (1) 13 (1) 13 (1)
5 29 (2) 29 (1) 29 (1) 29 (1) 29 (1) 29 (1) 29 (1) 29 (1)
6 61 (2) 61 (2) 61 (2) 61 (2) 61 (2) 61 (2) 61 (2) 61 (2)
7 123 (2) 123 (2) 123 (2) 123 (2) 123 (2) 119 (2) 119 (2) 119 (2)
8 185 (3) 185 (3) 233 (2) 215 (2) 215 (2) 233 (2) 233 (2) 233 (2)
9 487 (3) 451 (3) 451 (3) 463 (3) 463 (3) 463 (3) 463 (3) 463 (3)
10 857 (3) 857 (3) 857 (3) 857 (3) 947 (3) 947 (3) 947 (3) 947 (3)
11 1939 (4) 1939 (3) 1939 (3) 1939 (3) 1939 (3) 1939 (3) 1939 (3) 1939 (3)
12 3621 (4) 3739 (4) 3739 (4) 3737 (4) 3349 (4) 3349 (3) 3349 (3) 3349 (3)
13 5729 (4) 6717 (4) 6717 (4) 6717 (4) 7413 (4) 6717 (4) 7785 (4) 7785 (4)
14 15717 (5) 15469 (4) 14139 (4) 14139 (4) 14139 (4) 14139 (4) 14139 (4) 14781 (4)
15 27425 (5) 27425 (5) 27425 (5) 29925 (5) 27825 (5) 28619 (4) 28183 (4) 28183 (4)
16 55831 (6) 59965 (5) 58901 (5) 62749 (5) 62749 (5) 63877 (5) 63877 (5) 63877 (5)
$$|A|$$ $$k$$
17 18 19 20 21 22 23 24
2 3 (1) 3 (1) 3 (1) 3 (1) 3 (1) 3 (1) 3 (1) 3 (1)
3 7 (1) 7 (1) 7 (1) 7 (1) 7 (1) 7 (1) 7 (1) 7 (1)
4 13 (1) 13 (1) 13 (1) 13 (1) 13 (1) 13 (1) 13 (1) 13 (1)
5 29 (1) 29 (1) 29 (1) 29 (1) 29 (1) 29 (1) 29 (1) 29 (1)
6 61 (2) 61 (2) 61 (2) 61 (2) 61 (2) 61 (2) 61 (2) 61 (2)
7 119 (2) 111 (2) 111 (2) 111 (2) 111 (2) 111 (2) 111 (2) 111 (2)
8 233 (2) 233 (2) 233 (2) 233 (2) 233 (2) 237 (2) 237 (2) 237 (2)
9 393 (3) 393 (2) 393 (2) 393 (2) 423 (2) 423 (2) 423 (2) 423 (2)
10 947 (3) 947 (3) 947 (3) 985 (3) 985 (3) 985 (3) 985 (3) 981 (3)
11 1909 (3) 1909 (3) 1939 (3) 1939 (3) 1909 (3) 1939 (3) 1939 (3) 1939 (3)
12 3349 (3) 3349 (3) 3349 (3) 3091 (3) 3091 (3) 3091 (3) 3091 (3) 3829 (3)
13 7785 (4) 7785 (4) 7985 (4) 7985 (4) 6311 (3) 6311 (3) 6311 (3) 6311 (3)
14 14781 (4) 15207 (4) 16089 (4) 16089 (4) 15507 (4) 15993 (4) 15993 (4) 15993 (4)
15 32343 (4) 32343 (4) 32343 (4) 32343 (4) 30987 (4) 30987 (4) 30987 (4) 29675 (4)
16 63859 (5) 63859 (5) 58659 (4) 58659 (4) 58659 (4) 58659 (4) 58659 (4) 64311 (4)
$$|A|$$ $$k$$
25 26 27 28 29 30 31 32
2 3 (1) 3 (1) 3 (1) 3 (1) 3 (1) 3 (1) 3 (1) 3 (1)
3 7 (1) 7 (1) 7 (1) 7 (1) 7 (1) 7 (1) 7 (1) 7 (1)
4 13 (1) 13 (1) 13 (1) 13 (1) 13 (1) 13 (1) 13 (1) 13 (1)
5 29 (1) 29 (1) 29 (1) 29 (1) 29 (1) 29 (1) 29 (1) 29 (1)
6 61 (1) 61 (1) 61 (1) 61 (1) 61 (1) 61 (1) 61 (1) 61 (1)
7 111 (2) 111 (2) 111 (2) 111 (2) 111 (2) 125 (2) 125 (2) 125 (2)
8 225 (2) 225 (2) 225 (2) 225 (2) 225 (2) 225 (2) 225 (2) 225 (2)
9 423 (2) 423 (2) 423 (2) 423 (2) 423 (2) 445 (2) 445 (2) 445 (2)
10 981 (3) 981 (3) 951 (3) 951 (3) 835 (3) 835 (3) 881 (3) 881 (3)
11 1939 (3) 1939 (3) 1939 (3) 1939 (3) 1939 (3) 1939 (3) 2029 (3) 2029 (3)
12 3829 (3) 3829 (3) 3829 (3) 3829 (3) 3829 (3) 3829 (3) 3973 (3) 3973 (3)
13 6311 (3) 7841 (3) 7841 (3) 7841 (3) 7841 (3) 7841 (3) 7841 (3) 7841 (3)
14 15685 (4) 15203 (4) 15203 (4) 15203 (3) 15203 (3) 15203 (3) 15203 (3) 15331 (3)
15 29685 (4) 29685 (4) 29685 (4) 29685 (4) 29685 (4) 30597 (4) 30221 (4) 30221 (4)
16 64311 (4) 64311 (4) 64311 (4) 64311 (4) 64311 (4) 64311 (4) 64311 (4) 64311 (4)

Contributing and Feedback

GitHub / brics-db / coding_reliability

Please feel free to fork on github, send pull requests, and file issues in the issue tracker.

Disclosure

The SVG image for the link to the GitHub page is taken from GitHub.