๐Ÿง  DRAM

Hamming Code

๊ฐœ์š”

Hamming Code๋Š” ๋ฐ์ดํ„ฐ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ parity bit๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ , ๊ฐ parity๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ์œ„์น˜ ์ง‘ํ•ฉ์„ ๊ฒ€์‚ฌํ•˜๋„๋ก ๋งŒ๋“  binary linear block code์ž…๋‹ˆ๋‹ค. ์ˆ˜์‹  ์ธก์€ parity ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ๋ฅผ syndrome์œผ๋กœ ๋ฌถ์–ด ์˜ค๋ฅ˜๊ฐ€ ๋‚œ bit์˜ ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ Hamming code์˜ ์ตœ์†Œ ๊ฑฐ๋ฆฌ๋Š” 3์ด๋ฏ€๋กœ single-bit error๋ฅผ ์ •์ •ํ•˜๊ณ  double-bit error๋ฅผ ๊ฒ€์ถœํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ •์ •์„ ์ˆ˜ํ–‰ํ•˜๋Š” decoder๊ฐ€ double-bit error๋ฅผ ํ•ญ์ƒ ๊ตฌ๋ถ„ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ์‹œ์Šคํ…œ์—์„œ๋Š” Hamming code์— ์ „์ฒด parity bit๋ฅผ ํ•˜๋‚˜ ๋”ํ•œ extended Hamming code๊ฐ€ ๋„๋ฆฌ ์•Œ๋ ค์ง„ SECDED(Single-Error Correction, Double-Error Detection) ๋ชจ๋ธ์„ ์ด๋ฃน๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 64-bit data word์— 7๊ฐœ์˜ ์œ„์น˜ parity์™€ 1๊ฐœ์˜ overall parity๋ฅผ ๋”ํ•˜๋ฉด 72-bit codeword๊ฐ€ ๋˜๋ฉฐ, ์ด๋Š” ์ „ํ†ต์ ์ธ ECC DIMM์˜ 64+8 ๊ตฌ์„ฑ๊ณผ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์‹ค์ œ ์„œ๋ฒ„ controller๋Š” Hamming๊ณผ ๋™๋“ฑํ•œ ํ™•์žฅ ์ฝ”๋“œ, Hsiao Code, symbol-based ECC ๋“ฑ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ "ECC DIMM = ํ•ญ์ƒ ๋™์ผํ•œ Hamming ํ–‰๋ ฌ"๋กœ ํ•ด์„ํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

Hamming codeword layout and parity coverage

๊ทธ๋ฆผ 1. Hamming(7,4)์˜ ์œ„์น˜ parity์™€ overall parity๋ฅผ extended codeword๋กœ ํ™•์žฅํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค. ์œ„์น˜ parity์˜ ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ๋Š” syndrome์„ ๋งŒ๋“ค๊ณ , overall parity๋Š” single-bit์™€ double-bit ์˜ค๋ฅ˜๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ์ถ”๊ฐ€ ์ •๋ณด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๊ฐœ๋…

์ฝ”๋“œ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ Hamming distance

[n, k, d] ํ‘œ๊ธฐ์—์„œ n์€ codeword ์ „์ฒด bit ์ˆ˜, k๋Š” data bit ์ˆ˜, d๋Š” codeword ์‚ฌ์ด์˜ ์ตœ์†Œ Hamming distance์ž…๋‹ˆ๋‹ค. parity bit๊ฐ€ r๊ฐœ์ผ ๋•Œ ์ž„์˜์˜ single-bit error ์œ„์น˜์™€ no-error ์ƒํƒœ๋ฅผ ๊ตฌ๋ณ„ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์กฐ๊ฑด์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

2^r >= k + r + 1

์ผ๋ฐ˜์ ์ธ ์™„์ „ Hamming code๋Š” n = 2^r - 1, k = 2^r - r - 1, d = 3์ธ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— codeword ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ ๋” ๊ฒ€์‚ฌํ•˜๋Š” overall parity bit๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ตœ์†Œ ๊ฑฐ๋ฆฌ๊ฐ€ 4๊ฐ€ ๋˜์–ด extended Hamming code๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ data k ์œ„์น˜ parity r overall parity ์ „์ฒด n ์ตœ์†Œ ๊ฑฐ๋ฆฌ ๋ณด์žฅ ๋ฒ”์œ„
Hamming(7,4) 4 3 ์—†์Œ 7 3 1-bit ์ •์ •, 2-bit ๊ฒ€์ถœ ๋˜๋Š” ์ •์ •ํ•˜์ง€ ์•Š๋Š” ๊ฒ€์ถœ
Extended Hamming(8,4) 4 3 1 8 4 1-bit ์ •์ •, 2-bit ๊ฒ€์ถœ
ECC word ์˜ˆ์‹œ 32 6 1 39 4 SECDED
ECC word ์˜ˆ์‹œ 64 7 1 72 4 SECDED

์ตœ์†Œ ๊ฑฐ๋ฆฌ 4๋Š” ๋‘ bit ์˜ค๋ฅ˜์™€ ํ•œ bit ์˜ค๋ฅ˜๋ฅผ decoder๊ฐ€ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค๋‹ˆ๋‹ค. ๋‹จ, ์„ธ bit ์ด์ƒ ์˜ค๋ฅ˜๊นŒ์ง€ ํ•ญ์ƒ ๊ฒ€์ถœํ•˜๊ฑฐ๋‚˜ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ •์ •ํ•œ๋‹ค๋Š” ๋œป์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ผ๋ถ€ ์„ธ bit ์˜ค๋ฅ˜๋Š” single-bit ์˜ค๋ฅ˜์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, SECDED์˜ ๋ณด์žฅ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„œ๋Š” ์˜ค๋ฅ˜ ๋ชจ๋ธ์—๋Š” ๋ณ„๋„ code๋‚˜ retry ์ •์ฑ…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์œ„์น˜ parity์™€ ๊ฒ€์‚ฌ ๋ฒ”์œ„

