모든 이야기

DRAM 쓰기 CRC는 저장 셀의 오류까지 잡을까

메모리를 안전하게 만들려고 write CRC를 켰다. 이후 DRAM 셀의 보존 오류까지 보호된다고 생각한다면 CRC가 검사하는 위치를 한 단계 잘못 잡은 것이다. DDR4 Write CRC는 controller가 보낸 write frame과 DRAM이 받은 frame의 일치를 검사한다. 이미 저장한 bit가 나중에 변하는 일은 그 검사 시간 밖에 있다.

write 경로를 세 구간으로 그려 보자. controller가 데이터를 만들고, DQ·DQS 선로를 지나 DRAM이 수신하고, 내부 배열에 저장한다. 전송 frame에 CRC를 붙이면 중간 구간에서 변한 정보를 수신 측이 감지할 수 있다. 시간이 흐른 뒤 배열에서 생기는 오류에는 저장 내용을 읽어 검증하는 별도 수단이 필요하다. link 보호와 저장 정보 보호는 서로의 대체물이 아니다.

Alliance DDR4 데이터시트 MR2와 137~142쪽 Write CRC는 CRC encoding과 error alert 절차를 정의한다. 검출은 원본 data를 자동 복원하는 것과 다르다. 오류가 알려졌을 때 controller가 어떻게 재전송하고 상태를 회복할지까지 시스템에 필요하다.

보호를 붙이면서 늘어난 frame

MR2 설명에서는 기본 BL8 frame의8 UI가 CRC를 위해10 UI로 늘어난다. UI는 한 번의 data transfer에 해당하는 시간이다. 가상3200MT/s에서1 UI는0.3125ns이므로8 UI는2.5ns,10 UI는3.125ns다. frame에 붙는 두 UI는0.625ns이고 단순 payload/frame 비율은8/10=80%다.

이 비율을 실제 write bandwidth20% 감소라고 그대로 쓰면 안 된다. bus scheduling의 다른 gap, burst 간 간격, read와의 혼합, CRC mode timing이 함께 작용한다. 원래 다른 제약 때문에 빈 slot이 있었다면 frame 확장의 영향이 다르게 나타날 수 있다. 여기서 계산한 것은 CRC 정보가 물리 frame의 자원을 소비한다는 첫 근사다.

오류가 생긴 때를 바꾸면 답이 달라진다

어떤 write byte를0x5A라고 하자. controller가 계산한 CRC와 함께 frame이 출발했는데 DQ 선로에서 bit 하나가 반전돼0x5B로 수신되면 단일 bit 검출 조건에 해당한다. 반대로 frame은0x5A로 정확히 도착하고 CRC도 일치했지만, 나중에 셀의 bit가 변해0x5B로 읽힌다면 이전 write CRC는 다시 실행되지 않는다. 저장 data에 붙여 유지·검증하는 ECC 등의 범위가 필요하다.

또 controller가 처음부터 틀린0x5B와 그 값에 맞는 CRC를 만들었다면 link CRC는 모순을 발견할 수 없다. 전송 중의 불일치를 검사하는 기준에는 소프트웨어가 의도한0x5A라는 정보가 없기 때문이다. 어떤 검사가 빠졌는지 묻기 전에 오류가 보호 경계의 안에서 발생했는지 바깥에서 발생했는지 표시해야 한다.

검출 확률을 만능 보장으로 바꾸지 않기

이 데이터시트는 사용 polynomial과 특정 오류 class의 검출 범위를 제시한다. CRC width만 보고 모든 임의의 오류가 반드시 검출된다고 결론 내릴 수 없다. 또 검출됐다는 alert와 어떤 frame을 retry해야 하는지 판단하는 과정에는 지연이 있다. controller가 오류를 알았을 때 이미 다른 명령과 burst가 진행 중일 수 있다.

따라서 recovery 정책에는 alert timing, outstanding write 관리, 재시도 대상과 정상 동작 복귀 조건이 필요하다. 무조건 마지막 write 하나만 반복하는 구현이 충분한지 해당 protocol과 명령열에서 확인해야 한다. 정확한 검출 회로가 있어도 복구 절차가 틀리면 시스템 관점의 신뢰성이 완성되지 않는다.

write CRC를 선택할 때는 “어디서 발생한 어떤 오류를 언제 발견하는가”를 먼저 적자. 선로 전송의 불일치를 다루는 데 유용하고, 그 대신 frame·timing·recovery 자원을 요구한다. 저장 후 오류까지 포함한 목표라면 그 이후 구간의 보호를 별도로 붙여야 한다. CRC의 가치는 보호 범위를 크게 말하는 데 있지 않고 그 경계를 정확히 설정했을 때 드러난다.

DRAM 쓰기 CRC는 저장 셀의 오류까지 잡을까 · ariser