Lec19 - Memory Controller
한국어판 강의자료 · 42쪽

p.1CSED503 고급 컴퓨터 구조 – 강의 19
- 메모리 장치 및 컨트롤러
- 김광선
- 컴퓨터공학과, POSTECH
- 2021 가을학기
- 면책사항: 본 강의의 많은 슬라이드는 David Brooks, Mark Brehob, Thomas Wenisch 교수님의 자료를 바탕으로 수정함

p.2DRAM: 동적 랜덤 액세스 메모리
- SRAM보다 더 높은 밀도
- 1비트: 1트랜지스터 및 1커패시터 (1T1C)
- 단일 bit line(비트 라인)
- 비트는 capacitor(커패시터)에 저장된 전하로 표현
- 파괴적 READ(리드): 읽기 시 내용이 지워짐
- → 각 액세스 후 데이터를 복원해야 함
- 액세스 없이도 전하가 천천히 누출됨
- word line(워드 라인)
- bit line(비트 라인)
- capacitor(커패시터)
- 현대 DRAM의 trench capacitors(트렌치 커패시터)
- access transistor(액세스 트랜지스터)

p.3DRAM 셀의 비유
- 전기적 전하 → 물
- capacitor(커패시터) → 물탱크
- 출처: [W. Shin et al., HPCA’14]

p.4DRAM 셀 어레이

p.5precharge(프리차지) 및 row activation(로우 활성화)
- sense amplifier(센스 증폭기): 전압 차이를 감지하고 VDD 또는 GND로 증폭
- precharge(프리차지)
- row activation(로우 활성화)
- 출처: [W. Shin et al., HPCA’14]

p.6기초: 액세스 프로세스 (1/5)
- (1) 버스 전송 (메모리 컨트롤러에 요청 전송)
- 최근 CPU에서는 메모리 컨트롤러가 온칩에 통합됨

p.7기초: 액세스 프로세스 (2/5)
- (2) precharge(프리차지) 및 row activation(로우 활성화)
- 이 단계는 'row activation(로우 활성화)'라고 불림
- row(로우): 종종 '페이지'라고 불림 – 가상 메모리 페이지와 혼동하지 말 것
- 그 후, column access(컬럼 액세스) 명령과 동시에, row buffer(로우 버퍼) 데이터가 어레이에 복원됨

p.8기초: 액세스 프로세스 (3/5)
- (3) column access(컬럼 액세스)
- 데이터가 로우 버퍼(센스 증폭기)에 로드된 후, 추가적인 row activation(로우 활성화) 없이 동일한 로우에 대한 다수의 column access(컬럼 액세스)가 가능함 ('row hit(로우 히트)')

p.9기초: 액세스 프로세스 (4/5)
- (4) 데이터 전송

p.10기초: 액세스 프로세스 (5/5)
- (5) 버스 전송 (CPU로 응답을 전송하기 위해)

p.11DRAM 타이밍 파라미터 예시
- 각 DRAM 작업은 JEDEC 표준에 명시된 일련의 타이밍 파라미터를 따름
- 그림 출처: D. Lee et al., "Tiered-latency DRAM: A low latency and low cost DRAM architecture," HPCA’13

p.12DRAM: burst access(버스트 액세스)
- 각 READ/WRITE 명령은 여러 단어를 전송할 수 있음 (DDR3에서는 8개)
- 단일 클럭 사이클에 전송되는 단어 수를 주의 깊게 관찰할 것
- 더블 데이터 레이트 (DDR)
- 크레딧: J. Leverich, Stanford
- burst length(버스트 길이) = 8

p.13DRAM 동작에 대한 보다 자세한 설명
- 출처: D. Lee et al., "Tiered-latency DRAM: A low latency and low cost DRAM architecture," HPCA’13

p.14기초: 물리적 구성
- 각 bank(뱅크)별로 구성됨
- 일반적인 DRAM은 2개 이상의 bank(뱅크)를 가짐
- ECC (옵션)
- DIMM: 듀얼 인라인 메모리 모듈

p.15DIMM, rank(랭크), bank(뱅크) …