bit ์œ„์น˜๋ฅผ 1๋ถ€ํ„ฐ ์„ธ๊ณ , 2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ์ธ ์œ„์น˜๋ฅผ parity bit๋กœ ์˜ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Hamming(7,4)์˜ ๋ฐฐ์น˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์œ„์น˜       1   2   3   4   5   6   7
๋‚ด์šฉ      p1  p2  d1  p4  d2  d3  d4
์ด์ง„ ์œ„์น˜   001 010 011 100 101 110 111

๊ฐ parity bit๋Š” ์ž์‹ ์˜ ์œ„์น˜ bit๊ฐ€ 1์ธ ๋ชจ๋“  ์œ„์น˜๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.

parity ๊ฒ€์‚ฌ ์œ„์น˜ ์˜๋ฏธ
p1 1, 3, 5, 7 ์œ„์น˜ ์ด์ง„ ํ‘œํ˜„์˜ ์ตœํ•˜์œ„ bit๊ฐ€ 1
p2 2, 3, 6, 7 ์œ„์น˜ ์ด์ง„ ํ‘œํ˜„์˜ ๋‘ ๋ฒˆ์งธ bit๊ฐ€ 1
p4 4, 5, 6, 7 ์œ„์น˜ ์ด์ง„ ํ‘œํ˜„์˜ ์„ธ ๋ฒˆ์งธ bit๊ฐ€ 1
p0 1~7 ๋ฐ p0 codeword ์ „์ฒด์˜ overall parity

์ด ๋ฐฐ์น˜์—์„œ๋Š” ๊ฐ codeword bit๊ฐ€ ๊ณ ์œ ํ•œ parity ์กฐํ•ฉ์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฒ€์‚ฌ ์‹คํŒจ๊ฐ€ p1๊ณผ p4์—์„œ ๋ฐœ์ƒํ•˜๋ฉด 1 + 4 = 5๋กœ bit 5๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์‹์œผ๋กœ ์˜ค๋ฅ˜ ์œ„์น˜๋ฅผ ์ˆซ์ž๋กœ ๋ณต์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ๊ตฌํ˜„์—์„œ๋Š” ์ด ๊ณผ์ •์„ parity-check matrix H์™€ XOR ๋„คํŠธ์›Œํฌ๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

ํŒจ๋ฆฌํ‹ฐ ๋ฐฉ์‹๊ณผ ํ–‰๋ ฌ

์ด ๋ฌธ์„œ์˜ ์˜ˆ๋Š” even parity๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๊ฒ€์‚ฌ ์ง‘ํ•ฉ์˜ 1์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ง์ˆ˜๊ฐ€ ๋˜๋„๋ก parity bit๋ฅผ ์„ค์ •ํ•˜๋ฉฐ, odd parity๋ฅผ ์‚ฌ์šฉํ•ด๋„ encoder์™€ decoder๊ฐ€ ๊ฐ™์€ ๊ทœ์น™์„ ๋”ฐ๋ฅด๋ฉด ๊ธฐ๋Šฅ์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜์‹  vector๋ฅผ r์ด๋ผ ํ•  ๋•Œ syndrome์€ ๋‹ค์Œ์ฒ˜๋Ÿผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

s = H * r^T   (์—ฐ์‚ฐ์€ GF(2), ์ฆ‰ XOR)

์ •์ƒ codeword๋Š” s = 0์ž…๋‹ˆ๋‹ค. ํ•œ bit ์˜ค๋ฅ˜๊ฐ€ ์œ„์น˜ i์—์„œ ๋ฐœ์ƒํ•˜๋ฉด syndrome์€ parity-check matrix์˜ i๋ฒˆ์งธ ์—ด์ด ๋˜๋ฉฐ, ํ‘œ์ค€ ์œ„์น˜ ๋ฐฐ์น˜์—์„œ๋Š” ๊ทธ ์—ด์„ ์œ„์น˜ i์˜ ์ด์ง„ ํ‘œํ˜„์œผ๋กœ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐœ ์ด์ƒ์˜ ์˜ค๋ฅ˜์—์„œ๋Š” ์—ฌ๋Ÿฌ ์—ด์˜ XOR๊ฐ€ ๋˜๋ฏ€๋กœ single-bit ์œ„์น˜๋กœ ๋‹จ์ •ํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

Systematic form์—์„œ๋Š” data์™€ parity๋ฅผ ๋‚˜๋ˆ„์–ด ๋‹ค์Œ์ฒ˜๋Ÿผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

H = [ A | I_r ]
P = A * D^T

A๋Š” data bit๊ฐ€ ๊ฐ parity ์‹์— ์ฐธ์—ฌํ•˜๋Š” ์—ฐ๊ฒฐ์„ ๋‚˜ํƒ€๋‚ด๊ณ  I_r์€ parity bit ์ž์‹ ์„ ๊ฒ€์‚ฌํ•˜๋Š” ํ•ญ์ž…๋‹ˆ๋‹ค. Hamming์˜ ํ‘œ์ค€ ์œ„์น˜ ๋ฐฐ์น˜๋Š” ์„ค๋ช…๊ณผ ์ƒ์„ฑ์ด ์‰ฝ๊ณ , Hsiao Code๋Š” ๊ฐ™์€ SECDED ๋ชฉํ‘œ๋ฅผ ๋” ๋‚ฎ์€ XOR ์—ฐ๊ฒฐ ์ˆ˜์™€ ๊ท ํ˜• ์žกํžŒ ํ–‰๋ ฌ๋กœ ๊ตฌํ˜„ํ•˜๋ ค๋Š” ๋ณ€ํ˜•์ž…๋‹ˆ๋‹ค.

