KR20220032612A - 패킷 네트워크 내에서 플러시 요청들을 프로세싱하기 위한 장치 및 방법 - Google Patents

패킷 네트워크 내에서 플러시 요청들을 프로세싱하기 위한 장치 및 방법 Download PDF

Info

Publication number
KR20220032612A
KR20220032612A KR1020227004866A KR20227004866A KR20220032612A KR 20220032612 A KR20220032612 A KR 20220032612A KR 1020227004866 A KR1020227004866 A KR 1020227004866A KR 20227004866 A KR20227004866 A KR 20227004866A KR 20220032612 A KR20220032612 A KR 20220032612A
Authority
KR
South Korea
Prior art keywords
flush
packet
persistence
command
prefix
Prior art date
Application number
KR1020227004866A
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 KR20220032612A publication Critical patent/KR20220032612A/ko

Links

Images

Classifications

    • 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/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • 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/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
    • 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
    • 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
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • G06F13/385Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
    • 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
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4247Bus transfer protocol, e.g. handshake; Synchronisation on a daisy chain bus
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/24Traffic characterised by specific attributes, e.g. priority or QoS
    • H04L47/2483Traffic characterised by specific attributes, e.g. priority or QoS involving identification of individual flows
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/22Parsing or analysis of headers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/154Networked environment

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

패킷 네트워크(15) 내에서 플러시 요청들을 프로세싱하기 위한 장치 및 방법이 제공된다. 장치는, 하나 이상의 데이터 항목들이 지속 지점(25)으로 플러싱될 것을 요청하는 원격 에이전트(10)에 의해 생성된 플러시 요청을 수신하도록 배열된 패킷 네트워크(15) 내의 요청자 디바이스(30)를 포함한다. 요청자 디바이스(30)는 패킷 네트워크(15)의 패킷 프로토콜에 부합하는 패킷 기반 플러시 커맨드로 플러시 요청을 변환한다. 지속 지점(25)을 포함하는 지속 도메인(20)에 커플링되는 패킷 네트워크(15) 내의 컴플리터 디바이스(40)는, 패킷 기반 플러시 커맨드의 수신을 검출하고, 이어서, 하나 이상의 데이터 항목들을 지속 지점(25)으로 플러싱하기 위해 지속 도메인(25) 내에서 플러시 동작을 트리거하도록 배열된다. 이는, 지속 지점(25)으로의 플러시를 처리하기 위해 지속 도메인(20)에서 소프트웨어를 트리거할 필요 없이, 지속 도메인(20) 내에서 플러시 동작을 수행하기 위한 빠른 하드웨어 기반 메커니즘을 제공한다.

Description

