๐Ÿ–ฅ๏ธ System

ECC Error Correction

๊ฐœ์š”

ECC(Error Correction Code)๋Š” ์ปดํ“จํ„ฐ ๋ฉ”๋ชจ๋ฆฌ ์‹œ์Šคํ…œ์—์„œ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์˜ค๋ฅ˜ ์ •์ • ๊ธฐ์ˆ ์ด๋‹ค. DRAM ์…€์— ์ €์žฅ๋œ ๋น„ํŠธ๊ฐ€ ์šฐ์ฃผ์„  ์ž…์ž(cosmic ray), ์•ŒํŒŒ ์ž…์ž, ์ „๊ธฐ์  ๊ฐ„์„ญ ๋“ฑ์— ์˜ํ•ด ์˜๋„์น˜ ์•Š๊ฒŒ ๋’ค์ง‘ํžˆ๋Š” soft error๋ฟ ์•„๋‹ˆ๋ผ, ์…€ ์—ดํ™”๋‚˜ ์ ‘์ด‰ ๋ถˆ๋Ÿ‰์ฒ˜๋Ÿผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์žฌํ˜„๋˜๋Š” hard error๋กœ๋ถ€ํ„ฐ๋„ ์‹œ์Šคํ…œ์„ ๋ณดํ˜ธํ•œ๋‹ค.

Google์˜ ๋Œ€๊ทœ๋ชจ ์„œ๋ฒ„ ์—ฐ๊ตฌ(2009)์— ๋”ฐ๋ฅด๋ฉด, DRAM์˜ ์‹ค์ œ ์˜ค๋ฅ˜์œจ์€ ๊ธฐ์กด ์‹คํ—˜์‹ค ์—ฐ๊ตฌ๋ณด๋‹ค ์ˆ˜ ๋ฐฐ ๋†’์œผ๋ฉฐ, ์—ฐ๊ฐ„ DIMM ๋ชจ๋“ˆ์˜ 8% ์ด์ƒ์ด ์˜ค๋ฅ˜๋ฅผ ๊ฒฝํ—˜ํ•œ๋‹ค. ECC ์—†์ด๋Š” ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๊ฐ€ ์‹œ์Šคํ…œ ํฌ๋ž˜์‹œ, ๋ฐ์ดํ„ฐ ์†์‹ค, ์‹ฌ์ง€์–ด ๋ณด์•ˆ ์ทจ์•ฝ์ ์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

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

Soft Error์˜ ์›์ธ

DRAM ์†Œํ”„ํŠธ ์—๋Ÿฌ์˜ ์ฃผ์š” ์›์ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

์›์ธ ์„ค๋ช… ์˜ํ–ฅ๋„
Cosmic Ray Neutrons ์šฐ์ฃผ์„ ์ด ๋Œ€๊ธฐ์™€ ์ถฉ๋Œํ•˜์—ฌ ์ƒ์„ฑ๋œ ์ค‘์„ฑ์ž ์ฃผ์š” ์›์ธ (ํ•ด๋ฐœ ๊ณ ๋„์—์„œ ์ฆ๊ฐ€)
Alpha Particles ์นฉ ํŒจํ‚ค์ง• ์žฌ๋ฃŒ์˜ ๋ถˆ์ˆœ๋ฌผ์—์„œ ๋ฐฉ์ถœ ์†Œ๋ฉธ ์ถ”์„ธ (๊ณ ์ˆœ๋„ ํŒจํ‚ค์ง•)
RowHammer ์ธ์ ‘ ํ–‰ ๋ฐ˜๋ณต ์ ‘๊ทผ์œผ๋กœ ์ธํ•œ ์ „ํ•˜ ๋ˆ„์ถœ ๋ณด์•ˆ ์ทจ์•ฝ์ ์œผ๋กœ ์•…์šฉ ๊ฐ€๋Šฅ
์ „๊ธฐ์  ๊ฐ„์„ญ ์‹œ์Šคํ…œ ๋‚ด๋ถ€ EMI/RFI ๋‚ฎ์Œ (์ฐจํ ์„ค๊ณ„๋กœ ์™„ํ™”)