Syndrome๊ณผ ์˜ค๋ฅ˜ ๋ชจ๋ธ

syndrome์€ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค๋ณด๋‹ค ์˜ค๋ฅ˜ ์œ„์น˜๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์ •๋ณด์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ syndrome๋งŒ์œผ๋กœ๋Š” ์˜ค๋ฅ˜ ๊ฐœ์ˆ˜๊ฐ€ single์ธ์ง€ double์ธ์ง€ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— extended Hamming์—์„œ๋Š” overall parity ๊ฒฐ๊ณผ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

positional syndrome S overall parity P0 SECDED ํ•ด์„ ์ฒ˜๋ฆฌ
0 0 ์˜ค๋ฅ˜ ์—†์Œ data ํ†ต๊ณผ
0์ด ์•„๋‹˜ 1 1-bit ์˜ค๋ฅ˜๊ฐ€ ์œ„์น˜ parity/data ์œ„์น˜์— ์žˆ์Œ S ์œ„์น˜์˜ bit ๋ฐ˜์ „, CE ๊ธฐ๋ก
0 1 overall parity bit ์ž์ฒด์˜ ์˜ค๋ฅ˜ p0 ๋ฐ˜์ „, data ํ†ต๊ณผ
0์ด ์•„๋‹˜ 0 2-bit ์˜ค๋ฅ˜์˜ ์ •์ • ๋ถˆ๊ฐ€ ํŒจํ„ด ์ •์ •ํ•˜์ง€ ์•Š๊ณ  UE/UCE ์ฒ˜๋ฆฌ

์ด ํ‘œ๋Š” ์ตœ๋Œ€ ๋‘ bit ์˜ค๋ฅ˜๋ผ๋Š” ๊ฐ€์ •์—์„œ์˜ SECDED ํŒ์ •ํ‘œ์ž…๋‹ˆ๋‹ค. S != 0, P0 = 0์„ ๋ชจ๋“  ๋‹ค์ค‘ ์˜ค๋ฅ˜์˜ ์ •ํ™•ํ•œ ์ง„๋‹จ์œผ๋กœ ํ™•๋Œ€ํ•˜๋ฉด ์•ˆ ๋˜๋ฉฐ, ์„ธ bit ์ด์ƒ ์˜ค๋ฅ˜์— ๋Œ€ํ•ด์„œ๋Š” miscorrection ๊ฐ€๋Šฅ์„ฑ์ด ๋‚จ์Šต๋‹ˆ๋‹ค.

๋น„๊ต/๋ถ„์„

ECC ๋ฐฉ์‹ ๋น„๊ต

๋ฐฉ์‹ ๊ธฐ๋ณธ ์˜ค๋ฅ˜ ๋‹จ์œ„ ๋Œ€ํ‘œ ๊ธฐ๋Šฅ ์žฅ์  ํ•œ๊ณ„ ๋ฉ”๋ชจ๋ฆฌ ์—ญํ• 
๋‹จ์ˆœ parity bit ์˜ค๋ฅ˜ ๊ฒ€์ถœ ๊ฐ€์žฅ ๋‚ฎ์€ ๋น„์šฉ ์œ„์น˜๋ฅผ ์ฐพ๊ฑฐ๋‚˜ ์ •์ •ํ•˜์ง€ ๋ชปํ•จ command/address ๋˜๋Š” link ๊ฒ€์‚ฌ ์ผ๋ถ€
Hamming(7,4) bit 1-bit ์ •์ •, 2-bit ๊ฒ€์ถœ ์งง์€ XOR ๊ฒฝ๋กœ, ์„ค๋ช…์ด ์‰ฌ์›€ double-bit๋ฅผ single-bit์™€ ๊ตฌ๋ถ„ํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Œ ์†Œํ˜• ECC, ์ด๋ก ์  ๊ธฐ๋ณธ ๋ชจ๋ธ
Extended Hamming SECDED bit 1-bit ์ •์ •, 2-bit ๊ฒ€์ถœ overall parity๋กœ ์˜ค๋ฅ˜ ๋ถ„๋ฅ˜ chip failure์™€ ๋‹ค์ค‘ ์˜ค๋ฅ˜์— ์•ฝํ•จ 64+8 ์™ธ๋ถ€ ECC์˜ ๊ธฐ๋ณธ ๋ชจ๋ธ
Hsiao SECDED bit SECDED XOR fan-in, ๋ฐฐ์„ ๊ณผ ์ง€์—ฐ ์ตœ์ ํ™” ์—ฌ์ง€ ๋ณด์žฅ ๋ฒ”์œ„๋Š” SECDED์™€ ๋™์ผ ๋ฉ”๋ชจ๋ฆฌ controller ๊ตฌํ˜„ ์„ ํƒ
Reed-Solomon symbol symbol ์˜ค๋ฅ˜์™€ erasure ์ •์ • burst์™€ device ๋‹จ์œ„ ์˜ค๋ฅ˜์— ๊ฐ•ํ•จ GF ์—ฐ์‚ฐ๊ณผ decoder๊ฐ€ ๋ณต์žกํ•จ symbol-based ECC, Chipkill ์„ค๊ณ„
BCH/LDPC bit ๋˜๋Š” soft information ๋‹ค์ค‘ ์˜ค๋ฅ˜ ์ •์ • ๋†’์€ ์˜ค๋ฅ˜์œจ ์ฑ„๋„์— ๊ฐ•ํ•จ ํฐ decoder์™€ latency NAND ๋ฐ ๊ณ ์˜ค๋ฅ˜ ์ €์žฅ ์ฑ„๋„