패킷 네트워크 내에서 플러시 요청들을 프로세싱하기 위한 장치 및 방법
본 기법은 패킷 네트워크 내에서 플러시 요청(flush request)들을 프로세싱하기 위한 장치 및 방법에 관한 것이다.
에이전트, 예를 들어 컴퓨터 상에서 실행되는 소프트웨어는 데이터를 메모리에 기입하려고 하는 일련의 기입 요청들을 발행할 수 있다. 에이전트는 일부 지점에서, 그러한 기입 데이터가 메모리 시스템 내의 지속 지점(point of persistence)에 도달했다는 것을 보장하기를 바랄 수 있다. 지속 지점은 다양한 형태들을 취할 수 있다. 예를 들어, 전력이 메모리 디바이스로부터 제거된 이후에도 자신의 콘텐츠를 유지할 메모리 디바이스(그의 일 예는 비휘발성 메모리일 것임)는 지속 지점이 될 것이다. 그러나, 이러한 메모리 디바이스에 부가하여, 시스템 내의 다른 구조들이 또한 지속 지점일 수 있다. 예를 들어, 특정한 큐 구조들 또는 특정한 캐시 구조들은, 그들 내의 기입 날짜가 주요 전력 공급의 중단의 경우 적합한 영구 메모리 디바이스로 이동될 수 있다는 것을 보장하기에 충분한 백업 전력이 그 구조들에 제공되면 지속 지점으로 보여질 수 있다.
예를 들어, 기입 데이터가 에이전트와 지속 지점 사이의 경로를 따라 특정한 큐들에서 유지되는 것으로 인해, 기입 요청의 발행과, 연관된 기입 데이터 사이가 실제로 그러한 지속 지점에 도달한 것 사이에 일부 지연이 존재할 수 있으므로, 관련 기입 데이터가 지속 지점으로 플러싱되게 하기 위한 플러시 요청을 에이전트가 발행할 수 있는 것이 바람직할 수 있다.
발생할 수 있는 문제점은, 에이전트가 지속 지점을 포함하는 엔티티로부터 원격으로 위치될 수 있다는 것이며, 이러한 엔티티는 본 명세서에서 지속 도메인(persistence domain)으로 지칭된다. 특히, 원격 에이전트와 지속 도메인 사이에 개재 네트워크들이 존재할 수 있다. 그러한 네트워크의 일 예는 네트워크에 걸쳐 소스들로부터 수신자에게 패킷을 송신하기 위해 패킷 프로토콜을 사용하는 패킷 네트워크이다. 전형적으로, 그러한 패킷 네트워크는 플러시 요청들을 다른 요청들과 구별할 수 없고, 대신에, 원격 에이전트에 의해 그러한 패킷 네트워크로 발행된 플러시 요청은 기입 요청으로서 패킷 네트워크에 의해 처리될 것이고, 기입 커맨드가 지속 도메인 내의 큐/소프트웨어 스택으로의 출력을 위해 패킷 네트워크를 통해 전파되게 할 것이며, 이때, 큐로의 기입은 이어서, 지속 도메인 내의 소프트웨어가 지속 지점에 대한 요구되는 플러시 동작을 수행하도록 호출되게 한다. 그러나, 지속 지점 내의 큐 구조에 기입하고, 그 후, 플러시 동작을 수행하기 위해 소프트웨어를 호출할 필요성으로 인해 이러한 프로세스가 매우 느리다는 것이 밝혀졌다.
따라서, 지속 도메인에 원격인 에이전트에 의해 생성된 플러시 요청들을 프로세싱하기 위한 개선된 메커니즘을 제공하는 것이 바람직할 것이다.
제1 예시적인 배열에서, 장치가 제공되며, 그 장치는, 하나 이상의 데이터 항목들이 지속 지점으로 플러싱될 것을 요청하는 원격 에이전트에 의해 생성된 플러시 요청을 수신하고, 패킷 네트워크의 패킷 프로토콜에 부합하는 패킷 기반 플러시 커맨드로 플러시 요청을 변환하기 위한 패킷 네트워크 내의 요청자 디바이스; 및 지속 지점을 포함하는 지속 도메인에 커플링되는 패킷 네트워크 내의 컴플리터 디바이스(completer device)를 포함하며, 컴플리터 디바이스는, 패킷 기반 플러시 커맨드의 수신을 검출하고, 상기 하나 이상의 데이터 항목들을 지속 지점으로 플러싱하기 위해 지속 도메인 내에서 플러시 동작을 트리거하도록 배열된다.
제2 예시적인 배열에서, 하나 이상의 데이터 항목들이 지속 지점으로 플러싱될 것을 요청하는 원격 에이전트에 의해 생성된 플러시 요청을 수신하기 위해 패킷 네트워크에서 사용하기 위한 요청자 디바이스가 제공되며, 요청자 디바이스는, 지속 지점을 포함하는 지속 도메인 내에서 플러시 동작을 트리거하는 데 사용되는 컴플리터 디바이스로의 패킷 네트워크를 통한 전방 송신(onward transmission)을 위해, 패킷 네트워크의 패킷 프로토콜에 부합하는 패킷 기반 플러시 커맨드로 플러시 요청을 변환하기 위한 변환 회로부를 포함한다.
또 다른 예시적인 배열에서, 패킷 네트워크 내에서 사용하기 위한 컴플리터 디바이스가 제공되며, 컴플리터 디바이스는 패킷 네트워크의 패킷 프로토콜에 부합하는 패킷 기반 플러시 커맨드의 컴플리터 디바이스에 의한 수신에 응답하여, 패킷 기반 플러시 커맨드에 의해 식별된 하나 이상의 데이터 항목들을 지속 도메인 내의 지속 지점으로 플러싱하기 위해 지속 도메인 내에서 플러시 동작을 트리거하기 위한 플러시 동작 트리거 회로부를 갖는다.
또 다른 예시적인 배열에서, 플러시 요청들을 프로세싱하기 위해 패킷 네트워크를 동작시키는 방법이 제공되며, 그 방법은, 패킷 네트워크 내의 요청자 디바이스에서, 하나 이상의 데이터 항목들이 지속 지점으로 플러싱될 것을 요청하는 원격 에이전트에 의해 생성된 플러시 요청을 수신하는 단계; 요청자 디바이스에서, 패킷 네트워크의 패킷 프로토콜에 부합하는 패킷 기반 플러시 커맨드로 플러시 요청을 변환하는 단계; 지속 지점을 포함하는 지속 도메인에 커플링되는 컴플리터 디바이스에 패킷 네트워크를 통해 패킷 기반 플러시 커맨드를 전달하는 단계; 패킷 기반 플러시 커맨드의 수신을 검출하는 것에 응답하여, 상기 하나 이상의 데이터 항목들을 지속 지점으로 플러싱하기 위해 지속 도메인 내에서 플러시 동작을 트리거하도록 컴플리터 디바이스를 배열하는 단계를 포함한다.
다른 예시적인 배열에서, 장치가 제공되며, 그 장치는, 하나 이상의 데이터 항목들이 지속 지점으로 플러싱될 것을 요청하는 원격 에이전트에 의해 생성된 플러시 요청을 수신하고, 패킷 네트워크의 패킷 프로토콜에 부합하는 패킷 기반 플러시 커맨드로 플러시 요청을 변환하기 위한 패킷 네트워크 내의 요청자 수단; 및 지속 지점을 포함하는 지속 도메인에 커플링되는 패킷 네트워크 내의 컴플리터 수단을 포함하며, 컴플리터 디바이스는, 패킷 기반 플러시 커맨드의 수신을 검출하고, 상기 하나 이상의 데이터 항목들을 지속 지점으로 플러싱하기 위해 지속 도메인 내에서 플러시 동작을 트리거한다.
본 기법은, 단지 예시로서, 첨부 도면에 예시된 바와 같은 본 발명의 예들을 참조하여 추가로 설명될 것이다.
도 1은 하나의 예시적인 구현예에 따른 장치의 개략도를 제공한다.
도 2a 및 도 2b는 현재 설명된 기법들을 이용하는 장치를 포함하도록 배열된 2개의 특정 예시적인 시스템들을 예시한다.
도 3은 하나의 예시적인 배열에 따른, 패킷 네트워크의 요청자 디바이스 내에서 제공된 컴포넌트들을 예시하는 블록도이다.
도 4는 하나의 예시적인 배열에 따른, 패킷 네트워크의 컴플리터 디바이스 내에서 제공된 컴포넌트들을 예시하는 블록도이다.
도 5는 예시적인 구현예에서 사용될 수 있는 패킷 기반 플러시 커맨드의 하나의 포맷을 예시한다.
도 6은 하나의 예시적인 배열에 따라 기입 커맨드가 흐름 식별자 정보를 포함하도록 어떻게 배열될 수 있는지를 예시한다.
도 7은 하나의 예시적인 배열에 따른, 원격 에이전트로부터의 플러시 요청의 수신에 응답하여 패킷 네트워크의 요청자 디바이스에서 수행되는 프로세스를 예시하는 흐름도이다.
도 8은 하나의 예시적인 배열에 따른, 패킷 기반 플러시 커맨드를 프로세싱하기 위해 패킷 네트워크의 컴플리터 디바이스에서 수행되는 프로세스를 예시하는 흐름도이다.
도 9는 도 8의 단계(465)가 하나의 예시적인 배열에서 어떻게 구현될 수 있는지를 예시하는 흐름도이다.
도 10a 및 도 10b는 하나의 예시적인 배열에 따른, 흐름 식별자 정보를 포함하는 기입 데이터 커맨드들이 패킷 네트워크 내에서 어떻게 생성되고 후속하여 프로세싱될 수 있는지를 예시하는 흐름도들이다.
도 11a는 하나의 예시적인 배열에 따른, 패킷 네트워크 내의 컴플리터 디바이스가 플러시 동작의 완료 시에 완료 패킷을 어떻게 생성할 수 있는지를 예시하는 흐름도이다.
도 11b는 하나의 예시적인 배열에서의 완료 패킷의 포맷을 예시하는 도면이다.
도 12a 및 도 12b는 대안적인 구현예에 따른, 플러시 커맨드들에 대해 사용될 수 있는 상이한 전용 패킷 타입들을 예시한다.
하나의 예시적인 배열에 따르면, 하나 이상의 데이터 항목들이 지속 지점으로 플러싱될 것을 요청하는 원격 에이전트에 의해 생성된 플러시 요청을 수신하기 위한 패킷 네트워크 내의 요청자 디바이스를 갖는 장치가 제공된다. 하나 이상의 데이터 항목들은 다양한 방식들로 식별될 수 있지만, 전형적으로는 이전 기입 동작들의 대상이었던 데이터에 관한 것일 것이며, 플러시 요청은 이들 데이터 항목들이 지속 지점으로 푸시되는 것을 보장하려고 하기 위해 원격 에이전트에 의해 발행되어, 후속하여 전력의 중단이 있더라도 이들 데이터 항목들이 지속될 것을 보장할 수 있다. 이전 기법들에 따르면, 요청자 디바이스가 임의의 다른 타입의 기입 요청과 그러한 플러시 요청을 구별하지 않을 것이고, 지속 지점을 포함하는 도메인 내의 소프트웨어 스택과 같은 큐 구조에 대해 업데이트가 이루어지게 하기 위해 패킷 네트워크를 통해 기입 커맨드를 단지 푸시(push)할 것이지만, 본 명세서에 설명되는 기법들에 따르면, 요청자 디바이스는, 플러시 요청을 인식하고, 패킷 네트워크의 패킷 프로토콜에 부합하는 패킷 기반 플러시 커맨드로 플러시 요청을 변환하도록 배열된다.
장치는, 지속 지점을 포함하는 지속 도메인에 커플링되고 따라서 패킷 네트워크와 지속 도메인 사이의 인터페이스로서 작용하는 패킷 네트워크 내의 컴플리터 디바이스를 더 포함한다. 플러시 요청이 요청자 디바이스에 의해 패킷 기반 플러시 커맨드로 변환되었으므로, 컴플리터 디바이스는 패킷 기반 플러시 커맨드가 수신되었을 때를 검출할 수 있으며, 하나 이상의 데이터 항목들을 지속 지점으로 플러싱하기 위해 지속 도메인 내에서 플러시 동작을 트리거하도록 그 패킷 기반 플러시 커맨드의 수신에 응답할 수 있다.
따라서, 위에서 설명된 기법의 사용을 통해, 플러시 동작을 수행하기 위해 호출되는 지속 도메인을 갖는 시스템 내의 소프트웨어 스택에 의존하기보다는, 패킷 네트워크의 패킷 프로토콜에 부합하는 특정 패킷 기반 플러시 커맨드를 지원함으로써, 플러시 동작을 호출하기 위한 더 빠른 하드웨어 방법이 제공되어, 그에 따라, 플러시 동작이 패킷 네트워크 내의 컴플리터 디바이스에 의해 직접 트리거될 수 있게 한다. 이것은 원격 에이전트들로부터의 플러시 요청들의 처리의 성능을 상당히 증가시킬 수 있으며(그리고, 예를 들어, 10의 몇 승배(orders of magnitude)의 개선을 제공할 수 있음), 따라서 플러시 요청의 발행과 그 플러시 요청을 구현하는 데 요구되는 플러시 동작의 실행 사이의 시간 지연을 감소시킨다. 따라서, 이는, 전력의 중단의 경우 데이터가 손실되는 것을 피하기 위해 데이터 항목들이 시기 적절한 방식으로 지속 지점으로 플러싱될 가능성을 증가시켜, 상당히 향상된 신뢰성을 제공한다. 이는 또한 소프트웨어 애플리케이션들에 대해 더 높은 처리량 및 더 낮은 레이턴시를 제공한다.
하나의 예시적인 배열에서, 패킷 기반 플러시 커맨드는, 패킷 네트워크를 통해 라우팅되는 다른 네이티브 커맨드(native command)들과 패킷 네트워크의 디바이스들에 의해 구별되는 패킷 네트워크의 네이티브 커맨드를 형성한다. 그러므로, 패킷 기반 플러시 커맨드는 플러시 동작에 대한 요건에 관련되는 것으로 패킷 네트워크 내의 하드웨어 컴포넌트들에 의해 인식될 수 있는 반면, 패킷 네트워크 내의 컴포넌트들은 이전에 플러시 요청에 대한 어떠한 지식도 갖지 않을 것이고, 플러시 요청은 단지 패킷 네트워크를 통한 메모리 어드레스로의 기입 커맨드의 전파에 의해 처리될 것이다.
패킷 네트워크는 패킷 네트워크 내에서 사용되는 패킷 프로토콜과 같이 다양한 형태들을 취할 수 있다. 그러나, 하나의 예시적인 배열에서, 패킷 프로토콜은 주변 컴포넌트 상호연결 익스프레스(Peripheral Component Interconnect Express, PCIe) 프로토콜이고, 패킷 기반 플러시 커맨드는 트랜잭션 계층(transaction layer) 커맨드를 형성한다. 따라서, 그러한 구현예에 따르면, 위에서 설명된 기법들은 패킷 네트워크의 컴포넌트들에 의해 인식되는 패킷 기반 플러시 커맨드들을 구현하기 위해 PCIe 네트워크의 트랜잭션 계층 내의 트랜잭션 계층 패킷(TLP)들의 사용을 가능하게 하며, 특히, 패킷 네트워크를 통해 라우팅되는 다른 네이티브 커맨드들과 구별가능하다. 그 결과, 컴플리터 디바이스는 그러한 패킷 기반 플러시 커맨드의 수신을 검출하고 이전에 논의된 바와 같이 플러시 동작을 트리거할 수 있다.
하나의 예시적인 구현예에서, 패킷 기반 플러시 커맨드는 플러시 타입을 식별하도록 배열된다. 그 결과, 다양한 상이한 타입들의 플러시 동작을 구현하기 위해 위에서 설명된 메커니즘을 사용하는 것이 가능하다. 하나의 예시적인 구현예에서, 플러시 타입은, 플러싱될 하나 이상의 데이터 항목들이 패킷 기반 플러시 커맨드와 함께 제공된 어드레스 정보로부터 컴플리터 디바이스에 의해 결정된 어드레스 범위에 의해 식별되는 어드레스 기반 플러시 타입과 대안적인 플러시 타입을 구별하기 위해 사용된다. 따라서, 이는 플러시 동작들을 구현할 때 상당한 유연성을 제공한다. 특히, 이는 어드레스들의 시퀀스가 식별되게 허용하여, 이러한 어드레스들에 기입되는 임의의 데이터 항목들이 지속 지점으로 플러싱되게 하지만, 구현될 플러싱의 적어도 하나의 대안적인 형태를 또한 지원하게 한다.
플러싱의 대안적인 형태는 다양한 형태들을 취할 수 있다. 그러나, 하나의 예시적인 구현예에서, 대안적인 플러시 타입은 흐름 식별자가 패킷 기반 플러시 커맨드 내에서 제공되는 흐름 식별자 플러시 타입이고, 플러싱될 하나 이상의 데이터 항목들은, 지속 지점에 아직 도달하지 않았고, 자신과 연관된 흐름 식별자를 갖는 지속 도메인 내의 이들 데이터 항목들이다. 따라서, 개별 데이터 항목들이 메모리에 기입되기 위해 출력됨에 따라, 흐름 식별자 값은 이러한 데이터 항목들과 연관될 수 있으며, 후속하여, 플러시 요청은, 흐름 식별자가 지속 지점으로 플러싱될 필요가 있는 데이터 항목들을 식별하기 위한 메커니즘으로서 사용되도록 그 흐름 식별자를 특정할 수 있다. 이어서, 흐름 식별자들의 사용은 원격 에이전트에 의해 관리될 수 있으며, 임의의 특정 플러시 요청의 대상이 되어야 하는 데이터 항목들을 결정하기 위한 특히 유연한 메커니즘을 제공한다.
흐름 식별자들의 사용을 지원하기 위해, 데이터를 기입하는 데 사용되는 기입 데이터 커맨드들은 흐름 식별자들의 사용을 지원하기 위해 향상될 수 있다. 특히, 하나의 예시적인 배열에서, 패킷 네트워크 내의 하나 이상의 디바이스들은, 컴플리터 디바이스로의 패킷 네트워크를 통한 전달을 위해 기입 데이터 커맨드들을 생성하도록 배열되고, 흐름 식별자 플러시 타입을 지원하기 위해, 흐름 식별자 프리픽스(prefix) 및 적어도 하나의 연관된 기입 데이터 패킷에 의해 형성된 기입 데이터 커맨드를 생성하도록 배열되며, 이때, 흐름 식별자 프리픽스는 적어도 하나의 연관된 기입 데이터 패킷에 포함된 기입 데이터의 각각의 항목과 연관된 흐름 식별자의 표시를 포함한다. 그러한 접근법에 의해, 기입 데이터 패킷의 형태는 "있는 그대로(as is)" 유지될 수 있으며, 따라서, 기입 데이터 패킷의 상이한 형태는 흐름 식별자들이 사용되고 있는지 여부에 의존하여 요구되지 않는다. 대신에, 연관된 기입 데이터 패킷 이전에 나타날 때, 그 기입 데이터 패킷의 대상인 기입 데이터와 관련하여 사용될 흐름 식별자를 식별하는 별개의 흐름 식별자 프리픽스가 사용될 수 있다. 이어서, 이러한 흐름 식별자 정보는 지속 도메인 내로 전파될 수 있어서, 그 흐름 식별자 정보는 기입 데이터가 지속 도메인 내의 다양한 구조들을 통과함에 따라 그 기입 데이터와 관련하여 제공된다.
하나의 예시적인 배열에서, 흐름 식별자 프리픽스는 바로 후속하는 기입 데이터 패킷에만 적용된다. 그러나, 원하는 경우, 흐름 식별자 프리픽스는 그 흐름 식별자 프리픽스에 후속하는 하나 이상의 기입 데이터 패킷들과 연관되도록 배열될 수 있으며, 이는 흐름 식별자가 연관되어야 하는 모든 기입 데이터 패킷 전에 흐름 식별자 프리픽스를 반복할 필요성을 회피함으로써 흐름 식별자들의 더 효율적인 인코딩을 허용할 수 있다.
다수의 상이한 흐름 식별자 값들이 동시에 사용되고, 이어서, 주어진 플러시 요청이 특정 흐름 식별자 값에 관련되는 것이 가능하여, 이어서, 그 특정 흐름 식별자 값과 연관된 기입 데이터 항목들만이 플러시 동작의 대상이 된다. 그러나, 하나의 예시적인 구현예에서, 흐름 식별자의 특정 미리 결정된 값을 예약하는 것이 가능할 수 있어서, 그 값이 데이터 항목들의 더 전역적인 플러싱을 야기하는 데 사용될 수 있게 한다. 특히, 하나의 예시적인 구현예에서, 패킷 기반 플러시 커맨드 내에서 제공된 흐름 식별자가 미리 결정된 값을 가질 때, 컴플리터 디바이스는 지속 지점에 아직 도달하지 않았고, 자신과 연관된 흐름 식별자의 임의의 값을 갖는 지속 도메인 내의 모든 데이터 항목들에 관련되는 것으로 패킷 기반 플러시 커맨드를 해석하도록 배열된다. 따라서, 단일 플러시 요청의 사용을 통해, 그러한 예시에서, 이들 데이터 항목들 중 임의의 데이터 항목과 연관된 특정 흐름 식별자 값에 관계없이, 연관된 흐름 식별자를 갖는 데이터 항목들 모두를 지속 지점으로 플러싱하는 것이 가능하다. 이는, 플러시 요청들이 특정 흐름 식별자들에 타겟팅되게 허용하거나 또는 단일 플러시 요청이 모든 흐름 식별자들을 타겟팅하게 허용함으로써 플러시 요청들의 사용에 향상된 유연성을 제공할 수 있다.
흐름 식별자 프리픽스는 다양한 형태들을 취할 수 있지만, 하나의 예시적인 구현예에서, 패킷 네트워크의 임의의 개재 디바이스들을 통해 컴플리터 디바이스로 패킷 네트워크를 통하여, 연관된 기입 데이터 패킷과 함께 라우팅되는 종단간(end-to-end) 프리픽스이다. 그러한 종단간 프리픽스의 사용을 통해, 프리픽스는 수정되지 않은 패킷 네트워크를 통해 라우팅될 수 있어서, 그 프리픽스는 요청자 디바이스에 의해 생성된 원래 형태로 컴플리터 디바이스에서 수신될 수 있다.
하나의 예시적인 구현예에서, 패킷 기반 플러시 커맨드는, 하나 이상의 데이터 항목들이 플러싱될 지속 지점 레벨을 식별하는 데 사용되는 플러시 지점 표시를 제공하도록 배열될 수 있다. 특히, 일부 시스템들에서, 지속 지점들로서 모두 보여지는 다수의 상이한 레벨들이 존재할 수 있다. 예를 들어, 플러시 지점은 제1 지속 지점으로의 얕은 플러시와, 제1 지속 지점보다 하드웨어 장애(hardware failure)에 더 탄력적인 제2 지속 지점으로의 깊은 플러시를 구별하는 데 사용될 수 있다. 제2 지속 지점은 전력의 중단에 대한 그의 탄력성의 관점들에서 더 탄력적일 것이고 그리고/또는 그의 신뢰성의 관점들에서 더 탄력적일 것이다. 순수하게 예로서, 비휘발성 메모리 디바이스는, 그 메모리 디바이스가 매우 신뢰할 수 있는 지속 지점을 제공한다는 점에서 깊은 지속 지점으로서 사용될 수 있다. 그러나, 비휘발성 메모리 이전의 다른 개재 구조들은 또한, 예를 들어, 전력의 중단의 경우 이러한 지속 레벨들의 임의의 데이터가 비휘발성 메모리에 기입될 수 있다는 것을 보장하기 위해 부가적인 백업 전력 공급 컴포넌트들로 보완됨으로써 지속 지점을 제공할 수 있다. 순수하게 특정 예로서, 특정한 시스템 캐시들은, 이들 저장 구조들 내부에 저장된 콘텐츠들이 전력의 중단의 경우 비휘발성 메모리에 기입될 수 있다는 것을 보장하기 위해 이들 저장 구조들과 관련하여 적합한 컴포넌트들이 제공된다면, 예를 들어, 메모리 제어기 내의 큐 구조들 중 일부와 같이 지속 지점을 제공하는 것으로 보여질 수 있다.
하나의 예시적인 구현예에서, 요청자 디바이스는, 패킷 기반 플러시 커맨드가 컴플리터 디바이스로의 패킷 네트워크를 통한 송신을 위한 패킷을 적어도 포함하도록 플러시 요청을 패킷 기반 플러시 커맨드로 변환하기 위한 변환 회로부를 포함한다.
변환 회로부가 패킷 기반 플러시 커맨드를 생성하는 방식은 구현예에 의존하여 변할 수 있다. 하나의 예시적인 구현예에서, 변환 회로부는 패킷 기반 플러시 커맨드를 형성하기 위해 플러시 프리픽스 및 적어도 하나의 연관된 패킷을 생성하도록 배열되며, 여기서 연관된 패킷은 패킷 네트워크 내의 다른 형태의 커맨드에 대해 또한 사용되는 타입의 패킷이고, 플러시 프리픽스는 컴플리터 디바이스가 패킷 기반 플러시 커맨드를 집합적으로 형성하는 것으로서 플러시 프리픽스 및 연관된 패킷을 해석하게 하는 데 사용된다. 따라서, 이러한 구현예에 따르면, 패킷의 다른 형태가 요구되지 않으며, 기존의 패킷 타입이 사용될 수 있지만, 플러시 프리픽스가 그 패킷과 연관되어, 컴플리터 디바이스가 그 연관된 패킷을 상이하게 해석하게 한다.
패킷 기반 플러시 커맨드를 형성하기 위해 플러시 프리픽스와 조합하여, 그러한 방식으로 재사용되는 패킷의 형태는 구현예에 의존하여 변할 수 있지만, 하나의 예시적인 경우, 연관된 패킷은 패킷 네트워크 내의 판독 커맨드에 대해 또한 사용되는 타입의 패킷이다. 따라서, 연관된 플러시 프리픽스가 없을 시에, 패킷은 판독 패킷으로 보여질 것이지만, 패킷이 패킷 기반 플러시 커맨드를 형성하는 것으로 보여질 플러시 프리픽스와 조합될 것이다.
하나의 예시적인 배열에서, 플러시 프리픽스는 바로 후속하는 패킷에만 적용된다. 그러나, 대안적인 실시예에서, 단일 플러시 프리픽스는 2개 이상의 후속 패킷들과 연관되도록 배열될 수 있어서, 이들 패킷의 각각이 플러시 프리픽스 콘텐츠들과 조합하여 패킷 기반 플러시 커맨드를 형성하는 것으로 보여지게 한다.
이전에 설명된 흐름 식별자 프리픽스와 마찬가지로, 하나의 예시적인 배열에서, 플러시 프리픽스는 패킷 네트워크의 임의의 개재 디바이스들을 통해 요청자 디바이스로부터 컴플리터 디바이스로 패킷 네트워크를 통해, 연관된 패킷과 함께 라우팅되는 종단간 프리픽스일 수 있다.
플러시 프리픽스 내에서 유지되는 정보는 구현예에 의존하여 변할 수 있지만, 일반적으로, 연관된 패킷이 패킷 네트워크 내의 다른 형태의 커맨드에 대해 또한 사용되는 타입의 패킷이라는 것으로 인해, 연관된 패킷 내에 직접 제공될 수 없는 플러시 동작을 제어하는 데 요구되는 부가적인 정보를 제공하는 데 사용된다.
하나의 예시적인 구현예에서, 플러시 프리픽스는, 플러싱될 하나 이상의 데이터 항목들이 패킷 기반 플러시 커맨드와 함께 제공된 어드레스 정보로부터 컴플리터 디바이스에 의해 결정된 어드레스 범위에 의해 식별되는 어드레스 기반 플러시 타입과 대안적인 플러시 타입을 구별하기 위해 사용되는 플러시 타입을 식별하기 위한 타입 필드를 포함한다. 이전에 논의된 바와 같이, 대안적인 플러시 타입은 다양한 형태들을 취할 수 있지만, 하나의 특정 예에서 흐름 식별자 플러시 타입이다.
하나의 예시적인 구현예에서, 플러시 프리픽스는 속성 필드를 포함할 수 있으며, 그 속성 필드에서 유지되는 정보는 플러시 프리픽스에서 식별된 플러시 타입에 의존하여 변할 수 있다. 예를 들어, 컴플리터 디바이스는, 패킷 기반 플러시 커맨드에 응답하여 어드레스 기반 플러시를 수행할 때(즉, 여기서, 플러시 타입은 어드레스 기반 플러시 타입임), 플러싱될 데이터 항목들을 식별하는 데 사용되는 어드레스 범위를 결정하기 위해, 연관된 패킷에서 제공된 추가적인 어드레스 정보와 조합하여 플러시 프리픽스의 속성 필드에서 제공된 어드레스 정보를 사용하도록 배열될 수 있다. 대신에 플러시 프리픽스 내의 타입 필드가 플러시 타입이 흐름 식별자 플러시 타입이라는 것을 표시했다면, 속성 필드는 어드레스 정보를 제공하기보다는 흐름 식별자를 캡처하는 데 사용될 수 있다.
이어서, 속성 필드가 어드레스 정보를 제공하는 구현예들에서, 하나의 특정 예시적인 배열에서, 연관된 패킷에서 제공된 추가적인 어드레스 정보는 시작 어드레스의 표시를 적어도 포함하며, 플러시 프리픽스의 속성 필드로부터의 어드레스 정보는 시작 어드레스로부터 시작하는 어드레스들의 범위를 식별하는 데 사용된다. 따라서, 시작 어드레스는 패킷(이전에 논의된 바와 같이, 표준 판독 패킷일 수 있음) 내의 정보로부터 결정될 수 있는 반면, 범위 정보는 플러시 프리픽스에 의해 제공된 부가적인 어드레스 정보로부터 결정될 수 있다.
추가적인 예시적인 배열에서, 패킷 기반 플러시 커맨드 내에 인코딩될 수 있는 가능한 범위를 확장하기 위해, 연관된 패킷에서 제공된 추가적인 어드레스 정보는 범위를 또한 표시하는 값을 제공하는 데 사용될 수 있는 길이 필드를 포함할 수 있다. 특히, 길이 필드에서 제공된 값은 어드레스들의 범위를 결정하기 위해 플러시 프리픽스의 속성 필드로부터의 어드레스 정보와 조합하여 사용될 수 있다. 길이 필드에서 제공될 수 있는 부가적인 정보로 인해, 이는 더 큰 범위의 어드레스들이 패킷 기반 플러시 커맨드 내에서 캡처될 수 있게 할 수 있다.
하나의 예시적인 구현예에서, 플러시 프리픽스는 또한, 하나 이상의 데이터 항목들이 플러싱될 지속 지점 레벨을 식별하는 데 사용되는 플러시 지점 필드를 제공할 수 있으며, 따라서 예를 들어, 플러시 프리픽스는 플러시 동작이 얕은 지속 지점에 대해 수행될지 또는 깊은 지속 지점에 대해 수행될지를 식별할 수 있다.
다른 목적을 위해 이미 지원된 기존 타입의 패킷(예를 들어, 이전에 논의된 바와 같은 판독 패킷) 및 플러시 프리픽스를 사용하여 패킷 기반 플러시 커맨드를 형성하는 것에 대한 대안으로서, 변환은 대안적으로, 패킷 기반 플러시 커맨드를 형성하기 위해 적어도 하나의 전용 패킷 타입을 이용하도록 배열될 수 있다. 그러한 배열에서, 플러시 프리픽스에 대한 필요성이 존재하지 않지만, 상이한 타입의 패킷이 패킷 네트워크 내에서 지원될 필요가 있다.
하나의 예시적인 배열에서, 제1 전용 패킷 타입은 어드레스 기반 플러시 타입의 패킷 기반 플러시 커맨드를 식별하는 데 사용될 수 있고, 제2 전용 패킷 타입은 흐름 식별자 플러시 타입의 패킷 기반 플러시 커맨드를 식별하는 데 사용될 수 있다. 따라서, 어드레스 기반 플러시가 수행될지 또는 흐름 식별자 기반 플러시가 수행될지에 의존하여 상이한 패킷 타입들이 사용될 수 있다.
제1 전용 패킷 타입을 사용할 때, 그 패킷은 플러싱될 하나 이상의 데이터 항목들을 식별하는 어드레스들의 범위를 결정하기에 충분한 어드레스 정보를 포함할 수 있다. 따라서, 특정 구현예에서, 그 어드레스 정보는 시작 어드레스, 및 그 시작 어드레스로부터 시작하는 어드레스들의 범위를 식별하는 데 사용되는 추가적인 어드레스 정보를 식별할 수 있다.
제2 전용 패킷 타입을 사용할 때, 그 패킷은 흐름 식별자를 제공하기 위한 흐름 식별자 필드를 포함할 수 있으며, 플러싱될 하나 이상의 데이터 항목들은, 지속 지점에 아직 도달하지 않았고, 자신과 연관된 흐름 식별자를 갖는 지속 도메인 내의 이들 데이터 항목들이다.
제1 전용 패킷 타입 또는 제2 전용 패킷 타입 중 어느 하나를 사용할 때, 하나 이상의 데이터 항목들이 플러싱될 지속 지점 레벨을 식별하기 위해 그러한 패킷들에서 플러시 지점 필드가 제공될 수 있다.
하나의 예시적인 배열에서, 원격 에이전트가 그의 플러시 요청에 응답하여 플러시 동작의 완료에 대해 통지받는 것이 유용하다. 따라서, 하나의 예시적인 배열에서, 컴플리터 디바이스는, 지속 도메인 내에서 플러시 동작의 완료를 검출할 시에, 패킷 네트워크를 통해 완료 확인응답 패킷을 요청자 디바이스에 전송하도록 배열된다. 완료 확인응답 패킷이 다양한 형태들을 취할 수 있지만, 하나의 특정 구현예에서, 완료 정보에 대한 기존의 패킷 포맷이 이러한 목적을 위해 재사용되며, 따라서 완료 정보를 요청자 디바이스에 다시 제공하기 위해 새로운 형태의 패킷을 개발할 필요성이 존재하지 않는다.
하나의 예시적인 배열에서, 이전에 논의된 플러시 커맨드들을 관리하기 위한 요청자 디바이스 및 컴플리터 디바이스의 능력은 소프트웨어에 의해 구성가능하게 될 수 있다. 특히, 요청자 디바이스 및 컴플리터 디바이스 각각에는, 이들 디바이스들이 패킷 기반 플러시 커맨드를 처리하도록 인에이블되는지 여부를 식별하기 위해 구성 정보가 저장될 수 있는 하나 이상의 구성 레지스터들이 제공될 수 있다. 이는 이러한 부가적인 기능이 원하는 대로 인에이블되거나 디스에이블될 수 있게 함으로써 구성가능성을 허용한다. 특정한 요소들의 구성이 호환가능하지 않은 경우, 예를 들어, 요청자 디바이스가 패킷 기반 플러시 커맨드들을 생성하도록 인에이블되지만, 타겟 컴플리터 디바이스가 그러한 커맨드들을 프로세싱하도록 인에이블되지 않는 경우, 예를 들어, 컴플리터 디바이스가 자신이 프로세싱할 수 없는 패킷 기반 플러시 커맨드를 수신할 때 오류가 시그널링될 것이다.
구성 정보가 구성 레지스터들에 저장되는 방식은 구현예에 의존하여 변할 수 있다. 예를 들어, 하나의 특정 구현예에서, 소프트웨어는 패킷 네트워크 내에서 디바이스들을 발견하고 구성하기 위해 열거(enumeration) 프로세스를 수행하는 데 사용될 수 있으며, 이러한 열거 프로세스 동안, 구성 정보는 패킷 기반 플러시 커맨드들의 처리에 대한 다양한 디바이스들의 능력들을 식별하기 위해 구성 레지스터들에 저장될 수 있다. 따라서, 구성 레지스터들의 제공은 패킷 네트워크의 플러시 능력들을 제어하고 구성하는 소프트웨어의 능력을 허용할 수 있다.
이제 도면들을 참조하여 특정 예들이 설명될 것이다.
도 1은 본 명세서에 설명된 기법들이 이용될 수 있는 시스템의 블록도이다. 특히, 예를 들어, 개인용 컴퓨터 또는 서버 상에서 실행되는 소프트웨어의 형태를 취할 수 있는 원격 에이전트(10)는 패킷 네트워크(15)를 통해 지속 도메인(20)과 통신하고 있다. 패킷 네트워크는 다양한 형태들을 취할 수 있지만, 본 명세서에 설명되는 예들의 목적을 위해, 패킷 네트워크가 PCIe 네트워크인 것으로 가정될 것이다.
지속 도메인(20)은 적어도 하나의 지속 지점(25)을 포함하며, 지속 지점은, 일단 데이터가 저장 디바이스에 도달하면, 그 데이터가 전력 공급의 중단의 경우에 지속되어야 하도록 배열되는 그 저장 디바이스이다. 지속 지점(25)은 다양한 형태들을 취할 수 있으며, 예를 들어, 전력이 메모리 디바이스로부터 제거되는 경우 데이터를 유지하는 메모리 디바이스일 수 있고, 그 일 예는 비휘발성(NV) 메모리이다. 대안적으로, 지속 지점은 비휘발성 메모리 디바이스보다 더 높은 레벨에 있을 수 있으며, 특히, 본질적으로 지속성을 갖지 않지만, 일단 데이터가 그 지점에 도달하면, 전력 공급의 중단의 경우 그 지점의 데이터가 비휘발성 메모리로 이동될 수 있다는 것을 보장하기 위한 부가적인 메커니즘들이 제공되는 저장 디바이스일 수 있다. 따라서, 예로서, 일부 예시들에서, 캐시 계층구조, 예를 들어 시스템 캐시 내의 특정 레벨에는 백업 전력이 제공될 수 있어서, 시스템 캐시를 포함하는 디바이스로의 전력 공급의 중단의 경우에, 시스템 캐시는 그 시스템 캐시가 비휘발성 메모리와 같은 영구적 지속 지점으로 자신의 데이터를 이동시킬 수 있게 하기에 충분한 전력 공급에 대한 액세스를 여전히 갖게 한다. 유사하게, 메모리 제어기 내의 큐 구조들 중 하나 이상은, 이들 큐들이 지속 지점이 되도록 이러한 방식으로 배열될 수 있다.
원격 에이전트(10)는 패킷 네트워크(15)를 통해 지속 도메인(20) 내의 메모리에 데이터를 기입하도록 배열될 수 있고, 일부 지점에서, 기입 데이터가 지속 지점(25)에 도달했다는 것을 보장하기를 바랄 수 있다. 특히, 지속 지점까지의 경로를 따라 다수의 버퍼 스테이지들이 존재할 수 있다는 것이 인식될 것이며, 따라서, 기입 요청들이 발행된 것과 데이터가 실제로 지속 지점에 도달하는 것 사이에 일부 상당한 지연이 존재할 수 있는 것이 가능하다. 예를 들어, 일부 예시들에서, 그 데이터는 캐시 계층구조에서 더 높은 레벨에 캐싱될 수 있고, 따라서 그 데이터가 캐시로부터 축출될 때까지 지속 지점에 도달하지 않을 수 있다. 유사하게, 큐 구조들은 배출하는 데 상당한 양의 시간을 소모할 수 있으며, 따라서 기입 데이터는 연장된 기간 동안 그러한 큐 구조들 내에서 유지될 수 있다.
지속 지점(25)으로의 하나 이상의 데이터 항목들의 플러시를 개시하려고 하기 위해, 원격 에이전트(10)는 플러시 요청을 발행할 수 있다. 다수의 기존의 기법들이 그러한 플러시 요청을 위해 사용될 수 있으며,예로서, 원격 데이터 메모리 액세스(RDMA) 플러시 요청이 원격 에이전트에 의해 발행될 수 있다.
PCIe 네트워크와 같은 전형적인 패킷 네트워크에서, 그러한 플러시 요청은 단지 메모리에 대한 기입 요청으로서 처리되고, 기입 요청으로서 PCIe 네트워크를 통해 전파되어, 요청이 지속 도메인 내의 큐 구조에 기입되는 것을 초래한다. 큐 구조는, 예를 들어 소프트웨어 스택일 수 있으며, 그 소프트웨어 스택으로의 기입의 결과로서, 지속 도메인 내의 소프트웨어는 요구되는 플러시 동작을 착수하기 위해 호출될 수 있다. 그러나, 이러한 소프트웨어 기반 메커니즘은 느린 것으로 밝혀졌으며, 따라서 플러시 요청이 발행되는 것과 플러시 동작이 수행되는 것 사이에 상당한 지연이 존재할 수 있다. 본 명세서에 설명된 기법들에 따르면, 원격 에이전트에 의해 발행된 플러시 요청에 응답하는 플러시 동작들의 더 신속한 수행을 가능하게 하는 대안적인 메커니즘이 구현된다.
도 1에서, 에이전트(10)는, 에이전트(10)가 지속 지점(25)을 포함하는 지속 도메인(20)으로부터 멀리있고, 특히 적어도 패킷 네트워크(15)에 의해 지속 도메인(20)으로부터 분리되므로 원격 에이전트로 지칭된다는 것을 유의해야 한다.
본 명세서에 설명된 기법들에 따르면, 원격 에이전트(10)는 플러시 요청을 패킷 네트워크(15)에 발행할 수 있으며, 여기서 플러시 요청은 패킷 네트워크 내의 컴포넌트(30)에 의해 수신될 것이다. 이러한 컴포넌트는 다양한 형태들을 취할 수 있지만, 일 예에서 네트워크 인터페이스 카드(NIC)일 수 있다. 플러시 요청이 단지 메모리에 대한 기입 요청으로서 PCIe 네트워크를 통해 전파되기보다는, 대신에, 디바이스(30)는 요청이 플러시 요청이라는 것을 검출할 수 있으며, 디바이스(30)에는 패킷 네트워크의 패킷 프로토콜, 이러한 경우에는 PCIe 프로토콜에 부합하는 패킷 기반 플러시 커맨드를 생성하기 위한 메커니즘이 제공된다. 특히, 플러시 커맨드를 표현하는 것으로서 식별되는 새로운 네이티브 커맨드를 포함하도록 PCIe 네트워크 내에서 이용가능한 네이티브 커맨드들을 확장하는 것이 제안되며, 이어서, 이러한 패킷 기반 플러시 커맨드는 지속 도메인(20)에 대한 인터페이스를 제공하는 컴포넌트(40)에 하나 이상의 개재 컴포넌트들을 통하여 패킷 네트워크(15)를 통해 라우팅될 수 있다. 단순화를 위해, 디바이스(30)와 디바이스(40) 사이에 스위치(35)가 도시되었지만, 전형적인 PCIe 네트워크에서, 디바이스(30)와 디바이스(40) 사이의 경로에 더 많은 디바이스들이 존재할 수 있거나 또는 대안적으로 디바이스(30)와 디바이스(40) 사이에 직접 경로가 존재할 수 있다는 것이 인식될 것이다.
후속하는 설명에서, 수신된 플러시 요청에 응답하여 패킷 기반 플러시 커맨드를 생성하는 디바이스(30)는 요청자 디바이스로 지칭되고, 지속 도메인(20)에 인터페이싱하는 디바이스(40)는, 그 디바이스가 패킷 기반 플러시 커맨드에 응답하는 것을 담당하므로 컴플리터 디바이스로 지칭된다.
특히, 이전에 언급된 바와 같이 패킷 기반 플러시 커맨드가 PCIe 네트워크에 의해 지원되는 네이티브 커맨드일 것이고, 따라서 PCIe 네트워크를 통해 라우팅될 수 있는 다른 형태들의 네이티브 커맨드들과, 컴플리터 디바이스(40)와 같은 컴포넌트들에 의해 구별가능하므로, 컴플리터 디바이스(40)는 패킷 기반 플러시 커맨드를 검출할 것이다. 그러한 네이티브 커맨드들은 또한, 그들이 패킷 네트워크(15) 내의 하드웨어 컴포넌트들에 의해 인식되는 커맨드들이므로, 본 명세서에서 하드웨어 커맨드들로 지칭될 수 있다.
컴플리터 디바이스(40)는, 패킷 기반 플러시 커맨드에 의해 식별된 하나 이상의 데이터 항목들을 지속 지점(25)으로 플러싱하기 위해 지속 도메인(20) 내에서 플러시 동작을 트리거하도록 패킷 기반 플러시 커맨드의 수신을 검출하는 것에 응답한다. 플러싱될 데이터 항목들이 패킷 기반 플러시 커맨드 내에서 식별될 수 있는 다수의 방식들이 존재한다. 본 명세서에서 더 상세히 논의될 바와 같이, 일 예에서, 일련의 어드레스들은 패킷 기반 플러시 커맨드 내에서 제공된 정보를 참조하여 결정될 수 있어서, 지속 지점(25)에 아직 도달하지 않은 이들 어드레스들에 기입되는 임의의 데이터 항목들은 이들 데이터 항목들이 그 지속 지점(25)으로 플러싱되게 하기 위해 지속 도메인 내에서 플러시 동작의 대상이 될 수 있게 한다. 대안적인 배열에서, 흐름 식별자들은 기입 데이터의 개별 항목들과 연관될 수 있으며, 패킷 기반 플러시 커맨드는 흐름 식별자를 특정할 수 있어서, 이어서, 컴플리터 디바이스(40)는 지속 도메인(20) 내의 지속 지점(25)에 아직 도달하지 않은 관련된 흐름 식별자를 갖는 기입 데이터의 모든 항목들에 대해 플러시 동작이 호출되게 할 것이다.
컴플리터 디바이스가 패킷 네트워크를 통해 라우팅될 수 있는 다른 네이티브 커맨드들과 패킷 기반 플러시 커맨드를 구별할 수 있고, 따라서 지속 도메인(20) 내에서 요구되는 플러시 동작을 직접 호출하기 위해 패킷 기반 플러시 커맨드를 분석할 수 있으므로, 지속 지점(25)으로의 플러시를 처리하기 위해 지속 도메인에서 소프트웨어를 트리거할 어떠한 필요성도 더 이상 존재하지 않으며, 따라서, 이러한 메커니즘의 사용을 통해, 플러시 동작의 수행에서 상당한 개선이 달성될 수 있고, 이는 원격 에이전트(10)가 플러시 요청을 발행하는 것과 요구되는 플러시 동작이 지속 도메인(20) 내에서 수행되는 것 사이의 지연을 상당히 감소시킨다.
도 1이 시스템의 개략도를 제공하고, 시스템 내의 컴포넌트들의 실제 배열이 구현예에 의존하여 상당히 변할 수 있다는 것이 인식될 것이다. 2개의 특정 예시적인 시스템들이 도 2a 및 도 2b에 도시되어 있다. 도 2a의 예에서, 시스템-온-칩(System-on-Chip, SoC)(50)은 PCIe 네트워크(55)를 통해 지속 도메인(60)에 커플링된다. 특히, SoC(50)는 PCIe 네트워크(55)의 루트 포트(root port)(80)에 연결되며, 루트 포트(80)는 SoC의 프로세싱 능력들 및 메모리 서브시스템을 PCIe 네트워크(55)에 연결시키는 루트 복합 디바이스를 형성한다. 단순화를 위해, SoC 내의 상세한 컴포넌트들은 생략되지만, 프로세서 코어(70)는 상호연결부(75)를 통해 루트 포트(80)에 연결되는 것으로 도시되며, 프로세서 코어(70)(또는 적어도, 그 프로세서 코어 상에서 실행되는 소프트웨어)는, 일련의 기입 요청들을 지속 도메인(60) 내의 비휘발성 메모리(65)에 발행할 수 있고, 이어서 후속하여, 기입 데이터의 이들 항목들이 비휘발성(NV) 메모리(65)에 플러싱되는 것을 보장하기 위해 플러시 요청을 발행하기를 원할 수 있는 원격 에이전트로 보여질 수 있고, 이러한 예에서, 비휘발성 메모리(65)는 지속 지점으로 보여진다.
이러한 예에서, 비휘발성 메모리(65)에 대한 액세스를 제어하는 데 사용되는 메모리 제어기가 PCIe 네트워크(55) 내의 엔드포인트 디바이스(90)에 의해 제공되고, 하나 이상의 개재 컴포넌트들을 통해 루트 포트(80)에 커플링되며, 도 2a의 특정 예시에서, 개재 스위치(85)가 제공되는 것으로 가정된다.
도 2a에 도시된 비교적 간단한 구현에서도, 비휘발성 메모리(65) 전에 다수의 개재 큐 구조들이 존재할 수 있다는 것이 인식될 것이다. 예를 들어, 메모리 제어기(90)는 다수의 상이한 레벨들의 큐잉 구조들, 예를 들어, 커맨드들이 초기에 수신되는 수신 큐, 및 데이터가 실제로 NV 메모리(65) 상으로 전파되기 전의 하나 이상의 개재 큐들을 포함할 수 있다. 구현예에 의존하여, 엔드포인트 디바이스(90) 내의 컴포넌트들 중 하나 이상은 도 2a의 개략도에 따라 지속 도메인(60) 내에 있는 것으로 보여질 수 있거나, 또는 대안적으로 엔드포인트 디바이스(90)는 전체적으로 지속 도메인 외부에 있는 것으로 보여질 수 있으며, 이때 이어서, 엔드포인트 디바이스는 NV 메모리(65)로의 요구되는 데이터 항목들의 플러싱을 보장하기 위해 지속 도메인과 통신한다.
이전에 언급된 바와 같이, NV 메모리(65)가 지속 지점일 것이지만, 그것이 시스템 내의 유일한 지속 지점은 아닐 수 있다. 예를 들어, 일단 데이터가 지속 지점에 도달하면, 정전의 경우에 그 데이터를 NV 메모리(65)에 이동시키는 것이 가능해야 한다는 것이 알려져 있다는 점에서, 그 큐 구조가 그 지속 지점으로 보여질 수 있게 하기 위한 백업 전력 능력들이 제공되는 메모리 제어기(90) 내의 적어도 최종 레벨의 큐잉이 존재할 수 있다.
따라서, 도 2a의 예에서, 프로세서 코어(70)는 상호연결부(75)를 통해 루트 포트(80)에 라우팅되는 플러시 요청을 발행할 수 있다. 이어서, 루트 포트는 플러시 요청의 수신을 인식하고, PCIe 네트워크(55)의 PCIe 프로토콜에 부합하는 패킷 기반 플러시 커맨드로 그 플러시 요청을 변환한다. 이어서, 그 네이티브 커맨드는 PCIe 네트워크의 인프라구조를 통해 라우팅되며, 여기서 그 네이티브 커맨드는 엔드포인트(90)에 의해 수신된다. 이어서, 엔드포인트(90)는 커맨드를 플러시 커맨드인 것으로 인식하고, 요구되는 데이터 항목들이 지속 지점으로 플러싱되게 하도록 적절한 제어 신호들을 지속 도메인으로 발행하기 위해 플러시 커맨드의 콘텐츠들을 분석한다. 지속 도메인 내에 하나 초과의 지속 지점이 존재하는 경우, 원래의 플러시 요청은 어느 지속 지점이 타겟팅되고 있는지를 식별할 수 있고, 그 정보는 PCIe 네트워크를 통해 라우팅되는 패킷 기반 플러시 커맨드 내에서 캡처될 수 있어서, 이어서, 엔드포인트는, 데이터가 적절한 지속 지점, 예를 들어 NV 메모리(65)로, 또는 큐 구조가 지속 지점으로서 동작할 수 있도록 배열되는 메모리 제어기 내의 그 큐 구조로 플러싱되는 것을 보장하기 위해 적절한 제어 신호들을 발행할 수 있다.
도 2a의 예에서, 루트 포트(80)가 요청자 디바이스가 되고, 엔드포인트(90)가 컴플리터 디바이스의 동작을 수행한다는 것이 인식될 것이다. 도 2b는, 루트 포트가 컴플리터 디바이스를 형성하고, 지속 도메인이 루트 포트가 제공되는 SoC(115)와 연관되는 대안적인 예시적인 구현예를 예시한다.
도 2b의 예에서, 원격 에이전트(100)는 개재 PCIe 네트워크(110)를 통해, 지속 도메인으로 지향되는 플러시 요청을 발행하도록 배열된다. 도 2b에 도시된 예에서, 원격 에이전트는 PCIe 네트워크에 직접 연결되지 않지만, 대신에 개재 패브릭(fabric)(105)을 통해 PCIe 네트워크에 커플링된다. 패브릭(105)은 다양한 형태들을 취할 수 있지만, 예를 들어 인터넷일 수 있다. 따라서, 플러시 요청은 PCIe 네트워크(110)의 인터페이스 디바이스, 이러한 예에서는 NIC 카드(125)에 인터넷을 통해 라우팅된다. NIC 카드(125)는 이러한 구현예에서 요청자 디바이스로서 작용하며, 플러시, 즉 이전에 언급된 패킷 기반 플러시 커맨드를 표현하기 위해 이제 PCIe 네트워크에 의해 제공되는 이전에 언급된 네이티브 커맨드에 플러시 요청을 맵핑한다. 이어서, 그 커맨드는 플러시 요청에 의해 타겟팅되고 있는 지속 도메인과 연관된 루트 포트(135)에 스위치(130)를 통해 라우팅된다.
기입 데이터가 비휘발성 메모리(120)에 도달하기 전에 기입 데이터가 버퍼링될 수 있는 다양한 장소들을 예시하기 위해 다양한 저장 구조들이 도 2b의 SoC(115) 내에 도시된다. 특히, PCIe 네트워크(110)를 통해 SoC(115)에 커플링된 하나 이상의 원격 에이전트들에 의해 발행된 기입 요청들의 이전의 대상이었던 기입 데이터는 상호연결부(167)의 입력 큐 구조(140)를 통해 라우팅될 수 있으며, 이로부터, 그 기입 데이터는, 데이터가 최종적으로 비휘발성 메모리에 기입되기 전에, 시스템 캐시(145)를 통해 상호연결부의 하나 이상의 출력 큐 구조들(150)로 그리고 그곳으로부터 메모리 제어기(155)(그 자체는 일부 내부 큐 구조들(160)을 포함할 수 있음)로 전파될 수 있다.
루트 포트(135)가 패킷 기반 플러시 커맨드를 수신할 때, 루트 포트(135)는 그 커맨드를 플러시 커맨드로서 인식하며, SoC(115) 내의 플러시 제어 회로부(170)에 전송되는 제어 신호들을 생성하기 위해 플러시 커맨드의 콘텐츠를 분석할 수 있다. 플러시 제어 회로부의 정확한 위치는 구현예에 의존하여 변할 수 있으며, 실제로, 단일의 중심화된 플러시 제어 회로이기보다는 SoC 내의 다양한 위치에 분산될 수 있다. 다른 예시적인 구현예에서, 플러시 제어 회로부(170)는 루트 포트(135) 내에 구현될 수 있다. 그러나, 플러시 제어 회로부(170)가 구현되지만, 그 플러시 제어 회로부(170)는 SoC(115) 내의 플러시 동작들의 수행을 제어하여, SoC의 다양한 큐/저장 구조들 내의 콘텐츠가 지속 지점으로 플러싱되게 허용하도록 제공된다. 이는 NV 메모리(120)만이 지속 도메인 내의 지속 지점이라는 것일 수 있거나, 또는 이는 다른 저장 구조들 중 하나 이상이 또한 지속 지점을 제공할 수 있다는 것일 수 있다. 예를 들어, 메모리 제어기 내의 큐 구조들(160)은 적합한 백업 전력이 제공되면 지속 지점일 수 있다. 유사하게, 일부 구현예들에서, 시스템 캐시에는 시스템 캐시의 콘텐츠들이 전력 공급의 중단의 경우 NV 메모리(120)에 기입될 수 있게 하도록 적합한 백업 전력이 제공될 수 있으므로, 시스템 캐시는 또한 지속 지점으로 보여질 수 있다.
루트 포트(135)가 PCIe 네트워크를 통해 라우팅된 패킷 기반 플러시 커맨드를 인식할 수 있다는 사실로 인해, 이어서, 루트 포트(135)는 요구되는 플러시 동작을 구현하기 위해 그 패킷 기반 플러시 커맨드의 콘텐츠들을 분석하고 플러시 제어 회로부(170)와 직접 통신할 수 있다. 따라서, 알려진 종래 기법과 대조적으로, 요구되는 플러시 동작을 수행하기 위해 SoC 내의 프로세서 코어(165) 상에서 소프트웨어를 호출할 필요성이 존재하지 않는데, 그 이유는 PCIe 네트워크 자체가 PCIe 프로토콜에 부합하는 패킷 기반 플러시 커맨드를 생성하고 PCIe 네트워크를 통해 전파하는 능력으로 인해 "플러시-인식"되기 때문이다.
이전에 언급된 바와 같이, 플러시 요청들은 특정 데이터 항목들로 타겟팅될 수 있다. 따라서, 이는, 원격 에이전트(100)가 메모리 어드레스 범위 내에서 특정 메모리 어드레스들에 일련의 기입 요청들을 발행했고, 이어서, 후속 플러시 요청이 이들 메모리 어드레스들을 식별하기 위해 어드레스 범위 정보를 제공할 수 있는 경우일 수 있다. 그 어드레스 정보는 PCIe 네트워크(110)를 통해 라우팅되는 내부 패킷 기반 플러시 커맨드 내에서 캡처될 수 있어서, 루트 포트(135)는 이어서, 플러시의 대상이 될 필요가 있는 요구되는 어드레스들을 특정하는 플러시 제어 회로부(170)에 플러시 제어 신호들을 발행할 수 있다. 이어서, PCIe 네트워크(110)와 관련 지속 지점 사이의 다양한 개재 저장 구조들은 관련 기입 데이터 항목들 중 임의의 것이 여전히 이들 구조들 내에 있는지 여부를 결정하기 위해 검토될 수 있으며, 그 경우, 이들 데이터 항목들은 지속 지점으로 플러싱될 수 있다. 메모리 제어기 내의 큐 구조들(160)이 지속 지점으로서 작용할 수 있고, 플러시 요청이 관련되는 지속 지점으로서 이들 큐 구조들이 식별되는 상황을 순수하게 예로서 취할 경우, 큐 구조들(140, 150) 내에서 또는 시스템 캐시(145) 내에서 유지되는 임의의 관련 데이터 항목들은, 패킷 기반 플러시 커맨드의 분석에 기초하여 루트 포트(135)에 의해 발행된 제어 신호들에 응답하여 플러시 제어 회로부(170)를 통해 큐 구조들(160)로 플러싱될 수 있다.
도 3은 위에서 설명된 기능을 구현하기 위해 PCIe 네트워크의 요청자 디바이스 내에서 제공될 수 있는 컴포넌트들을 예시하는 블록도이다. 요청자 디바이스(200)는 원격 에이전트 또는 개재 패브릭에 대한 인터페이스(205)를 가지며, 이를 통해 요청자 디바이스(200)는 원격 에이전트로부터 요청들을 수신할 수 있다. 인터페이스(205)에서 수신된 요청들은, 트랜잭션 계층으로서 제공되는 패킷 생성 회로부(210)(또한, 본 명세서에서 변환 회로부로 지칭됨)로 전파된다. 트랜잭션 계층은 아웃-바운드(out-bound) 트랜잭션 계층 패킷(TLP)들의 어셈블리를 위한 시작 지점 및 인바운드(inbound) TLP들의 디스어셈블리를 위한 엔드포인트이다. 도 3의 예시의 목적들을 위해, 요청자 디바이스로부터 PCIe 네트워크로의 송신 경로만이 도시되어 있고, 수신 경로는 생략되지만, 정보가 또한, PCIe 네트워크 내로부터 밖으로 요청자 디바이스(200)를 통해 원격 에이전트 또는 개재 패브릭으로 흐를 수 있다는 것이 이해될 것이다.
패킷 기반 플러시 커맨드들에 대한 위에서 설명된 기능을 지원하기 위해, 플러시 커맨드 발생기(220)가 패킷 생성 회로부(210) 내에서 제공된다. 착신 요청이 플러시 요청인 것으로 식별될 때, 플러시 커맨드 생성기(220)는 그 플러시 요청을 표현하기 위해 PCIe 네트워크를 통해 라우팅될 내부 패킷 기반 플러시 커맨드를 생성하도록 배열된다. 패킷 기반 플러시 커맨드의 정확한 형태는 구현예에 의존하여 변할 수 있고, 2개의 상이한 포맷들이 본 명세서에 설명된다. 첫번째는, 플러시 프리픽스를 이미 존재하는 패킷 포맷에 추가하여, 그 연관된 패킷과 조합된 플러시 프리픽스가 패킷 기반 플러시 커맨드를 표현하는 것으로 보여지게 하는 것을 수반한다. 플러시 프리픽스가 없을 시에, 패킷은 그의 표준 방식으로 해석될 것이다. 나중에 논의될 특정 예에서, 패킷 기반 플러시 커맨드를 형성하기 위해 재사용될 수 있는 패킷은 판독 패킷이며, 따라서 판독 패킷에 플러시 프리픽스가 선행할 때, 플러시 프리픽스와 판독 패킷의 조합은 패킷 기반 플러시 커맨드로 보여진다. 그러나, 대안적인 구현예에서, 그러한 플러시 프리픽스가 사용되지 않으며, 대신에, 플러시 패킷이 PCIe 네트워크를 통해 라우팅될 수 있는 대안적인 패킷들, 예를 들어 판독 패킷들 및 기입 패킷들과 구별될 수 있게 하기 위해 전용 플러시 패킷 포맷이 제공된다.
송신 회로부(215)는 생성된 패킷들을 요청자 디바이스(200)의 PCIe 링크로 출력하기 위해 패킷 생성 회로부(210)에 연결된다. 송신 회로부는 다양한 형태들을 취할 수 있지만, 하나의 예시적인 구현예에서, PCIe 프로토콜에 의해 제공되는 데이터 링크 및 물리적 계층들을 포함할 것이다.
또한 도 3에 도시된 바와 같이, 송신 회로부를 통해 PCIe 링크로 라우팅되는 패킷들 중 하나 이상과 관련하여 흐름 식별자 정보를 제공하기 위해 흐름 ID 생성기(225)가 제공될 수 있다. 흐름 식별자들은 하나 이상의 기입 커맨드들과 연관되기 위하여, 그리고 플러시의 대상이 될 필요가 있는 데이터 항목들을 식별하기 위해 플러시 커맨드들에 포함되기 위하여 원격 에이전트에 의해 식별될 수 있다. 흐름 ID 생성기(225)는 송신 회로부를 통해 PCIe 링크로 발행되는 기입 패킷들에 흐름 ID 프리픽스를 추가할 수 있으며, 이때 이들 흐름 ID 프리픽스들은 기입 패킷들과 관련하여 PCIe 네트워크를 통과해서, 이들 흐름 식별자들이 또한 기입 데이터와 함께 지속 도메인 내로 전파될 수 있게 한다. 이어서, 후속 플러시 요청은 그 플러시 요청이 관련되는 흐름 식별자를 식별할 수 있으며, 플러시 커맨드 생성기(220)는, 그 플러시 식별자를 내부에 포함하는 패킷 기반 플러시 커맨드를 생성할 수 있다. 이어서, 컴플리터 디바이스에서, 그 플러시 식별자는 플러시 동작의 대상이 될 필요가 있는 기입 데이터 항목들을 식별하는 데 사용될 수 있다.
도 3에 도시된 예에서, 요청자 디바이스(200) 내에서 인에이블되는 특징부들을 식별하도록 구성 정보를 저장하기 위해 하나 이상의 구성 레지스터들(230)이 요청자 디바이스 내에서 또한 제공될 수 있다. 특히, 요청자 디바이스가 위에서 논의된 방식으로 플러시 요청들을 처리하고 흐름 식별자들을 사용하기 위한 능력은 구성 레지스터들(230)의 사용을 통해 구성가능하게 될 수 있다. 구성 레지스터 콘텐츠는 다양한 방식들로 설정될 수 있지만, 하나의 예시적인 구현예에서, PCIe 네트워크가 부팅될 때 열거 프로세스를 수행하는 데 사용되는 소프트웨어는 패킷 네트워크 내에서 디바이스들을 발견 및 구성하고, 다양한 디바이스들의 플러시 능력들을 식별하도록 구성 레지스터들에서 적절한 구성 정보를 설정하기 위해 사용될 수 있다.
도 4는 하나의 예시적인 배열에서 컴플리터 디바이스(250) 내에서 제공될 수 있는 컴포넌트들을 예시하는 도면이다. PCIe 네트워크로부터 커맨드들을 수신하고, 지속 도메인 내로 발행되는 제어 신호들을 생성하기 위해 수신 경로와 연관된 컴포넌트들만이 도시되어 있다. 수신 회로부(255)는 PCIe 링크로부터 커맨드들을 수신하기 위해 제공되며, 도 3에 도시된 송신 회로부(215)와 마찬가지로, 수신 회로부(255)는 물리적 및 데이터 계층들을 포함할 수 있다.
이어서, 패킷 해체(deconstruction) 회로부(260)가 트랜잭션 계층에 제공되어, 수신된 커맨드들을 디패킷화(depacketise)한다. 패킷 기반 플러시 커맨드들의 프로세싱을 지원하기 위해, 수신된 커맨드가 그러한 플러시 커맨드일 때를 검출할 수 있고, 그 예시에서, 인터페이스(265)를 통해 지속 도메인에 발행하기 위한 적절한 제어 신호들을 생성하기 위해 플러시 커맨드 내의 정보를 분석할 수 있는 플러시 동작 트리거 회로부(270)가 제공된다. 기입 커맨드들과 관련하여 흐름 식별자 프리픽스들의 존재를 검출하고, 그 예시에서는, 흐름 식별자를 추출하고 그 흐름 식별자가 인터페이스(265)를 통해 지속 도메인으로 기입 데이터 및 연관된 기입 어드레스와 함께 출력되게 하는데 사용될 수 있는 흐름 식별자 검출기/처리기(275)가 제공된다.
도 3을 참조하여 논의된 요청자 디바이스(200)와 마찬가지로, 컴플리터 디바이스(250)는 컴플리터 디바이스의 능력들을 식별하는 구성 정보를 저장하고, 특히 플러시 커맨드들을 처리하는 그의 능력을 식별하기 위한 구성 레지스터들(280)을 포함할 수 있다.
도 3의 구성 레지스터들(230) 및 도 4의 구성 레지스터들(280)이 다양한 형태들을 취할 수 있지만, 하나의 특정 예에서, 연관된 디바이스의 확장된 능력을 식별하는, 이러한 예시에서는, 플러시 요청들 및 선택적으로는 흐름 식별자들을 프로세싱 및 처리하는 그의 능력을 식별하는 확장된 능력 구조로서 형성된다. 어드레스 기반 플러싱이 대신 사용될 수 있으므로, 이전에 논의된 바와 같이 플러시 요청들이 흐름 식별자들을 사용할 필요가 없으므로, 플러시 동작들을 처리하도록 인에이블되는 디바이스가 흐름 식별자들을 또한 처리할 수 있는 것이 필요하지 않다는 것을 유의해야 한다. 따라서, 흐름 식별자들의 사용은 플러시 동작들을 처리하는 디바이스의 능력 위에 계층화될 수 있는 선택적인 부가적 능력이다.
도 5는 제1 예시적인 구현예에 따른, 패킷 기반 플러시 커맨드의 포맷을 예시하는 도면이며, 여기서 플러시 프리픽스(300)는 기존의 패킷 포맷(330)과 관련하여 사용된다. 기존의 패킷 포맷은, 그 포맷에 플러시 프리픽스(300)가 선행할 때 상이한 의미가 주어지며, 하나의 예시적인 구현예에서, 기존의 패킷 포맷(330)은 판독 팩 포맷(read pack format)이다. 따라서, 선행하는 플러시 프리픽스가 없을 시에, 패킷(330)은 판독 커맨드를 식별하는 판독 패킷으로서 결정될 것이다. 그러나, 플러시 프리픽스(300)가 패킷(330)에 선행할 때, 플러시 프리픽스와 패킷의 조합은 패킷 기반 플러시 커맨드로서 해석될 것이다.
플러시 프리픽스는 도 5에 도시된 바와 같이 다수의 필드들을 포함한다. 필드(305)는 프리픽스가 플러시 프리픽스인 것을 식별한다. 플러시 지점 필드(310)는 플러시 요청이 얕은 플러시에 관련되는지 또는 깊은 플러시에 관련되는지를 식별한다. 필드(315)는 어드레스 기반 플러시가 수행될지 또는 흐름 식별자 기반 플러시가 수행될지를 식별하는 플러시 타입 필드이다. 마지막으로, 속성 필드(320)는 플러시 타입이 어드레스 기반 플러시인지 또는 흐름 식별자 기반 플러시인지에 의존하여 상이하게 사용된다. 어드레스 기반 플러시의 경우, 속성 필드(320)는 어드레스 정보를 제공하는 데 사용되고, 이어서 어드레스 정보는 플러시 요청이 관련된 어드레스 범위를 결정하는 데 이용된다. 그러나, 흐름 식별자 기반 플러시의 경우, 속성 필드(320)는 플러시 요청이 관련된 흐름 식별자를 표시하는 흐름 식별자 값을 저장하는 데 사용된다.
이전에 언급된 바와 같이, 패킷(330)은 일 구현예에서 판독 패킷(또한, 판독 헤더 패킷으로 지칭됨)이며, 따라서 다양한 바이트들 내의 다양한 비트 필드들은 주변 컴포넌트 상호연결 특수 관심 그룹(Peripheral Component Interconnect Special Interest Group, PCI-SIG)에 의해 생성된 PCIe 규격에 정의된 바와 같은 판독 패킷들과 연관된 표준 의미를 갖는다. 따라서, Fmt 및 타입 필드들은 패킷을 판독 패킷인 것으로 집합적으로 식별하는 데 사용된다. 길이 필드가 통상적으로 패킷 내에서 제공된 데이터의 양을 식별하는 데 이용되고, 판독 패킷의 경우, 동반되는 데이터가 존재하지 않으므로, 길이 필드가 판독 패킷 포맷으로 사용되지 않는다는 것을 유의해야 한다(대신에, 길이 필드는 예약된 필드로서 식별됨). 그러나, 플러시 프리픽스가 플러시 커맨드를 수행하기 위해 판독 패킷과 관련하여 사용될 때, 길이 필드는 선택적으로, 어드레스 기반 플러시에 대한 어드레스들의 범위를 식별하기 위해 플러시 프리픽스의 속성 필드(320) 내의 어드레스 정보와 관련하여 사용될 수 있는 부가적인 어드레스 정보를 캡처하는 데 이용될 수 있다.
도 5에 도시된 바와 같이, 어드레스 정보는 판독 패킷(330) 내에서 제공될 수 있고, 제공된 어드레스 정보의 양은 32 비트 어드레스들이 사용되는지 또는 64 비트 어드레스들이 사용되는지에 의존할 것이다. 또한 도 5에 표시된 바와 같이, 패킷의 바이트 4 내지 7은 PCIe 규격에 의해 정의된 특정한 바이트 인에이블 정보를 제공하고, 또한, 패킷을 생성했던 요청자 디바이스를 식별하기 위한 요청자 ID, 및 그 요청자 디바이스에 의해 사용된 태그 값을 저장하기 위한 태그 필드를 제공한다. 이어서, 이러한 요청자 ID 및 태그 정보는 컴플리터 디바이스로부터의 임의의 응답 패킷에서 리턴되어, 그 응답이 제공되어야 하는 요청자 디바이스를 식별할 수 있다. 이어서, 태그 정보는 이전에 발행되었던 커맨드와 응답을 매칭하기 위해 요청자 디바이스에 의해 사용될 수 있다.
이전에 언급된 바와 같이, 사용될 수 있는 하나의 타입의 플러시 커맨드는 흐름 식별자 기반 플러시 커맨드이다. 흐름 식별자 플러시의 사용을 지원하기 위해, 이어서, 데이터를 메모리에 기입하기 위해 발행된 선행 기입 커맨드들은 이들과 연관된 흐름 식별자 정보를 가질 것이다. 하나의 예시적인 구현예에서, 이는 도 6에 예시된 바와 같이 흐름 식별자 프리픽스를 사용하여 달성된다. 특히, PCIe 규격에서 정의된 바와 같은 표준 기입 헤더 패킷(370)은 기입 커맨드들을 송신하는 데 여전히 사용될 수 있지만(그리고, 헤더에는 전형적으로, 도 6에 도시되지 않은 다수의 바이트들의 데이터 페이로드가 뒤따를 것이고, 데이터 페이로드의 양은 길이 필드의 값에 의해 표시됨), 기입 헤더 패킷에는 흐름 식별자 프리픽스(350)가 선행할 것이다. 흐름 식별자 프리픽스는 프리픽스가 흐름 식별자 프리픽스인 것을 식별하는 제1 필드(355)를 갖는다. 도 6에 도시된 예에서, 이어서, 바이트 1의 상부 4 비트가 예약되지만, 바이트 1의 나머지 비트들, 및 바이트 2 및 3은 플러시 식별자 값을 저장할 수 있는 플러시 식별자 필드(365)를 형성한다. 기입 패킷에서 표시된 어드레스에 저장하기 위해 기입 데이터를 지속 도메인 내로 출력하는 데 사용되는 컴플리터 디바이스에서, 흐름 식별자 프리픽스의 존재가 식별될 것이고, 흐름 식별자가 필드(365)로부터 추출될 것이어서, 그것은 기입 데이터 및 연관된 기입 어드레스와 함께 지속 도메인 내로 전파될 수 있다. 적절한 시기에 플러시 커맨드가 특정 흐름 식별자를 특정하여 발행될 때, 흐름 식별자 정보는 컴플리터 디바이스에 의해 플러시 요청으로부터 추출되고, 플러시 요청의 대상이 될 기입 데이터를 식별하는 데 사용하기 위해 지속 도메인 내로 전파될 수 있다.
도 7은 원격 에이전트로부터 수신된 플러시 요청을 프로세싱할 때 요청자 디바이스에서 취해진 단계들을 예시하는 흐름도이다. 단계(400)에서, 플러시 요청의 수신이 대기되고, 플러시 요청의 수신 시에, 단계(405)에서 어드레스 기반 플러시 요청이 발행되었는지 여부가 결정된다. 발행되었다면, 프로세스는 단계(410)로 진행하며, 여기서, 도 5를 참조하여 이전에 논의된 바와 같이 플러시 프리픽스가 생성된다. 플러시 타입 필드는 어드레스 기반 플러시를 식별하도록 설정되고, 플러시 지점 필드는 원래의 플러시 요청에서 제공된 정보에 의존하여 깊은 플러시 또는 얕은 플러시 중 어느 하나를 식별하도록 설정된다. 추가로, 속성 필드는 어드레스 범위 정보를 식별하도록 설정된다.
그러나, 단계(405)에서 어드레스 기반 플러시가 요청되지 않았다고 결정하면, 이는 흐름 식별자 플러시 요청이 발행되었다는 것을 의미하고, 단계(415)에서 플러시 프리픽스가 그에 따라 생성된다. 따라서, 플러시 타입은 흐름 식별자 플러시 타입을 식별하도록 설정되고, 플러시 지점 필드는 단계(410)를 참조하여 이전에 논의된 바와 같이 설정되며, 속성 필드는 흐름 식별자를 식별하도록 설정된다. 흐름 식별자는 원격 에이전트로부터 수신된 플러시 요청에 의해 제공될 수 있다.
단계(410) 또는 단계(415) 중 어느 하나에 후속하여, 프로세스는 단계(420)로 진행하며, 여기서 시작 어드레스를 식별하는 데 사용되는 어드레스 비트들을 갖는 판독 패킷이 생성된다. 이러한 시작 어드레스 정보는 판독 요청이 라우팅되어야 하는 컴플리터 디바이스를 식별하는 데 사용된다. 흐름 식별자 기반 플러시의 경우, 그 시작 어드레스 정보는 그 목적을 위해서만 사용되지만, 어드레스 기반 플러시 요청의 경우, 그 정보는 또한, 어드레스 기반 플러시가 관련되는 범위를 계산할 때 사용되는데, 그 이유는 플러시 프리픽스(및 선택적으로는 판독 패킷의 길이 필드) 내에서 제공된 부가적인 정보가 그 시작 어드레스에 대한 어드레스들의 범위를 식별하는 데 사용되기 때문이다.
도 8은 패킷 기반 플러시 커맨드의 수신 시에 컴플리터 디바이스에서 취해진 단계들을 예시하는 흐름도이다. 단계(450)에서 그러한 수신을 검출할 시에, 단계(455)에서 플러시 프리픽스는 플러시 타입 및 플러시 지점을 결정하기 위해 분석된다. 이어서, 단계(460)에서, 플러시 타입이 어드레스 기반 플러시인지 여부가 결정되고, 어드레스 기반 플러시라면, 프로세스는 단계(465)로 진행하며, 여기서 어드레스 범위는 플러시 프리픽스 및 연관된 패킷 둘 모두 내의 어드레스 정보를 사용하여 계산된다. 하나의 특정 구현예에서 수행되는 계산의 더 많은 세부사항들은 도 9를 참조하여 나중에 논의될 것이다.
단계(465)에 후속하여, 단계(470)에서, 결정된 어드레스 범위 내의 어드레스에 대한 모든 기입 데이터에 대한 식별된 지속 지점에 대해(즉, 플러시 프리픽스 내의 플러시 지점 정보에 의해 식별된 지속 지점에 대해) 지속 도메인에서 플러시 동작이 개시된다. 그 결과, 지속 도메인에서, 식별된 저항 지점에 아직 도달하지 않은 어드레스들 중 임의의 어드레스로 지향되는 기입 데이터의 임의의 항목들이 존재한다고 결정되면, 이들 데이터 항목들은 관련 개재 저장 구조들로부터 아래로 지속 지점으로 플러싱될 것이다.
단계(460)에서 플러시 타입이 대신에, 흐름 식별자 플러시 타입인 것으로 결정되면, 프로세스는 단계(475)로 진행하며, 여기서 흐름 식별자는 플러시 프리픽스로부터 추출된다. 도 8에 도시된 예에서, 흐름 식별자의 미리 결정된 값은 특수한 흐름 식별자 값으로서 예약되며, 따라서 단계(480)에서, 흐름 식별자가 그 특수한 미리 결정된 값을 갖는지 여부가 결정된다. 그렇지 않다고 가정하면, 프로세스는 단계(485)로 진행하며, 여기서 추출된 흐름 식별자를 갖는 모든 기입 데이터에 대한 식별된 지속 지점에 대해 지속 도메인에서 플러시 동작이 개시된다.
그러나, 단계(480)에서, 흐름 식별자가 미리 결정된 값을 갖는다고 결정되면, 프로세스는 단계(490)로 진행하며, 여기서 연관된 흐름 식별자를 갖는 모든 기입 데이터에 대한 식별된 지속 지점에 대해 지속 도메인에서, 그 기입 데이터와 연관된 흐름 식별자 값에 관계없이, 플러시 동작이 개시된다. 따라서, 흐름 식별자의 미리 결정된 값은, 자신과 연관된 흐름 식별자 값을 갖고 지속 지점에 아직 도달하지 않은 그 모든 데이터 항목들을 플러싱하는 데 사용될 수 있다.
도 9는, 어드레스 범위가 플러시 프리픽스 및 연관된 판독 패킷 내에서 제공된 정보로부터 어떻게 결정될 수 있는지를 더 상세하게 예시하는 흐름도이다. 단계(500)에서, 시작 어드레스는 판독 패킷으로부터 결정되며, 이는 판독 패킷의 어드레스 필드 내의 정보에 의해 제공된다. 단계(505)에서, 플러시 프리픽스의 바이트 1의 비트 3 내지 0이 어드레스 범위 한계의 입도(granularity) "G"를 결정하는 데 사용된다. 이는 어드레스 범위 한계 필드가 해석되는 입도 값을 제공한다. 이러한 필드에 대한 인코딩은 다음과 같은 하나의 예시적인 구현예에서 이루어진다:
0000b = 입도는 1 바이트이다.
0001b = 입도는 2 바이트이다.
0010b = 입도는 4 바이트이다.
0011b = 입도는 8 바이트이다.
0100b = 입도는 16 바이트이다.
0101b = 입도는 32 바이트이다.
0110b = 입도는 64 바이트이다.
0111b = 입도는 128 바이트이다.
1000b = 입도는 256 바이트이다.
1001b = 입도는 512 바이트이다.
1010b = 입도는 1024 바이트이다.
1011b = 입도는 2048 바이트이다.
1100b = 입도는 4096 바이트이다.
1101b = 입도는 8192 바이트이다.
1110b = 입도는 16384 바이트이다.
1111b = 입도는 32768 바이트이다.
따라서, 이러한 예에서, 입도가 1 바이트 내지 32 K바이트(Kbyte)로 변할 수 있다는 것을 알 수 있을 것이다.
단계(510)에서, 부가적인 범위 정보를 제공하기 위한 판독 패킷 내의 길이 필드의 사용이 인에이블되는지 여부가 결정된다. 그렇지 않으면, 프로세스는 단계(515)로 진행하며, 여기서 플러시 프리픽스의 바이트 2 및 3을 입도와 곱하고, 이어서 그 결과를 시작 어드레스에 추가함으로써 한계 어드레스가 발견된다. 이는, 입도가 32K 바이트로 설정된 상황에서 2 기가바이트의 최대 범위를 제공한다.
단계(510)에서, 길이 필드가 인에이블된다고 결정되면, 프로세스는 단계(520)로 진행한다. 한계 어드레스는 단계(515)에서와 본질적으로 동일한 방식으로 계산되지만, 단지 플러시 프리픽스의 바이트 2 및 3을 사용하는 대신에, 이들 바이트들은 길이 필드의 부가적인 어드레스 정보와 연접되어, 16 비트보다는 26 비트의 값을 제공하고, 이어서, 그 연접된 값은 그 계산이 시작 어드레스에 추가된 결과로 입도와 곱해진다. 이는, 입도가 32K 바이트로 설정될 때 2 P바이트(Pbyte)의 최대 범위를 제공한다.
도 10a는 기입 데이터 커맨드들이 생성 디바이스에서 어떻게 생성되는지를 예시한다. 기입 요청이 PCIe 네트워크 내의 커맨드 생성 디바이스에 의해 수신될 때, 단계(550)에서 흐름 식별자가 기입들에 대해 인에이블되는지 여부가 결정된다. 그렇지 않으면, 단계(555)에서 기입 패킷은 표준 방식으로 생성된다. 그러나, 흐름 식별자가 인에이블되면, 단계(560)에서, 흐름 식별자 프리픽스는 도 6을 참조하여 이전에 논의된 형태로 생성되고, 기입 데이터 커맨드를 식별하기 위해 기입 패킷과 관련하여 출력된다. 이전에 논의된 바와 같이, 기입 데이터 패킷은 표준 형태의 패킷일 수 있고, 흐름 식별자 프리픽스는 기입 데이터와 연관된 흐름 식별자 값을 제공할 것이다.
도 10b는 기입 데이터 커맨드가 컴플리터 디바이스에서 어떻게 분석되는지를 예시하는 흐름도이다. 단계(570)에서, 흐름 식별자 프리픽스가 기입 패킷과 함께 제공되는지 여부가 결정된다. 그렇지 않으면, 단계(575)에서 기입 어드레스 및 기입 데이터가 기입 패킷으로부터 추출되고, 표준 방식으로 지속 도메인으로 출력된다. 그러나, 흐름 식별자 프리픽스가 기입 패킷과 함께 제공되면, 프로세스는 단계(580)로 진행하며, 여기서 기입 어드레스 및 기입 데이터는 지속 도메인으로 출력되지만, 이러한 예시에서는 흐름 식별자 프리픽스로부터 추출되었던 흐름 식별자를 동반한다.
하나의 예시적인 구현예에서, 패킷 기반 플러시 커맨드는, 일단 플러시 동작이 수행되면 적절한 시기에 응답이 제공될 커맨드이다. 이러한 목적을 위해, 완료 패킷의 표준 포맷이 사용될 수 있고, 특히 데이터를 갖지 않는 완료 패킷 포맷이 사용될 수 있는데, 그 이유는, (판독 데이터가 응답으로 제공될 필요가 있는 판독 커맨드와는 대조적으로) 어떠한 데이터도 플러시 커맨드에 응답하여 리턴될 필요가 없고, 요구되는 모든 것은 플러시 동작의 상태, 즉 플러시 동작이 성공적으로 완료되었는지 여부를 제공하는 응답이기 때문이다.
도 11a는 그러한 완료 패킷을 발행하기 위해 컴플리터 디바이스에서 취해진 단계들을 예시하는 흐름도이다. 단계(600)에서, 플러시 동작의 완료가 대기되고, 이어서, 단계(605)에서, 플러시 요청이 성공적었는지 여부를 표시하기 위해 요청자 디바이스에 전송될 데이터 없이 완료 패킷이 생성된다.
도 11b는 사용될 수 있는 완료 패킷의 일 예를 예시한다. 타입 필드와 조합된 Fmt 필드는 완료 패킷이 데이터가 없는 완료 패킷이라는 것을 식별한다. 따라서, 길이 필드는 패킷이 제공된 데이터가 존재하지 않으므로 모두 0으로 설정될 것이며, 따라서, 길이 필드는 이러한 타입의 완료 패킷에서 예약된 필드로서 보여질 수 있다. 완료 패킷을 발행하는 컴플리터 디바이스를 식별하기 위해 컴플리터 ID 필드가 사용된다. 또한 도시된 바와 같이, 플러시 동작이 올바르게 완료되었는지 여부를 식별하기 위해 상태 필드가 사용된다. 또한, 완료 패킷이 지향되는 요청자 디바이스를 식별하기 위한 요청자 ID 필드가 제공되며, 이전에 논의된 바와 같이, 완료 패킷을 요청자 디바이스가 이전에 발행했던 대응하는 커맨드와 결부시키기 위해 완료 패킷의 수신 시에 그 요청자 디바이스에 의해 적절한 시기에 사용될 태그 값을 제공하기 위해 태그 필드가 사용될 수 있다.
위에서 설명된 예시적인 구현예에서, 패킷 기반 플러시 커맨드는 플러시 프리픽스가 선행하는 기존의 패킷 타입의 사용을 통해 표현된다. 그러나, 대안적인 구현예에서, 전용 패킷 타입들이 플러시 커맨드들에 대해 제공될 수 있으며, 그 결과, 어떠한 플러시 프리픽스도 필요하지 않을 것이다. 2개의 예시적인 포맷들이 도 12a 및 도 12b에 도시되어 있다. 특히, 제1 전용 패킷 타입(650)은 어드레스 기반 플러시 커맨드를 수행하기 위해 사용될 수 있다. Fmt 및 타입 필드들은 패킷이 플러시 커맨드에 관련되는 것을 식별하는 데 사용될 수 있다. 알 수 있는 바와 같이, 이러한 패킷은 플러시 프리픽스 기반 구현예를 참조하여 이전에 논의된 정보 필드들 모두를 통합하며, 따라서 시작 어드레스 및 어드레스 범위 한계를 식별하기에 충분한 어드레스 정보를 제공한다. 또한, 플러시 지점 및 플러시 타입 필드들은 깊은 플러시가 요구되는지 또는 얕은 플러시가 요구되는지를 식별하기 위해 제공되며, 이러한 경우, 플러시 타입 필드는 어드레스 기반 플러시가 수행될 것이라는 것을 식별할 것이다. 시작 어드레스는 플러시 어드레스 필드들에 의해 주어지며, 어드레싱 모드에 의존하여 64 비트 값 또는 32 비트 값 중 어느 하나일 것이다. 시작 어드레스 비트들 1 및 0이 이러한 특정 포맷의 플러시 커맨드에서 바이트 20 내의 비트 1 및 0에 의해 주어진다는 것을 유의해야 한다. 이어서, 종료 어드레스는 시작 어드레스 더하기 어드레스 범위 한계 정보이다. 64 비트 어드레싱을 수행할 때 어드레스 범위 한계 비트 47 내지 0이 사용되는 반면, 32 비트 어드레싱의 경우, 어드레스 범위 한계 비트 31 내지 0이 사용된다.
도 12b는 흐름 ID 기반 플러시를 이용할 때 사용될 수 있는 제2 전용 패킷 타입(670)을 예시한다. 시작 어드레스는 도 12a를 참조하여 위에서 논의된 바와 동일한 방식으로 계산된다. 다시, 플러시 지점 필드는 깊은 플러시가 수행될지 또는 얕은 플러시가 수행될지를 식별할 수 있으며, 이러한 경우에는, 흐름 ID 기반 플러시가 수행될 것이라는 플러시 타입 필드 식별자들을 식별할 수 있다. 도 12b에 도시된 바와 같이, 흐름 식별자 필드는 20 비트 흐름 식별자 값이 제공될 수 있게 한다. 이전에 논의된 바와 같이, 흐름 식별자 기반 플러시 커맨드들을 논의할 때, 플러시 어드레스는 커맨드를 적절한 컴플리터 디바이스로 라우팅하기 위해서만 사용되고, 플러시 프로세싱을 수행할 시에는 컴플리터에 의해 사용되지 않는데, 그 이유는 후자의 경우, 그것이 지속 지점으로 플러싱될 필요가 있는 데이터 항목들을 식별하는 데 사용되는 흐름 식별자이기 때문이다.
도 12a 및 도 12b에 도시된 전용 패킷 타입들이 이전에 논의된 패킷들보다 더 큰 크기의 것이라는 것을 유의할 것이다. 길이 필드는 패킷의 총 크기를 인코딩하여, 64 비트 또는 32 비트 어드레싱 중 어느 하나에 대해 적용가능한 데이터 워드들의 정상적인 수를 넘어 사용되는 페이로드의 부가적인 데이터 워드들의 수를 식별하는 데 사용될 수 있다.
컴플리터 디바이스가 이러한 새로운 타입들의 요청 커맨드를 지원하지 않으면, 그 컴플리터 디바이스는 지원되지 않는 요청 응답을 요청자 디바이스에게 다시 전송하도록 배열될 것이다.
PCIe 네트워크 내에서 위에서 설명된 기법들을 이용할 때, 플러시 요청들이 엔드포인트 또는 루트 포트 중 어느 하나에 의해 생성될 수 있다는 것이 예상된다. 흐름 ID 프리픽스를 갖는 기입들이 또한 엔드포인트들 또는 루트 포트에 의해 생성될 수 있다. 메모리 공간 BAR들 및 루트 포트들을 이용하는 PCIe 기능들(이들은 소프트웨어에 의해 발견될 수 있는 가장 작은 엔티티들이며, 따라서, 예를 들어, 엔드포인트는 상이한 ID들을 내부에 갖는 다수의 기능들을 가질 수 있음)은 플러시 요청들에 대한 그리고 흐름 ID 프리픽스를 갖는 기입들에 대한 컴플리터일 수 있다.
위에서 설명된 기법들을 채택함으로써, 원격 에이전트들로부터의 플러시 요청들의 처리는 알려진 기법들을 사용하는 것보다 상당히 더 빠르게 수행될 수 있으며, 그에 의해, 전력의 중단 전에 데이터가 지속 지점에 기입되지 않는 위험을 감소시킬 수 있다는 것이 밝혀졌다.
본 출원에서, "...하도록 구성된"이라는 말은 장치의 요소가 정의된 동작을 수행할 수 있는 구성을 갖는다는 것을 의미하는 데 사용된다. 이러한 문맥에서, "구성"은 하드웨어 또는 소프트웨어의 상호연결의 배열 또는 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 가질 수 있거나, 프로세서 또는 다른 프로세싱 디바이스가 기능을 수행하도록 프로그래밍될 수 있다. "하도록 구성된"은, 장치 요소가, 정의된 동작을 제공하기 위해 어떤 방식으로든 변경될 필요가 있음을 암시하지는 않는다.
본 발명의 예시적인 실시예들이 첨부 도면들을 참조하여 본 명세서에서 상세히 설명되었지만, 본 발명은 그러한 정확한 실시예들로 제한되지 않으며, 첨부된 청구항들에 의해 한정된 바와 같은 본 발명의 범위 및 사상으로부터 벗어남이 없이 실시예들에서 다양한 변경들, 추가들 및 수정들이 당업자에 의해 이루어질 수 있다는 것이 이해되어야 한다. 예를 들어, 본 발명의 범위로부터 벗어남이 없이 독립 청구항들의 특징들과 종속 청구항들의 특징들의 다양한 조합이 이루어질 수 있다.

