본문 바로가기
멀티코어 프로그래밍/Basic

캐시 일관성과 거짓 공유

by 기리의 개발로그 2022. 4. 7.

캐시 일관성과 거짓 공유

캐시 일관성

  • 공유 메모리 시스템에서 각 프로세서가 가진 로컬 캐시간의 일관성


캐시 일관성 문제

  • 캐싱은 멀티프로세서 시스템에서 메모리 액세스 시간을 줄이기 위해 반드시 필요함
  • 멀티 프로세서 시스템에서 개별 캐시는 일관성 문제를 발생시킬 수 있음
    • 변수의 복사본이 여러 캐시에 있을 수 있음
  • 프로세서가 읽은 값은 항상 최신의 값이기를 기대함
  • 한 프로세서에 의해 쓰인 값은 다른 프로세서들이 보지 못할 수도 있음
    • 쓰여진 결과가 다른 프로세서에게 보이지 않을 수 있음
  • 단일 프로세서에서는 I/O 를 제외하면 문제가 없음
  • I/O 장치와 프로세서 캐시간의 일관성 문제
    • 주로 DMA에 의해 발생
  • 캐시 일관성 프로토콜은 어떤 주소가 읽혔을 때 그 데이터가 항상 최신의 값임을 보장해 줌
  • 일관성 미스
    • invalidate 기반 캐시 일관성 프로토콜에 의해 캐시라인이 invalidate 되어 발생한 미스
  • 하드웨어 캐시 일관성 프로토콜
    • Snoopy, Directory protocols
    • MSI, MESI, MOESI 등
  • 공유 캐시는 일관성 문제가 발생하지 않음


스누핑(Snooping)

  • 각 프로세서는 메모리로 가는 요청을 염탐(snoop)함

  • 만약 어떤 프로세서가 요청된 캐시 블록의 수정본(dirty copy)을 갖고 있다면, 해당 블록을 요청한 프로세서에게 보내고 메모리 요청은 중단시킴


일관성과 Write-through 캐시

  • 여전히 캐시 일관성 프로토콜은 필요함

    • 구현이 단순
  • 캐시 미스가 발생하여 데이터를 읽을 경우 메모리로 접근

  • 메모리는 항상 최신의 데이터를 가짐


거짓 공유(False Sharing)

  • 멀티코어 환경에서 각각의 코어에서 접근하고 있는 데이터가 같은 cache line에 있어서 실제로 공유하는 데이터가 아님에도 하드웨어(프로세서)에서는 이를 공유하는 것으로 착각하여 cache 일관성 트래픽이 발생하는 것을 의미
  • Invalidation은 거짓 공유 문제를 발생시킬 수 있음
    • 서로 다른 코어가 같은 캐시 블록의 다른 영역에 반복하여 쓸 경우(같은 cache line)
    • 해당 캐시 라인은 두 코어 사이에서 핑퐁(ping - pong)이 발생
    • write back 캐시라고 가정

  • 다른 블록을 갱신했지만 같은 cache line이라는 이유로 내용을 지워야 하므로 성능이 저하된다.
반응형

'멀티코어 프로그래밍 > Basic' 카테고리의 다른 글

스레드  (22) 2022.04.06
프로세스와 스레드  (21) 2022.04.04
스레드 스케줄링  (29) 2022.03.31
Make / Makefile  (41) 2022.03.30
gcc 컴파일러  (13) 2022.03.29

댓글