Hamming๊ณผ Hsiao์˜ ์ฐจ์ด

Hamming code์™€ Hsiao Code๋Š” ๋ชจ๋‘ SECDED์˜ ์ˆ˜ํ•™์  ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ parity-check matrix๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ํ‘œ์ค€ Hamming์€ ์œ„์น˜์˜ ์ด์ง„ ํ‘œํ˜„์„ ์—ด๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๊ทœ์น™์„ฑ์ด ์ข‹์Šต๋‹ˆ๋‹ค. Hsiao๋Š” ์„œ๋กœ ๋‹ค๋ฅธ odd-weight ์—ด์„ ์„ ํƒํ•ด ๊ฐ™์€ data ํญ์—์„œ XOR ์—ฐ๊ฒฐ ์ˆ˜์™€ fan-in์„ ์ค„์ด๋Š” ๋ฐฉํ–ฅ์„ ์ทจํ•ฉ๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ ํ‘œ์ค€ ์œ„์น˜ Hamming Hsiao Code
์—ด ๊ตฌ์„ฑ bit ์œ„์น˜์˜ ์ด์ง„ ํ‘œํ˜„ ์„œ๋กœ ๋‹ค๋ฅธ odd-weight vector
SECDED ๊ธฐ๋Šฅ ๊ฐ€๋Šฅ ๊ฐ€๋Šฅ
์„ค๊ณ„ ๋ชฉํ‘œ ๋‹จ์ˆœํ•œ ์ƒ์„ฑยท์„ค๋ช… ํ•˜๋“œ์›จ์–ด ์—ฐ๊ฒฐ๊ณผ ์ง€์—ฐ ์ตœ์ ํ™”
์˜ค๋ฅ˜ ์ •์ • ๋ฒ”์œ„ 1-bit ์ •์ •, 2-bit ๊ฒ€์ถœ ๋™์ผํ•œ ๊ธฐ๋ณธ ๋ณด์žฅ
์ฃผ์˜์  parity ์‹์˜ fan-in์ด ์ปค์งˆ ์ˆ˜ ์žˆ์Œ ํ–‰๋ ฌ ์ˆœ์„œยทrow balanceยท๋ฌผ๋ฆฌ ๋งคํ•‘ ๊ฒ€์ฆ ํ•„์š”

Hsiao์˜ ์ƒ์„ธ ํ–‰๋ ฌ ์„ ํƒ์€ Hsiao Code ๋ฌธ์„œ์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค. Hsiao๋กœ ๋ฐ”๊พผ๋‹ค๊ณ  chip-level failure๋‚˜ burst error๊ฐ€ ์ž๋™์œผ๋กœ ์ •์ •๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ, ์ด๋Ÿฐ ์˜ค๋ฅ˜์—๋Š” symbol mapping๊ณผ ๋” ๊ฐ•ํ•œ code๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

DRAM ECC ๊ณ„์ธต ๋น„๊ต

๊ณ„์ธต ๋ณดํ˜ธ ๋Œ€์ƒ ECC ์œ„์น˜ controller ๊ด€์ฐฐ์„ฑ Hamming๊ณผ์˜ ๊ด€๊ณ„
์™ธ๋ถ€ side-band ECC controller-DIMM ๋ฐ์ดํ„ฐ ๋ฐ DRAM ์ „์†ก ๋‹จ์œ„ memory controller์™€ ๋ณ„๋„ ECC device CE/UE์™€ syndrome ๋ณด๊ณ  ๊ฐ€๋Šฅ 64+8 SECDED์˜ ๋Œ€ํ‘œ ์ ์šฉ
DRAM on-die ECC DRAM die ๋‚ด๋ถ€ cell ์ €์žฅ DRAM die ๋‚ด๋ถ€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‚ด๋ถ€ correction์ด controller์— ํˆฌ๋ช… ๋‚ด๋ถ€ ๊ตฌํ˜„ code๋Š” ๊ณต๊ฐœ/๊ณ ์ •๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ
Link ECC controller์™€ DRAM ์‚ฌ์ด ์ „์†ก link layer ์–‘๋‹จ link ์˜ค๋ฅ˜ ์ƒํƒœ๋ฅผ ๋ณ„๋„ ๋ณด๊ณ  Hamming ๊ณ„์—ด ๋˜๋Š” ๋‹ค๋ฅธ link code ๊ฐ€๋Šฅ
Chipkill/symbol ECC DRAM device ๋˜๋Š” symbol ๋‹จ์œ„ ์žฅ์•  controller์™€ device ๋ฐฐ์น˜ ์ „์ฒด device ์œ„์น˜ยทRAS์™€ ๊ฒฐํ•ฉ Hamming๋งŒ์œผ๋กœ ๋ถ€์กฑ, RS ๋“ฑ๊ณผ ์กฐํ•ฉ

Linux EDAC ๋ฌธ์„œ๋Š” ์ผ๋ฐ˜์ ์ธ memory stick์ด controller๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” 64-bit data์— 8-bit ECC๋ฅผ ๋”ํ•ด 72-bit ํญ์„ ๊ตฌ์„ฑํ•œ๋‹ค๊ณ  ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฌผ๋ฆฌ์ ์ธ x4/x8 device ๊ทธ๋ฃนํ™”์™€ ์—ฐ๊ณ„๋˜์ง€๋งŒ, DDR ์„ธ๋Œ€์™€ controller์˜ ์‹ค์ œ mapping์ด ๋ชจ๋‘ ๊ฐ™๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. DDR5 on-die ECC ์—ญ์‹œ ์™ธ๋ถ€ side-band ECC์™€ ๋ณดํ˜ธ ์œ„์น˜๊ฐ€ ๋‹ค๋ฅด๋ฏ€๋กœ ๋‘ ๊ณ„์ธต์„ ํ•˜๋‚˜์˜ Hamming decoder๋กœ ๊ฐ„์ฃผํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

