버스 스누핑

Bus snooping

버스 스누핑 또는 버스 스누핑캐시(스누피 캐시)의 일관성 컨트롤러(스누퍼)가 버스 거래를 모니터링하거나 스누핑하는 방식으로 분산 공유 메모리 시스템에서 캐시 정합성을 유지하는 것이 목표다.[citation needed]일관성 컨트롤러(스누퍼)가 포함된 캐시를 스누피 캐시라고 한다.이 계획은 1983년 라비산카르와 굿맨에 의해 도입되었다.[1]

작동 방식

특정 데이터가 여러 캐시에 의해 공유되고 프로세서가 공유 데이터의 값을 수정하는 경우, 변경사항은 데이터 복사본을 가진 다른 모든 캐시에 전파되어야 한다.이러한 변화 전파는 시스템이 캐시 정합성을 침해하는 것을 방지한다.데이터 변경 통보는 버스 스누핑으로 할 수 있다.모든 스누퍼들은 버스에서 모든 거래를 감시한다.공유 캐시 블록을 수정하는 트랜잭션이 버스에 나타나면 모든 스누퍼는 캐시가 공유 블록의 동일한 복사본을 가지고 있는지 여부를 확인한다.캐시에 공유 블록의 복사본이 있는 경우 해당 스누퍼는 캐시 일관성을 보장하기 위한 작업을 수행한다.작업은 캐시 블록의 플러시 또는 무효화일 수 있다.또한 캐시 일관성 프로토콜에 따라 캐시 블록 상태의 변경도 수반한다.[2]

스누핑 프로토콜 유형

쓰기 작업의 로컬 복사본을 관리하는 방법에 따라 두 가지 종류의 스누핑 프로토콜이 있다.

유효하지 않은 쓰기

프로세서가 공유 캐시 블록에 쓸 때, 다른 캐시의 모든 공유 복사본은 버스 스누핑을 통해 무효화된다.이 방법은 기준점의 복사본 하나만 프로세서에 의해 독점적으로 읽고 쓸 수 있도록 한다.다른 캐시의 다른 복사본은 모두 무효화된다.이것은 가장 일반적으로 사용되는 스누핑 프로토콜이다.MSI, MESI, MOSI, MOESI, MESIF 프로토콜이 이 범주에 속한다.

쓰기 업데이트

프로세서가 공유 캐시 블록에 쓸 때, 다른 캐시의 모든 공유 복사본은 버스 스누핑을 통해 업데이트된다.이 방법은 버스 전체에 걸쳐 모든 캐시에 쓰기 데이터를 방송한다.그것은 유효하지 않은 쓰기 프로토콜보다 더 큰 버스 트래픽을 유발한다.그래서 이 방법이 흔치 않은 것이다.용과 반딧불 프로토콜은 이 범주에 속한다.[3]

실행

가능한 구현 중 하나는 다음과 같다.

캐쉬에는 3개의 비트가 추가된다.

  • V – 유효
  • D – 더티 비트, 캐시의 데이터가 메모리와 동일하지 않음을 나타냄
  • S – 공유

각 캐시 라인은 "더러운"(로컬 프로세서에 의해 업데이트됨), "유효한", "유효하지 않은" 또는 "공유된" 상태 중 하나이다.캐시 라인은 값을 포함하며, 읽거나 쓸 수 있다.캐시 라인에 쓰기를 하면 값이 바뀐다.각 값은 메인 메모리(접근 속도가 매우 느림) 또는 하나 이상의 로컬 캐시(빠름)에 있다.블록이 처음 캐시에 로드되면 "유효한" 것으로 표시된다.

로컬 캐시에 대한 읽기 오류 시 읽기 요청은 버스를 통해 브로드캐스트된다.모든 캐시 컨트롤러는 버스를 모니터링한다.주소를 캐시했는데 주소가 "dirty" 상태이면 상태가 "valid"로 변경되고 복사본을 요청 노드로 전송한다."유효한" 상태는 캐시 라인이 최신 상태임을 의미한다.로컬 쓰기 누락(이 값은 작성되었지만 캐시에 없는 쓰기 시도)에서 버스 스누핑은 다른 캐시의 모든 복사본이 "잘못된" 것으로 설정되도록 보장한다."유효하지 않음"은 캐시에 복사본이 존재했지만 더 이상 최신 버전이 아니라는 것을 의미한다.

예를 들어 초기 상태는 다음과 같을 수 있다.

태그 ID V D S -------------------- 1111 00 1 0 0 0000 0 0 0 0 0000 0 0 0 0 0000 10 1 0 1 0000 11 0 0 0

주소 1111 00를 작성한 후 다음과 같이 변경된다.

태그 ID V D S -------------------- 1111 00 1 1 0 0000 0 0 0 0 0000 10 1 0 1 0000 11 0 0 0

캐싱 논리는 버스를 모니터링하고 캐시된 메모리가 요청되었는지 여부를 감지한다.캐시가 더럽고 공유되고 버스에 해당 메모리에 대한 요청이 있는 경우, 더티 스누핑 요소가 요청자에게 데이터를 제공한다.그 시점에서 요청자가 데이터에 대한 책임을 질 수도 있고(데이터를 더럽힌 것으로 표시), 메모리가 사본을 잡을 수도 있고(메모리가 데이터를 "스캐핑"했다고 한다) 두 요소가 공유 상태로 갈 수도 있다.[4]


