KR20100066410A - 시리얼 인터페이스 버스를 통한 캐시 코히런시를 유지하기 위한 시스템 및 방법 - Google Patents

시리얼 인터페이스 버스를 통한 캐시 코히런시를 유지하기 위한 시스템 및 방법 Download PDF

Info

Publication number
KR20100066410A
KR20100066410A KR1020090121685A KR20090121685A KR20100066410A KR 20100066410 A KR20100066410 A KR 20100066410A KR 1020090121685 A KR1020090121685 A KR 1020090121685A KR 20090121685 A KR20090121685 A KR 20090121685A KR 20100066410 A KR20100066410 A KR 20100066410A
Authority
KR
South Korea
Prior art keywords
processor
data
cache
cache line
local memory
Prior art date
Application number
KR1020090121685A
Other languages
English (en)
Other versions
KR101107391B1 (ko
Inventor
브라이언 키스 랑젠도르프
데이비드 비. 글라스코
마이클 브라이언 콕스
조나 엠. 알벤
Original Assignee
엔비디아 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 엔비디아 코포레이션 filed Critical 엔비디아 코포레이션
Publication of KR20100066410A publication Critical patent/KR20100066410A/ko
Application granted granted Critical
Publication of KR101107391B1 publication Critical patent/KR101107391B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Information Transfer Systems (AREA)
  • Multi Processors (AREA)

Abstract

메모리에 저장된 데이터를 이용하여 처리 동작들을 실행하는 방법이 개시된다. 그러한 방법은 로컬 메모리에 저장된 제1 데이터가 데이터 캐시에 저장된 제2 데이터에 대하여 "코히런트(coherent)"인지 여부를 판정하도록 구성된 스누프(snoop) 요청을 생성하는 단계를 포함하고, 스누프 요청은 버스 상의 데이터 캐시를 식별하는 목적지 정보, 및 데이터 캐시에서 제2 데이터가 위치되는 장소를 식별하는 캐시 라인 어드레스를 포함한다. 그러한 방법은 또한 스누프 요청이 버스를 통해 제2 프로세서로 송신되게 하는 단계, 스누프 요청으로부터 캐시 라인 어드레스를 추출하는 단계, 제2 데이터가 코히런트인지 여부를 판정하는 단계, 제1 데이터가 제2 데이터와 코히런트임을 나타내는 완료 정보를 포함하는 완료 메시지를 생성하는 단계, 및 완료 메시지가 버스를 통해 제1 프로세서로 송신되게 하는 단계를 포함한다.
스누프 요청, 로컬 메모리, 데이터 캐시, 캐시 라인 어드레스, 프로세서, 시리얼 인터페이스 버스, 캐시 코히런시

Description

시리얼 인터페이스 버스를 통한 캐시 코히런시를 유지하기 위한 시스템 및 방법{SYSTEM AND METHOD FOR MAINTAINING CACHE COHERENCY ACROSS A SERIAL INTERFACE BUS}
본 발명은 일반적으로 분산형 컴퓨팅의 분야에 관한 것으로, 더욱 구체적으로는, PCI Express(PCIe)와 같은 시리얼 인터페이스 버스를 통해 캐시 코히런시(cache coherency)를 유지하는 시스템 및 방법에 관한 것이다.
종래의 컴퓨팅 시스템에서, 프로세서는 외부 메모리 유닛으로부터 데이터를 판독하고, 나중에 이용하기 위해, 그 데이터의 카피를 로우-레이턴시(low-latency) 캐시 메모리 유닛(캐시)에 저장한다. 그 후, 프로세서는 데이터를 이용하여 동작들을 실행할 때, 외부 메모리 유닛으로부터 데이터를 판독하는 대신, 캐시로부터 데이터의 카피를 판독할 수 있다. 프로세서와 외부 메모리 유닛 사이의 데이터 액세스는, 프로세서와 캐시 사이의 데이터 액세스보다 높은 레이턴시를 갖기 때문에, 캐시로부터 데이터를 검색하는 것은, 프로세서로 하여금 명령어들을 더욱 신속하게 실행할 수 있도록 하며, 궁극적으로는, 프로세서의 성능을 증가시킨다. 통상적으로, 캐시들은 SRAM(static random-access memory) 또는 다른 타입의 로우-레이턴시 메모리 유닛으로서 구현된다.
전형적인 캐시는 데이터가 저장되는 복수의 라인으로 구성된다. 각 라인은 해당 라인에 저장된 캐시된(cached) 데이터의 유효성을 기술하는(describe) 태그로 마킹된다. 예를 들어, 프로세서가 외부 메모리로부터 특정 캐시 라인으로 데이터를 카피할 때, 데이터의 캐시된 카피가 외부 메모리 유닛에 저장된 원래의 데이터와 동일하기 때문에, 그 캐시 라인은 "유효"로서 마킹된다. 대안적으로, 프로세서가 캐시 라인으로부터 데이터를 판독하고, 데이터를 수정하고, 수정된 데이터를 다시 캐시 라인에 기록할 때, 데이터의 캐시된 카피는 외부 메모리 유닛에 저장된 원래의 데이터에 비하여 수정되기 때문에, 캐시 라인은 "수정됨(modified)"으로서 마킹된다. 수정된 데이터는 외부 메모리 유닛에 다시 기록되어, 외부 메모리 유닛에 저장된 데이터가 캐시된 데이터와 동일하도록 할 수 있다. 외부 메모리 유닛에 저장된 데이터가 캐시에 저장된 대응하는 데이터와 동일할 때, 캐시는 "코히런트(coherent)"인 것으로 고려된다. 또한, 데이터가 메인 메모리에 저장된 데이터와 상이한 경우, 캐시된 데이터가 "수정됨"으로 마킹되는 한, 캐시는 코히런트이다. 캐시된 데이터는, 캐시가 메인 메모리에 저장된 것과 상이한 데이터를 저장하지만, 데이터가 수정된 것으로 마킹되지 않거나, 또는 상이한 캐시들이 수정된 것으로 마킹된 동일한 데이터를 갖는 경우 "인코히런트(incoherent)"일 것이다.
캐시들은 PCI Express(PCIe) 버스에 의해 상호접속된 다수의 프로세서를 포함하는 분산형 컴퓨팅 시스템들에서 구현될 수 있다. 각각의 프로세서는 하나 이상의 외부 메모리 유닛으로부터 데이터를 판독하고, 그 데이터의 카피를 프로세서 와 연관된 캐시에 저장할 수 있다. 그 후, 프로세서는 데이터의 캐시된 카피를 이용하여 처리 동작들을 수행할 수 있다. 전술한 바와 같이, 프로세서가 데이터의 캐시된 카피를 수정한다면, 프로세서는 수정된 데이터를 외부 메모리 유닛에 다시 기록하여, 외부 메모리 유닛과의 캐시 코히런시를 유지할 수 있다. 그러나, 종래의 시스템에서의 다수의 CUP는, PCIe를 통해 캐시 코히런시를 유지할 방법이 현재 존재하지 않기 때문에, PCIe를 통해 데이터를 판독 및 캐싱할 수 없다.
또한, 각각의 프로세서는 PCIe 버스를 통해 데이터를 수신할 수 있다. 프로세서가 PCIe 버스를 통해 데이터를 수신할 때, 전형적으로 그 데이터는 "캐싱불가능(uncacheable)"(UC) 또는 "기록-결합(write-combining)"(WC)으로서 마킹된다. 캐싱불가능으로서 마킹된 데이터는, 컴퓨팅 시스템의 상태가 그 데이터에 의존할 수 있기 때문에, 캐시에 저장될 수 없다. 그러한 경우, 이러한 데이터를 참조하는 것은, 컴퓨팅 시스템에 의해 예상되며 정상 동작들을 위해 요구되는 부작용들을 가질 수 있다. 따라서, 데이터에 대한 수정이 컴퓨팅 시스템에 알려지도록, 데이터는 컴퓨팅 시스템에 대해 액세스가능하여야 한다. 따라서, 그 데이터는 컴퓨팅 시스템의 예측할 수 없는 동작의 위험성없이, 중간(intervening) 캐시에 저장될 수 없다. WC로서 마킹된 데이터는, 데이터 프래그먼트들(data fragments)로서 버퍼 내로 수신된다. 그 후, 그러한 프래그먼트들은 결합되어 데이터를 재생성한다. 그 후, 결합된 데이터는 다수의 작은 기록들 대신에 하나의 큰 기록으로서 전달된다. 또한, WC로서 마킹된 데이터는, WC로서 마킹된 위치에 대한 판독들이 UC로서 마킹된 위치들에 대한 판독들과 동일한 방식으로 취급되기 때문에, 캐싱될 수 없 다.
전술한 구성이 갖는 한 가지 문제점은, 프로세서가 UC 또는 WC로서 마킹되는 데이터를 판독할 때, 그 데이터는 프로세서에 의해 캐싱될 수 없다는 것이다. 예를 들어, 프로세서가 UC 또는 WC로서 마킹되었던 동일한 데이터를 이용하여 다수의 처리 동작들을 실행한다면, 프로세서는 외부(비-캐시) 메모리 유닛으로부터 데이터를 다수회 판독할 필요가 있어, 상당한 레이턴시들을 도입하게 될 것이다. 다른 문제점은, 프로세서가 UC로서 마킹되는 데이터를 이용하여 명령어들을 실행할 때, 프로세서는 그러한 명령어들의 실행을 직렬화하게 되어, 프로세서의 효율성을 저하시킨다는 것이다. 중요하게, PCIe 버스를 통해 수신되는 데이터(예를 들면, 멀티프로세서 시스템에서 다른 프로세서의 캐시로부터 카피된 데이터)는 UC 또는 WC로서 마킹된다. 따라서, 이러한 데이터는 캐싱될 수 없어, 추가적인 레이턴시들을 도입하게 된다. 이러한 문제점에 대한 한 가지 해결책은, 프로세서들을 PCIe 버스와 접속하는 것을 회피하는 것이다. 그러나, 이러한 해결책은 컴퓨팅 시스템의 가능한 구성들을 크게 제한한다.
따라서, 본 기술 분야에서는, 향상된 캐싱 기법에 대한 필요성이 남아 있다.
본 발명의 일 실시예는 데이터 캐시에 저장된 데이터를 이용하여 처리 동작을 실행하는 방법을 개시한다. 그러한 방법은 제1 프로세서에 연결된 로컬 메모리 에 저장된 제1 데이터가 제2 프로세서에 연결된 데이터 캐시에 저장된 제2 데이터에 대하여 코히런트인지 여부를 판정하도록 구성된 스누프 요청을 생성 - 스누프 요청은 시리얼 인터페이스 버스 상의 데이터 캐시를 식별하는 목적지 정보, 및 데이터 캐시에서 제2 데이터가 위치되는 장소를 식별하는 캐시 라인 어드레스를 포함함- 하고, 데이터 캐시를 식별하는 목적지 정보에 기초하여 스누프 요청이 시리얼 인터페이스 버스를 통해 제2 프로세서로 송신되도록 하고, 스누프 요청으로부터 캐시 라인 어드레스를 추출하고, 캐시 라인 어드레스에서 데이터 캐시에 저장된 제2 데이터가 로컬 메모리에 저장된 제1 데이터에 대하여 코히런트인지 여부를 판정하고, 시리얼 인터페이스 버스 상의 로컬 메모리를 식별하는 목적지 정보, 및 제1 데이터가 제2 데이터에 대하여 코히런트임을 나타내는 완료 정보를 포함하는 완료(CPL) 메시지를 생성하고, 로컬 메모리를 식별하는 목적지 정보에 기초하여 CPL 메시지가 시리얼 인터페이스 버스를 통해 제1 프로세서로 송신되도록 하고, 로컬 메모리에 저장된 제1 데이터를 이용하여 처리 동작이 제1 프로세서 상에서 실행되도록 하는 것을 포함한다.
유리하게는, PCIe 버스를 통해 송신된 데이터는, 이러한 데이터를 수신하는 프로세서들이 프로그램 명령어들의 실행을 직렬화할 필요성을 제거하는 "캐시가능(cacheable)"으로서 마킹될 수 있다. 따라서, PCIe 버스를 통해 수신된 데이터로 동작들을 수행할 때, 종래 기술의 방안들에 비하여 프로세서 속도가 향상된다.
위에서 인용한 본 발명의 특징들이 상세히 이해될 수 있는 방식으로, 첨부 도면에서 그 일부가 도시되는 실시예들을 참조하여, 위에서 간략히 요약된 본 발명의 보다 특정적인 설명을 행할 수 있다. 첨부된 도면들은 본 발명의 전형적인 실시예만을 예시하는 것이므로, 본 발명의 영역을 제한하는 것으로 고려되지 않으며, 본 발명은 동일하게 유효한 다른 실시예들을 수용할 수 있다.
이하의 설명에서, 본 발명의 보다 철저한 이해를 제공하기 위해 다수의 특정 상세들이 개시된다. 그러나, 하나 이상의 이들 특정 상세들 없이도 본 발명이 실시될 수 있음이 본 기술분야의 통상의 기술자들에게 명백할 것이다. 다른 예에서, 공지되어 있는 특징들은 본 발명을 모호하게 하지 않기 위해 설명되지 않았다.
도 1은 본 발명의 하나 이상의 양태들을 구현하도록 구성된 컴퓨팅 시스템(100)의 블록도이다. 도시된 바와 같이, 컴퓨터 시스템(100)은 PCIe(peripheral component interface express) 버스(102), 로컬 메모리(110), 메모리 컨트롤러(111), 프로세서(112), 시스템 메모리(114), 메모리 컨트롤러(116), 프로세서(118) 및 캐시(120)를 포함한다. PCIe 버스(102)는 트랜잭션층(104), 링크층(106) 및 물리층(108)을 포함한다. PCIe 버스(102)는 프로세서(112) 및 프로세서(118)를 상호접속하고 이들 컴포넌트들 사이에 통신 경로를 제공한다.
프로세서(112) 및 프로세서(118)는 중앙 처리 유닛(CPU), 그래픽 처리 유닛(GPU), 병렬 처리 유닛(PPU), ASIC(application-specific integrated ciucuit), 또는 기타 유형의 처리 유닛일 수 있다. 프로세서(112) 및 프로세서(118)는 동일한 유형의 처리 유닛일 수도 있고 또는 상이한 유형의 처리 유닛일 수도 있다. 예 를 들어, 프로세서(112)는 그래픽 처리 동작들을 실행하는 GPU일 수 있는 반면, 프로세서(118)는 시스템 메모리(114) 내에 저장된 오퍼레이팅 시스템(OS)을 실행하는 CPU일 수 있다.
프로세서(118)는 메모리 컨트롤러(116)에 연결되고 메모리 컨트롤러(116)를 통해 시스템 메모리(114)로부터 데이터를 판독할 수 있다. 일 실시예에서, 프로세서(112) 및/또는 프로세서(118)는 PCIe 버스(102)의 트랜잭션층(104)을 통해 메모리 컨트롤러(116)에 연결된다. 따라서, 프로세서(112) 및/또는 프로세서(118) 모두는 PCIe 버스(102)를 통해 시스템 메모리(114)에 액세스할 수 있다. 프로세서(112) 및 프로세스(118)는 프로그램 명령어들 및/또는 그 프로그램 명령어들을 실행하는데 필요한 데이터를 포함하는 시스템 메모리(114)로부터의 데이터를 판독할 수 있다. 예를 들어, 프로세서(112)가 GPU이면, 프로세서(112)는 특정 그래픽 처리 동작들을 실행하기 위해 프로세서(112) 내에 포함된 그래픽 처리 파이프라인의 컴포넌트들을 구성하는 프로그램 명령어들을 판독할 수 있다. 프로세서(112)는 또한 시스템 메모리(114) 및/또는 로컬 메모리(110)로부터의 그래픽 데이터를 판독하고 그래픽 처리 파이프라인을 이용하여 그래픽 데이터를 처리할 수 있다.
시스템 메모리(114)는 프로세서들(112, 118)의 동작을 조화시키도록 구성된 프로그램 명령어들의 세트로서 구현되는 소프트웨어 드라이버(115)를 포함한다. 예를 들어, 드라이버(115)를 구성하는 프로그램 명령어들은 후술하는 바와 같이 프로세서(118)에 의해 실행되어 드라이버(115)의 기능을 구현할 수도 있다.
프로세서(112)는 메모리 컨트롤러(111)를 통해 로컬 메모리(110)에 연결됨으 로써 로컬 메모리(110)의 동작을 제어한다. 프로세서(112)가 PCIe 버스(102)로부터 데이터를 수신하면, 프로세서(112)는 나중에 사용하기 위해 로컬 메모리(110) 내에 수신된 데이터를 저장할 수 있다. 로컬 메모리(110)는 프로세서(112)에 의해 수행되는 프로그램 명령어들의 실행을 가속시키도록 구성된 로우-레이턴시(low-latency) 메모리 유닛일 수 있다. 로컬 메모리(110)는 또한 프로세서(112)에 의해 실행될 때 컴퓨터 시스템(100)의 다양한 기능들을 구현하는 프로그램 명령어들 및/또는 드라이버들을 저장할 수 있다.
프로세서(118)는 캐시(120)에 직집 연결되어 캐시(120)의 동작을 제어한다. 프로세서(118)가 시스템 메모리(114)로부터 또는 PCIe 버스(102)로부터 데이터를 수신하면, 프로세서(118)는 나중에 사용하기 위해 캐시(120) 내에 수신된 데이터의 임시 카피를 저장할 수 있다. 캐시(120)는 SRAM(static random-access memory) 모듈과 같은 로우-레이턴시 메모리 유닛이다. 캐시(120)에 행해진 판독 요청들은 시스템 메모리(114)에 행해진 판독 요청들보다 레이턴시가 낮다. 따라서, 캐시(120)는 프로세서(118)에 의해 수행되는 프로그램 명령어들의 실행을 가속시킬 수 있는데, 그 이유는 요구된 데이터가 캐시(120)로부터 검색될 수 있을 때 시스템 메모리(114)에 대한 하이-레이턴시 판독들이 회피되기 때문이다.
"스누프(snoop)"(SNP) 트랜잭션은 프로세서(112)로 하여금 캐시(120) 내에 저장된 원래 데이터의 상태를 체크하게 한다. SNP 트랜잭션은 PCIe 버스(102)의 트랜잭션층(104)을 통해 프로세서(112)와 프로세서(118) 사이에 전달되는 상이한 메시지들의 이용을 통해 구현된다. 이들 메시지들은 SNP 요청 및 "완 료(complete)" CPL 메시지를 포함한다. 프로세서(112)는 SNP 트랜잭션을 개시하기 위해 스누핑(snooping) 경로(130)를 따라 SNP 요청을 송신한다. SNP 요청은 캐시된 데이터의 어드레스를 포함한다. 도 2a, 도 2b, 도 3a 및 도 3b에서 더욱 상세하게 후술하는 바와 같이, SNP 요청에 응답하여, 프로세서(118)는 캐시(120) 내에 저장된 데이터를 검사하고 데이터의 상태에 의존하는 특정 태스크들을 수행한다. 프로세서(118)가 이들 태스크들을 완료하면, 프로세서(118)는 SNP 트랜잭션이 완료되었음을 나타내는 CPL 메시지를 송신할 수 있다.
PCIe 버스(102)는 루트 컴플렉스(root complex)(도시하지 않음)를 포함한다. 루트 컴플렉스는 프로세서(112) 및 프로세서(118)와 같은 PCIe 버스(102)에 부착되는 엔드포인트들 사이에서 트랜잭션들을 관리하는 컨트롤러이다. 따라서, 루트 컴플렉스는 SNP 트랜잭션과 관련된 메시지들을 라우팅하도록 구성될 수 있다. 일 실시예에서, 루트 컴플렉스는 PCIe 버스(102) 상에 없고 루트 컴플렉스 위에 있는, 한 엔드포인트로부터 수신된 SNP 요청들을 모든 다른 엔드포인트들 또는 그 엔드포인트의 피어(peer)들로 방송한다(broadcast).
도 2a는 본 발명의 일 실시예에 따른, SNP 트랜잭션과 관련된 패킷들의 제1 실시예를 설명하는 개념도이다. 도시된 바와 같이, 도 2a는 트랜잭션층(104)을 통해 이동하는 CPL 메시지(208A) 및 SNP 요청(202A)을 도시한다. 일 실시예에서, SNP(202A) 및 CPL 메시지(208A)는 본원에서 더욱 상세하게 설명하는 바와 같이, 트랜잭션층을 통해 동시에 이동하지 않는다. SNP 요청(202A)은 캐시 라인 어드레스(204) 및 트랜잭션층 패킷(transaction layer packet; TLP) 헤더(206)를 포함한 다. 캐시 라인 어드레스(204)는 검사될 캐시 라인의 어드레스를 지정한다. TLP 헤더(206)는 메시지를 메시지의 수신지에 대한 SNP 요청(202A)으로서 식별한다.
SNP 요청(202A)은 "비-포스팅된 트랜잭션(non-posted transaction)"으로서 PCIe 표준 프로토콜에 부가될 수 있다. 제1 PCIe 엔드포인트가 비-포스팅된 트랜잭션을 제2 PCIe 엔드포인트에 송신하면, 제1 PCIe 엔드포인트는 응답으로 CPL 메시지를 기대한다. 따라서, 프로세서(112)가 프로세서(118)로 SNP 요청(202A)을 송신하면, 프로세서(112)는 응답으로 프로세서(118)로부터 CPL 메시지(208A)를 기대한다. 따라서, 프로세서(118)는 SNP 트랜잭션이 완료되면 프로세서(112)로 CPL 메시지(208A)를 송신한다.
프로세서(112)는 로컬 메모리(110) 내에 저장된 데이터가 캐시(120) 내에 저장된 데이터와 코히런트인지의 여부를 판정하기 위해 SNP 요청(202A)을 생성하여 프로세서(118)에 송신한다. 프로세서(112)가 SNP 요청(202A)을 생성하면, 프로세서(112)는 데이터가 캐시 라인 어드레스(204)로서 저장되어 있는 캐시(120) 내의 캐시 라인의 어드레스를 포함한다. 메시지는 또한 메시지를 프로세서(118)에 대한 SNP 요청(202A)으로서 식별하는 TLP 헤더(206)를 포함한다. 프로세서(118)가 SNP 요청(202A)을 수신하면, 프로세서(118)는 SNP 요청(202A)을 파싱하고 캐시 라인 어드레스(204)를 추출한다. 도 3a 내지 도 3c에 더 상세하게 후술하는 바와 같이, 프로세서(118)는 그 후 캐시(120) 내의 지정된 캐시 라인과 관련된 태그를 검사하고 동작들의 시퀀스를 수행한다. SNP 요청(202A)이 비-포스팅된 기록이기 때문에, 프로세서(112)는 CPL 메시지(208A)가 SNP 요청(202A)에 응답하여 프로세서(118)에 의해 반환되기를 기대한다. 따라서, 프로세서(118)는 SNP 요청(202A)에 응답하여 CPL 메시지(208A)를 송신하도록 구성된다.
도 2b는 본 발명의 일 실시예에 따른, SNP 트랜잭션과 관련된 패킷들의 제2 실시예를 설명하는 개념도이다. 도시된 바와 같이, 도 2b는 트랜잭션층(104)을 통해 이동하는 CPL 메시지(208B) 및 SNP 요청(202B)을 도시한다. 일 실시예에서, SNP 요청(202B) 및 CPL 메시지(208B)는 트랜잭션층(104)을 통해 동시에 이동하지 않는다. SNP 요청(202B)은 캐시 라인 어드레스(204) 및 VDM(vendor-defined message) 헤더(210)를 포함한다. CPL 메시지(208B)는 VDM 헤더(210) 및 SNP CPL(214)을 포함한다. SNP 요청(202B) 및 CPL 메시지(208B)는 모두 VDM들이고 PCIe 표준 프로토콜에 포함되지 않는다. 프로세서(112)는 SNP 트랜잭션을 개시하기 위해 SNP 요청(202A) 및 SNP 요청(202B)을 유사한 방식으로 이용한다. 프로세서(118)는 SNP 트랜잭션이 완료되었음을 나타내기 위해 CPL 메시지(208A) 및 CPL 메시지(208B)를 유사한 방식으로 이용한다.
프로세서(112)가 SNP 요청(202B)을 프로세서(118)에 송신할 때, 프로세서(118)는 캐시(120)에 저장된 원래 데이터의 상태에 따라 CPL 메시지(208B)를 프로세서(112)로 리턴할 수 있다. 프로세서(112)가 CPL 메시지(208B)를 수신하는 경우, 프로세서(112)는 CPL 메시지(208B)를 파싱하고 SNP CPL(214)을 추출하여 캐시된 데이터가 유효한지의 여부를 판정한다. 그 다음에 프로세서(112)는 데이터가 유효한 것으로 판정되는 경우 로컬 메모리(110)에 저장된 요구된 데이터를 판독할 수 있다.
도 3a, 도 3b, 및 도 3c는 본 발명의 일 실시예에 따른 제1, 제2 및 제3 SNP 트랜잭션들을 각각 도시한다. 제1, 제2 및 제3 SNP 트랜잭션들의 각각은, 프로세서(112)에 의해 실행되는 명령어들(예를 들면, 드라이버)이 프로세서(112)로 하여금 올바른 결과를 얻기 위해 그들 명령어들을 실행시키는 것의 일부로서 SNP 요청을 생성하게 하는 경우 발생할 수 있다. 이에 응답하여, 프로세서(118)는 SNP 요청에 어드레싱된 캐시 라인 내에 저장된 데이터를 검사하고, 프로세서(118)는 CPL 메시지가 리턴되게 한다. 제1 SNP 트랜잭션은, 도 3a에 도시된 바와 같이, 캐시 라인이 "독점(exclusive)" 또는 "공유(shared)"로 마킹된 경우에 발생한다. 제2 SNP 트랜잭션은, 도 3b에 도시된 바와 같이, 캐시 라인이 "수정됨(modified)"으로 마킹된 경우에 발생한다. 제3 SNP 트랜잭션은, 도 3c에 도시된 바와 같이, 캐시 라인이 "무효(invalid)"로 마킹된 경우에 발생한다. 본 명세서에서 이용되는 바와 같이, 캐시 라인은, 캐시 라인이 캐시 내에 임의의 상태로 존재하는 경우에 "유효"로 여겨진다. 통상적으로 구현되는 캐시 상태들은, 캐시 라인이 캐시 내에 존재하지 않음을 의미하는 "무효", 캐시 라인이 캐시 내에 존재하고 메모리 내의 카피와 동일한 값을 가지며 그외의 어느 캐시도 카피를 갖지 않는 것을 의미하는 "독점", 캐시 라인이 캐시 내에 존재하고, 메모리 내의 카피와 동일한 값을 가지며, 다른 캐시 또한 카피를 가질 수 있다는 것을 의미하는 "공유", 및 캐시 라인이 존재하며 메모리의 값과 다른 값을 가진다는 것을 의미하는 "수정됨"이 있다.
각각의 SNP 트랜잭션은 프로세서(112)가 SNP 요청을 프로세서(118)에 송신할 때 개시된다. 일 실시예에서, SNP 요청은 SNP 요청(202A)이다. 다른 실시예에서, SNP 요청은 SNP 요청(202B)이다.
도 3a는 본 발명의 일 실시예에 따라 제1 SNP 트랜잭션을 구현하도록 구성된 컴퓨터 시스템(300A)을 도시한다. 도시된 바와 같이, 컴퓨터 시스템(300A)은 도 1에 도시된 것과 동일한 컴포넌트들을 포함한다. 또한, 캐시(120) 내의 캐시 라인이 "독점" 또는 "공유"로 마킹된 경우에 발생하는 처리 단계들을 나타내는 순차적인 처리 레그(leg)들이 경계설정되어(demarcated) 있다. 제1 SNP 트랜잭션은 프로세서(112)가 SNP 요청을 레그(301)를 따라 프로세서(118)에 송신할 때 개시될 수 있다. 프로세서(118)는 SNP 요청을 수신하고 그 SNP 요청을 파싱한다. 프로세서(118)는 SNP 요청으로부터 캐시 라인 어드레스(204)(여기에는 도시되지 않음)를 추출한다. 프로세서(118)는 레그(303)를 따라 캐시(120) 내의 지정된 캐시 라인을 액세스하고 그 지정된 캐시 라인과 연관된 태그를 검사한다.
데이터가 "독점" 또는 "공유"로 마킹된 경우, 프로세서(118)는 레그(305)를 따라 프로세서(112)로 CPL 메시지의 송신을 행하게 한다. 또한, 캐시 라인의 상태는 "무효"로 변경된다(즉, 캐시 라인이 캐시로부터 제거됨). 캐시 라인의 제거는, 프로세서(112)가 캐시 라인을 수정한 후에 프로세서(118)가 캐시(120)로부터 캐시 라인의 "스테일(stale)" 카피를 사용하지 않는 것을 확실하게 한다. CPL 메시지는 프로세서(112)에게 SNP 트랜잭션이 완료되었으며, 로컬 메모리(110)에 저장된 데이터가 올바른 버전임을 나타낸다. 따라서, 프로세서(112)는 처리 동작들을 수행하기 위해 로컬 메모리(110)에 저장된 데이터를 이용할 수 있다. 프로세서(112)가 CPL 메시지를 수신하는 경우, 프로세서(112)는 로컬 메모리(110)로부터 데이터를 판독한다.
도 3b는 본 발명의 일 실시예에 따라 제2 SNP 트랜잭션을 구현하도록 구성된 컴퓨터 시스템(300B)을 도시한다. 도시된 바와 같이, 컴퓨터 시스템(300B)은 도 1에 도시된 것과 동일한 컴포넌트들을 포함한다. 또한, 캐시(120) 내의 캐시 라인이 "수정됨"으로 마킹된 경우에 발생하는 처리 단계들을 나타내는 순차적인 처리 레그들이 경계설정되어 있다. 제2 SNP 트랜잭션은 도 3a에서 설명한 것과 실질적으로 유사한 일부 단계들을 포함한다. 그러나 제2 SNP 트랜잭션은, 지정된 캐시 라인의 검사에 의해 데이터가 "수정됨"으로 마킹된 것으로 판정된 경우에는 상이한 방식으로 진행한다.
데이터가 "수정됨"으로 마킹되면, 프로세서(118)는 캐시(120)의 지정된 캐시 라인에 저장된 데이터를 레그(309)를 따라 프로세서(112)로 송신한다. 그 다음에 프로세서(112)는 로컬 메모리(110)에 저장된 데이터의 대응하는 카피 위에 덮어 쓰기하는 것에 의해, 수신된 데이터를 로컬 메모리(110)에 기록함으로써, 로컬 메모리(110)를 업데이트하여 데이터의 가장 최신의 버전을 반영한다. 프로세서(118)가 데이터 기록을 종료하면, 프로세서(118)는 프로세서(112)로부터 기록 완료를 수신한다(도시되지 않음). 일 실시예에서, 기록 완료는 데이터가 로컬 메모리(110)에 성공적으로 기록되었음을 나타내는 CPL 메시지이다. 프로세서(118)는 그 다음에 CPL 메시지를 레그(305)를 따라 프로세서(112)로 송신한다. CPL 메시지는 프로세서(112)에게 SNP 트랜잭션이 완료되었으며 로컬 메모리(110)에 저장된 데이터가 올바르다는 것을 나타낸다. 따라서, 프로세서(112)는 처리 동작들을 수행하기 위해 로컬 메모리(110)에 저장된 데이터를 이용할 수 있다. 프로세서(112)가 CPL 메시지를 수신하는 경우, 프로세서(112)는 로컬 메모리(110)로부터 데이터를 판독할 수 있다.
도 3c는 본 발명의 일 실시예에 따라 제3 SNP 트랜잭션을 구현하도록 구성된 컴퓨터 시스템(300C)을 도시한다. 도시된 바와 같이, 컴퓨터 시스템(300C)은 도 1에 도시된 것과 동일한 컴포넌트들을 포함한다. 또한, 캐시(120) 내의 캐시 라인이 "무효"로 마킹된 경우에 발생하는 처리 단계들을 나타내는 순차적인 처리 레그들이 경계설정되어 있다. 제3 SNP 트랜잭션은 도 3a 및 도 3b에 설명한 것과 실질적으로 유사한 일부 단계들을 포함한다. 그러나 제3 SNP 트랜잭션은, 지정된 캐시 라인의 검사에 의해 데이터가 "무효"로 마킹된 것으로 판정된 경우에는 상이한 방식으로 진행한다.
제3 SNP 트랜잭션은 프로세서(112)가 SNP 요청을 레그(301)를 따라 프로세서(118)로 송신하는 경우에 개시될 수 있다. 프로세서(118)는 지정된 캐시 라인을 검사하여 데이터가 무효로 마킹된 것으로 판정한다(도시되지 않음). 그 다음에, 프로세서(118)는 CPL 메시지가 프로세서(112)로 송신되게 하여, 로컬 메모리(110)에 저장된 데이터가 가장 최근에 저장된 및/또는 수정된 버전의 데이터임을 나타낸다.
또한, 프로세서(112)는 로컬 메모리(110)에 저장되는 데이터를 요구하며, 따라서 SNP 요청을 프로세서(118)에 발행하고, 이와 동시에 프로세서(118)는 로컬 메모리(110) 내의 그 동일 데이터를 목표로 하는 판독 요청을 발행한다. 프로세 서(118)가 발행한 판독 요청은, 프로세서(112)가 SNP 요청을 발행한 후이지만 SNP 요청이 프로세서(118)에 도달하기 전에 프로세서(112)에 의해 수신된다. 그러한 경우에, 통상적인 시스템들을 이용하여, 프로세서(112)는 SNP 요청에 응답하여 CPL 메시지가 리턴되는 것을 대기하고, 프로세서(118)는 판독 요청이 완료될 때까지 CPL 메시지를 발행하지 않는다. 이들 통상적인 시스템에서는, 프로세서(112)는 판독 요청을 서비스하기 전에 CPL 메시지를 대기하고, 프로세서(118)는 CPL 메시지를 발행하기 전에 판독 요청 데이터를 대기한다. 이런 문제가 있는 상황은 "데드록(deadlock)"으로 알려져 있다.
표준 PCIe 순서화 규칙들은 판독 요청들이 CPL 메시지들을 전달하게 하기 때문에 통상적인 시스템들을 이용하는 경우 또 다른 문제점 있는 상황이 발생할 수 있다. 프로세서(118)가 판독 요청을 발행하기 전에 CPL 메시지를 발행하면, 판독 요청은 CPL 메시지보다 이전에 프로세서(112)에 도착할 수 있다. 프로세서(118)는, 프로세서(112)가 판독 요청을 위한 데이터를 리턴하는 경우, 캐시(120) 내의 로컬 메모리(110)로부터 데이터의 카피를 다시 가질 것이다. 그 다음에 프로세서(112)는 또 다른 SNP 요청을 발행할 필요가 있을 것이고, 사이클은 일어날 수 있는 한 무한히 그 자체를 반복하게 된다. 이 상황은 "라이브록(livelock)"으로서 알려져 있다.
본 발명의 실시예들은, 프로세서(118)가 캐시(120)에 데이터의 카피를 가지면 판독 요청은 캐시(120)에 의해 서비스 받을 수 있고 판독 요청은 결코 프로세서(112)에 송신되지 않는다는 점을 주목함으로써 일어날 수 있는 데드록 및 라이브 록 문제들을 회피한다. 그 결과, 프로세서(112)가 미해결의 SNP 요청을 갖는 메모리 위치에 대한 판독 요청을 수신하면(즉, SNP 요청에 응답하여 어떠한 CPL 메시지도 수신되지 않으면), 프로세서(112)는 프로세서(118)에서 발행된 트랜잭션의 순서에 상관없이(예를 들면, 판독 요청 다음에 SNP 요청, 또는 SNP 요청 다음에 판독 요청), 프로세서(118)가 데이터의 카피가 캐시(120) 내에서 발견되지 않았음을 나타낸 것처럼 응답한다. 따라서, 프로세서(112)는 로컬 메모리 위치를 안전하게 이용 및/또는 변경할 수 있으며, 그리고 나서 판독 요청을 서비스하기 위해 이 데이터를 반환할 수 있다. 따라서, 프로세서(112)는 "포워드 진행(forward progress)"을 행하였으며, 현재 참조된 데이터에 대한 SNP 요청을 재발행할 필요는 없고(즉, 가능한 라이브록(livelock)을 회피함), 프로세서(112)는 SNP 요청과 연관된 CPL 메시지를 수신하기 전에 판독 요청과 연관된 데이터를 반환할 수 있다(즉, 가능한 데드록(deadlock)을 회피함). SNP 요청에 대한 CPL 메시지는 여전히 프로세서(112)에 의해 반환되나, 일 실시예에서는, 프로세서(118)로부터의 판독 요청의 수신에 기초하여, 로컬 메모리(110)에 저장된 데이터가 올바른 것이라고 프로세서(112)가 이미 판정하였으므로, 프로세서(112)는 CPL 메시지를 무시한다.
도 4는, 본 발명의 일 실시예에 따른, PCIe 버스 상의 SNP 트랜잭션을 구현하는 방법 단계들의 흐름도이다. 본 기술분야의 통상의 기술자는, 방법(400)이 도 1 내지 도 3c의 시스템들과 함께 설명되었으나, 본 방법 단계들을 임의의 순서로 수행하도록 구성된 임의의 시스템이 본 발명의 범주 내에 있다는 것을 이해할 것이다.
도시된 바와 같이, 방법(400)은 단계(402)에서 시작하며, 여기서 프로세서(112)는 SNP 요청을 생성한다. 일 실시예에서, 프로세서(112)에 의해 실행된 드라이버는 프로세서(112)가 데이터를 이용할 것을 지시하고, 이것은 또한 코히런시를 보장하기 위해 프로세서(112)가 SNP 요청을 생성하게 한다. 예를 들어, 프로세서(112)는 처리 동작들을 수행하기 위해 로컬 메모리(110)에 저장된 데이터를 이용하는 것을 시도할 수 있으며, 데이터의 캐시된 카피는 프로세서(118)와 연관된 캐시(120)에 저장된다. 프로세서(112)로 하여금 로컬 메모리(110)와 캐시(120) 간의 코히런시를 유지하게 하는 SNP 트랜잭션을 개시하기 위해 SNP 요청이 발행된다. 프로세서(112)가 SNP 요청을 생성하는 경우, 프로세서(112)는, 도 5에 더 자세하게 후술하는 바와 같이, 요청된 데이터가 저장되는 캐시의 캐시 라인을 나타내는 어드레스를 포함한다. SNP 요청은 각각 도 2a 및 도 2b에 설명된, SNP 요청(202A) 또는 SNP 요청(202B)일 수 있다.
단계(404)에서, 프로세서(112)는 PCIe 버스(102)를 통한 프로세서(118)에 대한 SNP 요청의 송신을 야기한다. SNP 요청은 PCIe 버스(102)의 트랜잭션 층(104)을 통해 이동한다. 단계(406)에서, 프로세서(118)는 SNP 요청을 수신하고 SNP 요청으로부터 캐시 라인 어드레스(204)를 추출한다. 프로세서(118)는 캐시 라인 어드레스(204)에 의해 식별된 캐시 라인을 검사하고 그 캐시 라인과 연관된 태그를 추출한다. 태그는 캐시 라인에 저장된 데이터의 상태를 나타낸다.
단계(408)에서, 프로세서(118)는 캐시 라인이 "독점" 또는 "공유"로 마킹되는지의 여부를 판정한다. 캐시 라인이 "독점" 또는 "공유"로 마킹되면, 캐시(120) 에 저장된 데이터는 로컬 메모리(110)에 저장된 데이터와 동일하므로, 캐시(120)와 로컬 메모리(110) 간의 캐시 코히런시를 구축하기 위해 어떠한 액션도 필요치 않다. 본 방법(400)은 단계(410)으로 진행하며, 프로세서(118)는 캐시 라인을 "무효(invalid)"로서 마킹한다. 따라서, 캐시 라인의 상태는 "무효"로 변경된다(즉, 캐시 라인은 캐시로부터 제거된다). 캐시 라인의 제거는, 프로세서(112)가 캐시 라인을 수정한 후, 프로세서(118)가 캐시(120)로부터 캐시 라인의 스테일 카피(stale copy)를 이용하지 않는 것을 보장한다.
그 다음, 본 방법(400)은 단계(410)로 진행하며, 여기서 프로세서(118)는 CPL 메시지를 생성한다. CPL 메시지는 각각 도 2a 및 도 2b에 설명된 CPL 메시지(202A)일 수 있거나, CPL 메시지(202B)일 수 있다.
단계(414)에서, 프로세서(118)는 로컬 메모리(110)에 저장된 데이터가 캐시(120)에 저장된 원래 데이터와 코히런트이고 및/또는 올바르다는 것을 나타내기 위해 프로세서(112)로의 CPL 메시지의 송신을 야기한다. 단계(416)에서, 프로세서(112)는 로컬 메모리(110)로부터 데이터를 판독하고 본 방법은 종료된다.
다시 단계(408)를 참조하면, 프로세서(118)가 캐시 라인이 "독점" 또는 "공유"로 마킹되지 않았다고 판정하면, 본 방법은 단계(418)로 진행하며, 여기서 프로세서(118)는 캐시 라인이 "수정됨"으로 마킹되는지의 여부를 판정한다. 캐시 라인은, 로컬 메모리(110)에 저장된 데이터에 관한 캐시(120)에 저장된 데이터의 값을 변경하는 처리 동작들을 프로세서(118)가 수행한 경우 수정됨으로 마킹될 수 있다. 단계(418)에서, 프로세서(118)가 캐시 라인이 "수정됨"으로 마킹된 것으로 판정하 면, 본 방법은 단계(420)로 진행하며, 여기서 프로세서(118)는 수정된 데이터를 로컬 메모리(110)에 기록한다. 그리고 나서 본 방법은, 본 명세서에서 이미 설명한 단계(410)로 진행한다.
단계(418)에서, 캐시 라인이 "수정됨"으로 마킹되지 않으면, 본 방법(400)은, 본 명세서에서 이미 설명한 단계(412)로 진행한다. 캐시 라인이 "독점" 또는 "공유"가 아니고(단계(408)), 캐시 라인이 "수정됨"이 아니면, 캐시 라인은 "무효"이며 캐시(120)와 로컬 메모리(110) 간의 캐시 코히런시를 구축하기 위해 어떤 액션도 필요치 않으므로 프로세서(118)는 CPL 메시지를 생성한다.
또한, 도 3c에 설명된 바와 같이, 프로세서(118)는 SNP 요청과 연관된 메모리 위치에 대응하는 로컬 메모리(110)의 메모리 위치에 대한 판독 요청을 발행할 수 있다. 그러한 시나리오에서, 프로세서(112)는 판독 요청을 수신하고, SNP 요청에 응답하여 프로세서(118)로부터 수신된 CPL 메시지를 무시하며, 로컬 메모리에 저장된 데이터를 이용하여 (가능하게는 데이터를 수정하는) 동작들을 수행한 후, 프로세서(118)에 대해 판독 요청을 서비스한다. 따라서, 프로세서(112)는 "포워드 진행"을 수행하였으며, 현재의 참조에 대한 SNP 요청을 재발행할 필요는 없고(즉, 가능한 라이브록을 회피함), 프로세서(112)는 가능하면 SNP 요청에 대한 CPL 메시지를 수신하기 전에, 판독 요청에 대한 데이터를 반환할 수 있다(즉, 가능한 데드록을 회피함). SNP 요청에 대한 CPL 메시지는 여전히 프로세서(112)에 의해 반환되지만, 일 실시예에서는, 프로세서(112)가, 프로세서(118)로부터의 판독 요청의 수신에 기초하여 로컬 메모리(110)에 저장된 데이터가 올바르다고 이미 판정하였으 므로 프로세서(112)는 CPL 메시지를 무시한다.
도 5는 본 발명의 일 실시예에 따른, PCIe 버스를 통한 송신을 위한 SNP 요청을 생성하는 방법 단계들의 흐름도이다. 본 기술분야의 통상의 기술자는, 본 방법(500)이 도 1 내지 도 4의 시스템들 및 방법들과 함께 설명되었으나, 본 방법 단계들을 임의의 순서로 수행하도록 구성된 임의의 시스템은 본 발명의 범주 내에 있다는 것을 이해할 것이다.
도시된 바와 같이, 본 방법(500)은 단계(502)에서 시작하며, 여기서 프로세서(112)는 SNP 요청 헤더를 생성한다. 단계(504)에서, 프로세서(112)는 SNP 요청 헤더를 블랭크 패킷에 부가한다. 일 실시예에서, SNP 요청은 SNP 요청(202A)이고, SNP 요청 헤더는 TLP 헤더(206)이다. TLP 헤더(206)는 메시지를 프로세서(118)에 대한 SNP 요청(202A)으로서 식별한다. 대안의 실시예에서, SNP 요청은 SNP 요청(202B)이며, SNP 요청 헤더는 VDM 헤더(210)이다. VDM 헤더(210)는 메시지를 프로세서(118)에 대한 SNP 요청(202B)으로서 식별한다.
단계(506)에서, 프로세서(112)는 목적지 정보를 패킷에 부가한다. 목적지 정보는 프로세서(118)를 SNP 요청의 의도된 수신지로서 식별한다. PCIe 버스는 목적지 정보에 따라 프로세서(118)로 SNP 요청을 라우팅하는 로직을 포함한다. 단계(508)에서, 프로세서(112)는 SNP 캐시(120)에 "스누핑될" 캐시(120)의 캐시 라인 어드레스를 부가한다. 캐시 라인 어드레스는 캐시(120) 내의 원래 데이터의 위치를 나타낸다.
도 6은 본 발명의 일 실시예에 따른, PCIe 버스를 통한 송신을 위한 CPL 메 시지를 생성하는 방법 단계들의 흐름도이다. 본 기술분야의 통상의 기술자는, 본 방법(600)이 도 1 내지 도 4의 시스템들 및 방법들과 함께 설명되었으나, 본 방법 단계들을 임의의 순서로 수행하도록 구성된 임의의 시스템은 본 발명의 범주 내에 있다는 것을 이해할 것이다.
도시된 바와 같이, 본 방법(600)은 단계(602)에서 시작하며, 프로세서(118)는 CPL 메시지 헤더를 생성한다. 프로세서(118)는 SNP 요청을 수신하였을 수 있고, 로컬 메모리(110) 또는 캐시(120) 중 어느 하나를 업데이트하기 위해 도 3a 내지 도 3c에서 전술한 액션들을 수행하였을 수 있다. 이들 액션들이 완료되고, 로컬 메모리(110)가 가장 최근 버전의 데이터를 저장하면, 프로세서(118)는, 프로세서(112)에 의해 수신될 때 SNP 트랜잭션을 완료하는 CPL 메시지를 생성할 필요가 있을 수 있다.
단계(604)에서, 프로세서(118)는 블랭크 패킷에 CPL 메시지 헤더를 부가한다. 일 실시예에서, CPL 메시지는 CPL 메시지(208A)이다. 대안적인 실시예에서, CPL 메시지는 CPL 메시지(208B)이고, CPL 메시지 헤더는 VDM 헤더(212)이다. VDM 헤더(212)는 프로세서(112)에 대한 CPL 메시지(208B)를 식별한다.
단계(606)에서, 프로세서(118)는 CPL 메시지에 완료 상태를 부가한다. 일 실시예에서, 완료 상태는 판독 완료 통지이다. 대안적인 실시예에서, 완료 상태는 어떠한 액션도 취해지지 않았음을 나타낸다. 제3 실시예에서, 완료 상태는 블랭크(blank)이다. 단계(608)에서, 프로세서(118)는 패킷에 목적지 정보를 부가한다. 목적지 정보는 프로세서(112)를 CPL 메시지의 의도된 수신지로서 식별한다. PCIe 버스는 목적지 정보에 따라 프로세서(112)에 CPL 메시지를 라우팅하는 로직을 포함한다. 프로세서(112)가 CPL 메시지를 수신하면, SNP 트랜잭션은 완료되고, 로컬 메모리(110)는 캐시(120)와 코히런트이다.
요약하면, 본 발명의 실시예들은 PCIe 버스 상의 "스누프"(SNP) 트랜잭션을 수행하는 기법을 제공한다. SNP 트랜잭션은 SNP 요청 및 "완료" CPL 메시지를 이용하여 구현된다. 제1 프로세서가 PCIe 버스를 통해 수신된 데이터를 로컬 메모리 유닛에 저장할 때, 제1 프로세서는 SNP 요청을 이용하여 그 데이터의 소스를 체크하여 데이터가 코히런트인지를 판정하고, 코히런트가 아니면 업데이트된 버전을 취득한다. 원래 데이터의 소스가 제2 프로세서와 연관된 캐시일 때, 제1 프로세서는 그 캐시 내에 캐시 라인 어드레스를 포함하는 SNP 요청을 생성한다. 캐시 라인 어드레스는 원래 데이터가 저장되어 있는 캐시의 캐시 라인을 나타낸다. 제1 프로세서는 SNP 요청의 제2 프로세서로의 송신을 야기한다. 제2 프로세서가 SNP 요청을 수신할 때, 제2 프로세서는 캐시 라인 어드레스를 파싱하고 그 캐시 라인과 연관된 태그를 검색한다.
그 태그가 캐시 라인이 "독점" 또는 "공유"인지를 나타낼 때, 제2 프로세서는 PCIe 버스를 통한 제1 프로세서로의 "완료"(CPL) 메시지의 송신을 야기한다. CPL 메시지는, 로컬 메모리 유닛에 저장된 데이터가 유효하며 처리 동작들을 수행할 때 이용될 수 있다는 것을 제1 프로세서에 알린다. 제1 프로세서는 그 다음에 로컬 메모리 유닛으로부터 데이터를 검색할 수 있다.
태그가 캐시 라인이 "수정"된 것을 나타낼 때, 제2 프로세서는 캐시로부터 수정된 데이터를 검색하고 그 데이터를 로컬 메모리 유닛에 기록한다. 제2 프로세서는 CPL 메시지를 제1 프로세서에 송신하고, 제1 프로세서는 그 다음에 제1 캐시로부터 요구된 데이터를 검색할 수 있다.
태그가 캐시 라인이 "무효"인 것을 나타낼 때, 제2 프로세서는 CPL 메시지를 발행함으로써, 제1 프로세서가 로컬 메모리 유닛으로부터 요구된 데이터를 안전하게 검색할 수 있다는 것을 제1 프로세서에 알린다.
또한 본 발명의 실시예들은, 제1 프로세서가 동일한 메모리 위치에 액세스하기 위해 제2 프로세서로부터 중간(intervening) 판독 요청이 수신될 때 SNP 요청에 응답하여 수신된 CPL 메시지를 무시함으로써 가능한 데드록 및 라이브록 상황들을 회피하는 기법을 제공한다.
또한, SNP 요청은 트랜잭션층 패킷(transaction layer packet; TLP) 또는 벤더 정의 메시지(vendor-defined message; VDM)로서 PCIe 표준 프로토콜 내로 정의될 수 있다. SNP 요청이 TLP로서 정의될 때, SNP 요청은 TLP 헤더 및 검사될 캐시 라인의 어드레스를 포함한다. 다음으로, SNP 트랜잭션이 완료됨을 나타내는 CPL 메시지가 송신된다. SNP 요청이 VDM으로서 정의될 때, SNP 요청은 VDM 헤더 및 검사될 캐시 라인의 어드레스를 포함한다. 데이터 페이로드 내에 "완료" 통지를 포함하는 제2 VDM이 또한 정의된다. 제2 VDM은 SNP 트랜잭션이 완료되면 송신된다.
유리하게는, 해당 데이터가 PCIe 버스를 통해 수신되어 제2 프로세서에 의해 캐시될 때 제1 프로세서가 로컬 메모리 유닛에 데이터를 저장할 수 있다. 제1 프로세서는 SNP 요청을 이용하여 데이터가 제2 프로세서에 의해 캐시된 데이터와 코 히런트임을 보증한다. 다른 이점은, PCIe 버스를 통해 송신된 데이터가 "캐시 가능"으로 마킹될 수 있어, 프로그램 명령어들의 실행을 직렬화하기 위해 이 데이터를 수신하는 프로세서들에 대한 필요성을 없앨 수 있다는 점이다. 따라서, PCIe 버스를 통해 수신된 데이터로 동작들을 수행할 때 프로세서 속도는 상당히 향상될 수 있다.
본 발명의 실시예들에 관해 전술하지만, 본 발명의 다른 및 추가 실시예들이 본 발명의 기본적인 범위로부터 벗어나지 않고 고안될 수 있다. 예를 들어, 본 발명의 양태들은 하드웨어 또는 소프트웨어로, 또는 하드웨어와 소프트웨어의 조합으로 구현될 수 있다. 본 발명의 일 실시예는 컴퓨터 시스템과 함께 사용하기 위한 프로그램 제품으로서 구현될 수 있다. 프로그램 제품의 프로그램(들)은 실시예들의 기능들(본 명세서에 설명된 방법들을 포함함)을 정의하며, 각종 컴퓨터 판독 가능한 기록 매체에 포함될 수 있다. 예시적인 컴퓨터 판독 가능한 매체는 (ⅰ) 정보가 영구적으로 저장되는 기록 불가능한 저장 매체(예를 들어, CD-ROM 드라이브에 의해 판독 가능한 CD-ROM 디스크, 플래시 메모리, ROM 칩 또는 임의 유형의 고체 상태 불휘발성 반도체 메모리와 같은 컴퓨터 내의 판독 전용 메모리 디바이스들), 및 (ⅱ) 변경가능한 정보가 저장되는 기록 가능한 저장 매체(예를 들어, 디스켓 드라이브 내의 플로피 디스크 또는 하드 디스크 드라이브 또는 임의 유형의 고체 상태 랜덤 액세스 반도체 메모리)를 포함하며, 이것으로 한정되지 않는다. 본 발명의 기능들을 처리하는 컴퓨터 판독 가능한 명령어들을 실행할 때, 이러한 컴퓨터 판독 가능한 저장 매체는 본 발명의 실시예들이다. 따라서, 본 발명의 범위는 다 음의 특허청구범위에 의해 결정된다.
도 1은 본 발명의 하나 이상의 양태를 구현하도록 구성된 컴퓨팅 시스템의 블록도.
도 2a 및 도 2b는 "스누프"(SNP) 트랜잭션과 관련된 패킷들의 제1 및 제2 실시예들을 도시하는 개념도.
도 3a 내지 도 3c는 본 발명의 일 실시예에 따른 제1, 제2 및 제3 SNP 트랜잭션을 각각 도시하는 도면.
도 4는 본 발명의 일 실시예에 따른, PCIe 버스를 통한 SNP 트랜잭션을 구현하는 방법 단계들의 흐름도.
도 5는 본 발명의 일 실시예에 따른, PCIe 버스를 통한 송신을 위한 SNP 요청을 생성하는 방법 단계들의 흐름도.
도 6은 본 발명의 일 실시예에 따른, PCIe 버스를 통한 송신을 위한 CPL 메시지를 생성하는 방법 단계들의 흐름도.
<도면의 주요 부분에 대한 부호의 설명>
102: PCI 익스프레스 버스
104: 트랜잭션층
106: 링크층
108: 물리층
110: 로컬 메모리
111, 116: 메모리 컨트롤러
112, 118: 프로세서
114: 시스템 메모리
115: 드라이버
120: 캐시
204: 캐시 라인 어드레스
206: TLP 헤더
210, 212: VDM 헤더

Claims (10)

  1. 메모리에 저장된 데이터가 유효한지를 판정하기 위한 컴퓨터 시스템으로서,
    제1 프로세서;
    상기 제1 프로세서와 연관된 로컬 메모리;
    제2 프로세서;
    상기 제2 프로세서와 연관된 데이터 캐시; 및
    상기 제1 프로세서와 상기 제2 프로세서 사이에 메시지들을 라우팅하도록 구성된 시리얼 인터페이스 버스
    를 포함하고,
    상기 제1 프로세서는,
    상기 로컬 메모리에 저장된 제1 데이터가 상기 데이터 캐시에 저장된 제2 데이터에 대해 코히런트인지를 판정하도록 구성된 스누프(snoop) 요청을 생성하고 - 상기 스누프 요청은 상기 시리얼 인터페이스 버스 상의 상기 데이터 캐시를 식별하는 목적지 정보, 및 상기 데이터 캐시에서 상기 제2 데이터가 위치되는 장소를 식별하는 캐시 라인 어드레스를 포함함 - ,
    상기 데이터 캐시를 식별하는 상기 목적지 정보에 기초하여 상기 스누프 요청이 상기 시리얼 인터페이스 버스를 통해 상기 제2 프로세서에 송신되게 하고,
    상기 로컬 메모리에 저장된 상기 제1 데이터를 이용하여 처리 동작을 실행하도록 구성되며,
    상기 제2 프로세서는,
    상기 스누프 요청으로부터 상기 캐시 라인 어드레스를 추출하고,
    상기 데이터 캐시에서 상기 캐시 라인 어드레스에 저장된 상기 제2 데이터가 상기 제1 데이터에 대해 코히런트인지를 판정하고,
    상기 시리얼 인터페이스 버스 상의 상기 로컬 메모리를 식별하는 목적지 정보, 및 상기 제1 데이터가 상기 제2 데이터에 대해 코히런트임을 나타내는 완료 정보를 포함하는 완료(CPL) 메시지를 생성하고,
    상기 로컬 메모리를 식별하는 상기 목적지 정보에 기초하여 상기 CPL 메시지가 상기 시리얼 인터페이스 버스를 통해 상기 제1 프로세서에 송신되게 하도록 구성되는 컴퓨터 시스템.
  2. 제1항에 있어서, 상기 스누프 요청은 비-포스팅된 트랜잭션(non-posted transaction)이고, 상기 제1 프로세서는 상기 스누프 요청에 응답하여 상기 제2 프로세로부터 메시지를 수신하기를 기대하는 컴퓨터 시스템.
  3. 제1항에 있어서, 상기 스누프 요청은 상기 데이터 캐시를 식별하는 상기 목적지 정보를 포함하는 벤더 정의 헤더(vendor-defined header)를 갖는 벤더 정의 메시지인 컴퓨터 시스템.
  4. 제1항에 있어서, 상기 데이터 캐시에서 상기 캐시 라인 어드레스에 저장된 상기 제2 데이터가 코히런트인지를 판정하는 것은, 상기 캐시 라인 어드레스와 연관된 캐시 라인 태그를 검사하여 상기 제1 데이터에 대한 상기 제2 데이터의 상태를 판정하는 것을 포함하는 컴퓨터 시스템.
  5. 제4항에 있어서, 상기 제2 프로세서는 또한,
    상기 데이터 캐시에서 상기 캐시 라인 어드레스에 저장된 상기 제2 데이터가 수정되었음을 판정하고,
    상기 제2 데이터가 상기 로컬 메모리에 송신되게 하고,
    상기 제2 데이터가 상기 로컬 메모리에 기록되게 하고,
    상기 캐시 라인이 무효임을 나타내도록 상기 캐시와 연관된 상기 캐시 라인 태그를 변경하도록 구성되는 컴퓨터 시스템.
  6. 제4항에 있어서,
    상기 제2 프로세서는 또한, 판독 요청이 상기 시리얼 인터페이스 버스를 통해 상기 제2 프로세서로부터 상기 제1 프로세서에 송신되게 하도록 구성되고, 상기 판독 요청은 상기 로컬 메모리에 저장된 상기 제1 데이터를 판독하는 요청을 포함하고,
    상기 제1 프로세서는 또한, 상기 제2 프로세서로부터 수신된 상기 CPL 메시지를 무시하고, 상기 처리 동작을 실행한 후에, 상기 시리얼 인터페이스 버스를 통해 상기 제2 프로세서에 상기 제1 데이터의 송신을 야기함으로써 상기 판독 요청을 서비스하도록 구성되고, 상기 제1 데이터는 상기 실행된 처리 동작에 의해 수정되는 컴퓨터 시스템.
  7. 메모리에 저장된 데이터를 이용하여 처리 동작을 실행하기 위한 방법으로서,
    제1 프로세서에 연결된 로컬 메모리에 저장된 제1 데이터가 제2 프로세서에 연결된 데이터 캐시에 저장된 제2 데이터에 대해 코히런트인지를 판정하도록 구성된 스누프 요청을 생성하는 단계 - 상기 스누프 요청은 시리얼 인터페이스 버스 상의 상기 데이터 캐시를 식별하는 목적지 정보, 및 상기 데이터 캐시에서 상기 제2 데이터가 위치되는 장소를 식별하는 캐시 라인 어드레스를 포함함 - ;
    상기 데이터 캐시를 식별하는 상기 목적지 정보에 기초하여 상기 스누프 요청이 상기 시리얼 인터페이스 버스를 통해 상기 제2 프로세서에 송신되게 하는 단계;
    상기 스누프 요청으로부터 상기 캐시 라인 어드레스를 추출하는 단계;
    상기 데이터 캐시에서 상기 캐시 라인 어드레스에 저장된 상기 제2 데이터가 상기 로컬 메모리에 저장된 상기 제1 데이터에 대해 코히런트인지를 판정하는 단계;
    상기 시리얼 인터페이스 버스 상의 상기 로컬 메모리를 식별하는 목적지 정보, 및 상기 제1 데이터가 상기 제2 데이터에 대해 코히런트임을 나타내는 완료 정보를 포함하는 완료(CPL) 메시지를 생성하는 단계;
    상기 로컬 메모리를 식별하는 상기 목적지 정보에 기초하여 상기 CPL 메시지 가 상기 시리얼 인터페이스 버스를 통해 상기 제1 프로세서에 송신되게 하는 단계; 및
    상기 로컬 메모리에 저장된 상기 제1 데이터를 이용하여 상기 처리 동작이 상기 제1 프로세서 상에서 실행되게 하는 단계
    를 포함하는 처리 동작 실행 방법.
  8. 제7항에 있어서, 상기 판정하는 단계는, 상기 캐시 라인 어드레스와 연관된 캐시 라인 태그를 검사하여 상기 제1 데이터에 대한 상기 제2 데이터의 상태를 판정하는 단계를 포함하는 처리 동작 실행 방법.
  9. 제8항에 있어서,
    상기 데이터 캐시에서 상기 캐시 라인 어드레스에 저장된 상기 제2 데이터가 수정되었음을 판정하는 단계;
    상기 제2 데이터가 상기 로컬 메모리에 송신되게 하는 단계;
    상기 제2 데이터가 상기 로컬 메모리에 기록되게 하는 단계; 및
    상기 캐시 라인이 무효임을 나타내도록 상기 캐시와 연관된 상기 캐시 라인 태그를 변경하는 단계를 더 포함하는 처리 동작 실행 방법.
  10. 제8항에 있어서,
    판독 요청이 상기 시리얼 인터페이스 버스를 통해 상기 제2 프로세서로부터 상기 제1 프로세서에 송신되게 하는 단계 - 상기 판독 요청은 상기 로컬 메모리에 저장된 상기 제1 데이터를 판독하는 요청을 포함함 - ;
    상기 제1 프로세서에서, 상기 제2 프로세서로부터 수신된 상기 CPL 메시지를 무시하는 단계; 및
    상기 처리 동작이 상기 제1 프로세서 상에서 실행된 후에, 상기 시리얼 인터페이스 버스를 통해 상기 제2 프로세서에 상기 제1 데이터의 송신을 야기함으로써 상기 판독 요청을 서비스하는 단계 - 상기 제1 데이터는 상기 실행된 처리 동작에 의해 수정됨 - 를 더 포함하는 처리 동작 실행 방법.
KR1020090121685A 2008-12-09 2009-12-09 시리얼 인터페이스 버스를 통한 캐시 코히런시를 유지하기 위한 시스템 및 방법 KR101107391B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/331,302 US8234458B2 (en) 2008-12-09 2008-12-09 System and method for maintaining cache coherency across a serial interface bus using a snoop request and complete message
US12/331,302 2008-12-09

Publications (2)

Publication Number Publication Date
KR20100066410A true KR20100066410A (ko) 2010-06-17
KR101107391B1 KR101107391B1 (ko) 2012-01-19

Family

ID=42232360

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020090121685A KR101107391B1 (ko) 2008-12-09 2009-12-09 시리얼 인터페이스 버스를 통한 캐시 코히런시를 유지하기 위한 시스템 및 방법

Country Status (4)

Country Link
US (2) US8234458B2 (ko)
JP (1) JP5146844B2 (ko)
KR (1) KR101107391B1 (ko)
CN (1) CN101751370B (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8751714B2 (en) * 2010-09-24 2014-06-10 Intel Corporation Implementing quickpath interconnect protocol over a PCIe interface
WO2012124431A1 (ja) * 2011-03-17 2012-09-20 ルネサスエレクトロニクス株式会社 半導体装置
US11144580B1 (en) * 2013-06-16 2021-10-12 Imperva, Inc. Columnar storage and processing of unstructured data
US10846223B2 (en) * 2017-10-19 2020-11-24 Lenovo Enterprise Solutions (Singapore) Pte. Ltd Cache coherency between a device and a processor
US11477049B2 (en) * 2018-08-02 2022-10-18 Xilinx, Inc. Logical transport over a fixed PCIE physical transport network
US11210246B2 (en) * 2018-08-24 2021-12-28 Advanced Micro Devices, Inc. Probe interrupt delivery
US10769071B2 (en) * 2018-10-10 2020-09-08 Micron Technology, Inc. Coherent memory access
CN109617832B (zh) * 2019-01-31 2022-07-08 新华三技术有限公司合肥分公司 报文缓存方法及装置

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09223115A (ja) * 1996-02-19 1997-08-26 Canon Inc 情報処理装置及びシステム及びその制御方法
JP3849951B2 (ja) * 1997-02-27 2006-11-22 株式会社日立製作所 主記憶共有型マルチプロセッサ
US6292872B1 (en) * 1998-02-17 2001-09-18 International Business Machines Corporation Cache coherency protocol having hovering (H) and recent (R) states
US20020053004A1 (en) * 1999-11-19 2002-05-02 Fong Pong Asynchronous cache coherence architecture in a shared memory multiprocessor with point-to-point links
US7644237B1 (en) * 2003-06-23 2010-01-05 Mips Technologies, Inc. Method and apparatus for global ordering to insure latency independent coherence
US7698509B1 (en) * 2004-07-13 2010-04-13 Oracle America, Inc. Snooping-based cache-coherence filter for a point-to-point connected multiprocessing node
US7360027B2 (en) 2004-10-15 2008-04-15 Intel Corporation Method and apparatus for initiating CPU data prefetches by an external agent
US7543115B1 (en) * 2006-01-11 2009-06-02 Intel Corporation Two-hop source snoop based cache coherence protocol
US7571286B2 (en) * 2006-08-24 2009-08-04 International Business Machines Corporation Reduced memory traffic via detection and tracking of temporally silent stores
US7836144B2 (en) * 2006-12-29 2010-11-16 Intel Corporation System and method for a 3-hop cache coherency protocol
US7861024B2 (en) * 2008-09-30 2010-12-28 Intel Corporation Providing a set aside mechanism for posted interrupt transactions

Also Published As

Publication number Publication date
CN101751370B (zh) 2013-11-20
JP2010140485A (ja) 2010-06-24
KR101107391B1 (ko) 2012-01-19
US8782349B2 (en) 2014-07-15
JP5146844B2 (ja) 2013-02-20
CN101751370A (zh) 2010-06-23
US20100146218A1 (en) 2010-06-10
US20120290796A1 (en) 2012-11-15
US8234458B2 (en) 2012-07-31

Similar Documents

Publication Publication Date Title
KR101107391B1 (ko) 시리얼 인터페이스 버스를 통한 캐시 코히런시를 유지하기 위한 시스템 및 방법
US9946650B2 (en) Technique to share information among different cache coherency domains
TWI410796B (zh) 來自窺探過濾器之過期無效異動的減少
US9170946B2 (en) Directory cache supporting non-atomic input/output operations
US7284097B2 (en) Modified-invalid cache state to reduce cache-to-cache data transfer operations for speculatively-issued full cache line writes
JP4733932B2 (ja) マルチプロセッサシステム及びマルチプロセッサシステムのキャッシュ一貫性維持方法
CN101097545A (zh) 独占所有权探听过滤器
JPH07253928A (ja) 2重化キャッシュ・スヌープ機構
US7685373B2 (en) Selective snooping by snoop masters to locate updated data
US7519780B2 (en) System and method for reducing store latency in symmetrical multiprocessor systems
JP6975335B2 (ja) ホームエージェントベースのキャッシュ転送アクセラレーションスキーム
CN112612725A (zh) 用于处理缓存维护操作的装置和方法
US20070073979A1 (en) Snoop processing for multi-processor computing system
EP4124963A1 (en) System, apparatus and methods for handling consistent memory transactions according to a cxl protocol
US9392062B2 (en) Optimized ring protocols and techniques
CN110083548B (zh) 数据处理方法及相关网元、设备、系统
US7546421B2 (en) Interconnect transaction translation technique
JP6975338B2 (ja) 順序付けされた帯域幅を改善するプロトコルスキームのキャンセル及びリプレイ
JP5063059B2 (ja) 方法、データ処理システム、メモリ・コントローラ(i/o書込みオペレーションのパイプライン化および多重オペレーション範囲を可能にするデータ処理システムおよび方法)
JP2023544538A (ja) キャッシュライン追い出しのためのマルチレベルキャッシュコヒーレンシプロトコル

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20141231

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20160104

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20170102

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20180110

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20190102

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20200102

Year of fee payment: 9