๊ณ ๋„ 10~12km(์ƒ์šฉ ํ•ญ๊ณต๊ธฐ ์ˆœํ•ญ ๊ณ ๋„)์—์„œ๋Š” ํ•ด์ˆ˜๋ฉด ๋Œ€๋น„ ์ค‘์„ฑ์ž ํ”Œ๋Ÿญ์Šค๊ฐ€ 300๋ฐฐ ๋†’์•„์ง€๋ฉฐ, ์ด๋Š” ํ•ญ๊ณต ๋ฐ ์šฐ์ฃผ ์‹œ์Šคํ…œ์—์„œ ECC๊ฐ€ ํ•„์ˆ˜์ ์ธ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•œ๋‹ค.

ECC ๊ตฌํ˜„ ๋ถ„๋ฅ˜

ECC Architecture

1. Side-band ECC (SBECC)

์ „ํ†ต์ ์ธ ์„œ๋ฒ„ ๋ฐฉ์‹์œผ๋กœ, ECC ๋น„ํŠธ๋ฅผ ๋ณ„๋„์˜ DRAM ์นฉ์— ์ €์žฅํ•˜๊ณ  ์ถ”๊ฐ€ ์ฑ„๋„(72๋น„ํŠธ ๋ฒ„์Šค)๋กœ ์ „์†กํ•œ๋‹ค.

  • ์ž‘๋™: Memory Controller๊ฐ€ ์“ฐ๊ธฐ ์‹œ ECC๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๋ณ„๋„ ์นฉ์— ์ €์žฅ, ์ฝ๊ธฐ ์‹œ ๊ฒ€์ฆ ๋ฐ ์ •์ •
  • ๋ฒ„์Šค ๊ตฌ์„ฑ: 64๋น„ํŠธ ๋ฐ์ดํ„ฐ + 8๋น„ํŠธ ECC = 72๋น„ํŠธ (DDR3/4)
  • ์žฅ์ : ์˜ค๋ฅ˜ ์ •์ •/๊ฒ€์ถœ ๋Šฅ๋ ฅ ์šฐ์ˆ˜, OS์— ์˜ค๋ฅ˜ ๋ณด๊ณ  ๊ฐ€๋Šฅ
  • ๋‹จ์ : ์ถ”๊ฐ€ DRAM ์นฉ ํ•„์š”, ๋†’์€ ๋น„์šฉ

2. On-die ECC (ODECC)

DDR5์—์„œ๋Š” on-die ECC๊ฐ€ ์ ์šฉ๋˜๊ณ , LPDDR5 ๊ณ„์—ด์€ link ECC๋กœ ์ „์†ก ๊ฒฝ๋กœ๋ฅผ ๋ณด๊ฐ•ํ•œ๋‹ค.

  • ์ž‘๋™: DRAM ์นฉ ์ž์ฒด๊ฐ€ ๋‚ด๋ถ€ ์˜ค๋ฅ˜๋ฅผ ์ •์ •
  • ํˆฌ๋ช…์„ฑ: Memory Controller์— ์™„์ „ํžˆ ํˆฌ๋ช…
  • ์žฅ์ : ์™ธ๋ถ€ ํ•˜๋“œ์›จ์–ด ๋ณ€๊ฒฝ ๋ถˆํ•„์š”
  • ๋‹จ์ : ์ „์†ก ์˜ค๋ฅ˜ ๋ฏธ์ •์ •, OS์— ์˜ค๋ฅ˜ ๋ณด๊ณ  ์—†์Œ

3. Inline/In-band ECC

