DRAM 과 같은 메모리는 우주선 또는 알파선(X선보다 강한 빛)에 의해 비트의 값이 변경된다. 특히 공정이 미세화될 수록 작은 에너지에도 비트의 값이 변경될 수 있는데, 미세 공정을 사용하고 집적도가 높아지면 이 빈도가 꽤 잦은 편이다.
통상 10~100 FIT/MB정도의 비율로 알려져 있다. (이 값은 지구 자기장, 고도, 서버가 놓인 곳의 차폐정도, 태양의 활동 등에 의해 변하며 인공적인 방사선원 근처, 예를 들면 원자력 발전소 옆이면 비율이 훨씬 더 높아진다) 1 FIT는 10억 시간동안 1개의 디바이스 실패를 나타낸다. 쉽게 말하면 100GB메모리를 가지고 있으면 100~1000시간이 지나면 1회 발생하는 비율이라는 의미다 - 생각보다 흔한 일이다.
변경되는 현상중 90%는 1비트만 변하고, 나머지는 2비트 이상 변한다. 메모리 모듈에 ECC(Error Correction Code)기능이 있으면 1비트가 변했을 때 이를 감지해내고 정정할 수 있다. 2비트 이상 변했다면 감지는 해내지만 고쳐주지는 못한다. ECC가 없다면 이런 형태의 오류에 대해 감지할 수도, 정정할 수도 없다. 따라서 중요한 데이터를 다루는 서버급 장비에는 ECC가 반드시 필요하다.
메모리 모듈은 보통 64비트 단위로 작동한다. ECC메모리 모듈은 여기에 8비트 ECC가 붙어, 72비트가 된다. 또한 ECC메모리와 Non-ECC 메모리는 물리적으로는 호환된다. 따라서 메모리 컨트롤러에서 ECC를 지원해준다면, DDR4 까지는 메모리 소켓 변경이 필요 없기 때문에 데스크탑 마더보드에서도 ECC메모리를 사용할 수 있다. (여기서 말하는 ECC 메모리는 "ECC Unbuffered 메모리"이다)
삼성 DDR4 REG ECC 메모리. 메모리 칩이 7개로 하나는 ECC를 위해 붙어있다. 가운데 붙어있는 작은 칩은 REG구현을 위해 붙어있는 버퍼용 칩이다.
대부분의 엔터프라이즈급 운영체제는 비트 오류를 감지해 자동으로 복구해주는 메커니즘을 가지고 있다. 일반 사용자용 윈도도 가지고 있는걸로 알고 있는데, 아직 문서를 확인해본건 아니다.
----
2024.04.02
DDR4 까지는 ECC Unbuffered 메모리 소켓과 Non-ECC Unbuffered 메모리 소켓이 호환되었는데 DDR5 부터는 호환되지 않는다. 조금 아쉬운 부분이다.