핵심 인사이트 (3줄 요약)

  1. 본질: 디렉터리 캐시(Directory Cache)는 대규모 멀티프로세서 시스템에서 각 메모리 블록이 어느 코어의 캐시에 복사되어 있는지를 추적하는 디렉터리 정보(Directory Entry)를 빠르게 조회하기 위한 전용 하드웨어 버퍼이다.
  2. 가치: 전체 메모리에 대응하는 거대한 디렉터리 정보를 느린 메인 메모리에 두는 대신, 자주 참조되는 디렉터리 엔트리를 CPU 내부나 상호연결망 근처의 캐시에 보관하여 캐시 일관성 유지 시 발생하는 지연 시간을 획기적으로 단축한다.
  3. 판단 포인트: 코어 수가 수천 개로 확장되는 엑사스케일(Exascale) 시스템에서는 디렉터리 오버헤드와 정확도 사이의 균형이 중요하며, 희소 디렉터리(Sparse Directory)나 계층적 디렉터리 캐시 설계가 핵심 기술로 다뤄진다.

Ⅰ. 개요 및 필요성

1.1 스누핑의 한계와 디렉터리의 등장

앞서 살펴본 스누핑(Snooping) 방식은 모든 코어에게 메시지를 방송해야 하므로 코어 수가 많아지면 버스 대역폭이 바닥나는 병목 현상을 겪습니다. 이를 해결하기 위해 등장한 것이 디렉터리 기반(Directory-based) 프로토콜입니다. 방송 대신, 특정 메모리 주소를 누가 가지고 있는지 적어둔 '명부(Directory)'를 보고 필요한 코어에게만 쪽지(Point-to-Point Message)를 보내는 방식입니다.

1.2 디렉터리 정보의 위치 문제

이 명부(디렉터리 정보)는 원칙적으로 메인 메모리에 저장됩니다. 하지만 일관성을 체크할 때마다 느린 메인 메모리를 읽어야 한다면, 캐시 일관성 유지 비용이 너무 커져 시스템 전체 성능이 저하됩니다.

1.3 디렉터리 캐시의 사명

**디렉터리 캐시(Directory Cache)**는 이 명부의 일부, 즉 현재 활발하게 공유되고 있는 메모리 블록들에 대한 위치 정보를 CPU 코어 근처나 메모리 컨트롤러 내부에 미리 담아두는 장치입니다. 이를 통해 일관성 프로토콜의 '조회 지연 시간'을 수백 사이클에서 수 사이클 수준으로 줄여주는 역할을 수행합니다.

  • 📢 섹션 요약 비유: 디렉터리 캐시는 거대한 도서관의 '최근 대출 도서 목록'과 같습니다. 모든 책의 위치는 메인 서버(메모리 디렉터리)에 있지만, 자주 찾는 책들의 위치는 사서의 책상 위 메모지(디렉터리 캐시)에 적어두어 즉시 안내해주는 것과 같습니다.

Ⅱ. 아키텍처 및 핵심 원리

2.1 디렉터리 기반 시스템의 기본 구조

디렉터리는 메모리의 각 블록(캐시 라인 단위)마다 어떤 코어가 해당 데이터를 가지고 있는지(공유자 목록)와 상태 정보를 기록합니다.

┌──────────────────────────────────────────────────────────────────────────────┐
│                    디렉터리 캐시를 포함한 일관성 유지 아키텍처                      │
├──────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│    [ Core 0 ]      [ Core 1 ]      [ Core 2 ]      [ Core N ]                │
│         │               │               │               │                    │
│    ┌────┴────┐     ┌────┴────┐     ┌────┴────┐     ┌────┴────┐               │
│    │ L1/L2   │     │ L1/L2   │     │ L1/L2   │     │ L1/L2   │               │
│    └────┬────┘     └────┬────┘     └────┬────┘     └────┬────┘               │
│         │               │               │               │                    │
│   ──────┴───────────────┴───────────────┴───────────────┴────── [ Interconnect]│
│                                                                      │       │
│         ┌─────────────────────────────────────────────────────┐      │       │
│         │  디렉터리 제어기 (Directory Controller)              │◀─────┘       │
│         ├─────────────────────────────────────────────────────┤              │
│         │  [ 디렉터리 캐시 (Directory Cache) ]                │              │
│         │  - Tag: Mem_Addr                                    │              │
│         │  - State: Shared / Modified                         │              │
│         │  - Sharers: [1, 0, 1, ..., 0] (Bit Vector)          │              │
│         └────────────┬────────────────────────────────────────┘              │
│                      │ (Miss 시)                                             │
│                      ▼                                                       │
│         [ Main Memory / Directory in DRAM ]                                  │
│                                                                              │
└──────────────────────────────────────────────────────────────────────────────┘