์˜ค๋ฒ„ํ—ค๋“œ์™€ ์ ์šฉ ๊ธฐ์ค€

64-bit data์— 8-bit check๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋Œ€ํ‘œ ๊ตฌ์„ฑ์˜ raw storage ์˜ค๋ฒ„ํ—ค๋“œ๋Š” 8/64 = 12.5%์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ์„ฑ๋Šฅ ์˜ํ–ฅ์€ ECC bit ์ „์†ก ํญ, controller pipeline, ์˜ค๋ฅ˜๊ฐ€ ์—†๋Š” fast path, scrub ๋ฐ retry ์ •์ฑ…์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋ฏ€๋กœ "ECC๋Š” ํ•ญ์ƒ 12.5% ์„ฑ๋Šฅ ์ €ํ•˜"๋ผ๊ณ  ํ•ด์„ํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

์„ ํƒ ๊ธฐ์ค€ Hamming/SECDED๊ฐ€ ์ ํ•ฉํ•œ ๊ฒฝ์šฐ ๋” ๊ฐ•ํ•œ code๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ
์˜ค๋ฅ˜ ์ž…๋„ ๋“œ๋ฌธ single-bit upset ์—ฌ๋Ÿฌ bit๊ฐ€ ํ•จ๊ป˜ ์†์ƒ๋˜๋Š” burst
latency ์งง์€ XOR ๊ธฐ๋ฐ˜ read path๊ฐ€ ์ค‘์š” ์—ฌ๋Ÿฌ cycle decoder๋ฅผ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Œ
์žฅ์•  ๋ชจ๋ธ bit ๋˜๋Š” ์†Œ์ˆ˜ bit ์˜ค๋ฅ˜ x4/x8 device failure, symbol erasure
๊ตฌํ˜„ ์ž์› ์ž‘์€ ์กฐํ•ฉ ๋…ผ๋ฆฌ์™€ ๋‚ฎ์€ ์ „๋ ฅ GF multiplier, soft information, ํฐ buffer
์šด์˜ ์ •์ฑ… CE/UE์™€ patrol scrub์œผ๋กœ ๊ด€๋ฆฌ retry, page offlining, device sparing๊นŒ์ง€ ํ•„์š”

๋™์ž‘ ์›๋ฆฌ

Hamming SECDED encoder and decoder path

๊ทธ๋ฆผ 2. ๋ฉ”๋ชจ๋ฆฌ controller์˜ ๋Œ€ํ‘œ์ ์ธ ์™ธ๋ถ€ SECDED ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. write path์—์„œ๋Š” data์—์„œ check bit๋ฅผ ๋งŒ๋“ค๊ณ , read path์—์„œ๋Š” syndrome๊ณผ overall parity๋ฅผ ๊ณ„์‚ฐํ•œ ๋’ค ์ •์ • ๋˜๋Š” UE ๊ฒฝ๋กœ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

Hamming(7,4) ์ธ์ฝ”๋”ฉ

[p1, p2, d1, p4, d2, d3, d4] ์ˆœ์„œ์™€ even parity๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด parity ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

p1 = d1 XOR d2 XOR d4
p2 = d1 XOR d3 XOR d4
p4 = d2 XOR d3 XOR d4

์˜ˆ๋ฅผ ๋“ค์–ด data๊ฐ€ d1 d2 d3 d4 = 1 0 1 1์ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.

p1 = 1 XOR 0 XOR 1 = 0
p2 = 1 XOR 1 XOR 1 = 1
p4 = 0 XOR 1 XOR 1 = 0

Hamming(7,4) codeword = 0 1 1 0 0 1 1
overall parity p0 = 0
Extended codeword   = 0 1 1 0 0 1 1 0

์ด ์˜ˆ์—์„œ 7-bit Hamming codeword์˜ 1 ๊ฐœ์ˆ˜๋Š” 4๊ฐœ์ด๋ฏ€๋กœ overall parity๋Š” 0์ž…๋‹ˆ๋‹ค. ์‹ค์ œ interface๋Š” bit๋ฅผ ์ง๋ ฌ๋กœ ๋ณด๋‚ด๋Š”์ง€, byte/lane์— ์–ด๋–ค ์ˆœ์„œ๋กœ ๋ฐฐ์น˜ํ•˜๋Š”์ง€์— ๋”ฐ๋ผ ํ‘œ์‹œ ์ˆœ์„œ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์„ค๊ณ„ ๋ฌธ์„œ์—์„œ๋Š” ๋…ผ๋ฆฌ ์œ„์น˜์™€ ๋ฌผ๋ฆฌ lane mapping์„ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Syndrome ๊ณ„์‚ฐ๊ณผ single-bit ์ •์ •

์ˆ˜์‹ ํ•œ 7-bit ๋ถ€๋ถ„ codeword๋ฅผ r1..r7์ด๋ผ ํ•˜๋ฉด positional syndrome์˜ ์„ธ bit๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

s1 = r1 XOR r3 XOR r5 XOR r7
s2 = r2 XOR r3 XOR r6 XOR r7
s4 = r4 XOR r5 XOR r6 XOR r7
S  = s1 + 2*s2 + 4*s4

์œ„์˜ ์ •์ƒ codeword์—์„œ bit 6์ด ๋’ค์ง‘ํžˆ๋ฉด ์ˆ˜์‹  ๊ฐ’์€ 0 1 1 0 0 0 1์ด ๋ฉ๋‹ˆ๋‹ค.

s1 = 0
s2 = 1
s4 = 1
S  = 0b110 = 6