p.16DRAM: bank(뱅크)
- DRAM 칩은 여러 bank(뱅크)로 구성될 수 있음
- 주소 = (뱅크 x, 로우 y, 컬럼 z)
- bank(뱅크)는 독립적으로 작동하지만, 명령, 주소, 데이터 핀을 공유함
- 각 bank(뱅크)는 서로 다른 로우를 활성화할 수 있음
- 다른 bank(뱅크) 간에 ACTIVATE와 PRECHARGE 지연을 겹쳐 사용할 수 있음
- (예: bank(뱅크) 0에 READ를 수행하는 동안 뱅크 1에 ACTIVATE(액티베이트))
- → "bank-level parallelism(뱅크 수준의 병렬성)"
- row buffer(로우 버퍼)
- 로우 0
- row buffer(로우 버퍼)
- 로우 1
- bank(뱅크) 0
- bank(뱅크) 1
- 출처: J.Leverich, Stanford

p.17DRAM: bank-level parallelism(뱅크 수준의 병렬성)
- 다른 bank(뱅크)에서 동시에 DRAM 액세스를 가능하게 함
- 메모리 액세스 지연을 감소시키고 효율성을 향상시킴
- 출처: J.Leverich, Stanford

p.1864바이트(512비트) 캐시 라인 하나 읽기
- 슬라이드 출처: Prof. Kayvon Fatahalian 및 Randy Bryant
- 64비트 메모리 버스
- (각 DRAM 칩에서 8비트씩)
- 모든 DRAM 칩에 동일한 주소가 제공됨

p.1964바이트(512비트) 캐시 라인 읽기
- 현대 DRAM은 연속된 여러 컬럼을 버스트 모드로 전송하는 기능을 지원한다.
- 여기서는 64비트 버스, burst length(버스트 길이) 8 → 512비트를 사용한다.
- 슬라이드 출처: Prof. Kayvon Fatahalian 및 Randy Bryant

p.20refresh(리프레시)
- capacitor(커패시터)에 저장된 전하가 천천히 누출된다.
- 오랜 시간이 지나면 값이 변경될 수 있다.
- 메모리 컨트롤러는 각 로우를 주기적으로 refresh(리프레시)하여 전하를 복원해야 한다.
- 각 로우를 N 밀리초마다 활성화한다.
- 일반적인 N = 64 ms.
- 고온에서는 더 짧은 refresh(리프레시) 주기가 필요하다 (예: DDR3에서 T > 85 ℃일 경우 32 ms).
- refresh(리프레시)의 문제점:
- energy(에너지) 소비: 각 refresh(리프레시) 명령은 에너지를 소모한다.
- 성능 저하: refresh(리프레시) 중에는 DRAM rank(랭크)/bank(뱅크)에 접근이 불가능하다.
- QoS/예측 가능성 영향: refresh(리프레시) 중 긴 일시정지 발생.
- refresh(리프레시) 빈도는 DRAM 용량 확장의 한계를 결정한다.

p.21refresh(리프레시) 모드

p.22DRAM refresh(리프레시) 오버헤드
- 더 높은 용량(더 많은 로우) → 더 높은 refresh(리프레시) 오버헤드(에너지 및 빈도).
- tRFC: 각 refresh(리프레시) 명령이 소요되는 시간.
- tREFI: refresh(리프레시) 명령을 얼마나 자주 발행해야 하는지.
- 출처: J. Mukundan et al., ISCA’13
- 출처: J. Liu et al., ISCA’12
- 2x, 4x 모드: 한 번의 refresh(리프레시) 명령당 처리하는 로우 수가 적다.

p.23All-Bank refresh(올뱅크 리프레시) vs. Per-Bank refresh(퍼뱅크 리프레시)
- All-Bank refresh(올뱅크 리프레시): 일반적인 DRAM(DDRx, LPDDRx)에서 사용.
- refresh(리프레시) 중에는 전체 rank(랭크)에 접근이 불가능하다.
- Per-Bank refresh(퍼뱅크 리프레시): 모바일 DRAM(LPDDRx)에서 사용.
- bank(뱅크) 간에 refresh(리프레시)를 병렬로 수행할 수 있다.
- All-Bank refresh(올뱅크 리프레시)보다 tRFC가 짧다.
- 더 자주 refresh(리프레시)해야 한다 (tREFI가 짧다).
- 타임라인:
- bank(뱅크) 0: refresh(리프레시) → 리프레시
- bank(뱅크) 1: refresh(리프레시) → 리프레시
- bank(뱅크) 간에 엇갈리게 수행하여 전력 소모를 제한.
- 읽기 요청: 읽기 → 읽기 → 읽기 → 읽기
- 슬라이드 수정: K. Chang et al., HPCA’14

