전공/컴퓨터구조

[컴퓨터구조] #11 메모리 계층 구조

Campus Coder 2023. 6. 11. 03:57
728x90
반응형

메모리 계층 구조

비싸고 빠른 메모리 vs. 싸고 느린 메모리
두 메모리를 섞어서 더 빠른 쪽에 가까운 메모리의 속도가 나도록 하는 기법
 

메모리 속도에 따른 분류

메모리 계층 구조

 

어떻게 속도를 높일 것인가

지역성의 원리를 활용
- 시간적 vs. 공간적
 
시간적 지역성 - 한번 참조된 항목은 다시 참조되는 경향이 있음
공간적 지역성 - 어떤 메모리 참조 주변의 메모리 참조가 일어날 가능성 높음
 
프로그램에서 최대한 지역성을 활용해 성능 향상 도모
 

지역성(Locality)

상위계층/하위계층

 

히트(hit)/미스(miss)

Hit - 대부분의 데이터를 캐시에서 참조 가능
Miss - 캐시 참조시간 + 메모리 직접 참조시간까지 필요
 
최근에는 캐시를 확인해서 메모리를 버스로 연결해 동시에 참조해 페널티를 줄이는 기술 도입
 
 

캐시

교체 정책

- 캐시의 내용이 다 차서 다른 내용을 써야 할 경우 어떤 내용을 지울 것인지

LFU(Least Frequently Used) LRU(Least Recently Used)
캐시의 참조카운트/히트 카운트를 유지해서 가장 히트 카운트가 작은 값을 교체 캐시의 최근 참조시간을 보고 가장 오래된 값을 교체

- 일반적으로 LRU가 좋은 성능을 보임
- LRU는 캐시의 특징인 지역성을 잘 활용함
 

캐시 실패 시

파이프라인 정지 -> 메모리 접근을 끝날 때까지 대기
 

캐시의 쓰기

Write Through
- 캐시의 내용과 메모리 내용을 동시에 업데이트
- 시간이 걸림 / 데이터 일관성 유지
 
Write Back
- 쓰기 버퍼(write buffer) 사용
- 캐시의 내용만 업데이트하고 추후 메모리 내용을 Sync
- 시간이 빠름/데이터 일관성 깨짐(램과 캐시의 데이터가 달라질 수 있음)
 
 

버퍼

자료구조의 큐(Queue)와 유사
 
읽기와 쓰기 속도가 다른 경우에 버퍼를 둠
- 읽기 속도가 빠른 경우에는 보통 버퍼를 두지 않음
 
시스템 안정성을 높이기 위해서 사용
- 버퍼가 없는 경우에 서버에 트래픽이 많이 발생하면 불안정해짐 → 다운 발생
- 시스템 SW에서 주로 다룸
 

버퍼의 적정길이

OS(운영체제)/네트워크에서 스케줄링 시 우선순위 큐(Priority Queue)를 사용해서 처리
- 우선순위의 개수만큼 큐를 가짐
 
버퍼를 두면 보통 딜레이/레이턴시가 발생해서 실시간 처리에는 어려워짐
- 적절한 길이 값을 선정해야 함
 
우선순위 역전
우선순위가 낮은 작업이 우선순위가 높은 작업을 차단하거나 대기시키는 현상
 
 

캐시와 버퍼의 차이

캐시 버퍼
메모리 계층 구조/지역성을 이용한 성능 개선 입출력 속도가 다른 경우 안정성을 높이고 병목을 개선하는 기술
교체 정책 우선순위/스케줄러
쓰기 정책 딜레이/레이턴시

 
 

메모리 기술

휘발성

- 레지스터: 전용 회로로 구성
- SRAM: 캐시에 적용, 플립플롭으로 구성, 리프레시가 없음
- DRAM: 메인 메모리로 사용, Capacitor로 구성, 리프레시 있음
 

비휘발성

- SSD: 주로 플래시 메모리로 만듦
- HDD: 자기 디스크로 만듦
 
 
 

DRAM

뱅크(bank)
- 워드값을 만들기 위해 여러 개의 메모리 칩을 세트로 구성
 
Pre(Precharge)
- 뱅크 open/close
 
Act(Activate)
- 행 주소를 참조
- 바이트 단위가 아닌 워드 단위로 참조됨
 
SDRAM(Synchronous DRAM)
- 클럭을 사용해서 메모리와 CPU 동기화
- 한 번에 여러 비트를 전송 가능(burst mode)
- rising edge/falling edge -> DDR(Double Data Rate)
 

 
Address interleaving
- 여러 개의 뱅크를 동시에 읽고 써 대역폭 향상
 
SIMM/DIMM
- 메모리 모듈램이 단면/양면에 있는 메모리
- 소모 전력 차이 있음
 
메모리 랭크(rank)
- DIMM 칩의 부분 집합
 
parity 램
- RAM의 데이터 손상을 알 수 있도록 패리티(even/odd)를 사용하는 램
- IBM의 기본 램
 
Non-parity 램
- 패리티를 사용하지 않는 램
 
ECC 램(Error Correction Code RAM, 고 신뢰도 램)
- 에러 감지뿐만 아니라 보정까지 가능한 메모리
- 주로 서버에서 사용
 
 

플래시 메모리

플래시 메모리는 EEPROM(Electrically Erasable PROM)의 특수 형태

- 여러 번 지우고 쓸 수 있고 속도가 빠름

 

플래시 메모리 종류

SLC/MLC/TLC/QLC

셀당 1/2/3/4 비트 저장

속도는 왼쪽으로 갈수록↑

 

Wear Leveling

- 모든 셀의 마모(wear)를 균일하게 만드는 기술

- 실제 셀과 메모리 주소를 재매핑하는 기술

- 주로 플래시 컨트롤러가 담당

