DRAM 동작과 타이밍
4장에서 1T1C 셀과 센스 앰프가 비트 하나를 어떻게 저장하고 읽어 내는지 보았다. 이 장에서는 시야를 넓혀, 수십억 개의 셀이 채널·랭크·뱅크·로우·컬럼으로 조직된 DRAM 칩이 메모리 컨트롤러의 명령을 받아 나노초 단위의 타이밍 규칙에 따라 움직이는 모습을 따라간다. "DDR5-6400 CL32"라는 숫자가 무엇을 뜻하는지, 왜 대역폭은 10년 사이 4배가 되었는데 지연은 거의 그대로인지, 리프레시와 스케줄러가 성능을 얼마나 좌우하는지가 이 장의 주제다.
- 채널 → 랭크 → 칩 → 뱅크 그룹 → 뱅크 → 로우/컬럼 계층과, 물리 주소가 이 필드들로 쪼개지는 주소 매핑을 설명할 수 있다.
- ACT·RD·WR·PRE·REF 명령과 로우 버퍼(페이지)의 역할, 오픈/클로즈 페이지 정책의 차이를 이해한다.
- tRCD, CL, tRP, tRAS, tRC, tCCD, tRRD, tFAW, tWR, tRFC의 의미를 알고, 클럭 사이클과 ns를 오가며 계산할 수 있다.
- 로우 히트·미스·컨플릭트 지연과 뱅크 병렬성으로 평균 지연과 실효 대역폭을 추정할 수 있다.
- 리프레시 오버헤드 \(t_{RFC}/t_{REFI}\)를 계산하고, FR-FCFS 스케줄링과 DRAM 전력 구성 요소를 설명할 수 있다.
DRAM의 조직: 채널에서 셀까지
CPU의 메모리 컨트롤러(IMC, Integrated Memory Controller)가 바라보는 DRAM은 여러 층으로 된 트리다. 각 층은 "무엇을 공유하고, 무엇이 독립적인가"로 구분된다. 이 구분이 곧 병렬성의 단위가 되기 때문에, 타이밍과 스케줄링을 이해하려면 먼저 이 계층을 정확히 알아야 한다.
- 채널(Channel) — 명령/주소 버스와 데이터 버스를 따로 가진 독립 경로. 채널이 둘이면 두 요청을 완전히 동시에 처리할 수 있다. DDR5 DIMM 하나는 내부적으로 32비트 폭 서브채널 두 개로 나뉜다(ECC 포함 시 40비트).
- 랭크(Rank) — 데이터 버스 폭을 함께 채우는 칩 묶음. ×8 칩 4개가 모이면 32비트 서브채널 하나를 채운다. 한 채널의 랭크들은 버스를 공유하고 칩 선택(CS) 신호로 구분된다.
- 칩(Device) — 랭크 안의 칩들은 같은 명령을 같은 순간에 실행하고, 각자 데이터 버스의 일부(×4/×8/×16)를 담당한다.
- 뱅크 그룹 · 뱅크(Bank Group, Bank) — 뱅크는 자기만의 로우 디코더와 센스 앰프 행(로우 버퍼)을 가진, 독립적으로 열고 닫을 수 있는 최소 단위다. DDR4부터는 뱅크 몇 개를 묶은 뱅크 그룹이 칩 내부 I/O 경로를 공유한다.
- 로우 · 컬럼(Row, Column) — 뱅크 안의 2차원 셀 배열. 로우 하나(= 한 워드라인에 달린 셀들)가 한 번에 열리고, 그중 일부 컬럼만 입출력된다.
칩 용량은 이 필드들의 곱이다. 16 Gb ×8 DDR5 칩을 예로 들면
한 번의 읽기 명령이 내보내는 양은 버스트(burst)로 정해진다. DDR5는 버스트 길이 BL16이므로 32비트 × 16 = 512비트 = 64바이트, 정확히 CPU 캐시 라인 하나(3장)다. DDR4는 64비트 × BL8 = 64바이트로 같은 크기를 다른 방식으로 채웠다. 즉 DRAM은 바이트 단위가 아니라 캐시 라인 단위로 말한다.
| 계층 | DDR4 예 (8 Gb ×8) | DDR5 예 (16 Gb ×8) | 공유 / 독립 |
|---|---|---|---|
| 채널 | 64b (+8b ECC) | DIMM당 32b 서브채널 × 2 | 버스 독립 → 완전 병렬 |
| 랭크 | ×8 칩 8개 | 서브채널당 ×8 칩 4개 | 데이터 버스 공유, CS로 선택 |
| 뱅크 그룹 × 뱅크 | 4 × 4 = 16 | 8 × 4 = 32 | 뱅크마다 로우 버퍼 독립 |
| 로우 / 뱅크 | 65,536 | 65,536 | 뱅크당 한 번에 1개만 열림 |
| 페이지 (칩 / 랭크) | 1 KB / 8 KB | 1 KB / 4 KB | ACT 한 번에 열리는 양 |
| 버스트 | BL8 × 64b = 64 B | BL16 × 32b = 64 B | = 캐시 라인 |
명령과 로우 버퍼
DRAM은 스스로 판단하지 않는다. 메모리 컨트롤러가 명령/주소(CA) 버스로 보내는 몇 가지 명령을 정해진 시간 간격을 지켜 수행할 뿐이다. 핵심 명령은 다섯 개다.
- ACT(Activate) + 뱅크, 로우 주소 — 워드라인을 켜서 로우 전체의 셀을 비트라인에 연결하고, 4장에서 본 전하 공유 → 센스 앰프 증폭을 거쳐 로우의 모든 비트를 센스 앰프 래치에 붙잡는다. 이 센스 앰프 행이 로우 버퍼(row buffer, 페이지)다.
- RD / WR(Read / Write) + 뱅크, 컬럼 주소 — 이미 열린 로우 버퍼에서 컬럼 일부를 골라 DQ 핀으로 내보내거나(읽기), DQ로 받은 데이터를 로우 버퍼에 덮어쓴다(쓰기). 센스 앰프가 비트라인을 계속 구동하므로 셀에도 그대로 기록된다.
- PRE(Precharge) + 뱅크 — 워드라인을 끄고 비트라인을 \(V_{DD}/2\)로 이퀄라이즈해서, 다음 ACT를 받을 준비를 한다. RD/WR에 자동 프리차지를 붙인 RDA/WRA도 있다.
- REF(Refresh) — 칩 내부 카운터가 가리키는 로우 몇 개를 ACT+PRE해서 셀 전하를 되살린다(7절).
여기서 중요한 비대칭이 드러난다. ACT는 1 KB를 여는데, RD 한 번은 칩당 16바이트(×8 × BL16)만 가져간다. 그러니 로우가 열려 있는 동안 같은 로우의 다른 컬럼을 읽으면 ACT 비용 없이 CL만 기다리면 된다. 이것이 로우 히트(row hit, page hit)다. 반대로 다른 로우가 필요하면 PRE → ACT → RD를 모두 거쳐야 한다(로우 컨플릭트).
오픈 페이지 vs 클로즈 페이지
RD가 끝난 뒤 로우를 열어 둘지, 바로 닫을지는 컨트롤러의 선택이다.
- 오픈 페이지 정책(open-page) — 다음 요청도 같은 로우일 것이라고 기대하고 열어 둔다. 맞으면 히트(CL만), 틀리면 컨플릭트(tRP + tRCD + CL). 순차 접근이 많은 단일 스레드 워크로드에 유리하다.
- 클로즈 페이지 정책(close-page) — RDA/WRA로 매번 자동 프리차지. 모든 접근이 미스(tRCD + CL)가 되지만 최악의 컨플릭트는 사라진다. 코어가 많아 접근이 뒤섞이는 서버에서 자주 쓴다.
실제 컨트롤러는 둘 사이의 적응형 정책을 쓴다. 일정 시간 동안 히트가 없으면 닫거나(타임아웃), 큐에 같은 로우 요청이 남아 있는지 보고 결정한다. 5절 시뮬레이터에서 두 정책을 직접 비교해 보자.
타이밍 파라미터
DRAM 데이터시트의 절반은 타이밍 파라미터 표다. 각 파라미터는 "명령 A 다음에 명령 B를 보내려면 최소 얼마를 기다려야 하는가"라는 규칙이며, 그 뒤에는 모두 물리적 이유가 있다. 비트라인에 전하가 퍼지고 센스 앰프가 증폭하는 시간, 셀이 다시 채워지는 시간, 비트라인이 중간 전압으로 돌아오는 시간, 전원망이 순간 전류를 견디는 한계 같은 것들이다.
가장 기본이 되는 세 파라미터와 그 관계는 다음과 같다.
| 파라미터 | 제약 | 물리적 이유 | 대표값 (DDR5, 2024~2025) |
|---|---|---|---|
| tRCD | ACT → RD/WR | 전하 공유 + 센싱 | ~14–16 ns |
| CL (tAA) | RD → 첫 데이터 | 컬럼 디코드, 로컬/글로벌 I/O, 직렬화 | ~14–17 ns |
| CWL | WR → 쓰기 데이터 | 수신기 준비 | CL − 2 nCK |
| tRP | PRE → ACT | 비트라인 이퀄라이즈 | ~14–16 ns |
| tRAS | ACT → PRE | 셀 재저장(restore) | 32 ns |
| tRC | ACT → ACT (같은 뱅크) | tRAS + tRP | ~46–48 ns |
| tCCD_S / tCCD_L | RD → RD (다른 / 같은 BG) | BG 내부 I/O 경로 공유 | 8 nCK / ~5 ns 이상 |
| tRRD_S / tRRD_L | ACT → ACT (다른 뱅크) | ACT 순간 전류 | 8 nCK / ~5 ns 이상 |
| tFAW | 연속 ACT 4개가 들어갈 창 | 전원망·전하 펌프 한계 | ~10–30 ns (페이지 크기·속도 의존) |
| tWR | 마지막 쓰기 데이터 → PRE | 셀에 완전히 기록 | 30 ns (DDR4: 15 ns) |
| tRTP | RD → PRE | 읽기 데이터 확보 | ~7.5 ns |
| tWTR | 쓰기 데이터 끝 → RD | 버스 방향 전환 | ~2.5–10 ns |
| tRFC | REF → 다음 ACT | 여러 로우 동시 리프레시 | ~295 ns (16 Gb) |
표에서 눈여겨볼 점은 BL16 버스트가 버스를 차지하는 시간(8 nCK)과 tCCD_S가 같다는 것이다. 서로 다른 뱅크 그룹을 번갈아 읽으면 데이터 버스를 빈틈없이 채울 수 있지만, 같은 뱅크 그룹을 연달아 읽으면 tCCD_L 때문에 버스트 사이에 틈이 생긴다. 뱅크 그룹이라는 계층이 생긴 이유는 칩 내부 코어 속도가 I/O 속도를 따라가지 못하기 때문이다. 코어는 느린 채로 두고 여러 뱅크 그룹을 번갈아 쓰는 방식으로 I/O 속도를 올린 것이다.
인터랙티브 타이밍 다이어그램
속도 등급과 "CL-tRCD-tRP" 표기
메모리 모듈 라벨의 "DDR5-6400 CL32-39-39-102" 같은 표기는 데이터 전송률과 주요 타이밍을 클럭 사이클 수로 적은 것이다. 6400은 핀당 초당 전송 횟수(MT/s)이고, DDR(Double Data Rate)은 클럭의 상승·하강 에지 모두에서 전송하므로 실제 클럭 주파수는 절반인 3200 MHz다. 네 숫자는 순서대로 CL, tRCD, tRP, tRAS다.
이 변환을 세대별로 해 보면 놀라운 사실이 드러난다. CL의 사이클 수는 세대마다 크게 늘었지만, ns로 환산한 지연은 거의 제자리다.
| 규격 | tCK | CL-tRCD-tRP | CL [ns] | tRCD+CL [ns] | 64b 채널 피크 대역폭 |
|---|---|---|---|---|---|
| DDR3-1600 | 1.25 ns | 11-11-11 | 13.75 | 27.5 | 12.8 GB/s |
| DDR4-2400 | 0.833 ns | 17-17-17 | 14.17 | 28.3 | 19.2 GB/s |
| DDR4-3200 | 0.625 ns | 22-22-22 | 13.75 | 27.5 | 25.6 GB/s |
| DDR5-4800 (JEDEC B) | 0.417 ns | 40-39-39 | 16.67 | 32.9 | 38.4 GB/s |
| DDR5-6400 (JEDEC) | 0.3125 ns | 46-46-46 | 14.38 | 28.8 | 51.2 GB/s |
| DDR5-6400 (XMP 오버클럭) | 0.3125 ns | 32-39-39 | 10.0 | 22.2 | 51.2 GB/s |
10여 년 동안 대역폭은 4배가 되었지만 첫 데이터까지의 지연은 ~14 ns 근처에 머물러 있다. 지연을 결정하는 것이 I/O 속도가 아니라 셀 어레이의 아날로그 물리, 즉 수십 fF짜리 셀 커패시터가 그보다 몇 배 큰 비트라인 커패시턴스를 흔드는 속도(4장)이기 때문이다. 1장에서 본 메모리 월의 핵심이 바로 이것이다.
속도 등급 → 실제 지연 계산기
로우 히트·미스·컨플릭트와 뱅크 병렬성
요청이 도착했을 때 해당 뱅크의 상태에 따라 지연은 세 가지로 갈린다.
평균 지연은 세 경우의 가중 평균이다. 히트 60 %, 미스 10 %, 컨플릭트 30 %라면
뱅크 병렬성과 인터리빙
지연이 수십 ns라도 대역폭까지 그만큼 나쁜 것은 아니다. 명령 버스는 한 사이클에 명령 하나를 보낼 수 있으므로, 뱅크 0이 tRCD를 기다리는 동안 뱅크 1에 ACT, 뱅크 2에 RD를 보낼 수 있다. 연속된 요청이 서로 다른 뱅크로 흩어지도록 주소를 배치하는 것을 뱅크 인터리빙(bank interleaving)이라 한다. 이상적으로는 뱅크 \(N\)개가 tRC를 서로 겹쳐 숨겨서, 데이터 버스가 쉬지 않고 버스트를 내보낸다.
하지만 ACT를 무한히 빨리 보낼 수는 없다. ACT 한 번은 로우 전체의 비트라인 수천 개를 한꺼번에 충방전하므로 큰 순간 전류가 흐른다. 그래서 ACT 사이 최소 간격 tRRD와, 연속 ACT 4개가 반드시 들어가야 하는 창 tFAW(Four Activate Window)가 정해져 있다.
예를 들어 tFAW를 13 ns로 가정하면 초당 ACT는 최대 \(4/13\ \text{ns} \approx 3.1\times10^8\)회다. 모든 접근이 컨플릭트/미스여서 ACT 한 번에 64바이트만 가져간다면 대역폭 상한은 \(3.1\times10^8\times64 \approx 19.7\) GB/s로, DDR5-6400 서브채널의 피크 25.6 GB/s에 못 미친다. 랜덤 접근이 순차 접근보다 느린 이유가 지연만이 아니라 전력 예산에도 있다는 뜻이다.
뱅크 · 로우 버퍼 시뮬레이터
주소 매핑: 물리 주소를 비트로 자르기
CPU가 내는 물리 주소는 그냥 하나의 큰 정수다. 메모리 컨트롤러는 이 주소의 비트들을 잘라 채널·랭크·뱅크 그룹·뱅크·로우·컬럼 필드에 배정한다. 이 배정 규칙, 곧 주소 매핑(address mapping)은 하드웨어에 고정된 단순한 배선이지만, 어떤 비트를 어디에 두느냐에 따라 같은 프로그램의 히트율과 병렬성이 크게 달라진다.
매핑 설계의 기본 원칙은 두 가지다. 첫째, 공간 지역성을 로우 버퍼에 담는다. 캐시 라인 몇 개가 연달아 접근될 때 같은 로우에 머물도록 컬럼 비트를 낮은 쪽에 둔다. 둘째, 충돌을 여러 뱅크로 흩는다. 행렬의 열 방향 순회처럼 큰 2의 거듭제곱 간격(스트라이드)으로 접근하면, 매핑 A에서는 뱅크 비트가 변하지 않고 로우 비트만 변해서 한 뱅크에서 컨플릭트가 연달아 일어난다. 이를 막기 위해 많은 컨트롤러가 로우 비트 일부를 뱅크 비트에 XOR해 섞는 순열 기반 인터리빙(permutation-based / XOR bank hashing)을 쓴다.
주소 매핑 비트 분해기
리프레시: 잊어버리는 메모리의 대가
4장에서 보았듯 DRAM 셀 커패시터의 전하는 접합 누설, GIDL, 서브스레숄드 누설로 조금씩 빠져나간다. 대부분의 셀은 수 초를 버티지만, 수십억 셀 중 가장 약한 꼬리 분포의 셀까지 지키기 위해 JEDEC는 모든 셀을 정해진 창 안에 한 번씩 다시 써 주도록 규정한다. 이 창이 리프레시 주기 \(t_{REFW}\)다.
- DDR4: \(t_{REFW}\) = 64 ms 동안 REF 명령 8192회 → \(t_{REFI}\) = 7.8 µs. 85 °C 이상 고온에서는 누설이 빨라져 두 배로 자주(32 ms, 3.9 µs).
- DDR5: 기본 \(t_{REFW}\) = 32 ms, REF 8192회 → \(t_{REFI}\) = 3.9 µs. 고온에서는 1.95 µs.
REF 한 번이 들어오면 칩은 내부 카운터가 가리키는 로우들을 모든 뱅크에서 동시에 ACT·PRE한다. 이 동안(\(t_{RFC}\)) 랭크 전체가 다른 명령을 받을 수 없다. 뱅크당 로우 수를 REF 횟수로 나누면 REF 한 번에 뱅크마다 몇 개의 로우를 새로 고쳐야 하는지 나온다. 16 Gb DDR5 ×8(뱅크당 65,536 로우)이라면 \(65{,}536/8192 = 8\)개다.
문제는 이 오버헤드가 용량과 함께 커진다는 것이다. REF 횟수는 8192로 고정인데 칩의 로우 수는 세대마다 두 배로 늘기 때문에, REF 한 번에 더 많은 로우를 처리해야 한다. 한꺼번에 여는 로우를 늘리면 전류 한계(tFAW와 같은 이유)에 걸리므로 tRFC가 길어질 수밖에 없다.
| 칩 용량 | DDR3 tRFC | DDR4 tRFC | DDR5 tRFC (all-bank) | DDR5 tRFCsb (same-bank) |
|---|---|---|---|---|
| 4 Gb | 260 ns | 260 ns | — | — |
| 8 Gb | 350 ns | 350 ns | 195 ns | ~115 ns |
| 16 Gb | — | 550 ns | 295 ns | ~130 ns |
| 32 Gb | — | — | ~410 ns | ~190 ns |
DDR5는 이를 누그러뜨리기 위해 동일 뱅크 리프레시(REFsb, same-bank refresh)를 도입했다. REFsb는 모든 뱅크 그룹에서 같은 번호의 뱅크 하나씩(32개 중 8개)만 리프레시하고, 나머지 24개 뱅크는 정상 접근을 계속 받는다. LPDDR의 뱅크별 리프레시(REFpb)도 같은 아이디어다. 이 밖에도 온도 센서로 저온에서 리프레시를 줄이거나, 셀 보존 시간을 측정해 강한 로우는 덜 자주 리프레시하는 연구(RAIDR 등)가 있다.
리프레시 오버헤드 계산기
메모리 컨트롤러와 스케줄링
지금까지의 규칙을 모두 지키면서 요청들을 어떤 순서로 처리할지 정하는 것이 메모리 컨트롤러의 핵심 업무다. 컨트롤러는 코어들로부터 온 읽기/쓰기 요청을 큐에 쌓고, 매 사이클 "지금 타이밍 규칙상 보낼 수 있는 명령들" 중 하나를 골라 명령 버스에 싣는다.
FCFS와 FR-FCFS
가장 단순한 정책은 도착 순서대로 처리하는 FCFS(First-Come First-Served)다. 공정하지만, 로우 A와 로우 B를 번갈아 요청하는 스트림이 오면 매번 컨플릭트가 난다. 2000년 Rixner 등이 제안한 FR-FCFS(First-Ready FCFS)는 두 단계 우선순위를 쓴다.
- First-Ready: 지금 열려 있는 로우에 히트하는(= 바로 RD/WR 가능한) 요청을 먼저.
- FCFS: 그런 요청이 없으면 가장 오래된 요청.
로우 히트를 몰아서 처리하므로 히트율과 처리량이 크게 오른다. 대가는 공정성이다. 로우 히트를 계속 만들어 내는 스트리밍 스레드가 있으면 다른 스레드의 요청은 한없이 밀릴 수 있다(기아, starvation). 그래서 실제 컨트롤러는 요청 나이 상한(age cap), 한 로우에서 연속 히트 횟수 제한, 스레드별 우선순위(ATLAS, TCM 같은 연구) 등을 더한다.
명령 버스 파이프라이닝과 쓰기 배치
DDR5에서 ACT와 RD/WR은 명령 버스 2사이클을, PRE는 1사이클을 쓴다. 한 뱅크의 tRCD·CL을 기다리는 동안 명령 버스는 다른 뱅크의 명령으로 채워진다. 잘 스케줄된 컨트롤러는 여러 뱅크의 ACT → RD → PRE 사슬을 엇갈려 겹쳐서 데이터 버스를 연속 버스트로 채운다. 한편 데이터 버스는 양방향이라 읽기 ↔ 쓰기 전환 때마다 tWTR·tRTW만큼 버스가 논다. 그래서 컨트롤러는 쓰기를 버퍼에 모았다가 버퍼가 상한(high watermark)에 이르면 한꺼번에 쓰고(write drain), 하한(low watermark)까지 비우면 다시 읽기로 돌아간다.
스케줄러 비교: FCFS vs FR-FCFS
DRAM 전력: 활성화, 배경, 셀프 리프레시
서버에서 DRAM은 시스템 전력의 상당 부분(워크로드에 따라 대략 10~30 %)을 차지한다. DRAM 전력은 크게 네 가지로 나뉜다.
- 활성화 전력 — ACT/PRE마다 로우 전체의 비트라인을 충방전하는 에너지. 1 KB 로우를 열어 64 B만 쓰고 닫으면 대부분이 낭비다. 로우 히트율이 높으면 줄어든다.
- 읽기/쓰기(버스트) 전력 — 컬럼 경로와 I/O 드라이버, ODT(종단 저항)에서 소모. 전송 비트 수에 비례한다.
- 배경 전력 — 아무 일을 하지 않아도 주변 회로, DLL, 클럭 수신기, 내부 전원 발생기가 쓰는 전력. 뱅크가 열려 있으면(active standby) 닫혀 있을 때(precharge standby)보다 크다.
- 리프레시 전력 — tRFC 동안의 큰 전류 × 리프레시 빈도. 용량이 커질수록, 온도가 높을수록 증가한다.
데이터시트는 이를 상태별 전류 IDD로 제공한다. Micron의 전력 계산 방식을 따르면, ACT 한 번의 에너지는 ACT-PRE를 tRC마다 반복할 때의 전류(IDD0)에서 배경 전류를 뺀 것으로 추정한다.
| IDD | 상태 | 상대 크기 | 의미 |
|---|---|---|---|
| IDD0 | ACT-PRE 반복 (tRC 주기) | 중간 | 활성화 에너지 추정의 기준 |
| IDD2N / IDD2P | 프리차지 스탠바이 / 파워다운 | 낮음 / 매우 낮음 | 모든 뱅크 닫힘 |
| IDD3N / IDD3P | 액티브 스탠바이 / 파워다운 | 낮음~중간 | 로우가 열린 채 대기 |
| IDD4R / IDD4W | 연속 읽기 / 쓰기 버스트 | 높음 | 대역폭에 비례하는 전력 |
| IDD5B | 연속 리프레시 (tRFC 동안) | 가장 높음 | 짧은 순간의 피크 전류 |
| IDD6 | 셀프 리프레시 | 최저 (수~수십 mA) | 외부 클럭 없이 데이터 보존 |
셀프 리프레시(Self-Refresh)는 시스템이 잠들 때 쓰는 모드다. 컨트롤러가 SRE 명령을 보내면 DRAM은 외부 클럭 없이 내부 발진기로 스스로 리프레시하며 데이터만 지킨다. 노트북의 절전(S3, suspend-to-RAM)이 이 상태다. LPDDR은 여기에 온도에 따라 리프레시 주기를 바꾸는 TCSR, 쓰지 않는 영역은 리프레시하지 않는 부분 어레이 셀프 리프레시(PASR) 같은 기능을 더해 대기 전력을 더 줄인다(6장). 짧은 유휴 구간에는 셀프 리프레시보다 진입·탈출이 빠른 파워다운(입력 버퍼와 클럭 수신 회로 정지)을 쓴다.
핵심 정리
- DRAM은 채널 → 랭크 → 칩 → 뱅크 그룹 → 뱅크 → 로우/컬럼으로 조직된다. 채널은 버스가 독립, 랭크는 버스를 공유, 뱅크는 로우 버퍼가 독립이다. DDR5 16 Gb ×8 칩은 32뱅크 × 64K 로우 × 1 KB 페이지다.
- ACT는 로우 전체를 로우 버퍼(센스 앰프)로 열고, RD/WR은 그 일부(버스트 64 B)를 입출력하며, PRE는 로우를 닫는다. REF는 셀 전하를 주기적으로 되살린다.
- tRCD(ACT→RD), CL(RD→데이터), tRP(PRE→ACT), tRAS(ACT→PRE), tRC = tRAS + tRP. tCCD·tRRD·tFAW는 뱅크 그룹 구조와 전력 한계에서 나온다.
- "CL-tRCD-tRP"는 사이클 수다. \(t_{CK} = 2000/\text{MT/s}\) ns로 환산하면 세대가 바뀌어도 CL은 ~14 ns 근처로 거의 일정하다. 대역폭은 늘었지만 지연은 셀 물리에 묶여 있다.
- 지연은 히트(CL) < 미스(tRCD+CL) < 컨플릭트(tRP+tRCD+CL)로 갈린다. 오픈/클로즈 페이지 정책과 주소 매핑이 히트율을, 뱅크 인터리빙이 병렬성을 결정한다.
- 주소 매핑은 물리 주소 비트를 필드로 자르는 규칙이다. 컬럼 비트를 아래에 두면 로우 지역성을, 뱅크 비트를 아래에 두거나 XOR 해시를 쓰면 병렬성과 스트라이드 내성을 얻는다.
- 리프레시 오버헤드 ≈ tRFC/tREFI (DDR4 16 Gb ~7 %, 고온 ~14 %). 용량이 커질수록 tRFC가 늘어 오버헤드가 커지며, DDR5 동일 뱅크 리프레시(REFsb)가 이를 완화한다.
- FR-FCFS는 로우 히트를 우선해 처리량과 에너지 효율을 높이지만 기아를 막는 장치가 필요하다. 전력은 활성화·버스트·배경·리프레시로 나뉘고, 셀프 리프레시가 대기 전력을 최소화한다.
확인 퀴즈
1. DDR5-6400 CL32 모듈의 CAS 지연을 ns로 환산하면?
2. tRP = tRCD = CL = 14 ns일 때, 다른 로우가 열려 있는 뱅크에 읽기 요청이 오면 첫 데이터까지 최소 얼마가 걸리는가? (버스트 시간 제외)
3. DDR4 16 Gb 칩(tRFC = 550 ns)을 85 °C 이하에서 쓸 때 리프레시로 랭크가 멈춰 있는 시간의 비율은 대략?
4. tFAW 제약이 존재하는 가장 근본적인 이유는?
5. FR-FCFS 스케줄러에 대한 설명으로 옳은 것은?
6. 매핑 [로우 | 뱅크 | 컬럼 | 오프셋]에서 프로그램이 정확히 '로우 버퍼 크기 × 뱅크 수' 간격으로 메모리를 순회하면 어떤 일이 생기고, 흔한 해결책은?