L1, L2, L3 캐시의 차이점 정리

L1, L2, L3 캐시는 CPU 코어에 가까운 순서로 늘어선 다단계 캐시로, 가까울수록 작고 빠르며 멀수록 크고 느립니다. 일반적인 PC나 서버 CPU에서는 L1이 수십 KB에 수 사이클, L2가 수백 KB~수 MB에 십수 사이클, L3가 수 MB~수십 MB에 수십 사이클이 대표적인 범위입니다. L1과 L2는 대부분 코어마다 따로 두고, L3는 여러 코어가 공유합니다. 메인 메모리인 DRAM에 접근하는 데는 수백 사이클이 걸리므로, 이 계층에서 가능한 한 많은 접근을 처리합니다.

비교 항목L1 캐시L2 캐시L3 캐시
코어와의 관계각 코어 전용대부분 코어별 전용. 몇 개의 코어가 공유하는 설계도 있습니다여러 코어(칩 전체 또는 코어 묶음)가 공유
용량(PC·서버용 CPU의 대표적인 범위)명령어용·데이터용 각각 약 32~64 KB코어당 약 256 KB~수 MB칩 전체에서 수 MB~수십 MB
레이턴시(대표적인 범위)약 3~5사이클약 10~20사이클약 30~70사이클. 코어에서 먼 부분일수록 깁니다
명령어와 데이터분리(I 캐시와 D 캐시)공용(통합 캐시)공용(통합 캐시)
설계에서 중시하는 점짧은 히트 시간. 파이프라인 안에서 매 사이클 사용합니다L1의 미스를 받아 미스 페널티를 줄입니다메인 메모리 접근을 줄이고 코어 간에 데이터를 공유합니다
미스했을 때 가는 곳L2L3메인 메모리(DRAM)
주소 처리가상 인덱스·물리 태그(VIPT)가 많습니다물리 주소물리 주소
포함 관계최상위. 하위에 포함되는지는 하위의 방식으로 결정됩니다인클루시브, 논인클루시브 등 설계에 따라 다릅니다인클루시브로 하면 일관성 확인 범위를 좁히기 쉽습니다. 중복을 없앤 익스클루시브나 논인클루시브 설계도 있습니다
물리적 배치코어 안. 실행 유닛 바로 옆코어 바로 바깥. 코어의 일부로 배치코어별 슬라이스로 나누고 링이나 메시 네트워크로 연결하는 경우가 많습니다
라인 크기64바이트가 일반적64바이트가 일반적64바이트가 일반적

수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.

상황별 선택 기준

L1 캐시
명령어 인출과 로드·스토어 때마다 사용하는 가장 가까운 캐시입니다. 자주 쓰는 데이터를 작은 범위에 모아 시간적 지역성을 높이면 효과가 납니다.
L2 캐시
L1에 들어가지 않는 작업 데이터를 받아냅니다. 루프 블로킹 등으로 작업 데이터를 수백 KB~수 MB 정도로 줄이면 효과를 보기 쉽습니다.
L3 캐시
여러 코어가 데이터를 공유할 때나 코어별 캐시에 들어가지 않는 큰 데이터를 다룰 때 효과가 있습니다. 다른 코어와 용량을 나눠 쓰므로 동시에 실행되는 프로그램의 영향을 받습니다.

자주 묻는 질문

L1 캐시를 더 크게 만들지 않는 이유는 무엇인가요?

용량을 키우면 메모리 셀 배열과 배선이 길어져 히트 시간이 늘어나기 때문입니다. L1은 파이프라인 안에서 매 사이클 사용하므로 1사이클의 지연도 성능에 크게 영향을 줍니다. 그래서 L1은 수십 KB로 억제하고, 큰 용량은 L2와 L3에서 확보합니다. VIPT 방식에서는 페이지 크기와 연관도의 관계 때문에도 용량이 제한됩니다.

L1만 명령어용과 데이터용으로 나누는 이유는 무엇인가요?

파이프라인에서는 매 사이클 명령어를 인출하면서 다른 명령어가 데이터를 읽고 쓰기 때문입니다. 나눠 두면 두 접근을 동시에 할 수 있고, 각각에 맞는 구성으로 만들 수 있습니다. L2 이후는 접근 빈도가 낮아지므로 용량을 유연하게 나눠 쓸 수 있는 공용 캐시로 하는 것이 일반적입니다.

인클루시브와 익스클루시브 중 어느 쪽이 좋은가요?

각각 장단점이 있습니다. 인클루시브에서는 상위의 내용이 반드시 하위에도 있으므로 다른 코어의 문의를 하위만 보고 판단할 수 있지만, 중복되는 만큼 실질 용량이 줄어듭니다. 익스클루시브는 중복이 없어 합계 용량을 효율적으로 쓸 수 있지만, 라인 이동과 일관성 관리가 복잡해집니다. 코어 수와 캐시 크기에 맞춰 선택합니다.

표의 용량과 사이클 수는 모든 CPU에서 같나요?

아닙니다. PC나 서버용 CPU를 가정한 대표적인 범위입니다. 설계 세대, 동작 주파수, 코어 수, 칩 구성에 따라 달라집니다. 임베디드용 마이크로컨트롤러에는 L2나 L3가 없는 것도 많고, 반대로 캐시 칩을 적층해 L3를 크게 한 것도 있습니다. 실제 값은 성능 카운터나 메모리 지연을 측정하는 프로그램으로 확인합니다.