더티로 표시된 주소를 무효화할 때(즉, 한 캐시는 더티 주소를 가지고 있고 다른 캐시는 쓰기 중임) 캐시는 해당 요청을 무시한다.새 캐시는 더럽고, 유효하며, 배타적인 것으로 표시될 것이고, 이제 그 캐시가 그 주소를 책임질 것이다.[1]

혜택

버스 스누핑을 사용하는 장점은 디렉터리 기반 일관성 메커니즘보다 빠르다는 점이다.공유되는 데이터는 디렉토리 기반 시스템에서 캐시 간의 일관성을 유지하는 공통 디렉토리에 배치된다.모든 트랜잭션은 모든 프로세서에서 볼 수 있는 요청/응답이기 때문에 대역폭이 충분할 경우 버스 스누핑이 일반적으로 더 빠르다.[2]

단점

버스 스누핑의 단점은 제한된 확장성이다.캐시를 자주 스누핑하면 프로세서의 액세스 권한이 있는 레이스가 발생하므로 캐시 액세스 시간과 전력 소비량을 늘릴 수 있다.각 요청은 시스템의 모든 노드에 브로드캐스트되어야 한다.시스템이 커질수록 (물리적 또는 논리적) 버스의 크기와 그것이 제공하는 대역폭이 커져야 한다는 것을 의미한다.[2]버스 스누핑이 잘 확장되지 않기 때문에 대형 캐시 일관성 NUMA(ccNUMA) 시스템은 디렉토리 기반 일관성 프로토콜을 사용하는 경향이 있다.

스눕 필터

버스 거래가 특정 캐시 블록에 발생할 때, 모든 스누퍼는 버스 거래를 기웃거려야 한다.그런 다음 스누퍼는 동일한 캐시 블록을 가지고 있는지 확인하기 위해 해당 캐시 태그를 조회한다.대부분의 경우, 잘 최적화된 병렬 프로그램은 스레드 간에 많은 데이터를 공유하지 않기 때문에 캐시 블록이 없다.따라서 스누퍼에 의한 캐시 태그 조회는 일반적으로 캐시 블록이 없는 캐시에게는 불필요한 작업이다.그러나 태그 조회는 프로세서에 의한 캐시 액세스를 방해하고 추가적인 전력 소비를 유발한다.

불필요한 스누핑을 줄이는 한 가지 방법은 스누프 필터를 사용하는 것이다.스누프 필터는 스누퍼의 캐시 태그를 확인할 필요가 있는지 여부를 결정한다.스눕 필터는 디렉토리 기반 구조로 캐시 블록의 일관성 상태를 추적하기 위해 모든 일관성 있는 트래픽을 모니터링한다.그것은 스눕 필터가 캐시 블록의 사본이 있는 캐시를 알고 있다는 것을 의미한다.따라서 캐시 블록의 복사본이 없는 캐시가 불필요한 스누핑을 하는 것을 방지할 수 있다.스눕 필터의 위치에 따라 세 가지 유형의 필터가 있다.하나는 캐시 측에 위치하여 일관성 트래픽이 공유 버스에 도달하기 전에 필터링을 수행하는 소스 필터다.또 하나는 수신기 캐시에 위치하여 수신기 코어의 불필요한 캐시 태그 조회를 방지하는 대상 필터지만, 이러한 유형의 필터링은 소스의 초기 일관성 메시지를 방지하지 못한다.마지막으로, 네트워크 내 필터는 공유 버스 내부에서 동적으로 일관성 트래픽을 제거한다.[5]스눕 필터는 또한 포괄적이고 배타적인 것으로 분류된다.포괄적 스눕 필터는 캐시에 캐시 블록이 있는지 추적한다.그러나 독점적인 스눕 필터는 캐시에 캐시 블록이 없는지를 모니터링한다.즉, 포괄적 스눕 필터에서 히트는 해당 캐시 블록이 캐시에 의해 고정된다는 것을 의미한다.반면, 전용 스눕 필터에서 히트는 캐시에 요청된 캐시 블록이 없다는 것을 의미한다.[6]

참조

  1. ^ a b Ravishankar, Chinya; Goodman, James (February 28, 1983). Cache Implementation for Multiple Microprocessors (PDF). pp. 346–350.
  2. ^ a b c Yan Solihin (2016). Fundamentals of Parallel Computer Architecture. pp. 239–246.
  3. ^ Hennessy, John L; Patterson, David A. (2011). Computer Architecture: A Quantitative Approach. pp. 355–356. ISBN 978-0123838728.
  4. ^ Siratt, Adrem. "What is Cache Coherence?". EasyTechJunkie. Retrieved 2021-12-01.
  5. ^ Agarwal, N.; Peh, L.; Jha, N. K. (December 2009). "In-Network Coherence Filtering: Snoopy coherence without broadcasts". 2009 42nd Annual IEEE/ACM International Symposium on Microarchitecture (MICRO): 232–243. doi:10.1145/1669112.1669143. hdl:1721.1/58870.
  6. ^ Ulfsnes, Rasmus (June 2013). Design of a Snoop Filter for Snoop-Based Cache Coherency Protocols. Norwegian University of Science and Technology.

외부 링크