메모리 계층 구조

 

[image]
1. 개요
2. 원인(돈과 용량, 성능의 반비례 관계)
3. 컴퓨터 메모리의 종류
3.5. 스토리지 (SSD, HDD)
3.6. 이동식 저장장치
4. 지역참조성
5. 결론
6. 관련 문서


1. 개요


컴퓨터의 설계에 있어, 각각의 특징이 있는 서로 다른 여러 종류의 저장 장치를 함께 사용하여 최적의 효율을 낼 수 있게 하는 것. 빠른 저장 장치는 용량에 비해 가격이 비싸고, 용량이 넉넉한 저장 장치는 처리 속도가 느리다. 그러나 컴퓨터가 행하는 작업은 매우 다양하다. 빠른 속도가 필요한 상황도 있지만, 단순히 많은 내용을 천천히 읽고 쓰는 작업도 그만큼 많다. 이러한 상황에 맞게 여러 저장 장치를 각각 사용할 수 있도록 하여 '''싸고 성능 좋은 컴퓨터'''를 구현하는 설계가 메모리 계층 구조이다.

2. 원인(돈과 용량, 성능의 반비례 관계)


컴퓨터의 저장장치는 두 가지 요건을 갖고 있다. 첫째는 단위 시간당 데이터 처리량을 의미하는 스루풋(throughput). 흔히 ‘대역폭’으로도 알려져 있는 이 능력은 쉽게 말해서 '''입출력의 속력'''이다. 같은 시간 안에 얼마나 많은 정보를 옮길 수 있는지, 또는 같은 양의 정보를 얼마나 빨리 옮길 수 있는지가 바로 스루풋이다. 둘째는 '''용량'''(capacity). 용량은 저장 장치에 담을 수 있는 정보의 총량이다. 일반적으로 입출력 속력이 빠를수록, 용량이 클수록 저장 장치의 가격은 올라간다.
예를 들어 SSDHDD를 생각해보자. SSD는 데이터를 읽고 쓰는 속력이 매우 빠르지만 1 GB당 가격이 비싸다. HDD는 반대로 속력이 느리지만 1 GB당 가격은 싸다. 2020년 1월 가격비교 사이트 기준 모 회사 DDR4 램 16 GB가 7만원인데, 같은 회사의 SSD는 500 GB에 9만원이고 다른 회사의 HDD는 6만원에 2 TB이다. 램에서 SSD, HDD로 내려올 수록 가격 대비 용량이 올라가고 속력이 내려가는 것을 볼 수 있다. 이는 RAM에서 캐시, 레지스터로 더 올라갈 때에도 마찬가지이다.
이론적으로는 돈을 아낌없이 써서 전부 SSD로 해결하는 게 최선이지만, 빠른 읽기/쓰기가 필요한 작업은 사실 많지 않다. 때문에 대부분의 컴퓨터는 SSD와 HDD를 둘 다 사용한다. 용량은 비교적 작지만 끊임없이 사용하고 성능에 직접적인 영향을 주는 운영체제(윈도우/리눅스/맥OS)와 자주 사용하는 프로그램은 SSD에, 용량은 크지만 사용하는 작업 자체는 단순해서 빠른 액세스가 필요하지 않은 동영상, 사진 자료 등은 HDD에 저장하는 것이다. 이렇게 하면 SSD의 성능을 살리면서 HDD의 가성비를 얻을 수 있어, 보다 합리적인 견적으로도 쾌적한 컴퓨터 이용이 가능해진다.
속력 뿐만 아니라 '''레이턴시'''(latency)[1] 차이도 크다. 같은 메모리 계층이라도 어떤 식으로 데이터를 요청해서 접근하는지에 따라 레이턴시 차이가 나타나지만, 현세대 CPU에서 평균적인 레이턴시 기준으로 L1 캐시 메모리는 1 ns 수준, L2 캐시 메모리는 2~3 ns 수준, L3 캐시 메모리는 10~15 ns 수준이나, 메인 메모리는 20~100 ns, NAND SSD는 100 μs ~ 1 ms, HDD는 5~15 ms 수준이다. 다만, 속력과 용량만큼 중요하게 생각하지 않는 이유는 빈번한 데이터 요청이 아닌 이상 대용량 처리할 때 속력이 빠를 수록 결과적으로 더 빠르기 때문이다.
이와 같은 저장 장치 간의 성능 차이에는 메모리 자체의 성능 문제도 있겠지만, CPU 차원에서의 소프트웨어적인 주소 처리 문제나 부품의 설계 자체에 의한 물리적 거리 문제도 있다. '''이것이 모든 문제의 근원이다.'''
빠르고 큰 저장 장치는 비싸다는 것은 컴퓨터라는 개념 자체가 정립된 이래로 항상 발생한 문제점이기에, 컴퓨터 공학자들은 싸고 빠른 컴퓨터를 만들 수 있는 방법을 연구하기 시작했다. 그래서 1990년대에 들어서 레지스터-L1캐시-DRAM-HDD 정도의 메모리 계층 구조가 정립되었다. 그러나, 각 계층별 격차가 매우 크고 특히 L1 캐시 - DRAM과 DRAM - HDD 사이의 간극이 어마무시했던 관계로, 이로 인한 성능 최적화 한계를 극복하기 위해 메모리 계층 구조는 점점 더 복잡해지고 있다.
과거 PC에 L2 캐시가 있는 게 특이하던 시절도 있었으나, 이제는 L3 캐시가 보편화 되었고(인텔 Iris Pro등 극히 일부 제품에는 L4 캐시에 해당되는 물건도 달려있다!), DRAM과 HDD 사이에 NAND SSD를 추가하고, DRAM과 NAND SSD 사이에 3D XPoint 기반 SSD를 추가하고, SSD 방식으론 3D XPoint 성능을 100% 써먹지 못하는 문제를 해결하기 위해 옵테인 DIMM을 추가하고 #, 다시 주류 NAND SSD와 HDD 사이에 QLC SSD를 추가하는 등... # (교량 부분을 우선 보는 게 이해가 쉬울 것이다[2]), #