p.24DRAM controller(DRAM 컨트롤러): 기능
- DRAM의 정확한 동작 보장 (리프레시 및 타이밍).
- DRAM 요청을 처리하면서 DRAM 칩의 타이밍 제약을 준수한다.
- 제약 조건: 리소스 충돌 (뱅크, 버스, 채널), 최소 쓰기-읽기 지연 (즉, 쓰기 후 바로 읽기 불가).
- 요청을 DRAM 명령 시퀀스로 변환한다.
- 요청을 버퍼링하고 스케줄링하여 고성능 및 QoS를 확보한다.
- 재정렬, row buffer(로우 버퍼), bank(뱅크), rank(랭크), 버스 관리.
- DRAM의 energy(에너지) 소비 및 열 관리를 관리한다.
- DRAM 칩의 전원 켜기/끄기, power modes(전력 모드) 관리.

p.25현대의 DRAM controller(DRAM 컨트롤러)

p.26DRAM 스케줄링 정책 (I)
- FCFS (선착순 우선)
- 가장 오래된 요청을 먼저 처리
- FR-FCFS (먼저 준비된 것 우선 선착순)
- 1. row buffer(로우 버퍼) 히트를 우선 처리
- 2. 가장 오래된 요청을 우선 처리
- 목표: row buffer hit rate(로우 버퍼 히트율)을 최대화 → DRAM throughput(DRAM 처리량)을 최대화
- 실제로 스케줄링은 명령 수준에서 이루어짐
- • 컬럼 명령(리드/라이트)은 로우 명령(액티베이트/프리차지)보다 우선순위가 높음
- • 각 그룹 내에서 오래된 명령이 더 최근의 명령보다 우선순위가 높음

p.27DRAM 스케줄링 정책 (II)
- 스케줄링 정책은 요청의 우선순위 순서를 정하는 것
- 우선순위는 다음 기준에 따라 결정될 수 있음
- • 요청의 나이
- • row buffer(로우 버퍼) 히트/미스 상태
- • 요청 유형(프리패치, READ(리드), 라이트)
- • 요청자 유형(로드 미스 또는 스토어 미스)
- • 요청의 중요도
- • 코어 내에서 가장 오래된 미스인가?
- • 해당 요청에 의존하는 코어 내 명령어는 몇 개인가?
- • 프로세서를 정지시킬 것인가?
- • 다른 코어에 미치는 간섭 (예: 공정성)

p.28row buffer(로우 버퍼) 관리 정책
- 요청 큐가 비어 있을 때 현재 활성화된 로우에 대해 어떻게 처리할 것인가?
- open row(오픈 로우): 접근 후 로우를 열어둠
- (+) 다음 접근이 같은 로우를 필요로 할 가능성 → row hit(로우 히트)
- (−) 다음 접근이 다른 로우를 필요로 할 가능성 → 로우 충돌 (+precharge(프리차지) 지연), 낭비된 energy(에너지)
- closed row(클로즈드 로우): 접근 후 로우를 닫음
- (+) 다음 접근이 다른 로우를 필요로 할 가능성 → 로우 충돌 방지
- (−) 다음 접근이 같은 로우를 필요로 할 가능성 → 추가적인 액티베이트 지연
- adaptive policies(적응형 정책): 다음 bank(뱅크) 접근이 같은 로우일지 예측하고 그에 따라 행동

p.29open row(오픈 로우) vs. closed row(클로즈드 로우) 정책
- 정책: open row(오픈 로우)
- 첫 번째 접근: 로우 0
- 다음 접근: 로우 0 (row hit(로우 히트))
- 다음 접근에 필요한 명령: READ(리드)
- 첫 번째 접근: 로우 0
- 다음 접근: 로우 1 (로우 충돌)
- 다음 접근에 필요한 명령: precharge(프리차지) + 액티베이트 로우 1 + READ(리드)
- 정책: closed row(클로즈드 로우)
- 첫 번째 접근: 로우 0
- 다음 접근: 로우 0 (로우 클로즈드)
- 다음 접근에 필요한 명령: 액티베이트 로우 0 + READ(리드) + precharge(프리차지)
- 첫 번째 접근: 로우 0
- 다음 접근: 로우 1 (로우 클로즈드)
- 다음 접근에 필요한 명령: 액티베이트 로우 1 + READ(리드) + precharge(프리차지)