2.2 디렉터리 엔트리 저장 방식

  1. 풀 비트 벡터 (Full Bit Vector):

    • 코어 $N$개에 대해 $N$비트를 할당하여 각 코어의 소유 여부를 1/0으로 표시합니다.
    • 장점: 정확하고 빠릅니다.
    • 단점: 코어가 많아지면 비트 수가 너무 커져 메모리 낭비가 심해집니다.
  2. 제한된 포인터 (Limited Pointers):

    • 최대 공유자 수를 미리 정해두고(예: 4개) 코어 번호만 기록합니다.
    • 장점: 메모리 효율이 좋습니다.
    • 단점: 공유자 수가 제한을 넘으면 방송(Broadcast)으로 전환해야 합니다.
  3. 연결 리스트 (Linked List):

    • 각 코어의 캐시 태그 옆에 다음 공유자의 주소를 연결합니다. (예: IEEE Scalable Coherent Interface)

2.3 디렉터리 캐시의 최적화: 희소 디렉터리 (Sparse Directory)

실제 시스템에서 동시에 캐싱되는 메모리 블록은 전체 메모리의 극히 일부에 불과합니다. 따라서 디렉터리 캐시는 모든 메모리 블록을 추적하는 대신, **"현재 캐싱된 블록"**만 추적하는 희소 디렉터리(Sparse Directory) 기법을 사용하여 효율을 극대화합니다.

  • 📢 섹션 요약 비유: 풀 비트 벡터는 마을 모든 사람의 명단을 들고 있는 것이고, 희소 디렉터리는 지금 외출 중인 사람(캐싱 중인 데이터)의 명단만 따로 관리하는 지능형 관리 시스템입니다.

Ⅲ. 비교 및 연결

3.1 스누핑 vs 디렉터리 캐시 방식

비교 항목스누핑 (Snooping)디렉터리 캐시 (Directory)
통신 비용방송 트래픽 폭증 ($O(N^2)$)필요한 곳에만 통신 ($O(1)$)
확장성낮음 (최대 16~32 코어)매우 높음 (수천 개 코어)
지연 시간버스 대기 시간에 좌우됨디렉터리 조회 시간에 좌우됨
적용 시스템PC, 노트북, 소규모 서버슈퍼컴퓨터, 하이엔드 서버, HPC
메커니즘"내가 들을게" (Passive)"내가 알려줄게" (Active)

3.2 디렉터리 캐시와 L3 캐시의 협업

현대 인텔 제온(Xeon) 프로세서 등에서는 L3 캐시(Last Level Cache)가 디렉터리 역할을 겸하기도 합니다. 각 L3 캐시 라인에 하위 L1/L2 캐시의 상태 정보를 포함(Inclusion)시켜, 불필요한 스누핑 방송을 걸러주는 Snoop Filter 역할을 수행하게 합니다.

3.3 가상 메모리와의 관계

디렉터리 정보는 보통 물리 주소(Physical Address)를 기준으로 관리됩니다. 따라서 주소 변환(TLB) 단계 이후에 디렉터리 조회가 발생하며, 가상화 환경에서는 하이퍼바이저가 관리하는 중첩 페이지 테이블(EPT)과 연동되어 복잡한 일관성 전이 과정을 거칩니다.

  • 📢 섹션 요약 비유: 스누핑은 모든 교실에 "철수 있니?"라고 방송하는 것이고, 디렉터리 캐시는 교무실에서 철수가 어느 반에 있는지 확인한 뒤 그 반에만 찾아가는 것과 같습니다.

Ⅳ. 실무 적용 및 기술사 판단

4.1 디렉터리 오버헤드와 확장성 설계

기술사 관점에서 디렉터리 시스템을 설계할 때 가장 큰 고민은 '메모리 오버헤드'입니다.

  • 만약 메모리 블록이 64바이트이고 코어가 1,024개라면, 각 블록마다 1,024비트(128바이트)의 디렉터리 정보가 필요합니다. 배보다 배꼽이 더 큰 상황입니다.
  • 해결책: 이를 방지하기 위해 계층적 디렉터리나, 여러 메모리 블록이 하나의 디렉터리 엔트리를 공유하는 조립형 디렉터리(Coarse-grained Directory)를 설계합니다.

4.2 현대 아키텍처 사례 (AMD Infinity Fabric)

  • AMD의 에픽(EPYC) 프로세서는 여러 개의 칩렛(Chiplet)으로 구성됩니다. 칩렛 간의 일관성을 유지하기 위해 거대한 디렉터리 정보를 효율적으로 관리하며, 특히 원격 메모리 접근 지연을 줄이기 위해 디렉터리 캐시의 크기와 계층 구조를 최적화하고 있습니다.

