L1·L2·L3 캐시 계층과 메모리 접근 지연

L1·L2·L3 캐시의 계층 구조와 접근 지연, 일관성, 프로세서별 구성 및 소프트웨어 최적화 관점을 정리합니다.

2026-08-14 · 최초 발행 2026-01-04

속도와 용량을 나누어 맡기는 캐시 계층

단일 캐시만으로는 빠른 접근과 큰 용량을 동시에 만족시키기 어렵다. 그래서 현대 프로세서는 L1, L2, L3로 이어지는 다층 캐시를 두고, 각 레벨이 속도·크기·비용의 다른 지점을 담당하게 한다. 이 계층은 평균 메모리 접근 시간을 낮추기 위한 구조다.

CPU CoreL1 Cache속도: 가장 빠름용량: 가장 작음비용: 가장 비쌈L2 Cache속도: 중간용량: 중간L3 Cache속도: 느림용량: 가장비용: 상대적으로 저렴

캐시 계층을 구성하는 방식도 하나로 고정되지 않는다. 포괄적 계층에서는 상위 캐시가 하위 캐시의 데이터를 포함한다. 배타적 계층은 각 레벨에 서로 다른 데이터를 저장한다. 최근 Intel에서 채택한 NINE(Non-Inclusive Non-Exclusive)은 두 방식에 묶이지 않는 유연한 구성을 뜻한다.

캐시 미스가 발생하면 상위 레벨을 순서대로 찾고, 각 레벨의 특성에 맞춰 크기와 속도를 조정한다.

Register(1 cycle)L1 Cache(3-4 cycles)L2 Cache(10-20 cycles)L3 Cache(40-75 cycles)Main Memory(200+ cycles)SSD/HDD(millions of cycles)

코어 바로 옆에서 처리하는 L1 캐시

L1 캐시는 CPU 코어 내부에 직접 들어간다. 코어당 32KB-64KB 크기로, 명령어 캐시(I-Cache)와 데이터 캐시(D-Cache)를 분리해 둔다. 접근에는 1-4 클럭 사이클이 걸리며 일반적으로 8-way 세트 연관 방식을 사용한다.

명령어와 데이터를 분리하면 하버드 아키텍처처럼 두 종류의 접근을 동시에 처리할 수 있다. 명령어 페치와 데이터 로드가 병렬로 수행되고, 서로 같은 캐시 공간을 두고 경쟁하지 않아 충돌도 줄어든다. 각 캐시에 맞는 정책을 적용할 수 있고 코드와 데이터 영역의 분리는 보안 측면에서도 의미가 있다.

L1의 접근 경로에는 히트 가능성이 높은 웨이를 먼저 찾는 웨이 예측, 캐시를 여러 뱅크로 쪼개 병렬성을 높이는 서브뱅킹, 캐시 접근 자체를 파이프라인화하는 방식이 쓰인다. 일부 웨이만 활성화해 전력을 줄이거나, 다음에 필요할 데이터를 미리 적재하는 프리페칭도 여기에 포함된다.

L1 미스를 받아내는 L2 캐시

과거 L2 캐시는 프로세서 외부에 놓였지만, 현대 구조에서는 코어 내부에 배치된다. 명령어와 데이터를 함께 저장하는 통합형 캐시이며, 코어당 256KB-1MB 크기, 10-20 클럭 사이클의 접근 속도, 8-way ~ 16-way 세트 연관 구성을 가진다.

YesNoL1 미스 발생L2 캐시 검색L2 히트?L2에서 L1으로 데이터 전송L3 또는 메모리 접근패널티: 10-15 사이클패널티: 훨씬

L2는 L1의 한계를 흡수하는 2차 방어선이다. 프로그램의 주요 작업 데이터를 수용하고 L3나 메모리로 향하는 접근을 줄여 대역폭을 중재한다. 일반적으로 코어마다 독립적으로 운용되며, 속도와 용량 사이의 균형점 역할을 한다.

접근 패턴에 따라 교체 정책을 바꾸는 어댑티브 교체, L1보다 적극적인 프리페칭, 일부 현대 프로세서의 캐시 데이터 압축, ECC(Error Correcting Code)를 통한 무결성 보장, 유휴 영역의 저전력 모드가 L2 설계에 적용될 수 있다.

여러 코어가 함께 쓰는 L3 캐시

L3는 모든 코어가 공유하는 통합 캐시다. 프로세서에 따라 4MB-64MB로 크기 차이가 크고, 접근에는 40-75 클럭 사이클이 걸린다. 12-way ~ 20-way 세트 연관 구조를 사용하며, 여러 슬라이스로 나누어 병렬 접근한다.