Claims (30)

  1. 장치로서,
    하나 이상의 데이터 항목들이 지속 지점(point of persistence)으로 플러싱(flush)될 것을 요청하는 원격 에이전트에 의해 생성된 플러시 요청을 수신하고, 패킷 네트워크의 패킷 프로토콜에 부합하는 패킷 기반 플러시 커맨드로 상기 플러시 요청을 변환하기 위한 상기 패킷 네트워크 내의 요청자 디바이스; 및
    상기 지속 지점을 포함하는 지속 도메인에 커플링되는 상기 패킷 네트워크 내의 컴플리터 디바이스(completer device)를 포함하며,
    상기 컴플리터 디바이스는, 상기 패킷 기반 플러시 커맨드의 수신을 검출하고, 상기 하나 이상의 데이터 항목들을 상기 지속 지점으로 플러싱하기 위해 상기 지속 도메인 내에서 플러시 동작을 트리거하도록 배열되는, 장치.
  2. 제1항에 있어서,
    상기 패킷 기반 플러시 커맨드는, 상기 패킷 네트워크를 통해 라우팅되는 다른 네이티브 커맨드(native command)들과 상기 패킷 네트워크의 디바이스들에 의해 구별되는 상기 패킷 네트워크의 네이티브 커맨드를 형성하는, 장치.
  3. 제1항 또는 제2항에 있어서,
    상기 패킷 프로토콜은 주변 컴포넌트 상호연결 익스프레스(Peripheral Component Interconnect Express, PCIe) 프로토콜이고, 상기 패킷 기반 플러시 커맨드는 트랜잭션 계층(transaction layer) 커맨드를 형성하는, 장치.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서,
    상기 패킷 기반 플러시 커맨드는 플러시 타입을 식별하도록 배열되는, 장치.
  5. 제4항에 있어서,
    상기 플러시 타입은, 상기 플러싱될 하나 이상의 데이터 항목들이 상기 패킷 기반 플러시 커맨드와 함께 제공된 어드레스 정보로부터 상기 컴플리터 디바이스에 의해 결정된 어드레스 범위에 의해 식별되는 어드레스 기반 플러시 타입과 대안적인 플러시 타입을 구별하기 위해 사용되는, 장치.
  6. 제5항에 있어서,
    상기 대안적인 플러시 타입은 흐름 식별자가 상기 패킷 기반 플러시 커맨드 내에서 제공되는 흐름 식별자 플러시 타입이며,
    상기 플러싱될 하나 이상의 데이터 항목들은, 상기 지속 지점에 아직 도달하지 않았고, 연관된 상기 흐름 식별자를 갖는 상기 지속 도메인 내의 데이터 항목들인, 장치.
  7. 제6항에 있어서,
    상기 패킷 네트워크 내의 하나 이상의 디바이스들은, 상기 컴플리터 디바이스로의 상기 패킷 네트워크를 통한 전달을 위해 기입 데이터 커맨드들을 생성하도록 배열되고, 상기 흐름 식별자 플러시 타입을 지원하기 위해, 흐름 식별자 프리픽스(prefix) 및 적어도 하나의 연관된 기입 데이터 패킷에 의해 형성된 기입 데이터 커맨드를 생성하도록 배열되며,
    상기 흐름 식별자 프리픽스는 상기 적어도 하나의 연관된 기입 데이터 패킷에 포함된 기입 데이터의 각각의 항목과 연관된 흐름 식별자의 표시를 포함하는, 장치.
  8. 제6항 또는 제7항에 있어서,
    상기 패킷 기반 플러시 커맨드 내에서 제공된 상기 흐름 식별자가 미리 결정된 값을 가질 때, 상기 컴플리터 디바이스는, 상기 지속 지점에 아직 도달하지 않았고, 연관된 흐름 식별자의 임의의 값을 갖는 상기 지속 도메인 내의 모든 데이터 항목들에 관련되는 것으로 상기 패킷 기반 플러시 커맨드를 해석하도록 배열되는, 장치.
  9. 제7항 또는 제8항에 있어서, 제7항에 종속되는 경우,
    상기 흐름 식별자 프리픽스는, 상기 패킷 네트워크의 임의의 개재 디바이스들을 통해 상기 컴플리터 디바이스로 상기 패킷 네트워크를 통하여 상기 연관된 기입 데이터 패킷과 함께 라우팅되는 종단간(end-to-end) 프리픽스인, 장치.
  10. 제1항 내지 제9항 중 어느 한 항에 있어서,
    상기 패킷 기반 플러시 커맨드는, 상기 하나 이상의 데이터 항목들이 플러싱될 지속 지점 레벨을 식별하는 데 사용되는 플러시 지점 표시를 제공하도록 배열되는, 장치.
  11. 제10항에 있어서,
    상기 플러시 지점은 제1 지속 지점으로의 얕은 플러시와, 상기 제1 지속 지점보다 하드웨어 장애(hardware failure)에 더 탄력적인 제2 지속 지점으로의 깊은 플러시를 구별하는 데 사용되는, 장치.
  12. 제1항 내지 제11항 중 어느 한 항에 있어서,
    상기 요청자 디바이스는, 상기 패킷 기반 플러시 커맨드가 상기 컴플리터 디바이스로의 상기 패킷 네트워크를 통한 송신을 위한 패킷을 적어도 포함하도록 상기 플러시 요청을 상기 패킷 기반 플러시 커맨드로 변환하기 위한 변환 회로부를 포함하는, 장치.
  13. 제12항에 있어서,
    상기 변환 회로부는 상기 패킷 기반 플러시 커맨드를 형성하기 위해 플러시 프리픽스 및 적어도 하나의 연관된 패킷을 생성하도록 배열되며,
    상기 연관된 패킷은 상기 패킷 네트워크 내의 다른 형태의 커맨드에 대해 또한 사용되는 타입의 패킷이고,
    상기 플러시 프리픽스는 상기 컴플리터 디바이스가 상기 패킷 기반 플러시 커맨드를 집합적으로 형성하는 것으로서 상기 플러시 프리픽스 및 상기 연관된 패킷을 해석하게 하는 데 사용되는, 장치.
  14. 제13항에 있어서,
    상기 연관된 패킷은 상기 패킷 네트워크 내의 판독 커맨드에 대해 또한 사용되는 타입의 패킷인, 장치.
  15. 제13항 또는 제14항에 있어서,
    상기 플러시 프리픽스는 상기 패킷 네트워크의 임의의 개재 디바이스들을 통해 상기 요청자 디바이스로부터 상기 컴플리터 디바이스로 상기 패킷 네트워크를 통해 상기 연관된 패킷과 함께 라우팅되는 종단간 프리픽스인, 장치.
  16. 제13항 내지 제15항 중 어느 한 항에 있어서,
    상기 플러시 프리픽스는, 상기 플러싱될 하나 이상의 데이터 항목들이 상기 패킷 기반 플러시 커맨드와 함께 제공된 어드레스 정보로부터 상기 컴플리터 디바이스에 의해 결정된 어드레스 범위에 의해 식별되는 어드레스 기반 플러시 타입과 대안적인 플러시 타입을 구별하기 위해 사용되는 플러시 타입을 식별하기 위한 타입 필드를 포함하는, 장치.
  17. 제13항 내지 제16항 중 어느 한 항에 있어서,
    상기 플러시 프리픽스는 속성 필드를 포함하며,
    상기 컴플리터 디바이스는, 상기 패킷 기반 플러시 커맨드에 응답하여 어드레스 기반 플러시를 수행할 때, 상기 플러싱될 데이터 항목들을 식별하는 데 사용되는 어드레스 범위를 결정하기 위해, 상기 연관된 패킷에서 제공된 추가적인 어드레스 정보와 조합하여 상기 플러시 프리픽스의 상기 속성 필드에서 제공된 어드레스 정보를 사용하도록 배열되는, 장치.
  18. 제17항에 있어서,
    상기 연관된 패킷에서 제공된 상기 추가적인 어드레스 정보는 시작 어드레스의 표시를 적어도 포함하며,
    상기 플러시 프리픽스의 상기 속성 필드로부터의 상기 어드레스 정보는 상기 시작 어드레스로부터 시작하는 어드레스들의 범위를 식별하는 데 사용되는, 장치.
  19. 제18항에 있어서,
    상기 연관된 패킷에서 제공된 상기 추가적인 어드레스 정보는 상기 어드레스들의 범위를 결정하기 위해 상기 플러시 프리픽스의 상기 속성 필드로부터의 상기 어드레스 정보와 조합하여 사용되는 값을 제공하는 길이 필드를 포함하는, 장치.
  20. 제13항 내지 제19항 중 어느 한 항에 있어서,
    상기 플러시 프리픽스는, 상기 하나 이상의 데이터 항목들이 플러싱될 지속 지점 레벨을 식별하는 데 사용되는 플러시 지점 필드를 포함하는, 장치.
  21. 제12항에 있어서,
    상기 변환 회로부는 상기 패킷 기반 플러시 커맨드를 형성하기 위해 적어도 하나의 전용 패킷 타입을 이용하도록 배열되는, 장치.
  22. 제21항에 있어서,
    제1 전용 패킷 타입은 어드레스 기반 플러시 타입의 패킷 기반 플러시 커맨드를 식별하는 데 사용되고, 제2 전용 패킷 타입은 흐름 식별자 플러시 타입의 패킷 기반 플러시 커맨드를 식별하는 데 사용되는, 장치.
  23. 제22항에 있어서,
    상기 제1 전용 패킷 타입은 상기 플러싱될 상기 하나 이상의 데이터 항목들을 식별하는 어드레스들의 범위를 결정하기에 충분한 어드레스 정보를 포함하는, 장치.
  24. 제22항 또는 제23항에 있어서,
    상기 제2 전용 패킷 타입은 흐름 식별자를 제공하기 위한 흐름 식별자 필드를 포함하며,
    상기 플러싱될 하나 이상의 데이터 항목들은, 상기 지속 지점에 아직 도달하지 않았고, 연관된 상기 흐름 식별자를 갖는 상기 지속 도메인 내의 데이터 항목들인, 장치.
  25. 제21항 내지 제24항 중 어느 한 항에 있어서,
    상기 적어도 하나의 전용 패킷 타입은, 상기 하나 이상의 데이터 항목들이 플러싱될 지속 지점 레벨을 식별하는 데 사용되는 플러시 지점 필드를 포함하는, 장치.
  26. 제1항 내지 제25항 중 어느 한 항에 있어서,
    상기 컴플리터 디바이스는, 상기 지속 도메인 내에서 상기 플러시 동작의 완료를 검출할 시에, 상기 패킷 네트워크를 통해 완료 확인응답 패킷을 상기 요청자 디바이스에 전송하도록 배열되는, 장치.
  27. 제1항 내지 제26항 중 어느 한 항에 있어서,
    상기 요청자 디바이스 및 상기 컴플리터 디바이스 각각에는, 상기 디바이스들이 상기 패킷 기반 플러시 커맨드를 처리하도록 인에이블되는지 여부를 식별하기 위해 구성 정보가 저장되는 하나 이상의 구성 레지스터들이 제공되는, 장치.
  28. 하나 이상의 데이터 항목들이 지속 지점으로 플러싱될 것을 요청하는 원격 에이전트에 의해 생성된 플러시 요청을 수신하기 위해 패킷 네트워크에서 사용하기 위한 요청자 디바이스로서,
    상기 요청자 디바이스는, 상기 지속 지점을 포함하는 지속 도메인 내에서 플러시 동작을 트리거하는 데 사용되는 컴플리터 디바이스로의 상기 패킷 네트워크를 통한 전방 송신(onward transmission)을 위해, 상기 패킷 네트워크의 패킷 프로토콜에 부합하는 패킷 기반 플러시 커맨드로 상기 플러시 요청을 변환하기 위한 변환 회로부를 포함하는, 요청자 디바이스.
  29. 패킷 네트워크 내에서 사용하기 위한 컴플리터 디바이스로서,
    상기 컴플리터 디바이스는, 상기 패킷 네트워크의 패킷 프로토콜에 부합하는 패킷 기반 플러시 커맨드의 상기 컴플리터 디바이스에 의한 수신에 응답하여, 상기 패킷 기반 플러시 커맨드에 의해 식별된 하나 이상의 데이터 항목들을 지속 도메인 내의 지속 지점으로 플러싱하기 위해 상기 지속 도메인 내에서 플러시 동작을 트리거하기 위한 플러시 동작 트리거 회로부를 갖는, 컴플리터 디바이스.
  30. 플러시 요청들을 프로세싱하기 위해 패킷 네트워크를 동작시키는 방법으로서,
    상기 패킷 네트워크 내의 요청자 디바이스에서, 하나 이상의 데이터 항목들이 지속 지점으로 플러싱될 것을 요청하는 원격 에이전트에 의해 생성된 플러시 요청을 수신하는 단계;
    상기 요청자 디바이스에서, 상기 패킷 네트워크의 패킷 프로토콜에 부합하는 패킷 기반 플러시 커맨드로 상기 플러시 요청을 변환하는 단계;
    상기 지속 지점을 포함하는 지속 도메인에 커플링되는 컴플리터 디바이스에 상기 패킷 네트워크를 통해 상기 패킷 기반 플러시 커맨드를 전달하는 단계; 및
    상기 패킷 기반 플러시 커맨드의 수신을 검출하는 것에 응답하여, 상기 하나 이상의 데이터 항목들을 상기 지속 지점으로 플러싱하기 위해 상기 지속 도메인 내에서 플러시 동작을 트리거하도록 상기 컴플리터 디바이스를 배열하는 단계를 포함하는, 패킷 네트워크를 동작시키는 방법.