3. 컴퓨터 메모리의 종류


일반적인 컴퓨터 프로그램의 구동에는 레지스터, 캐시, RAM의 세 가지 기억 장치를 사용한다. 이들은 SSD와 HDD보다 처리 속도가 훨씬 빠른 기억 장치로, '주 기억장치'라고 부른다. 예를 들어, 지금 이 문서를 읽는 동안 여러분의 컴퓨터(또는 같은 기능을 하는 모바일 기기)는 웹 브라우저를 구동하고 있다. 이때 웹 브라우저는 RAM과 캐시, CPU를 통해 열심히 정보를 읽고 쓰는 중이다. 그 뒤 웹 브라우저를 끄고 게임을 할 때는 어떨까? 웹 브라우저는 더 이상 구동되지 않지만, 필요할 때 언제든지 다시 실행할 수 있도록 SSD, HDD에 브라우저 프로그램의 데이터는 남아 있다. 그러나 지금 당장 사용하고 있지 않기 때문에 RAM 이상의 처리 성능을 지닌 기억장치에는 웹 브라우저가 이미 들어있지 않다. 주 기억 장치는 게임을 실행하느라 바쁘다.
처리 성능과 가성비 외에도 주 기억장치는 HDD, SSD와 큰 차이점이 있다. 주 기억장치는 모두 '''휘발성 기억장치'''로, 전원이 공급되지 않으면 모든 데이터가 사라진다. 때문에 이들은 정보를 오랫동안 저장하는 기능에는 매우 부적합하다. 영구적으로 코드를 꼽아 놔야 하는 외장 하드 같은 물건을 쓸 사람은 아무도 없을 것이다.
보다 자세한 사항은 틀:컴퓨터 메모리를 참조.

3.1. 레지스터


컴퓨터에서 제일 빠른 메모리. CPU 계산 과정에서 작동한다. CPU마다 다르겠지만 한 CPU에 100개 들어있으면 매우 많은 편. 그러나 무작정 많다고 좋은 건 아니고, CPU 스펙에도 포함되지 않는다. 자세한 것은 CPU 문서 참조.

3.2. 캐시 메모리