여러 코어L3 캐시 공유장점코어 데이터 공유 용이공간 효율성 향상동적 할당 가능단점코어 경쟁 발생일관성 유지 오버헤드접근 지연 가변적

L3는 메모리에 도달하기 전의 마지막 방어선이다. 코어 사이의 공통 데이터를 중복 저장하지 않도록 돕고, 메모리 버스 트래픽을 대폭 줄인다. 코어별 공간을 동적으로 배분할 수도 있으며, L2에서 밀려난 데이터를 임시로 보관하는 희생 캐시 역할도 한다.

슬라이스 아키텍처에서는 L3를 물리적으로 여러 부분으로 분산한다. 코어는 서로 다른 슬라이스에 동시에 접근할 수 있고, 연속된 주소는 서로 다른 슬라이스에 배치된다. 슬라이스 위치에 따라 지연 시간이 달라질 수 있지만, 슬라이스 수만큼 대역폭은 증가한다.

계층을 오가는 데이터와 일관성

L3가 L2와 L1의 데이터를 포함하는 포괄성(Inclusiveness)은 Intel의 과거 설계에서 사용됐다. 이 구조에서는 L3에서 데이터를 교체할 때 하위 캐시의 해당 데이터도 무효화하는 백인밸리데이션(Back-invalidation)이 필요하다. 다중 코어 환경에서는 스누핑 프로토콜, MESI의 Modified·Exclusive·Shared·Invalid 상태, 대규모 시스템을 위한 디렉터리 기반 방식으로 일관성을 관리한다.

캐시 라인 로드블록 복사블록 복사워드 전달Write-Back필요필요Dirty 데이터메모리L3L2L1CPU 레지스터

L1 미스는 L2 검색으로 이어지고, L2 히트 시 약 10-15 사이클의 패널티가 발생한다. L2에서도 찾지 못하면 L3를 검색하며, L3 히트의 패널티는 약 40-75 사이클이다. L3 미스는 200+ 사이클 패널티의 메모리 접근으로 이어진다. 일부 설계는 L2와 L3를 동시에 검색하고, 필요한 데이터를 우선 전달하는 크리티컬 워드 우선 방식을 쓴다.

프로세서별 캐시 구성

Intel Core 시리즈에서 L1은 32KB I-Cache와 32KB D-Cache로 구성되며 8-way다. L2는 코어당 256KB-1MB 통합 캐시로 4-8-way를 사용한다. L3는 8MB-64MB의 12-20-way 공유 캐시이며 슬라이스 구조를 가진다. 과거에는 포괄적 정책을 사용했고 최근에는 NINE 정책을 채택했다. L1 히트율은 95%, L2는 추가 3%, L3는 추가 1-2%의 성능을 보인다.

AMD Ryzen 시리즈는 32KB I-Cache와 32KB D-Cache의 8-way L1을 둔다. L2는 코어당 512KB 8-way 통합 캐시이고, L3는 CCX/CCD 단위로 공유되는 32MB-256MB 캐시다. 대용량 L3는 게임 성능을 높이며, Chiplet 디자인은 확장성에 유리하다.

ARM 프로세서의 L1은 32KB-64KB로 분리형 또는 통합형일 수 있다. L2는 코어 클러스터가 공유하는 128KB-1MB이고, L3는 일부 고성능 모델에만 2MB-8MB로 탑재된다. 전력 효율 중심의 설계와 작은 캐시를 통한 고효율이 모바일 최적화의 특징이다.

소프트웨어에서 보는 캐시 활용

소프트웨어는 데이터를 64바이트 경계에 배치해 캐시 라인 정렬을 고려할 수 있다. 루프 블로킹으로 작업 세트를 캐시 크기에 맞추고, 컴파일러 또는 명시적 프리페치 명령으로 프리페칭 힌트를 활용한다. 병렬 코드에서는 쓰레드별 데이터를 서로 다른 캐시 라인에 배치해 거짓 공유를 피하고, NUMA 환경에서는 로컬 메모리 접근을 우선한다.

성능을 확인할 때는 평균 메모리 접근 시간인 AMAT(Average Memory Access Time), 1000 명령어당 미스 횟수를 나타내는 MPKI(Misses Per Kilo Instructions), 캐시와 메모리 버스의 대역폭 활용률, 레벨별 히트율과 레이턴시를 함께 본다.

L1은 최고 속도, L2는 속도와 용량의 균형, L3는 큰 공유 용량을 맡는다. 이 역할 분담을 이해해야 프로세서 구조와 소프트웨어 접근 패턴을 같은 관점에서 다룰 수 있다.

캐시 메모리컴퓨터구조메모리 계층CPU캐시 일관성