๋ฌผ๋ฆฌ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๋ถ„ํ• ํ•˜์—ฌ ECC๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ์ผ๋ถ€ ์‹œ์Šคํ…œ์—์„œ ์ง€์›๋œ๋‹ค.

  • ์ž‘๋™: ์ผ๋ฐ˜ non-ECC DIMM ์‚ฌ์šฉ ๊ฐ€๋Šฅ, ์ฃผ์†Œ ๊ณต๊ฐ„ ์ผ๋ถ€๋ฅผ ์˜ˆ์•ฝํ•˜์—ฌ ECC ํ…Œ์ด๋ธ” ์ €์žฅ
  • ์žฅ์ : ์ถ”๊ฐ€ ํ•˜๋“œ์›จ์–ด ๋ถˆํ•„์š”
  • ๋‹จ์ : ๋ฉ”๋ชจ๋ฆฌ ๋ ˆ์ดํ„ด์‹œ์™€ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

4. Link ECC

LPDDR5์—์„œ ๋„์ž…๋œ ๋ฐฉ์‹์œผ๋กœ, ๋ฐ์ดํ„ฐ ๋งํฌ ๋ ˆ์ด์–ด์— ์˜ค๋ฅ˜ ์ •์ •์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

  • ์“ฐ๊ธฐ ๊ฒฝ๋กœ: MC๊ฐ€ ECC๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ์ „์†ก, DRAM์ด ๊ฒ€์ฆ
  • ์ฝ๊ธฐ ๊ฒฝ๋กœ: DRAM์ด ECC๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ์ „์†ก, MC๊ฐ€ ๊ฒ€์ฆ
  • ํŠน์ง•: On-die ECC์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด ์ „์†ก+์ €์žฅ ๋ชจ๋‘ ๋ณดํ˜ธ

SECDED Hamming Code

SECDED Mechanism

์—…๊ณ„ ํ‘œ์ค€ ECC ์ฝ”๋“œ์ธ SECDED(Single-Error Correction, Double-Error Detection)๋Š” Hamming ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค:

  • ๋‹จ์ผ ๋น„ํŠธ ์˜ค๋ฅ˜: ์ •์ • ๊ฐ€๋Šฅ (syndrome์œผ๋กœ ์˜ค๋ฅ˜ ์œ„์น˜ ๊ฒฐ์ • ํ›„ ๋น„ํŠธ ๋ฐ˜์ „)
  • ์ด์ค‘ ๋น„ํŠธ ์˜ค๋ฅ˜: ๊ฒ€์ถœ๋งŒ ๊ฐ€๋Šฅ (UCE - Uncorrectable Error ์„ ์–ธ)
  • ์˜ค๋ฒ„ํ—ค๋“œ: 64๋น„ํŠธ ๋ฐ์ดํ„ฐ๋‹น 8๋น„ํŠธ (12.5%)

Hsiao ์ฝ”๋“œ๋Š” ๊ธฐ์กด Hamming ์ฝ”๋“œ ๋Œ€๋น„ ๋” ๋‚ฎ์€ ํ•˜๋“œ์›จ์–ด ๋น„์šฉ๊ณผ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ œ๊ณตํ•œ๋‹ค. 64๋น„ํŠธ ๋ฐ์ดํ„ฐ์— ์“ฐ์ด๋Š” ์ผ๋ฐ˜์ ์ธ SECDED ๊ตฌ์„ฑ์€ 7๊ฐœ์˜ Hamming ํŒจ๋ฆฌํ‹ฐ ๋น„ํŠธ์™€ 1๊ฐœ์˜ ์ „์ฒด ํŒจ๋ฆฌํ‹ฐ ๋น„ํŠธ๋กœ ์ด๋ฃจ์–ด์ง€๋ฉฐ, Hamming ํŒจ๋ฆฌํ‹ฐ๋Š” ์ฝ”๋“œ์›Œ๋“œ ๋‚ด 1, 2, 4, 8, 16, 32, 64 ์œ„์น˜์— ๋ฐฐ์น˜๋œ๋‹ค.

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

ECC ๊ธฐ๋Šฅ ๋น„๊ต

