title: Memory Controller
date: 2025-06-22
category: system
tags: [memory controller, DRAM, DDR, memory interface, scheduling, ECC, refresh]
Memory Controller
개요
Memory Controller는 CPU와 메인 메모리(DRAM) 사이에서 데이터 흐름을 관리하는 핵심 디지털 회로이다. DRAM은 주기적인 리프레시가 필요하고, 복잡한 타이밍 제약(tRCD, tCAS, tRP 등)을 가지므로 CPU가 직접 접근할 수 없다. Memory Controller는 물리 주소를 bank/row/column으로 해석하고 명령 생성과 스케줄링을 담당하여, CPU에는 단순한 읽기/쓰기 인터페이스를 제공한다.
현대 시스템에서 Memory Controller의 설계는 시스템 지연 시간, 대역폭, 전력 소비에 직접적인 영향을 미친다. Intel은 2008년 Nehalem부터, AMD는 2003년 K8부터 Memory Controller를 CPU 다이 내부에 통합(Integrated Memory Controller, IMC)하였으며, 이는 지연 시간과 대역폭을 크게 개선했다.
핵심 개념
Memory Controller 아키텍처
Memory Controller는 다음과 같은 핵심 컴포넌트로 구성된다:
| 컴포넌트 | 기능 |
|---|---|
| Request Scheduler | 대기 중인 요청을 버퍼링하고 최적의 순서로 재정렬 |
| Refresh Controller | 온도와 세대 조건에 맞춰 리프레시 명령을 스케줄링 |
| Row Buffer Manager | 열 버퍼(Sense Amplifiers)의 상태를 관리 |
| ECC Engine | 오류 정정 코드 생성/검증 (SECDED) |
| Command/Address Decoder | CPU 요청을 DRAM 명령(ACT, RD, WR, PRE)으로 변환 |
| Data Path / PHY | CPU와 DRAM 사이의 물리적 신호 인터페이스 |
| Power Management Unit | Self-refresh, CKE, 전압/주파수 관리 |
DRAM 타이밍 파라미터
Memory Controller가 관리하는 핵심 타이밍 파라미터:
| 파라미터 | 설명 | 비고 |
|---|---|---|
| tCAS (CL) | READ 후 첫 데이터가 나오기까지의 지연 | 모듈 프로파일에 따라 달라짐 |
| tRCD | ACT 후 RD/WR 가능까지의 지연 | 모듈 프로파일에 따라 달라짐 |
| tRP | PRE 후 새 행 활성화까지의 지연 | 모듈 프로파일에 따라 달라짐 |
| tRC | 같은 행을 다시 열기까지의 전체 주기 | 일반적으로 tRAS + tRP |
| tRAS | 행을 최소로 열어 두어야 하는 시간 | tRC를 이루는 핵심 제약 |
| tREFI | 평균 refresh 간격 | DDR5는 85°C 이하 32ms, 85~95°C 16ms |
| tRFC | refresh 명령 수행 시간 | density에 따라 달라짐 |
스케줄링 알고리즘
Memory Controller의 요청 스케줄러는 DRAM 효율성을 극대화하기 위해 다양한 알고리즘을 사용한다:
- FCFS (First-Come First-Served): 가장 단순한 방식. 요청 순서대로 처리하나 DRAM 효율이 낮다.
- FR-FCFS (First-Ready FCFS): Row-buffer hit인 요청을 우선 처리하여 지연을 최소화한다. 현대 컨트롤러의 대표 방식.
- Write-Back Scheduling: 쓰기 요청을 배치 처리하여 버스 경합을 줄인다.
- Per-Bank Scheduling: 각 은행(bank)별로 독립적으로 스케줄링하여 은행 간 병렬성을 극대화한다.
서버와 GPU 가속기처럼 메모리 동시성이 높은 시스템에서는 단순히 평균 지연만 낮추는 것이 아니라, 읽기 우선순위와 QoS를 함께 관리해야 한다. 예를 들어 읽기 지연에 민감한 CPU 코어 요청과 대역폭 집약적인 DMA 요청이 동시에 들어오면, 컨트롤러는 read draining과 write draining 구간을 나누고 starvation 방지용 age counter를 함께 사용한다.
DDR5 이후에는 bank group, 서브채널, on-die ECC, PMIC 특성이 함께 얽히므로 스케줄러가 고려해야 할 제약도 늘어났다. 같은 rank 안에서도 bank group 간 전환 페널티와 refresh 타이밍이 다르게 체감될 수 있어, 주소 인터리빙 정책과 명령 발행 정책을 함께 최적화해야 실제 대역폭이 나온다.
Row Buffer 정책
| 정책 | 동작 | 장점 | 단점 |
|---|---|---|---|
| Open-Page | 접근 후 행을 열어놓음 | 공간 지역성(spatial locality)에 효과적 | 행 충돌 시 precharge 오버헤드 |
| Closed-Page | 접근 즉시 precharge | 임의 접근에 효과적 | 행 활성화 에너지 낭비 |
| Adaptive | 접근 패턴에 따라 동적 전환 | 최적의 균형 | 구현 복잡도 높음 |
리프레시 관리
DRAM 셀은 커패시터에 저장된 전하가 시간에 따라 누설되므로, 컨트롤러가 온도 조건에 맞는 주기로 리프레시 명령을 발행해야 한다:
- All-Bank Refresh (REFab): 모든 은행을 동시에 리프레시. 표준 방식.
- Same-Bank Refresh (REFsb): DDR5 기능. 개별 은행만 리프레시하여 다른 은행의 서비스를 유지.
- Temperature-Compensated Refresh: 저온 환경에서 리프레시 빈도를 감소시켜 전력 절약.
- Targeted Row Refresh (TRR): RowHammer 공격을 완화하기 위해 인접 행을 리프레시.
비교/분석
DDR 세대별 Memory Controller 비교
| 항목 | DDR3 | DDR4 | DDR5 |
|---|---|---|---|
| 전압 | 1.5V | 1.2V | 1.1V |
| 최대 전송 속도 | 2133 MT/s | 3200 MT/s | 8800 MT/s |
| 프리페치 | 8n | 8n | 16n |
| Bank Groups | — | 4 | 8 |
| 최대 DIMM 용량 | 8GB | 64GB | 512GB |
| 버스트 길이 | 8 | 8 | 16 (BL16) |
| On-die ECC | 없음 | 없음 | 필수 |
| 서브채널 | 없음 | 없음 | 있음 (2×32-bit) |
| 리프레시 간격 | 64ms | 64ms | 32ms (≤85°C) |
통합 vs 분리 Memory Controller
| 항목 | 통합 (IMC) | 분리 (Northbridge) |
|---|---|---|
| 지연 시간 | 낮음 (칩셋 홉 없음) | 높음 (추가 버스 홉) |
| 대역폭 | 높음 (짧은 트레이스) | 낮음 |
| 전력 | 낮음 | 높음 |
| 유연성 | 특정 DRAM 타입에 고정 | 다양한 메모리 타입 지원 |
| 메인보드 설계 | 단순 | 복잡 |
| 사용 예 | Intel Nehalem+, AMD K8+ | 구형 시스템 |
에러 정정 기능 비교
| 기능 | 능력 | 구현 |
|---|---|---|
| Parity | 1비트 오류 검출 | 바이트당 1비트 |
| SECDED ECC | 1비트 정정, 2비트 검출 | 64비트 데이터에 8비트 ECC (72비트 버스) |
| Chipkill | DRAM 칩 단위 다비트 오류 정정 | 여러 칩에 걸친 고급 ECC |
| On-die ECC (DDR5) | 내부 오류 정정 | Memory Controller에 투명 |
| CRC | 버스트 오류 검출 | GDDR6/HBM에서 링크 무결성 위해 사용 |
동작 원리
1단계: CPU 요청 수신
CPU가 메모리 접근 명령을 실행하면, MMU를 통해 가상 주소가 물리 주소로 변환된다. Memory Controller는 물리 주소를 수신하여 다음을 디코딩한다:
- Bank Address: DRAM의 어느 은행에 접근할지
- Row Address: 활성화할 행 번호
- Column Address: 읽기/쓰기할 열 번호
2단계: 요청 스케줄링
Request Scheduler는 수신된 요청을 버퍼링하고, DRAM 효율성을 위해 최적의 순서로 재정렬한다:
- Row-buffer hit 확인: 열려 있는 행에 접근하는 요청이 있으면 최우선 처리
- 은행 병렬성 활용: 다른 은행의 요청을 병렬로 처리
- 쓰기-읽기 순서 최적화: 버스 경합 최소화
주소 매핑 방식도 실제 체감 성능에 큰 영향을 준다. 컨트롤러는 물리 주소의 일부 비트를 channel/rank/bank group/bank/row/column에 분산 배치하여 연속 접근이 특정 bank에 몰리지 않게 한다. 운영체제의 페이지 할당 패턴과 애플리케이션 접근 지역성이 이 매핑과 맞물리면 row-buffer hit율과 bank-level parallelism이 크게 달라진다.
3단계: DRAM 명령 생성
스케줄된 요청에 따라 Memory Controller는 DRAM에 명령을 전송한다:
- PRE (Precharge): 은행의 열린 행을 닫는다 (필요 시)
- ACT (Activate): 원하는 행을 활성화하여 열 버퍼에 로드
- RD/WR (Read/Write): 특정 열의 데이터를 읽거나 쓴다
- BURST: BL8 또는 BL16 크기의 버스트 전송 수행
4단계: 리프레시 관리
Memory Controller는 세대와 온도 조건에 맞는 주기로 모든 행을 리프레시해야 한다:
- tREFI에 맞춰 리프레시 요청 생성
- 리프레시 중 해당 은행은 접근 불가
- DDR5에서는 Same-Bank Refresh로 다른 은행의 서비스 유지 가능
- Self-refresh 모드에서는 DRAM이 자체적으로 리프레시 수행
5단계: 데이터 전송
읽기 작업에서 데이터는 DRAM → Memory Controller → CPU 순서로 전송된다:
- DQS (Data Strobe): 소스 동기 방식으로 데이터와 함께 전송
- ODT (On-Die Termination): 신호 반사 방지를 위한 임피던스 매칭
- DBI (Data Bus Inversion): 전력 소비 최적화를 위한 데이터 버스 반전
장단점
| 장점 | 단점 |
|---|---|
| DRAM 타이밍 복잡성을 CPU에 투명하게 추상화 | 칩 다이 면적을 상당 부분 차지 |
| 주기적 리프레시를 자동으로 관리 | 새 메모리 표준 지원을 위해 재설계 필요 |
| ECC로 데이터 무결성 보장 | 열적 결합으로 CPU 쿨링 복잡도 증가 |
| 전력 관리(Self-refresh, CKE)로 에너지 효율화 | 특정 DRAM 타입에 고정 (통합 시) |
| 요청 스케줄링으로 대역폭 최적화 | 설계 복잡도가 높음 |
| 다중 채널로 대역폭 확장 가능 |
관련 기술
- JEDEC JESD79-5: DDR5 SDRAM 사양 표준
- JEDEC JESD209-5: LPDDR5 사양 표준
- JEDEC JESD235: HBM 사양 표준
- Intel IMC: Nehalem(2008)부터 적용된 통합 메모리 컨트롤러
- AMD Infinity Fabric: Zen 아키텍처의 메모리 컨트롤러 인터페이스
- CXL (Compute Express Link): 확장 메모리 풀링을 위한 차세대 프로토콜
- RDIMM/LRDIMM Register: 서버 메모리의 명령/주소 버퍼링
- Rambus: 메모리 컨트롤러 IP 라이선스 및 SerDes 기술
- DDR Generation Comparison: DDR3/4/5 세대별 구조와 타이밍 변화
- ECC Error Correction: SECDED, Chipkill, On-die ECC 비교
- HBM Generation Comparison: 고대역폭 메모리에서의 컨트롤러 제약 비교
- Jacob, Ng, Wang, Memory Systems: Cache, DRAM, Disk: 메모리 컨트롤러와 DRAM 스케줄링의 고전적 참고서
- Micron DDR5 Technical Briefs: DDR5 bank group, refresh, on-die ECC 운용 배경 설명
핵심 정리
Memory Controller는 CPU와 DRAM 사이의 필수적인 가교로, 복잡한 DRAM 타이밍과 프로토콜을 추상화하여 시스템 성능과 안정성을 보장한다. 현대 시스템에서는 CPU 다이 내부 통합(IMC)이 표준이 되었으며, DDR5에서는 온다이 ECC, 서브채널, 온모듈 PMIC 등 새로운 기능이 추가되었다. Memory Controller의 스케줄링 알고리즘과 리프레시 관리는 시스템 대역폭과 지연 시간에 직접적인 영향을 미치며, ECC 엔진은 데이터 무결성을 보장한다. 향후 CXL 기반의 분산 메모리 아키텍처에서 Memory Controller의 역할은 더욱 확대될 것이다.