์ „์ฒด 8-bit๋ฅผ XORํ•œ overall parity ๊ฒฐ๊ณผ๋Š” 1์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ S=6์€ ์œ„์น˜ 6์˜ single-bit error๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ , decoder๋Š” ํ•ด๋‹น bit๋ฅผ ๋ฐ˜์ „ํ•œ ๋’ค data 1011์„ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ p0์—์„œ๋งŒ ๋ฐœ์ƒํ•˜๋ฉด S=0, P0=1์ด๋ฏ€๋กœ data bit๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  overall parity bit๋งŒ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

SECDED decoder ์˜์‚ฌ์ฝ”๋“œ

๋‹ค์Œ์€ ๋…ผ๋ฆฌ ๋™์ž‘์„ ๋ณด์—ฌ์ฃผ๋Š” ์„ค๋ช…์šฉ ์˜์‚ฌ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ RTL์—์„œ๋Š” XOR tree์˜ fan-in, pipeline latency, bit ordering, CE/UE logging๊ณผ reset์„ ๋ณ„๋„๋กœ ์„ค๊ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

decode(received[1..7], p0):
    s1 = XOR(received[1], received[3], received[5], received[7])
    s2 = XOR(received[2], received[3], received[6], received[7])
    s4 = XOR(received[4], received[5], received[6], received[7])
    syndrome = s1 | (s2 << 1) | (s4 << 2)
    overall = XOR(received[1..7], p0)

    if syndrome != 0 and overall == 1:
        flip(received[syndrome])  # single-bit ์˜ค๋ฅ˜๋ฅผ ์ •์ •ํ•˜๊ณ  CE ๊ธฐ๋ก
        report_corrected()
    elif syndrome == 0 and overall == 1:
        flip(p0)                  # overall parity bit ์˜ค๋ฅ˜๋ฅผ ์ •์ •
        report_corrected()
    elif syndrome != 0 and overall == 0:
        report_uncorrectable()    # SECDED ๋ชจ๋ธ์—์„œ ์ •์ • ๋ถˆ๊ฐ€ ์˜ค๋ฅ˜ ๋ณด๊ณ 
    else:
        pass                      # ์˜ค๋ฅ˜ ์—†์Œ

syndrome != 0, overall == 0์ธ ๊ฒฝ์šฐ์—๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋‘ bit๋ผ๋Š” ํ™•์ • ์ง„๋‹จ๋ณด๋‹ค "SECDED๊ฐ€ ์ •์ •ํ•  ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜"๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํžˆ ๋‘ bit ์˜ค๋ฅ˜๋ผ๋Š” ๊ฐ€์ • ์•„๋ž˜์—์„œ๋Š” double-bit error๊ฐ€ ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•˜์ง€๋งŒ, ๋” ๋งŽ์€ ์˜ค๋ฅ˜๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ๊ฐ™์€ ํŒ์ • ํŒจํ„ด์ด ๋‹ค๋ฅธ ์˜ค๋ฅ˜ ์กฐํ•ฉ์—์„œ๋„ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

64-bit DRAM ECC write/read ๊ฒฝ๋กœ

64-bit data word์— ๋Œ€ํ•ด r=7๊ฐœ์˜ ์œ„์น˜ parity๊ฐ€ ์กฐ๊ฑด 2^7 >= 64+7+1์„ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— overall parity๋ฅผ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•˜๋ฉด 8๊ฐœ์˜ check bit๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Write path

  1. memory controller๊ฐ€ CPU/cache line์—์„œ ๋ณดํ˜ธํ•  64-bit data word๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  2. parity-check matrix์˜ data ๋ถ€๋ถ„ A๋ฅผ ์‚ฌ์šฉํ•ด 7๊ฐœ positional parity๋ฅผ XOR ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  3. data์™€ 7๊ฐœ parity์˜ ์ „์ฒด XOR๋กœ overall parity๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  4. 64 data + 8 check = 72-bit ๋…ผ๋ฆฌ codeword๋ฅผ DIMM์˜ data/ECC device ๊ทธ๋ฃน์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

Read path

  1. controller๊ฐ€ data์™€ check bit๋ฅผ ํ•จ๊ป˜ ์ฝ์–ด 72-bit ์ˆ˜์‹  word๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  2. parity XOR network๊ฐ€ positional syndrome๊ณผ overall parity๋ฅผ ๋ณ‘๋ ฌ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  3. syndrome์ด ํ•œ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  overall parity๊ฐ€ odd์ด๋ฉด ํ•ด๋‹น bit๋ฅผ ๋ฐ˜์ „ํ•ฉ๋‹ˆ๋‹ค.
  4. syndrome์ด 0์ด๊ณ  overall parity๋งŒ odd์ด๋ฉด overall parity bit ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  5. double-bit๋กœ ๋ถ„๋ฅ˜๋˜๊ฑฐ๋‚˜ correction ๊ฒ€์ฆ์— ์‹คํŒจํ•˜๋ฉด data๋ฅผ ์ •์ƒ์œผ๋กœ ์ „๋‹ฌํ•˜์ง€ ์•Š๊ณ  UE/UCE, retry, poisoning ๋“ฑ์˜ RAS ์ •์ฑ…์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  6. ์ •์ •๋œ line์€ CE counter์™€ ์ฃผ์†Œยทrankยทdevice ์œ„์น˜๋ฅผ ๊ธฐ๋กํ•˜๊ณ , patrol scrub์œผ๋กœ ์žฌ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DRAM ์ ์šฉ ์‹œ ์ฃผ์˜์ 