KR1020227004866A 2019-07-19 2020-05-19 패킷 네트워크 내에서 플러시 요청들을 프로세싱하기 위한 장치 및 방법 KR20220032612A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/516,698 US11153231B2 (en) 2019-07-19 2019-07-19 Apparatus and method for processing flush requests within a packet network
US16/516,698 2019-07-19
PCT/GB2020/051214 WO2021014114A1 (en) 2019-07-19 2020-05-19 An apparatus and method for processing flush requests within a packet network

Publications (1)

Publication Number Publication Date
KR20220032612A true KR20220032612A (ko) 2022-03-15

Family

ID=70847432

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227004866A KR20220032612A (ko) 2019-07-19 2020-05-19 패킷 네트워크 내에서 플러시 요청들을 프로세싱하기 위한 장치 및 방법

Country Status (6)

Country Link
US (1) US11153231B2 (ko)
EP (1) EP3999972B1 (ko)
JP (1) JP2022541561A (ko)
KR (1) KR20220032612A (ko)
CN (1) CN114127700A (ko)
WO (1) WO2021014114A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117724833B (zh) * 2023-12-06 2024-05-28 无锡众星微系统技术有限公司 一种基于流属性的PCIe tag缓存自适应资源分配方法和装置

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7617363B2 (en) * 2005-09-26 2009-11-10 Intel Corporation Low latency message passing mechanism
US7685371B1 (en) * 2006-04-19 2010-03-23 Nvidia Corporation Hierarchical flush barrier mechanism with deadlock avoidance
CN103514132B (zh) * 2013-09-12 2016-06-08 广东电网有限责任公司电力科学研究院 一种用于大数据量高速率通讯的数据优化方法
US10248610B2 (en) * 2015-06-23 2019-04-02 Mellanox Technologies, Ltd. Enforcing transaction order in peer-to-peer interactions
US10776272B2 (en) * 2016-03-02 2020-09-15 Mellanox Technologies, Ltd. Control of persistent memory via a computer bus
KR102644275B1 (ko) * 2016-05-19 2024-03-06 삼성전자주식회사 리프레쉬 리드 동작을 수행하는 불휘발성 메모리 장치를 제어하는 메모리 콘트롤러의 동작 방법
US10552367B2 (en) 2017-07-26 2020-02-04 Mellanox Technologies, Ltd. Network data transactions using posted and non-posted operations