p.30왜 DRAM controller(DRAM 컨트롤러)는 설계하기 어려운가?
- 정확성을 위해 DRAM 타이밍 제약을 준수해야 함
- DRAM에는 50개 이상의 타이밍 제약이 존재함
- tWTR: 라이트 명령을 발행한 후 READ(리드) 명령을 발행하기 전에 기다려야 하는 최소 사이클 수
- tRC: 동일한 bank(뱅크)에 대해 두 개의 연속된 액티베이트 명령 사이에 있어야 하는 최소 사이클 수
- …
- 다양한 자원을 추적하여 충돌을 방지해야 함
- 채널, bank(뱅크), rank(랭크), 데이터 버스, 주소 버스, row buffer(로우 버퍼)
- DRAM refresh(리프레시)를 처리해야 함
- 전력 소비를 관리해야 함
- 성능 및 QoS 최적화 필요 (제약 조건이 존재하는 상황에서)
- 재정렬은 간단하지 않음
- 공정성과 QoS 요구사항이 스케줄링 문제를 복잡하게 만듦

p.31DRAM 전력 관리
- DRAM 칩은 power modes(전력 모드)를 가짐
- 개념: 칩에 접근하지 않을 때 전력을 끄기
- 전력 상태:
- - 액티브 (가장 높은 전력)
- - 모든 bank(뱅크) 비활성
- - power-down(파워다운)
- - 셀프 리프레시 (가장 낮은 전력)
- 상호 간 전환 시에는 칩에 접근할 수 없는 지연이 발생함

p.32memory bandwidth(메모리 대역폭) 및 지연 추세
- memory latency(메모리 지연)은 거의 일정함
- 1
- 10
- 100
- 1999
- 2003
- 2006
- 2008
- 2011
- 2013
- 2014
- 2015
- 2016
- 2017
- DRAM 개선 (로그 스케일)
- 용량
- 대역폭
- 지연

p.33DRAM 장치 추세
- 출처: Ishwar Bhati 등, DRAM refresh(리프레시) 메커니즘, 패널티 및 트레이드오프. IEEE Trans. Comput. 65, 1 (2016년 1월)
- MT/s (초당 메가 전송 수) – 클럭 주파수는 아님, 데이터 전송률임

p.34HBM: high-bandwidth memory(고대역폭 메모리)
- 1개의 베이스 로직 다이 + 스택당 최대 8개의 DRAM 다이
- DIMM 기반보다 훨씬 높은 대역폭
- NVIDIA V100에서 4개의 HBM 스택으로 900 GB/s
- Xeon에서 6개의 DDR4 채널(DIMM)로 131 GB/s
- energy(에너지) 소비 감소
- ~DDR4 대비 1/4x energy(에너지)/비트
- 출처: D.U Lee, SK hynix, ISSCC 2014
- 항목
- 목표
- # of Stack
- 4(Core) + 1(Base)
- Ch./Slice
- 2
- Total Ch.
- 8
- IO/Ch.
- 128
- Total IO
- 1024 (=128 x 8)
- Address/CMD
- 듀얼 CMD (로우, 컬럼)
- Data Rate
- DDR
- microbump array(마이크로범프 어레이)

p.35storage-class memory(SCM)(스토리지 클래스 메모리)
- 새로운 종류의 데이터 저장/메모리 장치
- 여러 기술이 최고의 SCM이 되기 위해 경쟁 중
- phase-change memory (PCM)(상변화 메모리), resistive RAM(저항성 RAM), FeRAM, MRAM, 개선된 플래시 등
- SCM은 다음을 모호하게 만듦:
- - 메모리 (빠름, 비쌈, volatile(휘발성))
- - 저장장치 (느림, 저렴, non-volatile(비휘발성))
- SCM의 특징/요구사항:
- - non-volatile(비휘발성)
- - 짧은 접근 시간 (~DRAM과 유사): 읽기/쓰기/지우기 시간 <200 ns (메모리용) 또는 <1μs (저장용)
- - 1초당 100,000회 이상의 읽기 I/O 작업 가능
- - 비트당 저렴한 비용 (~디스크와 유사)
- - 10⁹ ~ 10¹²회 쓰기/지우기 사이클 수명
- - 고체 상태, 이동 부품 없음