Hamming code๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ๋…ผ๋ฆฌ codeword ๋‹จ์œ„์˜ ์˜ค๋ฅ˜ ์ •์ •์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ฆฌ์ ์ธ DRAM device ๊ณ ์žฅ์„ ์ •์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์š”์†Œ๋ฅผ ํ•จ๊ป˜ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • device ํญ: x4 ๋˜๋Š” x8 device์˜ ํ•œ ์ถœ๋ ฅ์ด codeword์˜ ๋ช‡ bit/symbol์— ๋งคํ•‘๋˜๋Š”๊ฐ€
  • codeword ๋ฒ”์œ„: ํ•˜๋‚˜์˜ burst, cache line, rank ์ ‘๊ทผ ์ค‘ ์–ด๋””๊นŒ์ง€๋ฅผ ํ•œ codeword๋กœ ๋ฌถ๋Š”๊ฐ€
  • interleaving: ํ•œ ๋ฌผ๋ฆฌ ์‚ฌ๊ฑด์ด ํ•˜๋‚˜์˜ codeword์— ์ง‘์ค‘๋˜๋Š”๊ฐ€, ์—ฌ๋Ÿฌ codeword๋กœ ๋‚˜๋‰˜๋Š”๊ฐ€
  • ์˜ค๋ฅ˜ ์œ„์น˜ ์ •๋ณด: controller๊ฐ€ device timeout์ด๋‚˜ link error๋ฅผ erasure ์œ„์น˜๋กœ ์•Œ ์ˆ˜ ์žˆ๋Š”๊ฐ€
  • RAS ์ฒ˜๋ฆฌ: CE/UE logging, scrub, retry, page offlining, spare device ์ •์ฑ…์„ ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐํ•˜๋Š”๊ฐ€

ํ•œ x4 DRAM device์˜ ์—ฌ๋Ÿฌ ์ถœ๋ ฅ์ด ํ•˜๋‚˜์˜ codeword์— ํฌํ•จ๋˜๋ฉด ๋‹จ์ผ device failure๊ฐ€ ์—ฌ๋Ÿฌ bit ์˜ค๋ฅ˜๋กœ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ค๋ฅ˜๊ฐ€ SECDED์˜ ๋‘ bit ํ•œ๊ณ„๋ฅผ ๋„˜์œผ๋ฉด Hamming code๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ symbol-based ECC, Reed-Solomon, Chipkill ๋˜๋Š” ๋‹ค์ฐจ์› parity๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ์–ด๋–ค ๊ธฐ๋ฒ•์„ ์„ ํƒํ•˜๋”๋ผ๋„ codeword์™€ device mapping์„ ํ•จ๊ป˜ ๋ถ„์„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

On-die ECC์™€ ์™ธ๋ถ€ SECDED์˜ ๊ฒฝ๊ณ„

DDR5 on-die ECC๋Š” DRAM die ๋‚ด๋ถ€์˜ cell array ์ €์žฅ ์˜ค๋ฅ˜๋ฅผ ๋‚ด๋ถ€์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณ„์ธต์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ์™ธ๋ถ€ side-band ECC๋Š” memory controller๊ฐ€ DIMM์—์„œ ์ˆ˜์‹ ํ•œ data์™€ check bit๋ฅผ ๊ฒ€์‚ฌํ•ด linkยทdeviceยทํŒจํ‚ค์ง€ ์ˆ˜์ค€ ์˜ค๋ฅ˜๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ณ„์ธต์ž…๋‹ˆ๋‹ค. on-die correction์˜ ๋‚ด๋ถ€ syndrome๊ณผ ์ •์ • ํšŸ์ˆ˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ controller๊ฐ€ ์ง์ ‘ ๊ด€์ฐฐํ•˜๋Š” ์™ธ๋ถ€ SECDED syndrome๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋‹ค์Œ ๋‘ ๋ฌธ์žฅ์€ ์„œ๋กœ ๋‹ค๋ฅธ ์ฃผ์žฅ์ž…๋‹ˆ๋‹ค.

  • "DRAM die ๋‚ด๋ถ€์—์„œ ์ผ๋ถ€ cell ์˜ค๋ฅ˜๋ฅผ on-die ECC๋กœ ๋ณด์ •ํ•œ๋‹ค."
  • "controller๊ฐ€ 64-bit data์™€ 8-bit check๋ฅผ ์‚ฌ์šฉํ•ด ์™ธ๋ถ€ codeword๋ฅผ SECDED๋กœ ๊ฒ€์‚ฌํ•œ๋‹ค."

๋‘ ๊ณ„์ธต์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๋ณดํ˜ธ ๋ฒ”์œ„๋ฅผ ๋„“ํž ์ˆ˜ ์žˆ์ง€๋งŒ, on-die ECC๊ฐ€ ์™ธ๋ถ€ ECC๋ฅผ ์ž๋™์œผ๋กœ ๋Œ€์ฒดํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ Hamming decoder๊ฐ€ on-die ์˜ค๋ฅ˜๋ฅผ ๋ชจ๋‘ ๋ณด๊ณ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

์žฅ๋‹จ์ 

์žฅ์  ํ•œ๊ณ„์™€ ์ฃผ์˜์ 
single-bit error์˜ ์œ„์น˜๋ฅผ syndrome์œผ๋กœ ๋ฐ”๋กœ ๊ณ„์‚ฐ ๊ธฐ๋ณธ Hamming code๋งŒ์œผ๋กœ๋Š” double-bit miscorrection์„ ๋ง‰๊ธฐ ์–ด๋ ค์›€
XOR ์ค‘์‹ฌ์˜ encoder/decoder๋ผ ์ €์ง€์—ฐ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅ data ํญ์ด ์ปค์ง€๋ฉด parity ์‹์˜ fan-in๊ณผ ๋ฐฐ์„ ์ด ์ฆ๊ฐ€
64+8, 32+7์ฒ˜๋Ÿผ power-of-two data ํญ์— ์ ์šฉํ•˜๊ธฐ ์‰ฌ์›€ 64+8์˜ 12.5% check storage ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์กด์žฌ
extended parity๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด SECDED ํŒ์ • ๊ฐ€๋Šฅ SECDED๋Š” ์„ธ bit ์ด์ƒ ์˜ค๋ฅ˜์˜ ์ •์ •ยท๊ฒ€์ถœ์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Œ
CE/UE, syndrome, patrol scrub๊ณผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์—ฐ๊ณ„ chip failure, burst, ๋‹ค์ค‘ symbol ์˜ค๋ฅ˜์—๋Š” ๋ณดํ˜ธ๊ฐ€ ๋ถ€์กฑ
ํ‘œ์ค€ ์œ„์น˜ ๋ฐฐ์น˜๊ฐ€ ๊ต์œกยท๊ฒ€์ฆ์— ์œ ๋ฆฌ ์‹ค์ œ controller๋Š” Hsiao ๋˜๋Š” proprietary matrix๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

