Hsiao Code
๊ฐ์
Hsiao Code๋ ๋ฉ๋ชจ๋ฆฌ ์์คํ ์์ ์ฌ์ฉํ๋ SECDED(Single-Error Correction, Double-Error Detection) ์ฝ๋๋ฅผ ํ๋์จ์ด ๊ตฌํ์ ๋ง๊ฒ ๊ตฌ์ฑํ ์ค๋ฅ ์ ์ ์ฝ๋์ ๋๋ค. M. Y. Hsiao๊ฐ 1970๋ ์ ์ ์ํ ํต์ฌ์ ํ์ฅ Hamming ์ฝ๋์ ๊ฐ์ ์ค๋ฅ ๋ณด์ฅ ์์ค๊ณผ ๊ฒ์ฌ ๋นํธ ์๋ฅผ ์ ์งํ๋ฉด์, ํจ๋ฆฌํฐ ๊ฒ์ฌ ํ๋ ฌ์ ์ด์ ํ์ ๊ฐ์ค์น(odd weight) ๋ฒกํฐ๋ก ์ ํํ๋ ๊ฒ์ ๋๋ค. ์ด ์ ํ์ syndrome์ ๋ง๋๋ XOR ๋คํธ์ํฌ์ ์ด ์ ๋ ฅ ์์ ๋ฐฐ์ ๋์ ์ค์ด๋ ๋ฐฉํฅ์ผ๋ก ์๋ํฉ๋๋ค.
Hsiao Code์ ์ด์ ์ ๋ ๋ง์ ์ค๋ฅ๋ฅผ ์ ์ ํ๋ ๋ฐ ์์ง ์์ต๋๋ค. ๊ธฐ๋ณธ ๊ตฌ์ฑ์ ๋จ์ผ ๋นํธ ์ค๋ฅ๋ฅผ ์ ์ ํ๊ณ ์ด์ค ๋นํธ ์ค๋ฅ๋ฅผ ๊ฒ์ถํ๋ SECDED์ด๋ฉฐ, ๋ฐ์ดํฐ ํญ๊ณผ ๊ฒ์ฌ ๋นํธ ์์ ๋ง์ถฐ ํ๋ ฌ์ ์ต์ ํํฉ๋๋ค. ๋ฐ๋ผ์ Hsiao Code๋ DRAM ์ ์ ๋ฌผ๋ฆฌ์ ์ค๋ฅ๋ฅผ ์ง์ ์ฒ๋ฆฌํ๋ DDR5 on-die ECC์ ๋์ผํ ๊ธฐ์ ์ด ์๋๋ผ, ๋ฉ๋ชจ๋ฆฌ ์ปจํธ๋กค๋ฌ์ side-band ECC ๊ฐ์ ์์คํ ์์ค ECC๋ฅผ ๊ตฌํํ๋ ์ฝ๋ ์ค๊ณ ์ ํ์ผ๋ก ์ดํดํด์ผ ํฉ๋๋ค.
๊ทธ๋ฆผ 1. Hsiao ๋ฐฉ์์ ๊ฐ ์ด์ ๊ฐ์ค์น๋ฅผ ๋ฎ์ถ ํจ๋ฆฌํฐ ๊ฒ์ฌ ํ๋ ฌ๊ณผ syndrome ๋ถ๋ฅ๋ฅผ ์ด์ฉํด SECDED ๋์ฝ๋์ ์กฐํฉ ๋ ผ๋ฆฌ๋ฅผ ์ค์ธ๋ค. ๊ทธ๋ฆผ์ ํ๋ ฌ ๋นํธ๋ 72๊ฐ ์ด ์ ์ฒด๊ฐ ์๋ ๋ํ ์ด์ ๋ํ๋ธ๋ค.
ํต์ฌ ๊ฐ๋
SECDED์ ์ฝ๋ ํ๋ผ๋ฏธํฐ
์ด ๋ฌธ์์์ H๋ ์ด์ง ์ ํ์ฒด GF(2) ์์ ํจ๋ฆฌํฐ ๊ฒ์ฌ ํ๋ ฌ์ด๊ณ , ์์ ์ฝ๋์๋๋ฅผ r์ด๋ผ๊ณ ํ๊ฒ ์ต๋๋ค.
s = H * r^T
์ฝ๋์๋๊ฐ ์ ํจํ๋ฉด s = 0์
๋๋ค. ํ ๋นํธ ์ค๋ฅ๊ฐ ์์น i์์ ๋ฐ์ํ๋ฉด syndrome์ H์ i๋ฒ์งธ ์ด h_i๊ฐ ๋๊ณ , ๋ ๋นํธ ์ค๋ฅ๊ฐ i, j์์ ๋ฐ์ํ๋ฉด h_i XOR h_j๊ฐ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ์ด์ด ์๋ก ๋ค๋ฅด๋ฉด ๋ ๋จ์ผ ์ค๋ฅ๊ฐ ๊ฐ์ syndrome์ผ๋ก ํฉ์ณ์ง์ง ์์ต๋๋ค.
k๊ฐ์ ๋ฐ์ดํฐ ๋นํธ์ r๊ฐ์ ๊ฒ์ฌ ๋นํธ๋ฅผ ์ฌ์ฉํ๋ Hsiao ๊ตฌ์ฑ์ ์ด n = k + r๊ฐ์ ์๋ก ๋ค๋ฅธ ํ์ ๊ฐ์ค์น ์ด์ ํ์๋ก ํฉ๋๋ค. ๊ธธ์ด r์ธ ์ด์ง ๋ฒกํฐ ์ค ํ์ ๊ฐ์ค์น ๋ฒกํฐ์ ๊ฐ์๋ 2^(r-1)์ด๋ฏ๋ก ๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํฉ๋๋ค.
k + r <= 2^(r - 1)
64๋นํธ ๋ฐ์ดํฐ ์๋์ ๊ฒฝ์ฐ r = 8์ด ์ฒ์์ผ๋ก ์กฐ๊ฑด์ ๋ง์กฑํฉ๋๋ค. r = 7์ด๋ฉด 64 + 7 = 71๊ฐ ์ด์ด ํ์ํ์ง๋ง ํ์ ๊ฐ์ค์น 7๋นํธ ๋ฒกํฐ๋ 64๊ฐ๋ฟ์ด๊ณ , r = 8์ด๋ฉด 72๋นํธ ์ฝ๋์๋์ 128๊ฐ ํ๋ณด๊ฐ ์์ต๋๋ค. ์ด ๋๋ฌธ์ ์๋ฒ DIMM์์ ์ต์ํ 64 data + 8 check = 72 bits ๊ตฌ์ฑ์ด Hsiao SECDED์ ๋ํ ์๊ฐ ๋ฉ๋๋ค.
Odd-weight-column ํ๋ ฌ
Hsiao์ ํจ๋ฆฌํฐ ๊ฒ์ฌ ํ๋ ฌ์ ๋ค์ ์กฐ๊ฑด์ ์ค์ฌ์ผ๋ก ์ค๊ณํฉ๋๋ค.
- ๋ชจ๋ ์ด์ 0์ด ์๋ ํ์ ๊ฐ์ค์น ๋ฒกํฐ์ ๋๋ค.
- ๋ชจ๋ ์ด์ ์๋ก ๋ค๋ฆ ๋๋ค.
- ๊ตฌํ ๋ชฉ์ ์ ๋ง๊ฒ ๊ฐ๋ฅํ ๋ฎ์ ๊ฐ์ค์น์ ์ด์ ์ฐ์ ์ ํํฉ๋๋ค.
์ด ์กฐ๊ฑด์ด SECDED ๋ถ๋ฅ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋จ์ผ ์ค๋ฅ์ syndrome
h_i๋ ํ์ ๊ฐ์ค์น์ ๋๋ค. - ๋ ๊ฐ์ ์๋ก ๋ค๋ฅธ ํ์ ๊ฐ์ค์น ์ด์ XORํ ๊ฐ์ 0์ด ์๋ ์ง์ ๊ฐ์ค์น์ ๋๋ค.
- ๋ฐ๋ผ์ syndrome์ ํ์ง๋ง ํ์ธํด๋ ๋จ์ผ ์ค๋ฅ์ ์ด์ค ์ค๋ฅ๋ฅผ 1์ฐจ๋ก ๊ตฌ๋ถํ ์ ์์ต๋๋ค.
- ํ์ ์ด ์ธ ๊ฐ์ XOR๋ ํ์ ๊ฐ์ค์น์ด๋ฏ๋ก 0์ด ๋ ์ ์์ต๋๋ค. ์ด๋ ์ต์ ๊ฑฐ๋ฆฌ๋ฅผ 4 ์ด์์ผ๋ก ๋ง๋๋ ์กฐ๊ฑด ์ค ํ๋์ ๋๋ค.
์ค์ ๋์ฝ๋๋ syndrome์ ํ์ง๋ง ๋ณด์ง ์๊ณ , ํ์ syndrome์ด H์ ์ด๋ ์ด๊ณผ ์ผ์นํ๋์ง๋ ํ์ธํฉ๋๋ค. ์ธ ๋นํธ ์ด์ ์ค๋ฅ๋ SECDED์ ๋ณด์ฅ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฏ๋ก, ์ผ์นํ์ง ์๋ syndrome์ด๋ ์๋ชป๋ ๋ค์ค ์ค๋ฅ ํจํด์ uncorrectable๋ก ์ฒ๋ฆฌํ๋ ์ ์ฑ
์ด ํ์ํฉ๋๋ค.
72,64 ๋ํ ๊ตฌ์ฑ์ ์ด ์ ํ
k = 64, r = 8์ธ ๊ฒฝ์ฐ ํ๋ณด ์ด์ ๊ฐ์ค์น๊ฐ ๋ฎ์ ์์๋ก ์ ํํ๋ฉด ๋ํ์ ์ธ ๋ถํฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
| ์ด ๊ฐ์ค์น | ์ ํ ์ด ์ | ํ๋ ฌ 1์ ๊ฐ์ | ์๋ฏธ |
|---|---|---|---|
| 1 | 8 | 8 | ๊ฐ syndrome ์์ ํ๋์ฉ ๊ธฐ์ฌํ๋ ๋จ์ ๋ฒกํฐ |
| 3 | 56 | 168 | 8๋นํธ ์ค 3๊ฐ๊ฐ 1์ธ ๋ฒกํฐ ์ ์ฒด |
| 5 | 8 | 40 | 72๊ฐ ์ด์ ์ฑ์ฐ๊ธฐ ์ํด ์ ํํ๋ ์ผ๋ถ ๋ฒกํฐ |
| ํฉ๊ณ | 72 | 216 | ํ๊ท ์ด ๊ฐ์ค์น 3.0 |
์ด ํ๋ ํน์ ์์ฉ ์ปจํธ๋กค๋ฌ์ ๊ณ ์ ํ๋ ฌ์ ๋ปํ๋ ๊ฒ์ด ์๋๋ผ, Hsiao์ minimum odd-weight-column ์๋ฆฌ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ํ ์ ํ์ ๋๋ค. ๋์ผํ ๊ฐ์ค์น ํ๋ณด๋ฅผ ์ด๋ค ์์๋ก ๋ฐฐ์นํ๊ณ ํ์ผ๋ก ๋ณํํ๋์ง๋ ๋ฐ์ดํฐ ํญ, ๋ฐฐ์น, ํ์ด๋ฐ, ๊ฒ์ฆ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
Hsiao Code์ ํ์ฅ Hamming Code
๋ ์ฝ๋๋ ๊ฐ์ ๋ฐ์ดํฐ ํญ์ ๋ํด ๊ฐ์ ์์ ๊ฒ์ฌ ๋นํธ๋ฅผ ์ฌ์ฉํ๊ณ SECDED ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ฐจ์ด๋ ์ค๋ฅ ์ ์ ๋ฅ๋ ฅ๋ณด๋ค H๋ฅผ ํ๋์จ์ด์ ์ด๋ค ๋ชจ์์ผ๋ก ๋ฐฐ์นํ๋๋์ ์์ต๋๋ค.
| ํญ๋ชฉ | ํ์ฅ Hamming | Hsiao Code |
|---|---|---|
| ๋ํ 64๋นํธ ๊ตฌ์ฑ | 72๋นํธ ์ฝ๋์๋ | 72๋นํธ ์ฝ๋์๋ |
| ๊ฒ์ฌ ๋นํธ ์ | 8 | 8 |
| ์ต์ ๊ฑฐ๋ฆฌ ๋ชฉํ | 4 | 4 |
| ๋จ์ผ ์ค๋ฅ | ์ ์ | ์ ์ |
| ์ด์ค ์ค๋ฅ | ๊ฒ์ถ | ๊ฒ์ถ |
| ์ด ๊ตฌ์ฑ | ์์น ์ด์ง๊ฐ๊ณผ ์ ์ฒด ํจ๋ฆฌํฐ ๊ตฌ์กฐ | ์๋ก ๋ค๋ฅธ ํ์ ๊ฐ์ค์น ์ด |
| ์ต์ ํ ๊ธฐ์ค | ๊ท์น์ฑ, ์ค๋ช ๊ณผ ์์ฑ์ ์ฉ์ด์ฑ | XOR ์ ๋ ฅ ์, ๋ฐฐ์ , ์ง์ฐ๊ณผ ๋น์ฉ |
| ๊ตฌํ์ ์ฃผ์ | ํ๋ ฌ์ ํน์ ํ์ด ํฐ fan-in์ ๊ฐ์ง ์ ์์ | ํ๋ ฌ ์ ํ์ ๋ฐ๋ฅธ row balance์ ๋งคํ ๊ฒ์ฆ ํ์ |
๋ํ์ ์ธ 72 x 8 ํ๋ ฌ์ ํ๋ ฌ 1 ๊ฐ์๋ฅผ ๋จ์ ๋น๊ตํ๋ฉด, ํ์ฅ Hamming์ ํ์ค ํจ๋ฆฌํฐ ๊ฒ์ฌ ํ๋ ฌ์ ์ ์ฒด ํจ๋ฆฌํฐ ํ์ 72๊ฐ ์ด์ ํฌํจํ ๋ 285๊ฐ๊ฐ ๋ฉ๋๋ค. ์ ์ฒด ํจ๋ฆฌํฐ ๋นํธ ์์ฒด๋ฅผ ๋ณ๋ ์์ฑ ์ฐ๊ฒฐ๋ก ์ธ์ง ์๋ ๊ตฌํ ํ๊ธฐ์์๋ 284๊ฐ๋ก ๋ํ๋ ์ ์์ต๋๋ค. ์์ minimum-weight Hsiao ์ ํ์ 216๊ฐ์ด๋ฏ๋ก ํ๋ ฌ ์ฐ๊ฒฐ ์ ๊ธฐ์ค ์ฝ 24% ์ฐจ์ด์ง๋ง, ์ค์ ๊ฒ์ดํธ ์๋ ์ฑ๋ฅ์ด ๊ฐ์ ๋น์จ๋ก ๊ฐ์ ๋๋ค๋ ๋ป์ ์๋๋๋ค. XOR ํธ๋ฆฌ ๊ตฌ์กฐ, ์
๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๋ฐฐ์ ๋ฐฐ์น, ํ์ดํ๋ผ์ธ, ํฉ์ฑ ์ ์ฝ์ด ์ต์ข
๊ฒฐ๊ณผ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
๋น๊ต/๋ถ์
ECC ์ฝ๋ ์ ํ ๋น๊ต
| ์ฝ๋ ๋๋ ๋ฐฉ์ | ์ค๋ฅ ๋จ์ | ๋ํ ๋ณด์ฅ | ํ๋์จ์ด ๋น์ฉ | DRAM ์์คํ ์์์ ์ญํ |
|---|---|---|---|---|
| Parity | ๋นํธ | ์ค๋ฅ ๊ฒ์ถ ์ค์ฌ | ๋ฎ์ | ๋ช ๋ น/์ฃผ์ ๋๋ ๋งํฌ ๋ณดํธ์ ์ผ๋ถ |
| ํ์ฅ Hamming SECDED | ๋นํธ | 1๋นํธ ์ ์ , 2๋นํธ ๊ฒ์ถ | ์ค๊ฐ | 64+8 side-band ECC์ ๊ธฐ๋ณธ ๋ชจ๋ธ |
| Hsiao SECDED | ๋นํธ | 1๋นํธ ์ ์ , 2๋นํธ ๊ฒ์ถ | ์ค๊ฐ ์ดํ๋ฅผ ๋ชฉํ | ๋ฉ๋ชจ๋ฆฌ ์ปจํธ๋กค๋ฌ XOR ๋ ผ๋ฆฌ ์ต์ ํ |
| BCH | ๋นํธ ๋ธ๋ก | ๋ค์ค ๋นํธ ์ ์ | ๋์ | NAND ํ๋์์ ๊ฐํ ์ค๋ฅ ์ ์ |
| Reed-Solomon | ์ฌ๋ณผ | ์ฌ๋ณผ ์ค๋ฅ์ ์๊ฑฐ ์ ์ | ๋์ | ์ ์ฅ์ฅ์น, ํต์ , Chipkill ๊ณ์ด ์ค๊ณ |
| LDPC | soft information ๊ธฐ๋ฐ ๋นํธ/์ฌ๋ณผ | ๋์ ์ ์ ๋ฅ๋ ฅ | ๋งค์ฐ ๋์ | TLC/QLC NAND์ ๊ณ ์ค๋ฅ ์ฑ๋ |
| Chipkill | ์์คํ /์ฌ๋ณผ | DRAM ์นฉ ๋จ์ ์ฅ์ ์ํ | ๋์ | ์ฌ๋ฌ DRAM ์นฉ์ ์ฌ๋ณผ์ ๋ถ์ฐํ๋ ์๋ฒ RAS |
Hsiao Code๋ BCH, Reed-Solomon, LDPC์ฒ๋ผ ์ ์ ๋ฅ๋ ฅ์ ํ์ฅํ๋ ์ฝ๋๊ฐ ์๋๋๋ค. ๊ฐ์ SECDED ๋ณดํธ๋ฅผ ๋ ์งง์ XOR ๊ฒฝ๋ก์ ์ ์ ์ฐ๊ฒฐ๋ก ๊ตฌํํ๋ ค๋ ์ ํ์ด๋ฉฐ, ์นฉ ์ ์ฒด ๊ณ ์ฅ์ด๋ ๋ฒ์คํธ ์ค๋ฅ์ ๋ํ ๋ณดํธ๋ ๋ณ๋์ symbol-based ECC์ ๋ฉ๋ชจ๋ฆฌ ์ธํฐ๋ฆฌ๋น์ด ๋ด๋นํฉ๋๋ค.
๊ตฌํ ๋น์ฉ์ ๋ณด๋ ์งํ
Hsiao ํ๋ ฌ์ ํ๊ฐํ ๋ ๋จ์ํ ์ด ๊ฐ์ค์น์ ํ๊ท ๋ง ๋น๊ตํด์๋ ์ ๋ฉ๋๋ค.
| ์งํ | ํ์ธํ ๋ด์ฉ | ์ค๊ณ ์ํฅ |
|---|---|---|
| ์ด ํ๋ ฌ 1 ๊ฐ์ | ๋ชจ๋ syndrome ์์ ์ฐ๊ฒฐ๋๋ ์ ๋ ฅ ์ | XOR ๊ฒ์ดํธ์ ๋ฐฐ์ ๋์ 1์ฐจ ์งํ |
| ํ๋ณ ๊ฐ์ค์น | ๊ฐ syndrome bit๊ฐ ์ฝ๋ ์ ๋ ฅ ์ | ์ต์ฅ XOR ๊ฒฝ๋ก์ fan-in ๊ฒฐ์ |
| ์ด๋ณ ๊ฐ์ค์น | ํ ๋ฐ์ดํฐ bit๊ฐ ์ฐธ์ฌํ๋ ๊ฒ์ฌ ์ | ๋ฐ์ดํฐ ๊ฒฝ๋ก fan-out๊ณผ ๋ฐฐ์ ๋ถํ ๊ฒฐ์ |
| syndrome ๋งคํ | ์ค๋ฅ ์์น์ ์ด์ ์ผ๋์ผ ๋์ | correction mux์ ์ค๋ฅ ์์น ๋์ฝ๋ ๋ณต์ก๋ ๊ฒฐ์ |
| row balance | ํ ์ฌ์ด์ ์ ๋ ฅ ์ ์ฐจ์ด | ๋ณ๋ ฌ ํ์ด๋ฐ๊ณผ ๋ฌผ๋ฆฌ ๋ฐฐ์น ๊ท ํ์ ์ํฅ |
| ์ค๋ฅ ๋ก๊น | CE, UE, syndrome ๋ณด์กด ์ฌ๋ถ | patrol scrub๊ณผ ์๋ฐฉ ๊ต์ฒด ์ ์ฑ ์ ์ํฅ |
๋ฎ์ ์ด ๊ฐ์ค์น๋ ์ด ์ฐ๊ฒฐ ์๋ฅผ ์ค์ด๋ ๋ฐ ์ ๋ฆฌํ์ง๋ง ๋ชจ๋ ํ์ fan-in์ ์๋์ผ๋ก ์ต์ํํ์ง๋ ์์ต๋๋ค. ๋ฐ๋ผ์ Hsiao Code๋ฅผ ์ค์ RTL๋ก ์ฎ๊ธธ ๋์๋ ๊ฐ์ค์น๊ฐ ๊ฐ์ ํ๋ณด ์ด์ ์์๋ฅผ ๋ฐ๊พธ๊ณ row balance, ๋ ผ๋ฆฌ ๊น์ด, ๋ฐฐ์ ํผ์ก์ ํจ๊ป ํ๊ฐํด์ผ ํฉ๋๋ค.
๋์ ์๋ฆฌ
ํจ๋ฆฌํฐ ๊ฒ์ฌ ํ๋ ฌ๊ณผ systematic encoding
๊ฒ์ฌ ์ด ๊ฐ์ด๋ฐ ๋จ์ ๋ฒกํฐ 8๊ฐ๋ฅผ ๊ฒ์ฌ ๋นํธ์ ํ ๋นํ๋ฉด ํ๋ ฌ์ ๋ค์๊ณผ ๊ฐ์ด systematic form์ผ๋ก ํํํ ์ ์์ต๋๋ค.
H = [ A | I_8 ]
์ฌ๊ธฐ์ A๋ 8 x 64 ๋ฐ์ดํฐ ๋ถ๋ถ์ด๊ณ I_8์ ๊ฒ์ฌ ๋นํธ ๋ถ๋ถ์
๋๋ค. ์ฝ๋์๋ c = [D | P]๊ฐ H * c^T = 0์ ๋ง์กฑํด์ผ ํ๋ฏ๋ก, ์ด์ง ์ฐ์ฐ์์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ฒ์ฌ ๋นํธ๋ฅผ ๊ณ์ฐํ ์ ์์ต๋๋ค.
P = A * D^T (๋ชจ๋ ์ฐ์ฐ์ GF(2)์์ XOR๋ก ์ํ)
Hsiao ๋ฐฉ์์ ์ฐจ์ด๋ ์ด ์์ ๊ธฐ๋ฅ์ด ์๋๋ผ A๋ฅผ ์ด๋ฃจ๋ ์ด์ ์ด๋ค odd-weight ํ๋ณด๋ก ์ ํํ๋์ง์ ์์ต๋๋ค. ํ๋ณด ์ด์ ์์ฑํ๋ ๊ฐ๋
์ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
def hsiao_columns(k):
r = 1
while k + r > (1 << (r - 1)):
r += 1
candidates = [x for x in range(1, 1 << r)
if x.bit_count() % 2 == 1]
candidates.sort(key=lambda x: (x.bit_count(), x))
return r, candidates[:k + r]
์ด ์ฝ๋๋ ํ๋ ฌ์ ๋ํ์ ์ธ ์ต์ ๊ฐ์ค์น ํ๋ณด๋ฅผ ์์ฑํ๋ ์ค๋ช ์ฉ ์ฝ๋์ ๋๋ค. ์ค์ IP์์๋ ์ฌ๊ธฐ์ ํ๋ ฌ rank, ์ค๋ณต ์ด, row balance, timing constraint, codeword bit mapping ๊ฒ์ฆ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
๋ฐํ๋ ํ๋ณด ์ค ๊ฐ์ค์น 1์ธ 8๊ฐ ์ด์ ๊ฒ์ฌ ๋นํธ์ ํ ๋นํ๊ณ , ๋๋จธ์ง 64๊ฐ ์ด์ ๋ฐ์ดํฐ ๋นํธ์ ํ ๋นํ๋ฉด H = [A | I_8] ํํ๊ฐ ๋ฉ๋๋ค. ํ๋ณด ์ด์ ์์์ ๋ฐ์ดํฐยท๊ฒ์ฌ ๋นํธ์ ์ค์ ์์น๋ ์๋ก ๋ฐ๊ฟ ์ ์์ง๋ง, ์ต์ข
๋งคํ์์๋ ์ด ์ค๋ณต๊ณผ ์ต์ ๊ฑฐ๋ฆฌ ์กฐ๊ฑด์ ๋ค์ ํ์ธํด์ผ ํฉ๋๋ค.
์ฐ๊ธฐ ๊ฒฝ๋ก
- ๋ฉ๋ชจ๋ฆฌ ์ปจํธ๋กค๋ฌ๊ฐ 64๋นํธ ๋ฐ์ดํฐ ์๋
D๋ฅผ ๋ฐ์ต๋๋ค. - ์ ํํ Hsiao ํ๋ ฌ์
A๋ถ๋ถ์ผ๋ก 8๊ฐ์ ๊ฒ์ฌ ๋นํธP๋ฅผ XOR ๊ณ์ฐํฉ๋๋ค. - ๋ฐ์ดํฐ์ ๊ฒ์ฌ ๋นํธ๋ฅผ 72๋นํธ ์ฝ๋์๋๋ก ๊ตฌ์ฑํฉ๋๋ค.
- ์ผ๋ฐ์ ์ธ ECC DIMM์์๋ 64๋นํธ ๋ฐ์ดํฐ ๊ฒฝ๋ก์ 8๋นํธ ECC ๊ฒฝ๋ก์ ํด๋นํ๋ 72๋นํธ ๋ฒ์ค๋ก ๊ธฐ๋กํฉ๋๋ค. ์ค์ DIMM์ DRAM ์ฅ์น์ x4 ๋๋ x8 ํญ์ ์ฌ๋ฌ ๊ฐ ๋ณ๋ ฌ๋ก ๋ฌถ์ด ์ด ํญ์ ๊ตฌ์ฑํฉ๋๋ค.
ํ๋ ฌ์ ๊ฐ 1์ ํ๋์ XOR ์ ๋ ฅ ์ฐ๊ฒฐ์ ๋ปํฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ฎ์ ๊ฐ์ค์น ์ด์ ์ ํํ๋ฉด ๋ฐ์ดํฐ bit๊ฐ ์ฐธ์ฌํ๋ ๊ฒ์ฌ์ ์์ ์ ์ฒด ์ฐ๊ฒฐ ์๋ฅผ ์ค์ผ ์ ์์ต๋๋ค. ๋ค๋ง systematic ๋ณํ๊ณผ ์ค์ ํ/์นฉ ๋งคํ ๋ค์๋ ํ๋ ฌ์ด ๋ฌ๋ผ ๋ณด์ผ ์ ์์ผ๋ฏ๋ก, ์ค๊ณ ๋ฌธ์์๋ ๋ ผ๋ฆฌ ํ๋ ฌ๊ณผ ๋ฌผ๋ฆฌ ๋ฐ์ดํฐ lane ๋งคํ์ ๋ถ๋ฆฌํด ๊ธฐ๋กํด์ผ ํฉ๋๋ค.
์ฝ๊ธฐ ๊ฒฝ๋ก์ syndrome ๋ถ๋ฅ
- ๋ฉ๋ชจ๋ฆฌ ์ปจํธ๋กค๋ฌ๊ฐ ๋ฐ์ดํฐ์ ๊ฒ์ฌ ๋นํธ๋ฅผ ํจ๊ป ์ฝ์ด ์์ ์ฝ๋์๋
r์ ๋ง๋ญ๋๋ค. s = H * r^T๋ฅผ ๊ณ์ฐํฉ๋๋ค.s = 0์ด๋ฉด ์ค๋ฅ ์์์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.s๊ฐ 0์ด ์๋๊ณ ํ์ ๊ฐ์ค์น์ด๋ฉฐH์ ํ ์ด๊ณผ ์ผ์นํ๋ฉด ํด๋น bit๋ฅผ ๋ฐ์ ํด 1๋นํธ ์ค๋ฅ๋ฅผ ์ ์ ํฉ๋๋ค.s๊ฐ 0์ด ์๋๊ณ ์ง์ ๊ฐ์ค์น์ด๋ฉด ๋จ์ผ ์ค๋ฅ๋ก๋ ์ค๋ช ํ ์ ์์ผ๋ฏ๋ก ์ ์ ํ์ง ์๊ณ UE ํ๋ณด๋ก ์ฒ๋ฆฌํฉ๋๋ค. ์ค์ ๋ ๋นํธ ์ค๋ฅ์์๋ ๋ ๊ฐ์ ํ์ ์ด XOR๊ฐ ์ด๋ฐ ์ง์ syndrome์ ๋ง๋ค์ง๋ง, ์ ํ๋ ํ๋ ฌ์ ๋ชจ๋ ์ง์ ๋ฒกํฐ๊ฐ ๋ฐ๋์ ์ค์ ์ด ์์ผ๋ก ๋ํ๋๋ค๊ณ ๊ฐ์ ํด์๋ ์ ๋ฉ๋๋ค.- ์ ์ ๊ฐ๋ฅ ์ค๋ฅ๋ CE(Correctable Error)๋ก ๊ธฐ๋กํ๊ณ , ์ ์ ๋ถ๊ฐ๋ฅ ์ค๋ฅ๋ UE(Uncorrectable Error) ๊ฒฝ๋ก๋ก ๋ณด๋ ๋๋ค.
ํ์ ํ๋ฅผ ์ฐ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
| syndrome | ๊ฐ์ค์น | ํด์ | ์ฒ๋ฆฌ |
|---|---|---|---|
0 |
0 | ์ค๋ฅ ์์ | ๋ฐ์ดํฐ ํต๊ณผ |
H์ ์ด๊ณผ ์ผ์น |
ํ์ | ๋จ์ผ bit ์ค๋ฅ | ํด๋น bit ๋ฐ์ , CE ๊ธฐ๋ก |
| 0์ด ์๋ ๊ฐ | ์ง์ | ์ด์ค bit ์ค๋ฅ ํ๋ณด | ์ ์ ํ์ง ์๊ณ UE ์ฒ๋ฆฌ |
| ์ด๊ณผ ์ผ์นํ์ง ์๋ ํ์ ๊ฐ | ํ์ | SECDED ๋ฒ์๋ฅผ ๋๋ ์ค๋ฅ ํ๋ณด | ๊ตฌํ ์ ์ฑ ์ ๋ฐ๋ผ UE ๋๋ ์ฌ์๋ |
์ด ๋ถ๋ฅ๋ ์ต๋ ๋ ๋นํธ ์ค๋ฅ์ ๋ํ ๋ณด์ฅ์ ๋๋ค. ์ธ ๋นํธ ์ค๋ฅ์ syndrome์ ํ์์ผ ์ ์์ผ๋ฏ๋ก ๋จ์ผ ์ค๋ฅ๋ก ์ค์ธ๋ ๊ฐ๋ฅ์ฑ์ด ์๊ณ , ์ด๋ฅผ ํญ์ ๊ฒ์ถํ๊ฑฐ๋ ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ ํ๋ค๊ณ ๋งํด์๋ ์ ๋ฉ๋๋ค.
DRAM ์ปจํธ๋กค๋ฌ์ RAS ์ฐ๊ณ
Hsiao Code๋ฅผ ์ ์ฉํ ์ธ๋ถ ECC๋ ๋ณดํต ๋ค์ RAS ํ๋ฆ๊ณผ ํจ๊ป ๋์ํฉ๋๋ค.
DRAM read -> Hsiao syndrome -> correct / classify
| |
v v
CE counter UE handling
|
v
patrol scrub / retire
๋จ์ผ bit ์ค๋ฅ๋ฅผ ์ ์ ํ ๋ค ์๋ ์์น์ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ธฐ๋กํ๋ patrol scrub์ ๊ฐ์ cache line์ ์ค๋ฅ๊ฐ ๋์ ๋๋ ๊ฒ์ ์ค์ ๋๋ค. ๊ทธ๋ฌ๋ scrub์ ์ฝ๋์ ์ ์ ๋ฅ๋ ฅ์ ๋์ด์ง ์์ผ๋ฉฐ, DRAM ์นฉ ์ ์ฒด ์ฅ์ ๋ฅผ ๋ง์ ์ฃผ์ง๋ ์์ต๋๋ค. x4 ์นฉ ๋จ์ ์ฅ์ ๊น์ง ๊ฒฌ๋๋ ค๋ฉด ๋ฐ์ดํฐ ์ฌ๋ณผ ๋ถ์ฐ, lockstep, Chipkill๊ณผ ๊ฐ์ ๋ ๋์ ์์คํ ์ค๊ณ๊ฐ ํ์ํฉ๋๋ค.
On-die ECC์์ ๊ณ์ธต ์ฐจ์ด
DDR5 on-die ECC๋ DRAM ๋ค์ด ๋ด๋ถ์ ์ ์ ์ฅ ์ค๋ฅ๋ฅผ DRAM ์ฅ์น ์์์ ์ฒ๋ฆฌํ๊ณ , ์ธ๋ถ ๋ฉ๋ชจ๋ฆฌ ์ปจํธ๋กค๋ฌ๊ฐ ๊ทธ ๋ด๋ถ syndrome์ ์ง์ ๊ด์ฐฐํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ์ผ๋ฐ์ ์ ๋๋ค. ๋ฐ๋ฉด Hsiao ๊ธฐ๋ฐ ์ธ๋ถ ECC๋ ์ปจํธ๋กค๋ฌ์ DIMM ์ฌ์ด์ ๋ฐ์ดํฐยทECC ๋นํธ, ํจํค์งยท๋ฒ์คยท์นฉ ์์ค ์ค๋ฅ๋ฅผ ๋ณ๋ ์ฝ๋์๋๋ก ๋ณดํธํฉ๋๋ค. ๋ ๊ณ์ธต์ ๋์ฒด ๊ด๊ณ๊ฐ ์๋๋ผ ๋ณดํธ ๋ฒ์๊ฐ ๋ค๋ฅธ ์กฐํฉ์ด๋ฉฐ, on-die ECC๊ฐ ์ธ๋ถ side-band ECC๋ฅผ ๋์ ํ๋ค๊ณ ํด์ํ๋ฉด ์ ๋ฉ๋๋ค.
์ฅ๋จ์
| ์ฅ์ | ํ๊ณ์ ์ฃผ์์ |
|---|---|
| ํ์ฅ Hamming SECDED์ ๊ฐ์ 1๋นํธ ์ ์ ยท2๋นํธ ๊ฒ์ถ ๋ชฉํ๋ฅผ ์ ์ง | ๊ธฐ๋ณธ ๊ตฌ์ฑ์ ๋ค์ค bit ๋๋ ์นฉ ์ ์ฒด ์ฅ์ ๋ฅผ ์ ์ ํ์ง ๋ชปํจ |
| odd-weight ์ด ์ ํ์ผ๋ก ์ด XOR ์ ๋ ฅ๊ณผ ๋ฐฐ์ ๋์ ์ค์ผ ์ ์์ | ๋ฎ์ ์ด ๊ฐ์ค์น๋ง์ผ๋ก ๊ฐ ํ์ ์ต๋ fan-in์ด ์ต์ํ๋์ง๋ ์์ |
| 64+8, 32+7 ๋ฑ ๋ฐ์ดํฐ ํญ์ ๋ง์ถฐ ์ฒด๊ณ์ ์ผ๋ก ์ค๊ณ ๊ฐ๋ฅ | ๋ฐ์ดํฐ ํญ, row balance, ๋ฌผ๋ฆฌ ๋งคํ์ด ๋ฐ๋๋ฉด ํ๋ ฌ ๊ฒ์ฆ์ด ํ์ |
| syndrome์ ํ์ง์ผ๋ก ๋จ์ผ/์ด์ค ์ค๋ฅ ๋ถ๋ฅ๊ฐ ๋ช ํํจ | ์ธ ๋นํธ ์ด์ ์ค๋ฅ์์๋ syndrome ์ค์ธ์ยท์ค์ ์ ๊ฐ๋ฅ |
| ๋ณ๋ ฌ ๋ฉ๋ชจ๋ฆฌ ์ปจํธ๋กค๋ฌ์์ XOR ๋ ผ๋ฆฌ ์ง์ฐ๊ณผ ์ ๋ ฅ์ ์ต์ ํํ๊ธฐ ์ข์ | ์ค์ ๋ฉด์ ยท์ ๋ ฅยท์ง์ฐ ์ด๋์ RTL ํฉ์ฑ ๋ฐ ๋ฐฐ์ ๊ฒฐ๊ณผ์ ์์กด |
| CE/UE์ scrub ์ ์ฑ ์ ์์ฐ์ค๋ฝ๊ฒ ์ฐ๊ฒฐ ๊ฐ๋ฅ | Hsiao Code ์์ฒด๊ฐ scrub, ์ค๋ฅ ๋ก๊น , Chipkill ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ ์์ |
๊ด๋ จ ๊ธฐ์
๊ด๋ จ ๋ฌธ์
- ECC Error Correction: Hamming, SECDED, side-band ECC, on-die ECC์ ๊ธฐ๋ณธ ์๋ฆฌ
- DRAM ํ ์คํธ/์ ๋ขฐ์ฑ: ECC, scrubbing, BIST์ ๋ฉ๋ชจ๋ฆฌ ๊ณ ์ฅ ๋ชจ๋ธ
- DDR ๋ด๋ถ ๊ตฌ์กฐ: DDR ์ฑ๋, bank, ๋ชจ๋๊ณผ ECC ๋ฐ์ดํฐ ๊ฒฝ๋ก
- NAND ECC ๊ณ ๊ธ: BCH์ LDPC ๋ฑ ์ ์ฅ์ฅ์น์ฉ ๊ฐํ ECC
- Linux EDAC ๋ฌธ์: CE/UE, syndrome, ๋ฉ๋ชจ๋ฆฌ ์ปจํธ๋กค๋ฌ ์ค๋ฅ ๋ณด๊ณ ๊ณ์ธต
์ฐธ๊ณ ๋ฌธํ
| ๊ตฌ๋ถ | ์๋ฃ |
|---|---|
| ์ ๋ ผ๋ฌธ | M. Y. Hsiao, "A Class of Optimal Minimum Odd-weight-column SEC-DED Codes", IBM Journal of Research and Development, 14(4), 395-401, 1970 |
| ํ์ ์ฐ๊ตฌ | A Class of Odd-Weight-Column SEC-DED-SbED Codes for Memory System Applications, IEEE Transactions on Computers, 1984 |
| ํ์ค | JEDEC JESD79-5, DDR5 SDRAM ํ์ค |
| ๊ธฐ๋ฐ ์ด๋ก | Hamming Code, extended Hamming๊ณผ SECDED์ ๊ฑฐ๋ฆฌยทsyndrome ์ค๋ช |
ํต์ฌ ์ ๋ฆฌ
Hsiao Code๋ SECDED์ ์ค๋ฅ ๋ณด์ฅ ์์ค์ ๋์ด๋ ์ฝ๋๊ฐ ์๋๋ผ, ๊ฐ์ ๋ณดํธ ์์ค์ ๋ฉ๋ชจ๋ฆฌ ํ๋์จ์ด์ ๋ ์ ํฉํ ํจ๋ฆฌํฐ ๊ฒ์ฌ ํ๋ ฌ๋ก ๊ตฌํํ๋ ์ค๊ณ์ ๋๋ค. ๋ชจ๋ ์ด์ ์๋ก ๋ค๋ฅธ odd-weight ๋ฒกํฐ๋ก ๊ตฌ์ฑํ๋ฉด ๋จ์ผ ์ค๋ฅ syndrome์ ํ์, ์ด์ค ์ค๋ฅ syndrome์ ์ง์๊ฐ ๋์ด ๋ ๊ฒฝ์ฐ๋ฅผ ๊ตฌ๋ถํ ์ ์์ต๋๋ค. 64๋นํธ ๋ฐ์ดํฐ์ ๋ํ ๊ตฌ์ฑ์ 8๊ฐ์ ๊ฒ์ฌ ๋นํธ๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๋ฎ์ ๊ฐ์ค์น ํ๋ณด๋ฅผ ์ ํํ๋ฉด ํ๋ ฌ ์ฐ๊ฒฐ ์๋ฅผ ์ค์ผ ์ ์์ง๋ง ์ค์ ์ฑ๋ฅ์ XOR ํธ๋ฆฌ์ ๋ฌผ๋ฆฌ ๋ฐฐ์น๊น์ง ํ์ธํด์ผ ํฉ๋๋ค. DRAM ์นฉ ์ ์ฒด ์ฅ์ ์ ๋์ ์ค๋ฅ ์ ์ ๋ฅ๋ ฅ์ด ํ์ํ๋ฉด Hsiao SECDED๋ง์ผ๋ก ์ถฉ๋ถํ์ง ์์ผ๋ฏ๋ก Chipkill, Reed-Solomon, BCH, LDPC ๊ฐ์ ๋ณ๋ ๊ณ์ธต์ ํจ๊ป ์ค๊ณํด์ผ ํฉ๋๋ค.