p.36Storage-Class memory (SCM)(스토리지 클래스 메모리)의 필요성
- 1.E+00
- 1.E+01
- 1.E+02
- 1.E+03
- 1.E+04
- 1.E+05
- 1.E+06
- 1.E+07
- 1.E+08
- 레지스터
- L1 캐시
- L2 캐시
- L3 캐시
- DRAM
- 플래시
- (NVMe)
- 플래시
- (SATA)
- HDD
- 정규화된 지연 (로그 스케일)
- ~2x
- ~3x
- ~7x
- ~3x
- ~1.5x
- ~80x
- ~1500x
- 1.E+00
- 1.E+01
- 1.E+02
- 1.E+03
- 1.E+04
- 1.E+05
- 1.E+06
- 1.E+07
- 1.E+08
- 레지스터 L1 캐시 L2 캐시 L3 캐시 DRAM
- SCM
- (DIMM)
- SCM
- (NVMe)
- 플래시
- (NVMe)
- 플래시
- (SATA)
- HDD
- 정규화된 지연 (로그 스케일)
- ~2x
- ~3x
- ~7x
- ~3x
- ~1.5x
- ~80x
- ~1500x
- ~4x
- ~40x
- ~9x
- 현재 메모리 계층
- 미래 메모리 계층 (SCM 포함)

p.37PCM: 상변화 메모리
- 상변화 물질을 사용하며, 이 물질은 결정 상태(저저항) 또는 비정질 상태(고저항) 중 하나의 물리적 상태를 가진다.
- DRAM에 비해 장점:
- - 더 높은 용량(밀도)
- - non-volatile(비휘발성)
- - refresh(리프레시)가 필요 없어 대기 전력이 낮음
- DRAM에 비해 단점:
- - 더 높은 지연: ~4-15배 DRAM(특히 쓰기 시)
- - 더 높은 접근 energy(에너지): ~2-50배 DRAM(특히 쓰기 시)
- - 낮은 내구성(셀은 약 10⁷회 쓰기 후 고장)
- Intel 3D XPoint 메모리는 phase-change memory (PCM)(상변화 메모리)로 여겨진다.
- - DIMM당 최대 512 GB
- - Intel Optane DIMM
- 출처: Qureshi 등, ISCA’09

p.38PCM 동작
- RESET: 큰 전류 펄스가 하전극 근처의 PCM을 녹여 비정질 상태로 만든다.
- SET: medium current(중간 전류) 펄스가 물질을 기록(결정화)한다.
- READ: 낮은 전류 펄스를 통해 저항 상태를 측정한다.

p.39multilevel PCM(다중레벨 PCM)
- 비정질화 수준을 조절함으로써 저항을 아날로그 방식으로 조절할 수 있다.
- 단일 장치 내에서 다중레벨 데이터 저장이 가능 → 더 밀도 높은 데이터 저장

p.40STT-MRAM: spin-transfer torque(스핀 전달 토크) magnetic RAM(자기 RAM)
- 자기 터널 접합(MTJ)을 사용 → 1T-1MTJ
- 비휘발성 메모리
- cell size(셀 크기)와 access latency(액세스 지연)은 SRAM과 DRAM 사이에 있다.
- SRAM과/또는 DRAM의 부분적 대체로 사용될 수 있다.
- word line(워드 라인) 2 'on' 상태:
- - V = Vdd, V = 0 → 자화가 평행 방향으로 전환
- - free layer(자유층): 자화가 쉽게 변경됨
- - reference layer(기준층): 안정된 자화(변경하기 어려움)
- word line(워드 라인) 2 'on' 상태:
- - V = -Vdd, V = 0 → 자화가 반평행 방향으로 전환
- - 0 쓰기(저저항)
- - 1 쓰기(고저항)
- 출처: Mattias Borg

p.41메모리 장치 비교
- 기술
- data retention(데이터 보존 시간)
- 내구성(사이클)
- 에너지 (fJ/bit)
- 속도
- 크기 (F²)
- SRAM
- N/A
- >10¹⁶
- 10
- 1 ns
- 120
- STT-MRAM
- >10년
- 10¹⁰-¹²
- 10-100
- >10 ns
- 6-20
- DRAM
- 수십 ms
- >10¹⁶
- >1000
- 10 ns
- 6-10
- PCM
- >10년
- 10⁹
- 1000
- 50-500 ns
- 4-19
- 출처: Mattias Borg 및 기타

p.42질문?
- 추천 독서:
- - 교재 2.2장