KR102274960B1 - 컴퓨터 시스템에서의 메모리 쓰기 관리 - Google Patents

컴퓨터 시스템에서의 메모리 쓰기 관리 Download PDF

Info

Publication number
KR102274960B1
KR102274960B1 KR1020177005005A KR20177005005A KR102274960B1 KR 102274960 B1 KR102274960 B1 KR 102274960B1 KR 1020177005005 A KR1020177005005 A KR 1020177005005A KR 20177005005 A KR20177005005 A KR 20177005005A KR 102274960 B1 KR102274960 B1 KR 102274960B1
Authority
KR
South Korea
Prior art keywords
write
flag
fence
node
target
Prior art date
Application number
KR1020177005005A
Other languages
English (en)
Other versions
KR20170034424A (ko
Inventor
판카즈 쿠마르
사만타 제이. 에디리수리야
로저 씨. 젭슨
Original Assignee
인텔 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US14/499,063 external-priority patent/US20160092123A1/en
Application filed by 인텔 코포레이션 filed Critical 인텔 코포레이션
Publication of KR20170034424A publication Critical patent/KR20170034424A/ko
Application granted granted Critical
Publication of KR102274960B1 publication Critical patent/KR102274960B1/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
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2089Redundant storage control functionality
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2097Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements maintaining the standby controller/processing unit updated
    • 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/0604Improving or facilitating administration, e.g. storage management
    • 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/0629Configuration or reconfiguration of storage systems
    • 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/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • 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
    • 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/0813Multiuser, multiprocessor or multiprocessing cache systems with a network or matrix configuration
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/28Using a specific disk cache architecture
    • G06F2212/285Redundant cache memory
    • G06F2212/286Mirrored cache memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/31Providing disk cache in a specific location of a storage system
    • G06F2212/312In storage controller

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)
  • Quality & Reliability (AREA)
  • Bus Control (AREA)
  • Multi Processors (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

본 설명에 따르면, 타겟에 쓰기 동작들을 발행하는 소스와 함께 사용하기 위한 장치로서, 여기서 디바이스는 I/O 포트, 및 제1 복수의 쓰기 동작들의 발행과 연관시켜 소스에 의해 발행된 플래그를 검출하도록 구성된 타겟의 로직을 포함한다. 플래그의 검출에 응답하여, 타겟의 로직은 제2 복수의 쓰기 동작들의 쓰기 동작들 중 임의의 것의 완료 이전에 제1 복수의 쓰기 동작들이 메모리에서 완료되도록 보장한다. I/O 포트, 및 제1 복수의 쓰기 동작들을 발행하도록 그리고 제1 복수의 쓰기 동작들의 발행과 연관시켜 쓰기 펜스 플래그를 발행하도록 구성된 소스의 로직을 포함하는 소스의 장치가 또한 기술되어 있다. 다른 양태들이 본원에 기술되어 있다.

Description

컴퓨터 시스템에서의 메모리 쓰기 관리{MEMORY WRITE MANAGEMENT IN A COMPUTER SYSTEM}
본 발명의 특정 실시예들은 일반적으로 컴퓨터 시스템에서의 메모리 쓰기 관리에 관한 것이다.
예를 들어, 단일 프로세서 컴퓨터 시스템과 같은, 컴퓨터 시스템은 전형적으로 중앙 처리 유닛 및 시스템 메모리를 갖는다. 멀티 프로세서 컴퓨터 시스템들은 종종 다수의 노드들을 가지며, 여기서 시스템의 각각의 노드는 그 자신의 시스템 메모리 및 중앙 처리 유닛을 갖는다. 중앙 처리 유닛은 하나 이상의 처리 코어들을 포함하고, 단일 집적 회로 디바이스에서 처리 코어들과 통합될 수 있거나 개별적인 집적 회로 디바이스들에 존재할 수 있는, 종종 루트 컴플렉스(Root complex)라고 지칭되는, I/O(Input/Output) 컴플렉스를 추가로 포함할 수 있다. I/O 컴플렉스는 NTB(non-transparent bridge)들과 같은 브리지들 그리고, 예를 들어, 노드를 종종 하나 이상의 스위치들을 포함하는 PCIe(PCI Express) 패브릭과 같은 I/O 패브릭에 연결시키는, 종종 RP(Root Port)들이라고 지칭되는, I/O 포트들을 포함한다. 컴퓨터 시스템의 노드들 또는 다른 부분들은 I/O 패브릭을 통해 서로 통신하고, I/O 컴플렉스들을 통해 데이터 읽기 및 데이터 쓰기 메시지들을 포함하는 메시지들을 전송하고 수신할 수 있다.
예를 들어, 서버 SOC(system on a chip)와 같은 SOC는 처리 코어들뿐만 아니라 메모리 제어기 및 I/O 컴플렉스와 같은 다양한 전용 하드웨어 및 펌웨어 가속기들을 단일의 기판 상에 종종 통합시키며, I/O 컴플렉스는 RP(root port)들 또는 NTB(Non-Transparent Bridge)들뿐만 아니라 DMA(direct memory access) 제어기들, Intel QAT(Quick Assist Technology) 가속기들, CPM(Content Process Management) 가속기들 등을 포함할 수 있다. 처리 코어들과 통합된 이 전용 가속기들은 전용 하드웨어 또는 펌웨어가, 작업들이 프로그래밍된 처리 코어들 중 하나 이상에 의해 수행되는 구현들보다, 상당한 능력 개선 또는 성능 개선(또는 둘 다)을 제공할 수 있는 특정 작업들을 핸들링할 수 있다. 예를 들어, 통합된 DMA 제어기는 시스템 메모리와 PCIe RP(root port)들 또는 NTB(Non-Transparent Bridge)들 사이의 데이터 이동을 가속시킬 수 있다. 통합된 DMA 제어기는 또한 DIF(Data Integrity Field) 보호 정보 발생, CRC(cyclic redundancy check) 발생, 및 다른 저장 또는 네트워킹 특징들을 가속시킬 수 있다. QAT 또는 CPM 가속기는 데이터 압축, 암호화 등을 가속시킬 수 있다.
쓰기 데이터의 신속한 전달을 증진시키기 위해, I/O 컴플렉스 및 상호연결 I/O 패브릭은 로컬 노드와 같은 소스에 의해 원격 노드와 같은 타겟의 시스템 메모리에 쓰여지는 쓰기 데이터가, 소스에 의해 쓰기 데이터가 발행된 바로 그 순서로, 쓰여지는 것을 종종 보장하지 않는다. 그 결과, 타겟의 I/O 컴플렉스는, 이전의 쓰기 동작들의 완료를 기다리지 않고, 그의 시스템 메모리에 다수의 쓰기들을 발행할 수 있다. 그 결과, 저장 응용분야들과 같은 많은 응용분야들에 대해 적절한 대역폭들을 달성하는 것이 용이하게 된다. 부가의 데이터가 타겟 메모리에 쓰여지기 전에 특정의 쓰기 데이터 세트가 성공적으로 쓰여지는 것을 보장하기 위해, 소스는 특정의 쓰기 데이터 세트의 성공적인 쓰기를 검증하기 위해 타겟 메모리를 읽기 위해 읽기 동작을 종종 발생시킨다.
유사한 도면 부호들이 유사한 요소들을 가리키고 있는 첨부 도면의 도면들에, 본 개시내용의 실시예들이 제한으로서가 아니라 예로서 예시되어 있다.
도 1은 본 개시내용의 일 실시예에 따른, 쓰기 펜스 플래그 로직(write fence flag logic)을 이용하는 시스템의 선택된 양태들을 나타내는 상위 레벨 블록도.
도 2는 본 개시내용의 일 실시예에 따른 쓰기 펜스 플래그 로직을 이용하는 멀티 프로세서 저장소 제어기의 기본적인 아키텍처를 나타낸 도면.
도 3은 본 개시내용의 일 실시예에 따른, 도 2의 멀티 프로세서 저장소 제어기의 노드들의 보다 상세한 아키텍처를 나타낸 도면.
도 4a 내지 도 4c는 로컬 노드에 의해 발행되고 원격 노드에 의해 처리되는 쓰기 동작들의 종래 기술 예를 나타낸 개략도.
도 5는 원격 노드의 I/O 메시(I/O mesh)의 다양한 경로들을 통과하는 다양한 쓰기 동작들의 데이터의 종래 기술 예를 나타낸 개략도.
도 6은 검증을 위한 읽기 동작을 갖는 쓰기 동작들의 시퀀스의 종래 기술 예를 나타낸 개략도.
도 7은 본 개시내용의 일 실시예에 따른 쓰기 펜스 플래그 로직을 이용하는 멀티 프로세서 저장소 제어기의 로컬 노드의 메모리 공간으로부터 원격 노드의 메모리 공간으로의 주소 변환을 나타낸 개략도.
도 8a 내지 도 8d는 본 개시내용의 일 실시예에 따른 쓰기 펜스 플래그 로직을 이용하는 로컬 노드에 의해 발행되고 원격 노드에 의해 처리되는 쓰기 동작들의 일 예를 나타낸 개략도.
도 9a 및 도 9b는 도 8a 내지 도 8d의 쓰기 동작들과 관련하여 원격 노드에 의해 이용되는 원격 동작 저널(remote operation journal)의 일 예를 나타낸 개략도.
도 10a 내지 도 10d는 본 개시내용의 일 실시예에 따른 쓰기 펜스 플래그 로직을 이용하는 로컬 노드에 의해 발행되고 원격 노드에 의해 처리되는 쓰기 동작들의 다른 예를 나타낸 개략도.
도 11은 본 설명의 일 실시예에 따른 쓰기 펜스 플래그를 표시하는 헤더를 가지는 쓰기 기술자(write descriptor)의 일 예를 나타낸 개략도.
도 12a 및 도 12b는 도 10a 내지 도 10d의 쓰기 동작들과 관련하여 원격 노드에 의해 이용되는 원격 동작 저널의 일 예를 나타낸 개략도.
도 13a는 본 개시내용의 일 실시예에 따른 쓰기 펜스 플래그 로직을 이용하는 원격 노드의 동작들의 일 예를 나타낸 개략도.
도 13b는 본 개시내용의 일 실시예에 따른 쓰기 펜스 플래그 로직을 이용하는 원격 노드의 동작들의 다른 예를 나타낸 개략도.
도 14는 본 개시내용의 일 실시예에 따른, 도 2의 멀티 프로세서 저장소 제어기의 노드들의 보다 상세한 아키텍처의 다른 예를 나타낸 도면.
도 15a는 본 개시내용의 일 실시예에 따른 쓰기 펜스 플래그 로직을 이용하는 소스 노드의 동작들의 일 예를 나타낸 개략도.
도 15b는 본 개시내용의 일 실시예에 따른 쓰기 펜스 플래그 로직을 이용하는 소스 노드의 동작들의 다른 예를 나타낸 개략도.
도 16a는 타겟 또는 원격 노드에 의한 처리를 위한, 본 개시내용의 일 실시예에 따른 쓰기 펜스 플래그 로직을 이용하는 소스 또는 로컬 노드에 의해 발행된 쓰기 동작들의 일 예를 나타낸 개략도.
도 16b는 타겟 또는 원격 노드에 의한 처리를 위한, 본 개시내용의 다른 실시예에 따른 쓰기 펜스 플래그 로직을 이용하는 소스 또는 로컬 노드에 의해 발행된 쓰기 동작들의 다른 예를 나타낸 개략도.
도 17은 I/O 커밋 플래그(I/O commit flag)를 표시하는 제어 비트를 포함하는 헤더를 가지는 쓰기 기술자의 일 예를 나타낸 개략도.
이하의 설명에서, 유사한 컴포넌트들은, 그들이 상이한 실시예들에서 도시되어 있는지에 관계없이, 동일한 도면 부호들을 부여받고 있다. 본 개시내용의 일 실시예(들)를 명확하게 간결한 방식으로 예시하기 위해, 도면들이 꼭 축척대로 되어 있지는 않으며, 특정의 특징들이 얼마간 개략적인 형태로 도시되어 있을 수 있다. 일 실시예와 관련하여 기술되고 그리고/또는 예시되어 있는 특징들이 하나 이상의 다른 실시예들에서 동일한 방식으로 또는 유사한 방식으로 그리고/또는 다른 실시예들의 특징들과 결합되어 또는 그 대신에 사용될 수 있다.
본 설명의 양태들은 소스가 메모리를 갖는 타겟에 쓰기 동작들을 발행하는 컴퓨터 컴포넌트들 및 컴퓨터 시스템들에서의 메모리 쓰기 관리에 관한 것이다. 컴퓨터 시스템들은, 서로 링크되어 있는 단일의 주소 공간 또는 다수의 주소 공간들을 가지는, 단일 프로세서 또는 멀티 프로세서 시스템일 수 있다.
예를 들어, 단일 프로세서 또는 멀티 프로세서 컴퓨터 시스템에서, 일 실시예에서, 예를 들어, 쓰기 펜스 플래그와 같은 플래그가, 예를 들어, 동일한 시스템 또는 상이한 시스템에 있을 수 있는 타겟에 메모리 쓰기 동작들을 발행하는, 쓰기 펜스 소스 로직(write fence source logic)과 같은 로직에 의해 전송될 수 있는 메모리 쓰기 관리가 기술된다. 쓰기 펜스 플래그는 쓰기 펜스 플래그 이후의 메모리 쓰기 또는 다른 메모리 동작들이 완료되기 전에 쓰기 펜스 플래그와 연관된 메모리 쓰기 동작들이 완료되도록 보장하기 위해 적절한 조치를 취하는, 타겟의 I/O 컴플렉스의, 예를 들어, 쓰기 펜스 타겟 로직(write fence target logic)과 같은 로직에 의해 인식된다. 이하에서 보다 상세히 설명되는 바와 같이, 이러한 구성은, 일부 실시예들에서, 쓰기 펜싱(write fencing) 또는 다른 검증들을 위한 읽기 동작들을 감소시키거나 없앨 수 있다.
다수의 노드들을 갖는 멀티 프로세서 컴퓨터 시스템 - 각각의 노드는 다른 노드들의 주소 공간에 링크되어 있는 주소 공간을 가짐 - 과 같은 다른 예에서, 일 실시예에서, 예를 들어, 쓰기 펜스 플래그와 같은 플래그가, 원격 노드와 같은, 타겟에 메모리 쓰기 동작들을 발행하는 로컬 노드의 I/O 컴플렉스의, 예를 들어, 쓰기 펜스 소스 로직과 같은 로직에 의해 전송될 수 있는 메모리 쓰기 관리가 기술된다. 쓰기 펜스 플래그는 쓰기 펜스 플래그 이후의 메모리 쓰기 또는 다른 메모리 동작들이 완료되기 전에 쓰기 펜스 플래그와 연관된 메모리 쓰기 동작들이 완료되도록 보장하기 위해 적절한 조치를 취하는, 원격 노드의 I/O 컴플렉스의, 예를 들어, 쓰기 펜스 타겟 로직과 같은 로직에 의해 인식된다. 이하에서 보다 상세히 설명되는 바와 같이, 이러한 구성은, 일부 실시예들에서, 쓰기 펜싱 또는 다른 검증들을 위한 읽기 동작들을 감소시키거나 없앨 수 있다. 특정의 실시예들이 쓰기 펜스 플래그와 관련하여 기술되지만, 특정의 적용분야에 따라, 다른 유형들의 플래그들도 이용될 수 있다는 것을 잘 알 것이다.
도면들을 참조하면, 도 1은 본 개시내용의 일 실시예에 따른, 구현된 컴포넌트 또는 시스템의 선택된 양태들을 나타내는 상위 레벨 블록도이다. 시스템(10)은, 본 설명에 따른 쓰기 펜스 플래그 로직을 포함할 수 있는, 다수의 전자 및/ 컴퓨팅 디바이스들 중 임의의 것을 나타낼 수 있다. 이러한 전자 및/또는 컴퓨팅 디바이스들은 멀티 프로세서 시스템의 하나 이상의 노드들, 메인프레임, 서버, 개인용 컴퓨터, 워크스테이션, 전화 디바이스, 네트워크 기기, 가상화 디바이스, 저장소 제어기, 휴대용 또는 모바일 디바이스(예컨대, 랩톱, 넷북, 태블릿 컴퓨터, PDA(personal digital assistant), 휴대용 미디어 플레이어, 휴대용 게임 디바이스, 디지털 카메라, 휴대폰, 스마트폰, 피처폰 등) 또는 컴포넌트(예컨대, 시스템 온 칩, 프로세서, 브리지, 메모리 제어기, 메모리 등)와 같은 컴퓨팅 디바이스들을 포함할 수 있다. 대안의 실시예들에서, 시스템(10)은 보다 많은 요소들, 보다 적은 요소들, 및/또는 상이한 요소들을 포함할 수 있다. 더욱이, 비록 시스템(10)이 개별적인 요소들을 포함하는 것으로 도시되어 있을 수 있지만, 하나 이상의 이러한 요소들이, SoC(system on a chip)와 같은, 하나의 플랫폼 상에 통합될 수 있다는 것을 잘 알 것이다. 예시적인 예에서, 시스템(10)은 마이크로프로세서(20), 메모리 제어기(30), 메모리(40) 그리고, 예를 들어, I/O 컴플렉스, 비디오 제어기, 입력 디바이스, 출력 디바이스, 저장소, 네트워크 어댑터 등을 포함할 수 있는 주변 컴포넌트들(50)을 포함한다. 마이크로프로세서(20)는 명령어들 및 데이터를 저장하기 위한 메모리 계층구조의 일부일 수 있는 캐시(25)를 포함하고, 시스템 메모리(40)도 메모리 계층구조의 일부일 수 있다. 마이크로프로세서(20)와 메모리(40) 사이의 통신은 메모리 제어기(또는 칩셋)(30)에 의해 용이하게 될 수 있고, 메모리 제어기(또는 칩셋)(30)는 또한 주변 컴포넌트들(50)과의 통신도 용이하게 할 수 있다.
주변 컴포넌트들(50)의 I/O 컴플렉스는, 예를 들어, PCIe(Peripheral Component Interconnect Express) 아키텍처와 같은 다양한 데이터 전송 프로토콜들 및 아키텍처들을 구현할 수 있다. 특정의 적용분야에 따라, 다른 데이터 전송 프로토콜들 및 아키텍처들이 이용될 수 있다는 것을 잘 알 것이다.
주변 컴포넌트들(50)의 저장소는, 예를 들어, 자기 디스크 드라이브, 광학 디스크 드라이브, 테이프 드라이브, 플래시 메모리 등과 같은 비휘발성 저장소일 수 있다. 저장소는 내부 저장 디바이스 또는 접속된 또는 네트워크 액세스가능 저장소를 포함할 수 있다. 저장소 내의 프로그램들은 메모리에 로딩되고 프로세서에 의해 실행된다. 네트워크 제어기 또는 어댑터는, 이더넷, FC-AL(Fiber Channel Arbitrated Loop) 등과 같은 네트워크와의 통신을 가능하게 한다. 게다가, 이 아키텍처는, 특정 실시예들에서, 정보를 디스플레이 모니터 상에 렌더링하는 비디오 제어기를 포함할 수 있고, 여기서 비디오 제어기는 비디오 카드 상에 구현되거나 마더보드 또는 다른 기판 상에 탑재된 집적 회로 컴포넌트들 상에 통합될 수 있다. 입력 디바이스는 사용자 입력을 프로세서에 제공하기 위해 사용되고, 키보드, 마우스, 펜-스타일러스, 마이크로폰, 터치 감응 디스플레이 화면, 입력 핀, 소켓, 또는 본 기술분야에 공지된 임의의 다른 활성화 또는 입력 메커니즘을 포함할 수 있다. 출력 디바이스는 프로세서, 또는 디스플레이 모니터, 프린터, 저장소, 출력 핀, 소켓 등과 같은, 다른 컴포넌트로부터 전송된 정보를 렌더링할 수 있다. I/O 컴플렉스 및 네트워크 어댑터 중 하나 이상은, PCI(Peripheral Component Interconnect) 카드, PCI-익스프레스, 또는 어떤 다른 I/O 카드와 같은, 네트워크 카드 상에, 또는 마더보드 또는 다른 기판 상에 탑재된 집적 회로 컴포넌트들 상에 구현되거나, 마이크로프로세서(20)와 통합될 수 있다.
특정의 적용분야에 따라, 디바이스(10)의 컴포넌트들 중 하나 이상이 생략될 수 있다. 예를 들어, 네트워크 라우터는, 예를 들어, 비디오 제어기를 갖지 않을 수 있다. 비록 본원에서 주변 컴포넌트들(50)의 I/O 컴플렉스와 관련하여 기술되지만, 본원에 기술되는 바와 같은 쓰기 펜스 플래그 로직이 시스템(10)의 다른 컴포넌트들에 포함될 수 있다는 것을 잘 알 것이다. 본 설명에 따른 하나의 컴포넌트의 쓰기 펜스 소스 로직은 동일한 시스템 내의 또는 상이한 시스템 내의 컴포넌트의 쓰기 펜스 타겟 로직에 대해 버스, 패브릭, 네트워크, 인터넷 또는 임의의 다른 적당한 통신 경로를 통해 쓰기 동작들 및 쓰기 펜스 플래그를 발행할 수 있다.
예를 들어, 다수의 노드들을 가지는 것들과 같은 많은 컴퓨터 시스템들에서, 예를 들어, 각각의 노드의 I/O 컴플렉스 및 상호연결 I/O 패브릭은 (로컬 또는 소스 노드라고 지칭될 수 있는) 하나의 노드가 (원격 또는 타겟 노드라고 지칭될 수 있는) 다른 노드의 시스템 메모리에, 종종 원격 노드의 CPU의 처리 코어들의 개입이 거의 또는 전혀 없이, 직접 데이터를 쓸 수 있게 한다. 원격 시스템 메모리에 대한 쓰기 동작들의 완료를 표시하기 위해, 로컬 노드는 로컬 노드에 의한 차후의 장애의 경우에 원격 노드의 CPU에 의해 이용될 수 있는 원격 시스템 메모리에 있는 쓰기 저널(write journal)이라고 종종 지칭되는 데이터 구조에 엔트리를 종종 써넣는다.
예를 들어, 저장소 제어기는 종종 다수의 노드들을 가지는 멀티 프로세서 컴퓨터 시스템이다. 도 2는 본 설명의 일 실시예에 따른, 쓰기 펜스 소스 로직(110a)과 쓰기 펜스 타겟 로직(110b)을, 각각, 포함하는, 노드들(A, B)에 의해 표현된 바와 같은, 다수의 노드들을 가지는 멀티 프로세서 저장소 제어기(100)의 일 예를 나타내고 있다. 비록 멀티 프로세서 저장소 제어기(100)가, 간략함을 위해, 2개의 노드들, 소스 노드(A)와 타겟 노드(B)를 갖는 것으로 도시되어 있지만, 본 설명에 따른 컴퓨터 컴포넌트 또는 컴퓨터 시스템이, 특정의 적용분야에 따라, 보다 많거나 보다 적은 수의 소스들, 타겟들, 또는 노드들을 가질 수 있다는 것을 잘 알 것이다. 비록 특정의 실시예들이 쓰기 펜스 로직과 관련하여 기술되지만, 특정의 적용분야에 따라, 다른 유형들의 로직도 이용될 수 있다는 것을 잘 알 것이다.
저장소 제어기(100)는 전형적으로, 예를 들어, 디스크 드라이브들의 어레이들과 같은 저장소(114)로부터 데이터를 읽고 그에 데이터를 쓰는 I/O 동작들을 제어한다. I/O 동작들은 전형적으로 I/O 요청들을 제어기(100)와 같은 저장소 제어기들로 보내는 호스트 컴퓨터들(120a, 120b ... 120n)에 의해 버스, 네트워크, 링크 또는 다른 통신 경로(118)를 통해 요청된다. 호스트로부터 쓰기 요청을 수신할 때, (로컬 또는 소스 노드라고 지칭될 수 있는, 도 3) 저장소 제어기(100)의 하나의 노드는 종종 쓰기 요청의 쓰기 데이터를 그 자신의 로컬 시스템 메모리(300a)에 쓰고, 쓰기 데이터를 저장소 제어기의 (원격 또는 타겟 노드라고 지칭될 수 있는, 도 3) 다른 노드의 시스템 메모리(300b)로 미러링한다. 쓰기 데이터가 로컬 노드와 원격 노드(A, B) 둘 다의 시스템 메모리들(300a, 300b)에 안전하게 쓰여졌으면, 로컬 노드(A)는, 쓰기 데이터를 저장소(114)에 실제로 쓰는 것이 완료되지 않았을지라도, 쓰기 요청이 완료되었다는 것을 요청측 호스트(120a, 120b ... 120n)에 보고할 수 있다. 이러한 구성은, 저장소(114)에의 쓰기들이 시스템 메모리(300a, 300b)에의 쓰기들보다 완료하는 데 더 느릴 수 있기 때문에, 전체적인 효율을 증대시킬 수 있다. 로컬 노드(A)의 장애와 같은, 쓰기 데이터를 저장소(114)에 실제로 쓰는 것의 완료를 방해하는 장애의 경우에, 저장소 제어기(100)의 원격 노드(B)는 그의 시스템 메모리(300b)에 액세스하고 저장소(114)에의 쓰기 동작을 완료할 수 있다.
도 3은 본 설명에 따른 쓰기 펜스 플래그 로직을 가지는, 저장소 제어기(100)와 같은 멀티 프로세서 컴퓨터 시스템의 로컬 노드(A)와 원격 노드(B)의 일 예를 나타내는 개략도이다. 이 예에서, 노드(A)는 노드(A)가, 원격 또는 타겟 노드라고 지칭되는, 노드(B)에 대해 쓰기 동작들을 개시하고 있다는 점에서 로컬 또는 소스 노드라고 지칭된다. 노드(B)(이 후자의 예에서 로컬 또는 소스 노드)에 의해 노드(A)(이 후자의 예에서 원격 또는 타겟 노드)에 대해 개시되는 쓰기 동작들에 대해서는 노드들(A 및 B)의 역할들이 반대로 될 수 있다.
도 3의 예에서, 노드들(A 및 B)은 간략함을 위해 서로의 미러 이미지(mirror image)로서 나타내어져 있다. 다른 실시예들에서, 멀티 프로세서 시스템의 노드들이, 특정의 적용분야에 따라, 서로 상이할 수 있다는 것을 잘 알 것이다. 여기서, 노드들(A, B) 각각은 CPU 또는 처리 코어들(314a, 314b)을, 각각, 가지는 CPU(310a, 310b)를 포함한다. 각각의 노드(A, B)의 처리 코어들(314a, 314b)의 수는 특정의 적용분야에 따라 달라질 수 있다.
이 예의 각각의 노드(A, B)의 CPU(310a, 310b)는 각자의 노드(A, B)의 메모리(300a, 300b)로부터의 메모리 읽기들 및 그에의 메모리 쓰기들을 비롯한 메모리 동작들을 제어하는 메모리 제어기(320a, 320b)를 추가로 포함한다. 각각의 CPU(310a, 310b)의 I/O 컴플렉스(324a, 324b)는, 예를 들어, 루트 포트(root port)들과 같은, I/O 포트들(330a, 330b), DMA(direct memory access) 제어기(334a, 334b), 그리고, 예를 들어, NTB(nontransparent bridge)일 수 있는 브리지(340a, 340b)를 갖는다. 예시된 실시예에서, 각각의 I/O 컴플렉스(324a, 324b)의 브리지(340a, 340b)는 본 설명에 따른 쓰기 펜스 플래그 로직을 갖는다. 따라서, NTB(nontransparent bridge)(340a, 340b)는 도 3에서 "쓰기 펜스 브리지(write fence bridge)"(340a, 340b)라고 언급된다. 각각의 노드(A, B)의 처리 코어들(314a, 314b), 메모리 제어기(320a, 320b), 및 I/O 컴플렉스(324a, 324b)는 전형적으로 각각의 노드(A, B)의 코어들(314a, 314b), 메모리 제어기(320a, 320b), I/O 포트들(330a, 339b), DMA 제어기(334a, 334b) 및 브리지(340a, 340b) 사이의 통신을 용이하게 하는 통신 경로들 및 쓰기 버퍼들의 I/O 메시에 의해 상호연결된다.
노드(A)가 호스트 컴퓨터(120a, 120b ... 120n)(도 2)로부터 쓰기 요청을 수신할 때, 로컬 노드로서 동작하는 노드(A)는 쓰기 요청의 쓰기 데이터를 그의 로컬 시스템 메모리(300a)의 로컬 데이터 버퍼(350a)에 쓴다. 그 데이터 쓰기 동작의 완료 시에, 데이터 쓰기의 완료를 표시하는 엔트리가 본원에서 그의 로컬 시스템 메모리(300a)의 로컬 쓰기 저널(local write journal)(354a)이라고 지칭되는 데이터 구조에 입력된다. 그에 부가하여, 중복성을 위해, 노드(A)는 또한 호스트 컴퓨터(120a, 120b ... 120n)(도 2)로부터의 쓰기 요청의 쓰기 데이터가 원격 노드(B)의 시스템 메모리(300b)의 원격 데이터 버퍼(360b)에 쓰여지게 하기 위해 쓰기 동작들을 개시한다. 그 데이터 쓰기 동작의 완료 시에, 데이터 쓰기의 완료를 표시하는 엔트리가 원격 데이터 구조인, 원격 시스템 메모리(300b)의 원격 쓰기 저널(remote write journal)(364b)에 입력된다.
이와 유사하게, 노드(B)가 호스트 컴퓨터(120a, 120b ... 120n)(도 2)로부터 쓰기 요청을 수신할 때, 로컬 노드로서 동작하는 노드(B)는 쓰기 요청의 쓰기 데이터를 그의 시스템 메모리(300b)의 로컬 데이터 버퍼(350b)에 쓴다. 그 데이터 쓰기 동작의 완료 시에, 데이터 쓰기의 완료를 표시하는 엔트리가 데이터 구조인, 그의 로컬 시스템 메모리(300b)의 로컬 쓰기 저널(354b)에 입력된다. 그에 부가하여, 중복성을 위해, 노드(B)는 또한 호스트 컴퓨터(120a, 120b ... 120n)(도 2)로부터의 쓰기 요청의 쓰기 데이터가 노드(A)의 시스템 메모리(300a)의 원격 데이터 버퍼(360a)에 쓰여지게 하기 위해 쓰기 동작들을 개시한다. 그 데이터 쓰기 동작의 완료 시에, 데이터 쓰기의 완료를 표시하는 엔트리가 데이터 구조인, 시스템 메모리(300a)의 원격 쓰기 저널(364a)에 입력된다.
도 4a 내지 도 4c는 종래 기술의 멀티 프로세서 컴퓨터 시스템의 노드들이 본 설명에 따른 쓰기 펜스 플래그 로직을 갖지 않는 로컬 노드로부터 원격 노드로 데이터를 쓰는 것의 일 예를 나타내고 있다. 이 예에서, 로컬 노드는 "기술자"라고 지칭되는 데이터 구조를 사용하여 원격 노드에 의해 수행될 동작들을 전달한다. 예를 들어, "쓰기 기술자"는 쓰기 동작으로서 수행될 동작을 식별해주고, 쓰여질 쓰기 데이터를 제공하며, 쓰기 데이터가 쓰여져야 하는 타겟 주소 또는 주소들을 식별해준다. 쓰기 기술자는 또한 쓰기 동작을 식별해주기 위해 본원에서 "태그 ID"라고 지칭되는 고유 식별 번호를 제공할 수 있다.
로컬 노드는 쓰기 동작들의 시퀀스에 대한 쓰기 기술자들의 시퀀스를 어셈블(assemble)할 수 있다. 쓰기 기술자들의 시퀀스는, 원격 노드의 NTB(nontransparent bridge)와 같은, 원격 노드의 종단점 목적지(endpoint destination)로 주소지정되는 패킷들의 시퀀스 내에 페이로드들로서 패킹되고, 패킷들을 노드들을 상호연결시키는 I/O 패브릭을 통해 원격 노드로 전송한다.
원격 노드의 NTB(nontransparent bridge)는 로컬 노드로부터 수신된 패킷들을 어셈블하고, 수신된 패킷들로부터 각각의 쓰기 기술자를 언패킹(unpack)한다. 언패킹된 쓰기 기술자에 의해 식별된 쓰기 동작이 이어서 원격 노드에 의해 개시된다. 쓰기 동작은 원격 노드의, NTB(nontransparent bridge), I/O 포트들, 및 DMA 제어기와 같은 I/O 컴플렉스의 컴포넌트들 중 하나 이상에 의해, 그리고 CPU 코어들 및 메모리 제어기 중 하나 이상에 의해 수행될 수 있다. 예를 들어, 원격 노드의 NTB(nontransparent bridge)는 전형적으로 쓰기 데이터가 쓰기 동작에 의해 쓰여져야 하는 타겟 주소 또는 주소들을, 로컬 노드의 메모리 공간으로부터, 원격 노드의 메모리 공간으로 변환한다.
도 4a의 예에서, 예를 들어, 쓰기 펜스 소스 로직에 의해 제어되는, DMA 제어기와 같은 로컬 노드의 컴포넌트는 5개의 쓰기 동작들 write0, write1, write2, write3, 및 journalwrite3의 시퀀스를, 원격 노드의 원격 브리지(400)로 패킷들에 의해 전달되는 5개의 쓰기 기술자들의 형태로, 발행한다. 쓰기 동작 write3에 뒤따르는 쓰기 동작 journalwrite3은, 쓰기 완료 데이터 구조(write completion data structure)인 원격 노드의 원격 쓰기 저널에의 쓰기에 의해, 쓰기 동작들 write0 내지 write3의 완료를 알려주기 위한 것이다.
5개의 쓰기 기술자들의 5개의 쓰기 동작들 write0 내지 write3 및 journalwrite3은 도 4a에 의해 도시된 바와 같이 로컬 노드에 의해 발행된 바와 같은 원래의 순차적 순서로 원격 노드의 NTB(nontransparent bridge)(400)에 의해 수신될 수 있다. 이와 유사하게, 5개의 쓰기 기술자들의 5개의 쓰기 동작들이 도 4b에 의해 도시된 바와 같이 원래의 순차적 순서로, 예를 들어, 쓰기 펜스 소스 로직에 의해 제어되는, DMA 제어기와 같은 원격 노드의 컴포넌트에 의해 개시될 수 있다. 쓰기 동작들의 개시 시에, 그 쓰기 동작들의 쓰기 데이터를 포함하는 데이터는 전형적으로 원격 노드의 메모리(414)에 쓰여지기 전에 I/O 메시(410)를 통과할 수 있다. 앞서 언급한 바와 같이, 노드의 처리 코어들, 메모리 제어기, 및 I/O 컴플렉스는 전형적으로 노드의 코어들, 메모리 제어기, I/O 포트들, DMA 제어기 및 브리지들 사이의 통신을 용이하게 하는 통신 경로들 및 쓰기 버퍼들의 I/O 메시에 의해 상호연결된다.
I/O 메시(410)는 도 5에서 쓰기 버퍼들(a1, a2 ... d4)의 4x4 어레이(500)로서 개략적으로 나타내어져 있고, 여기서 통신 경로들(510)은 쓰기 버퍼들(a1, a2 ... d4)과 브리지(410)와 같은 I/O 컴플렉스의 컴포넌트들 및 메모리 제어기(520)와 같은 CPU의 다른 컴포넌트들을 상호연결시킨다. 도 5의 다이어그램은 명확함을 위해 간략화되어 있다. 특정의 적용분야에 따라 쓰기 버퍼들의 수 및 구성이 상이할 수 있다는 것을 잘 알 것이다. 그에 부가하여, 특정 통신 경로들(510)은 단방향 또는 양방향일 수 있고, 하나의 쓰기 버퍼로부터 다른 쓰기 버퍼로의 통신이 인접한 쓰기 버퍼들을 바이패스할 수 있게 할 수 있다.
예시를 위해, 쓰기 동작 write0에 대한 데이터는, 쓰기 데이터가 메모리 제어기(520)에 의해 메모리(414)(도 4a 내지 도 4c)에 쓰여지기 전에, 예를 들어, 쓰기 버퍼들(a1, a2, a3, a4, b4, c4, d4)을 통과하는 것으로 나타내어져 있다. 그렇지만, 쓰기 동작 write1에 대한 데이터는, 예를 들어, 그의 쓰기 데이터가 메모리(414)에 쓰여지기 전에, 예를 들어, 쓰기 버퍼들(a1, a2, b2, b3, c3, c4, d4)을 통과하는 것으로 나타내어져 있다. 다른 쓰기 동작들 write2, write3, journalwrite3에 대한 데이터도 이와 유사하게 상이한 경로들을 취할 수 있다.
5개의 쓰기 동작들의 각각의 데이터 세트가 I/O 메시(410)를 통한 상이한 경로를 취할 수 있기 때문에, 쓰기 데이터가 로컬 노드에 의해 발행된 쓰기 동작들의 원래의 순차적 순서와 상이한 순차적 순서로 메모리(414)에 쓰여질 수 있다. 순차적 순서에서의 이 변화가 도 4c에서 write2, write0, write3, journalwrite3, write1의 쓰기 동작 시퀀스로서 나타내어져 있다. 이와 같이, 쓰기 동작 write1은 도 4c의 예에서 쓰기 동작 journalwrite3에 뒤따른다. 쓰기 저널 쓰기 동작 journalwrite3이 5개의 쓰기 기술자들의 쓰기 동작들의 완료를 나타내기 때문에, 쓰기 저널 쓰기 동작 journalwrite3이 너무 이른데, 그 이유는 쓰기 동작 write1의 쓰기 데이터가 도 4c의 예에서 원격 메모리(414)에 아직 쓰여지지 않았기 때문이다. 쓰기 동작 write1의 완료를 방해하는 장애가 발생하는 경우, 쓰기 동작 journalwrite3의 쓰기 저널 엔트리가 그 때 실제로는 완료되지 않은 쓰기 동작의 완료를 잘못 표시할 것이다.
이러한 상황들을 피하기 위해, 이전의 멀티 프로세서 컴퓨터들은 호스트 컴퓨터(120a, 120b ... 120n)(도 2)로부터의 쓰기 요청의 쓰기 데이터를 원격 노드의 원격 메모리(414)에 쓰는 쓰기 동작들 write0 내지 write3의 시퀀스 이후에 읽기 동작 read0(도 6)과 같은 읽기 동작에 대한 읽기 기술자(read descriptor)를 삽입하였다. 읽기 동작 read0은 원격 노드에 대해 쓰기 동작들을 개시한 로컬 노드가 쓰기 동작들 write0 내지 write3이 성공적으로 완료되었다는 것을 검증할 수 있게 한다. 그 쓰기 동작들의 완료의 이러한 검증 시에, 로컬 노드는 쓰기 동작들 write0 내지 write3의 완료를 표시하는 엔트리가 원격 시스템 메모리의 원격 쓰기 저널에 입력되게 하는 쓰기 동작 journalwrite3에 대한 쓰기 기술자를 발행한다.
그렇지만, 본원에서 이전의 쓰기 동작들의 성공적인 완료를 검증하기 위한 읽기 동작이 완료하는 데 상당한 양의 시간이 걸릴 수 있다는 것을 잘 알 것이다. 그 결과, 시스템의 성능이 상당히 악영향을 받을 수 있다.
본 개시내용의 다양한 실시예들에 따르면, 일 실시예에서, 쓰기 펜스 플래그가 원격 노드와 같은 타겟에 대해 메모리 쓰기 동작들을 개시하는 로컬 노드와 같은 소스의 쓰기 펜스 소스 로직(110a)(도 2)과 같은 쓰기 펜스 플래그 로직에 의해 전송될 수 있는, 컴퓨터 시스템에 대한 메모리 쓰기 관리가 기술된다. 여기서 설명되는 바와 같이, 쓰기 펜스 플래그가 원격 노드와 같은 타겟의 쓰기 펜스 타겟 로직(110b)과 같은 쓰기 펜스 플래그 로직에 의해 인식되고, 쓰기 펜스 타겟 로직은 쓰기 펜스 플래그 이후의 메모리 쓰기 동작들이 완료되기 전에 쓰기 펜스 플래그와 연관된 메모리 쓰기 동작들이 완료되도록 보장하기 위해 적절한 조치를 취한다. 이하에서 보다 상세히 설명되는 바와 같이, 이러한 구성은, 일부 실시예들에서, 쓰기 동작들의 완료를 확인하기 위한 읽기 동작들을 감소시키거나 없앨 수 있다.
일 실시예에서, 쓰기 펜스 소스 로직(110a) 및 쓰기 펜스 타겟 로직(110b)은, 각각, 본 설명에 따른 쓰기 펜스 플래그 동작들을 수행하도록 수정된 각자의 I/O 컴플렉스(324a, 324b)(도 3)의 NTB(non-transparent bridge)(340a, 340b)에 구현된다. 그렇지만, 본 설명에 따른 쓰기 펜스 플래그 로직이, I/O 포트(330a, 330b), DMA 제어기(334a, 334b), CPU 코어들(314a, 314b), 및 메모리 제어기(320a, 320b)(도 3)와 같은, 컴퓨터 시스템의 한 부분 또는 멀티 프로세서 컴퓨터의 노드의 다른 컴포넌트들에 구현될 수 있다는 것을 잘 알 것이다.
일 실시예에서, 로컬 또는 소스 노드(A)는 타겟의 주소 공간 내의 지정된 주소에의 특별한 쓰기 동작에 의해 원격 또는 타겟 노드(B)에 쓰기 펜스 플래그를 알려줄 수 있다. 타겟의 쓰기 펜스 플래그 브리지(340b)의 쓰기 펜스 타겟 로직은 그 지정된 주소에의 쓰기를 쓰기 펜스 플래그로서 인식하도록 그리고, 쓰기 펜스 플래그 이후의 메모리 쓰기 동작들이 완료되기 전에 쓰기 펜스 플래그와 연관된 메모리 쓰기 동작들이 완료되도록 보장하기 위해, 적절한 조치를 취하도록 구성된다.
도 7은 로컬 또는 소스 노드(A) 및 원격 또는 타겟 노드(B)의 주소 공간(700a, 700b)을 나타낸 개략도이다. 도 7에 표시된 바와 같이, 로컬 노드(A)의 주소 공간(700a)은, 원격 노드(B)의 시스템 메모리(300b)의 원격 데이터 버퍼(360b)(도 3)에 배정된, 원격 노드(B)의 주소 공간(700b) 내의 주소 공간에 대응하는 원격 노드 데이터 버퍼 주소 공간(710)을 포함한다. 이와 유사하게, 로컬 노드(A)의 주소 공간(700a)은 또한, 원격 노드(B)의 시스템 메모리(300b)의 원격 쓰기 저널(364b)(도 3)에 배정된, 원격 노드(B)의 주소 공간(700b) 내의 주소 공간에 대응하는 원격 노드 쓰기 저널 주소 공간(714)을 포함한다. 게다가, 로컬 노드(A)의 주소 공간(700a)은 또한, 원격 노드(B)의 시스템 메모리(300b)의 원격 쓰기 펜스 플래그 메모리(724b)(도 3)에 배정된, 원격 노드(B)의 주소 공간(700b) 내의 주소 공간에 대응하는 원격 노드 플래그 주소 공간(720)을 포함한다. 비록 시스템 메모리(300b) 내에 있는 것으로 도시되어 있지만, 원격 쓰기 펜스 플래그 메모리(724b)가, 예를 들어, 쓰기 펜스 브리지(340b)와 같은 I/O 컴플렉스(324b)의 컴포넌트의 레지스터에와 같은, 원격 노드(B)와 같은 타겟의 다른 컴포넌트들 내에 위치될 수 있다는 것을 잘 알 것이다. 일부 실시예들에서, 원격 쓰기 펜스 플래그 메모리(724b)의 주소는 사용자에 의한 쓰기 펜스 플래그 주소의 선택을 가능하게 하도록 프로그램가능할 수 있다.
원격 노드(B)의 브리지(340b)와 같은 NTB(nontransparent bridge)의 하나의 기능은, 도 7의 변환 기능 화살표들(730, 734, 740)로 나타낸 바와 같이, 로컬 노드(A)에 의해 원격 노드(B)로 보내지는 읽기 동작 및 쓰기 동작에 대한 타겟 주소들을 로컬 노드(A)의 주소 공간(700a)으로부터 원격 노드(B)의 주소 공간(700b)으로 변환하는 것이다. 도 8a는 로컬 또는 소스 노드(A)가 쓰기 기술자들의 쓰기 동작들에 의해 표현되는 바와 같은 쓰기 기술자들의 시퀀스를 원격 노드와 같은 타겟에 발행하는 것의 일 예를 나타내고 있다. 보다 구체적으로는, 도 8a는 로컬 노드(A)에 의해 발행되는 4개의 쓰기 동작들, 즉 write0, write1, write2, write3과 그에 뒤이은 쓰기 펜스(WF) 플래그 쓰기 동작 WFflagwrite3, 그리고 원격 노드의 쓰기 완료 데이터 구조인 원격 쓰기 저널에의 쓰기 동작인 쓰기 저널 쓰기 동작 journalwrite3을 나타내고 있다. 쓰기 기술자들에 의해 기술되는 쓰기 동작들은 로컬 노드(A)에 의해 발행된 것과 동일한 순차적 순서로 원격 쓰기 펜스 브리지(340b)에 의해 수신될 수 있다. 그에 따라, 처음 5개의 쓰기 동작들 write0, write1, write2, write3, 및 WFflagwrite3의 각각의 쓰기 동작은, 도 8b에 의해 도시된 바와 같이 로컬 노드(A)에 의해 발행되는 것과 동일한 순차적 순서로, 원격 쓰기 펜스 브리지(340b)에 의해 언패킹되고 원격 노드(B)에 의해 개시될 수 있다. 그에 따라, 처음 4개의 쓰기 동작들 write0, write1, write2, write3의 타겟 주소들은, 브리지 주소 변환 화살표(730)(도 7)로 표시된 바와 같이, 브리지(340b)에 의해 개시측 노드(A)의 원격 노드 데이터 버퍼 주소 공간(710)(도 7)으로부터 노드(B) 메모리 주소 공간(700b)의 원격 노드 데이터 버퍼(360b)의 주소 공간으로 변환된다.
유사한 방식으로, 쓰기 펜스(WF) 플래그 쓰기 동작 WFflagwrite3이 언패킹되고 개시될 때, 쓰기 펜스(WF) 플래그 쓰기 동작 WFflagwrite3의 타겟 주소는, 브리지 주소 변환 화살표(740)(도 7)로 표시된 바와 같이, 브리지(340b)에 의해 개시측 노드(A)의 원격 노드 플래그 주소 공간(720)(도 7)으로부터 노드(B) 메모리 주소 공간(700b)의 원격 노드 플래그 주소 공간(724b)의 주소 공간으로 변환된다. 원격 쓰기 펜스 브리지(340b)의 쓰기 펜스 타겟 로직은 원격 노드 플래그 주소 공간(724b) 내의 주소로 보내지는 쓰기 동작의 타겟 주소를, 이 예에서, 처음 4개의 쓰기 동작들 write0 내지 write3인 선행하는 쓰기 동작들에 대한 쓰기 펜스의 시행을 시작하라는 쓰기 펜스 플래그로서 인식하도록 구성된다.
그에 따라, 원격 노드 플래그 주소 공간(724b) 내의 타겟 주소로 보내지는 다른 노드로부터의 쓰기 동작에 의해 표시된 바와 같은 쓰기 펜스 플래그를 검출할 때, 모든 후속하는 쓰기 동작들이 원격 쓰기 펜스 브리지(340b)에 의해 버퍼링되어, 브리지(340b)가 선행하는 쓰기 동작들이 원격 시스템 메모리에 대해 성공적으로 완료되었다는 확인을 수신할 때까지 그 버퍼링된 쓰기 동작들의 실행을 지연시킨다.
이 예에서, 쓰기 저널 쓰기 동작 journalwrite3은, 도 8a에 도시된 바와 같이, 4개의 쓰기 동작들 write0, write1, write2, write3 그리고 쓰기 펜스(WF) 플래그 쓰기 동작 WFflagwrite3이 원격 노드(B)에 의해 수신된 후에 원격 노드(B)에 의해 수신되었다. 그에 따라, 쓰기 펜스(WF) 플래그 쓰기 동작 WFflagwrite3의 쓰기 펜스 플래그가 검출되었기 때문에, 쓰기 펜스(WF) 플래그 쓰기 동작 WFflagwrite 이후에 원격 노드(B)에 의해 수신된 쓰기 저널 쓰기 동작 journalwrite3이, 수신 시에 원격 노드(B)에 의해 실행되는 대신에, 도 8b에 도시된 바와 같이 쓰기 펜스 브리지(340b)에 의해 버퍼링된다.
쓰기 저널 쓰기 동작을 즉각 실행하는 대신에 쓰기 저널 쓰기 동작 journalwrite3을 버퍼링하는 것에 의해, 쓰기 펜스 플래그에 의해 펜싱된 쓰기 동작들이 완료될 때까지 쓰기 저널 쓰기 동작이 지연될 수 있다. 쓰기 펜스 플래그에 의해 펜싱된 쓰기 동작들 write0 내지 write3이 완료되면, 쓰기 저널 쓰기 동작 journalwrite3이 진행하도록 허용된다. 그 결과, 쓰기 저널 쓰기 동작 journalwrite3에 의해 쓰여지는 쓰기 저널 엔트리의 정확도가 보장된다. 그에 따라, 쓰기 동작들 write0 내지 write3의 완료를 표시하는 쓰기 동작 journalwrite3에 의해 쓰여지는 쓰기 저널 엔트리가, 필요할 경우, 안전하게 의존될 수 있다.
쓰기 동작들 write0 내지 write3과 같은 원격 동작들의 완료를 검증하기 위해, 원격 노드(B)는, 일 실시예에서, 도 9a에서 900에 표시된 것과 같은 본원에서 원격 동작 저널이라고 지칭되는 데이터 구조를 유지한다. 차후에 수신된 동작들이 진행하도록 허용하기 전에 검출된 쓰기 펜스 플래그와 연관된 쓰기 동작들이 완료되었다는 것을 검증하기 위해 각종의 다른 기법들이 타겟에 의해 이용될 수 있다는 것을 잘 알 것이다.
저널(900)이 시스템 메모리(300b)에 또는, 예를 들어, 원격 쓰기 펜스 브리지(340b) 내의 레지스터들과 같은 원격 노드(B)의 다른 컴포넌트의 레지스터들과 같은 메모리에 유지될 수 있다. 각각의 쓰기 동작이 원격 노드(B)에 의해 개시될 때, 그 동작의 태그 ID를 저널(900)의 동작 태그 ID 필드에 기록하는 입력이 행해진다. 이와 같이, 저널(900)이 원격 쓰기 펜스 브리지(340b)에 의해 유지되는 실시예들에서, 저널(900)에의 입력들이, 예를 들어, 원격 쓰기 펜스 브리지(340b)에 의해 행해질 수 있다. 도 8b의 예에서, 쓰기 펜스 쓰기 저널 쓰기 동작 journalwrite3이 버퍼링되어 있는 동안 쓰기 동작들 write0 내지 write3 및 쓰기 펜스 플래그 동작 WFflagwrite3이 개시되었다. 그에 따라, 원격 동작 저널(900)은 개시된 쓰기 동작들 write0 내지 write3 및 WFflagwrite3 각각에 대한 엔트리들을 저널(900)의 동작 태그 ID 필드에 갖는다. 이 실시예에서, 버퍼링된 쓰기 동작 journalwrite3에 대한 원격 동작 저널(900) 내의 엔트리는 쓰기 동작이 개시될 때까지 지연된다. 다른 실시예들에서, 쓰기 펜스의 완료를 기다리는 버퍼링된 동작들도 원격 동작 저널에 입력될 수 있다는 것을 잘 알 것이다.
앞서 기재된 바와 같이, 원격 쓰기 펜스 브리지(340b)의 쓰기 펜스 타겟 로직은 쓰기 펜스 플래그 쓰기 동작 WFflagwrite3에 대한 타겟 주소가 원격 노드 플래그 주소 공간(724b) 내의 타겟 주소에 보내진다는 것을 인식한다. 그에 따라, 원격 쓰기 펜스 브리지(340b)의 쓰기 펜스 타겟 로직은 쓰기 펜스 플래그 쓰기 동작 WFflagwrite3을 쓰기 펜스 플래그로서 인식하고, 원격 동작 저널(900) 내의 쓰기 펜스 플래그 쓰기 동작 WFflagwrite3에 대한 엔트리의 쓰기 펜스 플래그 필드에 이러한 것을 표시한다. 그 결과, 원격 쓰기 펜스 브리지(340b)의 쓰기 펜스 타겟 로직은, 이 예에서, 처음 4개의 쓰기 동작들 write0 내지 write3인 저널(900)의 선행하는 쓰기 동작들에 대해 쓰기 펜스의 시행을 시작한다.
특정의 쓰기 펜스 플래그에 의해 펜싱되어야 하는 특정의 쓰기 동작들이, 특정의 적용분야에 따라, 각종의 기법들을 사용하여 결정될 수 있다. 예를 들어, 쓰기 펜스 플래그 WFflagwrite3에 의해 펜싱될 쓰기 동작들은 쓰기 펜스 플래그 WFflagwrite3의 수신 이전에 그리고 마지막 쓰기 펜스 플래그의 수신 이후 쓰기 펜스 플래그 WFflagwrite3 이전에 개시된 쓰기 동작들로서 식별될 수 있다. 다른 기법들은 쓰기 펜스 플래그 쓰기 동작 WFflagwrite3에 동반하는 쓰기 데이터에서 펜싱될 쓰기 동작들을 식별하는 것을 포함할 수 있다. 특정의 적용분야에 따라, 다른 기법들이 사용될 수 있다는 것을 잘 알 것이다.
도 8c에 도시된 바와 같이, 쓰기 동작들의 시퀀스의 쓰기 데이터가, 다양한 인자들로 인해, 쓰기 동작들이 원격 노드(B)에 의해 개시된 것과 동일한 순차적 순서로 원격 노드(B)의 시스템 메모리(300b)에 쓰여지지 않을 수 있다. 하나의 이러한 인자는, 앞서 기술된 바와 같이, 다양한 쓰기 동작들의 데이터가 원격 노드(B)의 컴포넌트들을 상호연결시키는 I/O 메시를 통한 상이한 경로들을 취할 수 있다는 것이다. 이 예에서, 개시된 쓰기 동작들에 대한 쓰기 데이터가, 도 8c에 도시된 바와 같이, 먼저 쓰기 동작 write2에 대한 쓰기 데이터, 그에 뒤이은 쓰기 동작들 write0, write3, write1, WFflagwrite3에 대한 쓰기 데이터의 변경된 순차적 순서로 원격 메모리(300b)에 쓰여진다. 일부 실시예들에서, 쓰기 펜스 플래그로서 인식된 쓰기 동작이 쓰기 펜스 플래그 쓰기 동작 자체에 대한 쓰기 데이터가 쓰여지게 하지 않을 수 있다는 것을 잘 알 것이다.
메모리(300b)에 대한 데이터 쓰기가 각각의 쓰기 동작에 대해 완료될 때, 예를 들어, 메모리 제어기(320b)와 같은, 원격 노드(B)의 컴포넌트는 태그 ID에 의해 완료된 쓰기 동작을 식별해주는 확인응답(acknowledgement)을 발행한다. 이 예에서, 원격 쓰기 펜스 브리지(340b)는 쓰기 확인응답을 수신하고 태그 ID를 그 태그 ID에 의해 식별된 동작에 대한 엔트리의 원격 동작 저널의 확인응답 태그 ID 필드에 기록한다. 따라서, 도 8c의 예에서, 완료할 펜싱된 쓰기 동작들 중 첫 번째는 쓰기 동작 write2이고 뒤이어서 쓰기 동작 write0이다. 따라서, 쓰기 동작들 write2 및 write0에 대한 태그 ID들이, 도 9a에 도시된 바와 같이, 쓰기 동작들 write2 및 write0에 대한 엔트리들에 대한 확인응답 태그 ID 필드에 입력된다. 그에 따라, 원격 노드의 쓰기 펜스 타겟 로직은 원격 동작 저널(900)을 모니터링하고 펜싱된 쓰기 동작들 모두가 완료되었는지를 결정할 수 있다. 도 9a의 예에서, 원격 동작 저널은 펜싱된 쓰기 동작들 write2 및 write0이 완료된 반면 펜싱된 쓰기 동작들 write1 및 write1이, 그 쓰기 동작들에 대한 확인응답 태그 ID 필드에 엔트리가 없는 것에 의해 표시된 바와 같이, 아직 완료되지 않았다는 것을 표시한다. 그에 따라, 그 시점에서 쓰기 펜스의 시행이 계속된다.
도 9b는, 펜싱된 쓰기 동작들 write0 내지 write3 각각에 대한 확인응답 태그 ID 필드에 엔트리가 존재하는 것에 의해 표시된 바와 같이, 펜싱된 쓰기 동작들 모두가 완료된 것으로 확인응답된 후의 원격 동작 저널(900)의 상태를 표시하고 있다. 비록 쓰기 동작들이 그들의 원래의 순차적 순서로 완료되지 않았지만, 펜싱된 쓰기 동작들 write0 내지 write3 모두가 완료되었고, 따라서 다음 쓰기 펜스 플래그가 수신될 때까지 쓰기 펜스 동작이 종료될 수 있다. 그에 따라, 쓰기 펜스 시행의 종료를 기다리는 동안 원격 쓰기 펜스 브리지(340b)에 의해 버퍼링되었던 모든 쓰기 동작들이 이어서 개시될 수 있다. 이와 같이, 쓰기 저널 쓰기 동작 journalwrite3 및, 예를 들어, 쓰기 동작들 write6 내지 write9와 같은 임의의 다른 버퍼링된 쓰기 동작들이 도 8d에 표시된 바와 같이 진행하도록 허용된다. 그 결과, 쓰기 저널 쓰기 동작 journalwrite3에 의해 쓰기 저널(364b)에 행해지는 입력의 정확도가 보장된다. 그에 따라, 쓰기 동작들 write0 내지 write3의 완료를 표시하는 쓰기 저널 쓰기 동작 journalwrite3에 의해 쓰기 저널(364b)에 행해지는 입력이, 필요할 경우, 안전하게 의존될 수 있다.
도 7 및 도 8a 내지 도 8d에 도시된 실시예에서, 원격 노드 또는 다른 타겟에 대해 쓰기 동작들의 시퀀스를 개시하는 로컬 노드 또는 다른 소스는, 타겟이 특별한 주소에 대한 쓰기 동작을 쓰기 펜스 플래그로서 인식하도록, 쓰기 펜스 플래그를 특별한 주소에 쓰는 쓰기 동작의 형태로 타겟에 발행할 수 있다. 이러한 실시예는, 예를 들어, 타겟 주소의 위치에서만 다른 쓰기 기술자들과 본질적으로 상이한 쓰기 기술자들을 쓰기 펜스 플래그들로서 이용할 수 있다.
소스가 타겟에 쓰기 펜스 플래그를 발행하기 위해 다른 기법들이 이용될 수 있다는 것을 잘 알 것이다. 예를 들어, 도 10a 내지 도 10d는 로컬 노드(A)와 같은 소스가 4개의 쓰기 동작들 write0, write1, write2, write3에 대한 쓰기 기술자들의 시퀀스를 또다시 발행하는 일 실시예에 관한 것이다. 그렇지만, 이 예에서, 4개의 쓰기 동작들 write0, write1, write2, write3에 뒤이어서 쓰기 저널 쓰기 동작 journalwrite3이 온다. 이전의 실시예의 쓰기 펜스(WF) 플래그 쓰기 동작 WFflagwrite3이 생략되어 있다. 그 대신에, 4개의 쓰기 동작들 write0, write1, write2, write3 중 마지막 쓰기 동작 write3이 이전과 같이 데이터 쓰기 동작 write3을 표시하도록 뿐만 아니라 타겟에 대한 쓰기 펜스 플래그도 표시하도록 수정되어 있다.
본원에서 쓰기 기술자가 쓰기 펜스 플래그도 전달하고 있다는 것을 표시하기 위해 다수의 기법들을 사용하여 쓰기 기술자가 수정될 수 있다는 것을 잘 알 것이다. 예를 들어, 도 11에 도시된 바와 같이, 쓰기 동작 write3에 대한 기술자(1120)의 헤더(1110)가 쓰기 펜스 플래그(1124)를 나타내는 데이터를, 헤더(1110)의 한 부분에, 포함하도록 수정된다. 다른 포맷들의 원격 동작 기술자 또는 메시지들이 쓰기 펜스 플래그를 다른 노드와 같은 타겟에 알려주기 위해 다른 수정들을 가질 수 있다는 것을 잘 알 것이다.
도 7 및 도 8a 내지 도 8d에 도시된 실시예에서, 본 설명에 따른 쓰기 펜스 타겟 로직을 포함하도록 NTB(nontransparent bridge)가 수정되었다. 도 10a 내지 도 10d의 실시예에서, 도 10a 내지 도 10d의 쓰기 펜스 I/O 포트(330b1)에 의해 표시된 바와 같이, I/O 포트(330b)(도 3)가 본 설명에 따른 쓰기 펜스 타겟 로직을 포함하도록 수정되어 있다. 그에 따라, 쓰기 펜스 I/O 포트(330b1)는 본 설명에 따른 쓰기 펜스 플래그(1124)를 표시하도록 수정된 헤더(1110)를 가지는 쓰기 기술자(1120)(도 11)를 인식하도록 구성된다. 쓰기 펜스 플래그(1124)를 표시하도록 수정된 헤더(1110)를 가지는 쓰기 기술자(1120)가, 예를 들어, 본 설명에 따른 쓰기 펜스 소스 로직을 갖도록 적당히 수정된, I/O 포트(300a)(도 3)와 같은 소스의 컴포넌트에 의해 발행될 수 있다.
그에 따라, 쓰기 펜스 플래그를 표시하도록 수정된 헤더를 가지는, 다른 노드로부터의 또는 다른 컴퓨터 부분으로부터의 쓰기 기술자에 의해 표시된 바와 같은 쓰기 펜스 플래그를 검출할 때, I/O 포트(330b)가 선행하는 펜싱된 쓰기 동작들이 타겟 메모리에 대해 성공적으로 완료되었다는 확인을 수신할 때까지, 모든 차후에 수신되는 쓰기 동작들이 원격 쓰기 펜스 I/O 포트(330b1)에 의해 버퍼링된다.
이 예에서, 쓰기 저널 쓰기 동작 journalwrite3은, 도 10a에 도시된 바와 같이, 4개의 쓰기 동작들 write0, write1, write2, write3이 원격 노드(B)에 의해 수신된 후에 원격 노드(B)에 의해 수신되었다. 그에 따라, 쓰기 동작 write3에 대한 쓰기 기술자의 쓰기 펜스 플래그가 검출되었기 때문에, - 쓰기 저널 쓰기 동작 journalwrite3이 쓰기 동작 write3에 대한 쓰기 기술자 이후에 원격 노드(B)에 의해 수신됨 -, 쓰기 저널 쓰기 동작 journalwrite3이 수신 시에 원격 노드(B)에 의해 실행되는 대신에, 도 10b에 도시된 바와 같이 쓰기 펜스 I/O 포트(330b1)에 의해 버퍼링된다.
이 실시예에서, 원격 쓰기 펜스 I/O 포트(330b1)의 쓰기 펜스 타겟 로직이 쓰기 동작 write3의 쓰기 기술자의 헤더 부분(1124)을 쓰기 펜스 플래그로서 인식할 때, 원격 쓰기 펜스 I/O 포트(330b1)의 쓰기 펜스 타겟 로직은, 도 12a에 표시된 바와 같이, 이러한 것을 원격 동작 저널(1200)에서의 쓰기 동작 write3에 대한 엔트리의 쓰기 펜스 플래그 필드에 표시한다. 그 결과, 원격 쓰기 펜스 I/O 포트(330b1)의 쓰기 펜스 타겟 로직은, 이 예에서, 쓰기 펜스 플래그를 지니고 있는 쓰기 동작 write3에 대해 그리고 처음 3개의 쓰기 동작들 write0 내지 write2인 저널(1200)의 선행하는 쓰기 동작들에 대해서도 쓰기 펜스의 시행을 시작한다.
여기서도, 특정의 쓰기 펜스 플래그에 의해 펜싱되어야 하는 특정의 쓰기 동작들이, 특정의 적용분야에 따라, 각종의 기법들을 사용하여 결정될 수 있다. 예를 들어, 쓰기 동작 write3의 쓰기 펜스 플래그에 의해 펜싱될 쓰기 동작들은 쓰기 펜스 플래그 헤더를 지니고 있는 쓰기 기술자의 쓰기 동작은 물론, 쓰기 펜스 플래그의 수신 이전에 그리고 마지막 쓰기 펜스 플래그의 수신 이후 쓰기 동작 write3의 쓰기 펜스 플래그 이전에 개시된 쓰기 동작들로서 식별될 수 있다. 다른 기법들은 쓰기 기술자의 쓰기 펜스 플래그 헤더에 펜싱될 쓰기 동작들을 식별하는 것을 포함할 수 있다. 특정의 적용분야에 따라, 다른 기법들이 사용될 수 있다는 것을 잘 알 것이다.
도 12b는, 펜싱된 쓰기 동작들 write0 내지 write3 각각에 대한 확인응답 태그 ID 필드에 엔트리가 존재하는 것에 의해 표시된 바와 같이, 펜싱된 쓰기 동작들 모두가 완료된 것으로 확인응답된 후의 원격 동작 저널(1200)의 그 상태를 표시하고 있다. 비록 쓰기 동작들이 그들의 원래의 순차적 순서로 완료되지 않았지만, 펜싱된 쓰기 동작들 write0 내지 write3 모두가 완료되었고, 따라서 다음 쓰기 펜스 플래그가 수신될 때까지 쓰기 펜스 시행 동작이 종료될 수 있다. 그에 따라, 쓰기 펜스 시행의 종료를 기다리는 동안 원격 쓰기 펜스 I/O 포트(330b1)에 의해 버퍼링되었던 모든 쓰기 동작들이 이어서 개시될 수 있다. 이와 같이, 도 10d에 표시된 바와 같이 쓰기 저널 쓰기 동작 journalwrite3이 진행하도록 허용된다. 그 결과, 쓰기 저널 쓰기 동작 journalwrite3에 의해 쓰기 저널(364b)에 행해지는 입력의 정확도가 보장된다. 그에 따라, 쓰기 동작들 write0 내지 write3의 완료를 표시하는 쓰기 저널 쓰기 동작 journalwrite3에 의해 쓰기 저널(364b)에 행해지는 입력이, 필요할 경우, 안전하게 의존될 수 있다.
도 13a 및 도 13b는 본 설명에 따른 쓰기 펜스 타겟 로직의 동작들의 실시예들의 예들을 나타내고 있다. 예를 들어, 원격 쓰기 펜스 브리지(340b) 또는 쓰기 펜스 I/O 포트(330b1)와 같은 원격 노드(B)의 컴포넌트들은 이러한 동작들을 수행하도록 구성될 수 있다. 멀티 프로세서 컴퓨터 시스템의 다른 컴포넌트들이 쓰기 펜스 타겟 로직의 동작들도 수행하도록 구성될 수 있다는 것을 잘 알 것이다. 단일 프로세서 컴퓨터 시스템의 컴포넌트가 쓰기 펜스 타겟 로직의 동작들도 수행하도록 구성될 수 있다는 것을 추가로 잘 알 것이다.
도 13a의 예에서, 예를 들어, 다른 노드 또는 다른 컴포넌트와 같은 소스에 의해 발행된, 예를 들어, 쓰기 동작 기술자와 같은 쓰기 동작이 쓰기 펜스 타겟 로직에 의해 수신되었는지(블록(1300))에 관한 결정이 행해진다. 소스에 의해 발행된 쓰기 동작의 수신(블록(1300)) 시에, 수신된 쓰기 동작과 연관된 쓰기 펜스 플래그가 있는지(블록(1314))에 관한 결정이 행해진다. 이러한 쓰기 펜스 플래그는, 예를 들어, 특별한 타겟 주소로 보내지는 타겟 주소를 가지는 수신된 쓰기 동작에 의해 검출될 수 있다.
수신된 쓰기 동작과 연관된 쓰기 펜스 플래그가 있다고 결정되면(블록(1314)), 로직이 모든 이전의 쓰기 동작들이 완료되기를 기다리는(블록(1328)) 쓰기 펜스 시행이 개시된다. 쓰기 펜스 타겟 로직은 다른 쓰기 동작의 수신(블록(1300))을 기다리기 위해 복귀한다.
이와 달리, 수신된 쓰기 동작과 연관된 쓰기 펜스 플래그가 없다고 결정되면(블록(1314)), 수신된 쓰기 동작이 발행되도록 허용되고(블록(1330)), 여기서 수신된 쓰기 동작의 쓰기 데이터가 타겟의 메모리에 쓰여진다. 쓰기 펜스 타겟 로직은 다른 쓰기 동작의 수신(블록(1300))을 기다리기 위해 복귀한다.
도 13a의 예에서, 수신된 동작이 쓰기 동작 대신에 읽기 동작이라고 결정되면(블록(1300)), 읽기 동작이 쓰기 펜스 플래그로서 취급된다. 그에 따라, 로직이 모든 이전의 쓰기 동작들이 완료되기를 기다리는(블록(1340)) 쓰기 펜스 시행이 개시된다. 수신된 읽기 동작이 그 후에 발행되도록 허용되고(블록(1350)), 쓰기 펜스 타겟 로직은 다른 쓰기 동작의 수신(블록(1300))을 기다리기 위해 복귀한다.
도 13a의 예는 쓰기 펜스 플래그가 소스가 쓰기 펜스 플래그 타겟 주소로서 인식되도록 지정된 타겟 주소로 보내지는 쓰기 동작을 발행하는 것에 의해 표시될 수 있는 일 실시예에 관한 것이다. 도 13b는 쓰기 펜스 플래그가 소스에 의해 다른 방식으로 표시될 수 있는 다른 실시예에 관한 것이다.
다시 말하지만, 도 13b의 예에서, 예를 들어, 다른 노드 또는 다른 컴포넌트와 같은 소스에 의해 발행된, 예를 들어, 쓰기 동작 기술자와 같은 쓰기 동작이 쓰기 펜스 타겟 로직에 의해 수신되었는지(블록(1300))에 관한 결정이 행해진다. 소스에 의해 발행된 쓰기 동작의 수신(블록(1300)) 시에, 수신된 쓰기 동작과 연관된 쓰기 펜스 플래그가 있는지(블록(1314))에 관한 결정이 행해진다. 이러한 쓰기 펜스 플래그는, 예를 들어, 쓰기 펜스 플래그를 포함하는 헤더를 가지는 수신된 쓰기 동작에 의해 검출될 수 있다.
수신된 쓰기 동작과 연관된 쓰기 펜스 플래그가 있다고 결정되면(블록(1314)), 로직이 모든 이전의 쓰기 동작들이 완료되기를 기다리는(블록(1328)) 쓰기 펜스 시행이 개시된다. 그에 부가하여, 수신된 쓰기 동작이 발행되도록 허용되고(블록(1330)), 여기서 수신된 쓰기 동작의 쓰기 데이터가 타겟의 메모리에 쓰여진다. 이와 달리, 수신된 쓰기 동작과 연관된 쓰기 펜스 플래그가 없다고 결정되면(블록(1314)), 쓰기 펜스 시행이 개시되지 않고, 수신된 쓰기 동작이 발행되도록 허용되며(블록(1330)), 여기서 수신된 쓰기 동작의 쓰기 데이터가 타겟의 메모리에 쓰여진다. 쓰기 펜스 타겟 로직은 다른 쓰기 동작의 수신(블록(1300))을 기다리기 위해 복귀한다.
다시 말하지만, 도 13b의 예에서, 수신된 동작이 쓰기 동작 대신에 읽기 동작이라고 결정되면(블록(1300)), 읽기 동작이 쓰기 펜스 플래그로서 취급된다. 그에 따라, 로직이 모든 이전의 쓰기 동작들이 완료되기를 기다리는(블록(1340)) 쓰기 펜스 시행이 개시된다. 수신된 읽기 동작이 그 후에 발행되도록 허용되고(블록(1350)), 쓰기 펜스 타겟 로직은 다른 쓰기 동작의 수신(블록(1300))을 기다리기 위해 복귀한다.
원격 노드의 컴포넌트들이 쓰기 펜스 소스 로직의 동작들도 수행할 수 있도록, 원격 쓰기 펜스 브리지(340b) 또는 쓰기 펜스 I/O 포트(330b1)와 같은, 원격 노드(B) 또는 다른 타겟의 컴포넌트들이 쓰기 펜스 타겟 로직뿐만 아니라 쓰기 펜스 소스 로직도 가지도록 구성될 수 있다는 것을 잘 알 것이다. 이와 달리, 로컬 노드의 컴포넌트들이 쓰기 펜스 타겟 로직의 동작들도 수행할 수 있도록, 쓰기 펜스 브리지(340a) 또는 쓰기 펜스 I/O 포트(330a)와 같은, 로컬 노드(A) 또는 다른 소스의 컴포넌트들이 쓰기 펜스 소스 로직뿐만 아니라 쓰기 펜스 타겟 로직도 가지도록 구성될 수 있다는 것을 잘 알 것이다. 단일 프로세서 컴퓨터의 컴포넌트들이 본 설명에 따른 쓰기 펜스 소스 로직 및 쓰기 펜스 타겟 로직 중 하나 또는 둘 다의 동작들을 수행할 수 있도록, 예를 들어, 브리지 또는 I/O 포트와 같은, 단일 프로세서 컴퓨터 시스템의 컴포넌트들이 쓰기 펜스 소스 로직은 물론 쓰기 펜스 타겟 로직 중 하나 또는 둘 다를 가지도록 구성될 수 있다는 것을 추가로 잘 알 것이다.
도 3의 실시예에서, 쓰기 펜스 소스 로직(110a)(도 2) 및 쓰기 펜스 타겟 로직(110b)의 양태들은, 각각, 본 설명에 따른 쓰기 펜스 플래그 동작들을 수행하도록 수정된 각자의 I/O 컴플렉스(324a, 324b)의 NTB(non-transparent bridge)(340a, 340b)(도 3)에 구현될 수 있다. 앞서 언급한 바와 같이, 본 설명에 따른 쓰기 펜스 플래그 로직이, I/O 포트(330a, 330b), DMA 제어기(334a, 334b), CPU 코어들(314a, 314b), 및 메모리 제어기(320a, 320b)(도 3)와 같은, 컴퓨터 시스템의 한 부분 또는 멀티 프로세서 컴퓨터의 노드의 다른 컴포넌트들에 구현될 수 있다는 것을 잘 알 것이다.
도 14는 본 설명에 따른 쓰기 펜스 플래그들을 발생시키는 쓰기 펜스 소스 로직(110a)(도 2)의 적어도 일부분이 CPU 코어들(314a)과 동일한 기판 상에 통합되는 쓰기 펜스 DMA 제어기(1434a)에 구현되는 일 예를 나타내고 있다. 비록 실시예들이 CPU에 통합된 DMA 제어기 또는 엔진과 관련하여 기술되지만, 쓰기 펜스 소스 로직(110a)을 비롯한, 본 설명에 따른 쓰기 펜스 로직이, CPU에 통합된 이러한 데이터 이동 가속기들, 제어기들 또는 엔진들을 비롯한, 다른 데이터 전송 또는 데이터 이동 가속기들에 구현될 수 있다는 것을 잘 알 것이다. 일 실시예에서, DMA 제어기와 같은 데이터 전송 가속기는, CPU 코어들(314a, 314b) 및 코어들을 프로그래밍하는 연관된 소프트웨어와 독립적으로, DMA 버스 마스터들을 거쳐 입/출력 경로를 통한 메모리 내로의 데이터의 흐름을 제어한다. 일 실시예에서, 이 실시예에서, 로컬 노드(A)인 소스 노드의 쓰기 펜스 DMA 제어기(1434a)는 타겟의 주소 공간 내의 지정된 주소에의 특별한 쓰기 동작에 의해 원격 또는 타겟 노드(B)에 쓰기 펜스 플래그를 알려줄 수 있다. 일 실시예에서, 지정된 주소의 값은, 예를 들어, DMA 제어기의 파라미터를 설정하는 것에 의해 프로그램가능할 수 있다. 일 실시예에서, 쓰기 펜스 플래그는, CPU 코어들(314a, 314b) 및 코어들을 프로그래밍하는 연관된 소프트웨어와 독립적으로, 데이터 전송 가속기에 의해 발생된다.
예를 들어, 쓰기 펜스 플래그를 표시하기 위해, 지정된 주소로 보내지는 DMA 전송과 연관된 최종 쓰기 동작이 발생되고 타겟 또는 원격 노드에 발행된다. 그에 따라, 타겟의 쓰기 펜스 플래그 브리지(1440b)에 구현될 수 있는 쓰기 펜스 타겟 로직(110b)(도 2)은 그 지정된 주소에의 쓰기를 쓰기 펜스 플래그로서 인식하도록 그리고, 쓰기 펜스 플래그 이후의 메모리 쓰기 동작들이 완료되기 전에 쓰기 펜스 플래그와 연관된 이전에 포스팅된 메모리 쓰기 동작들이 완료되도록 보장하기 위해, 적절한 조치를 취하도록 구성된다. 이와 같이, 각각의 쓰기 펜스 플래그는, 사실상, 쓰기 커밋 비트(write commit bit) 또는 쓰기 커밋 커맨드(write commit command)로서 기능하고, 수신자 타겟 또는 원격 노드가 쓰기 펜스 플래그 이전에 수신된 모든 이전의 쓰기들이 다른 쓰기 동작을 발행하기 전에 그의 시스템 메모리에 대해 완료되도록 보장할 수 있게 한다.
일 실시예에서, 지정된 주소를 목표로 하는 쓰기 데이터가 단순히 폐기될 수 있는데, 그 이유는 지정된 주소를 목표로 하는 쓰기 동작 자체의 검출이 쓰기 펜스 플래그를 타겟 또는 원격 노드(B)에 제공하기 때문이다. 다른 실시예들에서, 쓰기 데이터의 값들이 부가의 특징들을 제공할 수 있거나 쓰기 펜스 플래그를 표시하는 데 이용될 수 있다는 것을 잘 알 것이다.
다른 실시예에서, 소스 노드의 쓰기 펜스 DMA 제어기(1434a)는 I/O 요청의 마지막 DMA 기술자와 연관된 최종 쓰기 동작과 연관된 최종 쓰기 동작에 속성을 설정하는 것에 의해 쓰기 펜스 플래그를 원격 또는 타겟 노드(B)에 알려줄 수 있다. 쓰기 기술자와 같은 쓰기 동작의 다른 부분들이 쓰기 펜스 플래그를 표시하도록 수정될 수 있다는 것을 잘 알 것이다. 여기서도, 일 실시예에서, 쓰기 펜스 플래그 속성은, CPU 코어들(314a, 314b) 및 코어들을 프로그래밍하는 연관된 소프트웨어와 독립적으로, 데이터 전송 가속기에 의해 발생된다.
일 실시예에서, I/O 요청의 마지막 기술자에서의 속성이 쓰기 펜스 플래그를 타겟 또는 원격 노드에 시그널링하도록, 연관된 DMA 구동기에 의해, 설정될 수 있다. DMA 구동기는 쓰기 펜스 DMA 제어기(1434a)를 구성하고 작동시키기 위해 이용될 수 있다. 쓰기 펜스 플래그를 지정하록 설정된 속성을 가지는 수정된 쓰기 동작을 이용하는 실시예들에서, 마지막 쓰기 펜스 플래그 이후의 시스템 메모리에의 모든 이전의 쓰기들이 완료될 때까지, 최종적인 수정된 쓰기 동작의 쓰기 동작이 타겟 또는 원격 노드에 의해 시스템 메모리에 발행되지 않는다. 일 실시예에서, 도면의 로컬 노드(A)와 원격 노드(B)가 다수의 기판들 상에 제조될 수 있다.
도 15a는 본 개시내용의 일 실시예에 따른 쓰기 펜스 플래그 로직을 이용하는 로컬 노드(A)(도 14)와 같은 소스 노드의 동작들의 일 예를 나타내고 있다. 이 예에서, 쓰기 요청들의 형태로 된 하나 이상의 I/O 요청들이, 예를 들어, 도 2의 호스트(120a)와 같은 호스트로부터 수신된다(블록(1504)). 호스트로부터 쓰기 요청을 수신할 때, 소스 노드는 각각의 수신된 쓰기 요청의 파라미터들을 그 자신의 로컬 시스템 메모리(300a)에 저장한다(블록(1508), 도 15a). 쓰기 요청의 파라미터들은 요청의 쓰기 데이터(또는 쓰기 데이터가 획득될 수 있는 주소 또는 주소들) 및 전형적으로 저장소(114)(도 2)와 같은 저장소인 쓰기 데이터의 목적지를 포함한다. 도 16a는, 쓰기 요청들(또는 쓰기 요청들의 파라미터들) WriteReq0, WriteReq1, WriteReq2, WriteReq3으로 나타내어져 있는 바와 같이, 호스트로부터 수신되고 로컬 메모리(300a)에 저장된 쓰기 요청들의 일 예를 나타내고 있다. 소스 노드의 로컬 메모리(300a)에 저장된 쓰기 요청들(또는 쓰기 요청들의 파라미터들) WriteReq0, WriteReq1, WriteReq2, WriteReq3의 특정의 포맷은 호스트들과 소스 노드 사이의 통신 경로(118)(도 2)의 특정의 전송 프로토콜과 호환되는 포맷으로 되어 있을 수 있다.
이하에서 설명되는 바와 같이, 이 예에서, 소스 노드는 또한 쓰기 데이터 또는 쓰기 데이터 주소들과 같은 쓰기 요청 파라미터들을 저장소 제어기의 원격 노드(B)(도 14)와 같은 타겟 노드의 시스템 메모리(300b)에 미러링한다. 쓰기 요청 파라미터들이 로컬/소스 노드(A)와 원격/타겟 노드(B) 둘 다의 시스템 메모리들(300a, 300b)(도 2)에 안전하게 쓰여졌으면, 로컬 노드(A)는 I/O 요청들을 호스트에 커밋할 수 있고, 즉 쓰기 데이터를 저장소(114)에 실제로 쓰는 것(커밋하는 것)이 완료되지 않았을지라도, 쓰기 요청들이 완료되었다는 것을 요청측 호스트(120a, 120b ... 120n)(도 2)에 보고할 수 있다. 이러한 구성은, 저장소(114)에의 쓰기들이 시스템 메모리(300a, 300b)에의 쓰기들보다 완료하는 데 더 느릴 수 있기 때문에, 전체적인 효율을 증대시킬 수 있다. 로컬 노드(A)의 장애와 같은, 쓰기 데이터를 저장소(114)에 실제로 쓰는 것의 완료를 방해하는 장애의 경우에, 저장소 제어기(100)의 원격 노드(B)는 그의 시스템 메모리(300b)에 액세스하고 저장소(114)에의 쓰기 동작들을 완료할 수 있다.
그에 따라, 쓰기 요청들(또는 그들의 파라미터들) WriteReq0, WriteReq1, WriteReq2, WriteReq3이 소스 노드의 쓰기 펜스 미러 로직(1602)에 의해 로컬 메모리(300a)(도 16a)로부터 읽혀지고(블록(1524), 도 15a), 메모리로부터 읽혀진 이 쓰기 요청들(또는 그들의 파라미터들)에 기초하여, 쓰기 동작들 Write0, Write1, Write2, Write3에 의해 나타내어진 쓰기 동작들의 연쇄에 의해 표시된 바와 같이, 소스 노드의 쓰기 펜스 미러 로직(1602)(도 16a)에 의해 쓰기 동작들이 발생된다(블록(1528), 도 15a).
이 예에서, 로컬 노드(A)와 같은 소스 노드의 CPU 코어들(314a)과 동일한 기판 상에 통합되는 I/O 컴플렉스(1424a)(도 14)의 컴포넌트는 원격 노드(B)에 의해 수행될 동작들을 "기술자" 데이터 구조를 사용하여 전달한다. 따라서, 이 예에서, 쓰기 요청 동작들 WriteReq0, WriteReq1, WriteReq2, WriteReq3이 메모리로부터 읽혀지고, 대응하는 쓰기 동작들이, 쓰기 기술자들 Write0, Write1, Write2, Write3의 연쇄에 의해 나타낸 바와 같이, 메모리로부터 읽혀진 쓰기 요청들에 기초하여 쓰기 기술자들의 형태로 소스 노드의 쓰기 펜스 미러 로직(1602)에 의해 발생된다. 각각의 쓰기 기술자 Write0, Write1, Write2, Write3는 쓰기 동작으로서 수행될 동작을 식별해주고, 쓰여질 쓰기 데이터를 제공하며, 쓰기 데이터가 쓰여져야 하는 타겟 주소 또는 주소들을 식별해준다. 쓰기 기술자는 또한 쓰기 동작을 식별해주기 위해 본원에서 "태그 ID"라고 지칭되는 고유 식별 번호를 제공할 수 있다.
쓰기 기술자들 Write0, Write1, Write2, Write3의 시퀀스는, 예를 들어, 쓰기 펜스 브리지(1440a)와 같은 I/O 컴플렉스(1424a)(도 14)의 컴포넌트에 의해, 원격 노드(B)의 쓰기 펜스 브리지(1440b)와 같은, 타겟 노드의 종단점 목적지로 주소지정되는 패킷들의 시퀀스 내에 페이로드들로서 패킹된다. 소스 노드의 쓰기 펜스 브리지(1440a)는, 도 16a에 도시된 바와 같이, 노드들을 상호연결시키는 I/O 패브릭을 통해 쓰기 기술자들 Write0, Write1, Write2, Write3을 타겟 노드로 전달하는 패킷들을 발행한다(블록(1528), 도 15a). 타겟 노드의 쓰기 펜스 브리지(1440b)(도 14)는 소스 노드로부터 수신된 패킷들을 어셈블하고, 수신된 패킷들로부터 각각의 쓰기 기술자를 언패킹한다. 언패킹된 쓰기 기술자에 의해 식별된 쓰기 동작이 이어서 타겟 노드에 의해 개시된다. 쓰기 펜스 브리지들(1440a, 1440b)은, 예를 들어, NTB(nontransparent bridge) 로직을 포함할 수 있다. 특정의 적용분야에 따라, 노드들 사이에서 쓰기 동작들을 미러링하기 위해 다른 전송 포맷들이 사용될 수 있다는 것을 잘 알 것이다.
I/O 요청의 최종 쓰기 동작이 수신되었는지에 관한 결정(블록(1542), 도 15a)이 행해진다. 그러한 경우, 쓰기 펜스 미러 로직(1602)(도 16a)의 쓰기 펜스 소스 로직(110a)은, 도 16a에 쓰기 펜스 플래그 WFFlagWrite3에 의해 나타낸 바와 같이, 쓰기 펜스 플래그를 발생시킨다(블록(1556), 도 15a). 일 실시예에서, 쓰기 펜스 소스 로직(110a)은, CPU 코어들(314a, 314b) 및 코어들을 프로그래밍하는 연관된 소프트웨어와 독립적으로, I/O 요청의 최종 쓰기 동작이 수신되었다는 결정에 응답하여, 쓰기 펜스 플래그 WFFlagWrite3에 의해 나타낸 바와 같이 쓰기 펜스 플래그를 자동으로 발생시킨다. 소스 노드의 쓰기 펜스 브리지(1440a)는, 쓰기 기술자들에 대해 앞서 기술된 것과 유사한 방식으로, 도 16a에 도시된 바와 같이 노드들을 상호연결시키는 I/O 패브릭을 통해 쓰기 펜스 플래그 WFFlagWrite3을 타겟 노드로 전달하는 패킷들을 발행한다(블록(1556), 도 15a).
일 실시예에서, 소스 또는 로컬 노드(A)의 쓰기 펜스 소스 로직(110a)은 앞서 기술된 바와 같이 타겟의 주소 공간 내의 지정된 주소에의 특별한 쓰기 동작에 의해 타겟 또는 원격 노드(B)에 쓰기 펜스 플래그를 알려줄 수 있다. 이 예에서, 쓰기 펜스 플래그는 타겟 노드에 의해 타겟 노드 메모리 주소 공간의 원격 노드 플래그 주소 공간(724b)으로 변환되는 원격 노드 플래그 주소 공간(720)(도 7)을 목표로 하는 쓰기 동작을 기술하는 쓰기 기술자 WFFlagWrite3의 형태로 되어 있다. 타겟의 쓰기 펜스 플래그 브리지(1440b)의 쓰기 펜스 타겟 로직은 그 지정된 주소에의 쓰기를 쓰기 펜스 플래그로서 인식하도록 그리고, 쓰기 펜스 플래그 이후의 메모리 쓰기 동작들이 완료되기 전에 쓰기 펜스 플래그와 연관된 메모리 쓰기 동작들이 완료되도록 보장하기 위해, 앞서 기술된 바와 같이 적절한 조치를 취하도록 구성된다.
다른 실시예에서, 소스 또는 로컬 노드(A)의 쓰기 펜스 미러 로직(1602)(도 16a)의 쓰기 펜스 소스 로직(110a)은 쓰기 펜스 플래그를 타겟 또는 원격 노드(B)에 알려주도록 쓰기 기술자의 헤더를 수정하는 것에 의해 쓰기 펜스 플래그를 발생시킬 수 있다(블록(1556), 도 15a). 이 실시예에서, 쓰기 펜스 플래그는 CPU 코어들(314a, 314b) 및 코어들을 프로그래밍하는 연관된 소프트웨어와 독립적으로 발생된다. 예를 들어, 도 11에 도시된 바와 같이, 쓰기 동작 write3에 대한 기술자(1120)의 헤더(1110)가 쓰기 펜스 플래그(1124)를 나타내는 속성 데이터를, 헤더(1110)의 한 부분에, 포함하도록 수정된다. 그에 따라, 타겟 또는 원격 노드의 쓰기 펜스 I/O 포트는 본 설명에 따른 쓰기 펜스 플래그(1124)를 표시하도록 수정된 헤더(1110)를 가지는 쓰기 기술자(1120)(도 11)를 인식하도록 구성될 수 있다. 그에 따라, 타겟 또는 원격 노드(B)의 쓰기 펜스 타겟 로직은 쓰기 펜스 플래그(1124)를 표시하도록 수정된 헤더(1110)의 속성을 가지는 쓰기 기술자(1120)(도 11)를 인식하도록 그리고, 쓰기 펜스 플래그 이후의 메모리 쓰기 동작들이 완료되기 전에 쓰기 펜스 플래그와 연관된 메모리 쓰기 동작들이 완료되도록 보장하기 위해, 앞서 기술된 바와 같이 적절한 조치를 취하도록 구성된다. 다른 포맷들의 원격 동작 기술자 또는 메시지들이 쓰기 펜스 플래그를 다른 노드와 같은 타겟에 알려주기 위해 다른 수정들을 가질 수 있다는 것을 잘 알 것이다.
그에 부가하여, 저널 쓰기가 소스 노드에 의해 발생되고 저널 쓰기 JournalWrite3에 의해 나타낸 바와 같이 소스 노드의 로컬 메모리(300a)(도 16a)에 도 16a에 도시된 바와 같이 플래그 Flag3와 함께 저장된다(블록(1560), 도 15a). 읽기 저널 쓰기 동작이 소스 노드의 쓰기 펜스 미러 로직(1602)에 의해 로컬 메모리(300a)(도 16a)로부터 읽혀진다(블록(1570), 도 15a). 읽기 저널 쓰기 동작에 기초하여 쓰기 펜스 미러 로직(1602)은 도 16a에 저널 쓰기 journalwrite3에 의해 나타낸 바와 같이 저널 쓰기 동작을 발생시킨다(블록(1574), 도 15a). 소스 노드의 쓰기 펜스 브리지(1440a)는, 쓰기 기술자들 및 쓰기 펜스 플래그에 대해 앞서 기술된 것과 유사한 방식으로, 도 16a에 도시된 바와 같이 노드들을 상호연결시키는 I/O 패브릭을 통해 저널 쓰기 journalwrite3을 타겟 노드로 전달하는 패킷들을 발행한다(블록(1574), 도 15a). 앞서 기술된 바와 같이, 쓰기 저널 쓰기 동작 JournalWrite3은, 쓰기 펜스 플래그에 의해 펜싱된 쓰기 동작들의 완료를 표시하기 위해 원격 노드의 쓰기 완료 데이터 구조인 원격 쓰기 저널에 쓰는, 타겟 또는 원격 노드(B)에 의해 실행되는 쓰기 동작이다.
쓰기 펜스 미러 로직(1602)은 I/O 요청을 호스트에 커밋할 수 있고(블록(1576)), 즉 비록 I/O 요청들이 저장소에 아직 쓰여지지는 않았지만, I/O 요청들이 완료되었다는 것을 호스트에 통보할 수 있다. 일 실시예에서, 쓰기 펜스 미러 로직(1602)은 완료를 소스 또는 로컬 노드의 CPU 코어들(314a)(도 14)에 시그널링할 수 있다. 차례로, 소스 또는 로컬 노드에 의한 저장소에의 커밋 동작들이 실패하는 경우에, CPU 코어들(314a)은 쓰기 동작들이 타겟 또는 원격 노드에 커밋되었다, 즉 성공적으로 미러링되었는 것을 쓰기 동작들을 요청하는 호스트에 알려줄 수 있다. 이와 같이, 쓰기 동작을 호스트 시스템에 커밋하기 전에, 소스 또는 로컬 노드는 쓰기 데이터와 쓰기 저널 둘 다가, 본원에 기술되는 바와 같은 쓰기 펜스 플래그의 사용에 의해 그리고 쓰기 요청들의 쓰기 데이터를 타겟 또는 원격 노드의 시스템 메모리에 쓴 이후에 쓰기 저널에 대한 차후의 업데이트에 의해 질서있는 방식으로, 미러링된 노드의 메모리에 실제로 쓰여졌다는 것을 보장할 수 있다.
도 15a의 동작들은, 특정의 적용분야에 따라, CPU 코어들(314a)(도 3, 도 14), 또는 DMA 제어기(334a) 또는 쓰기 펜스 브리지(340a)에 구현될 수 있는 쓰기 펜스 미러 로직(1602)(도 16a) 및 쓰기 펜스 소스 로직(110a)과 같은, I/O 컴플렉스(324a)(도 3)의 컴포넌트들, 또는 I/O 컴플렉스(1424a)(도 14)의 다른 컴포넌트들, 또는 이들의 다양한 조합들을 비롯한 소스 노드의 CPU(310a, 도 3)(1410, 도 14)의 다양한 컴포넌트들에 의해 수행될 수 있다.
도 15b는 본 개시내용의 다른 실시예에 따른 쓰기 펜스 플래그 로직을 이용하는 로컬 노드(A)(도 14)와 같은 소스 노드의 동작들의 다른 예를 나타내고 있다. 이 예에서, 도 15a와 관련하여 앞서 기술된 것과 유사한 방식으로, 쓰기 요청들의 형태로 된 하나 이상의 I/O 요청들이, 예를 들어, 도 2의 호스트(120a)와 같은 호스트로부터 수신된다(블록(1504)). 그에 따라, 호스트로부터 쓰기 요청을 수신할 때, 소스 노드는 각각의 수신된 쓰기 요청의 파라미터들을 그 자신의 로컬 시스템 메모리(300a)에 저장한다(블록(1508), 도 15b). 쓰기 요청의 파라미터들은 요청의 쓰기 데이터(또는 쓰기 데이터가 획득될 수 있는 주소 또는 주소들) 및 전형적으로 저장소(114)(도 2)와 같은 저장소인 쓰기 데이터의 목적지를 포함한다. 도 16b는, 쓰기 요청들(또는 쓰기 요청들의 파라미터들) WriteReq0, WriteReq1, WriteReq2, WriteReq3으로 나타내어져 있는 바와 같이, 호스트로부터 수신되고 로컬 메모리(300a)에 저장된 쓰기 요청들의 일 예를 나타내고 있다. 다시 말하지만, 소스 노드의 로컬 메모리(300a)에 저장된 쓰기 요청들(또는 쓰기 요청들의 파라미터들) WriteReq0, WriteReq1, WriteReq2, WriteReq3의 특정의 포맷은 호스트들과 소스 노드 사이의 통신 경로(118)(도 2)의 특정의 전송 프로토콜과 호환되는 포맷으로 되어 있을 수 있다.
쓰기 요청들(또는 그들의 파라미터들) WriteReq0, WriteReq1, WriteReq2, WriteReq3이 소스 노드에 의해 로컬 메모리(300a)(도 16b)로부터 읽혀지고(블록(1524), 도 15b), 메모리로부터 읽혀진 이 쓰기 요청들(또는 그들의 파라미터들)에 기초하여, 쓰기 동작들 Write0, Write1, Write2, Write3(도 16b)에 의해 나타내어진 쓰기 동작들의 연쇄에 의해 표시된 바와 같이, 소스 노드의에 의해 쓰기 동작들이 발생된다(블록(1528), 도 15b).
이 예에서, 로컬 노드(A)와 같은 소스 노드의 I/O 컴플렉스(1424a)(도 14)의 컴포넌트는 원격 노드(B)에 의해 수행될 동작들을 "기술자" 데이터 구조를 사용하여 전달한다. 이 예에서, 소스 노드의 쓰기 펜스 DMA 제어기(1434a)(도 14)의 쓰기 펜스 DMA 로직(1604)의 발생기 로직(1608)(도 16b)은 쓰기 요청들 WriteReq0, WriteReq1, WriteReq2, WriteReq3을 메모리(300a)로부터 읽고 쓰기 동작들 Write0, Write1, Write2, Write3을 메모리로부터 읽혀진 쓰기 요청들에 기초하여 쓰기 기술자들의 형태로 발생시키도록 구성된다. 각각의 쓰기 기술자 Write0, Write1, Write2, Write3는 쓰기 동작으로서 수행될 동작을 식별해주고, 쓰여질 쓰기 데이터를 제공하며, 쓰기 데이터가 쓰여져야 하는 타겟 주소 또는 주소들을 식별해준다. 쓰기 기술자는 또한 쓰기 동작을 식별해주기 위해 본원에서 "태그 ID"라고 지칭되는 고유 식별 번호를 제공할 수 있다.
쓰기 기술자들 Write0, Write1, Write2, Write3의 시퀀스는, 예를 들어, 쓰기 펜스 브리지(1440a)와 같은 I/O 컴플렉스(1424a)(도 14)의 컴포넌트에 의해, 원격 노드(B)의 쓰기 펜스 브리지(1440b)와 같은, 타겟 노드의 종단점 목적지로 주소지정되는 패킷들의 시퀀스 내에 페이로드들로서 패킹된다. 소스 노드의 쓰기 펜스 브리지(1440a)는, 도 16b에 도시된 바와 같이, 노드들을 상호연결시키는 I/O 패브릭을 통해 쓰기 기술자들 Write0, Write1, Write2, Write3을 타겟 노드로 전달하는 패킷들을 발행한다(블록(1528), 도 15b). 타겟 노드의 쓰기 펜스 브리지(1440b)는 소스 노드로부터 수신된 패킷들을 어셈블하고, 수신된 패킷들로부터 각각의 쓰기 기술자를 언패킹한다. 언패킹된 쓰기 기술자에 의해 식별된 쓰기 동작이 이어서 타겟 노드에 의해 개시된다. 쓰기 펜스 브리지들(1440a, 1440b)은, 예를 들어, NTB(nontransparent bridge) 로직을 포함할 수 있다. 특정의 적용분야에 따라, 노드들 사이에서 쓰기 동작들을 미러링하기 위해 다른 포맷들이 사용될 수 있다는 것을 잘 알 것이다.
수신된 쓰기 요청들의 쓰기 데이터가 저장소에 커밋되어야 하는지에 관한 결정이 행해진다(블록(1542), 도 15b). 이 실시예에서, 소스 노드의 쓰기 펜스 DMA 제어기(1434a)(도 14)의 쓰기 펜스 DMA 로직(1604)(도 16b)은 수신된 쓰기 요청들의 쓰기 데이터가 저장소에 커밋되어야 하는지를 결정하도록 구성된다. 이 실시예의 쓰기 펜스 DMA 로직(1604)(도 16b)은 메모리(300a)로부터 쓰기 요청들 WriteReq0, WriteReq1, WriteReq2, WriteReq3을 검사하고 쓰기 요청들 WriteReq0, WriteReq1, WriteReq2, WriteReq3 중 하나에 I/O 커밋 비트 플래그가 설정되었는지를 결정하도록 구성되는 검출기 로직(1612)을 포함한다. 이 예에서, I/O 커밋 비트 플래그가 쓰기 요청 WriteReq3에서 검출된다.
예를 들어, 도 17에 도시된 바와 같이, 쓰기 요청 WriteReq3과 같은 쓰기 요청(1720)의 헤더(1710)는 I/O 커밋 플래그(1724)를 나타내는 제어 비트 데이터를, 헤더(1710)의 한 부분에, 포함한다. 그에 따라, 소스 또는 로컬 노드의 쓰기 펜스 DMA 제어기(1434a)(도 14)의 검출기 로직(1612)은 본 설명에 따른 I/O 커밋 플래그(1724)를 표시하도록 수정된 헤더(1710)를 가지는 쓰기 요청(1720)(도 17)을 인식하도록 구성될 수 있다.
그에 따라, 쓰기 요청 WriteReq3에서 I/O 커밋 플래그(1724)를 검출한 것에 응답하여, DMA 발생기 로직(1608)(도 16b)은, 도 16b에 쓰기 펜스 플래그 WFFlagWrite3에 의해 나타낸 바와 같이, 쓰기 펜스 플래그를 발생시킨다(블록(1556), 도 15b). 일 실시예에서, 쓰기 펜스 소스 로직(110a)은, 쓰기 요청 WriteReq3에서의 I/O 커밋 플래그(1724)의 검출에 응답하여, 쓰기 펜스 플래그 WFFlagWrite3에 의해 나타낸 바와 같이 쓰기 펜스 플래그를 자동으로 발생시켜, I/O 요청의 최종 쓰기 동작이 수신되었다는 결정을 제공한다. 이 실시예에서, 쓰기 펜스 플래그는 CPU 코어들(314a, 314b) 및 코어들을 프로그래밍하는 연관된 소프트웨어와 독립적으로 발생된다. 소스 노드의 쓰기 펜스 브리지(1440a)는, 쓰기 기술자들에 대해 앞서 기술된 것과 유사한 방식으로, 도 16b에 도시된 바와 같이 노드들을 상호연결시키는 I/O 패브릭을 통해 쓰기 펜스 플래그 WFFlagWrite3을 타겟 노드로 전달하는 패킷들을 발행한다(블록(1556), 도 15b).
이 실시예에서, 쓰기 펜스 DMA 로직(1604)(도 16b)의 검출기 로직(1612)은 I/O 커밋 비트 플래그가 WriteReq3과 같은 쓰기 요청에 설정되었다는 것을 검출(블록(1542), 도 15b)하도록 구성되고, 그에 응답하여, DMA 발생기 로직(1608)(도 16b)은, 도 16b에 쓰기 펜스 플래그 WFFlagWrite3에 의해 나타낸 바와 같이, 쓰기 펜스 플래그를 자동으로 발생시키고(블록(1556), 도 15b), 그로써 소스 또는 호스트의 범용 프로세서 코어에 의한 쓰기 펜스 플래그 발생과 메모리 저장 및 읽기 동작들을 제거한다는 것을 잘 알 것이다. 이러한 방식으로, 쓰기 동작들을 원격 노드에 미러링하는 미러 동작들의 효율이 향상될 수 있다.
쓰기 펜스 DMA 로직(1604)(도 16b)의 검출기 로직(1612)에 의해, I/O 커밋 비트 플래그가 WriteReq3과 같은 쓰기 요청에 설정되었다는 것을 검출(블록(1542), 도 15b)한 것에 응답하여, DMA 발생기 로직(1608)(도 16b)은 또한 도 16b에 저널 쓰기 journalwrite3에 의해 나타낸 바와 같이 저널 쓰기 동작을 자동으로 발생시킨다(블록(1574), 도 15b). 이 실시예에서, 쓰기 펜스 DMA 로직(1604)(도 16b)의 검출기 로직(1612)에 의한 I/O 커밋 플래그 검출에 응답하여, DMA 발생기 로직(1608)(도 16b)에 의한 저널 쓰기 동작의 자동 발생에 의해, 블록(1560)(도 15a)의 저널 쓰기 동작 발생과 메모리 저장 동작들 그리고 블록(1570)의 저널 쓰기 동작 메모리 읽기 동작들이 도 15b의 실시예에서 제거되었다는 것을 잘 알 것이다.
소스 노드의 쓰기 펜스 브리지(1440a)는, 쓰기 기술자들 및 쓰기 펜스 플래그에 대해 앞서 기술된 것과 유사한 방식으로, 도 16b에 도시된 바와 같이 노드들을 상호연결시키는 I/O 패브릭을 통해 저널 쓰기 journalwrite3을 타겟 노드로 전달하는 패킷들을 발행한다(블록(1574), 도 15b). 앞서 기술된 바와 같이, 쓰기 저널 쓰기 동작 journalwrite3은, 쓰기 펜스 플래그에 의해 펜싱된 쓰기 동작들의 완료를 표시하기 위해 원격 노드의 쓰기 완료 데이터 구조인 원격 쓰기 저널에 쓰는, 타겟 또는 원격 노드(B)에 의해 실행되는 쓰기 동작이다.
도 15b의 동작들은, 특정의 적용분야에 따라, CPU 코어들(314a)(도 3, 도 14), 또는 DMA 제어기(334a) 또는 쓰기 펜스 브리지(340a)와 같은 I/O 컴플렉스(324a)(도 3)의 컴포넌트들, 또는 쓰기 펜스 DMA 제어기(1434a)(도 14)의 쓰기 펜스 DMA 로직(1604)(도 16b)과 같은 I/O 컴플렉스(1424a)(도 14)의 다른 컴포넌트들, 또는 이들의 다양한 조합들을 비롯한 소스 노드의 CPU(310a, 도 3)(1410, 도 14)의 다양한 컴포넌트들에 의해 수행될 수 있다.
이하의 예들은 추가적인 실시예들에 관한 것이다.
예 1은 타겟의 메모리에 대한 쓰기 동작들을 발행하는 소스와 함께 사용하기 위한 타겟의 장치이고, I/O 포트; 및 데이터를 메모리에 쓰기 위해 소스에 의해 발행된 제1 복수의 쓰기 동작들, 제1 복수의 쓰기 동작들의 발행과 연관시켜 소스에 의해 발행된 플래그, 및 데이터를 메모리에 쓰기 위해 소스에 의해 발행된 제2 복수의 쓰기 동작들을 I/O 포트에서 수신하고; 제1 복수의 쓰기 동작들의 발행과 연관시켜 소스에 의해 발행된 플래그를 검출하며; 플래그의 검출에 응답하여, 제2 복수의 쓰기 동작들의 쓰기 동작들 중 임의의 것의 완료 이전에 제1 복수의 쓰기 동작들이 메모리에서 완료되게 보장하도록 구성된 타겟의 로직을 포함한다.
예 2에서, (본 예를 제외한) 예 1 내지 예 10의 발명 요지는, 임의로, 버퍼를 포함할 수 있고, 타겟의 로직은 제1 복수의 쓰기 동작들이 메모리에서 완료될 때까지 제2 복수의 쓰기 동작들의 쓰기 동작들을 버퍼에 버퍼링하도록 추가로 구성된다.
예 3에서, (본 예를 제외한) 예 1 내지 예 10의 발명 요지는, 임의로, 타겟의 로직은 플래그 쓰기 동작이 플래그라는 것을 표시하는 타겟에서의 타겟 주소를 가지는 플래그 쓰기 동작을 수신하도록 구성되고, 타겟의 로직은 플래그 쓰기 동작의 타겟 주소가 플래그 쓰기 동작이 플래그라는 것을 표시한다는 것을 검출하는 것에 의해 플래그를 검출하도록 구성된다는 것을 포함할 수 있다.
예 4에서, (본 예를 제외한) 예 1 내지 예 10의 발명 요지는, 임의로, 타겟의 로직은 제1 복수의 쓰기 동작들의 쓰기 동작을 기술하는, 소스에 의해 발행된 쓰기 기술자를 I/O 포트에서 수신하도록 구성되고, 쓰기 기술자는 플래그를 표시하는 헤더를 포함하며, 타겟의 로직은 쓰기 기술자의 플래그 헤더를 검출하는 것에 의해 플래그를 검출하도록 구성된다는 것을 포함할 수 있다.
예 5에서, (본 예를 제외한) 예 1 내지 예 10의 발명 요지는, 임의로, I/O 디바이스는 소스에 의해 발행된 쓰기 동작들의 타겟 주소들을 소스의 주소 공간으로부터 타겟의 주소 공간으로 변환하도록 구성된 주소 변환 로직을 가지는 NTB(nontransparent bridge)인 것을 포함할 수 있다.
예 6에서, (본 예를 제외한) 예 1 내지 예 10의 발명 요지는, 임의로, 타겟은 마이크로프로세서를 포함하고, NTB(nontransparent bridge)는 타겟의 마이크로프로세서와 통합된다는 것을 포함할 수 있다.
예 7에서, (본 예를 제외한) 예 1 내지 예 10의 발명 요지는, 임의로, 타겟은 타겟의 메모리에의 쓰기 동작들의 완료를 표시하는 쓰기 완료 데이터 구조를 가지며, 제2 복수의 쓰기 동작들은 제1 복수의 쓰기 명령어들의 완료를 표시하기 위해 쓰기 완료 데이터 구조에의 쓰기 완료 데이터 구조 쓰기 동작을 포함하고, 타겟의 로직은, 플래그의 검출에 응답하여, 제2 복수의 쓰기 동작들의 쓰기 완료 데이터 구조 쓰기 동작의 완료 이전에 제1 복수의 쓰기 동작들이 메모리에서 완료되게 보장하도록 구성된다는 것을 포함할 수 있다.
예 8에서, (본 예를 제외한) 예 1 내지 예 10의 발명 요지는, 임의로, 소스에 의해 발행된 쓰기 동작들은 태그 ID(identification)를 갖고, 타겟은 원격 동작 데이터 구조를 가지며, 타겟의 로직은 수신된 쓰기 동작들의 태그 ID를 원격 동작 데이터 구조에 기록하고, 플래그 이전에 수신된 어느 쓰기 동작들이 제2 복수의 쓰기 동작들의 쓰기 동작들 중 임의의 것의 완료 이전에 메모리에서 완료되어야 하는지를 식별하기 위해, 원격 동작 데이터 구조를 사용하도록 구성된다는 것을 포함할 수 있다.
예 9에서, (본 예를 제외한) 예 1 내지 예 10의 발명 요지는, 임의로, 타겟은 메모리 제어기에 의해 완료된 쓰기 동작의 태그 ID를 포함하는 확인응답을 발행하는 메모리 제어기를 갖고, 타겟의 로직은 메모리 제어기에 의해 발행된 쓰기 동작 확인응답들을 수신하고 각각의 수신된 쓰기 동작 확인응답의 태그 ID를 연관된 쓰기 동작의 태그 ID와 연관시켜 원격 동작 데이터 구조에 기록하도록 구성되며, 타겟의 로직은 제1 복수의 쓰기 동작들 중 어느 쓰기 동작들이 완료되었는지를 식별하기 위해 원격 동작 데이터 구조를 사용하도록 구성된다는 것을 포함할 수 있다.
예 10에서, (본 예를 제외한) 예 1 내지 예 10의 발명 요지는, 임의로, 타겟은 호스트의 상기 I/O 요청들에 응답하여 저장소와 I/O 동작들을 수행하기 위해 저장소 및 호스트와 함께 사용하기 위한 멀티 프로세서 저장소 제어기의 원격 노드라는 것을 포함할 수 있다.
예 11은 디스플레이와 함께 사용하기 위한 컴퓨팅 시스템이고, 쓰기 동작들 및 플래그를 발행하도록 구성된 로직을 가지는 소스; 및 타겟을 포함하며, 타겟은 메모리; 메모리에 데이터를 쓰고 그로부터 데이터를 읽도록 구성된 프로세서; 메모리 내의 데이터에 의해 표현되는 정보를 디스플레이하도록 구성된 비디오 제어기; I/O 포트; 및 데이터를 메모리에 쓰기 위해 소스에 의해 발행된 제1 복수의 쓰기 동작들, 제1 복수의 쓰기 동작들의 발행과 연관시켜 소스에 의해 발행된 플래그, 및 데이터를 메모리에 쓰기 위해 소스에 의해 발행된 제2 복수의 쓰기 동작들을 I/O 포트에서 수신하고; 제1 복수의 쓰기 동작들의 발행과 연관시켜 소스에 의해 발행된 플래그를 검출하며; 플래그의 검출에 응답하여, 제2 복수의 쓰기 동작들의 쓰기 동작들 중 임의의 것의 완료 이전에 제1 복수의 쓰기 동작들이 메모리에서 완료되게 보장하도록 구성된 타겟의 로직을 포함한다.
예 12에서, (본 예를 제외한) 예 11 내지 예 20의 발명 요지는, 임의로, 타겟은 버퍼를 추가로 포함하고, 타겟의 로직은 제1 복수의 쓰기 동작들이 메모리에서 완료될 때까지 제2 복수의 쓰기 동작들의 쓰기 동작들을 버퍼에 버퍼링하도록 추가로 구성된다는 것을 포함할 수 있다.
예 13에서, (본 예를 제외한) 예 11 내지 예 20의 발명 요지는, 임의로, 타겟의 로직은 플래그 쓰기 동작이 플래그라는 것을 표시하는 타겟에서의 타겟 주소를 가지는 플래그 쓰기 동작을 수신하도록 구성되고, 타겟의 로직은 플래그 쓰기 동작의 타겟 주소가 플래그 쓰기 동작이 플래그라는 것을 표시한다는 것을 검출하는 것에 의해 플래그를 검출하도록 구성된다는 것을 포함할 수 있다.
예 14에서, (본 예를 제외한) 예 11 내지 예 20의 발명 요지는, 임의로, 타겟의 로직은 제1 복수의 쓰기 동작들의 쓰기 동작을 기술하는, 소스에 의해 발행된 쓰기 기술자를 I/O 포트에서 수신하도록 구성되고, 쓰기 기술자는 플래그를 표시하는 헤더를 포함하며, 타겟의 로직은 쓰기 기술자의 플래그 헤더를 검출하는 것에 의해 플래그를 검출하도록 구성된다는 것을 포함할 수 있다.
예 15에서, (본 예를 제외한) 예 11 내지 예 20의 발명 요지는, 임의로, 상기 타겟은 상기 I/O 포트, 타겟의 상기 로직, 및 소스에 의해 발행된 쓰기 동작들의 타겟 주소들을 소스의 주소 공간으로부터 타겟의 주소 공간으로 변환하도록 구성된 주소 변환 로직을 가지는 NTB(nontransparent bridge)를 추가로 포함한다는 것을 포함할 수 있다.
예 16에서, (본 예를 제외한) 예 11 내지 예 20의 발명 요지는, 임의로, 타겟은 상기 프로세서를 가지는 마이크로프로세서를 포함하고, NTB(nontransparent bridge)는 타겟의 마이크로프로세서와 통합된다는 것을 포함할 수 있다.
예 17에서, (본 예를 제외한) 예 11 내지 예 20의 발명 요지는, 임의로, 타겟은 타겟의 메모리에의 쓰기 동작들의 완료를 표시하는 쓰기 완료 데이터 구조를 가지며, 제2 복수의 쓰기 동작들은 제1 복수의 쓰기 명령어들의 완료를 표시하기 위해 쓰기 완료 데이터 구조에의 쓰기 완료 데이터 구조 쓰기 동작을 포함하고, 타겟의 로직은, 플래그의 검출에 응답하여, 제2 복수의 쓰기 동작들의 쓰기 완료 데이터 구조 쓰기 동작의 완료 이전에 제1 복수의 쓰기 동작들이 메모리에서 완료되게 보장하도록 구성된다는 것을 포함할 수 있다.
예 18에서, (본 예를 제외한) 예 11 내지 예 20의 발명 요지는, 임의로, 소스에 의해 발행된 쓰기 동작들은 태그 ID(identification)를 갖고, 타겟은 원격 동작 데이터 구조를 가지며, 타겟의 로직은 수신된 쓰기 동작들의 태그 ID를 원격 동작 데이터 구조에 기록하고, 플래그 이전에 수신된 어느 쓰기 동작들이 제2 복수의 쓰기 동작들의 쓰기 동작들 중 임의의 것의 완료 이전에 메모리에서 완료되어야 하는지를 식별하기 위해, 원격 동작 데이터 구조를 사용하도록 구성된다는 것을 포함할 수 있다.
예 19에서, (본 예를 제외한) 예 11 내지 예 20의 발명 요지는, 임의로, 타겟은 메모리 제어기에 의해 완료된 쓰기 동작의 태그 ID를 포함하는 확인응답을 발행하는 메모리 제어기를 갖고, 타겟의 로직은 메모리 제어기에 의해 발행된 쓰기 동작 확인응답들을 수신하고 각각의 수신된 쓰기 동작 확인응답의 태그 ID를 연관된 쓰기 동작의 태그 ID와 연관시켜 원격 동작 데이터 구조에 기록하도록 구성되며, 타겟의 로직은 제1 복수의 쓰기 동작들 중 어느 쓰기 동작들이 완료되었는지를 식별하기 위해 원격 동작 데이터 구조를 사용하도록 구성된다는 것을 포함할 수 있다.
예 20에서, (본 예를 제외한) 예 11 내지 예 20의 발명 요지는, 임의로, 호스트의 I/O 요청들에 응답하여 저장소와 I/O 동작들을 수행하기 위해, 저장소 및 호스트와 함께 사용하기 위한 멀티 프로세서 저장소 제어기를 포함할 수 있고, 타겟은 멀티 프로세서 저장소 제어기의 원격 노드이다.
예 21은 데이터 쓰기 동작들을 관리하는 방법이고, 타겟의 로직은 동작들을 수행하며, 동작들은 데이터를 타겟의 메모리에 쓰기 위해 소스에 의해 발행된 제1 복수의 쓰기 동작들, 제1 복수의 쓰기 동작들의 발행과 연관시켜 소스에 의해 발행된 플래그, 및 데이터를 메모리에 쓰기 위해 소스에 의해 발행된 제2 복수의 쓰기 동작들을 타겟의 I/O 포트에서 수신하는 것; 제1 복수의 쓰기 동작들의 발행과 연관시켜 소스에 의해 발행된 플래그를 검출하는 것; 플래그의 검출에 응답하여, 제2 복수의 쓰기 동작들의 쓰기 동작들 중 임의의 것의 완료 이전에 제1 복수의 쓰기 동작들이 메모리에서 완료되게 보장하는 것을 포함한다.
예 22에서, (본 예를 제외한) 예 21 내지 예 30의 발명 요지는, 임의로, 타겟의 로직에 의해 수행되는 동작들은 제1 복수의 쓰기 동작들이 메모리에서 완료될 때까지 제2 복수의 쓰기 동작들의 쓰기 동작들을 버퍼에 버퍼링하는 것을 추가로 포함한다는 것을 포함할 수 있다.
예 23에서, (본 예를 제외한) 예 21 내지 예 30의 발명 요지는, 임의로, 타겟의 로직에 의해 수행되는 동작들은 플래그 쓰기 동작이 플래그라는 것을 표시하는 타겟에서의 타겟 주소를 가지는 플래그 쓰기 동작을 I/O 포트에서 수신하는 것을 추가로 포함하고, 타겟의 로직에 의해 수행되는 동작들은 플래그 쓰기 동작의 타겟 주소가 플래그 쓰기 동작이 플래그라는 것을 표시한다는 것을 검출하는 것에 의해 플래그를 검출하는 것을 추가로 포함한다는 것을 포함할 수 있다.
예 24에서, (본 예를 제외한) 예 21 내지 예 30의 발명 요지는, 임의로, 타겟의 로직에 의해 수행되는 동작들은 제1 복수의 쓰기 동작들의 쓰기 동작을 기술하는, 소스에 의해 발행된 쓰기 기술자를 I/O 포트에서 수신하는 것을 추가로 포함하고, 쓰기 기술자는 플래그를 표시하는 헤더를 포함하며, 타겟의 로직에 의해 수행되는 동작들은 쓰기 기술자의 플래그 헤더를 검출하는 것에 의해 플래그를 검출하는 것을 추가로 포함한다는 것을 포함할 수 있다.
예 25에서, (본 예를 제외한) 예 21 내지 예 30의 발명 요지는, 임의로, 상기 타겟은 상기 I/O 포트, 타겟의 상기 로직, 및 주소 변환 로직을 가지는 NTB(nontransparent bridge)를 추가로 포함하고, 방법은 주소 변환 로직이 소스에 의해 발행된 쓰기 동작들의 타겟 주소들을 소스의 주소 공간으로부터 타겟의 주소 공간으로 변환하는 단계를 추가로 포함한다는 것을 포함할 수 있다.
예 26에서, (본 예를 제외한) 예 21 내지 예 30의 발명 요지는, 임의로, 타겟은 상기 프로세서를 가지는 마이크로프로세서를 포함하고, NTB(nontransparent bridge)는 타겟의 마이크로프로세서와 통합된다는 것을 포함할 수 있다.
예 27에서, (본 예를 제외한) 예 21 내지 예 30의 발명 요지는, 임의로, 타겟은 타겟의 메모리에의 쓰기 동작들의 완료를 표시하는 쓰기 완료 데이터 구조를 가지며, 제2 복수의 쓰기 동작들은 제1 복수의 쓰기 명령어들의 완료를 표시하기 위해 쓰기 완료 데이터 구조에의 쓰기 완료 데이터 구조 쓰기 동작을 포함하고, 타겟의 로직에 의해 수행되는 동작들은, 플래그의 검출에 응답하여, 제2 복수의 쓰기 동작들의 쓰기 완료 데이터 구조 쓰기 동작의 완료 이전에 제1 복수의 쓰기 동작들이 메모리에서 완료되도록 보장하는 것을 추가로 포함한다는 것을 포함할 수 있다.
예 28에서, (본 예를 제외한) 예 21 내지 예 30의 발명 요지는, 임의로, 소스에 의해 발행된 쓰기 동작들은 태그 ID(identification)를 갖고, 타겟은 원격 동작 데이터 구조를 가지며, 타겟의 로직에 의해 수행되는 동작들은 수신된 쓰기 동작들의 태그 ID를 원격 동작 데이터 구조에 기록하고, 플래그 이전에 수신된 어느 쓰기 동작들이 제2 복수의 쓰기 동작들의 쓰기 동작들 중 임의의 것의 완료 이전에 메모리에서 완료되어야 하는지를 식별하기 위해, 원격 동작 데이터 구조를 사용하는 것을 추가로 포함한다는 것을 포함할 수 있다.
예 29에서, (본 예를 제외한) 예 21 내지 예 30의 발명 요지는, 임의로, 타겟은 메모리 제어기에 의해 완료된 쓰기 동작의 태그 ID를 포함하는 확인응답을 발행하는 메모리 제어기를 갖고, 타겟의 로직에 의해 수행되는 동작들은 메모리 제어기에 의해 발행된 쓰기 동작 확인응답들을 수신하고 각각의 수신된 쓰기 동작 확인응답의 태그 ID를 연관된 쓰기 동작의 태그 ID와 연관시켜 원격 동작 데이터 구조에 기록하는 것, 및 제1 복수의 쓰기 동작들 중 어느 쓰기 동작들이 완료되었는지를 식별하기 위해 원격 동작 데이터 구조를 사용하는 것을 추가로 포함한다는 것을 포함할 수 있다.
예 30에서, (본 예를 제외한) 예 21 내지 예 30의 발명 요지는, 임의로, 멀티 프로세서 저장소 제어기가 호스트의 I/O 요청들에 응답하여 저장소와 I/O 동작들을 수행하는 것을 포함할 수 있고, 여기서 타겟은 멀티 프로세서 저장소 제어기의 원격 노드이다.
예 31은 타겟의 메모리에 대한 쓰기 동작들을 수신하는 타겟과 함께 사용하기 위한 소스의 장치이고,
입/출력(I/O) 포트; 및
데이터를 타겟 메모리에 쓰는 제1 복수의 쓰기 동작들, 제1 복수의 쓰기 동작들과 연관된 쓰기 펜스 플래그, 및 데이터를 타겟 메모리에 쓰는 제2 복수의 쓰기 동작들을 I/O 포트에 발행하도록 구성된 소스의 소스 로직을 가지는 데이터 전송 가속기를 포함하며;
여기서 쓰기 펜스 플래그는 제2 복수의 쓰기 동작들의 쓰기 동작들 중 임의의 것의 완료 이전에 제1 복수의 쓰기 동작들이 타겟에 의해 타겟 메모리에서 완료되도록 보장하기 위해 타겟에 의해 검출되도록 소스 로직에 의해 구성된다.
예 32에서, (본 예를 제외한) 예 31 내지 예 40의 발명 요지는, 임의로, 쓰기 펜스 플래그는 타겟에서의 타겟 주소를 가지는 플래그 쓰기 동작 - 이 타겟 주소는 플래그 쓰기 동작이 쓰기 펜스 플래그라는 것을 타겟에 알려줌 - 인 것으로 타겟에 의해 검출되도록 소스 로직에 의해 구성된다는 것을 포함할 수 있다.
예 33에서, (본 예를 제외한) 예 31 내지 예 40의 발명 요지는, 임의로, 쓰기 펜스 플래그는 플래그 쓰기 기술자에서의 속성을 가지는 헤더를 가지는 플래그 쓰기 기술자 - 이 헤더 속성은 플래그 쓰기 기술자가 쓰기 펜스 플래그라는 것을 타겟에 알려줌 - 인 것으로 타겟에 의해 검출되도록 소스 로직에 의해 구성된다는 것을 포함할 수 있다.
예 34에서, (본 예를 제외한) 예 31 내지 예 40의 발명 요지는, 임의로, 소스의 데이터 전송 가속기는 DMA(direct memory access) 제어기를 포함하고, 소스 로직은 적어도 부분적으로 DMA 제어기에 구현된다는 것을 포함할 수 있다.
예 35에서, (본 예를 제외한) 예 31 내지 예 40의 발명 요지는, 임의로, 소스는 CPU(central processing unit)를 포함하고, DMA 제어기와 I/O 포트는 소스의 CPU와 통합된다는 것을 포함할 수 있다.
예 36에서, (본 예를 제외한) 예 31 내지 예 40의 발명 요지는, 임의로, 호스트와 함께 사용하기 위한 것임을 포함할 수 있고, 여기서 소스 로직은 호스트로부터 쓰기 요청들을 수신하고, 상기 수신된 쓰기 요청들에 응답하여, 데이터를 타겟 메모리에 쓰기 위해 상기 제1 복수의 쓰기 동작들을 발생시키도록 추가로 구성된다.
예 37에서, (본 예를 제외한) 예 31 내지 예 40의 발명 요지는, 임의로, 수신된 쓰기 요청은 I/O 커밋 플래그를 포함하고, 소스는 상기 소스 로직의 적어도 일부분을 구현하는 DMA(direct memory access) 제어기 - 상기 소스 로직은 수신된 쓰기 요청에서 I/O 커밋 플래그를 검출하도록 구성된 검출기를 가지는 DMA 제어기 내에 구현됨 -, 및 상기 I/O 커밋 플래그 검출에 응답하여 상기 쓰기 펜스 플래그를 발생시키도록 구성된 발생기를 포함한다는 것을 포함할 수 있다.
예 38에서, (본 예를 제외한) 예 31 내지 예 40의 발명 요지는, 임의로, 타겟은 타겟의 메모리에의 쓰기 동작들의 완료를 표시하는 쓰기 완료 데이터 구조를 가지며, 소스의 소스 로직은 제1 복수의 쓰기 명령어들의 완료를 표시하기 위해 쓰기 완료 데이터 구조에 대한 쓰기 완료 데이터 구조 쓰기 동작을 쓰기 펜스 플래그 이후에 I/O 포트에 발행하도록 추가로 구성된다는 것을 포함할 수 있다.
예 39에서, (본 예를 제외한) 예 31 내지 예 40의 발명 요지는, 임의로, 타겟은 타겟의 메모리에의 쓰기 동작들의 완료를 표시하는 쓰기 완료 데이터 구조를 가지며, 상기 DMA 제어기의 상기 발생기는 제1 복수의 쓰기 명령어들의 완료를 표시하기 위해, 상기 쓰기 펜스 플래그 발생 이후에 상기 I/O 커밋 플래그 검출에 응답하여, 쓰기 완료 데이터 구조에 대한 쓰기 완료 데이터 구조 쓰기 동작을 발생시키도록 추가로 구성된다는 것을 포함할 수 있다.
예 40에서, (본 예를 제외한) 예 31 내지 예 40의 발명 요지는, 임의로, 소스는 멀티 프로세서 저장소 제어기의 로컬 노드이고, 타겟은 호스트의 I/O 요청들에 응답하여 저장소와 I/O 동작들을 수행하기 위해 저장소 및 호스트와 함께 사용하기 위한 멀티 프로세서 저장소 제어기의 원격 노드라는 것을 포함할 수 있다.
예 41은 디스플레이와 함께 사용하기 위한 컴퓨팅 시스템이고,
타겟 메모리를 가지며 쓰기 동작들 및 쓰기 펜스 플래그를 수신하도록 구성된 로직을 가지는 타겟; 및
소스를 포함하고, 소스는
소스 메모리;
소스 메모리 내의 데이터에 의해 표현되는 정보를 디스플레이하도록 구성된 비디오 제어기;
입/출력(I/O) 포트; 및
데이터를 타겟 메모리에 쓰는 제1 복수의 쓰기 동작들, 제1 복수의 쓰기 동작들과 연관된 쓰기 펜스 플래그, 및 데이터를 타겟 메모리에 쓰는 제2 복수의 쓰기 동작들을 I/O 포트에 발행하도록 구성된 소스의 소스 로직을 가지는 데이터 전송 가속기를 포함하며;
여기서 쓰기 펜스 플래그는 제2 복수의 쓰기 동작들의 쓰기 동작들 중 임의의 것의 완료 이전에 제1 복수의 쓰기 동작들이 타겟에 의해 타겟 메모리에서 완료되도록 보장하기 위해 타겟에 의해 검출되도록 소스 로직에 의해 구성된다.
예 42에서, (본 예를 제외한) 예 41 내지 예 50의 발명 요지는, 임의로, 쓰기 펜스 플래그는 타겟에서의 타겟 주소를 가지는 플래그 쓰기 동작 - 이 타겟 주소는 플래그 쓰기 동작이 쓰기 펜스 플래그라는 것을 타겟에 알려줌 - 인 것으로 타겟에 의해 검출되도록 소스 로직에 의해 구성된다는 것을 포함할 수 있다.
예 43에서, (본 예를 제외한) 예 41 내지 예 50의 발명 요지는, 임의로, 쓰기 펜스 플래그는 플래그 쓰기 기술자에서의 속성을 가지는 헤더를 가지는 플래그 쓰기 기술자 - 이 헤더 속성은 플래그 쓰기 기술자가 쓰기 펜스 플래그라는 것을 타겟에 알려줌 - 인 것으로 타겟에 의해 검출되도록 소스 로직에 의해 구성된다는 것을 포함할 수 있다.
예 44에서, (본 예를 제외한) 예 41 내지 예 50의 발명 요지는, 임의로, 소스의 데이터 전송 가속기는 DMA(direct memory access) 제어기를 포함하고, 소스 로직은 적어도 부분적으로 DMA 제어기에 구현된다는 것을 포함할 수 있다.
예 45에서, (본 예를 제외한) 예 41 내지 예 50의 발명 요지는, 임의로, 소스는 CPU(central processing unit)를 포함하고, DMA 제어기와 I/O 포트는 소스의 CPU와 통합된다는 것을 포함할 수 있다.
예 46에서, (본 예를 제외한) 예 41 내지 예 50의 발명 요지는, 임의로, 호스트와 함께 사용하기 위한 것임을 포함할 수 있고, 여기서 소스 로직은 호스트로부터 쓰기 요청들을 수신하고, 상기 수신된 쓰기 요청들에 응답하여, 데이터를 타겟 메모리에 쓰기 위해 상기 제1 복수의 쓰기 동작들을 발생시키도록 추가로 구성된다.
예 47에서, (본 예를 제외한) 예 41 내지 예 50의 발명 요지는, 임의로, 수신된 쓰기 요청은 I/O 커밋 플래그를 포함하고, 소스는 상기 소스 로직의 적어도 일부분을 구현하는 DMA(direct memory access) 제어기 - 상기 소스 로직은 수신된 쓰기 요청에서 I/O 커밋 플래그를 검출하도록 구성된 검출기를 가지는 DMA 제어기 내에 구현됨 -, 및 상기 I/O 커밋 플래그 검출에 응답하여 상기 쓰기 펜스 플래그를 발생시키도록 구성된 발생기를 포함한다는 것을 포함할 수 있다.
예 48에서, (본 예를 제외한) 예 41 내지 예 50의 발명 요지는, 임의로, 타겟은 타겟의 메모리에의 쓰기 동작들의 완료를 표시하는 쓰기 완료 데이터 구조를 가지며, 소스의 소스 로직은 제1 복수의 쓰기 명령어들의 완료를 표시하기 위해 쓰기 완료 데이터 구조에 대한 쓰기 완료 데이터 구조 쓰기 동작을 쓰기 펜스 플래그 이후에 I/O 포트에 발행하도록 추가로 구성된다는 것을 포함할 수 있다.
예 49에서, (본 예를 제외한) 예 41 내지 예 50의 발명 요지는, 임의로, 타겟은 타겟의 메모리에의 쓰기 동작들의 완료를 표시하는 쓰기 완료 데이터 구조를 가지며, 상기 DMA 제어기의 상기 발생기는 제1 복수의 쓰기 명령어들의 완료를 표시하기 위해, 상기 쓰기 펜스 플래그 발생 이후에 상기 I/O 커밋 플래그 검출에 응답하여, 쓰기 완료 데이터 구조에 대한 쓰기 완료 데이터 구조 쓰기 동작을 발생시키도록 추가로 구성된다는 것을 포함할 수 있다.
예 50에서, (본 예를 제외한) 예 41 내지 예 50의 발명 요지는, 임의로, 소스는 멀티 프로세서 저장소 제어기의 로컬 노드이고, 타겟은 호스트의 I/O 요청들에 응답하여 저장소와 I/O 동작들을 수행하기 위해 저장소 및 호스트와 함께 사용하기 위한 멀티 프로세서 저장소 제어기의 원격 노드라는 것을 포함할 수 있다.
예 51은 쓰기 동작들을 관리하는 방법이고,
데이터 전송 가속기의 소스 로직이 동작들을 수행하는 것을 포함하고, 동작들은
데이터를 타겟의 타겟 메모리에 쓰는 제1 복수의 쓰기 동작들, 제1 복수의 쓰기 동작들과 연관된 쓰기 펜스 플래그, 및 데이터를 타겟 메모리에 쓰는 제2 복수의 쓰기 동작들을 I/O 포트에 발행하는 것을 포함하며;
여기서 쓰기 펜스 플래그는 제2 복수의 쓰기 동작들의 쓰기 동작들 중 임의의 것의 완료 이전에 제1 복수의 쓰기 동작들이 타겟에 의해 타겟 메모리에서 완료되도록 보장하기 위해 타겟에 의해 검출되도록 소스 로직에 의해 구성된다.
예 52에서, (본 예를 제외한) 예 51 내지 예 55의 발명 요지는, 임의로, 쓰기 펜스 플래그는 타겟에서의 타겟 주소를 가지는 플래그 쓰기 동작 - 이 타겟 주소는 플래그 쓰기 동작이 쓰기 펜스 플래그라는 것을 타겟에 알려줌 -, 및 플래그 쓰기 기술자에서의 속성을 가지는 헤더를 가지는 플래그 쓰기 기술자 - 이 헤더 속성은 플래그 쓰기 기술자가 쓰기 펜스 플래그라는 것을 타겟에 알려줌 - 중 하나인 것으로 타겟에 의해 검출되도록 소스 로직에 의해 구성된다는 것을 포함할 수 있다.
예 53에서, (본 예를 제외한) 예 51 내지 예 55의 발명 요지는, 임의로, 소스의 데이터 전송 가속기는 DMA(direct memory access) 제어기를 포함하고, 소스 로직은 적어도 부분적으로 DMA 제어기에 구현되며, 소스는 CPU(central processing unit)를 포함하고, DMA 제어기와 I/O 포트는 소스의 CPU와 통합된다는 것을 포함할 수 있다.
예 54에서, (본 예를 제외한) 예 51 내지 예 55의 발명 요지는, 임의로, 소스는 멀티 프로세서 저장소 제어기의 로컬 노드이고, 타겟은 저장소 및 호스트와 함께 사용하기 위한 멀티 프로세서 저장소 제어기의 원격 노드이며, 동작들은 호스트로부터 수신된 쓰기 요청들을 포함하는 호스트로부터 수신된 I/O 요청들에 응답하여 저장소와 I/O 동작들을 수행하는 것, 및 호스트로부터의 상기 수신된 쓰기 요청들에 응답하여, 데이터를 타겟 메모리에 쓰는 상기 제1 복수의 쓰기 동작들을 발생시키는 것을 추가로 포함한다는 것을 포함할 수 있다.
예 55에서, (본 예를 제외한) 예 51 내지 예 55의 발명 요지는, 임의로, 호스트로부터의 수신된 쓰기 요청은 I/O 커밋 플래그를 포함하고, 소스는 상기 소스 로직의 적어도 일부분을 구현하는 DMA(direct memory access) 제어기를 포함하며 - 상기 소스 로직은 검출기 및 발생기를 가지는 DMA 제어기 내에 구현됨 -, 상기 동작들은 수신된 쓰기 요청에서 I/O 커밋 플래그를 검출기에 의해 검출하는 것, 및 상기 I/O 커밋 플래그 검출에 응답하여 상기 쓰기 펜스 플래그를 발생기에 의해 발생시키는 것을 추가로 포함하고;
타겟은 타겟의 메모리에의 쓰기 동작들의 완료를 표시하는 쓰기 완료 데이터 구조를 가지며, 동작들은, 상기 쓰기 펜스 플래그 발생 이후에, 쓰기 완료 데이터 구조에 대한 쓰기 완료 데이터 구조 쓰기 동작을 발생기에 의해 발생시키는 것, 및 제1 복수의 쓰기 명령어들의 완료를 표시하기 위해 쓰기 완료 데이터 구조에 대한 쓰기 완료 데이터 구조 쓰기 동작을 쓰기 펜스 플래그 이후에 I/O 포트에 발행하는 것을 추가로 포함한다는 것을 포함할 수 있다.
예 56은 임의의 선행 예에 기술된 방법을 수행하는 수단을 포함하는 장치에 관한 것이다.
기술된 동작들은 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 임의의 조합을 생성하기 위해 표준의 프로그래밍 및/또는 엔지니어링 기법들을 사용하여 방법, 장치 또는 컴퓨터 프로그램 제품으로서 구현될 수 있다. 기술된 동작들은 "컴퓨터 판독가능 저장 매체"에 유지되는 컴퓨터 프로그램 코드로서 구현될 수 있고, 여기서 프로세서가 컴퓨터 판독가능 저장 매체로부터 코드를 읽고 실행할 수 있다. 컴퓨터 판독가능 저장 매체는 전자 회로, 저장 재료, 무기 재료, 유기 재료, 생물학적 재료, 케이스, 하우징, 코팅, 및 하드웨어 중 적어도 하나를 포함한다. 컴퓨터 판독가능 저장 매체는 자기 저장 매체(예컨대, 하드 디스크 드라이브, 플로피 디스크, 테이프 등), 광학 저장소(CD-ROM, DVD, 광학 디스크 등), 휘발성 및 비휘발성 메모리 디바이스(예컨대, EEPROM, ROM, PROM, RAM, DRAM, SRAM, 플래시 메모리, 펌웨어, 프로그램가능 로직 등), SSD(Solid State Device) 등(이들로 제한되지 않음)을 포함할 수 있다. 기술된 동작들을 구현하는 코드는 또한 하드웨어 디바이스(예컨대, 집적 회로 칩, PGA(Programmable Gate Array), ASIC(Application Specific Integrated Circuit) 등)에 구현되는 하드웨어 로직에 구현될 수 있다. 또한 게다가, 기술된 동작들을 구현하는 코드는 "전송 신호"에 구현될 수 있고, 여기서 전송 신호는 공간을 통해 또는, 광학 섬유, 구리 전선 등과 같은, 전송 매체를 통해 전파할 수 있다. 코드 또는 논리가 인코딩되는 전송 신호는 무선 신호, 위성 전송, 무선파, 적외선 신호, 블루투스 등을 추가로 포함할 수 있다. 컴퓨터 판독가능 저장 매체 상에 포함되는 프로그램 코드는 전송측 스테이션 또는 컴퓨터로부터 수신측 스테이션 또는 컴퓨터로 전송 신호로서 전송될 수 있다. 컴퓨터 판독가능 저장 매체는 전송 신호만으로 이루어져 있지는 않다. 본 기술분야의 통상의 기술자는 본 설명의 범주를 벗어남이 없이 이 구성에 대해 많은 수정들이 행해질 수 있다는 것과, 제조 물품이 본 기술분야에 공지된 적당한 정보 포함 매체(information bearing medium)를 포함할 수 있다는 것을 잘 알 것이다. 물론, 본 기술분야의 통상의 기술자는 본 설명의 범주를 벗어남이 없이 이 구성에 대해 많은 수정들이 행해질 수 있다는 것과, 제조 물품이 본 기술분야에 공지된 임의의 유형적(tangible) 정보 포함 매체를 포함할 수 있다는 것을 잘 알 것이다.
특정 적용분야들에서, 본 설명에 따른 디바이스는, 데스크톱, 워크스테이션, 서버, 메인프레임, 랩톱, 핸드헬드 컴퓨터 등을 포함하는 컴퓨터 시스템과 같은, 컴퓨터 시스템에 결합된 모니터 또는 다른 디스플레이 상에 디스플레이할 정보를 렌더링하는 비디오 제어기, 디바이스 구동기 및 네트워크 제어기를 포함하는 컴퓨터 시스템에 구현될 수 있다. 대안적으로, 디바이스 실시예들은, 예를 들어, 스위치, 라우터 등과 같은, 비디오 제어기를 포함하지 않거나, 예를 들어, 네트워크 제어기를 포함하지 않는 컴퓨팅 디바이스에 구현될 수 있다.
도면들의 예시된 논리는 특정 순서로 일어나는 특정 이벤트들을 나타낼 수 있다. 대안의 실시예들에서, 특정 동작들이 상이한 순서로 수행되거나, 수정되거나 제거될 수 있다. 더욱이, 동작들이 앞서 기술된 로직에 추가될 수 있고 기술된 실시예들에 여전히 부합할 수 있다. 게다가, 본원에 기술되는 동작들이 순차적으로 일어날 수 있거나, 특정 동작들이 병렬로 처리될 수 있다. 또한 게다가, 동작들이 단일의 처리 유닛에 의해 또는 분산된 처리 유닛들에 의해 수행될 수 있다.
다양한 실시예들의 이상의 설명은 예시 및 설명을 위해 제공되어 있다. 이 설명은 총망라한 것이거나 개시된 정확한 형태로 제한하려고 의도되어 있지 않다. 이상의 개시 내용을 바탕으로 많은 수정들 및 변형들이 가능하다.

Claims (25)

  1. 소스 노드 및 타겟 노드를 포함하는 장치로서, 상기 소스 노드에 의해 발행된 상기 타겟 노드의 메모리에 대한 쓰기 동작들을 수신하는 상기 타겟 노드와 함께 상기 소스 노드가 사용되고,
    상기 소스 노드는:
    메모리(300a);
    입력/출력(I/O) 컴플렉스(324a) - 상기 I/O 컴플렉스(324a)는 I/O 포트(330a) 및 쓰기 펜스 브리지(write fence bridge)(340a)를 포함하고, 상기 쓰기 펜스 브리지(340a)는 쓰기 펜스 플래그 로직(write fence flag logic)을 가짐 -; 및
    원격 노드 플래그 주소 공간(720)을 포함하는 주소 공간(700a)
    을 포함하고,
    상기 타겟 노드는:
    메모리(300b);
    입력/출력(I/O) 컴플렉스(324b) - 상기 I/O 컴플렉스(324b)는 I/O 포트(330b) 및 쓰기 펜스 브리지(340b)를 포함하고, 상기 쓰기 펜스 브리지(340b)는 쓰기 펜스 플래그 로직을 가짐 -; 및
    원격 노드 플래그 주소 공간(724b)을 포함하는 주소 공간(700b)
    을 포함하고,
    상기 소스 노드의 상기 쓰기 펜스 브리지(340a)의 상기 쓰기 펜스 플래그 로직은, 데이터를 상기 타겟 노드의 메모리(300b)의 주소 공간(700b)에 쓰는 제1 복수의 쓰기 동작들, 상기 제1 복수의 쓰기 동작들과 연관된 쓰기 펜스 플래그(write fence flag) 및 데이터를 상기 타겟 노드의 메모리(300b)의 상기 주소 공간(700b)에 쓰는 제2 복수의 쓰기 동작들을 상기 소스 노드의 상기 I/O 포트(330a)에 발행하도록 구성되고,
    상기 쓰기 펜스 플래그는 상기 제1 및 제2 복수의 쓰기 동작들의 주소 공간과는 상이한 상기 타겟 노드의 지정된 원격 노드 플래그 주소 공간(724b)으로 보내지는 쓰기 펜스 플래그 동작을 포함하고,
    상기 타겟 노드의 상기 쓰기 펜스 브리지(340b)는, 쓰기 펜스 플래그 쓰기 동작이 상기 타겟 노드의 상기 쓰기 펜스 브리지(340b)에 의해 언패킹되고 상기 타겟 노드에 의해 개시됨에 따라, 상기 쓰기 펜스 플래그 쓰기 동작의 타겟 주소를 상기 소스 노드의 상기 원격 노드 플래그 주소 공간(720)에서 상기 타겟 노드의 상기 주소 공간(700b)의 상기 원격 노드 플래그 주소 공간(724b)의 주소 공간으로 변환하도록 구성되고,
    상기 타겟 노드의 상기 쓰기 펜스 브리지(340b)의 상기 쓰기 펜스 플래그 로직은, 상기 타겟 노드의 상기 원격 노드 플래그 주소 공간(724b) 내의 주소로 보내지는 쓰기 동작의 타겟 주소를 상기 제1 복수의 쓰기 동작들에 대한 쓰기 펜스의 시행을 시작하라는 쓰기 펜스 플래그로서 인식하도록 더 구성되고,
    상기 타겟 노드의 상기 쓰기 펜스 브리지(340b)는 상기 쓰기 펜스 플래그를 검출할 때, 상기 제2 복수의 쓰기 동작들을 버퍼링하여 상기 쓰기 펜스 플래그에 의해 펜싱된(fenced) 상기 제1 복수의 쓰기 동작들이 완료될 때까지 상기 버퍼링된 제2 복수의 쓰기 동작들의 실행을 지연시키도록 더 구성되는, 장치.
  2. 삭제
  3. 삭제
  4. 제1항에 있어서, 상기 소스 노드 및 상기 타겟 노드 각각은 각 노드의 I/O 컴플렉스(324a, 324b)가 통합된 CPU(central processing unit)(310a, 310b)를 포함하고, 각 I/O 컴플렉스(324a, 324b)는 DMA(direct memory access) 제어기(334a, 334b)를 더 포함하는, 장치.
  5. 삭제
  6. 제1항에 있어서, 호스트와 함께 사용하기 위해, 상기 소스 노드의 상기 쓰기 펜스 브리지(340a)의 상기 쓰기 펜스 플래그 로직은, 호스트로부터 쓰기 요청들을 수신하고, 상기 수신된 쓰기 요청들에 응답하여, 데이터를 상기 타겟 노드의 메모리에 쓰기 위해 상기 제1 복수의 쓰기 동작들을 발생시키도록 더 구성되는, 장치.
  7. 제1항에 있어서, 수신된 쓰기 요청은 I/O 커밋 플래그(I/O commit flag)를 포함하고, 상기 소스 노드의 상기 쓰기 펜스 브리지(340a)의 상기 쓰기 펜스 플래그 로직은 쓰기 펜스 DMA 로직(1604)을 포함하는 쓰기 펜스 DMA 제어기(1434a)에서 구현되고, 상기 쓰기 펜스 DMA 로직(1604)은 검출기 로직(1612) 및 발생기 로직(1608)을 포함하고, 상기 검출기 로직(1612)은 수신된 쓰기 요청들을 검사하고 상기 수신된 쓰기 요청들 중 하나에 I/O 커밋 비트 플래그가 설정되었는지를 결정하도록 구성되며, 수신된 쓰기 요청에서 I/O 커밋 플래그를 검출하는 것에 응답하여, 상기 발생기 로직(1608)은 상기 쓰기 펜스 플래그를 발생시키도록 구성되는, 장치.
  8. 삭제
  9. 제7항에 있어서, 상기 타겟 노드는 상기 타겟 노드의 메모리에의 쓰기 동작들의 완료를 표시하는 쓰기 완료 데이터 구조를 가지며, 상기 쓰기 펜스 DMA 제어기(1434a)의 상기 발생기 로직(1608)은 상기 쓰기 펜스 플래그 발생 이후에 상기 I/O 커밋 플래그 검출에 응답하여, 상기 쓰기 완료 데이터 구조에 대한 쓰기 동작을 발생시켜 상기 제1 복수의 쓰기 동작들의 완료를 표시하도록 더 구성되는, 장치.
  10. 제1항에 있어서, 상기 소스 노드는 멀티 프로세서 저장소 제어기의 로컬 노드이고, 상기 타겟 노드는 호스트의 I/O 요청들에 응답하여 저장소와 I/O 동작들을 수행하기 위해 상기 저장소 및 상기 호스트와 함께 사용하기 위한 상기 멀티 프로세서 저장소 제어기의 원격 노드인, 장치.
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
  21. 장치의 소스 노드와 타겟 노드 간의 쓰기 동작들을 관리하는 방법으로서, 상기 방법은:
    상기 소스 노드의 쓰기 펜스 브리지(340a)의 쓰기 펜스 플래그 로직에 의해, 데이터를 타겟 노드의 타겟 메모리(300b)의 주소 공간(700b)에 쓰는 제1 복수의 쓰기 동작들, 상기 제1 복수의 쓰기 동작들과 연관된 쓰기 펜스 플래그 및 데이터를 상기 타겟 메모리(300b)의 상기 주소 공간(700b)에 쓰는 제2 복수의 쓰기 동작들을 상기 소스 노드의 I/O 포트(330a)에 발행하는 단계(1528, 1556, 1570) - 상기 쓰기 펜스 플래그는 상기 제1 및 제2 복수의 쓰기 동작들의 주소 공간과는 상이한 상기 타겟 노드의 지정된 원격 노드 플래그 주소 공간(724b)으로 보내지는 쓰기 펜스 플래그 동작을 포함함 -;
    쓰기 펜스 플래그 쓰기 동작이 상기 타겟 노드의 쓰기 펜스 브리지(340b)에 의해 언패킹되고 상기 타겟 노드에 의해 개시됨에 따라, 상기 타겟 노드의 상기 쓰기 펜스 브리지(340b)에 의해, 상기 쓰기 펜스 플래그 쓰기 동작의 타겟 주소를 상기 소스 노드의 원격 노드 플래그 주소 공간(720)에서 상기 타겟 노드의 상기 주소 공간(700b)의 상기 원격 노드 플래그 주소 공간(724b)의 주소 공간으로 변환하는 단계;
    상기 타겟 노드의 상기 쓰기 펜스 브리지(340b)의 상기 쓰기 펜스 플래그 로직에 의해, 상기 원격 노드 플래그 주소 공간(724b) 내의 주소로 보내지는 쓰기 동작의 타겟 주소를 상기 제1 복수의 쓰기 동작들에 대한 쓰기 펜스의 시행을 시작하라는 쓰기 펜스 플래그로서 인식하는 단계; 및
    상기 쓰기 펜스 플래그를 검출할 때, 상기 타겟 노드의 상기 쓰기 펜스 브리지(340b)에 의해, 상기 제2 복수의 쓰기 동작들을 버퍼링하여 상기 쓰기 펜스 플래그에 의해 펜싱된 상기 제1 복수의 쓰기 동작들이 완료될 때까지 상기 버퍼링된 제2 복수의 쓰기 동작들의 실행을 지연시키는 단계를 포함하는, 방법.
  22. 삭제
  23. 제21항에 있어서, 상기 소스 노드는 멀티 프로세서 저장소 제어기의 로컬 노드이고, 상기 타겟 노드는 저장소 및 호스트와 함께 사용하기 위한 상기 멀티 프로세서 저장소 제어기의 원격 노드이며, 상기 방법은 상기 호스트로부터 수신된 쓰기 요청들을 포함하는 상기 호스트로부터 수신된 I/O 요청들에 응답하여, 상기 쓰기 펜스 브리지(340a)에 의해 상기 저장소와 I/O 동작들을 수행하는 단계; 및 상기 호스트로부터의 상기 수신된 쓰기 요청들에 응답하여, 데이터를 상기 타겟 메모리에 쓰는 상기 제1 복수의 쓰기 동작들을 상기 쓰기 펜스 브리지(340a)에 의해 발생시키는 단계를 더 포함하는, 방법.
  24. 제21항에 있어서, 수신된 쓰기 요청은 I/O 커밋 플래그를 포함하고, 상기 소스 노드의 상기 쓰기 펜스 브리지(340a)의 상기 쓰기 펜스 플래그 로직은 쓰기 펜스 DMA 로직(1604)을 포함하는 쓰기 펜스 DMA 제어기(1434a)에서 구현되고, 상기 쓰기 펜스 DMA 로직(1604)는 검출기 로직(1612) 및 발생기 로직(1608)을 포함하고, 상기 검출기 로직(1612)은 수신된 쓰기 요청들을 검사하고 상기 수신된 쓰기 요청들 중 하나에 I/O 커밋 비트 플래그가 설정되었는지를 결정하며, 쓰기 요청에서 I/O 커밋 플래그를 검출하는 것에 응답하여, 상기 발생기 로직(1608)은 상기 쓰기 펜스 플래그를 발생시키는, 방법.
  25. 제24항에 있어서,
    상기 타겟 노드는 상기 타겟 노드의 상기 타겟 메모리(300b)에의 쓰기 동작들의 완료를 표시하는 쓰기 완료 데이터 구조를 가지며, 상기 방법은, 상기 발생기 로직(1608)에 의해, 상기 쓰기 펜스 플래그 발생 이후에, 상기 쓰기 완료 데이터 구조에 대한 쓰기 동작을 발생시키는 단계; 및 상기 발생기 로직(1608)에 의해, 상기 쓰기 펜스 플래그 이후에, 상기 쓰기 완료 데이터 구조에 대한 상기 쓰기 동작을 상기 소스 노드의 상기 I/O 포트(330a)에 발행하여 상기 제1 복수의 쓰기 동작들의 완료를 표시하는 단계를 더 포함하는, 방법.
KR1020177005005A 2014-09-26 2015-09-15 컴퓨터 시스템에서의 메모리 쓰기 관리 KR102274960B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US14/499,063 2014-09-26
US14/499,063 US20160092123A1 (en) 2014-09-26 2014-09-26 Memory write management in a computer system
US14/839,805 US20160092118A1 (en) 2014-09-26 2015-08-28 Memory write management in a computer system
US14/839,805 2015-08-28
PCT/US2015/050288 WO2016048725A1 (en) 2014-09-26 2015-09-15 Memory write management in a computer system

Publications (2)

Publication Number Publication Date
KR20170034424A KR20170034424A (ko) 2017-03-28
KR102274960B1 true KR102274960B1 (ko) 2021-07-09

Family

ID=55581821

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177005005A KR102274960B1 (ko) 2014-09-26 2015-09-15 컴퓨터 시스템에서의 메모리 쓰기 관리

Country Status (5)

Country Link
US (1) US20160092118A1 (ko)
EP (1) EP3198459A4 (ko)
KR (1) KR102274960B1 (ko)
CN (1) CN106575206B (ko)
WO (2) WO2016048724A1 (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9794366B1 (en) * 2016-10-19 2017-10-17 Red Hat, Inc. Persistent-memory management
CN108470008B (zh) * 2018-01-23 2020-08-14 广州市中海达测绘仪器有限公司 串口数据读写方法、装置、计算机设备和存储介质
US11307854B2 (en) * 2018-02-07 2022-04-19 Intel Corporation Memory write log storage processors, methods, systems, and instructions
KR102262209B1 (ko) * 2018-02-09 2021-06-09 한양대학교 산학협력단 더미 입출력 요청을 이용한 배리어 명령 전달 방법 및 그 장치
KR102586768B1 (ko) 2018-03-27 2023-10-16 에스케이하이닉스 주식회사 컴퓨팅 시스템 및 그것의 동작방법
CN108897681B (zh) * 2018-06-25 2022-03-04 郑州云海信息技术有限公司 一种用于存储管理控制系统的qat测试系统及方法
CN110941576B (zh) 2018-09-21 2021-11-19 苏州库瀚信息科技有限公司 具有多模pcie功能的存储控制器的系统、方法和设备
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
WO2020190814A1 (en) 2019-03-15 2020-09-24 Intel Corporation Graphics processors and graphics processing units having dot product accumulate instruction for hybrid floating point format
CN112534405A (zh) 2019-03-15 2021-03-19 英特尔公司 用于脉动阵列上的块稀疏操作的架构
US11861761B2 (en) 2019-11-15 2024-01-02 Intel Corporation Graphics processing unit processing and caching improvements
CN115048023A (zh) * 2021-03-09 2022-09-13 广州视源电子科技股份有限公司 电子笔记还原方法、装置、介质以及交互平板
US11915044B2 (en) * 2021-06-09 2024-02-27 Splunk Inc. Distributed task assignment in a cluster computing system
CN113609037B (zh) * 2021-06-30 2024-04-16 山东云海国创云计算装备产业创新中心有限公司 一种基于uvm的gpio模块验证的方法、装置、设备及可读介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030188072A1 (en) 2002-03-28 2003-10-02 Kenneth Creta Peer-to-peer bus segment bridging
US20070115292A1 (en) * 2005-10-26 2007-05-24 Via Technologies, Inc GPU Internal Wait/Fence Synchronization Method and Apparatus
US20110258281A1 (en) * 2010-04-15 2011-10-20 International Business Machines Corporation Query performance data on parallel computer system having compute nodes
JP2014153851A (ja) * 2013-02-07 2014-08-25 Nec Computertechno Ltd 命令実行制御装置、命令実行制御システム、命令実行制御方法、及び、命令実行制御プログラム

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6047334A (en) * 1997-06-17 2000-04-04 Intel Corporation System for delaying dequeue of commands received prior to fence command until commands received before fence command are ordered for execution in a fixed sequence
US5990913A (en) * 1997-07-30 1999-11-23 Intel Corporation Method and apparatus for implementing a flush command for an accelerated graphics port device
US6356962B1 (en) * 1998-09-30 2002-03-12 Stmicroelectronics, Inc. Network device and method of controlling flow of data arranged in frames in a data-based network
US6202095B1 (en) * 1998-10-07 2001-03-13 International Business Machines Corporation Defining characteristics between processing systems
US6671747B1 (en) * 2000-08-03 2003-12-30 Apple Computer, Inc. System, apparatus, method, and computer program for execution-order preserving uncached write combine operation
US6874039B2 (en) * 2000-09-08 2005-03-29 Intel Corporation Method and apparatus for distributed direct memory access for systems on chip
US6658520B1 (en) * 2000-09-26 2003-12-02 Intel Corporation Method and system for keeping two independent busses coherent following a direct memory access
US7243200B2 (en) * 2004-07-15 2007-07-10 International Business Machines Corporation Establishing command order in an out of order DMA command queue
JP2006113841A (ja) * 2004-10-15 2006-04-27 Hitachi High-Technologies Corp データ記憶制御装置
US7529864B2 (en) * 2004-11-09 2009-05-05 International Business Machines Corporation Method and system for testing remote I/O functionality
US7543131B2 (en) * 2005-08-12 2009-06-02 Advanced Micro Devices, Inc. Controlling an I/O MMU
US20070061549A1 (en) * 2005-09-15 2007-03-15 Kaniyur Narayanan G Method and an apparatus to track address translation in I/O virtualization
CN101352013A (zh) * 2005-10-07 2009-01-21 安吉尔系统公司 用补充命令文件进行rtp出口流的方法和装置
US20080155571A1 (en) * 2006-12-21 2008-06-26 Yuval Kenan Method and System for Host Software Concurrent Processing of a Network Connection Using Multiple Central Processing Units
US8069279B2 (en) * 2007-03-05 2011-11-29 Apple Inc. Data flow control within and between DMA channels
CN100527111C (zh) * 2007-09-29 2009-08-12 北京时代民芯科技有限公司 一种片上dma电路及其实现方法
US20110238938A1 (en) * 2008-10-30 2011-09-29 Lsi Corporation Efficient mirroring of data across storage controllers
US8489791B2 (en) * 2010-03-12 2013-07-16 Lsi Corporation Processor bus bridge security feature for network processors or the like
US8527672B2 (en) * 2010-11-05 2013-09-03 International Business Machines Corporation Fencing direct memory access data transfers in a parallel active messaging interface of a parallel computer
US9405550B2 (en) * 2011-03-31 2016-08-02 International Business Machines Corporation Methods for the transmission of accelerator commands and corresponding command structure to remote hardware accelerator engines over an interconnect link
US9021146B2 (en) * 2011-08-30 2015-04-28 Apple Inc. High priority command queue for peripheral component
US20130111103A1 (en) * 2011-10-28 2013-05-02 International Business Corporation High-speed synchronous writes to persistent storage
US8751830B2 (en) * 2012-01-23 2014-06-10 International Business Machines Corporation Memory address translation-based data encryption/compression
CN102681952B (zh) * 2012-05-12 2015-02-18 北京忆恒创源科技有限公司 将数据写入存储设备的方法与存储设备
US9395924B2 (en) * 2013-01-22 2016-07-19 Seagate Technology Llc Management of and region selection for writes to non-volatile memory

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030188072A1 (en) 2002-03-28 2003-10-02 Kenneth Creta Peer-to-peer bus segment bridging
US20070115292A1 (en) * 2005-10-26 2007-05-24 Via Technologies, Inc GPU Internal Wait/Fence Synchronization Method and Apparatus
US20110258281A1 (en) * 2010-04-15 2011-10-20 International Business Machines Corporation Query performance data on parallel computer system having compute nodes
JP2014153851A (ja) * 2013-02-07 2014-08-25 Nec Computertechno Ltd 命令実行制御装置、命令実行制御システム、命令実行制御方法、及び、命令実行制御プログラム

Also Published As

Publication number Publication date
WO2016048724A1 (en) 2016-03-31
WO2016048725A9 (en) 2016-07-21
EP3198459A1 (en) 2017-08-02
WO2016048725A1 (en) 2016-03-31
CN106575206B (zh) 2021-01-29
EP3198459A4 (en) 2018-06-20
CN106575206A (zh) 2017-04-19
US20160092118A1 (en) 2016-03-31
KR20170034424A (ko) 2017-03-28

Similar Documents

Publication Publication Date Title
KR102274960B1 (ko) 컴퓨터 시스템에서의 메모리 쓰기 관리
US11755527B2 (en) Techniques for command validation for access to a storage device by a remote client
KR102403489B1 (ko) 비휘발성 메모리 익스프레스 컨트롤러에 의한 입출력 큐 관리 방법
TWI566088B (zh) 標頭同位錯誤處置技術
US9986028B2 (en) Techniques to replicate data between storage servers
CN104823167B (zh) 现场错误恢复
CN103597457B (zh) 避免设备中的非公布请求死锁
US11366610B2 (en) Solid-state drive with initiator mode
CA3021969A1 (en) System and method for tcp offload for nvme over tcp-ip
CN102446073B (zh) 延迟对操作的确认直至操作完成的方法和系统
US20160092123A1 (en) Memory write management in a computer system
WO2015166540A1 (ja) ストレージ装置とそのデータ処理方法及びストレージシステム
CN109964215B (zh) 具有环形缓冲区镜像的远程直接存储器访问数据通信中的流控制
US10901624B1 (en) Dummy host command generation for supporting higher maximum data transfer sizes (MDTS)
US11199992B2 (en) Automatic host buffer pointer pattern detection
CN111078607A (zh) 面向rdma与非易失性内存的网络访问编程框架部署方法及系统
JP2013512519A (ja) いくつかの周辺装置のメモリ間のデータの直接転送のためにメモリに直接アクセスするコントローラ、そのようなコントローラを実現可能にする方法およびコンピュータプログラム
US20160034191A1 (en) Grid oriented distributed parallel computing platform
US9653185B2 (en) Reducing error correction latency in a data storage system having lossy storage media
US9753876B1 (en) Processing of inbound back-to-back completions in a communication system
US10275388B2 (en) Simultaneous inbound multi-packet processing
US9111039B2 (en) Limiting bandwidth for write transactions across networks of components in computer systems
US20220269415A1 (en) Storage apparatus and data processing method therefor
CN117222992A (zh) 用于旁路存储器读取请求检测的系统和方法
JP2013171332A (ja) インターフェース装置とその制御方法

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right