Automotive Software

멀티 코어 시스템에서의 캐시 일관성 본문

프로그래밍 (Programming)/컴퓨터 구조

멀티 코어 시스템에서의 캐시 일관성

AutoSW 2023. 10. 31. 23:22

멀티 코어 (프로세서) 시스템의 예

일반적으로 캐시는 상기 그림과 같은 단일 버스 기반의 멀티 코어(프로세서) 시스템에서 명령어 및 데이터 읽기 동작을 위해 메인 메모리 접근에 소비되는 버스의 통신량을 줄이기 위해 사용된다.

하지만, 프로세스 간 공유 메모리를 통해 IPC (Inter Processs Communicartion)을 구현하는 경우, 캐시와 메인 메모리 간 동기화 비용이 전체 시스템 성능을 영향을 끼치게 되며 또한 신뢰성 있는 IPC를 구현하는데 키 요소가 된다.

멀티 프로세스 캐시내 데이터의 일관성을 유지하기 위한 방법인 캐시 일관성 프로토콜 (Cache Coherency Protocol) 은 아래와 같은 방식이 있다.

  • 스누핑 (Snooping) : 별도의 스누핑 제어기가 항상 캐시와 연결된 버스를 감시하여 각 프로세서 캐시 데이터의 최신 여부를 감지하는 방식으로, 쓰기 동작시 하나의 프로세스에만 권한을 주어 데이터 변경을 허용하고, 변경 후 갱신 내용이 각 프로세스의 캐시에도 적용되도록 하여 일관성을 유지시킨다. 캐시 내의 주소 태그에 대한 복사본을 각 스누핑 제어기도 유지하여 프로세스의 캐시 접근을 방해하지 않도록 설계된다.
    • 쓰기 무효화 (write invalidate) : 데이터 변경 허가를 받은 프로세스가 변경 전 다른 프로세스의 관련 캐시 데이터를 우선 무효화한 후 자기 캐시 데이터를 갱신하는 방식(한 시점에 쓰기는 단일 프로세스만 허용, 읽기는 다중 프로세스 허용), MESI (Modified, Exclusive, Shared, Invalid) 프로토콜이 이에 속함
    • 쓰기 갱신 (write update) : 프로세스 별 캐시 데이터를 무효화하지 않고, 변경된 값을 방송(Broadcasting)을 통해 모든 프로세스에게 전달하여 캐시 데이터를 갱신하는 방식으로 즉시 쓰기(Write through)와 비슷
  • 버스 대역폭의 제한으로 인해 많은 프로세서가 쓰기 무효화를 캐시 일관성 프로토콜로 사용
  • 캐시 블록의 크기가 결국 통신량을 결정하므로 캐시 성능에 영향을 미치며, 클 경우 통신량 증가 및 허위 공유(false sharing) 문제를 야기
  • 비분할 동작(Atomic operation, 하나의 데이터 또는 변수에 대한 작업 (읽기 & 쓰기)을 하나의 동작 사이클에서 수행)이 지원되면 이는 버스 중재 프로세스에 의해 정의된 하나의 프로세스만 버스에 진입하여 데이터 변경을 수행하게 되므로 버스 부하를 줄일 수 있음
  • 버스 중재 프로세스가 공유 메모리 내 공유 변숫값을 변경하고 선발된 프로세서에만 권한을 준후 나머지 프로세스들은 자기 캐시 내에 복사된 잠금 변수에 대한 회전 대기(spin waiting)를 수행함으로써 단일 프로세스만 공유 메모리에 접근 가능

멀티 코어가 아닌 단일 코어 시스템에서는 속도가 느린 메인 메모리 접근을 제한함으로써 성능 향상을 꾀하기 위해 write-back방식이 주로 채용하겠지만, 멀티 코어 시스템에서는 캐시 내 데이터 간 일관성의 문제를 초래할 수 있다.

멀티 코어시스템에서 write-back 방식으로 캐시가 설계되어 있다면, 캐시 일관성을 위해 소프트웨어와 하드웨어의 해결책을 생각할 수 있는데, 우선 소프트웨어 방식으로는 직접 적인 캐시 동기화 명령을 주는 방법이 있다.

그 예제로, Tricore 기반의 Aurix에서는 하기 참조에서와 같이 무효화 등의 명령을 통해 캐시 동기화를 구현할 수 있다.

https://www.infineon.com/dgdl/ap3206711_TC1M_Cache_Management.pdf?fileId=db3a304412b407950112b40f7b8013fa

https://www.infineon.com/dgdl/ap3206611_SyncPrimitvies_TC1M.pdf?fileId=db3a304412b407950112b40f7f721400

 

하드웨어 방식으로는 ARM코어의 SCU에서와 같이 하드웨어적인 스누핑 방식을 적용함으로써 소프트웨어의 복잡도를 줄일 수 있다.

https://developer.arm.com/documentation/ddi0407/e/snoop-control-unit

'프로그래밍 (Programming) > 컴퓨터 구조' 카테고리의 다른 글

캐시 기본  (0) 2023.11.03
스누핑 (Snooping)  (0) 2023.08.02