IT

Cache의 기초

zeah 2024. 8. 30. 06:38
반응형

1. 기초 이해

  • 캐시의 개념: 메모리 계층구조에서 캐시의 역할과 기본 개념을 이해합니다.
  • 캐시의 작동 방식: 캐시가 어떻게 데이터를 저장하고 처리하는지에 대한 기본적인 메커니즘을 학습합니다.
  • 캐시 메모리의 종류: L1, L2, L3 캐시의 차이점과 각각의 특성에 대해 알아봅니다.
  • 캐시의 주소 매핑: 직접 매핑, 완전 연관 매핑, 세트 연관 매핑의 차이점과 기본적인 작동 원리를 이해합니다.

캐시의 개념 및 역할

캐시 메모리는 CPU와 메인 메모리 사이에 위치하는 고속의 데이터 스토리지 계층으로, 자주 사용되는 데이터와 명령어를 빠르게 접근할 수 있도록 저장하는 역할을 합니다. 이를 통해 CPU가 매번 느린 메인 메모리에 접근하는 대신 빠른 캐시 메모리에서 필요한 정보를 취득함으로써 시스템의 전반적인 처리 속도를 향상시킬 수 있습니다. 캐시의 주요 목적은 데이터 접근 시간을 줄이고, CPU의 성능을 최대한 활용하는 것입니다.

캐시의 작동 방식

캐시 메모리는 데이터를 '블록' 단위로 저장합니다. CPU가 데이터에 접근하려 할 때, 캐시는 해당 데이터가 자신의 저장 공간에 있는지를 확인하고, 있을 경우 이를 '캐시 히트'라고 하며 데이터를 즉시 CPU에 전달합니다. 반면, 데이터가 캐시에 없을 경우에는 '캐시 미스'가 발생하고, 해당 데이터는 메인 메모리에서 읽혀져 캐시로 로드된 후 CPU에 제공됩니다. 이 과정에서 오래된 캐시 데이터는 새로운 데이터로 교체됩니다.

1. 캐시 히트 (Cache Hit)

  • 정의: CPU가 요청한 데이터가 캐시 메모리에 이미 존재할 때 발생합니다.
  • 과정:
    1. CPU는 데이터를 요청합니다.
    2. 캐시는 요청받은 데이터의 캐시 주소를 계산합니다.
    3. 캐시 주소에 해당하는 데이터가 캐시 메모리에 존재하는지 확인합니다.
    4. 데이터가 존재하면, 캐시는 데이터를 즉시 CPU에 전달합니다.
    5. CPU는 아무런 지연 없이 데이터를 사용하여 계속 작업을 수행합니다.

2. 캐시 미스 (Cache Miss)

  • 정의: CPU가 요청한 데이터가 캐시 메모리에 없을 때 발생합니다.
  • 과정:
    1. CPU는 데이터를 요청합니다.
    2. 캐시는 요청받은 데이터의 캐시 주소를 계산합니다.
    3. 캐시 주소에 해당하는 데이터가 캐시 메모리에 존재하지 않음을 확인합니다.
    4. 데이터가 없으므로, 캐시는 메인 메모리에서 해당 데이터를 찾아 로드합니다.
    5. 로드된 데이터는 캐시 메모리에 저장되며, 이 때 오래된 데이터는 캐시 교체 정책에 따라 제거될 수 있습니다.
    6. 새로운 데이터가 캐시에 저장되고 나면, 이 데이터는 CPU에 전달됩니다.
    7. CPU는 데이터를 받아 처리를 계속 진행합니다.

3. 캐시 미스의 종류

캐시 미스는 데이터나 명령어 요청이 캐시에 존재하지 않아 발생하는데, 이는 세 가지 주요 유형으로 구분됩니다:

  1. 콜드 미스 (Cold Miss) 또는 컴펄서리 미스 (Compulsory Miss):
    • 정의: 처음에 메모리에서 데이터를 읽을 때 발생합니다. 이 미스는 프로그램이 처음 시작할 때 주로 발생하는데, 캐시가 아직 해당 데이터로 채워지지 않았기 때문입니다.
    • 특징: 이 유형의 미스는 초기화 단계에서 피할 수 없는 미스로 간주됩니다.
  2. 커패시티 미스 (Capacity Miss):
    • 정의: 캐시의 저장 용량이 충분하지 않아 발생하는 미스입니다. 프로그램이 요구하는 데이터의 양이 캐시의 전체 용량을 초과할 때 일어납니다.
    • 특징: 이러한 미스는 캐시 크기를 증가시키거나 더 효율적인 데이터 접근 패턴을 사용하여 최소화할 수 있습니다.
  3. 충돌 미스 (Conflict Miss):
    • 정의: 캐시가 세트 연관 매핑이나 직접 매핑을 사용할 때, 다른 데이터가 이미 사용 중인 특정 캐시 라인에 접근하려고 할 때 발생합니다.
    • 특징: 이 미스는 특정 캐시 라인이 과도하게 경쟁을 일으키는 상황에서 발생하며, 캐시의 연관성을 높이거나 캐시 알고리즘을 조정함으로써 최소화할 수 있습니다.