레지스터 다음으로 빠른 메모리. 캐시 메모리도 속도와 용량에 따라 여러 단계로 나뉜다. L1 캐시, L2 캐시, L3 캐시 등으로, 숫자가 작을수록 용량이 작고 빠르며, 숫자가 클수록 용량이 크고 느린 물건이다. CPU에 가까울수록 상위 레벨 캐시로 취급하며, 최하위 레벨 캐시의 경우 마지막 레벨을 의미하는 LLC(Last Level Cache)라고도 부른다. 대개는 CPU 칩 안에 들어가며 CPU 스펙의 일종으로 작용하나, 최하위 캐시 메모리의 경우 메인보드에 꽃혀있는 경우도 있고, 1990년대에는 아예 별도의 메모리로 나온 적도 있었다.
현재 PC당 L1 캐시는 수십 KB, L2 캐시는 수백 KB~수 MB, L3 캐시는 수~수백 MB 정도로 들어있으며, 이들은 보통 SRAM으로 구성된다. 그러나 캐시 메모리용 DRAM도 있다. 버퍼캐시 역할을 겸하는 SSD의 내부 DRAM이 대표적이다.

3.3. 메인 메모리


CPU나 메인보드와 분리되어 있는 메모리 중에서는 최상위 메모리이자, 프로그램을 직접 구동하는 데 사용되는 '주 기억 장치'의 최하위 메모리. CPU와 캐시에 비하면 훨씬 느리지만, HDD는 말할 것도 없고 SSD에 비해서도 차원이 다르게 빠르다.
현재 PC당 수~수십 GB 정도로 들어있으며, 주로 DRAM으로 구성된다. 물론, 메인 메모리가 무조건 DRAM이라고 정의되어 있지 않지만 메인 메모리용 SRAM이 있는지는 불명. 닌텐도 패미컴에 탑재된 Work RAM이 SRAM이라서 메인 메모리용 SRAM처럼 볼 수도 있지만, 캐시 메모리와 메인 메모리가 따로 존재하는 구조가 아니기 때문에 애매모호하다.

3.4. 옵테인 메모리


일반적인 SSD, HDD보다는 훨씬 빠른 속도를 가지고 있으나 용량이 적고 DRAM보다는 훨씬 느리다. 일반적으로 64 ~ 128GB 정도이며, 가격은 딱 SSD의 2배 정도이다. 상변화 메모리(PCM)으로 구성된다. 보조 기억장치보다는 주 기억장치에 더 가깝고, 많은 컴퓨터에서는 아직 쓰이지 않는다.

3.5. 스토리지 (SSD, HDD)


프로그램이 구동될 때에는 직접 쓰이지 않는 '보조 기억장치' 또는 '저장소'들 중에서는 컴퓨터 안에 내장되어 있는 이 메모리들이 대개 최상위에 위치하게 된다. 둘 다 있는 컴퓨터에서는 대개 SSD가 HDD보다 상위에 위치하게 된다. 세부사항은 SSD, HDD 참조.
현재 SSD는 100GB ~ 1TB 정도, HDD는 1TB ~ 6TB 정도의 용량으로 구성된다.
일반적으로는 ATA라는 중간 계층을 따로 두어 통신한다. 단 NVMe SSD만큼은 CPU와 직접 통신한다.

3.6. 이동식 저장장치


USB 메모리, ODD 등을 의미한다. 기업용으로는 자기테이프도 있다.
때로는 키보드, 마우스 등 입력장치나 클라우드 스토리지 등을 이 위치에 넣는 경우도 있다.

4. 지역참조성


