모든 이야기

DRAM 명령 주소 오류는 데이터 ECC만으로 충분하지 않다

쓰기 data와 ECC bit가 서로 맞는데도 프로그램이 전혀 다른 위치의 값을 읽는다. 주소 전달이 잘못된 경우를 떠올릴 수 있다. data ECC가 정보의 내부 일관성을 확인하더라도 명령·주소가 처음 의도한 것인지까지 항상 알지는 못한다. DDR4 CA Parity는 이 앞단의 전달을 검사하는 별도 장치다.

DRAM은 command/address 선로를 통해 ACT, READ, WRITE와 대상을 결정한다. 이 정보가 변하면 정확한 data가 잘못된 bank나 row에 쓰일 수 있다. data와 ECC가 함께 그 위치로 이동한 뒤에는 “현재 위치의 data+ECC가 일치한다”는 검사만으로 처음 의도한 위치를 복원하기 어렵다. address를 ECC에 포함하는 설계 같은 추가 보호가 없다면 두 경계가 분리된다.

Alliance DDR4 데이터시트 70~71쪽 CA Parity는 ACT# 및 command와 address·bank·bank-group 신호를 포함하는 even parity를 정의한다. 이 문서에서는 CS#, CKE, ODT가 parity 대상에서 빠진다. “command bus 전체가 보호된다”는 표현은 실제 보호 pin 목록보다 넓다.

한 bit와 두 bit가 바뀌는 차이

주소를 단순화해 네 bit와 parity만 생각하자. 원래 address1010은1이 두 개이므로 even parity bit는0이다. 전송 중 한 bit가 변해1000이 되면 전체1의 개수가 홀수여서 오류를 발견한다. 두 bit가 변해1001이 되면 여전히1이 두 개다. parity가 같은 결과를 만들 수 있다.

이 예는 single parity가 correction code가 아니며 모든 multi-bit corruption을 발견하지도 못함을 보여 준다. 실제 DDR4는 더 많은 pin을 포함하지만 원리는 같다. 검사 bit를 추가했다는 사실보다 예상하는 오류 pattern이 검출 조건에 들어가는지가 중요하다.

확인을 기다리는 latency가 추가된다

CA parity mode에서는 DRAM이 검사를 마친 뒤 내부 명령을 실행하도록 parity latency, PL을 둔다. 같은 문서는 read/write latency에 PL이 추가된다고 명시한다. 가상으로 AL=0, CL=16, PL=4, tCK=1ns라면 외부 READ부터 첫 data 기준은16ns에서20ns로 이동한다. 이 예의 숫자는 관계를 보여 주기 위한 설정이며 특정 speed bin의 권장 조합은 아니다.

오류 없이 진행되는 동안도 이 지연을 latency 정의에 반영해야 한다. parity pin만 연결하고 controller의 data capture 위치를 그대로 두면 정상 frame에서조차 시간선이 어긋난다. 다른 mode와 같이 쓸 때는 허용 PL과 전환 절차도 확인해야 한다.

alert가 알려 주는 것과 controller가 복구할 것

오류를 검출하면 DRAM은 해당 명령을 무시하고 오류 상태·로그와 ALERT#로 host에 알린다. 하지만 알려진 시점 바로 전의 모든 명령이 확정적으로 완료됐다고 단정할 수는 없다. 문서는 tPAR_UNKNOWN 구간에서 실행 여부가 보장되지 않는 명령을 설명한다. 어떤 행이 열렸는지에 대한 controller의 기존 상태 추정도 재검토해야 한다.

복구에는 진행 중 작업 완료와 bank 상태 정리, 로그 확인, status clear 등 해당 mode의 절차가 들어간다. persistent error mode와 일반 mode는 status가 남아 있을 때 checking의 동작도 다르다. ALERT#가 다시 high가 됐다는 pin 관측만으로 checking이 완전히 복원됐다고 처리하면 안 된다.

실제 오류 조사에서는 data path와 CA path의 증거를 분리해 모으는 편이 좋다. bit error가 data frame 자체에 있었는지, 의도와 다른 주소가 합법적인 frame으로 전달됐는지, CA parity가 감지한 pin corruption인지에 따라 필요한 보호가 다르다. 주소 오류의 모든 종류를 하나의 parity 기능이 해결한다고 해석하지 않는다.

CA Parity는 DRAM이 해석하기 직전의 command/address 전달에 일관성 검사를 붙인다. single-bit corruption을 다루는 가치는 분명하지만 coverage 밖의 control pin과 multi-bit pattern, 검출 후 상태 복구가 남는다. data ECC와 함께 쓸 때는 보호가 중복되는지보다 두 검사가 이어서 어느 경로까지 덮는지를 그려야 한다.

DRAM 명령 주소 오류는 데이터 ECC만으로 충분하지 않다 · ariser