๊ธฐ๋Šฅ ๋Šฅ๋ ฅ ๊ตฌํ˜„ ์œ„์น˜ DDR ์„ธ๋Œ€ ๋น„์šฉ
Parity 1๋น„ํŠธ ๊ฒ€์ถœ MC DDR~DDR2 ๋‚ฎ์Œ
SECDED ECC 1๋น„ํŠธ ์ •์ •, 2๋น„ํŠธ ๊ฒ€์ถœ MC (Side-band) DDR3~DDR4 ์ค‘๊ฐ„
On-die ECC ๋‚ด๋ถ€ ์˜ค๋ฅ˜ ์ •์ • DRAM ์นฉ ๋‚ด๋ถ€ DDR5+ ์นฉ ๋‚ด์žฅ
Chipkill ์นฉ ๋‹จ์œ„ ๋‹ค๋น„ํŠธ ์ •์ • MC (๊ณ ๊ธ‰) ์„œ๋ฒ„์šฉ ๋†’์Œ
Link ECC ์ „์†ก ์˜ค๋ฅ˜ ์ •์ • DRAMโ†”MC ์–‘๋ฐฉํ–ฅ LPDDR5+ ์ค‘๊ฐ„
CRC ๋งํฌ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ถœ GDDR6/HBM ๊ทธ๋ž˜ํ”ฝ ๋ฉ”๋ชจ๋ฆฌ ์ค‘๊ฐ„

ECC vs Non-ECC ๋น„๊ต

ํ•ญ๋ชฉ Non-ECC ECC
๋ฐ์ดํ„ฐ ๋ฒ„์Šค 64๋น„ํŠธ 72๋น„ํŠธ
DRAM ์นฉ ์ˆ˜ 8๊ฐœ (์ผ๋ฐ˜) 9๊ฐœ (์ถ”๊ฐ€ 1๊ฐœ)
์˜ค๋ฅ˜ ์ •์ • ์—†์Œ 1๋น„ํŠธ ์ •์ •
์˜ค๋ฅ˜ ๊ฒ€์ถœ ์—†์Œ 2๋น„ํŠธ ๊ฒ€์ถœ
๊ฐ€๊ฒฉ ๊ธฐ์ค€ ์•ฝ 10~20% ํ”„๋ฆฌ๋ฏธ์—„
์„ฑ๋Šฅ ๊ธฐ์ค€ ์•ฝ 2~3% ์˜ค๋ฒ„ํ—ค๋“œ
์ ์šฉ ๋ฐ์Šคํฌํ†ฑ, ๊ฒŒ์ด๋ฐ ์„œ๋ฒ„, ์›Œํฌ์Šคํ…Œ์ด์…˜, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

DDR ์„ธ๋Œ€๋ณ„ ECC ๋™์ž‘ ๋น„๊ต

ํ•ญ๋ชฉ DDR3 ECC DDR4 ECC DDR5 ECC
๋ฒ„์Šค 72-bit (64+8) 72-bit (64+8) 80-bit (2ร—32 + 2ร—8)
ECC ์œ„์น˜ Side-band Side-band On-die + Side-band
๋ฆฌํ”„๋ ˆ์‹œ All-Bank All-Bank Same-Bank ์ง€์›
์˜ค๋ฅ˜ ๋ณด๊ณ  CE/UE ๋กœ๊น… CE/UE ๋กœ๊น… On-die: ๋ฏธ๋ณด๊ณ 

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

1๋‹จ๊ณ„: ECC ์ƒ์„ฑ (์“ฐ๊ธฐ ๊ฒฝ๋กœ)

