DRAM 자동 행 닫기는 요청 즉시 실행되지 않는다
READ 명령에 Auto Precharge를 켜면 DRAM이 알아서 행을 닫는다. 명령 하나를 아꼈으니 다음 행도 바로 열 수 있을 것 같지만, 자동화되는 것은 PRE의 발행이지 precharge 작업의 생략이 아니다. 이 기능을 제대로 쓰려면 언제 내부에서 닫기가 시작되고 어떤 row hit 기회를 포기하는지 함께 봐야 한다.
Auto Precharge를 붙인 READ나 WRITE는 데이터 작업 뒤 필요한 timing을 만족할 때 행 닫기를 수행하도록 예약한다. controller가 별도 PRE 명령을 command bus에 내보내지 않아도 된다. Alliance DDR4 데이터시트의 Read with Auto Precharge 파형과 WRITE auto-precharge timing은 이후 같은 bank ACT까지의 제약을 보여 준다. 자동이라는 말이 명령 후 임의 즉시 실행을 뜻하지는 않는다.
명령 한 개를 아끼는 일정
가상으로 어떤 bank의 행이 충분히 오래 열려 있어 tRAS minimum은 이미 충족되었다고 하자. AL=0, tRTP=8ns, tRP=12ns, READ 발행은 0ns다. 추가 조건이 없다면 내부 precharge 시작 후보는 8ns이고 다음 ACT 후보는 20ns다.
명시적인 방식에서는 READ 0ns, PRE 8ns, ACT 20ns를 발행한다. 자동 방식에서는 Auto Precharge READ 0ns와 ACT 20ns만 외부에서 발행한다. 같은 physical timing을 만족하면서 8ns의 command slot을 비울 수 있다. 다른 bank의 합법 명령이 그 slot을 필요로 한다면 이 점이 도움이 된다.
| 가상 방식 | 외부 명령열 | 다음 같은 bank ACT 후보 |
|---|---|---|
| 명시적 PRE | READ 0ns, PRE 8ns, ACT 20ns | 20ns |
| Auto Precharge | RDA 0ns, ACT 20ns | 20ns |
이 표의 목적은 빠른 지연을 주장하는 것이 아니라 어느 자원을 아끼는지 구분하는 것이다. Auto Precharge가 tRP 12ns를 없앤 것이 아니다. 실제로는 이전 ACT의 tRAS·tRC와 READ/WRITE 후속 조건, mode별 규칙을 모두 추가해야 한다.
만약 이전 ACT 기준 tRAS가 15ns까지 PRE를 막는 조건이었다면 내부 닫기 후보는 max(8,15)=15ns가 되고 다음 ACT는 27ns 이후다. WRITE였다면 마지막 data 뒤 write recovery가 행 닫기를 늦출 수 있다. 자동 명령의 이름보다 내부 시작점을 제한하는 가장 늦은 조건을 찾아야 한다.
다음 요청이 같은 행이라면
Auto Precharge를 사용하지 않았다면 현재 행의 다른 column 요청을 row hit로 처리할 수 있다. 자동 닫기가 시작된 뒤에는 같은 행을 다시 읽더라도 재활성화가 필요할 수 있다. 요청 locality가 좋은데 모든 접근에 Auto Precharge를 붙이면 명령을 아끼는 대신 ACT와 PRE 작업을 반복한다.
반대로 다음 요청이 같은 bank의 다른 행이라면 미리 닫아 두는 것이 도움이 될 수 있다. 뒤의 요청이 도착한 뒤 명시 PRE를 발행하는 일정보다 precharge 일부를 앞당겨 겹칠 수 있기 때문이다. 이 이득은 “다음 행이 다르다”는 예측이 맞고 충분한 선행 시간이 있을 때 생긴다.
판단의 중심은 현재 요청만이 아니다. 동일 행의 재사용 가능성, 반대 경우의 행 전환 지연, command bus 혼잡도를 함께 비교해야 한다. idle 시간이 길다는 사실도 독립적으로 충분하지 않다. 행을 닫는 준비와 다음 요청의 group·direction 제약은 서로 다른 자원에 걸린다.
자동 닫기 상태도 controller가 알아야 한다
명시 PRE가 trace에 없다고 bank가 계속 active라고 모델링하면 다음 ACT를 잘못 판단한다. 반대로 RDA가 나간 순간 bank를 즉시 idle로 바꾸면 너무 이른 ACT를 허용한다. controller의 상태는 “자동 닫기가 예약됨”, “precharge 진행 중”, “다음 활성화 가능”을 시간 제약과 맞춰 해석해야 한다.
read 데이터가 외부 bus로 나오기 전에 합법적인 내부 PRE가 시작되는 파형도 있을 수 있다. 데이터 output은 내부 column pipeline과 분리되어 있기 때문이다. 외부 burst가 끝났는지만 보고 자동 PRE 시작을 추측하기보다 datasheet가 정한 command interval을 사용해야 한다.
Auto Precharge의 실질적인 가치는 행 닫기 결정을 현재 명령과 함께 전달해 command slot과 선행 시간을 확보하는 데 있다. 그 결정이 맞았는지는 다음 요청의 locality로 평가한다. 자동화를 지연 삭제로 착각하지 않고, 내부 닫기 시작점과 잃는 row hit 기회를 나란히 계산하면 기능의 이득과 대가가 정확하게 보인다.