Also Published As

Publication number Publication date
EP3999972A1 (en) 2022-05-25
US20210021544A1 (en) 2021-01-21
CN114127700A (zh) 2022-03-01
JP2022541561A (ja) 2022-09-26
EP3999972B1 (en) 2023-11-22
WO2021014114A1 (en) 2021-01-28
US11153231B2 (en) 2021-10-19

Similar Documents

Publication Publication Date Title
US9652388B2 (en) Method, apparatus and system for performing management component transport protocol (MCTP) communications with a universal serial bus (USB) device
US7711871B1 (en) Interface device and method for command processing
US7308523B1 (en) Flow-splitting and buffering PCI express switch to reduce head-of-line blocking
EP2047370B1 (en) Method and apparatus for distributing usb hub functions across a network
US20080155145A1 (en) Discovery of a Bridge Device in a SAS Communication System
CN104641360A (zh) 对存储器及对等设备的双播PCIe入站写入
TW200404432A (en) Memory management offload for RDMA enabled adapters
US7472158B2 (en) Initiator connection tag for simple table lookup
US20240054100A1 (en) Method of notifying a process or programmable atomic operation traps
US8199648B2 (en) Flow control in a variable latency system
US20060187960A1 (en) Network interface and computing system including the same
KR20220032612A (ko) 패킷 네트워크 내에서 플러시 요청들을 프로세싱하기 위한 장치 및 방법
EP3188446B1 (en) Remote resource access method and switching device
EP1988470A2 (en) Network device and transmission method thereof
US8688867B2 (en) System and methods for communicating between serial communications protocol enabled devices
CN115495406A (zh) 一种基于PCIe的报文传输方法、装置、设备及存储介质
JP6273972B2 (ja) 情報処理装置、送受信装置、及び情報処理装置の制御方法
US7839875B1 (en) Method and system for an efficient transport loopback mechanism for TCP/IP sockets
WO2016095340A1 (zh) 数据发送成功的确认方法及装置
KR20220135562A (ko) 메모리 액세스를 위한 직렬 통신 방법 및 시스템
US20220376947A1 (en) Monitoring controller area network (can) xl nodes
US20240069754A1 (en) Computing system and associated method
JP5364641B2 (ja) 情報処理装置
US20220376948A1 (en) Monitoring controller area network (can) xl nodes
JP5482306B2 (ja) データ転送制御装置及び電子機器