Memory Controller๊ฐ€ CPU๋กœ๋ถ€ํ„ฐ 64๋น„ํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด:

  1. Check Matrix ๊ณฑ์…ˆ: H ร— D^T = P (ํŒจ๋ฆฌํ‹ฐ ๋น„ํŠธ ๊ณ„์‚ฐ)
  2. ECC ๋น„ํŠธ ์ƒ์„ฑ: 8๋น„ํŠธ ํŒจ๋ฆฌํ‹ฐ(P0~P7) ์‚ฐ์ถœ
  3. 72๋น„ํŠธ ์ „์†ก: 64๋น„ํŠธ ๋ฐ์ดํ„ฐ + 8๋น„ํŠธ ECC๋ฅผ DRAM์— ๊ธฐ๋ก

2๋‹จ๊ณ„: ์˜ค๋ฅ˜ ๊ฒ€์ถœ/์ •์ • (์ฝ๊ธฐ ๊ฒฝ๋กœ)

DRAM์—์„œ 72๋น„ํŠธ๋ฅผ ์ฝ์€ ํ›„:

  1. Syndrome ๊ณ„์‚ฐ: H ร— R^T = S (์ฝ์€ ๋ฐ์ดํ„ฐ์˜ ์‹œ๋“œ๋กฌ ๊ณ„์‚ฐ)
  2. ์‹œ๋“œ๋กฌ ํ•ด์„:
    - S = 0 โ†’ ์˜ค๋ฅ˜ ์—†์Œ
    - S โ‰  0์ด๊ณ  ๋‹จ์ผ ๋น„ํŠธ ์˜ค๋ฅ˜ ์œ„์น˜์™€ ์ผ์น˜ โ†’ 1๋น„ํŠธ ์˜ค๋ฅ˜ (์ •์ • ๊ฐ€๋Šฅ)
    - S โ‰  0์ด๊ณ  ๋‹ค์ค‘ ๋น„ํŠธ ์˜ค๋ฅ˜ ํŒจํ„ด๊ณผ ์ผ์น˜ โ†’ 2๋น„ํŠธ ์˜ค๋ฅ˜ (๊ฒ€์ถœ๋งŒ)
  3. ์ •์ • ์‹คํ–‰: ์˜ค๋ฅ˜ ๋น„ํŠธ ๋ฐ˜์ „ํ•˜์—ฌ ์›๋ž˜ ๋ฐ์ดํ„ฐ ๋ณต์›

3๋‹จ๊ณ„: ์˜ค๋ฅ˜ ๋ณด๊ณ  ๋ฐ ๊ด€๋ฆฌ

ํ˜„๋Œ€ ์‹œ์Šคํ…œ์—์„œ๋Š” ์˜ค๋ฅ˜๋ฅผ ๋กœ๊น…ํ•˜๊ณ  ๋ชจ๋‹ˆํ„ฐ๋งํ•œ๋‹ค:

  • CE (Correctable Error): ์ •์ •๋œ ์˜ค๋ฅ˜ ํšŸ์ˆ˜ ์นด์šดํŠธ
  • UE (Uncorrectable Error): ์ •์ • ๋ถˆ๊ฐ€๋Šฅํ•œ ์˜ค๋ฅ˜ โ†’ ์‹œ์Šคํ…œ ์•Œ๋ฆผ
  • SMBIOS๋ฅผ ํ†ตํ•œ ๊ด€๋ฆฌ: Linux/Windows์—์„œ ์˜ค๋ฅ˜ ์นด์šดํ„ฐ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ์˜ˆ๋ฐฉ ๊ต์ฒด: ๋†’์€ ์˜ค๋ฅ˜์œจ์„ ๋ณด์ด๋Š” ๋ชจ๋“ˆ์˜ ์‚ฌ์ „ ๊ต์ฒด