캐시 메모리의 종류

  • L1 캐시 (1차 캐시): CPU 코어에 가장 가까운 캐시로, 매우 빠른 접근 속도를 가집니다. 일반적으로 데이터 캐시와 명령어 캐시로 구분되어 있으며, 용량은 상대적으로 작습니다(수십 킬로바이트).
  • L2 캐시 (2차 캐시): L1 캐시보다는 느리고 크며, CPU 코어별로 독립적으로 있거나 코어 그룹 간에 공유될 수 있습니다. L2 캐시는 일반적으로 수백 킬로바이트에서 몇 메가바이트의 용량을 가집니다.
  • L3 캐시 (3차 캐시): L2 캐시보다 더 크고 느리며, 여러 CPU 코어에 의해 공유되는 경우가 많습니다. L3 캐시는 메가바이트 단위의 용량을 가지며, 시스템의 전체 성능을 향상시키는 데 기여합니다.

캐시의 주소 매핑

  • 직접 매핑 (Direct Mapping): 각 데이터 블록은 캐시의 한정된 위치에만 저장될 수 있습니다. 메모리 주소를 캐시의 크기로 나눈 나머지를 사용하여 해당 캐시 라인을 결정합니다. 직접 매핑은 구현이 간단하고 저렴하지만, 다수의 데이터가 동일한 캐시 라인에 매핑되어 캐시 충돌이 빈번하게 발생할 수 있습니다.
  • 완전 연관 매핑 (Fully Associative Mapping): 데이터를 캐시의 어느 위치에나 저장할 수 있어 유연성이 뛰어납니다. 이 방식은 모든 캐시 라인을 검색하여 데이터의 위치를 찾아내며, 충돌 문제를 최소화하지만, 검색 비용이 높습니다.
  • 세트 연관 매핑 (Set Associative Mapping): 직접 매핑과 완전 연관 매핑의 중간 형태입니다. 캐시를 여러 개의 세트로 분할하고, 각 세트 내에서는 완전 연관 매핑을 사용합니다. 이 방식은 높은 유연성과 효율적인 검색 속도를 제공하면서도 충돌 문제를 상당히 줄일 수 있습니다.

캐시의 구조

캐시 메모리의 구조는 크게 캐시 라인, 태그, 데이터 배열, 그리고 메타데이터를 관리하는 컨트롤 로직으로 구성됩니다:

  • 캐시 라인 (Cache Line): 캐시 메모리 내에서 데이터가 저장되는 기본 단위입니다. 일반적으로 32바이트에서 64바이트 크기를 가집니다.
  • 태그 (Tag): 각 캐시 라인에는 메모리 주소의 일부를 저장하는 태그가 있습니다. 이 태그를 통해 캐시 컨트롤러는 요청된 데이터가 캐시에 있는지 없는지를 판단합니다.
  • 데이터 배열 (Data Array): 실제 데이터를 저장하는 부분입니다. 이 배열은 여러 캐시 라인으로 구성되어 있습니다.
  • 컨트롤 로직: 캐시 동작을 관리하는 로직으로, 캐시 히트와 미스를 판단하고, 데이터를 읽고 쓰며, 교체 알고리즘을 실행합니다.

캐시와 TLB의 동작 순서

시스템에 따라 다르지만, 일반적으로 두 가지 주요 접근 방식이 있습니다:

  1. Virtually Indexed, Virtually Tagged (VIVT) 캐시:
    • 이 경우, 캐시 접근은 가상 주소를 사용하여 진행됩니다. 따라서, CPU가 데이터를 요청하면 가상 주소를 이용해 캐시를 먼저 검사합니다.
    • 데이터가 캐시에 있으면 (캐시 히트), 즉시 데이터를 반환합니다.
    • 데이터가 캐시에 없으면 (캐시 미스), TLB를 조회하여 가상 주소를 물리 주소로 변환한 후, 해당 물리 주소로 메모리 접근을 수행합니다.
    • VIVT 방식은 주소 변환을 위한 오버헤드를 줄일 수 있지만, 가상 주소 공간의 재매핑 시 캐시 일관성 유지가 복잡해질 수 있습니다.
  2. Physically Indexed, Physically Tagged (PIPT) 캐시:
    • 가장 일반적인 형태로, TLB를 통해 가상 주소를 물리 주소로 먼저 변환한 후, 이 물리 주소를 사용하여 캐시를 접근합니다.
    • 이 방식은 캐시 일관성을 관리하기가 더 용이합니다. 물리 주소가 변경되지 않기 때문에 다른 프로세스 또는 스레드 간의 주소 재매핑이 캐시에 영향을 주지 않습니다.
    • TLB 미스가 발생할 경우, 메모리의 페이지 테이블을 참조하여 적절한 물리 주소를 찾아야 하며, 이는 추가적인 지연을 초래할 수 있습니다.

성능 최적화

  • TLB와 캐시 간의 협력을 최적화하기 위해, 모던 프로세서는 TLB 미스가 발생할 가능성을 줄이기 위해 여러 레벨의 TLB를 사용하곤 합니다 (예: L1, L2 TLB).
  • 또한, 일부 시스템은 TLB 캐시를 사용하여 빈번하게 사용되는 페이지 테이블 엔트리의 변환 결과를 저장하여 성능을 향상시킬 수 있습니다.

 

반응형