KR20230115890A - 일관성 인터페이스를 갖는 큐 관리를 위한 시스템들, 방법들, 그리고 장치들 - Google Patents

일관성 인터페이스를 갖는 큐 관리를 위한 시스템들, 방법들, 그리고 장치들 Download PDF

Info

Publication number
KR20230115890A
KR20230115890A KR1020230003677A KR20230003677A KR20230115890A KR 20230115890 A KR20230115890 A KR 20230115890A KR 1020230003677 A KR1020230003677 A KR 1020230003677A KR 20230003677 A KR20230003677 A KR 20230003677A KR 20230115890 A KR20230115890 A KR 20230115890A
Authority
KR
South Korea
Prior art keywords
queue
interface
host
coherency
consistency
Prior art date
Application number
KR1020230003677A
Other languages
English (en)
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 KR20230115890A publication Critical patent/KR20230115890A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • 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
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1642Handling requests for interconnection or transfer for access to memory bus based on arbitration with request queuing
    • 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
    • G06F12/0835Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means for main memory peripheral accesses (e.g. I/O or DMA)
    • 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
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • G06F13/1663Access to shared memory
    • 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
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Testing And Monitoring For Control Systems (AREA)

Abstract

방법은 제1 장치에 의해 큐를 액세스하는 단계, 그리고 일관성 인터페이스에 의해 제2 장치에 큐의 액세스를 통지하는 단계를 포함할 수 있다. 큐는 제2 장치에 의해 액세스 가능하고, 제1 장치는 제2 장치와 일관성 인터페이스에 의해 연결될 수 있다. 통지하는 단계는 모니터링 메커니즘에 의해 통지하는 단계를 포함할 수 있다. 통지하는 단계는 모니터링 요청을 생성하는 단계를 포함할 수 있다. 통지하는 단계는 모니터링 요청에 기반하여 경고를 생성하는 단계를 더 포함할 수 있다. 큐는 서브미션 큐를 포함할 수 있다. 큐는 컴플리션 큐를 포함할 수 있다. 액세스하는 단계는 큐로부터 엔트리를 읽는 단계를 포함할 수 있다. 액세스하는 단계는 큐에 엔트리를 기입하는 단계를 포함할 수 있다. 엔트리는 커맨드를 포함할 수 있다. 엔트리는 컴플리션을 포함할 수 있다. 제1 장치는 호스트를 포함하고, 제2 장치는 장치를 포함할 수 있다. 큐는 호스트에 위치할 수 있다.

Description

