Cache Memory(캐시 메모리)
캐시(cache)는 컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다. 캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다. 캐시에 데이터를 미리 복사해 놓으면 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근할 수 있다.
from wiki
간단히 말해, CPU 캐시 메모리는 매우 빠른 메모리이다. 컴퓨팅 시대 초기에, 처리기와 메모리의 속도는 느렸다. 그러나 1980년대에, 처리기의 속도가 갑자기 빨라지기 시작했다. 이때 시스템 메모리(RAM)는 빨라지는 CPU의 속도를 따라잡을 수 없었고, 새로운 타입의 매우 빠른 메모리가 생기게 되었다(CPU 캐시 메모리).
컴퓨터의 내부에는 다양한 유형의 메모리가 있다. 운영체제와 프로그램 등 대부분의 데이터를 저장하는 하드 디스크나 SSD 같은 기본 스토리지가 있다. 다음으로는 일반적으로 RAM 알려진 랜덤 액세스 메모리가 있다. 이는 기본 스토리지보다 훨씬 빠르지만 단기 스토리지 매체에 불과하다. 컴퓨터와 컴퓨터의 프로그램 작업은 RAM을 사용하여 자주 액세스 하는 데이터를 저장하여 컴퓨터의 작업을 빠르고 원할하게 유지한다. 마지막으로, CPU는 CPU 캐시 메모리라고 알려진 훨씬 더 빠른 유닛을 가지고 있다.
컴퓨터 메모리는 작동 속도에 따라 계층 구조를 갖는다. CPU 캐시는 이 계층의 맨 위에 위치하며 가장 빠르다. 또한 중앙 처리에서 가장 가까운 곳에 위치하며, CPU 자체의 일부이기도 하다.
컴퓨터 메모리는 또한 다른 종류도 있다. 캐시 메모리는 정적 RAM(SRAM)의 형태이지만, 일반 시스템 RAM은 동적 RAM(DRAM)으로 알려져 있다. 정적 RAM은 SRAM을 캐시 메모리에 이상적으로 만드는 DRAM과 달리 지속적으로 새로 고칠 필요 없이 데이터를 저장할 수 있다.
프로그램 및 앱은 CPU가 해석하고 실행하는 일련의 명령으로 설계되었다. 프로그램을 실행하면 명령이 스토리지(하드 드라이브)에서 CPU로 전달된다. 여기서 메모리 계층이 작동하게 된다.
데이터는 먼저 RAM에 로드된 다음 CPU로 전송된다. 요즘 CPU는 초당 엄청난 수의 명령을 수행할 수 있다. CPU의 전력을 최대한 활용하기 위해서는 CPU 캐시가 있 초고속 메모리에 접근해야 한다. 메모리 컨트롤러는 RAM에서 데이터를 가져와 CPU 캐시로 전송한다. CPU에 따라 컨트롤러는 CPU에 있거나 마더보드에 있는 Northbridge 칩셋에 있다. 그런 다음 캐시 메모리는 CPU 내에서 데이터의 앞뒤를 가져온다. 메모리 계층은 CPU 캐시 내에도 존재한다.
'자주 사용하는 데이터'를 캐시에 저장하고, CPU가 메모리 대신 캐시에 접근하도록 하는 것이 캐시의 기본 원리이다. 여기서 자주 사용하는 데이터에 대한 판단은 지역성의 원리를 따르며, 지역성의 원리는 시간 지역성과 공간 지역성으로 구분할 수 있다.
for(i = 0; i < 10; i+= 1) {
arr[i] = i;
}
공간 지역성은 최근 접근한 데이터의 주변 공간에 다시 접근하는 경향을 말한다. 위 루프의 경우 배열 arr의 각 요소를 참조하면서 가까운 메모리 공간에 연속적으로 접근하고 있다. 배열의 쇼오들이 메모리 공간에 연속적으로 할당되기 때문이다.
프로세스 실행 중 접근한 데이터의 접근 시점과 메모리 주소를 표시한 위의 그림은 시간 지역성과 공간 지역성의 특성을 잘 보여준다.
한 프로세스 안에서도 자주 사용하는 부분과 그렇지 않은 부분이 있기 때문에 운영체제는 프로세스를 페이지 단위로 관리하며, 위 그림은 페이지를 참조한 기록이다. 가로 축은 실행 시간이고, 세로 축은 메모리 주소다.
즉 수평으로 이어진 참조 기록은 긴 시간에 걸쳐 같은 메모리 주소를 참조한 것이고, 수직으로 이어진 참조 기록은 같은 시간에 밀접한 메모리 주소들을 참조한 것이다. 페이지에 접근할 때도 지역성의 원리가 적용 된다는 것을 알 수 있다.
CPU 캐시 메모리는 3레벨로 나뉘어져 있다: L1, L2, L3. 메모리 계층은 다시 속도와 캐시의 크기에 따라 나뉜다.
L1 캐시의 크기는 CPU에 달려있다. 일부 최상위 소비자용 CPU는 현재 Intel i9-9980XE와 같이 1MB L1 캐시를 갖추고 있지만, 이러한 캐시는 엄청난 비용이 들며 여전히 매우 부족하다. 인텔의 제온 레인지와 같은 일부 서버 칩셋은 1-2MB L1 메모리 캐시를 갖추고 있다.
L1 캐시의 크기에는 기준이 없다. 그렇기 때문에 L1을 구매하기 전에는, CPU의 스펙을 살펴봐야 한다.
L1 캐시는 보통 2 섹션으로 나위어져 있다: Icache(Instruction Cache), Dcache(Data Cache). Icache는 CPU가 수행해야 할 명령에 대한 정보를 다루고, Dcache는 수행되어야 할 데이터를 저장한다.
L2 캐시는 L1 캐시보다 느리지만 크기는 더 크다. L1 캐시가 KB 단위로 측정되지만, 현대 L2 캐시는 MB 단위로 측정된다. 예를 들어, AMD의 높은 등급인 Ryzen 5600X는 384KB L1 캐시와 3MB L2 캐시를 가지고 있다.
L2 캐시 크기는 CPU에 따라 다르지만 일반적으로 크기는 256KB에서 8MB 사이이다. 대부분의 CPU는 256KB 이상의 L2 캐시를 채우므로 이 크기는 매우 작은 것이다. 게다가, 현대의 가장 강력한 CPU들 중 일부는 8MB를 초과하는 더 큰 L2 메모리 캐시를 가지고 있다.
속도 면에서 L2 캐시는 L1 캐시보다 느리지만 여전히 시스템 RAM보다 훨씬 빠르다. L1 메모리 캐시는 일반적으로 RAM보다 100배 빠른 반면, L2 캐시는 약 25배 빠르다.
초기 L3 캐시는 마더보드에 있었다. 이것은 대부분의 CPU가 단일 코어 프로세서였던 아주 오래 전의 일이다. 최근 CPU의 L3 캐시는 32MB의 크기를 갖기도 하는 대용량 매체이다. 일부 서버 CPU L3 캐시는 최대 64MB의 L3 캐시를 포함하며 이를 초과하기도 한다.
L3 캐시는 가장 크지만 가장 느린 캐시 메모리 유닛이다. 현대의 CPU는 CPU 자체에 L3 캐시를 포함하고 있다. 그러나 L1과 L2 캐시는 각 코어에 존재하지만 L3 캐시는 전체 코어가 사용할 수 있는 일반적인 메모리 풀에 더 가깝다.