Hamming/SECDED๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋“œ๋ฌผ๊ณ  single-bit ์˜ค๋ฅ˜๊ฐ€ ์ฃผ๋œ ๋ฉ”๋ชจ๋ฆฌ read path์—์„œ latency์™€ ํšŒ๋กœ ๋น„์šฉ์˜ ๊ท ํ˜•์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ DRAM device ๋‹จ์œ„ ์žฅ์• ๋‚˜ ๋†’์€ ์˜ค๋ฅ˜์œจ ์ฑ„๋„์„ ๋ณดํ˜ธํ•˜๋ ค๋ฉด code ๊ฐ•๋„๋ฟ ์•„๋‹ˆ๋ผ symbol mapping, interleaving, spare, retry๋ฅผ ํฌํ•จํ•œ ์‹œ์Šคํ…œ ์„ค๊ณ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ด€๋ จ ๊ธฐ์ˆ 

๊ด€๋ จ ๋ฌธ์„œ

์ฐธ๊ณ  ๋ฌธํ—Œ

๊ตฌ๋ถ„ ์ž๋ฃŒ
์› ๋…ผ๋ฌธ R. W. Hamming, "Error Detecting and Error Correcting Codes", Bell System Technical Journal, 1950
์› ๋…ผ๋ฌธ ์‚ฌ๋ณธ Hamming, Error Detecting and Error Correcting Codes, Naval Postgraduate School archive
DRAM ํ˜„์žฅ ์—ฐ๊ตฌ B. Schroeder et al., "DRAM Errors in the Wild: A Large-Scale Field Study", SIGMETRICS, 2009
์šด์˜ ์ธํ„ฐํŽ˜์ด์Šค Linux EDAC documentation: 72-bit ECC ๊ตฌ์„ฑ, syndrome, CE/UE, scrub
๋ฉ”๋ชจ๋ฆฌ ํ‘œ์ค€ JEDEC JESD79-5 DDR5 SDRAM
ํ–‰๋ ฌ ์ตœ์ ํ™” M. Y. Hsiao, "A Class of Optimal Minimum Odd-weight-column SEC-DED Codes", IBM Journal of Research and Development, 1970

Google์˜ ํ˜„์žฅ ์—ฐ๊ตฌ๋Š” ์ˆ˜๋ฐฑ๋งŒ DIMM-day ๊ทœ๋ชจ์˜ ๊ด€์ธก์—์„œ ์—ฐ๊ฐ„ 8%๋ฅผ ๋„˜๋Š” DIMM์ด ์˜ค๋ฅ˜๋ฅผ ๊ฒฝํ—˜ํ•˜๊ณ , ๊ด€์ธก๋œ ์˜ค๋ฅ˜์œจ๊ณผ ์˜ค๋ฅ˜ ์œ ํ˜•์ด ๋‹น์‹œ์˜ ๋‹จ์ˆœํ•œ soft-error ๊ฐ€์ •๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ์„ ๋ณด๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฐ๊ณผ๋Š” Hamming code์˜ ์ˆ˜ํ•™์  ์ •์ • ๋ฒ”์œ„์™€ ๋ณ„๊ฐœ๋กœ, CE ๋ˆ„์  ๊ด€์ฐฐยทscrubยท๋ชจ๋“ˆ ๊ต์ฒด ๊ฐ™์€ RAS ์šด์˜์ด ํ•„์š”ํ•œ ์ด์œ ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์ •๋ฆฌ

Hamming Code๋Š” parity bit์˜ ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ์ธ syndrome์œผ๋กœ single-bit ์˜ค๋ฅ˜ ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” binary linear block code์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ Hamming code์˜ ์ตœ์†Œ ๊ฑฐ๋ฆฌ๋Š” 3์ด๋ฉฐ, overall parity๋ฅผ ์ถ”๊ฐ€ํ•œ extended Hamming code๋Š” ์ตœ์†Œ ๊ฑฐ๋ฆฌ 4์˜ SECDED ๋™์ž‘์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. 64-bit data์— 7๊ฐœ์˜ ์œ„์น˜ parity์™€ 1๊ฐœ์˜ overall parity๋ฅผ ๋”ํ•œ 72-bit codeword๋Š” ์ „ํ†ต์ ์ธ ์™ธ๋ถ€ DRAM ECC์˜ ๋Œ€ํ‘œ ๋ชจ๋ธ์ด์ง€๋งŒ, ์‹ค์ œ controller๋Š” Hsiao๋‚˜ symbol-based ECC๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Hamming/SECDED๋งŒ์œผ๋กœ DRAM chip failure์™€ ๋‹ค์ค‘ symbol ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ device mapping, interleaving, RAS logging, scrub ๋ฐ ๋” ๊ฐ•ํ•œ ECC ๊ณ„์ธต์„ ํ•จ๊ป˜ ๊ฒ€ํ† ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.