- 셀의 수명 향상 -> 플래시 메모리 수명 향상

 

(하드)디스크(메모리)

버퍼/캐시 메모리를 사용해서 속도 개선

 

CHS

- 헤드들의 트랙들의 모음 -> 실린더

 

LBA

- 일련번호값으로 지정하는 방식

 

탐색시간 + Rotational Latency 필요

- 헤드를 움직이고 헤드 아래에 해당 섹터가 위치하기까지의 시간

 

섹터 -> 클러스터

- 파일 시스템에 따라 클러스터 값이 다름, 보통 8KB

 

디스크 별로 헤드의 개수, arm의 움직임이 다름

헤드가 몇 개 있는가? arm이 각각 움직이는가/한꺼번에 움직이는가?

 

순차적으로 접근 vs. 임의로 접근

- 디스크 조각 모음: 데이터를 순차적으로 접근할 수 있도록 디스크 상의 데이터를 재배치하는 작업

 

NCQ

- 한붓그리기로 접근

- 읽기/쓰기 성능 개선

 

 

캐시(Directed Mapped)

- 캐시 메모리 참조를 메모리 주소를 사용해서 직접 지정하는 방식
- 블록 주소를 전체 캐시 블록 수로 나눈 나머지(modulo)를 사용하여 캐시 내의 위치를 결정
- 캐시 내에 해당 메모리 주소의 내용이 있는지는 태그(tag)를 사용해서 확인
- 태그는 유효 비트와 캐시 인덱스를 제외한 나머지 상위 주소를 사용
 

 

 

캐시 접근

 

태그와 주소의 상위 20비트가 동일
- 유효비트가 1이면 캐시 hit
- 아니면 miss
블록주소 = floor(바이트주소/블록당 바이트 수)
 

캐시 크기 - 32비트 주소

Direct mapped 캐시

2^n개 블록 -> n개의 비트가 인덱스로 사용
캐시블록의 크기 2^m 워드(2^(m+2) 바이트)
- M비트는 블록 내의 워드 구별에 사용
- 2비트는 워드 안에 바이트 구별(인덱스로 사용되지 않음)
 

캐시의 실패율과 블록사이즈와의 관계

캐시의 실패율과 블럭 사이즈의 관계

블록이 크면 실패율이 낮아짐(지나치게 크지 않을 경우)
 

캐시의 성능 높이기

Early restart

블록 전체를 기다리지 않고 요청된 워드값이 도착하면 바로 실행

명령어 메모리에 효과적(대개 순차적 접근)

데이터 메모리에는 덜 효과적(예측이 어려움)

- 메모리에서 요청한 워드가 캐시로 전송이 바로 되도록 구성

- 나머지는 다음부터 블록의 마지막 -> 블록의 처음부터 나머지 워드 전송

 

 

처음 캐시는 빈 채로 시작해서 반드시 miss 발생

→ 캐시의 상태를 저장하고 다시 시작할 때 로딩해서 miss를 최소화
 

쓰기 버퍼

Write Through(즉시 쓰기)
- Cache + Memory Write
 
Write Through + Write Buffer
- 쓰기에 블로킹이 발생할 경우 2개 이상의 쓰기 버퍼 사용
 
Write-back(나중 쓰기)
- Cache First, Memory After
- 캐시만 업데이트, 나중에 캐시에서 제거될 때 (변경사항이 있으면) 메모리에 기록
 

Combined cache vs. Split Cache

- 명령어 캐시 + 데이터 캐시
- 높은 적중률 vs 높은 대역폭(높은 실패율, 낮은 충돌 실패, 파이프라인에 유리)
 

캐시와 메모리의 상관관계

메모리가 느릴수록(대역폭이 작을수록) 캐시가 miss 발생하면 페널티가 큼
- 캐시의 크기가 커지면 차이가 줄어듦
 
메모리의 지연이 커지면 캐시가 miss 발생하면 패널가 큼
- 캐시의 크기가 커지면 차이가 줄어듦
 
큰 캐시는 access time(접근 시간)이 커짐
 

캐시의 성능 향상

2개의 다른 메모리 블록이 캐시의 같은 장소를 두고 경쟁하는 확률 낮춤 -> 실패율 낮춤
다단계 캐싱
 
평균 메모리 접근시간
- 클럭 사이클 1ns, 실패 손실 20ns, 실패율 0.05, 캐시 접근 시간 1 클럭 사이클
- 1+0.05*20 = 2(ns)

 

신뢰성/가용성

- 장애 / 복구 개념 고려

- 신뢰성 지표(평균 무장애시간(MTTF), 연간 장애율(AFR))

- 서비스 중단 관련 지표(평균 복구시간(MTTR))

- 가용성 = MTTF / (MTTF + MTTR)

MTTF 개선 방법

결함 회피

- 결함을 구조적으로 방지

 

결함 감내/내성

- 결함이 나오더라도 조건을 맞추도록 함(서비스 장애가 없도록)

- 이중화/다중화

 

결함 예측

- 예측해서 실패 전에 교체

 

에러 검출

해밍거리(두 비트 간의 거리)를 2비트 이상으로 유지하도록 비트 패턴 구성

해밍거리가 한 비트라면 데이터에 문제 있음, but 보정 불가능

 

해밍 거리를 3 이상 유지하도록 구성

1비트 에러는 보정 가능

 

패리티를 2x2로 구성 - 에러 발생 시 가로/새로 확인해 보정

 

CRC(Cyclic Redundancy Check)

- Reed-Solomo 코드 사용 -> 여러 비트 전송 에러 정정 가능

- 몇 개의 비트자리 수를 체크하는 경우를 여러 개 만듦

- 각 패턴에는 어느 정도 중복이 되도록 패턴을 구성

728x90
반응형