모든 이야기

DRAM 행을 바꾸기 전에 비트라인을 다시 맞추는 시간

같은 DRAM bank에서 A행을 읽다가 B행을 읽으려 하면, A행을 닫은 순간 곧바로 B행을 열 수 없다. 이전 읽기의 전기적 흔적을 지우고 새 데이터를 판별할 출발 상태를 다시 만들어야 한다. PRE 명령 뒤 다음 ACT까지의 최소 시간인 tRP는 이 재정렬을 기다린다.

행이 열린 동안 bitline의 두 쪽은 센스 증폭기에 의해 높은 값과 낮은 값으로 나뉘어 있다. 다음 셀을 연결하기 전에 행 선택을 해제하고 센스 증폭기를 꺼야 하며, bitline들은 정해진 기준 상태로 돌아가야 한다. 이 동작을 precharge라고 부른다. 이름 때문에 전하를 무조건 많이 채우는 과정으로 생각하기 쉽지만 목적은 다음 판단에 쓸 초기 상태를 맞추는 것이다.

이전 데이터가 다음 판단에 남으면

AL-DRAM 원 논문의 그림 3과 precharge 설명을 보면 sensing 뒤 높아진 bitline이 기준 전압으로 내려가는 과정에도 끝부분의 시간 비용이 있다. bitline이 큰 커패시턴스와 배선 저항을 가지고 있기 때문이다. 다음 셀이 만든 작은 신호에 이전 상태의 잔여 차이가 더해지면 새 데이터에 불리하게 작용할 수 있다.

가상으로 다음 셀의 올바른 차동 신호가 -30mV라고 하자. 직전 행 때문에 반대 방향의 잔여 차이가 +20mV 남아 있다면 증폭 전 유효 신호는 -10mV다. 부호는 맞지만 여유가 줄었다. 잔여 차이가 +40mV라면 +10mV가 되어 반대 방향을 선택할 수 있다. 실제 DRAM 오류율을 나타내는 수치는 아니며, 초기 차동 성분을 더하는 단순 모델이다.

여기서 중요한 것은 공통 전압과 차동 잔여를 구분하는 일이다. 두 bitline이 같은 양으로 올라간 경우와 한쪽에만 이전 데이터 방향의 차이가 남은 경우는 같지 않다. 실제 equalization 회로와 reference 구조를 생략한 채 기준 전압 편차 하나를 곧바로 논리 오류로 바꾸면 과도한 단순화다. 위 예는 새 정보와 반대 방향의 잔여 차가 경쟁하는 경우에 한정한다.

잔여 차가 RC처럼 감소한다고 가정하면 필요한 대기 시간을 직관적으로 계산할 수 있다. ΔV잔여(t)=ΔV초기×exp(-t/τ)다. 초기 80mV를 5mV 이하로 줄이고 가상 시정수 τ=2ns를 쓰면 t≥2ns×ln(80/5), 약 5.55ns가 필요하다. 목표를 10mV로 완화하면 약 4.16ns다. 끝의 몇 mV를 더 정리하는 데도 시간이 든다.

이 계산으로 실제 tRP 값을 결정할 수는 없다. 실제 회로의 분산 RC, equalizer 동작, 공급 전압, 셀 신호 분포, 입력 offset을 포함하지 않았기 때문이다. 대신 “대부분 전압이 맞았으니 끝부분은 기다릴 필요가 없다”는 생각의 경계를 보여 준다.

접근 횟수보다 행 전환 횟수가 비용을 정한다

tRP를 모든 READ마다 더하면 지연을 과대평가한다. 이미 열린 A행에서 여러 column을 읽는 row hit에는 매번 precharge가 필요하지 않다. 반대로 A행과 B행을 번갈아 읽는다면 동일 bank에서 행을 바꾸는 비용이 반복된다.

설명용으로 tRP=12ns, tRCD=14ns를 놓고 다른 모든 명령 제약이 이미 충족됐다고 가정하자. 행을 바꿀 때마다 PRE→ACT→READ 준비에 26ns가 들어간다. 여덟 요청이 같은 행을 읽는 경우 처음 행이 열려 있다면 중간의 행 전환은 0회다. A와 B를 번갈아 읽으면 중간 전환은 7회이고 준비 간격만 합쳐 182ns다. 실제 전체 실행 시간에는 column 간격과 전송·queue·다른 bank와의 겹침이 들어가므로 이 값을 그대로 benchmark 지연으로 쓰면 안 된다.

이 예의 장점은 어느 부분을 개선해야 하는지가 보인다는 것이다. tRP를 2ns 줄인 가상 변경은 전환 7회에서 총 14ns의 준비 시간을 줄인다. 같은 행의 연속 요청에는 해당 구간의 직접 이득이 없다. 주소 locality를 바꾸는 선택은 물리 timing을 줄이는 선택과 다른 경로로 같은 비용 항목을 줄일 수 있다.

PRE가 나간 시점을 기준으로 보자

Alliance DDR4 데이터시트의 READ→PRE 설명과 AC timing은 다음 ACT에 대해 precharge 시간과 이전 ACT 기준 row-cycle 조건을 함께 확인하도록 한다. 따라서 요청이 끝났다고 생각한 시각부터 tRP를 세면 틀릴 수 있다. 마지막 READ나 WRITE의 후속 제약 때문에 PRE 자체가 아직 발행되지 않았을 수 있다.

또한 다른 bank의 데이터 전달을 tRP 동안 수행할 수 있다면 wall-clock 손실 일부를 숨길 수 있다. tRP가 줄었는데 sustained throughput 변화가 작다는 결과도 이상하지 않다. 그 시간에 공유 자원이 실제로 놀고 있었는지 확인해야 한다.

새 행의 신호를 정확히 읽으려면 이전 행의 차동 흔적이 충분히 정리되어야 한다. tRP의 핵심은 이 초기 조건의 재설정이다. 접근을 분석할 때는 READ 수 대신 bank별 PRE와 행 전환을 세고, PRE가 합법적으로 발행된 시각에서 다음 ACT까지 계산하자. 그러면 precharge의 물리적 필요와 controller가 숨길 수 있는 성능 비용을 함께 이해할 수 있다.