4.3 기술사 관점의 설계 체크리스트

  1. Directory Eviction 정책: 디렉터리 캐시가 가득 찼을 때 어떤 정보를 버릴 것인가? (디렉터리 정보가 버려지면 해당 메모리를 가진 코어의 캐시도 강제로 무효화되어야 함 - Inclusive 정책)
  2. Interconnect Topology: 메시(Mesh) 혹은 토러스(Torus) 네트워크 상에서 디렉터리 제어기를 어디에 배치하여 홉(Hop) 수를 최소화할 것인가?
  3. 병목 지점: 특정 메모리 영역에 접근이 몰릴 때 디렉터리 제어기가 병목이 되지 않도록 분산(Distribution) 설계를 했는가?
  • 📢 섹션 요약 비유: 디렉터리 캐시 설계는 거대 신도시의 우편번호 체계를 잡는 것과 같습니다. 모든 집을 다 적을 수 없으니 동네별로 묶거나, 이사 자주 다니는 사람만 따로 관리하는 지혜가 필요합니다.

Ⅴ. 기대효과 및 결론

5.1 기대효과

  • 무제한의 확장성: 통신 트래픽을 선형적으로 관리함으로써 수만 개의 코어가 협력하는 고성능 컴퓨팅(HPC) 시스템 구축이 가능해집니다.
  • 예측 가능한 성능: 공유 버스 경합에 따른 급격한 성능 저하를 피하고, 지연 시간을 일정 범위 내로 관리할 수 있습니다.
  • 전력 절감: 불필요한 모든 코어의 캐시 태그 검색을 없애 동적 전력 소모를 줄입니다.

5.2 미래 전망: 인메모리 디렉터리 및 지능형 필터링

데이터 중심 컴퓨팅(Data-centric Computing) 시대로 접어들면서, 디렉터리 정보를 메모리 칩 내부에 직접 탑재하는 Processing-In-Memory(PIM) 기술과의 결합이 연구되고 있습니다. 또한, AI 알고리즘을 사용하여 어떤 주소가 조만간 공유될지 예측하고 디렉터리 캐시를 미리 채우는 지능형 관리 기법이 도입될 것입니다.

5.3 결론

디렉터리 캐시는 '분산'과 '중앙 관리'의 묘미를 동시에 살린 아키텍처의 정수입니다. 멀티코어의 수가 폭발적으로 증가하는 현재, 디렉터리 캐시 없는 고성능 시스템은 상상할 수 없습니다. 시스템 아키텍트는 디렉터리 캐시의 크기, 정책, 그리고 네트워크 위상과의 관계를 면밀히 분석하여, 데이터 일관성이라는 족쇄를 성능 향상의 발판으로 바꿔야 합니다.

  • 📢 섹션 요약 비유: 디렉터리 캐시는 대규모 오케스트라의 악보장과 같습니다. 모든 연주자가 모든 악보를 들고 있을 필요 없이, 지금 연주하는 곡의 악보만 빠르게 꺼내어 지휘자의 지시에 따라 완벽한 합주를 만들어내는 핵심 보조 장치입니다.

📌 관련 개념 맵

관련 개념연결 핵심 포인트설명
Cache Coherence상위 목적여러 캐시 간의 데이터 일관성을 유지하기 위한 상위 개념
Broadcast vs Unicast통신 방식스누핑과 디렉터리 방식을 구분 짓는 근본적 차이
Inclusive Cache설계 정책상위 캐시 내용이 하위 캐시 정보를 포함하도록 하여 검색 효율화
Home Agent역할 모델디렉터리 정보를 관리하고 요청을 중재하는 핵심 논리 유닛
Indirection지연 요인디렉터리를 거쳐야 함에 따라 발생하는 추가적인 지연 시간

👶 어린이를 위한 3줄 비유 설명

  1. 디렉터리 캐시는 학교에서 "누가 내 필통 가져갔어?"라고 소리 지르는 대신, 선생님의 출석부를 보고 그 친구에게만 직접 물어보는 것과 같아요.
  2. 출석부(디렉터리)가 너무 두꺼우면 읽기 힘드니까, 자주 자리를 비우는 친구들만 따로 적어둔 메모지가 바로 디렉터리 캐시예요.
  3. 이 메모지가 있으면 방송을 안 해도 되고, 친구를 찾는 시간도 훨씬 빨라져서 수업을 방해하지 않는답니다.