๋Œ€ํ˜• ์„œ๋ฒ„ ํ”Œ๋žซํผ์€ ์—ฌ๊ธฐ์— Chipkill, symbol-based ECC, lockstep channel ๊ฐ™์€ ์ƒ์œ„ ๋ณดํ˜ธ ๊ธฐ๋ฒ•์„ ๋”ํ•ด x4 DRAM ์นฉ ํ•œ ๊ฐœ๊ฐ€ ๊ณ ์žฅ ๋‚˜๋Š” ๊ฒฝ์šฐ๊นŒ์ง€ ๊ฒฌ๋””๋„๋ก ์„ค๊ณ„ํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ์ด๋Ÿฐ ๊ตฌ์„ฑ์€ ๋ฉ”๋ชจ๋ฆฌ ์ฑ„๋„ ํญ๊ณผ ์ธํ„ฐ๋ฆฌ๋น™ ๋ฐฉ์‹์— ์ œ์•ฝ์„ ์ฃผ์ง€๋งŒ, ๋‹จ์ˆœ SECDED๋งŒ์œผ๋กœ ๋ง‰๊ธฐ ์–ด๋ ค์šด ํŒจํ‚ค์ง€ ๋‹จ์œ„ ๊ณ ์žฅ์„ ์ค„์ด๋Š” ๋ฐ ํšจ๊ณผ์ ์ด๋‹ค.

Memory Scrubbing

์ฃผ๊ธฐ์ ์œผ๋กœ ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ฝ์–ด ์ •์ •๋œ ๋ฒ„์ „์„ ๋‹ค์‹œ ๊ธฐ๋กํ•˜๋Š” ๊ณผ์ •:

  • ๋ˆ„์ ๋œ ์†Œํ”„ํŠธ ์—๋Ÿฌ๋ฅผ ์ œ๊ฑฐ
  • UCE ๋ฐœ์ƒ ์ „์— ์ž ์žฌ์  ์˜ค๋ฅ˜ ์กฐ๊ธฐ ๋ฐœ๊ฒฌ
  • ์„œ๋ฒ„์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ํ™œ์„ฑํ™”

Patrol scrub ์ฃผ๊ธฐ๋Š” ํ”Œ๋žซํผ ์ •์ฑ…๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ ์ˆ˜ ์‹œ๊ฐ„์—์„œ ์ˆ˜์‹ญ ์‹œ๊ฐ„ ๋‹จ์œ„๋กœ ์„ค์ •๋˜๋ฉฐ, scrub ํŠธ๋ž˜ํ”ฝ์ด ๊ณผ๋„ํ•˜๋ฉด ๋Œ€์—ญํญ ์†์‹ค์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ RAS ์ •์ฑ…๊ณผ ํ•จ๊ป˜ ์กฐ์ •ํ•œ๋‹ค.

์žฅ๋‹จ์ 

์žฅ์  ๋‹จ์ 
1๋น„ํŠธ ์˜ค๋ฅ˜๋ฅผ ์ž๋™ ์ •์ •ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ ์ถ”๊ฐ€ ๋น„์šฉ (DRAM ์นฉ 1๊ฐœ ๋” ํ•„์š”)
2๋น„ํŠธ ์˜ค๋ฅ˜ ๊ฒ€์ถœ๋กœ ์‹ฌ๊ฐํ•œ ๋ฐ์ดํ„ฐ ์†์‹ค ๋ฐฉ์ง€ ์•ฝ 2~3% ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ (Side-band)
์„œ๋ฒ„/๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํฌ๋ž˜์‹œ ๊ฐ€๋Šฅ์„ฑ ๋Œ€ํญ ๊ฐ์†Œ ๋ฐ์Šคํฌํ†ฑ ํ”Œ๋žซํผ์—์„œ ECC ์ง€์› ์ œํ•œ (Intel)
SMBIOS ๊ธฐ๋ฐ˜ ์˜ค๋ฅ˜ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฐ€๋Šฅ On-die ECC๋Š” ์ „์†ก ์˜ค๋ฅ˜ ๋ฏธ์ •์ •
Memory Scrubbing์œผ๋กœ ๋ˆ„์  ์˜ค๋ฅ˜ ์‚ฌ์ „ ์ œ๊ฑฐ Inline ECC๋Š” ์ตœ๋Œ€ 25% ์„ฑ๋Šฅ ์ €ํ•˜
RowHammer ๊ณต๊ฒฉ ์™„ํ™”์— ๊ธฐ์—ฌ Non-ECC ๋ฉ”๋ชจ๋ฆฌ์™€ ํ˜ผ์šฉ ๋ถˆ๊ฐ€

