Cache – Coherent

Cache Coherency

  • Cache Coherency가 이루어지려면 모든 프로세스 코어와 버스 마스터간에 데이터를 access할 때 캐시에 있는 데이터가 다른 코어나 버스에게도 같은 상태를 보여줄 수 있어야 한다.
  • 멀티 코어 또는 멀티 프로세스에서 Cache Coherent 동작을 하지 않을 때
    • 각기 동작하는 스레드가 동시에 같은 share data를 access시 데이터 불일치 가능
    • 각기 동작하는 스레드가 인접 메모리(같은 캐시 라인에 속한)를 access시 데이터 불일치 가능
  • coherency 관리 방법
    • 캐시 disable: 실제로는 성능 이유로 사용하지 않음
    • S/W 관리: 보통 디바이스 드라이버에서 캐시 clean & invalidate를 사용하여 필요시 수행(DMA 등)
    • H/W 관리: 가장 완벽한 솔루션(클러스터등에서는 조금 더 복잡하다)

-> 대부분의 ARM SMP 시스템에서는 코어끼리 통신은 H/W 관리를 사용하며, 외부 장치와의 연동에 사용하는 DMA등은 H/W가 지원하는 Cache Coherent 용 포트를 사용할 수도 있지만 대부분의 경우 S/W 관리 방식을 사용한다.

 

Coherency mechanisms

  • Directory-based
  • Snooping
  • Snarfing

 

Coherency 프로토콜

아키텍처마다 다양한 캐시 coherency 프로토콜들이 사용되고 있다. 다음은 ARM 및 ARM64 시스템에서 대표적으로 사용되고 있는 프로토콜들이다.

  • MSI
  • MESI
  • MOESI

 

다음 그림은 MSI, MESI, MOESI 3 가지 cache coherency 프로토콜을 보여준다.

cache7

 

 

MOESI protocol

캐시라인에 3비트를 사용하여 캐시 상태를 표현한다.

  • Valid bit
    • Valid(1) 상태와 Invalid(0) 상태를 구분한다.
  • Modified bit
    • Modified(1) 상태와 Not-Modified(0) 상태를 구분한다.
  • Shared bit
    • Shared(1) 상태와 Not-Shared(0) 상태를 구분한다.

 

위의 3비트를 조합하여 5가지의 상태를 나타낸다.

  • Modified
    • 유일한 캐시 라인에서 데이터가 변경된 상태이다.
    • Valid(1) + Modified(1) + Not-Shared(0)
  • Owner
    • 복제된 캐시 라인에서 데이터가 변경된 상태이고, 독점으로 수정할 수 있는 권한을 가진 상태이다.
    • 변경이 가해질 때마다 다른 cpu에 있는 캐시들도 전파되어 변경시킨다.
    • Valid(1) + Modifed(1) + Shared(0)
  • Exclusive
    • 유일 또는 복제된 캐시 라인에서 데이터는 변경되지 않은 클린 상태이다.
    • Valid(1) + Not-Modified(0) + Not-Shared(0)
  • Shared
    • 복제된 캐시 라인에서 데이터는 변경되지 않은 클린 상태이다. 수정 권한은 없는 상태이다.
    • Valid(1) + Not-Modified(0) + Shared(1)
  • Invalid
    • Invalid(0) + 나머지 두 비트와 상관없다.

 

다음 그림은 MOESI의 비트 상태를 보여주는 그림이다.

cache10

 

다음 그림은 MOESI 상태 다이어그램을 보여준다.

  • Exclusive 상태를 위주로 상태가 변화되는 모습을 알아본다.
    • P1(CPU 1)이 처음 데이터를 읽어들였을 때 P1 캐시는 Exclusive이다.
    • Exclusive 상태에서 P1이 기록할 때 P1 캐시는 Modified 상태로 변경된다.
    • Exclusive 상태에서 다른 CPU가 읽기 요청할 때 P1 캐시는 Shared 상태로 변경된다.
      • 다른 CPU의 캐시 상태 역시 Shared 상태로 변경된다.
    • Exclusive 상태에서 다른 CPU가 쓰기 요청할 때 P1 캐시는 Invalidate 상태로 변경된다.
      • 다른 CPU의 캐시 상태는 Modified 상태로 변경된다.

 

ARM ACE protocol vs MOESI

MOESI coherency 프로토콜과 ARM ACE protocol에서 표현하는 명칭은 다르지만 동일한 동작을 수행한다.

  • Modified
    • Valid + Unique + Dirty
  • Owner
    • Valid + Shared + Dirty
  • Exclusive
    • Valid + Unique + Clean
  • Shared
    • Valid + Shared + Clean
  • Invalid
    • Invalid + 나머지 상태와 상관없다.

 

다음 ARM Ace protocol을 MOESI coherency 프로토콜과 비교하면 다음과 같다.

  • 윗줄 2개가 왼쪽부터 순서대로 Modified, Owner
  • 아랫줄 2개가 왼쪽부터 순서대로 Exclusive, Shared
  • 가장 우측 Invalid

cache8

 

ARM H/W Cache Coherency 메카니즘

  • SCU(Snoop Control Unit):
    • AMBA AXI 3에서 소개
    • ARM 각 코어의 L1-Data cache 끼리 coherency 가능
    • ARM에서 L1-Instruction cache는 s/w 관리가 필요함 (self-modifing-code)
    • 1개의 클러스터 내 inner shareable 영역만 가능
    • MSI 프로토콜 기반
    • ACP(Accelerator Coherency Port)를 사용한 H/W 주변장치도 cache coherent 동작 사용 가능
    • ACP를 사용하지 않는 디바이스들은 cache coherent를 위해 s/w 관리가 필요함(DMA).
  • AMBA 4 with ACE(AXI Coherency Extensions)
    • AMBA AXI 4에서 소개
    • 2개 이상의 클러스터에서도 cache coherent 가능
    • MOESI 프로토콜 기반
    • 멀티 코어 뿐 아니라 ACE Lite를 사용한 디바이스의 cache coherent 동작 사용 가능
    • SCU 버스를 사용하지 않고 AMBA 4 버스를 확장시켜 5개의 AXI 채널 + 3개의 ACE 전용 채널을 사용
  • AMBA 5 with CHI
    • AMBA AXI 5에서 소개
    • 대역폭이 큰 초고속 버스를 사용
    • 그 외 AMBA 4 with ACE와 유사

 

멀티 클러스터에서의 ACE

cache11

 

참고

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다