핵심 인사이트 (3줄 요약)
- 본질: L2 캐시 (Level 2 Cache)는 L1 캐시 (Level 1 Cache)의 짧은 지연시간만으로는 감당할 수 없는 작업 집합을 받아 주는, CPU (Central Processing Unit) 내부의 두 번째 완충 계층이다.
- 가치: L2 캐시는 L1보다 몇 배 느리더라도 DRAM (Dynamic Random Access Memory)으로 내려가는 비싼 미스를 크게 줄여 평균 메모리 접근 시간인 AMAT (Average Memory Access Time)를 낮춘다.
- 판단 포인트: L2 설계의 핵심은 "무조건 크게"가 아니라, 코어별 지역성, 포함 정책, 전력·면적 제약 안에서 적중률과 지연시간의 균형을 잡는 것이다.
Ⅰ. 개요 및 필요성
L2 캐시 (Level 2 Cache)는 프로세서의 메모리 계층에서 L1 캐시 뒤, L3 캐시 (Level 3 Cache) 또는 메인 메모리 앞에 놓이는 중간 캐시다. L1 캐시는 보통 1~4사이클 안에 응답해야 하므로 매우 작게 설계되는데, 이 한정된 용량만으로는 루프 본문, 데이터 블록, 분기 이력처럼 반복적으로 쓰이는 작업 집합을 오래 붙잡아 두기 어렵다. 그 결과 L1 미스가 곧바로 메인 메모리 접근으로 이어지면 파이프라인은 수십~수백 사이클을 기다리게 된다.
이 문제를 막기 위해 L2는 L1보다 넓은 용량과 약간 더 긴 지연시간을 받아들이는 대신, "비싸게 틀리는 일"을 줄이는 계층으로 등장했다. 과거에는 칩 바깥이나 패키지 근처에 두기도 했지만, 오늘날에는 대부분 코어 가까이에 집적된 SRAM (Static Random Access Memory) 구조로 구현되어 L1 미스의 2차 방어선 역할을 맡는다. 즉 L2의 존재 이유는 단순 저장 공간 추가가 아니라, 고속 코어와 느린 주기억장치 사이의 시간 간극을 현실적인 비용으로 메우는 데 있다.
┌──────────────────────────────────────────────────────────────────────┐
│ L2 캐시가 필요한 이유: "메모리 추락" 방지 │
├──────────────────────────────────────────────────────────────────────┤
│ CPU 요청 │
│ │ │
│ ├─▶ L1 Hit ───────────────────────────────▶ 즉시 실행 │
│ │ │
│ └─▶ L1 Miss │
│ │ │
│ ├─▶ L2 Hit ─────────────────────────▶ 짧은 추가 지연 후 복구 │
│ │ │
│ └─▶ L2 Miss ────────────────────────▶ DRAM 접근, 큰 페널티 │
└──────────────────────────────────────────────────────────────────────┘
이 그림이 보여 주는 핵심은 L2가 "빠른 계층"이라서 중요한 것이 아니라, 더 느린 계층으로 떨어지는 횟수를 줄이기 때문에 중요하다는 점이다. L2 적중 여부 하나가 파이프라인 정지 길이를 한 자릿수 사이클과 수십~수백 사이클로 갈라놓는다.
- 📢 섹션 요약 비유: L1이 손에 쥔 도구함이라면 L2는 바로 뒤 선반이다. 손에서 못 찾았다고 곧바로 창고까지 뛰어가면 일이 끊기니, 한 걸음 뒤에서 대부분을 다시 건져 올리게 만든 것이다.
Ⅱ. 아키텍처 및 핵심 원리
현대 L2 캐시는 대개 코어 전용(Private)이며, 명령어와 데이터를 함께 담는 통합 캐시 (Unified Cache)로 설계된다. L1은 명령어 캐시와 데이터 캐시를 나눠 병렬성을 극대화하는 경우가 많지만, L2는 "남는 공간을 어느 쪽이든 유연하게 쓰는 것"이 더 중요하다. 이 때문에 L2는 용량 효율을 높이기 위해 보통 더 높은 연관도(Set Associativity)와 더 복잡한 교체 정책을 사용한다.
L2의 핵심 원리는 평균 메모리 접근 시간 최적화다. 단순화하면 AMAT = L1 Hit Time + L1 Miss Rate × (L2 Hit Time + L2 Miss Rate × Memory Penalty)로 볼 수 있다. 여기서 L2는 자신의 접근 시간이 조금 늘더라도, L2 미스율을 충분히 낮춰 전체 기대 지연시간을 줄이는 쪽으로 설계된다. 그래서 L2는 L1보다 느리지만, 시스템 전체 관점에서는 성능을 지키는 계층이 된다.
| 항목 | L1 캐시 | L2 캐시 |
|---|---|---|
| 최우선 목표 | 적중 시간 최소화 | 미스 페널티 완충 |
| 일반적 용량 | 수십 KB | 수백 KB ~ 수 MB |
| 일반적 지연 | 수 사이클 | 약 8~20사이클 |
| 구조 | 분리형이 흔함 | 통합형이 흔함 |
| 주로 방어하는 문제 | 즉시 실행 지연 | 용량·충돌 미스 확대 |
아래 흐름은 L2가 실제로 어떤 식으로 L1과 메모리 사이를 중재하는지를 보여 준다.
┌──────────────────────────────────────────────────────────────────────┐
│ L2 캐시 접근 흐름과 데이터 이동 │
├──────────────────────────────────────────────────────────────────────┤
│ 1) 코어 요청 │
│ │ │
│ ▼ │
│ [L1 검사] ── Hit ─────────────────────────────────────────▶ 사용 │
│ │ │
│ Miss │
│ ▼ │
│ [L2 태그 검사] │
│ │ │
│ ├─ Hit ─▶ L2 라인 전달 ─▶ L1 채움(Fill) ─▶ 코어 재실행 │
│ │ │
│ └─ Miss ─▶ L3/DRAM 요청 ─▶ 라인 수신 ─▶ L2 채움 ─▶ L1 채움 │
└──────────────────────────────────────────────────────────────────────┘
이 과정에서 중요한 설계 쟁점은 포함 정책이다. Inclusive 정책은 L1에 있는 라인이 L2에도 반드시 존재하게 만들어 추적과 무효화가 쉽지만, 실효 용량 일부를 중복에 사용한다. Exclusive 정책은 L1과 L2가 서로 다른 라인을 들고 있어 총 유효 용량은 커지지만, 승격·축출 시 데이터 이동이 복잡해진다. 최근에는 둘의 절충인 Non-Inclusive/Non-Exclusive 정책도 널리 쓰인다.
- 📢 섹션 요약 비유: L2는 작은 접수창구가 아니라 뒤편 분류창고다. 접수창구(L1)가 놓친 서류를 창고에서 빨리 꺼내 오기도 하고, 새로 들어온 서류를 어디에 둘지 규칙까지 관리해야 한다.
Ⅲ. 비교 및 연결
L2를 제대로 이해하려면 L1, L3와의 역할 경계를 분명히 봐야 한다. L1은 "지금 당장"을 위한 캐시이고, L3는 여러 코어가 함께 쓰는 "마지막 큰 완충지대"다. 반면 L2는 한 코어의 지역성을 충분히 흡수하면서도, L1처럼 극단적 저지연 설계까지는 요구받지 않는 중간 지점이다.
| 비교 항목 | L1 캐시 | L2 캐시 | L3 캐시 |
|---|---|---|---|
| 위치 | 코어에 가장 밀착 | 코어 근처 중간 계층 | 칩 전역의 마지막 레벨 |
| 공유 방식 | 코어 전용 | 대개 코어 전용 | 대개 여러 코어 공유 |
| 설계 초점 | 지연시간 최소화 | 용량과 지연의 균형 | 총 적중률과 코어 간 완충 |
| 대표 병목 | 너무 작아서 잦은 미스 | 포함 정책·전력·면적 | 공유 경쟁·일관성 트래픽 |
또한 L2는 프리페처 (Prefetcher), 캐시 일관성 (Cache Coherence), 교체 정책과 강하게 연결된다. 프리페처가 미래 접근을 잘 예측하면 L2는 L1의 백업 저장소를 넘어 "미리 준비된 대기열"이 되고, 반대로 잘못 예측하면 유용한 라인을 밀어내 오염을 만든다. 멀티코어 환경에서는 L2가 각 코어의 개인 작업 집합을 담는 대신, 코어 간 데이터 공유는 주로 L3와 MESI (Modified, Exclusive, Shared, Invalid) 같은 일관성 프로토콜이 처리한다.
결국 L2는 속도만 보면 L1보다 뒤처지고, 용량만 보면 L3보다 작다. 그런데 바로 그 애매한 위치 때문에 오히려 가장 중요한 균형점이 된다. L2가 약하면 L1 미스가 곧바로 큰 지연으로 확대되고, L2가 지나치게 크면 접근 지연과 전력 소모가 다시 문제로 돌아온다.
- 📢 섹션 요약 비유: L1은 책상 위 메모지, L3는 공동 창고, L2는 개인 서랍이다. 메모지만으로는 부족하고 공동 창고만으로는 멀기 때문에, 결국 가장 자주 열게 되는 것은 정리된 개인 서랍이다.
Ⅳ. 실무 적용 및 기술사 판단
실무에서 L2는 문서 속 개념보다 "데이터 배치 전략"으로 체감된다. 예를 들어 행렬 곱셈, 이미지 필터, 데이터베이스 스캔처럼 반복 접근이 많은 코드는 작업 블록을 L2 용량 안에 들어오도록 쪼개면 성능이 크게 좋아진다. 이를 블로킹(Blocking) 또는 타일링(Tiling)이라 하며, 핵심은 한 번 불러온 데이터를 L2 안에서 최대한 여러 번 재사용하는 것이다.
반대로 다음과 같은 패턴은 L2 효과를 약화시킨다.
- 작업 집합이 L2보다 훨씬 큰 무작위 접근: 해시 버킷이나 대형 그래프를 불규칙하게 훑으면 L2가 있어도 DRAM 미스가 잦다.
- 2의 거듭제곱 보폭 접근: 특정 세트에만 주소가 몰려 충돌 미스가 증가할 수 있다.
- 과도한 프리페치 남용: 실제로 쓰지 않을 데이터를 L2에 밀어 넣어 유효 라인을 쫓아낼 수 있다.
기술사 관점에서는 "어떤 워크로드에 어떤 캐시 특성이 유리한가"를 설명할 수 있어야 한다. 지연 민감한 실시간 처리나 게임 로직은 코어별 L2 용량과 접근 지연이 중요하고, 대규모 공유 데이터 분석은 L3와 메모리 대역폭의 영향이 더 커진다. 따라서 CPU를 평가할 때 단순 클럭뿐 아니라 코어당 L2 크기, 포함 정책, 워킹셋 특성을 함께 봐야 한다.
체크리스트
-
내 핫 데이터가 코어별 L2 범위 안에서 반복 재사용되는가?
-
접근 패턴이 연속적이어서 프리페처와 L2가 협력할 수 있는가?
-
병목이 L2 미스인지, 그 아래 DRAM 지연인지 프로파일링으로 확인했는가?
-
📢 섹션 요약 비유: L2 최적화는 큰 냄비를 사는 일이 아니라, 냄비 크기에 맞춰 재료를 나눠 끓이는 일이다. 냄비보다 훨씬 많은 재료를 한 번에 넣으면 아무리 좋은 냄비라도 넘쳐 버린다.
Ⅴ. 기대효과 및 결론
좋은 L2 설계는 코어가 체감하는 메모리 세계를 훨씬 좁고 빠르게 만든다. L1만으로는 놓칠 데이터를 다시 붙잡아 주기 때문에 처리량이 안정되고, 파이프라인 정지와 메모리 대기 전력이 함께 줄어든다. 특히 코어별 지역성이 강한 워크로드에서는 L2의 품질이 실제 성능 곡선을 크게 바꾼다.
물론 L2가 만능은 아니다. 용량을 키우면 면적과 소비전력이 늘고, 접근 지연도 함께 커진다. 또한 데이터 공유가 많은 워크로드에서는 개인 L2보다 공유 L3, 인터커넥트, 메모리 대역폭이 더 큰 병목이 될 수 있다. 그래서 최근 아키텍처는 코어당 L2를 늘리되, 프리페치와 교체 정책을 지능화하고, 하위 계층과의 협력을 통해 실효 용량을 높이는 방향으로 진화한다.
결론적으로 L2 캐시는 "L1보다 느린 캐시"가 아니라, 메모리 계층 전체의 비용 구조를 바꾸는 완충 장치로 기억해야 한다. L2의 목적은 최고 속도를 과시하는 것이 아니라, 비싼 실패를 싸게 만드는 것이다.
- 📢 섹션 요약 비유: L2는 경기장의 후보 선수 벤치와 같다. 주전(L1)이 잠깐 비어도 바로 투입해 흐름을 이어 주지만, 벤치 운영이 엉망이면 결국 경기는 멈칫하고 분위기가 무너진다.
📌 관련 개념 맵
| 개념 | 연결 포인트 |
|---|---|
| L1 캐시 (Level 1 Cache) | L2가 직접 백업하는 1차 캐시로, 낮은 지연시간 대신 매우 작은 용량을 가진다. |
| L3 캐시 (Level 3 Cache) | L2 아래에서 여러 코어의 미스를 추가로 흡수하는 마지막 레벨 캐시다. |
| 지역성 (Locality) | 시간적·공간적 지역성이 높을수록 L2의 재사용 효과가 커진다. |
| 프리페치 (Prefetch) | 미래 데이터를 미리 L2에 올려 적중률을 높일 수 있지만, 오염도 유발할 수 있다. |
| 캐시 일관성 (Cache Coherence) | 멀티코어에서 각 코어의 L2와 하위 공유 캐시 간 데이터 정합성을 유지하게 한다. |
📈 관련 키워드 및 발전 흐름도
레지스터 (Register)
│
▼
L1 캐시 (Level 1 Cache)
│ L1 미스 완충
▼
L2 캐시 (Level 2 Cache)
│ 코어별 작업 집합 흡수
▼
L3 캐시 (Level 3 Cache) / LLC (Last Level Cache)
│ 멀티코어 공유 완충
▼
프리페치 · 교체 정책 · 캐시 일관성 최적화
│
▼
메모리 계층 전체의 AMAT 최적화
이 흐름은 "초고속 소용량 → 중간 완충 → 대용량 공유 → 지능형 최적화"로 캐시 설계의 초점이 넓어지는 과정을 보여 준다.
👶 어린이를 위한 3줄 비유 설명
- L1은 손에 쥔 연필꽂이고, L2는 책상 서랍이에요.
- 연필꽂이에 없는 물건을 서랍에서 바로 찾으면, 교실 밖 창고까지 뛰어가지 않아도 돼요.
- 그래서 L2는 조금 더 멀어도, 공부가 끊기지 않게 도와주는 든든한 중간 보관함이에요.