일관성 인터페이스를 갖는 큐 관리를 위한 시스템들, 방법들, 그리고 장치들{SYSTEMS, METHODS, AND DEVICES FOR QUEUE MANAGEMENT WITH A COHERENT INTERFACE}
본 기재는 일반적으로 큐 관리에 관한 것으로, 더 상세하게는 일관성 인터페이스를 갖는 큐 관리를 위한 시스템들, 방법들, 그리고 장치들에 관한 것이다.
호스트 및 장치는 하나 또는 그보다 많은 큐들을 사용하는 프로토콜을 이용하여 통신할 수 있다. 호스트는 커맨드와 같은 엔트리를 서브미션 큐에 기입할 수 있다. 호스트는 또한 엔트리가 서브미션 큐에 기입되었다는 통지를 장치에 제공할 수 있다. 통지를 수신하는 것에 기반하여, 장치는 서브미션 큐로부터 엔트리를 가져와 처리할 수 있다. 장치는 또한 컴플리션과 같은 엔트리를 컴플리션 큐에 기입할 수 있다. 호스트는 컴플리션 큐로부터 해당 엔트리를 가져와 처리할 수 있다.
본 배경 기술 섹션에 기재된 위의 정보는 단지 본 기재의 원리의 배경의 이해를 돕기 위한 것이며, 따라서 선행 기술을 구성하지 않는 정보를 포함할 수 있다.
본 기재의 목적은 도어벨 레지스터들 및 연관된 인터럽트들의 자원들을 줄이는 시스템들, 방법들, 그리고 장치들을 제공하는 데에 있다.
방법은 제1 장치에 의해 큐를 액세스하는 단계, 그리고 일관성 인터페이스에 의해 제2 장치에 큐의 액세스를 통지하는 단계를 포함할 수 있다. 큐는 제2 장치에 의해 액세스 가능하고, 제1 장치는 제2 장치와 일관성 인터페이스에 의해 연결될 수 있다. 통지하는 단계는 모니터링 메커니즘에 의해 통지하는 단계를 포함할 수 있다. 통지하는 단계는 모니터링 요청을 생성하는 단계를 포함할 수 있다. 통지하는 단계는 모니터링 요청에 기반하여 경고를 생성하는 단계를 더 포함할 수 있다. 큐는 서브미션 큐를 포함할 수 있다. 큐는 컴플리션 큐를 포함할 수 있다. 액세스하는 단계는 큐로부터 엔트리를 읽는 단계를 포함할 수 있다. 액세스하는 단계는 큐에 엔트리를 기입하는 단계를 포함할 수 있다. 엔트리는 커맨드를 포함할 수 있다. 엔트리는 컴플리션을 포함할 수 있다. 제1 장치는 호스트를 포함하고, 제2 장치는 장치를 포함할 수 있다. 큐는 호스트에 위치할 수 있다. 큐는 장치에 위치할 수 있다. 큐는 통신 프토로콜과 연관될 수 있다. 통신 프로토콜은 스토리지 프로토콜을 포함할 수 있다. 스토리지 프로토콜은 NVMe(Nonvolatile Memory Express) 프로토콜을 포함할 수 있다. 일관성 인터페이스는 CXL(Compute Express Link) 인터페이스를 포함할 수 있다.
장치는 일관성 인터페이스, 그리고 일관성 인터페이스를 이용하여 큐를 이용하여 통신하고 그리고 일관성 인터페이스에 의해 큐의 액세스의 통지를 수신하도록 구성되는 컨트롤러를 포함할 수 있다. 장치는 캐시를 포함할 수 있고, 일관성 인터페이스는 캐시의 적어도 일부의 일관성을 유지하도록 구성될 수 있다. 큐는 캐시에 적어도 부분적으로 위치할 수 있다. 장치는 공유 로컬 메모리를 포함할 수 있고, 일관성 인터페이스는 공유 로컬 메모리의 적어도 일부의 일관성을 유지하도록 구성될 수 있다. 큐는 공유 로컬 메모리의 적어도 일부에 적어도 부분적으로 위치할 수 있다. 일관성 인터페이스는 액세스에 기반하여 모니터링 요청을 수신하도록 구성될 수 있다. 일관성 인터페이스는 모니터링 요청에 기반하여 경고를 생성하도록 구성될 수 있다. 컨트롤러는 일관성 인터페이스로부터 통지로서 경고를 수신하도록 구성될 수 있다. 컨트롤러는 통지에 기반하여 큐 내의 엔트리를 처리하도록 구성될 수 있다.
시스템은 호스트, 그리고 일관성 인터페이스를 이용하여 호스트와 결합되는 장치를 포함할 수 있다. 장치는 일관성 인터페이스를 이용하여 큐를 이용하여 호스트와 통신하고, 그리고 호스트에 의한 큐의 액세스의 통지를 일관성 인터페이스에 의해 수신하도록 구성되는 컨트롤러를 포함할 수 있다. 장치는 공유 로컬 메모리를 포함할 수 있고, 일관성 인터페이스는 공유 로컬 메모리의 적어도 일부의 일관성을 유지하도록 구성될 수 있고, 그리고 큐는 공유 로컬 메모리의 적어도 일부에 적어도 부분적으로 위치할 수 있다. 일관성 인터페이스는 제1 일관성 인터페이스일 수 있고, 큐는 제1 큐일 수 있고, 통지는 제1 통지일 수 있고, 액세스는 제1 액세스일 수 있다. 호스트는 제2 일관성 인터페이스를 더 포함할 수 있고, 호스트는 제2 일관성 인터페이스를 이용하여 제2 큐를 이용하여 장치와 통신하고, 그리고 장치에 의한 제2 큐의 액세스의 통지를 제2 일관성 인터페이스에 의해 수신하도록 구성될 수 있다. 장치는 공유 로컬 메모리를 포함할 수 있고, 제1 일관성 인터페이스 및 제2 일관성 인터페이스는 공유 로컬 메모리의 적어도 일부의 일관성을 유지할 수 있다. 제2 큐는 공유 로컬 메모리의 적어도 일부에 적어도 부분적으로 위치할 수 있다.
본 기재에 따르면, 서브미션 큐 그리고/또는 컴플리션 큐의 업데이트들은 일관성 메커니즘의 스누프 및 경고에 의해 호스트 그리고/또는 장치로 전달된다. 따라서, 도어벨 레지스터들 및 연관된 인터럽트들의 자원들을 줄이는 시스템들, 방법들, 그리고 장치들이 제공된다.
도면들은 비율대로 그려진 것은 아니며, 도면들에서 설명의 목적을 위하여 유사한 구조들 또는 기능들의 요소들은 일반적으로 유사한 참조 번호들 또는 그것의 부분들에 의해 나타내어질 수 있다. 도면들은 여기에 기재된 다양한 실시 예들의 설명을 가능하게 하는 것만을 의도한다. 도면들은 여기에 기재된 가르침의 모든 측면들을 기술하지 않으며, 청구항들의 범위를 제한하지 않는다. 도면들이 모호해지는 것을 방지하기 위하여, 구성 요소들, 연결들 등의 모든 것들이 도시되지는 않으며, 모든 구성 요소들이 참조 번호들을 갖지는 않을 수 있다. 그러나 구성 요소 구성들의 패턴들은 도면들로부터 충분히 명백해질 수 있다. 첨부의 도면들은 상세한 설명과 함께 본 기재의 예시적인 실시 예들을 기술하며, 그리고 설명들과 함께 본 기재의 원리들을 설명하는 것을 제공한다.
도 1은 본 기재의 예시적인 실시 예들에 따른 통신 프로토콜을 위한 큐 스킴의 실시 예를 보여준다.
도 2는 본 기재의 예시적인 실시 예들에 따른 하나 또는 그보다 많은 큐들 및 일관성 인터페이스를 이용하여 통신하기 위한 스킴의 실시 예를 보여준다.
도 3은 본 기재의 예시적인 실시 예들에 따른 하나 또는 그보다 많은 큐들 및 일관성 인터페이스를 이용하여 통신하기 위한 시스템의 예시적인 실시 예를 보여준다.
도 4는 본 기재의 예시적인 실시 예들에 따른 하나 또는 그보다 많은 큐들 및 일관성 인터페이스를 이용하여 통신하기 위한 방법의 예시적인 실시 예를 보여준다.
도 5는 본 기재의 예시적인 실시 예들에 따른 호스트 장치의 예시적인 실시 예를 보여준다.
도 6은 본 기재의 예시적인 실시 예들에 따른 장치의 예시적인 실시 예를 보여준다.
도 7은 본 기재의 예시적인 실시 예들에 따른 통신을 위한 방법의 실시 예를 보여준다.
통신 프로토콜은 하나 또는 그보다 많은 큐들을 이용하여 커맨드들, 컴플리션들, 그리고/또는 이와 유사한 것들을 구성 요소들 사이에서 교환할 수 있다. 예를 들어, 장치로부터 데이터를 읽기 위해, 호스트는 읽기 커맨드를 장치에 의해 액세스 가능할 수 있는 서브미션 큐에 배치할 수 있다. 호스트는 또한 장치로 통지를 전송하여, 커맨드가 서브미션 큐에 존재함을 장치에 알릴 수 있다. 장치는 서브미션 큐로부터 읽기 커맨드를 가져오고 그리고, 예를 들어 요청된 데이터를 호스트로 전송함으로써, 읽기 커맨드를 처리할 수 있다. 장치는 또한 컴플리션을 컴플리션 큐에 배치하여, 호스트에 읽기 커맨드가 완료되었음을 알릴 수 있다.
일부 측면들에서, 통신 프로토콜은 통지 메커니즘을 이용하여, 엔트리가 큐에 추가되었음을 알릴 수 있다. 예를 들어, 서브미션 큐에 커맨드를 배치하는 것에 더하여, 호스트는 레지스터(도어벨 레지스터로 참조될 수 있는)에 엔트리를 기입할 수 있다. 레지스터에 기입하는 것은 커맨드가 서브미션 큐에 배치되었음을 장치에 알릴 수 있는 인터럽트를 생성할 수 있다. 그러나 이러한 통지 메커니즘은 호스트 그리고/또는 장치 자원들을 소비할 수 있으며, 예를 들어 엔트리를 레지스터(장치에 위치할 수 있는)에 기입하거나 인터럽트를 제공하는 것과 같은 자원들을 소비할 수 있다.
본 기재의 예시적인 실시 예들에 따른 통신 스킴은 일관성 인터페이스의 일관성 메커니즘을 이용하여, 큐의 액세스를 위한 통지 기능의 하나 또는 그보다 많은 측면들을 수행할 수 있다. 예를 들어, 메모리 일관성 인터페이스는 일관성 메모리 위치에 대한 하나 또는 그보다 많은 변화의 장치를 알릴 수 있는 일관성 메커니즘을 포함할 수 있다. 일관성 메모리 위치로 큐를 구현함으로써, 일관성 메커니즘은 하나 또는 그보다 많은 장치(예를 들어, 호스트, 장치, 그리고/또는 유사한 것 )에 큐가 액세스 되었음을(예를 들어, 기입되거나 읽혀졌음을) 알릴 수 있다. 구현 상세들에 의존하여, 이는 큐가 액세스 되었음을 알리는데 사용되는 자원들의 양을 줄이거나 제거할 수 있다. 예를 들어, 구현 상세들에 의존하여, 이는 도어벨 레지스터, 하나 또는 그보다 많은 프로세싱 동작들, 하나 또는 그보다 많은 인터럽트들, 그리고/또는 유사한 것의 사용을 줄이거나 제거할 수 있다.
일부 실시 예들에서, 일관성 인터페이스의 일관성 특색은 큐를 위한 통지 메커니즘을 구현하는데 사용될 수 있다. 예를 들어, 일관성 인터페이스는 장치에 호스트 메모리의 일부에 대한 액세스를 제공하는데 사용될 수 있는 캐시 일관성 프로토콜을 구현할 수 있다. 호스트 메모리의 일부의 카피는 장치의 캐시 메모리에 저장될 수 있고, 그리고 일관성 인터페이스의 캐시 일관성 메커니즘은 장치의 캐시 메모리와 호스트 메모리의 일부의 일관성을 유지할 수 있다. 일부 실시 예들에서, 일관성 메커니즘은 모니터링 메커니즘(예를 들어, 스누핑 메커니즘)을 이용하여, 메모리 위치가 업데이트 되었는지(예를 들어, 호스트에서 또는 대응하는 장치의 캐시에서) 판단할 수 있다. 이러한 실시 예에서, 큐가 장치 캐시 메모리를 이용하여 구현되면, 모니터링 메커니즘은 호스트 그리고/또는 장치에 큐가 액세스 되었음을 알리는데 사용될 수 있다.
다른 예로서, 일관성 인터페이스는, 예를 들어 호스트에 장치의 로컬 메모리에 대한 공유 액세스를 제공하는데 사용될 수 있는 메모리 일관성 프로토콜을 구현할 수 있다. 일관성 인터페이스의 메모리 일관성 메커니즘은 공유 장치 메모리의 일관성을 유지하여, 예를 들어 호스트 또는 장치의 하나에 의해 공유 메모리 위치가 업데이트 되면, 다른 하나는 오래된 데이터를 사용하는 것을 방지하기 위해 이를 통지받을 수 있다. 이러한 실시 예에서, 큐가 장치 공유 메모리를 이용하여 구현되면, 일관성 인터페이스의 메모리 일관성 메커니즘은 호스트 그리고/또는 장치에 큐가 액세스되었음을 알리는데 사용될 수 있다.
대안적으로 또는 추가적으로, 일관성 인터페이스의 캐시 일관성 메커니즘 및 메모리 일관성 메커니즘은 조합되어 사용되어 큐에 대한 통지 메커니즘을 구현할 수 있다. 예를 들어, 큐는 일관성 인터페이스의 메모리 일관성 메커니즘을 이용하여 장치 공유 메모리 위치에 구현될 수 있다. 일관성 인터페이스의 캐시 일관성 메커니즘은 장치 공유 메모리 위치의 큐를 모니터(예를 들어, 스누핑에 의해)하는데 사용되어, 큐가 호스트에 의해 업데이트 되었는지 판단하고 그리고 장치에 통지(예를 들어, 경고)를 전송할 수 있다.
도 1은 본 기재의 예시적인 실시 예들에 따른 통신 프로토콜을 위한 큐 스팀의 실시 예를 보여준다. 도 1의 실시 예는, 예를 들어 PCIe(Peripheral Component Interconnect Express) 그리고/또는 CXL.IO로 참조될 수 있는 CXL의 비-일관성(non-coherent) 입력 그리고/또는 출력(I/O 또는 IO) 프로토콜과 같은 인터커넥트를 사용할 수 있는 NVMe(Nonvolatile Memory Express)와 같은 스토리지 프로토콜로 사용될 수 있다. 다른 예로서, 도 1의 실시 예는 이더넷과 같은 네트워크를 사용할 수 있는 NVMe-oF(NVMe-over-fabric)로 사용될 수 있지만, 본 원리들은 이러한 또는 임의의 다른 구현 상세들로 한정되지 않는다. CXL을 지원하도록 구현된 일부 실시 예들에서, CXL.IO 프로토콜은 본질적으로 PCIe에 대응할 수 있으며, CXL.mem 그리고/또는 CXL.cache 프로토콜들은 일관성을 제공할 수 있는 하나 또는 그보다 많은 추가적인 특색들을 구현할 수 있다.
도 1에 도시된 실시 예는 호스트(102) 및 장치(104)를 포함할 수 있다. 호스트(102)는, 예를 들어 호스트 메모리(110)에 위치한 서브미션 큐(106)(SQ) 및 컴플리션 큐(108)(CQ)를 포함할 수 있다. 다른 실시 예들에서, 서브미션 큐(106) 그리고/또는 컴플리션 큐(108)는 장치(104) 그리고/또는 임의의 다른 위치에 위치할 수 있다. 장치(104)는 서브미션 큐 테일 도어벨 레지스터(114) 그리고/또는 컴플리션 큐 헤드 도어벨 레지스터(116)를 포함할 수 있는 컨트롤러(112)를 포함할 수 있다.
일부 실시 예들에서, 서브미션 큐(106) 그리고/또는 컴플리션 큐(108)는, 예를 들어 장치(104)가 호스트(102)로부터 하나 또는 그보다 많은 커맨드들을 수신하고 그리고/또는 처리하는 것을 가능하게 하는데 사용될 수 있다. 서브미션 큐(106) 그리고/또는 컴플리션 큐(108)는, 예를 들어 순환(circular) FIFO(first-in-first-out) 큐들로 구현될 수 있으며, 큐의 한쪽 끝은 큐의 다른 쪽 끝을 향해 논리적으로 감싸 돌아, 큐가 한정된 선형 어드레스 공간으로 구현될 수 있더라고, 엔트리들이 무한하게 큐로 추가되거나 큐로부터 제거되게 할 수 있다(일부 실시 예들에서, 엔트리들의 최대 수를 조건으로). 서브미션 큐(106) 또는 컴플리션 큐(108)를 참조하면, 페치되지 않은 가장 오래된 엔트리(예를 들어, 커맨드 또는 컴플리션)를 갖는 슬롯은 헤드로 참조될 수 있고, 그리고 다음에 가용한 점유되지 않은 슬롯은 테일로 참조될 수 있다. 서브미션 큐(106)의 헤드는 헤드 엔트리 포인터(103)(헤드 포인터로도 참조될 수 있는)에 의해 표시될 수 있고, 그리고 서브미션 큐(106)의 테일은 테일 엔트리 포인터(105)(테일 포인터로도 참조될 수 있는)에 의해 표시될 수 있다. 컴플리션 큐(108)의 헤드는 헤드 엔트리 포인터(107)에 의해 표시될 수 있고, 그리고 컴플리션 큐(108)의 테일은 테일 엔트리 포인터(109)에 의해 표시될 수 있다. 큐기 빈 때에, 헤드 엔트리 포인터 및 테일 엔트리 포인터는 동일한 위치를 가리킬 수 있다.
호스트(102)로부터 하나 또는 그보다 많은 커맨드들을 수신하고 그리고/또는 처리하기 위한 방법의 예시적인 실시 예가 아래와 같이 진행된다.
동작 (1)에서, 호스트(102)는 테일 엔트리 포인터(105)에 의해 표시되는 빈 슬롯에서 시작하여 서브미션 큐(106)의 하나 또는 그보다 많은 슬롯들에 하나 또는 그보다 많은 커맨드들을 배치(예를 들어 기입)할 수 있다(예를 들어 슬롯 당 하나의 커맨드). 테일 엔트리 포인터(105)는 서브미션 큐(106)의 다음으로 가용한 슬롯을 가리키도록 업데이트될 수 있다.
동작 (2)에서, 호스트(102)는 또한 서브미션 큐 테일 도어벨 레지스터(114)(SQ-TDB)를 업데이트하여, 하나 또는 그보다 많은 새로운 커맨드들이 서브미션 큐(106)에 배치되었음을 컨트롤러(112)에 알릴 수 있는 프로세스를 시작할 수 있다. 예를 들어, 호스트(102)는 서브미션 큐 테일 도어벨 레지스터(114)에 서브미션 큐 테일 엔트리 포인터(105)의 새로운 값을 기입할 수 있다.
일부 실시 예들에서, 서브미션 큐 테일 도어벨 레지스터(114)는 하드웨어, 소프트웨어 또는 이들의 조합으로 모니터되어, 하나 또는 그보다 많은 새로운 커맨드들이 서브미션 큐(106)에 배치되었다는 통지를 컨트롤러(112)에 제공할 수 있다. 예를 들어, 일부 실시 예들에서, 서브미션 큐 테일 도어벨 레지스터(114)는 레지스터(114)의 업데이트에 기반하여 장치(104)에 대한 인터럽트를 생성할 수 있는 하드웨어로 모니터되는 레지스터 또는 메모리 위치(예를 들어, 컨트롤러(112) 그리고/또는 장치(104)의 PCIe 위치와 같은 위치)로 구현될 수 있다. 일부 실시 예들에서, 인터럽트는 하나 또는 그보다 많은 새로운 커맨드들이 서브미션 큐(106)에 배치되었다는 컨트롤러(112) 그리고/또는 장치(104)에 대한 통지로 작용할 수 있다.
일부 실시 예들에서, 서브미션 큐(106)에 하나 또는 그보다 많은 새로운 커맨드들이 배치되었다는 통지를 수신하는 것은 컨트롤러(112)가 서브미션 큐(106)에 존재할 수 있는 페치되지 않은 그리고/또는 처리되지 않은 커맨드들의 수를 추적하는 것을 가능하게 할 수 있다. 일부 실시 예들에서, 이 정보는, 예를 들어 컨트롤러(112)가 하나 또는 그보다 많은 커맨드들을 어느 서브미션 큐(다수의 서브미션 큐들이 존재한다면)로부터 가져올 수 있을지를 컨트롤러(112)가 판단하게 하는데 사용될 수 있다.
동작 (3)에서, 컨트롤러(112)는 헤드 엔트리 포인터(103)에 의해 표시되는 위치에서 시작하여, 서브미션 큐(106)로부터 하나 또는 그보다 많은 커맨드들을 페치할(예를 들어, 읽음으로써) 수 있다. 헤드 엔트리 포인터(103)는, 예를 들어 장치(104)에 의해 액세스 가능할 수 있는 메모리 위치(예를 들어, PCIe 메모리 위치)를 이용하여 구현될 수 있다. 일부 실시 예들에서, 헤드 엔트리 포인터(103)는 서브미션 큐(106)에 대한 초기화 프로세스의 일부로서 수립될 수 있다. 헤드 엔트리 포인터(103)는 서브미션 큐(106)에서 다음(예를 들어, 가장 오래된) 페치되지 않은 커맨드를 가리키도록 업데이트될 수 있다.
도 1에 도시된 실시 예에서, 서브미션 큐(106)는 호스트(102)에 위치한 순환 큐일 수 있다. 따라서, 서브미션 큐(106)를 감싸 도는 동안, 호스트가 서브미션 큐(106)의 헤드의 위치를 추적하여 서브미션 큐(106)의 헤드 및 테일 사이의 충돌을 방지하는 것은 유익할 수 있다. 일부 실시 예들에서, 헤드 엔트리 포인터(103)는 호스트(102)에 액세스 가능할 수 있고, 따라서 호스트(102)는 헤드 엔트리 포인터(103)를 읽어 서브미션 큐(106)의 헤드의 위치를 추적할 수 있다. 일부 다른 실시 예들에서, 그러나 호스트(102)는 서브미션 큐(106)의 헤드 엔트리 포인터(103)에 대한 직접 액세스를 갖지 않을 수 있다. 따라서, 도 1에 도시된 스킴은 호스트(102)가 서브미션 큐(106)의 헤드의 위치를 추적하게 하는 메커니즘을 구현할 수 있다. 예를 들어, 일부 실시 예들에서, 이러한 메커니즘은 예를 들어 PCIe 베이스 어드레스 레지스터를 이용한 서브미션 큐 헤드 도어벨 레지스터로 실질적으로 구현될 수 있다. 다른 예로서, 일부 실시 예들에서, 이러한 메커니즘은, 아래에서 기술되는 컴플리션 큐(108) 내의 엔트리(예를 들어, 각 엔트리)에서, 헤드 엔트리 포인터(103)의 현재 값을 호스트(102)로 전송하는 컨트롤러(112)에 의해 구현될 수 있다.
동작 (4)에서, 컨트롤러(112)는 서브미션 큐(106)로부터 가져온 하나 또는 그보다 많은 커맨드들을 처리할 수 있다. 일부 실시 예들에서, 컨트롤러(112)는 하나 또는 그보다 많은 커맨드들을 순서 없이 처리할 수 있다. 일부 실시 예들에서, 페치(가져오기) 그리고/또는 처리는 소비인 것으로 참조될 수 있다.
동작 (5)에서, 예를 들어 컴플리션 큐 테일 엔트리 포인터(109)에 의해 표시될 수 있는 다음의 가용한 슬롯에서 시작하여, 컨트롤러(112)는 하나 또는 그보다 많은 처리된 커맨드들에 대응하는 하나 또는 그보다 많은 컴플리션들을 컴플리션 큐(108)에 배치할 수 있다. 컴플리션 큐 테일 엔트리 포인터(109)는 컴플리션 큐(108) 내의 다음으로 가용한 슬롯을 가리키도록 업데이트될 수 있다. 일부 실시 예들에서, 컴플리션은 이전 엔트리로부터 반전될 수 있는 페이즈 태그(Phase tag)를 포함할 수 있으며, 컴플리션 큐 엔트리(예를 들어, 새로운 컴플리션)의 처리를 위해 가용한 새로운 엔트리임을 호스트(102)에 통지할 수 있다.
동작 (6)에서, 컨트롤러(112)는 인터럽트(예를 들어, 핀-기반 인터럽트, MSI(message signaled interrupt), MSI-X(extended MSI interrupt), 그리고/또는 유사한 것)를 생성하여, 하나 또는 그보다 많은 컴플리션들이 컴플리션 큐(108)에 추가되었음을 호스트(102)에 통지할 수 있다. 일부 실시 예들에서, 하나 또는 그보다 많은 컴플리션들에 대한 하나 또는 그보다 많은 인터럽트들은 더 적은 수의 인터럽트들로 합쳐질 수 있다.
동작 (7)에서, 예를 들어 컴플리션 큐 헤드 엔트리 포인터(107)에 의해 표시될 수 있는 헤드에서 시작하여, 호스트(102)는 컴플리션 큐(108)로부터 하나 또는 그보다 많은 컴플리션들을 가져올(예를 들어, 읽음으로써) 수 있다. 일부 실시 예들에서, 호스트(102)는 컴플리션 큐(108)로부터 가져온 하나 또는 그보다 많은 컴플리션들을 처리할 수 있다. 일부 실시 예들에서, 예를 들어 이전에 페치된 컴플리션의 페이즈 태그로부터 반전된 페이즈 태그를 갖는 컴플리션을 만날 때까지, 호스트(102)는 페치 그리고/또는 처리를 지속할 수 있다.
동작 (8)에서, 호스트(102)는 컴플리션 큐 헤드 도어벨 레지스터(116)(CQ-HDB)를 업데이트하여(예를 들어, 기입하여), 하나 또는 그보다 많은 컴플리션들이 컴플리션 큐(108)로부터 제거되었음을(예를 들어, 해제되었음을) (예를 들어, 컴플리션 큐(108)로부터 하나 또는 그보다 많은 컴플리션들을 읽음으로써). 컨트롤러(112)에 알릴 수 있는 프로세스를 시작할 수 있다 예를 들어, 호스트(102)는 컴플리션 큐 헤드 엔트리 포인터(107)의 새로운 값을 컴플리션 큐 헤드 도어벨 레지스터(116)에 기입할 수 있다. 일부 실시 예들에서, 호스트(102)는 연관된 컴플리션 큐 헤드 도어벨 레지스터(116)를 업데이트하기 전에 하나 또는 그보다 많은 컴플리션들을 가져오고 그리고/또는 처리할 수 있다.
도 1을 참조하여 설명된 방법들 그리고/또는 장치는 하나 또는 그보다 많은 큐들을 이용하는 통신 프로토콜을 가능하게 하여, 호스트(102) 및 장치(104)의 활동들을 조정(예를 들어, 발맞춤을 유지하여)할 수 있다. 그러나 구현 상세들에 의존하여, 하나 또는 그보다 많은 도어벨 레지스터들을 수반하는 스킴의 사용은 호스트 그리고/또는 장치 자원들을 소비할 수 있다. 예를 들어, 호스트(102)는 하나 또는 그보다 많은 레지스터들(114 그리고/또는 116)(장치(104)에 위치할 수도 있는)에 하나 또는 그보다 많은 엔트리들을 기입하고, 그리고 하나 또는 그보다 많은 인터럽트들을 제공하고, 그리고/또는 유사한 것을 한다.
설명의 목적을 위하여, 일부 실시 예들은 일부 구체적인 구현 상세들의 맥락에서 기술될 수 있다. 그러나 본 기재의 원리들은 이러한 또는 임의의 다른 구현 상세들에 한정되지 않는다.
도 2는 본 기재의 예시적인 실시 예들에 따른 하나 또는 그보다 많은 큐들 및 일관성 인터페이스를 이용하여 통신하기 위한 스킴의 실시 예를 보여준다. 도 2에 도시된 실시 예는 제1 장치(222) 및 제2 장치(224)를 포함할 수 있다. 제1 장치(222)는 제1 일관성 인터페이스(226)를 포함할 수 있다. 제2 장치(224)는 제2 일관성 인터페이스(228) 및 컨트롤러(230)를 포함할 수 있다. 제1 일관성 인터페이스(226) 및 제2 일관성 인터페이스(228)는 통신 연결(232)을 통해 통신할 수 있다. 일부 실시 예들에서, 제1 장치(222) 그리고/또는 제2 장치(224)는 호스트, 클라이언트, 장치, 그리고/또는 이와 유사한 것, 또는 이들의 임의의 조합으로 구성될 수 있다. 일부 실시 예들에서, 컨트롤러(230)는 호스트 컨트롤러, 클라이언트 컨트롤러, 장치 컨트롤러, 그리고/또는 유사한 것일 수 있다. 일부 실시 예들에서, 일관성 메시지들에 더하여, 제1 일관성 인터페이스(226) 그리고/또는 제2 일관성 인터페이스(228)는 비-일관성 메시지들을 보낼 수 있다. 예를 들어, CXL에 대한 지원을 구현하는 실시 예들에서, CXL.io 프로토콜은 비-일관성 메시지들을 보내는데 사용될 수 있다. 대안적으로, 또는 추가적으로, 일부 실시 예들은, 예를 들어 제1 일관성 인터페이스(226) 그리고/또는 제2 일관성 인터페이스(228)에 더하여 하나 또는 그보다 많은 인터페이스들(예를 들어, 비-일관성 메시징 기능들을 갖는 하나 또는 그보다 많은 인터페이스들)을 이용하여 비0일관성 메시지들을 보낼 수 있다.
컨트롤러(230)는 제1 장치(222) 및 제2 장치(224) 사이에서 요청들, 커맨드들, 컴플리션들, 그리고/또는 유사한 것을 교환하기 위한 하나 또는 그보다 많은 큐들(234)을 이용할 수 있는 통신 프로토콜을 이용하는 제2 일관성 인터페이스(228)를 통해 제1 장치(222)와 통신하는데 제2 장치(224)에 의해 사용될 수 있다. 일부 실시 예들에서, 하나 또는 그보다 많은 큐들(234)은 예를 들어 도 1을 참조하여 설명된 바와 같이 순환 FIFO(first-in-first-out로 구현될 수 있다. 일부 실시 예들에서, 하나 또는 그보다 많은 큐들(234)은 임의의 다른 타입의 큐 배열로 구현될 수 있다. 예를 들어, 일부 실시 예들에서, 제1 장치(222)는 호스트로 구현될 수 있고, 제2 장치(224)는 장치로 구현될 수 있고, 그리고 큐(234)는 호스트가 하나 또는 그보다 많은 동작들을 수행하도록 장치에게 지시하는 엔트리를 기입할 수 있는 메모리 위치로 구현될 수 있다. 장치는 호스트에 의한 기입을 검출(예를 들어, 통지(236)에 의해)하고 그리고 엔트리에 의해 지시된 하나 또는 그보다 많은 동작들을 수행할 수 있다. 장치는 메모리 위치에 다시 기입하여 하나 또는 그보다 많은 동작들 중 적어도 일부가 완료되었음을 호스트에 통지할 수 있다. 일부 실시 예들에서, 이 메모리 위치는, 예를 들어 제1 CPU(central processing unit) 및 제2 CPU의 사이, CPU 및 GPU(graphics processing unit)의 사이, CPU 및 가속기의 사이, 그리고/또는 유사한 것에서 동기화를 유지할 수 있는 원자 메모리 액세스 환경(atomic memory access environment)으로 구현될 수 있다. 일부 실시 예들에서, 그리고 구현 상세들에 의존하여, 이러한 메모리 위치는 FIFO, SQ, CQ, 그리고/또는 유사한 것과 같은 모델로 구현되거나 그렇지 않을 수 있다.
하나 또는 그보다 많은 큐들(234)은 도 2에 점선으로 도시된 바와 같이 제2 장치(224)에 위치할 수 있다. 추가적으로, 또는 대안적으로, 하나 또는 그보다 많은 큐들(234)은 제1 장치(222)에 위치할 수 있고, 부분적으로 제1 장치(222)에 그리고 부분적으로 제2 장치(224)에 위치할 수 있고, 또는 임의의 다른 위치 또는 위치들에 위치할 수 있다. 일부 실시 예들에서, 예를 들어, 큐(234)가 제1 장치(222)의 메모리의 하나 또는 그보다 많은 위치들을 캐시하도록 구성되는 제2 장치(224)의 일관성 캐시로 구현되면, 하나 또는 그보다 많은 큐들(234)의 하나 또는 그보다 많은 것들은 본질적으로 제1 장치(222) 및 제2 장치(224) 모두에 위치할 수 있다.
제2 일관성 인터페이스(228)는 하나 또는 그보다 많은 큐들(234)의 하나 또는 그보다 많은 것들의 제1 장치(222)에 의한 액세스의 통지를 컨트롤러(230)에 제공할 수 있다. 일부 실시 예들에서, 큐를 액세스하는 것은 큐 내의 엔트리, 큐 내의 위치(예를 들어, 엔트리)에 대한 포인터, 그리고/또는 유사한 것을 액세스하는 것을 참조할 수 있다. 예를 들어, 일부 실시 예들에서, 통지(236)는 하나 또는 그보다 많은 큐들(234)의 하나 또는 그보다 많은 것들에 적어도 부분적으로 포함될 수 있는 그리고/또는 하나 또는 그보다 많은 큐들(234)의 하나 또는 그보다 많은 것들 내의 위치에 대한 포인트일 수 있는 하나 또는 그보다 많은 메모리 위치들의 액세스(예를 들어, 읽기 그리고/또는 쓰기)를 가리킬 수 있다. 일부 실시 예들에서, 그리고 구현 상세들에 의존하여, 도 2에 도시된 실시 예는 제1 일관성 인터페이스(226) 그리고/또는 제2 일관성 인터페이스(228)의 일관성 메커니즘을 이용하여 통지(236)를 제공할 수 있다. 예를 들어, 제1 일관성 인터페이스(226) 그리고/또는 제2 일관성 인터페이스(228)는 제1 장치(222) 그리고/또는 제2 장치(224)에 위치한 하나 또는 그보다 많은 캐시 위치들 그리고/또는 공유 일관성 메모리 위치들에 대한 변화를 제1 장치(222) 그리고/또는 제2 장치(224)에 통지할 수 있다. 일관성 캐시 그리고/또는 일관성 메모리 위치로 하나 또는 그보다 많은 큐들(234)의 하나 또는 그보다 많은 것들을 구현함으로써, 그리고/또는 큐 내의 하나 또는 그보다 많은 위치들에 대한 하나 또는 그보다 많은 포인터들을 구현함으로써, 일관성 메커니즘은 하나 또는 그보다 많은 큐들(234)의 하나 또는 그보다 많은 것들 그리고/또는 큐 내의 하나 또는 그보다 많은 위치들에 대한 하나 또는 그보다 많은 포인터들이 제1 장치(222)에 의해 액세스 되었다는 통지(236)를 제공할 수 있다. 구현 상세들에 의존하여, 이는 통지(236)를 제공하는데 사용되는 자원들의 양을 줄이거나 제거할 수 있다. 예를 들어, 구현 상세들에 의존하여, 이는 도어벨 레지스터, 하나 또는 그보다 많은 처리 동작들, 하나 또는 그보다 많은 인터럽트들, 그리고/또는 유사한 것의 사용을 줄이거나 제거할 수 있다.
제1 장치(222) 그리고/또는 제2 장치(224)는 컴퓨터 서버, 스토리지 서버, 네트워크 서버, 그리고/도는 유사한 것과 같은 서버, 워크스테이션, 개인용 컴퓨터, 태블릿, 스마트폰, 그리고/또는 유사한 것과 같은 컴퓨터, 가속기 장치, 스토리지 장치, 네트워크 장치, 메모리 확장, 그리고/또는 버퍼 장치와 같은 장치, GPU, NPU(neural processing unit), TPU(tensor processing unit), 그리고/또는 유사한 것, 또는 이들의 임의의 조합을 포함하는 임의의 타입의 장치로 구현될 수 있다.
제1 일관성 인터페이스(226) 그리고/또는 제2 일관성 인터페이스(228)는 CXL(Compute Express Link), 그리고/또는 CXL.mem, CXL.cache, CXL.IO, 그리고/또는 유사한 것과 같은 일관성 프로토콜, Gen-Z, OpenCAPI(Open Coherent Accelerator Processor Interface), CCIX(Cache Coherent Interconnect for Accelerators), 그리고/또는 유사한 것, 또는 이들의 임의의 조합과 같은 임의의 타입의 일관성 인터페이스 그리고/또는 일관성 프로토콜로 구현될 수 있다.
컨트롤러(230)는, 예를 들어 NVMe, NVMe-oF, PCIe, CXL.IO, SATA(Serial ATA), SCSI(Small Computer Systems Interface), SAS(Serial Attached SCSI), DMA(Direct Memory Access), RDMA(Remote DMA), ROCE(RDMA over Converged Ethernet), AMQP(Advanced Message Queuing Protocol), 그리고/또는 유사한 것, 또는 이들의 임의의 조합을 포함하는, 하나 또는 그보다 많은 큐들을 사용할 수 있는 임의의 타입의 통신 프로토콜로 구현될 수 있다.
통신 연결(232)은 PCIe, CXL, AXI(Advanced eXtensible Interface), 이더넷, TCP/IP(Transmission Control Protocol/Internet Protocol), 파이버 채널, 인피니밴드, SATA, SCSI, SAS, iWRAP, 2G, 3G, 4G, 5G, 그리고/또는 유사한 것을 포함하는 무선 네트워크의 임의의 세대, Wi-Fi의 임의의 세대, 블루투스, NFC(near-field communication), 그리고/또는 유사한 것, 또는 이들의 임의의 조합을 포함하는 유선 그리고/또는 무선 통신 매체, 인터페이스, 프로토콜, 그리고/또는 유사한 것의 임의의 타입으로 구현될 수 있다. 일부 실시 예들에서, 통신 연결(232)은 하나 또는 그보다 많은 링크들, 스위치들, 허브들, 노드들, 라우터들, 변환기들, 리피터들, 그리고/또는 유사한 것을 포함하는 통신 패브릭을 포함할 수 있다. 일부 실시 예들에서, 도 2에 도시된 스킴은 통신 연결(232) 그리고/또는 그것의 확장을 이용하여 연결된 하나 또는 그보다 많은 추가적인 일관성 인터페이스들을 갖는 하나 또는 그보다 많은 추가적인 장치를 포함할 수 있다. 일부 실시 예들에서, 통신 연결(232)은 하나 또는 그보다 많은 호스트들, 장치들, 그리고/또는 유사한 것에 의해 액세스될 수 있는 메모리를 구비한 스위치를 포함할 수 있다. 일부 실시 예들에서, 통신 연결(232)은, 피어로 구성될 수 있고 그리고 일부 실시 예들에서 하나 또는 그보다 많은 장치들에 액세스 가능할 수 있는 메모리를 포함하는 하나 또는 그보다 많은 추가적인 장치를 포함할 수 있다.
제1 장치(222) 그리고/또는 제2 장치(224) 중 하나 또는 그보다 많은 것들이 스토리지 장치로 구현되는 실시 예에서, 스토리지 장치는 예를 들어 솔리드 스테이트 미디어(예를 들어, 솔리드 스테이트 드라이브(SSD)), 마그네틱 미디어(예를 들어, 하드 디스크 드라이브(HDD)), 광학 미디어, 그리고/또는 유사한 것, 또는 이들의 임의의 조합에 기반한 임의의 타입의 불휘발성 저장 매체를 포함할 수 있다. 예를 들어, 일부 실시 예들에서, 스토리지 장치는 NAND(not-AND) 플래시 메모리, 크로스-그리드(cross-gridded) 불휘발성 메모리와 같은 지속 메모리(persistent memory), 벌크 저항 변화(bulk resistance change)를 갖는 메모리, 상 변화 메모리(PCM), 그리고/또는 유사한 것, 또는 이들의 임의의 조합에 기반한 SSD로 구현될 수 있다. 이러한 임의의 스토리지 장치는 SATA, SCSI, SAS, U.2, M.2, 그리고/또는 유사한 것과 같은 임의의 연결 구성을 이용하여, 3.5인치, 2.5인치, 1.8인치, M.2, EDSFF(Enterprise and Data Center SSD Form Factor), NF1, 그리고/또는 유사한 것과 같은 임의의 폼 팩터로 구현될 수 있다. 이러한 임의의 스토리지 장치는 서버 섀시, 서버 랙, 데이터룸, 데이터센터, 에지 데이터센터, 모바일 에지 데이터센터, 그리고/또는 이들의 임의의 조합으로 완전히 또는 부분적으로 구현될 수 있고, 그리고/또는 이들과 연관되어 사용될 수 있다.
도 3은 본 기재의 예시적인 실시 예들에 따른 하나 또는 그보다 많은 큐들 및 일관성 인터페이스를 이용하여 통신하기 위한 시스템의 예시적인 실시 예를 보여준다. 도 3에 도시된 실시 예는, 예를 들어 도 2에 도시된 스킴을 구현하는데 사용될 수 있다. 도 3에 도시된 실시 예는 통신 연결(332)을 이용하여 통신할 수 있는 호스트(322) 및 장치(324)를 포함할 수 있다.
호스트(322)는, 예를 들어 서버 또는 임의의 다른 장치로 구현될 수 있다. 호스트(322)는 일관성 인터페이스(326) 그리고/또는 프로토콜 로직(342)을 포함할 수 있다. 호스트(322)는 일관성 인터페이스(326)를 이용하여 통신 연결(332)을 통해 장치(324)와 통신할 수 있다.
일관성 인터페이스(326)는 일관성 엔진(344) 그리고/또는 스누핑 로직(346)(모니터링 로직으로도 참조될 수 있는)을 포함할 수 있다. 일부 실시 예들에서, 스누핑 로직(346)은 큐의 액세스, 예를 들어 하나 또는 그보다 많은 데이터 메모리 위치들의 하나 또는 그보다 많은 수정들(예를 들어, 쓰기들) 그리고/또는 하나 또는 그보다 많은 데이터 메모리 위치들의 하나 또는 그보다 많은 읽기들을 검출할 수 있다. 일관성 인터페이스(326)는 예를 들어 CXL, 그리고/또는 하나 또는 그보다 많은 CXL 프로토콜들 또는 임의의 다른 일관성 인터페이스, 일관성 프로토콜들, 그리고/또는 유사한 것으로 구현될 수 있다. 예를 들어, 일관성 인터페이스(326)가 CXL로 구현되는 실시 예에서, 일관성 엔진(344)은 CXL 일관성 엔진(일관성 로직으로도 참조될 수 있는)으로 구현될 수 있다. 일부 실시 예들에서, 스누핑 로직(346)은 일관성 엔진9334)과 분리되거나 그리고/또는 부분적으로 통합될 수 있다.
프로토콜 로직(342)은 예를 들어 NVMe 또는 하나 또는 그보다 많은 큐들을 사용할 수 있는 임의의 다른 통신 프로토콜과 같은 스토리지 프로토콜로 구현될 수 있다. 예를 들어, 프로토콜 로직(342)이 NVMe 프로토콜로 구현되는 실시 예에서, 프로토콜 로직(342)은 아래에서 기술되는 바와 같이 서브미션 큐(334) 그리고/또는 컴플리션 큐(335)를 구성할 수 있다. 일부 실시 예들에서, 프로토콜 로직(342) 그리고/또는 프로토콜 컨트롤러(330)는 하나 또는 그보다 많은 큐들의 사용을 수반할 수 있는 임의의 타입의 통신 프로토콜로 구현될 수 있다. 예를 들어, 호스트는 하나 또는 그보다 많은 큐들을 사용하여 하나 또는 그보다 많은 업무 목록들을 하나 또는 그보다 많은 GPUs(graphics processing units), FPGAs(field programmable gate arrays), 가속기들, 그리고/또는 유사한 것에 할당할 수 있다. 다른 예로서, 호스트는 하나 또는 그보다 많은 큐들을 이용하여 하나 또는 그보다 많은 네트워킹 장치들, 통신 장치들, 그리고/또는 유사한 것에 대한 데이터 전송들의 하나 또는 그보다 많은 목록들을 제공할 수 있다.
장치(324)는 일관성 인터페이스(328), 장치 로컬 메모리(350), 프로토콜 컨트롤러(330), 그리고/또는 장치 기능 회로(352)를 포함할 수 있다. 장치(324)는 예를 들어 가속기 장치, 스토리지 장치, 네트워크 장치, 메모리 확장 그리고/또는 버퍼 장치, GPU, NPU(neural processing unit), TPU(tensor processing unit), FPGA, 그리고/또는 유사한 것, 또는 컴퓨테이셔널 스토리지 장치와 같은 이들의 임의의 조합을 포함하는 임의의 타입의 장치로 구현될 수 있다.
장치 기능 회로(352)는 장치(324)가 의도된 기능을 수행하게 할 수 있는 임의의 장치를 포함할 수 있다. 예를 들어, 장치(324)가 가속기로 구현되면, 장치 기능 회로(352)는 하나 또는 그보다 많은 프로세서들(예를 들어, x86 프로세서들과 같은 CISC(complex instruction set computer) 프로세서들 그리고/또는 RISC-V 그리고/또는 ARM 프로세서들과 같은 RISC(reduced instruction set computer) 프로세서들과 같은 CPU들), ASICs(application specific integrated circuits), FPGAs, 그리고/또는 유사한 것 또는 이들의 임의의 조합을 포함할 수 있다. 다른 예로서, 장치(324)가 스토리지 장치로 구현되면, 장치 기능 회로(352)는 하나 또는 그보다 많은 저장 매체, 스토리지 장치 컨트롤러, 매체 변환 레이어(예를 들어, 플래시 변환 레이어(FTL)), 그리고/또는 유사한 것 또는 이들의 임의의 조합으로 구현될 수 있다.
일관성 인터페이스(328)는 일관성 엔진(358) 그리고/또는 스누핑 로직(360)(모니터링 로직으로도 참조될 수 있는)을 포함할 수 있다. 일관성 인터페이스(328)는 예를 들어 CXL 그리고/또는 하나 또는 그보다 많은 CXL 프로토콜들 또는 임의의 다른 일관성 인터페이스, 일관성 프로토콜들, 그리고/또는 유사한 것으로 구현될 수 있다. 예를 들어, 일관성 인터페이스(328)가 CXL로 구현되는 실시 예에서, 일관성 엔진(358)은 CXL 일관성 엔진(일관성 로직으로도 참조될 수 있는)으로 구현될 수 있다. 일부 실시 예들에서, 스누핑 로직(360)은 일관성 엔진(358)과 분리되거나 그리고/또는 부분적으로 통합될 수 있다.
일부 실시 예들에서, 장치 로컬 메모리(350)의 전부 또는 일부는 메모리 일관성 프로토콜에 의해 일관되게 유지될 수 있다. 예를 들어, 일관성 인터페이스(328)가 CXL로 구현되는 실시 예에서, 일관성 인터페이스(328)는 CXL.mem 프로토콜을 이용하여 장치(324) 그리고/또는 호스트(322)와 장치 로컬 메모리(350)의 일관성을 유지할 수 있다.
대안적으로 또는 추가적으로, 일부 실시 예들에서, 장치 로컬 메모리(350)의 전부 또는 일부는 캐시 일관성 프로토콜에 의해 일관되게 유지될 수 있다. 예를 들어, 일관성 인터페이스(328)가 CXL로 구현되는 실시 예에서, 일관성 인터페이스(328)는 CXL.cache 프로토콜을 이용하여 장치(324) 그리고/또는 호스트(322)와 장치 로컬 메모리(350)의 전부 또는 일부의 일관성을 유지할 수 있다.
대안적으로 또는 추가적으로, 일부 실시 예들에서, 일관성 인터페이스의 캐시 일관성 메커니즘 및 메모리 일관성 메커니즘이 조합되어 사용되어 장치 로컬 메모리(350)의 전부 또는 일부를 일관되게 유지할 수 있다. 예를 들어, 일관성 인터페이스(328)가 CXL로 구현되는 실시 예에서, 일관성 인터페이스(328)는 CXL.mem 프로토콜을 이용하여 장치 로컬 메모리(350)의 전부 또는 일부를 일관성 메모리로서 구성할 수 있고, 그리고 CXL.cache 프로토콜을 이용하여 장치 로컬 메모리(350)의 일관적인 부분에 위치할 수 있는 큐에 대한 통지 메커니즘을 구현할 수 있다.
일부 실시 예들에서, 장치 로컬 메모리(350)는 임의의 수의 큐들로 구성될 수 있다. 예를 들어, 도 3에 도시된 실시 예에서, 장치 로컬 메모리(350)는 서브미션 큐(334) 그리고/또는 컴플리션 큐(335)로 구성될 수 있다.
프로토콜 컨트롤러(330)는 예를 들어 하나 또는 그보다 많은 큐들을 사용할 수 있는 NVMe 또는 임의의 다른 통신 프로토콜과 같은 스토리지 프로토콜을 구현할 수 있다. 예를 들어, 프로토콜 컨트롤러(330)가 NVMe를 구현하는 실시 예에서, 서브미션 큐(334) 그리고/또는 컴플리션 큐(335)는 각각 NVMe 서브미션 큐 그리고/또는 NVMe 컴플리션 큐로 구성될 수 있다.
일부 실시 예들에서, 일관성 인터페이스(328)는 서브미션 큐(334) 그리고/또는 컴플리션 큐(335)의 호스트(322)에 의한 액세스의 통지(336)를 프로토콜 컨트롤러(330)에 제공할 수 있다. 예를 들어, 도 3에 도시된 실시 예는 일관성 엔진(358) 그리고/또는 스누핑 로직(360)을 사용하여, 아래에 더 상세히 기술되는 바와 같이 서브미션 큐(334) 그리고/또는 컴플리션 큐(335)에 대한 변화의 통지를 프로토콜 컨트롤러(330)에 제공할 수 있다.
일부 실시 예들에서, 일관성 인터페이스(326)는 서브미션 큐(334) 그리고/또는 컴플리션 큐(335)의 장치(324)에 의한 액세스의 통지를 호스트(322)에서 프로토콜 로직(342)에 제공할 수 있다. 예를 들어, 도 3에 도시된 실시 예는 일관성 엔진(344) 그리고/또는 스누핑 엔진(346)을 이용하여 아래에 기술되는 바와 같이 서브미션 큐(334) 그리고/또는 컴플리션 큐(335)에 대한 변화의 통지를 프로토콜 로직(342)에 제공할 수 있다.
일부 실시 예들에서, 서브미션 큐(334) 그리고/또는 컴플리션 큐(335)의 액세스는 읽기 데이터, 쓰기 데이터, 그리고/또는 유사한 것과 같은 데이터의 전송을 수반할 수 있는 엔트리(예를 들어, 커맨드)를 수반할 수 있다. 일부 실시 예들에서, 이러한 데이터는 장치 로컬 메모리(350)(공유 메모리로서 일관되게 유지될 수 있는 것의 적어도 일부)에, 다른 장치 메모리에, 시스템 메모리(예를 들어, 호스트(322)의 호스트 메모리)에, 또는 임의의 다른 위치에 적어도 부분적으로 존재할 수 있다.
도 4는 본 기재의 예시적인 실시 예들에 따른 하나 또는 그보다 많은 큐들 그리고 일관성 인터페이스를 이용하여 통신하는 방법의 예시적인 실시 예를 보여준다. 도 4에 도시된 실시 예는 도 3에 도시된 시스템과 함께 사용될 수 있다.
설명의 목적을 위하여, 도 3에 도시된 예시적인 실시 예는 도 4와 연관되어, 그리고 일관성 인터페이스들(326, 328)이 CXL로 구현되고 그리고 프로토콜 로직(342) 및 프로토콜 컨트롤러(330)가 NVMe로 구현되는 시스템의 맥락에서 기술될 수 있다. 그러나 본 원리들은 이러한 또는 임의의 다른 구현 상세들로 한정되지 않는다.
도 3 및 도 4를 참조하면, 동작 462에서, 일관성 엔진들(344 그리고/또는 358)의 하나 또는 모두는 장치(324)의 장치 로컬 메모리(350)의 적어도 일부를, 예를 들어 CXL.mem 프로토콜을 이용한 호스트(322)의 액세스를 위한 공유 일관성 메모리로 구성할 수 있다. 일부 실시 예들에서, 일관성 엔진들(344 그리고/또는 358)의 하나 또는 모두는 공유 일관성 메모리의 일부 또는 전부를, 예를 들어 CXL.cache 프로토콜을 이용하여 모니터되게 구성하여, 서브미션 큐(334) 그리고/또는 컴플리션 큐(335)가 업데이트되는 때에 호스트(322) 그리고/또는 장치(324)에 통지를 제공할 수 있다. 따라서, 일부 실시 예들에서, 서브미션 큐(334) 그리고/또는 컴플리션 큐(335)는 CXL.mem 프로토콜을 이용하여 장치(324)의 장치 로컬 메모리(350)의 공유 부분에 구성될 수 있고, 그리고 CXL.cache 프로토콜의 일관성 메커니즘(예를 들어, 일관성 규칙들)은 서브미션 큐(334) 그리고/또는 컴플리션 큐(335)가 구성되는 메모리 위치들의 일부 또는 전부에 적용될 수 있다.
CXL로 구현되는 일부 실시 예들에서, 일관성 엔진들(344 그리고/또는 358)은 예를 들어 CXL.cache H2D(host-to-device) 및 D2H(device-to-host) 요청, 응답, 그리고 데이터 채널들을 이용하여 하드웨어-기반 일관성 관리(management)를 구현하여, 호스트(322) 및 장치(324) 사이의 일관성을 유지할 수 있다. 다른 실시 예들에서, 캐시 일관성(예를 들어, 캐시 일치성)은 하드웨어, 소프트웨어, 또는 이들의 임의의 조합으로 유지될 수 있다.
동작 464에서, 서브미션 큐(334) 그리고/또는 컴플리션 큐(335)는 적어도 부분적으로 장치 로컬 메모리(350)의 공유 부분에 존재하도록 구성될 수 있다. 예를 들어, 프로토콜 로직(342) 그리고/또는 프로토콜 컨트롤러(330)가 NVMe로 구현되는 실시 예에서, 서브미션 큐(334) 그리고/또는 컴플리션 큐(335)는 각각 NVMe 서브미션 큐 그리고/또는 NVMe 컴플리션 큐로 구성될 수 있다. 일부 실시 예들에서, 이러한 배열은 호스트(322)가 서브미션 큐(334) 그리고/또는 컴플리션 큐(335)를 호스트 메모리의 일부인 것처럼 일관적으로 액세스하게 하지만, 호스트(322)가 서브미션 큐(334) 그리고/또는 컴플리션 큐(335)의 하나 또는 그보다 많은 엔트리들을 업데이트할 때에, CXL.cache 프로토콜은 스누프(snoop)를 제공하고, 따라서 아래에 기술되는 바와 같이 프로토콜 컨트롤러(330)에 경고(예를 들어, 통지(336))를 제공한다. 일부 실시 예들에서, 서브미션 큐(334) 그리고/또는 컴플리션 큐(335)는 CXL.cache를 이용하여 직접 구성될 수 있다.
동작 466에서, 스누핑 로직(346 그리고/또는 360)은 예를 들어 장치 로컬 메모리(350)의 공유 부분의 서브미션 큐(334) 그리고/또는 컴플리션 큐(355)의 일부 또는 전부를 모니터하도록 구성될 수 있다. 예를 들어, 일부 실시 예들에서, 호스트(322)가 서브미션 큐(334)의 하나 또는 그보다 많은 엔트리들을 업데이트(예를 들어, 쓰기)할 때에, 스누핑 로직(360)은 서브미션 큐(334)를 모니터하고 그리고 경고(예를 들어, 통지(336))를 프로토콜 컨트롤러(330)에 제공하도록 구성될 수 있다. 일부 실시 예들에서, 서브미션 큐(334) 그리고/또는 컴플리션 큐(335)의 하나 또는 그보다 많은 엔트리들의 호스트(322)에 의한 업데이트는 호스트(322)에 의한 장치(324)로의 스누프 요청을 생성할 수 있다. 일부 실시 예들에서, 일관성 엔진(358) 그리고/또는 스누핑 로직(360)은 스누프 요청에 기반하여 프로토콜 컨트롤러(330)에 대한 경고를 생성하도록 구성될 수 있다.
동작 468에서, 스누핑 로직(360)은 호스트(322)가 서브미션 큐(334) 그리고/또는 컴플리션 큐(335)의 하나 또는 그보다 많은 엔트리들을 갱신했는지 판단하고, 그리고 경고를 예를 들어 통지(336)로서 프로토콜 컨트롤러(330)에 전송할 수 있다.
동작 470에서, 프로토콜 컨트롤러(330)는 경고가 수신되는 것에 기반하여, 서브미션 큐(334) 그리고/또는 컴플리션 큐(335)의 업데이트를 처리할 수 있다. 방법은 동작 468로 돌아가, 스누핑 로직(360)이 서브미션 큐(334) 그리고/또는 컴플리션 큐(335)의 다른 업데이트를 검출하는 것을 기다릴 수 있다.
도 4에 도시된 실시 예는 호스트에 의한 큐의 액세스에 기반하여 프로토콜 컨트롤러(330)가 일관성 인터페이스(328)로부터 경고(예를 들어, 통지(336)로서)를 수신하는 맥락에서 설명될 수 있다. 그러나 도 4에 도시된 방법은 장치(324)에 의한 서브미션 큐(334) 그리고/또는 컴플리션 큐(335)의 액세스에 기반하여 일관성 인터페이스(326)로부터 호스트(322)의 프로토콜 로직(342)으로 경고(예를 들어, 통지(337)로서)를 제공하도록 서브미션 큐(334) 그리고/또는 컴플리션 큐(335)에 하나 또는 그보다 많은 스누프들을 구성하는 유사한 방식으로 동작하도록 구성될 수 있다.
구현 상세들에 의존하여, 도 4 그리고/또는 도 3을 참조하여 설명된 시스템 그리고/또는 방법은 도 1에 도시된 것과 유사한 큐-기반 통신 프로토콜을 구현하는데 사용될 수 있지만, 도어벨 레지스터들(114 그리고/또는 116) 그리고/또는 수반되는 인터럽트들 그리고/또는 다른 자원들은 일관성 인터페이스들(326 그리고/또는 328)의 일관 메커니즘에 의해 부분적으로 또는 완전히 대체될 수 있다. 따라서, 구현 상세들에 의존하여, 도 4 그리고/또는 도 3을 참조하여 설명된 시스템 그리고/또는 방법은 일관성 인터페이스(326 그리고/또는 328)의 일관성 메커니즘을 이용하여, 도 1에 도시된 도어벨 구조와 연관된 시간, 전력 소비, 연산들, 메모리 공간, 오버헤드, 그리고/또는 유사한 것을 줄일 수 있다.
예를 들어, 도 1을 참조하면, 본 기재에 따른 일관성 메커니즘을 이용하는 일부 실시 예들에서, 동작들 (1) 그리고/또는 (2)는, 예를 들어 도 3에 도시된 바와 같은 장치 캐시 그리고/또는 장치 메모리 위치에 위치할 수 있는 서브미션 큐에 호스트가 서브미션 큐 엔트리를 기입하는 동작에 의해 부분적으로 대체될 수 있고, 그리고 일관성 메커니즘은 서브미션 큐가 업데이트 되었다는 통지를 장치에 제공(예를 들어, 스누프 그리고/또는 경고를 이용하여)할 수 있다.
다른 예로서, 도 1을 참조하면, 본 기재에 따른 일관성 메커니즘을 이용하는 일부 실시 예들에서, 동작들 (5) 그리고/또는 (6)은, 예를 들어 도 3에 도시된 바와 같은 장치 캐시 그리고/또는 장치 메모리 위치에 위치할 수 있는 컴플리션 큐에 장치가 컴플리션을 기입하는 동작에 의해 적어도 부분적으로 대체될 수 있고, 일관성 메커니즘은 컴플리션 큐가 업데이트 되었다는 통지를 호스트에 제공(예를 들어, 스누프 그리고/또는 경고를 이용하여)할 수 있다.
추가적인 예로서, 도 1을 참조하면, 본 기재에 따른 일관성 메커니즘을 이용하는 일부 실시 예들에서, 제1 장치(예를 들어, 호스트(102) 그리고/또는 장치(104)에 의한 임의의 포인터(103, 105, 107, 그리고/또는 109)의 임의의 액세스는, 예를 들어 도 2, 도 3, 그리고/또는 도 4에 도시된 바와 같이 일관성 메커니즘을 이용하여 다른 장치에 통지될 수 있다.
다시 도 3을 참조하면, 일관성 인터페이스들(326 그리고/또는 328)의 일관성 메커니즘은 통지(336)를 제공하여, 큐가 업데이트되는 시간에 또는 그와 가까운 시간에 큐가 업데이트 되었음을 프로토콜 컨트롤러(330)가 판단하게 할 수 있다. 일부 실시 예들에서, 일관성 인터페이스들(326 그리고/또는 328)의 일관성 메커니즘은 프로토콜 컨트롤러(330)에 대한 하나 또는 그보다 많은 업데이트들의 순서를 유지할 수 있다.
일부 실시 예들에서, 프로토콜 컨트롤러(330)가 큐로부터 엔트리를 가져올 때, 일관성 인터페이스들(326 그리고/또는 328)의 일관성 메커니즘은 호스트(322)로 경고를 제공하여, 예를 들어 호스트(322)가 큐의 헤드를 추적하게 할 수 있다(예를 들어, 큐 넘침을 줄이거나 방지하기 위해). 대안적으로 또는 추가적으로, 일부 실시 예들에서, 도 3에 도시된 시스템은 도 1을 참조하여 위에서 기술된 것과 유사한 서브미션 큐 헤드 도어벨 메커니즘을 이용하여, 프로토콜 컨트롤러(330)가 큐로부터 엔트리를 가져올 때 호스트(322)에 통지할 수 있다.
일부 실시 예들에서, 하나 또는 그보다 많은 큐들을 위한 메모리 공간은 장치에 구성될 수 있고, 그리고 일관성 프로토콜은 일관성 프로토콜의 일관성 메커니즘을 이용하여 메모리 공간의 일부 또는 전부를 모니터(예를 들어, 스누프)하여, 호스트가 하나 또는 그보다 많은 큐들의 하나 또는 그보다 많은 엔트리들을 업데이트하는 것에 기반하여 장치에 통지를 제공할 수 있다.
일부 실시 예들에서, 통신 프로토콜(예를 들어, NVMe)은 큐에 대한 부분 업데이트를 줄이거나 금지하도록 구성될 수 있다. 일부 실시 예들에서, 통신 프로토콜(예를 들어, NVMe)은 원자 업데이트들을 구현하도록 구성될 수 있다. 예를 들어, 일부 실시 예들에서, 큐의 하나 또는 그보다 많은 엔트리들은 동시에 업데이트될 수 있다. 구현 상세들에 의존하여, 이는, 예를 들어 큐에 대한 부분 업데이트가 일관성 메커니즘의 스누프 그리고/또는 연관된 경고를 트리거하고, 그리고 하나 또는 그보다 많은 엔트리들이 완전히 업데이트되기 전에 프로토콜 컨트롤러가 부분 업데이트를 읽으면 발생할 수 있는 에러를 줄이거나 방지할 수 있다.
일부 실시 예들에서, 통신 프로토콜(예를 들어, NVMe)은 둘러싸는(wrapping) 큐 사이즈(예를 들어, 서브미션 큐 그리고/또는 컴플리션 큐)를 구현(예를 들어, 정의)하여, 일관성 인터페이스의 일관성 메커니즘을 이용한 업데이트 통지를 구현할 수 있다.
일부 실시 예들에서, 통신 프로토콜(예를 들어, NVMe)은 하나 또는 그보다 많은 큐 메모리 어드레스들 상에 하나 또는 그보다 많은 일관성 세팅들(예를 들어, 스누프 세팅, 경고 세팅, 그리고/또는 유사한 것)을 구현(예를 들어, 정의)할 수 있다.
일부 실시 예들에서, 큐 엔트리의 업데이트(예를 들어, 호스트에 의한 서브미션 큐 엔트리의 추가)는 장치(예를 들어, SSD와 같은 스토리지 장치) 내의 활동을 트리거할 수 있다.
일부 실시 예들에서, 호스트는 스누프 그리고/또는 경고에 기반하여 인터럽트될 수 있다.
일부 실시 예들에서, 장치(예를 들어, 호스트, 장치, 그리고/또는 유사한 것)를 부팅할 때, 장치는 본 기재의 예시적인 실시 예에 따른 하나 또는 그보다 많은 능력들을 알릴 수 있다. 예를 들어, 장치가 NVMe 장치로 구현되면, 장치는 일관성 메커니즘을 이용하여 큐의 업데이트를 통지하는 것이 가능함을 알릴(예를 들어, 구성 비트를 이용하여) 수 있다.
호스트 기능, 장치 기능, 그리고/또는 유사한 것(예를 들어, 프로토콜 로직(342), 컨트롤러(230), 프로토콜 컨트롤러(330), 스누프 로직(346 그리고/또는 360), 일관성 엔진(344 그리고/또는 358), 그리고/또는 유사한 것)의 임의의 것을 포함하는 여기에 기술된 임의의 기능은, 예를 들어, 임의의 타입의 메모리에 저장된 명령어들을 실행하는, 하드웨어 그리고/또는 소프트웨어 조합 로직, 순차 로직, 타이머들, 카운터들, 레지스터들, 스테이트 머신들, 동적 랜덤 액세스 메모리(DRAM) 그리고/또는 정적 랜덤 액세스 메모리(SRAM)와 같은 휘발성 메모리들, 플래시 메모리, 크로스-그리드 불휘발성 메모리와 같은 지속 메모리, 벌크 저항 변화를 갖는 메모리, 상 변화 메모리(PCM), 그리고/또는 유사한 것 그리고/또는 이들의 임의의 조합을 포함하는 불휘발성 메모리, CPLDs(complex programmable logic devices), FPGAs(field programmable gate arrays), ASICs(application specific integrated circuits), x86 프로세서들과 같은 CISC(complex instruction set computer) 프로세서들 그리고/또는 ARM 프로세서들과 같은 RISC(reduced instruction set computer) 프로세서들을 포함하는 CPUs, GPUs(graphics processing units), NPUs(neural processing units), TPUs(tensor processing units), 그리고/또는 유사한 것을 포함하는 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수 있다. 일부 실시 예들에서, 하나 또는 그보다 많은 구성 요소들은 SoC(system-on-chip)으로 구현될 수 있다.
도 5는 본 기재의 예시적인 실시 예들에 따른 호스트 장치의 예시적인 실시 예를 보여준다. 도 5에 도시된 호스트 장치(500)는, 예를 들어 여기에 기재된 호스트들 중 임의의 것을 구현하는데 사용될 수 있다. 도 5에 도시된 호스트 장치(500)는 메모리 컨트롤러(504)를 포함할 수 있는 프로세서(502), 시스템 메모리(506), 호스트 로직(508) 그리고/또는 일관성 인터페이스(510)를 포함할 수 있다. 도 5에 도시된 구성 요소들의 전부 또는 임의의 것은 하나 또는 그보다 많은 시스템 버스들(512)을 통해 통신할 수 있다. 일부 실시 예들에서, 도 5에 도시된 구성 요소들의 하나 또는 그보다 많은 것들은 다른 구성 요소들을 이용하여 구현될 수 있다. 예를 들어, 일부 실시 예들에서, 호스트 컨트롤 로직(508)은 시스템 메모리(506) 또는 다른 메모리에 저장된 명령어들을 실행하는 프로세서(502)에 의해 구현될 수 있다. 일부 실시 예들에서, 호스트 로직(508)은, 예를 들어 하나 또는 그보다 많은 큐들, 그리고/또는 유사한 것을 읽고 그리고/또는 쓰는 프로토콜 로직(342)을 포함하는, 여기에 기재된 호스트 기능의 임의의 것을 구현할 수 있다.
도 6은 본 기재의 예시적인 실시 예들에 따른 장치의 예시적인 실시 예를 보여준다. 도 6에 도시된 실시 예(600)는, 예를 들어 여기에 기재된 장치들 중 어느 것을 구현하는데 사용될 수 있다. 장치(600)는 장치 컨트롤러(602), 통신 로직(608), 장치 기능 회로(606), 그리고/또는 일관성 인터페이스(610)를 포함할 수 있다. 도 6에 도시된 구성 요소들은 하나 또는 그보다 많은 장치 버스들(612)을 통해 통신할 수 있다. 통신 로직(608)은, 예를 들어 컨트롤러(230), 프로토콜 컨트롤러(330), 그리고/또는 유사한 것을 구현하는데 사용될 수 있다.
장치 기능 회로(606)는 장치(600)의 주요 기능을 구현하는 임의의 하드웨어를 포함할 수 있다. 예를 들어, 장치(600)가 스토리지 장치로 구현되면, 장치 기능 회로(606)는 하나 또는 그보다 많은 플래시 메모리 장치들과 같은 저장 매체, FTL, 그리고/또는 유사한 것을 포함할 수 있다. 다른 예로서, 장치(600)가 네트워크 인터페이스(NIC)로 구현되면, 장치 기능 회로(606)는 하나 또는 그보다 많은 모뎀들, 네트워크 인터페이스들, 물리 계층들(PHYs), 매체 액세스 컨트롤 레이어들(MACs), 그리고/또는 유사한 것을 포함할 수 있다. 추가적인 예로서, 장치(600)가 가속기로 구현되면, 장치 기능 회로(606)는 하나 또는 그보다 많은 가속기 회로들, 메모리 회로들, 그리고/또는 유사한 것을 포함할 수 있다.
도 7은 본 기재의 예시적인 실시 예들에 따른 통신을 위한 방법의 실시 예를 보여준다. 방법은 동작 702에서 시작할 수 있다. 동작 704에서, 방법은 제1 장치에 의해 큐를 액세스할 수 있고, 큐는 제2 장치에 의해 액세스 가능하고, 제1 장치는 일관성 인터페이스에 의해 제2 장치와 연결될 수 있다. 예를 들어, 일부 실시 예들에서, 제1 장치는 호스트로 구현될 수 있고, 제2 장치는 장치로 구현될 수 있고, 그리고 큐는 통신 프로토콜을 위한 서브미션 큐로 구현될 수 있다. 동작 706에서, 방법은 일관성 인터페이스에 의해 제2 장치에 액세스를 알릴 수 있다. 예를 들어, 일부 실시 예들에서, 액세스는 호스트가 서브미션 큐에 엔트리를 배치함으로써 구현될 수 있고, 그리고 통지는 일관성 인터페이스가 서브미션 큐를 모니터(예를 들어, 스누프)하고 그리고 장치로 경고를 전송하게 구성함으로써 구현될 수 있다. 방법은 동작 708에서 종료할 수 있다.
도 7에 도시된 실시 예는, 여기에 기재된 모든 다른 실시 예들과 같이, 예시적인 동작들 그리고/또는 구성 요소들이다. 일부 실시 예들에서, 일부 동작들 그리고/또는 구성 요소들은 생략될 수 있고, 그리고/또는 다른 동작들 그리고/또는 구성 요소들이 포함될 수 있다. 또한, 일부 실시 예들에서, 동작들 그리고/또는 구성 요소들의 시간적 그리고/또는 공간적 순서는 변할 수 있다. 일부 구성 요소들 그리고/또는 동작들이 개별 구성 요소들로 도시될 수 있지만, 일부 실시 예들에서, 별개로 도시된 일부 구성 요소들 그리고/또는 동작들은 단일 구성 요소들 그리고/또는 동작들로 통합될 수 있고, 그리고/또는 단일 구성 요소들 그리고/또는 동작들로 도시된 일부 구성 요소들 그리고/또는 동작들은 다수의 구성 요소들 그리고/또는 동작들로 구현될 수 있다.
위에 기재된 일부 실시 예들은 다양한 구현 상세들의 맥락에서 설명되었지만, 본 기재의 원리들은 이러한 그리고 임의의 다른 구체적인 상세들로 한정되지 않는다. 예를 들어, 일부 기능은 특정한 구성 요소들에 의해 구현되는 것으로 설명되었지만, 다른 실시 예들에서, 해당 기능은 서로 다른 위치들에서 다양한 사용자 인터페이스들을 갖는 서로 다른 시스템들 및 구성 요소들 사이에 분산될 수 있다. 특정한 실시 예들이 구체적인 프로세스들, 동작들 등을 갖는 것으로 설명되었지만, 이러한 용어들은 또한 특정한 프로세스, 동작 등이 다수의 프로세스들, 동작들 등으로 구현될 수 있는, 또는 다수의 프로세스들, 동작들 등이 단일 프로세스, 단계 등으로 통합될 수 있는 실시 예들을 포함한다. 구성 요소 또는 요소에 대한 참조는 해당 구성 요소 또는 요소의 일부만을 참조할 수 있다. 예를 들어, 블록에 대한 참조는 전체 블록 또는 하나 또는 그보다 많은 서브 블록들을 참조할 수 있다. 본 기재 및 청구항들의 '제1' 및 '제2'와 같은 용어들의 사용은 요소들을 구별하기 위한 목적이며, 맥락에서 명백히 다르지 않으면 공간적 또는 시간적 순서를 가리키지 않을 수 있다. 일부 실시 예들에서, 요소에 대한 참조는 요소의 적어도 일부에 대한 참조일 수 있고, 예를 들어, '기반하여'는 '적어도 부분적으로 기반하여' 그리고/또는 유사한 것을 참조할 수 있다. 제1 요소에 대한 참조는 제2 요소의 존재를 암시하지 않을 수 있다. 여기에 기재된 원리들은 독립적인 용도를 가질 수 있고, 그리고 개별적으로 포함될 수 있고, 모든 실시 예들이 모든 원리들을 활용하지 않을 수 있다. 그러나 원리들은 또한 다양한 조합들로 포함될 수 있고, 이들 중 일부는 시너지가 발생하는 방식으로 개별 원리들의 장점을 증폭할 수 있다.
위에서 기술된 다양한 상세들 및 실시 예들은 조합되어 본 기재의 원리들에 따른 추가적인 실시 예들을 생성할 수 있다. 본 기재의 기술 사상으로부터 멀어지지 않으면서 본 기재의 원리들이 배열 및 상세에서 수정될 수 있으므로, 이러한 변화들 및 수정들은 본 기재의 범위에 속하는 것으로 여겨진다.
102: 호스트
103: 헤드
104: 장치
105: 테일
107: 헤드
109: 테일
110: 호스트 메모리
112: 컨트롤러
114: 서브미션 큐 테일 도어벨
116: 컴플리션 큐 헤드 도어벨
222: 제1 장치
224: 제2 장치
226: 일관성 인터페이스
228 일관성 인터페이스
230: 컨트롤러
234: 큐(들)
236: 통지

Claims (20)

  1. 방법에 있어서:
    제1 장치에 의해 큐를 액세스하는 단계; 그리고
    일관성 인터페이스에 의해 제2 장치에 상기 큐의 액세스를 통지하는 단계를 포함하고,
    상기 큐는 상기 제2 장치에 의해 액세스 가능하고, 그리고 상기 제1 장치는 상기 일관성 인터페이스에 의해 상기 제2 장치와 연결되는 방법.
  2. 제1항에 있어서,
    상기 통지하는 단계는 모니터링 메커니즘에 의해 통지하는 단계를 포함하는 방법.
  3. 제1항에 있어서,
    상기 통지하는 단계는 모니터링 요청을 생성하는 단계를 포함하는 방법.
  4. 제3항에 있어서,
    상기 통지하는 단계는 상기 모니터링 요청에 기반하여 경고를 생성하는 단계를 더 포함하는 방법.
  5. 제1항에 있어서,
    상기 큐는 서브미션 큐를 포함하는 방법.
  6. 제1항에 있어서,
    상기 액세스하는 단계는 상기 큐로부터 엔트리를 읽는 단계를 포함하는 방법.
  7. 제1항에 있어서,
    상기 액세스하는 단계는 상기 큐에 엔트리를 기입하는 단계를 포함하는 방법.
  8. 제7항에 있어서,
    상기 엔트리는 커맨드를 포함하는 방법.
  9. 제7항에 있어서,
    상기 엔트리는 컴플리션을 포함하는 방법.
  10. 제1항에 있어서,
    상기 제1 장치는 호스트를 포함하고,
    상기 제2 장치는 장치를 포함하고, 그리고
    상기 큐는 상기 장치에 위치하는 방법.
  11. 제1항에 있어서,
    상기 큐는 통신 프로토콜과 연관되는 방법.
  12. 제11항에 있어서,
    상기 통신 프로토콜은 스토리지 프로토콜을 포함하는 방법.
  13. 장치에 있어서:
    일관성 인터페이스; 그리고
    상기 일관성 인터페이스를 이용하여 큐를 이용하여 통신하고, 그리고 상기 일관성 인터페이스에 의해 상기 큐의 액세스의 통지를 수신하도록 구성되는 컨트롤러를 포함하는 장치.
  14. 제13항에 있어서,
    상기 장치는 공유 로컬 메모리를 포함하고, 그리고
    상기 일관성 인터페이스는 상기 공유 로컬 메모리의 적어도 일부의 일관성을 유지하도록 구성되는 장치.
  15. 제14항에 있어서,
    상기 큐는 상기 공유 로컬 메모리의 상기 적어도 일부에 적어도 부분적으로 위치하는 장치.
  16. 제15항에 있어서,
    상기 일관성 인터페이스는 상기 액세스에 기반하여 모니터링 요청을 수신하도록 구성되는 장치.
  17. 제16항에 있어서,
    상기 일관성 인터페이스는 상기 모니터링 요청에 기반하여 경고를 생성하도록 구성되는 장치.
  18. 제17항에 있어서,
    상기 컨트롤러는 상기 일관성 인터페이스로부터 상기 통지로서 상기 경고를 수신하도록 구성되는 장치.
  19. 호스트; 그리고
    일관성 인터페이스를 이용하여 상기 호스트와 결합되는 장치를 포함하고,
    상기 장치는 상기 일관성 인터페이스를 이용하여 큐를 이용하여 상기 호스트와 통신하고, 그리고 상기 호스트에 의한 상기 큐의 액세스의 통지를 상기 일관성 인터페이스에 의해 수신하도록 구성되는 컨트롤러를 포함하는 시스템.
  20. 제19항에 있어서,
    상기 장치는 공유 로컬 메모리를 포함하고,
    상기 일관성 인터페이스는 상기 공유 로컬 메모리의 적어도 일부의 일관성을 유지하도록 구성되고, 그리고
    상기 큐는 상기 공유 로컬 메모리의 상기 적어도 일부에 적어도 부분적으로 위치하는 시스템.
KR1020230003677A 2022-01-27 2023-01-10 일관성 인터페이스를 갖는 큐 관리를 위한 시스템들, 방법들, 그리고 장치들 KR20230115890A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202263303985P 2022-01-27 2022-01-27
US63/303,985 2022-01-27
US17/712,066 2022-04-01
US17/712,066 US12117944B2 (en) 2022-01-27 2022-04-01 Systems, methods, and devices for queue management with a coherent interface

Publications (1)

Publication Number Publication Date
KR20230115890A true KR20230115890A (ko) 2023-08-03

Family

ID=85036122

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020230003677A KR20230115890A (ko) 2022-01-27 2023-01-10 일관성 인터페이스를 갖는 큐 관리를 위한 시스템들, 방법들, 그리고 장치들

Country Status (4)

Country Link
US (1) US12117944B2 (ko)
EP (1) EP4220375A1 (ko)
KR (1) KR20230115890A (ko)
TW (1) TW202345003A (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117573208B (zh) * 2024-01-12 2024-05-28 深圳宏芯宇电子股份有限公司 指令信息分配方法及存储器存储装置
CN118363914B (zh) * 2024-06-19 2024-08-30 山东云海国创云计算装备产业创新中心有限公司 数据处理方法、固态硬盘设备及主机

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6564271B2 (en) * 1999-06-09 2003-05-13 Qlogic Corporation Method and apparatus for automatically transferring I/O blocks between a host system and a host adapter
US9122515B2 (en) 2012-12-19 2015-09-01 Dell Products L.P. Completion notification for a storage device
CN105389268B (zh) 2014-09-04 2018-08-28 光宝科技股份有限公司 资料储存系统及其运作方法
US10061743B2 (en) * 2015-01-27 2018-08-28 International Business Machines Corporation Host based non-volatile memory clustering using network mapped storage
KR102365113B1 (ko) 2015-05-27 2022-02-18 삼성전자주식회사 적응적 인터럽트 처리 방법 및 장치와 이를 적용하는 호스트, i/o 디바이스 및 시스템
US10235102B2 (en) 2015-11-01 2019-03-19 Sandisk Technologies Llc Methods, systems and computer readable media for submission queue pointer management
CN106775434B (zh) 2015-11-19 2019-11-29 华为技术有限公司 一种NVMe网络化存储的实现方法、终端、服务器及系统
CN107992436B (zh) * 2016-10-26 2021-04-09 华为技术有限公司 一种NVMe数据读写方法及NVMe设备
KR102392844B1 (ko) * 2017-03-10 2022-05-03 삼성전자주식회사 메모리 컨트롤러 및 그것을 포함하는 저장 장치
US10452278B2 (en) 2017-03-24 2019-10-22 Western Digital Technologies, Inc. System and method for adaptive early completion posting using controller memory buffer
US20190035445A1 (en) * 2017-07-31 2019-01-31 CNEX Labs, Inc. a Delaware Corporation Method and Apparatus for Providing Low Latency Solid State Memory Access
CN109983449B (zh) 2018-06-30 2022-03-29 华为技术有限公司 数据处理的方法和存储系统
CN113448891B (zh) 2020-03-25 2023-07-21 澜起科技股份有限公司 存储器控制器以及用于监测对存储模块的访问的方法
US12061562B2 (en) 2020-05-29 2024-08-13 Netlist, Inc. Computer memory expansion device and method of operation
US11561912B2 (en) * 2020-06-01 2023-01-24 Samsung Electronics Co., Ltd. Host controller interface using multiple circular queue, and operating method thereof

Also Published As

Publication number Publication date
US20230236994A1 (en) 2023-07-27
US12117944B2 (en) 2024-10-15
EP4220375A1 (en) 2023-08-02
TW202345003A (zh) 2023-11-16

Similar Documents

Publication Publication Date Title
US10824565B2 (en) Configuration based cache coherency protocol selection
US10169080B2 (en) Method for work scheduling in a multi-chip system
KR20230115890A (ko) 일관성 인터페이스를 갖는 큐 관리를 위한 시스템들, 방법들, 그리고 장치들
US8838907B2 (en) Notification protocol based endpoint caching of host memory
US9529532B2 (en) Method and apparatus for memory allocation in a multi-node system
TWI764985B (zh) 記憶體存取監測
US20230214326A1 (en) Computer Memory Expansion Device and Method of Operation
US10592459B2 (en) Method and system for ordering I/O access in a multi-node environment
US20150254182A1 (en) Multi-core network processor interconnect with multi-node connection
US9372800B2 (en) Inter-chip interconnect protocol for a multi-chip system
US20140297966A1 (en) Operation processing apparatus, information processing apparatus and method of controlling information processing apparatus
US7398360B2 (en) Multi-socket symmetric multiprocessing (SMP) system for chip multi-threaded (CMT) processors
US20140006716A1 (en) Data control using last accessor information
US20040111563A1 (en) Method and apparatus for cache coherency between heterogeneous agents and limiting data transfers among symmetric processors
US11126564B2 (en) Partially coherent memory transfer
EP4124963B1 (en) System, apparatus and methods for handling consistent memory transactions according to a cxl protocol
JP7153718B2 (ja) データ処理システムにおけるメッセージ受渡し
US10733118B2 (en) Computer system, communication device, and storage control method with DMA transfer of data
US20140289481A1 (en) Operation processing apparatus, information processing apparatus and method of controlling information processing apparatus
US20180189181A1 (en) Data read method and apparatus
US20210397560A1 (en) Cache stashing system
CN116501456A (zh) 用于利用一致性接口的队列管理的系统、方法和设备
US20140289474A1 (en) Operation processing apparatus, information processing apparatus and method of controlling information processing apparatus
US20240028528A1 (en) Read/write operation execution method and soc chip
JP2023507293A (ja) システムダイレクトメモリアクセスエンジンのオフロード