오늘 끝나면
메모리 계층과 병목
- ✓빠른 메모리는 작고 비싸다는 트레이드오프를 설명할 수 있다
- ✓레지스터, 캐시, RAM, SSD 순으로 느려지고 커진다는 것을 말할 수 있다
- ✓메모리 월이 왜 생기고 캐시가 어떻게 가리는지 설명할 수 있다
실습 미션
오른쪽 시뮬레이터에서 캐시 히트율을 90%와 50%로 바꿔 보고, 평균 접근시간이 캐시 지연에 붙었다가 RAM 쪽으로 끌려가는 것을 직접 확인한다.
성공 조건
- □위치 탭에서 RAM이 레지스터보다 수백 배 느리다는 것을 막대로 확인한다
- □히트율 90%일 때 평균이 캐시 지연에 거의 붙는 것을 본다
- □히트율을 낮추면 평균이 RAM 지연 쪽으로 끌려가는 것을 본다
레지스터 · 캐시 · RAM · 메모리 월
메모리 계층과 병목
빠른 저장은 작고 비싸다. 큰 저장은 느리다. 둘 다 가질 수 없어 층으로 쌓고, 캐시로 격차를 가린다.
빠른 건 작고, 큰 건 느리다
저장장치는 두 가지를 동시에 만족하지 못한다. 빠르면 작고 비싸다. 크면 느리고 싸다.
빠른 메모리(SRAM)는 비트 하나에 트랜지스터 6개를 쓴다. 비싸서 칩에 조금밖에 넣지 못한다.
느린 저장(DRAM·낸드)은 비트당 소자가 적어 싸다. 그래서 잔뜩 넣는다. 대신 느리다.
결국 '빠르고 크고 싼' 단일 메모리는 없다. 셋은 서로 당기는 트레이드오프다.
레지스터, 속도 막대는 꽉 차는데 용량은 거의 0. 가장 빠른 대신 가장 작고 비싸 칩에 수십 개뿐임.
계층, 레지스터에서 캐시, RAM, SSD로
그래서 저장을 층으로 쌓는다. 위로 갈수록 빠르고 작고, 아래로 갈수록 느리고 크다.
맨 위는 레지스터다. CPU 안에서 지금 계산 중인 값 몇십 개만 쥔다. 1나노초 안쪽이다.
그 아래가 캐시(L1~L3), 그 아래가 RAM(DRAM), 맨 아래가 SSD다. 한 칸 내려갈수록 수십에서 수만 배 느려진다.
용량은 거꾸로 커진다. 레지스터 수백 바이트, 캐시 수 MB, RAM 수십 GB, SSD 수 TB다.
레지스터, 지금 계산 중인 값 몇십 개만 쥠. 한 칸 내려갈수록 폭(용량)은 넓어지고 속도는 느려짐.
메모리 월, CPU가 RAM을 기다린다
문제는 CPU는 매년 빨라졌는데 RAM은 그만큼 따라오지 못한 데 있다. 두 속도 곡선이 점점 벌어진다.
1980년대에는 CPU와 메모리 속도가 비슷했다. 지금은 RAM을 한 번 가져오는 사이에 CPU가 수백 번 계산한다.
이 벌어진 격차를 메모리 월이라 부른다(Wulf·McKee, 1995). CPU가 데이터를 기다리며 노는 시간이 병목이다.
코어를 아무리 늘려도 데이터가 오지 않으면 다 같이 멈춘다. 그래서 '빠른 CPU'만으로는 안 된다.
격차가 수백~수천 배로 벌어짐. CPU 한 박자에 RAM은 못 옴, 이 기다림이 메모리 월임.
캐시가 격차를 가린다
해법은 캐시다. 자주 쓸 데이터를 CPU 바로 옆에 작게 복사해 둔다. 책상 위에 올려두는 것이다.
찾는 데이터가 캐시에 있으면 히트라 빠르고, 없으면 미스라 멀리 RAM까지 가서 느리다.
프로그램은 한번 쓴 데이터를 곧 또 쓴다(지역성). 그래서 캐시 히트율이 보통 90%를 훌쩍 넘는다.
평균 접근시간은 히트율에 캐시 지연을 곱한 값과 미스율에 RAM 지연을 곱한 값을 더한 것이다. 히트율이 높을수록 느린 RAM이 평균에서 가려진다.
프로그램은 한번 쓴 데이터를 곧 또 씀(지역성). 그래서 요청 대부분이 책상(캐시)에서 끝남.
직접 계층과 캐시를 만져보기
이제 오른쪽 시뮬레이터로 직접 확인한다. 두 가지를 만진다.
위치 탭에서 레지스터, 캐시, RAM, SSD를 고르면 로그 스케일 막대로 접근시간 차이가 보인다. 거리 비유로 지연을 체감한다.
캐시 탭에서 히트율 슬라이더를 움직이면 평균 접근시간이 다시 계산된다. 90%와 50%를 비교해 본다.
히트율이 높으면 평균이 캐시에 붙고, 낮추면 RAM 쪽으로 끌려간다. 메모리 월이 어떻게 가려지는지 눈으로 보인다.
캐시는 CPU 바로 옆 책상 위임. 자주 쓰는 것만 작게 올려둠.