이해도 확인

일반적인 컴퓨터에서 접근이 빠른 순으로 나열한 기억 계층으로 올바른 것은?

  1. ASSD → 주기억장치 → L2 캐시 → L1 캐시 → 레지스터
  2. B주기억장치 → 레지스터 → SSD → L1 캐시
  3. C레지스터 → L1 캐시 → L2 캐시 → 주기억장치(DRAM) → SSD
정답과 해설 보기

정답: C. 레지스터 → L1 캐시 → L2 캐시 → 주기억장치(DRAM) → SSD

CPU에 가까운 기억장치일수록 고속·소용량이고, 멀수록 저속·대용량·저가입니다. 대략 레지스터는 1클록 미만, L1은 약 1 ns(수십 KB), L2는 수 ns(수 MB), L3는 십수 ns(수십 MB), DRAM은 약 100 ns(수십 GB), SSD는 수십~100 µs(수 TB)입니다. 자주 쓰는 데이터를 빠른 계층에 둠으로써 전체적으로 빠르고 대용량인 기억장치를 저렴하게 구현합니다.

캐시를 명령용(I 캐시)과 데이터용(D 캐시)으로 나눈 L1 캐시의 주된 이점은?

  1. A명령과 데이터가 같은 주소에 놓여도 충돌하지 않게 되어 용량이 2배로 보이기 때문
  2. B명령 인출과 데이터 읽기·쓰기를 같은 클럭에 병행하여 수행할 수 있기 때문
  3. C명령은 변경되지 않으므로 D 캐시를 불필요하게 할 수 있기 때문
정답과 해설 보기

정답: B. 명령 인출과 데이터 읽기·쓰기를 같은 클럭에 병행하여 수행할 수 있기 때문

파이프라인에서는 매 클럭 명령을 인출하면서 다른 명령이 데이터를 읽고 씁니다. L1을 명령용과 데이터용으로 나누면 두 접근이 하나의 캐시 포트를 두고 다투지 않고 병행하여 이루어지며, 각각의 성질에 맞춘 구성도 선택할 수 있습니다. 용량이 2배가 되는 것은 아니며 합계 용량을 나누어 사용합니다. 데이터 읽기·쓰기는 항상 필요하므로 D 캐시를 불필요하게 할 수는 없습니다. L2 이후는 명령과 데이터를 공용으로 하는 것이 일반적입니다.

L1 캐시 아래에 L2 캐시를 두는 다단 캐시에서 L2 캐시의 주된 역할은?

  1. AL1 캐시보다 빠른 히트 시간으로 L1의 미스 자체를 없앤다
  2. BL1보다 크고 느리지만 L1의 미스 페널티를 작게 한다
  3. C주기억장치 대신 프로그램의 모든 데이터를 항상 보유한다
정답과 해설 보기

정답: B. L1보다 크고 느리지만 L1의 미스 페널티를 작게 한다

L1은 속도를 우선하여 작게 만들기 때문에 미스가 어느 정도 일어납니다. L2는 L1보다 크고 히트 시간은 길지만 주기억장치보다는 훨씬 빠르므로, L1에서 미스한 접근의 많은 부분을 L2에서 받아내어 주기억장치까지 가는 것보다 L1의 미스 페널티를 크게 줄입니다. L1보다 빠른 것은 아니며 L1의 미스를 없앨 수도 없습니다. 용량은 주기억장치보다 훨씬 작아 모든 데이터를 보유할 수도 없습니다.

  1. 하위 캐시(L2 등)가 상위 캐시(L1)의 내용을 모두 포함하는 인클루시브 방식의 특징으로 올바른 것은?
  2. 캐시 용량을 크게 하면 일반적으로 히트 시간은 어떻게 되는가? 그 이유와 함께 올바른 것은?
  3. L1 캐시의 히트 시간이 1 ns, 미스율이 5%, L2 캐시의 히트 시간이 10 ns, L2의 로컬 미스율이 20%, 주기억장치의 접근 시간이 100 ns일 때, 평균 메모리 접근 시간은 얼마인가?

메모리 계층 구조 문제 풀기

주요 용어 설명

캐시 메모리
CPU 가까이에 두는 고속·소용량 메모리. 자주 쓰는 데이터를 보관하여 주기억장치와의 속도 차이를 완화한다. 주로 SRAM으로 만든다.
평균 메모리 접근 시간(AMAT)
1회 메모리 접근에 걸리는 시간의 평균. 히트 시간 + 미스율 × 미스 페널티로 구하며, 캐시 성능을 비교하는 기본 지표이다.
미스 페널티(miss penalty)
캐시 미스가 났을 때 하위 계층에서 데이터를 가져오느라 추가로 걸리는 시간. 하위 계층의 접근 시간과 라인 전송 시간으로 정해진다.
캐시 일관성(Cache Coherency)
멀티코어 CPU에서 각 코어의 캐시에 같은 주소의 데이터가 있을 때 그 내용의 일관성을 유지하는 방식. 한 코어가 값을 고치면 다른 코어의 오래된 사본을 무효화하는 식으로 구현한다.
시간 지역성(Temporal Locality)
한 번 접근한 데이터나 명령에 가까운 시일 안에 다시 접근하기 쉬운 성질. 루프 안에서 반복 사용하는 변수 등이 예이며, 캐시가 효과적인 이유 중 하나이다.

관련 비교