DRAM READ 명령을 일찍 보내고 내부에서 기다리게 하는 방법
DRAM의 행 준비가 아직 끝나지 않았는데 READ 명령을 미리 보내는 mode가 있다. Additive Latency, 줄여서 AL이다. 이름에 latency가 들어가니 단순히 느려지는 옵션처럼 보이지만 목적은 명령을 받아 두는 시점과 내부에서 실행하는 시점을 분리하는 데 있다. 실제 row 준비 작업을 생략하는 기능은 아니다.
ACT가 행을 열면 내부 sensing을 기다려야 한다. 기본 schedule에서는 tRCD가 충족된 뒤 READ를 발행한다. AL이 켜져 있으면 READ를 더 일찍 외부 bus로 전달하고 DRAM 내부에서 AL만큼 보류한 뒤 실행할 수 있다. Alliance DDR4 데이터시트 MR1의 Additive Latency 설명은 RL=AL+CL, WL=AL+CWL 관계를 명시하며 지원 조직과 AL encoding도 제한한다.
출력이 같아도 command slot이 달라지는 예
tCK=1ns, tRCD=14clock, CL=14clock인 가상 조건을 놓자. 다른 추가 latency는 0이다. AL=0이면 ACT를 0ns에 보낸 뒤 READ는 최소 14ns에 보낼 수 있고 첫 데이터는 28ns에 나온다.
AL=12clock, 즉 이 가상 CL에서 CL-2를 쓰면 외부 READ를 2ns에 보낼 수 있다. 내부 READ는 2+12=14ns에 실행되고 데이터는 14+14=28ns에 나온다. ACT 기준 첫 데이터 시각은 두 일정에서 같다.
| 가상 mode | 외부 READ | 내부 READ | 첫 데이터 |
|---|---|---|---|
| AL=0 | 14ns | 14ns | 28ns |
| AL=12 | 2ns | 14ns | 28ns |
명령 전달은 12ns 앞당겼지만 내부 준비 14ns와 CAS 작업을 제거한 것이 아니다. 그 대신 14ns의 command slot이 비었다. 그 시점에 다른 bank의 ACT나 READ 같은 합법 명령을 배치할 수 있다면 command schedule을 편하게 만들 수 있다. AL의 이득은 이런 자원 배치에 있다.
한편 이미 원하는 행이 열려 있는 경우에는 이야기가 달라진다. AL=0에서 외부 READ를 0ns에 보내면 첫 데이터는 14ns다. AL=12를 유지한 채 같은 시각에 외부 READ를 보내면 전체 read latency는 26ns가 된다. 이전 예에서 “AL을 넣어도 출력이 같았다”는 결과를 모든 접근으로 일반화할 수 없는 이유다. row 준비 뒤 명령을 당겨 보낼 기회가 있었는지가 중요하다.
AL은 임의의 delay knob가 아니다
공개 데이터시트의 AL 선택은 0, CL-1, CL-2처럼 mode register에 정해져 있다. 이 데이터시트는 x16 조직에서 AL을 지원하지 않는다고 명시한다. 위 계산은 AL이 지원되는 구성의 가상 조건이다. 필요한 충돌을 없애려고 아무 cycle 수나 설정하는 방식으로 이해하면 안 된다. controller와 DRAM이 같은 mode를 알고 전체 latency를 일치시켜야 한다.
READ 뒤 PRE까지의 외부 간격에도 AL이 들어간다. WRITE의 데이터 위치 역시 AL+CWL로 달라진다. 기존 schedule에서 READ를 당긴 뒤 데이터 capture나 ODT 전환 시점을 그대로 두면 다른 경로가 어긋난다. 명령 하나의 발행 시각만 바꾸는 옵션이 아니라 관련 latency 정의들을 함께 바꾸는 mode다.
또한 AL로 command bus가 편해졌어도 data bus가 이미 포화라면 throughput 이득이 제한될 수 있다. 요청이 적어서 command 충돌이 없거나 row hit 지연이 더 중요한 작업에는 추가 기다림의 대가가 눈에 띌 수 있다. “bus efficiency를 돕는다”는 설명은 특정 모든 workload에서 빨라진다는 보증이 아니다.
외부와 내부의 두 시간선을 나누기
AL을 해석할 때는 trace에 외부 command row와 내부 실행 row를 따로 그리면 된다. 외부 READ 시각에 AL을 더했을 때 tRCD를 충족하는지, 거기서 CL을 더한 첫 데이터 시각이 controller가 기대하는 위치와 같은지 확인한다. WRITE에는 CWL을 사용해 같은 작업을 한다.
그다음 비어진 command slot에 실제로 무엇을 넣을 수 있는지 살펴보자. 그 자리에 다른 합법 명령이 없다면 명령을 당겨 보낸 이점이 작다. 반대로 여러 bank 준비가 충돌하던 schedule에서는 내부 보류가 발행 자유도를 줄 수 있다.
Additive Latency는 느린 DRAM의 물리 준비 시간을 없애는 우회로가 아니라 명령 전달과 실행을 나누는 도구다. 이 차이를 기억하면 이름의 latency만 보고 판단하지 않고, command slot의 활용과 개별 read 지연을 함께 비교할 수 있다.