컴퓨터 프로그램은 메모리의 같은 지역을 자주 확인하는 경향이 있다. 게임을 예시로 들어 생각해 보자.
리그 오브 레전드라는 게임을 플레이한다고 치자. 플레이어는 마우스로 화면의 한 지점을 계속 우클릭하여 자신의 캐릭터인 '챔피언'을 조작하고 있다. 이때 챔피언의 위치 정보는 계속해서 바뀔 것이다. 때문에 CPU는 마우스를 읽어내면서 챔피언의 위치 기록을 '''끊임없이 바꾸어야 한다'''. 하지만 맵에 고정되어 있는 넥서스와 부쉬 등 지형의 위치는 보통 '''바뀌지 않는다'''. 그러니까 챔피언의 위치에 비해, 지형지물의 위치 데이터는 자주 읽을 필요가 없다. 그렇다면 '''자주 쓰는 정보만 빠른 메모리에 올려놓으면 되지 않을까?'''
CPU는 RAM 보다 많이 빠르다. 이 때문에 RAM에서 자료를 요청하면, CPU는 RAM이 자료를 보내 줄 때까지 멈춰서 기다린다.[3] 만약 RAM에 챔피언의 위치기록과 넥서스의 위치기록을 모두 저장해 놓았다면, CPU는 챔피언의 위치를 바꾸고 싶을 때마다 느린 RAM의 속도에 맞추어 잠깐씩 멈추어야 한다. 챔피언의 위치는 자주 바뀌는데, 그 때마다 CPU가 잠깐씩 멈춰어야 하는 것이다. 이러면 컴퓨터가 전체적으로 느려진다.
그래서 컴퓨터는 챔피언의 위치기록을 캐시에 저장한다. 캐시는 CPU보다는 느리지만 RAM보다는 빠르기에, CPU가 챔피언의 위치를 바꿀 때마다 잠깐 멈추기는 하지만 '''훨씬 짧게''' 멈춘다. CPU가 멈추는 시간이 줄어들기 때문에 결과적으로 CPU가 더 열심히 일하게 되고 성능이 좋아진다.
그렇다면, 챔피언 말고 넥서스의 위치기록도 캐시에 올려놓으면 되지 않을까? 안 되는 건 아니지만, 캐시는 RAM보다 '''비싸다'''.[4] 다시 말해, 같은 용량의 정보를 담으려면 돈을 더 많이 써야 하고, 똑같은 가격으로 사도 저장 용량이 크게 부족하다. 그러니 자주 쓰는 챔피언 정보는 비싸지만 빠른 캐시에 올려두고, 자주 쓰지 않는 넥서스 정보는 느리지만 싼 RAM에 올려놓는 것이다.
이처럼 '''프로그램이 일부분만을 자주 사용하는''' 현상을 '''지역 참조성'''이라고 한다. 이 지역참조성은 특별한 한 프로그램에서만 일어나는 것이 아니라 거의 대다수의 프로그램에서 일어나는 것이 알려져 있다. 만약 당신이 웹브라우저에서 여러 탭을 켜 놓았다고 가정하자. 웹브라우저는 다른 탭보다 당신이 지금 보고 있는 이 탭의 정보에 보다 자주 접속할 것이다. 이처럼 거의 모든 프로그램이 자신이 가진 정보 중 일부분에 자주 접속하는 지역참조성 현상을 보인다.

5. 결론


싼 메모리는 용량이 크지만 느리고, 비싼 메모리는 용량이 작지만 빠르다. 대부분의 컴퓨터 프로그램들은 프로그램의 전체가 아닌 작은 부분에만 자주 접근하므로, 그 작은 부분만을 비싸고 빠른 메모리에 저장하고 사용하면 비싼 저장 장치로 컴퓨터를 도배하지 않아도 프로그램의 전체적인 성능이 향상된다. 이 때문에 컴퓨터 메모리는 용량이 많고 느린 아래쪽에서 시작해서 용량이 작고 빠른 위쪽으로 올라가는 계층구조를 지니고 있다. 이를 '메모리 계층 구조'라 한다.

6. 관련 문서



[1] 잠복이라는 의미도 있지만 컴퓨터 분야에서는 지연 시간, 대기 시간, 접근 시간, 호출 시간, 응답 시간이라는 의미로 사용된다.[2] 사실 나머지는 기술적 세부 사항 설명이거나 특정 제품 벤치마크 부분이라서, 이 문서에 관련된 개념 이해는 저부분만 보면 충분하다.[3] 실제로는 다른 일을 하는 경우가 잦다. 어디까지나 비유이다.[4] RAM의 용량 대비 가격은 공정 향상과 치킨 게임에 힘입어 어마무시한 수준으로 떨어졌지만 캐시 메모리는 수십년 동안 고작 3% 떨어지는 것에 그쳤다.

분류