๊ด€๋ จ ๊ธฐ์ˆ 

  • JEDEC JESD79-5: DDR5 SDRAM ์‚ฌ์–‘
  • JEDEC LPDDR5 ๋ฐœํ‘œ: LPDDR5 ํ‘œ์ค€ ๊ณต๊ฐœ
  • Google SIGMETRICS 2009: "DRAM errors in the wild: A large-scale field study"
  • Hamming (1950): ์ตœ์ดˆ์˜ ์˜ค๋ฅ˜ ์ •์ • ์ฝ”๋“œ ์ œ์•ˆ
  • Hsiao Code: M.Y. Hsiao, 1970 - Odd-weight column SECDED
  • Chipkill / symbol-based ECC: IBM ๊ณ„์—ด ์„œ๋ฒ„์—์„œ ๋ฐœ์ „ํ•œ ์นฉ ๋‹จ์œ„ ์˜ค๋ฅ˜ ์™„ํ™” ๊ธฐ๋ฒ•
  • EDAC Linux Kernel Module: ๋ฆฌ๋ˆ…์Šค์—์„œ ECC ์˜ค๋ฅ˜ ๋ชจ๋‹ˆํ„ฐ๋ง ์ง€์›

ํ•ต์‹ฌ ์ •๋ฆฌ

ECC๋Š” DRAM ์‹œ์Šคํ…œ์—์„œ ์šฐ์ฃผ์„  ์ž…์ž ๋“ฑ์œผ๋กœ ์ธํ•œ ์†Œํ”„ํŠธ ์—๋Ÿฌ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ํ•„์ˆ˜ ๊ธฐ์ˆ ์ด๋‹ค. ์—…๊ณ„ ํ‘œ์ค€์ธ SECDED Hamming ์ฝ”๋“œ๋Š” 64๋น„ํŠธ ๋ฐ์ดํ„ฐ์— 8๋น„ํŠธ ECC๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ 1๋น„ํŠธ ์˜ค๋ฅ˜ ์ •์ •๊ณผ 2๋น„ํŠธ ์˜ค๋ฅ˜ ๊ฒ€์ถœ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. DDR5๋Š” on-die ECC๋กœ ์นฉ ๋‚ด๋ถ€ ์ €์žฅ ์˜ค๋ฅ˜๋ฅผ ์ค„์ด๊ณ , LPDDR5๋Š” link ECC๋กœ ์ „์†ก ๊ฒฝ๋กœ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด๊ฐ•ํ•œ๋‹ค. ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ๋Š” Side-band ECC๊ฐ€ ์—ฌ์ „ํžˆ ์ฃผ๋ฅ˜์ด๋ฉฐ, Google ์—ฐ๊ตฌ๋Š” ์—ฐ๊ฐ„ DIMM์˜ 8% ์ด์ƒ์ด ์˜ค๋ฅ˜๋ฅผ ๊ฒฝํ—˜ํ•œ๋‹ค๊ณ  ๋ณด๊ณ ํ•˜์˜€๋‹ค. ECC์˜ ์˜ค๋ฒ„ํ—ค๋“œ(์•ฝ 2~3%)๋Š” ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์˜ ๊ฐ€์น˜์— ๋น„ํ•ด ๋ฏธ๋ฏธํ•˜๋ฉฐ, ํŠนํžˆ ๊ธˆ์œต, ๊ณผํ•™, ์˜๋ฃŒ ๋ถ„์•ผ์—์„œ๋Š” ์„ ํƒ์ด ์•„๋‹Œ ํ•„์ˆ˜ ์‚ฌํ•ญ์ด๋‹ค.