KR20200016812A - 호스트 분리를 구비한 비휘발성 메모리 스위치 - Google Patents

호스트 분리를 구비한 비휘발성 메모리 스위치 Download PDF

Info

Publication number
KR20200016812A
KR20200016812A KR1020190096065A KR20190096065A KR20200016812A KR 20200016812 A KR20200016812 A KR 20200016812A KR 1020190096065 A KR1020190096065 A KR 1020190096065A KR 20190096065 A KR20190096065 A KR 20190096065A KR 20200016812 A KR20200016812 A KR 20200016812A
Authority
KR
South Korea
Prior art keywords
switch
nvm
program code
nonvolatile memory
host
Prior art date
Application number
KR1020190096065A
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 KR20200016812A publication Critical patent/KR20200016812A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4022Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
    • 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/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • G06F13/1663Access to shared memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • 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/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • 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/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • 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/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • 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/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • G06F11/108Parity data distribution in semiconductor storages, e.g. in SSD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1642Handling requests for interconnection or transfer for access to memory bus based on arbitration with request queuing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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
    • G06F13/1689Synchronisation and timing concerns
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/26Sensing or reading circuits; Data output circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/02Detection or location of defective auxiliary circuits, e.g. defective refresh counters
    • G11C29/023Detection or location of defective auxiliary circuits, e.g. defective refresh counters in clock generator or timing circuitry
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/52Protection of memory contents; Detection of errors in memory contents
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/10Packet switching elements characterised by the switching fabric construction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0064Latency reduction in handling transfers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • Retry When Errors Occur (AREA)
  • Hardware Redundancy (AREA)

Abstract

다수의 호스트들이 단일 포트 NVM 장치에 동시에 독립적으로 액세스할 수 있도록 NVM 스위치가 설계되었다. 이러한 활성-활성 다중 호스트 사용 구성은 저렴한 단일 포트 NVM 장치를 다양하게 사용할 수 있지만 호스트 중 하나의 문제는 다른 호스트와 NVM 장치 간의 트랜잭션을 지연 또는 차단할 수 있다. NVM 스위치는 스위치의 로직이 호스트에서 공유되더라도 여러 호스트의 활동을 격리하는 로직을 포함한다. 스위치가 한 호스트의 문제("오류 호스트")를 감지하면 스위치는 오류 호스트의 기내 명령을 지우고 오류 호스트의 데이터를 플러시한다. 마찬가지로 NVM 스위치는 연결된 NVM 장치에서 여러 호스트로 오류 보고를 올바르게 전달한다.

Description

호스트 분리를 구비한 비-휘발성 메모리 스위치{NON-VOLATILE MEMORY SWITCH WITH HOST ISOLATION}
관련 출원에 대한 상호 참조
본 출원은 2018년 8월 7일자로 "NVMe Protocol Switch Host Isolation in Active-Active Configuration" 라는 명칭으로 미국에 출원된 미국 가출원(62/715,713)의 우선권을 주장하며, 상기 미국 가출원은 본 발명에 대한 참조로서 그 전체 내용이 본 명세서에 통합된다.
본 발명은 일반적으로 컴퓨터 아키텍처 분야에 관한 것이며, 좀더 상세하게는, 입/출력 디바이스들 및 동작들에 관한 것이다. 고성능 컴퓨팅 환경은 저장 솔루션을 위해 플래시 메모리와 같은 비휘발성 메모리(NVM)를 점점 더 많이 사용하고 있다. 회전 매체 기술에 최적화된 전통적인 스토리지 인터페이스 대신에 NVM에 최적화된 호스트 컨트롤러 인터페이스가 사용된다. NMV 익스프레스(NVM Express: NVMe) 사양은 PCIe®(Peripheral Component Interconnect Express) 아키텍처를 활용하는 NVM용 확장가능한 호스트 컨트롤러 인터페이스 사양이다.
개요(Overview)
듀얼 포트 NVM 디바이스(예를 들면, 솔리드 스테이트 드라이브(SSD)) 비용으로 여러 호스트들에 의한 플래시 메모리에 대한 액세스를 허용한다. 여러 호스트들이 단일 포트 NVM 디바이스에 동시에 독립적으로 액세스할 수 있게하는 NVM 스위치가 설계되었다. 이러한 액티브-액티브 멀티-호스트 사용 구성을 통해 저렴한 단일 포트 NVM 디바이스(예컨대, 스토리지 가상화, RAID(Redundant Array of Independent Disk) 기능 등)를 다양하게 사용할 수 있지만, 호스트 중 하나의 문제(예를 들어, 고장, 기준 클록의 손실 등)는 다른 호스트와 NVM 디바이스 간의 트랜잭션을 지연시키거나 차단할 수 있다. NVM 스위치는 스위치의 로직이 호스트들 간에 공유되더라도 다수의 호스트들의 활동을 분리시키는 로직을 포함한다. 상기 스위치가 하나의 호스트("에러 호스트")의 문제를 감지하면, 스위치는 에러 호스트의 인-플라이트(in-flight) 커맨드를 소거(clear)하고, 에러 호스트의 데이터를 플러시(flush)한다. 마찬가지로, NVM 스위치는 연결된 NVM 디바이스들로부터 다수의 호스트들로의 에러 보고를 올바르게 전달할 수 있게 한다.
본 명세서의 실시예들은 첨부된 도면들을 참조하여 보다 잘 이해될 수 있다.
도 1은 멀티-호스트 대 단일 포트 호스트 분리를 위한 로직 및 프로그램 코드를 구비한 NVM 스위치를 포함하는 예시적인 시스템의 블록도를 도시한다.
도 2는 단일 포트 NVM 디바이스들과의 액티브-액티브 구성에서 호스트들을 분리하기 위한 NVM 스위치 로직의 예시도이다.
도 3은 호스트 응답에서 검출된 에러 완료 상태를 분리하는 예시적인 동작의 흐름도이다.
도 4는 스위치에 의해 검출된 호스트 데이터 에러를 분리하는 NVM 스위치의 예시적인 동작의 흐름도이다.
도 5는 판독 완료 패킷에서 검출된 데이터 에러를 분리하는 NVM 스위치의 예시적인 동작의 흐름도이다.
도 6은 다수의 호스트들 중 하나로부터의 링크 다운 이벤트를 분리하는 NVM 스위치의 예시적인 동작의 흐름도이다.
도 7은 다수의 연결된 호스트들 중 하나로부터의 리셋을 분리하기 위한 NVM 스위치의 예시적인 동작의 흐름도이다.
도 8은 호스트들 간에 에러 보고를 전달하기 위한 NVM 스위치의 예시적인 동작의 흐름도이다.
이하의 설명은 발명의 양상들을 구현하는 예시적인 시스템, 방법, 기술, 및 프로그램 흐름을 포함한다. 하지만, 본 개시는 이러한 특정 세부 사항 없이도 실시될 수 있는 것으로 이해된다. 예를 들어, 본 개시는 PCIe를 예시적인 일례로서 참조한다. 본 개시의 양상들은 또한 비휘발성 메모리 또는 솔리드 스테이트 디바이스와의 고확장성, 고속 통신을 위한 다른 유사한 상호접속 아키텍처들 또는 사양들에 적용될 수 있다. 다른 경우에, 잘 알려진 명령 인스턴스들, 프로토콜들, 구조들 및 기술들은 설명을 모호하게하지 않기 위해 상세하게 기재되지 않는다.
예시적인 일례들
도 1은 멀티 호스트 대 단일 포트 호스트 분리를 위한 로직 및 프로그램 코드를 구비한 NVM 스위치를 포함하는 예시적인 시스템의 블록도를 도시한다. 예시적인 시스템(예를 들어, 서버 랙(server rack))은 백플레인 인터커넥트(backplane interconnect)(117)를 포함한다. 호스트(119) 및 호스트(121)를 포함하는 다수의 호스트가 백플레인 인터커넥트(117)에 연결된다. NVM 인클로저(102)가 또한, 백플레인 인터커넥트에 연결된다. 호스트들(119, 121) 및 NVM 인클로저(102)는 각각 PCIe 커넥터를 통해 백플레인 인터커넥트(117)에 연결된다.
NVM 인클로저(102)는 NVM 스위치(101), 단일 포트 NVM 디바이스(120), 또 다른 단일 포트 NVM 디바이스(122)를 포함할 수 있다. NVM 디바이스들은 솔리드 스테이드 디바이스들 다양한 구조를 가질 수 있다. 도 1에서, NVM 디바이스(120)는 NVM 컨트롤러(103), 어드레싱 로직(107) 및 플래시 메모리(109A-109D)를 갖는 것으로 도시되어 있다.
NVM 스위치(101)는 NVM 디바이스들(120, 122)을 사용하여 호스트들(119, 121)을 동시에 그리고 독립적으로 용이하게 한다. 호스트(119, 121)는 커맨드 큐 및 완료 큐를 그들의 로컬 메모리에 유지한다. 호스트(119, 121)는 NVM 스위치를 통해 메시지들 및 요청들(예를 들어, 도어벨 메시지)을 NVM 디바이스(120, 122)와 통신한다. NVM 컨트롤러(103)는 호스트(119, 121)로부터의 메시지에 응답하여 호스트(119, 121)의 커맨드 큐로부터 NVM 스위치(101)를 통해 커맨드를 검색한다. NVM 컨트롤러(103)는 NVM 스위치(101)를 통해 완료 패킷을 호스트(119, 121)의 완료 큐에 기록한다. NVM 디바이스들(120, 122) 각각은 단일 포트이므로, NVM 스위치(101)는 NVM 디바이스들(120, 122) 각각에 단일 요청자(single requestor)를 제시한다. NVM 스위치(101)는 패킷들을 호스트들(119, 121)에 적절히 라우팅하고, 연결된 호스트들 사이에서 에러들을 분리시키기 위한 로직을 포함한다.
도 2는 단일 포트 NVM 디바이스들과의 액티브-액티브 구성에서 호스트들을 분리시키는 NVM 스위치 로직의 예시적인 도면이다. NVM 스위치(200)는 인터커넥트 인터페이스(207) 및 비휘발성 메모리 디바이스 인터페이스(215)를 포함한다. 이들 인터페이스들은 동일할 수도 있지만, 서로 상이할 수도 있다. 예를 들어, 인터페이스(207)는 인터페이스(215)보다 훨씬 더 많은 레인들(lanes)을 갖는 PCIe 인터페이스일 수 있다. 이러한 예시적인 일례는 호스트들(스위치(200)의 관점에서 루트 컴플렉스들)이 인터커넥트 인터페이스(207)를 통해 링크되어 있으며 그리고 NVM 메모리 디바이스는 인터페이스(215)에 의해 스위치(200)에 연결된다고 가정한다. 스위치(200)는 스위치 구성 및 관리 로직(203), 트랜잭션 관리 로직(201) 및 직접 데이터경로 로직(direct datapath logic)(205)을 포함한다. "로직"이라는 용어는 작업 또는 기능을 달성하기 위한 회로들의 구성을 지칭한다. 예를 들어, 값들이 일치하는지 여부를 결정하는 로직은, 등가 비교를 위해 배타적 NOR 게이트 및 AND 게이트를 사용하는 회로 구성일 수 있다. 구성 및 관리 로직(203)은 관리 및 구성 커맨드를 부착된 NVM 디바이스로 보낸다. 직접 데이터경로 로직(205)은 읽기 완료를 위한 기입들(writes)이 거의 지연없이 스위치(200)를 통과하게 한다. 트랜잭션 관리 로직(201)은 호스트들이 서로 영향을 미치는 것을 방지한다. 이것은 이벤트들이 발생한 호스트("에러 호스트")의 트랜잭션에 대해서 성능에 영향을 미치는 이벤트들을 분리시키는 것, 호스트별 에러 보고 설정들에 따라 에러 보고를 전파하는 것, 그리고 직접 데이터경로 로직(205)에서 에러들을 모니터링하는 것을 적어도 포함한다.
트랜잭션 관리 로직(201)은 하나의 호스트로부터의 이벤트가 다른 호스트의 트랜잭션에 영향을 미치는 것을 방지하기 위한 기능을 용이하게하는 레지스터들 및 로직을 포함한다. 트랜잭션 관리 로직은 큐(202), 타이밍 소스(231), 호스트 식별자 로직(209), 예약 로직(211), 에러 분리 로직(213), 큐(204) 및 큐(206)를 포함한다. 상기 큐들(202, 204, 206)는 32 비트 레지스터, 64 비트 레지스터, 또는 스위치(200)를 위해 이용가능한 물리적 공간에 적합한 다른 유형의 메모리 요소일 수 있다. 큐(202)는 호스트들로부터 인커밍(incoming) 패킷들을 저장한다. 인커밍 패킷들의 일례는 도어벨 메시지, 호스트 메모리에서 가져온 커맨드들 및 완료 응답이 있다. 스위치(200)가 다수의 호스트들을 수용하기 때문에, 예약 로직(211)은 호스트들이 서로 겹쳐쓰기하는 것을 방지하도록, 부착된 메모리 또는 백엔드 디바이스들의 서로 다른 영역들을 호스트에 예약한다. 호스트가 스위치(200)를 통해 백엔드 디바이스와 연결을 설정하면, 예약 로직(211)은 예약된 메모리 공간과 각 호스트에 대한 매핑을 생성 및 유지한다. 예약 로직(211)은 이용가능한 개인 네임스페이스 기능을 이용하여 예약을 구현할 수 있다. 스위치(200)의 다른 책임은 백엔드 디바이스가 단일 포트이므로 백엔드 디바이스에 단일 호스트를 제공하는 것이다. 이것은 스위치(200)의 다른 한편에 다수의 호스트들이 있음을 백엔드 디바이스에게 은폐한다. 호스트 식별자 로직(209) 및 큐들(204, 206)은 백엔드 디바이스들에게 단일 호스트가 제공됨에도 불구하고 백엔드 디바이스들과 호스트들 간의 통신의 일관성(coherency)을 보장하도록 동작한다. 호스트 식별자 로직(209)은 제 1 호스트 식별자를 큐(204)와 연관시키고 제 2 호스트 식별자를 큐(206)와 연관시킨다. 구현예들은 NVM 스위치를 통해 백엔드 디바이스들에 연결되는 호스트들의 수에 따라 추가적인 큐들을 부가할 수도 있다. 호스트 식별자 로직(209)은 인커밍 판독 타입 패킷의 헤더로부터의 서브필드 값들을, 검출된 호스트 식별자(예를 들어, 요청자 식별자 또는 노드 식별자)에 대응하는 큐들(204, 206) 중 하나로 복사한다. 복사된 값들은 호스트들 중 어느 것이 올바른 요청자인지를 판별하는데 사용될 것이다. 예약된 공간으로, 호스트 식별자 로직(209)은 길이, 주소, 및 순서 태그 필드를 복사하여, 판독 유형 패킷에 응답하여 리턴된 데이터를 기입하는 추후의 판독 완료 패킷과 매칭시킨다. 이후, 호스트 식별자 로직(209)은 인커밍 패킷이 백엔드 디바이스로 향하는 것을 허용하기 전에 백엔드 디바이스의 예상 호스트 식별자(예를 들어, 루트 컴플렉스 0)에 순응하도록 인커밍 패킷의 호스트 식별자를 리셋한다.
백엔드 디바이스가 판독 완료 패킷을 리턴하면, 백엔드 디바이스는, 상기 요청자에게 스위치(200)를 통해 완성된 패킷을 기입한다. 판독 완료 패킷은 스위치(200)에 의해 리셋된 바와 같은 호스트 식별자를 가질 것이다. 백엔드 디바이스가 직접 데이터경로 로직(205)의 완료 기입 큐(221)에 완료 패킷을 기입하면, 호스트 식별자(209)는 큐(204, 206) 중 어느 것이 적어도 저장된 필드들(예를 들어, 길이, 순서 태그, 주소)와 매칭되는 엔트리를 갖는지를 결정한다.
상기 스위치에서 호스트/요청자의 보존에 의해, 에러 분리 로직(213)은 호스트 이벤트들이 서로 영향을 미치는 것을 방지할 수 있다. 에러 분리 로직(213)은 호스트들 중 하나와의 문제 이벤트를 검출하는 것에 기초하여 큐(202)로부터 적절한 패킷이 소거되도록 할 수 있다. 또한, 에러 분리 로직(213)은 실패한 또는 연결해제된 호스트에 대응하는 완료 패킷들을 직접 데이터경로 로직(205)으로부터 소거할 수 있다. 또한, 에러 분리 로직(213)은 어댑터들 중 하나에 대한 기준 클록(clock reference)의 손실을 검출함에 응답하여 내부 타이밍 소스(231)를 사용하도록 NVM 스위치(200)를 천이할 수 있다. 스위치(200)는 기준 클록이 손실된 어댑터로부터의 패킷의 처리 및 통신을 위해 타이밍 소스(231)로 천이한다.
비록 도 2는 개별 로직 블록들을 도시하고 있지만, 별개의 블록들은 반드시 마이크로칩들의 물리적 경계들인 것은 아니다. 예를 들어, NVM 스위치는 다수의 도시된 로직 블록들의 논리적 일부인 프로세서를 포함할 수 있다.
도 3 내지 도 8의 흐름도는 호스트 분리를 보존하기 위해 에러 조건을 핸들링하는 것과 관련된 예시적인 동작을 도시한다. 설명은 스위치가 예시적인 동작들을 수행하는 것으로 참조한다. 스위치는 NVM 스위치에 저장된 프로그램 명령(예를 들어, 펌웨어)에 따라 적어도 일부 동작을 수행한다.
도 3은 호스트 응답에서 검출된 에러 완료 상태를 분리시키기 위한 예시적인 동작들의 흐름도이다. 백엔드 디바이스가 호스트 메모리로부터 판독 데이터을 요청한 이후, 호스트는 백엔드 디바이스에 판독 완료 데이터가 포함된 패킷을 제공한다. 상기 패킷은 에러를 나타낼 수도 있는 완료 상태에 대한 필드를 포함한다. NVM 스위치는 완료 데이터를 백엔드 디바이스로 통신하기 전에 패킷을 판독한다.
블록(301)에서, 스위치는 백엔드 디바이스로부터의 판독에 대한 호스트 응답의 완료 상태에서 에러 코드를 검출한다. 에러 코드는 완료 기반 에러(completion based error), 포이즌 페이로드 통지(poisoned payload notification) 및 내부 패리티 에러 또는 에러 수정 코드 에러를 나타낼 수 있다. 스위치는 완료 상태에 대응하는 위치에서의 비트를 미리정의된 에러코드와 비교하거나 또는 완료 상태 테이블에서 완료 상태 값을 조회할 수 있다.
블록(303)에서, 스위치는 완료 상태가 완료 기반 에러를 나타내는지 여부를 판별한다. 완료 기반 에러의 일례들은 컴플리터 어보트(completer abort: CA), 미지원 요청(unsupported request: UR) 및 완료 타임아웃(completion timeout)이 있다.
완료 상태 필드 내의 에러 코드가 완료 기반(completion based)인 경우, 스위치는 블록 305에서 호스트 응답의 완료 상태를 수정한다. 스위치는 호스트 응답에서 식별된 백엔드 디바이스로 호스트 응답이 전송되는 것을 허용하기 전에, 컴플리터 어보트를 이용한 완료(completion with completer abort (CA))를 나타내도록 완료 상태 내의 에러 코드를 변경한다.
블록(307)에서, 스위치는 완료 상태 필드가 포이즌 페이로드를 나타내는지의 여부를 판별한다. 완료 상태 필드가 포이즌 페이로드를 나타내는 경우, 콘트롤은 블록 311로 진행한다. 블록 311에서, 스위치는 포이즌 페이로드 표시(poisoned payload indication)와 함께 호스트 응답을 백엔드 디바이스에 전달한다. 그렇지 않으면, 콘트롤은 블록 309로 진행된다.
만일, 완료 상태가 호스트에서 검출된 내부 패리티 에러나 ECC 에러를 나타낸다면, 블럭(309)에서, 스위치는 오염된 데이터를 폐기하고 그리고 스위치의 데이터경로 데이터 무결성 에러 모드를 트리거링한다. 이 모드에서는, 백엔드 디바이스에서 특정 호스트로의 모든 요청들은 드롭될 것이며 그리고 판독 요청들이 에러와 함께 완료될 것이다. 예를 들어, 스위치는 백엔드 디바이스의 포트와 관련된 레지스터에 값을 설정할 수 있다. 스위치가 백엔드 디바이스들로부터 요청을 수신하면, 스위치는 해당 호스트 식별자를 결정한다. 만일, 호스트 식별자가 백엔드 디바이스의 포트와 관련된 값과 결정된 호스트와 매치하면 요청이 삭제될 것이다.
도 4는 스위치에 의해 검출된 호스트 데이터 에러를 분리시키는 NVM 스위치의 동작 일례들을 나타내는 흐름도이다. NVM 트랜잭션들의 경로에 지연을 삽입하는 것을 회피하면서도 스위치는 데이터 무결성도 지원한다. 만일, 데이터 무결성 에러 모드가 활성화되면, 스위치는 판독 패킷들의 데이터 패리티 및 스위치를 통과하는 판독 완료 패킷을 평가한다.
블록(401)에서, 스위치는 호스트 응답의 완료 데이터 내의 데이터 패리티 에러를 검출한다. 이러한 검출은 데이터 링크 계층 컴포넌트에 의해 설정된 비트를 검출할 수 있다.
블록(403)에서, 스위치는 완료 상태 필드 내의 포이즌 페이로드를 나타내도록 판독 패킷 호스트 응답을 수정한다. 스위치는 저장된 포이즌 페이로드 코드를 사용하여이 패리티 에러 검출을 전파할 수 있다.
블록 405에서, 스위치는 수정된 호스트 응답을 백엔드 디바이스로 통신한다.
도 5는 기입(write) 트랜잭션에서 검출된 데이터 에러를 분리하기 위한 NVM 스위치에 대한 예시적인 동작의 흐름도이다. NVM 스위치의 직접 데이터경로 로직은 백엔드 디바이스로부터의 기입 트랜잭션의 데이터에서 패리티 또는 ECC 에러를 체크하도록 설정될 수 있다.
블록(501)에서, 스위치는 백엔드 디바이스로부터 기입 데이터의 패리티 에러 또는 정정불가 ECC 에러(uncorrectable ECC error)를 검출한다. 스위치는 데이터 링크 계층 비트를 검사하여, 내부 패리티 에러 또는 정정불가 ECC 에러를 검출할 수 있다.
블록(503)에서, 스위치는 기입 데이터를 파기한다. 기입 데이터를 파기하는 것은, 백엔드 디바이스에 의해 발행된 전체 기입 트랜잭션을 파기하는 것이다.
블록(505)에서, 스위치는 데이터경로 데이터 무결성 에러 모드를 트리거링한다. 이 모드에서는 백엔드 디바이스로부터 특정 호스트로의 모든 요청들이 드롭될 것이며 그리고 판독 요청들은 에러와 함께 완료될 것이다.
도 6은 다수의 호스트들 중 하나로부터의 링크 다운 이벤트를 분리하기 위한 NVM 스위치에 대한 예시적인 동작들의 흐름도이다. 블록 601에서, 스위치는, 이전에 스위치에 링크되었던 호스트에 대한 링크 다운을 검출한다. 데이터 링크 계층 컴포넌트들 또는 PCIe 코어의 컴포넌트들은 링크 다운을 검출한다. 링크 다운 표시는 대응 호스트의 식별자를 포함한다. 블록(603)에서, 스위치는 링크 다운 호스트를 타겟으로 하는 스위치에 부착된 NVM 디바이스로부터 모든 인플라이트 트랜잭션들의 트랜잭션 플러시를 트리거링한다. 블록 604에서, 스위치는 링크 다운 포트로의 트래픽을 작업거부(quiesce)한다. 링크 다운 포트로의 트래픽을 작업거부하기 위해, 스위치는 NVM 디바이스들에서 펜딩중인 호스트와 관련된 모든 아웃스탠딩(outstanding) 커맨드에 대해 어보트들(aborts)을 발행한다. 블록(605)에서, 스위치는 다운 링크된 호스트에 대응하는 컴포넌트들의 리셋을 개시한다. 블록 607에서, 스위치는 호스트와의 링크를 재-확립하거나 또는 재-확립하려고 시도한다.
도 7은 다수의 연결된 호스트들 중 하나로부터 리셋을 분리하기 위한 NVM 스위치에 대한 예시적인 동작들의 순서도이다. 스위치는 링크 당 리셋 이벤트들을 처리한다. 리셋 이벤트는 웜 리셋(warm reset)(PERST), 핫 리셋(hot reset), 디스에이블 링크(disable link) 및 기능 레벨 리셋(function level reset: FLR)일 수 있다. 블록(701)에서, 스위치는 하위 계층 프로토콜들(예를 들어, 데이터 링크 계층, 물리 계층)을 구현하는, 호스트로부터 엔드포인트(EP) 코어로의 리셋 커맨드를 검출한다. 스위치는 리셋을 검출하는바 왜냐하면, 리셋 신호 또는 커맨드는 스위치에 대한 인터럽트를 생성하기 때문이다. 블록(703)에서, 스위치는 EP 코어를 통해 수신된 미발행 서브미션 큐 엔트리를 폐기한다. 블록(705)에서, 스위치는 EP 코어와 관련된 발행되었지만 완료되지 않은 커맨드들을 어보트(abort)한다. 스위치는 호스트로 향하는 기입 큐에서 대응하는 판독 완료가 없는 인-플라이트 판독 커맨드들을 결정한다. 다음으로, 스위치는, 이들 불완전한(incomplete) 트랜잭션들 각각에 대한 어보트 커맨드를 각각의 백엔드 디바이스로 전송한다. 블록(707)에서, 스위치는 EP 코어에 대한 트랜잭션 플러시를 트리거링한다. 스위치는 신호들을 어써트하여, EP 코어로 하여금 EP 코어를 트래버싱하는 패킷들을 소거하게 한다. 블록(709)에서, 스위치는 리셋되는 EP 코어와 관련된 큐들을 삭제한다. 블록(711)에서, 스위치는 EP 코어의 리셋을 개시한다.
도 8은 호스트들에 대한 에러 보고를 전파하는 NVM 스위치의 예시적인 동작들의 순서도이다. 에러 보고 세팅들은 백엔드 디바이스들의 레지스터들에 설정된 기본 에러 보고 및 고급 에러 보고(advanced error reporting: AER) 설정들을 포함한다. 블록(801)에서, 스위치는 계산 및 구성(enumeration and configuration) 동작들 동안 호스트들로부터 에러 보고 설정들을 검출한다. 블록(803)에서, 스위치는 에러 보고 설정들이 호스트마다 상이한지를 결정한다. 에러 보고 설정들이 호스트들 사이에서 동일하면, 스위치는 블록 804에서 에러 보고 설정들의 하나의 인스턴스를, 연결된 백엔드 디바이스들과 통신한다. 에러 보고 설정이 서로 다르면, 스위치는 블록 805에서 호스트 당 에러 보고 설정들의 인스턴스들을 저장한다. 스위치는 해당 호스트 식별자를 에러 보고 설정들의 각각의 인스턴스에 연관시킨다. 이것은 백엔드 디바이스들의 에러 보고를 통해 호스트 별 준수를 보장하는데 사용될 것이다. 블록 807에서, 스위치는 더 많은 설정을 구비한 호스트 제공 에러 보고 설정들의 인스턴스를 연결된 백엔드 디바이스에 통신한다.
나중의 어느 시점에서, 스위치는 블록(809)에서 백엔드 디바이스로부터 에러 보고를 검출할 수 있다. 블록(810)에서, 스위치는 에러 보고가 준수하지 않는 저장된 에러 보고 설정 인스턴스가 있는지를 결정한다. 예를 들어, 에러 보고 설정들의 저장된 인스턴스는 에러 보고는 완료 상태에 의해야만하는 반면에 검출된 에러 보고는 에러 메시지에 의한 것임을 나타낼 수 있다. 블록(813)에서, 스위치는 모든 호스트에게 에러 보고를 통신하는데 왜냐하면 에러 보고는 에러 보고 설정들의 인스턴스들을 따르기 때문이다. 만일, 에러 보고 설정들의 하나의 인스턴스에 대해 부적합(non-conformance)이 검출되면, 스위치는 에러 보고가 블록 811에서 순응하는 에러 보고 설정들의 인스턴스와 관련된 호스트로 에러 보고를 전달한다. 블록 815에서, 스위치는 에러 보고 설정들의 다른 인스턴스에 대한 에러 보고를 유도하고 전달한다. 스위치는 검출된 에러 보고로부터 정보를 추출하고 그리고 에러 보고 설정들의 인스턴스에 따라 그 정보로 에러 보고를 생성한다.
흐름도는 설명의 이해를 돕기 위해 제공되며, 청구항들의 범위를 제한하고자 의도된 것이 아니다. 흐름도는 청구항들의 범위 내에서 변할 수 있는 예시적인 동작들을 도시한다. 추가적인 동작들이 수행될 수 있는바, 더 적은 동작들이 수행될 수도 있으며, 동작들이 병렬로 수행될 수 있으며, 동작들은 상이한 순서대로 수행될 수 있다. 다음을 유의해야 하는바, 예시적인 순서도 및/또는 블록도의 각각의 블록 및 예시적인 순서도 및/또는 블록도의 각각의 블록들의 조합은 프로그램 코드로 구현될 수 있다. 프로그램 코드는 범용 컴퓨터, 특수 목적 컴퓨터, 또는 다른 프로그램가능한 머신 또는 장치의 프로세서에 제공될 수 있다.
이해할 수 있는 바와 같이, 본 개시의 양상들은 시스템, 방법 또는 하나 이상의 머신 판독가능 매체에 저장된 프로그램 코드/명령들로서 구현될 수 있다. 따라서, 양상들은 하드웨어, 소프트웨어(펌웨어, 상주 소프트웨어, 마이크로 코드 등을 포함함), 또는 본 명세서에서 모두 일반적으로 "회로", "모듈", "시스템" 으로 지칭될 수 있는 소프트웨어 및 하드웨어 양태의 조합의 형태를 취할 수 있다. 예시적인 일례들에서 개별 모듈/유닛으로 제시되는 기능은 플랫폼(운영 체제 및/또는 하드웨어), 어플리케이션 에코시스템, 인터페이스, 프로그래머 기본 설정, 프로그래밍 언어, 관리자 선호 사항 등에 따라 다르게 구성될 수 있다.
하나 이상의 머신 판독가능 매체(들)의 임의의 조합이 또한 사용될 수 있다. 머신 판독가능 매체는 머신 판독가능 신호 매체 또는 머신 판독가능 저장 매체일 수 있다. 머신 판독가능 저장 매체는, 예를 들어, 프로그램 코드를 저장하기 위해 전자, 자기, 광학, 전자기, 적외선 또는 반도체 기술 중 임의의 하나 또는 조합을 사용하는 시스템, 장치 또는 디바이스일 수 있지만, 이에 제한되지는 않는다. 머신 판독가능 저장 매체의 보다 구체적인 일례(비제한적인 목록)는 다음을 포함할 것이다: 휴대용 컴퓨터 디스켓, 하드 디스크, 랜덤 액세스 메모리(RAM), 판독 전용 메모리(ROM), 소거 및 프로그램가능 판독 전용 메모리(EPROM 또는 플래시 메모리), 휴대용 컴팩트 디스크 판독 전용 메모리(CD-ROM), 광학 저장 디바이스, 자기 저장 디바이스, 또는 전술한 것들의 임의의 적절한 조합. 본 문서의 맥락에서, 머신 판독가능 저장 매체는 명령 실행 시스템, 장치 또는 디바이스에 의해 또는 이와 관련하여 사용하기 위한 프로그램을 포함하거나 저장할 수 있는 임의의 유형 매체일 수 있다. 머신 판독가능 저장 매체는 머신 판독가능 신호 매체가 아니다.
머신 판독가능 신호 매체는 기저 대역 또는 반송파의 일부로서 예를 들면 내부에 구현된 컴퓨터 판독가능 프로그램 코드와 함께 전달된 데이터 신호를 포함할 수 있다. 이러한 전파된 신호는 전자기, 광학 또는 이들의 임의의 적절한 조합을 포함하지만 이에 제한되지 않는 임의의 다양한 형태를 취할 수 있다. 머신 판독가능 신호 매체는 머신 판독가능 저장 매체가 아니며 명령 실행 시스템, 장치 또는 디바이스에 의해 또는 이와 관련하여 사용하기 위한 프로그램을 통신, 전파 또는 수송할 수 있는 임의의 머신 판독가능 매체일 수 있다.
프로그램 코드/명령들은 또한 머신 판독가능 매체에 저장될 수 있으며, 머신 판독가능 매체는 머신으로 하여금 특정 방식으로 기능하게 할 수 있는바 따라서 머신 판독가능 매체에 저장된 명령들은 플로우 차트 및/또는 블록 다이어그램 블록 또는 블록들에 지정된 기능/행동을 구현하는 명령을 포함하여 제조 아티클을 생성할 수 있다.
본원에서 하나의 인스턴스로서 기술된 컴포넌트들, 동작들, 또는 구조들에 대하여 복수의 인스턴스들이 제공될 수 있다. 마지막으로, 다양한 컴포넌트들, 동작들 및 데이터 저장소들 사이의 경계는 다소 임의적이며, 특정한 예시적인 구성의 맥락에서 특정 동작들이 예시된다. 기능의 다른 할당이 예상되며 본 개시의 범위 내에 속할 수 있다. 일반적으로, 예시적인 구성에서 개별 구성 요소로서 제시된 구조 및 기능은 결합된 구조 또는 구성 요소로서 구현될 수 있다. 유사하게, 단일 컴포넌트로서 제시된 구조 및 기능은 별도의 컴포넌트로서 구현될 수 있다. 이들 및 다른 변형, 수정, 추가 및 개선은 본 개시의 범위 내에 속할 수 있다.
용어들
본 명세서에서 사용된 "또는" 이라는 용어는, 달리 명시적으로 언급하지 않는한 포괄적이다. 따라서, 문구 "A, B 또는 C 중 적어도 하나"는 임의의 요소의 배수를 포함하여 집합 {A, B, C}로부터의 임의의 요소들 또는 이들의 임의의 조합에 의해 충족된다.

Claims (20)

  1. 비휘발성 메모리 스위치로서,
    복수의 인터커넥트 인터페이스들;
    프로세서;
    복수의 큐들;
    상기 프로세서에 의해 실행가능한 프로그램 코드가 저장된 머신 판독가능한 매체를 포함하고, 상기 프로그램 코드는 상기 비휘발성 메모리 스위치로 하여금,
    상기 복수의 인터커넥트 인터페이스들 중 적어도 제 2 인터커넥트 인터페이스를 통해 액세스가능한 하나 이상의 단일 포트 비휘발성 메모리 디바이스들의 세트의 상이한 메모리 공간들에 상이한 루트 컴플렉스들을 예약하고;
    상기 상이한 루트 컴플렉스들을 비휘발성 메모리 디바이스들에 단일 루트 컴플렉스로서 제공하고;
    상기 복수의 큐들의 적어도 하나의 서브세트를 이용하여, 상기 상이한 루트 컴플렉스들 중 해당 루트 컴플렉스들과의 메모리 트랜잭션들의 연관성을 유지하고; 그리고
    상기 상이한 루트 컴플렉스들 중 하나의 에러 상태(error condition)가 상기 상이한 루트 컴플렉스들 중 다른 하나의 메모리 트랜잭션에 영향을 미치는 것을 상기 유지된 연관성에 적어도 일부 기초하여, 방지하게 하는 것을 특징으로 하는 비휘발성 메모리 스위치.
  2. 제1항에 있어서,
    상기 메모리 트랜잭션들의 연관성을 유지하는 프로그램 코드는, 상기 프로세서에 의해 실행가능하며 상기 비휘발성 메모리 스위치로 하여금,
    상기 복수의 큐들 중 제 1 큐를 상기 루트 컴플렉스들 중 제 1 루트 컴플렉스와 연관시키고, 상기 복수의 큐들 중 제 2 큐를 상기 루트 컴플렉스들 중 제 2 루트 컴플렉스와 연관시키며;
    상기 제 1 루트 컴플렉스를 요청자로서 식별하는 메모리 트랜잭션들의 각각의 판독 패킷에 대하여, 상기 판독 패킷의 헤더로부터의 정보를 대응하는 판독 완료 데이터를 식별하는데 사용될 수 있는 상기 제 1 큐에 저장하고; 그리고
    상기 제 2 루트 컴플렉스를 요청자로서 식별하는 메모리 트랜잭션들의 각각의 판독 패킷에 대하여, 상기 판독 패킷의 헤더로부터의 정보를 상기 제 2 큐에 저장하게 하는 프로그램 코드를 포함하는 것을 특징으로 하는 비휘발성 메모리 스위치.
  3. 제2항에 있어서,
    상기 상이한 루트 컴플렉스들 중 하나의 에러 상태가 상기 상이한 루트 컴플렉스들 중 다른 하나의 메모리 트랜잭션에 영향을 미치는 것을 방지하는 프로그램 코드는,
    상기 제 1 및 제 2 루트 컴플렉스들 중 하나로부터 에러 상태를 검출함에 기초하여, 상기 에러 상태의 루트 컴플렉스와 관련된 상기 비휘발성 메모리 스위치 내의 판독 완료 패킷들을 선택하고; 그리고
    상기 비휘발성 메모리 스위치로부터 상기 선택된 판독 완료 패킷들을 소거하게(clear) 하는 프로그램 코드를 포함하는 것을 특징으로 하는 비휘발성 메모리 스위치.
  4. 제1항에 있어서,
    상기 상이한 루트 컴플렉스들 중 하나의 에러 상태가 상기 상이한 루트 컴플렉스들 중 다른 하나의 메모리 트랜잭션에 영향을 미치는 것을 방지하는 프로그램 코드는, 상기 프로세서에 의해 실행가능하며 상기 비휘발성 메모리 스위치로 하여금,
    상기 비휘발성 메모리 디바이스들의 세트 중 하나로부터의 판독 요청에 대한 루트 컴플렉스 응답이 완료 기반 에러(completion based error)를 나타낸다라고 판별함에 기초하여, 컴플리터 어보트 상태를 이용한 완료(completion with a completer abort status)를 나타내도록 상기 루트 컴플렉스 응답의 완료 상태를 설정하고, 상기 루트 컴플렉스 응답은 상기 복수의 인터커넥트 인터페이스들 중 제 1 인터커넥트 인터페이스를 통해 수신된 것이며; 그리고
    상기 설정된 완료 상태를 갖는 루트 컴플렉스 응답을 제 2 인터커넥트 인터페이스를 통해 상기 비휘발성 메모리 디바이스들의 세트 중 상기 하나에 통신하게 하는 프로그램 코드를 포함하는 것을 특징으로 하는 비휘발성 메모리 스위치.
  5. 제1항에 있어서,
    상기 상이한 루트 컴플렉스들 중 하나의 에러 상태가 상기 상이한 루트 컴플렉스들 중 다른 하나의 메모리 트랜잭션에 영향을 미치는 것을 방지하는 프로그램 코드는, 상기 프로세서에 의해 실행가능하며 상기 비휘발성 메모리 스위치로 하여금,
    상기 비휘발성 메모리 디바이스들의 세트 중 하나에 대한 루트 컴플렉스 응답의 완료 데이터에서 데이터 패리티 에러를 검출함에 기초하여, 포이즌 페이로드(poisoned payload)를 나타내도록 상기 루트 컴플렉스 응답을 수정하고, 상기 루트 컴플렉스 응답은 상기 복수의 인터커넥트 인터페이스들 중 제 1 인터커넥트 인터페이스를 통해 수신된 것이며; 그리고
    상기 수정된 루트 컴플렉스 응답을 제 2 인터커넥트 인터페이스를 통해 상기 비휘발성 메모리 디바이스들의 세트 중 상기 하나에 통신하게 하는 프로그램 코드를 포함하는 것을 특징으로 하는 비휘발성 메모리 스위치.
  6. 제1항에 있어서,
    상기 상이한 루트 컴플렉스들 중 하나의 에러 상태가 상기 상이한 루트 컴플렉스들 중 다른 하나의 메모리 트랜잭션에 영향을 미치는 것을 방지하는 프로그램 코드는, 상기 프로세서에 의해 실행가능하며 상기 비휘발성 메모리 스위치로 하여금,
    상기 루트 컴플렉스들 중 제 1 루트 컴플렉스에 대응하는 링크 다운 이벤트를 검출함에 기초하여, 상기 링크 다운 이벤트에 대응하는 링크를 타겟으로 하는 비휘발성 메모리 디바이스들의 세트로부터의 상기 비휘발성 메모리 스위치 상의 인플라이트 트랜잭션들의 플러시(flush)를 트리거링하고;
    상기 비휘발성 메모리 디바이스들의 세트로 발행되었지만 완료되지 않은 상기 비휘발성 메모리 스위치 상의 각각의 커맨드에 대한 어보트 커맨드를 통신하고;
    상기 제 1 루트 컴플렉스에 대응하는 상기 비휘발성 메모리 스위치의 링크 컴포넌트들을 리셋하고; 그리고
    상기 제 1 루트 컴플렉스와의 링크를 재-확립하게 하는 프로그램 코드를 포함하는 것을 특징으로 하는 비휘발성 메모리 스위치.
  7. 제1항에 있어서,
    상기 상이한 루트 컴플렉스들 중 하나의 에러 상태가 상기 상이한 루트 컴플렉스들 중 다른 하나의 메모리 트랜잭션에 영향을 미치는 것을 방지하는 프로그램 코드는, 상기 프로세서에 의해 실행가능하며 상기 비휘발성 메모리 스위치로 하여금,
    제 1 루트 컴플렉스로부터 제 1 엔드포인트 코어로의 리셋 커맨드를 검출함에 기초하여,
    상기 비휘발성 메모리 스위치로부터 아직 발행되지 않은 상기 제 1 루트 콤플렉스로부터 페치된 상기 비휘발성 메모리 스위치 상의 커맨드들을 폐기하고(discard);
    상기 비휘발성 메모리 디바이스들의 세트로 발행되었지만 완료되지 않은 상기 비휘발성 메모리 스위치 상의 각각의 커맨드에 대한 어보트 커맨드를 통신하고;
    상기 제 1 엔드포인트 코어에 대한 트랜잭션 플러시를 트리거링하고;
    상기 제 1 엔드포인트 코어의 커맨드 및 서브미션 큐들을 소거하고; 그리고
    상기 제 1 엔드포인트 코어의 리셋을 시작하게 하는 프로그램 코드를 포함하는 것을 특징으로 하는 비휘발성 메모리 스위치.
  8. 제1항에 있어서,
    상기 상이한 루트 컴플렉스들을 비휘발성 메모리 디바이스들에 단일 루트 컴플렉스로서 제공하는 프로그램 코드는, 상기 프로세서에 의해 실행가능하며 상기 비휘발성 메모리 스위치로 하여금, 판독 커맨드들의 요청 식별자들을 디폴트 요청 식별자로 수정하게 하는 프로그램 코드를 포함하는 것을 특징으로 하는 비휘발성 메모리 스위치.
  9. 제1항에 있어서,
    상기 복수의 인터커넥트 인터페이스들은, 주변 구성요소 인터커넥트 익스프레스(Peripheral Component Interconnect Express: PCIE) 인터페이스들을 포함하는 것을 특징으로 하는 비휘발성 메모리 스위치.
  10. 제1항에 있어서,
    상기 메모리 트랜잭션들은 비휘발성 메모리 익스프레스 사양(non-volatile memory express specification)을 준수하는 것을 특징으로 하는 비휘발성 메모리 스위치.
  11. 제1항에 있어서,
    내부 타이밍 소스를 더 포함하며,
    상기 상이한 루트 컴플렉스들 중 하나의 에러 상태가 상기 상이한 루트 컴플렉스들 중 다른 하나의 메모리 트랜잭션에 영향을 미치는 것을 방지하는 프로그램 코드는, 상기 프로세서에 의해 실행가능하며 상기 비휘발성 메모리 스위치로 하여금,
    제 1 루트 컴플렉스의 기준 클럭의 손실을 검출함에 기초하여 상기 내부 타이밍 소스를 기준 클럭으로 이용하도록 상기 제 1 루트 컴플렉스의 트랜잭션들의 프로세싱을 천이시키게 하는 프로그램 코드를 포함하는 것을 특징으로 하는 비휘발성 메모리 스위치.
  12. 비휘발성 메모리 인클로저(enclosure)로서,
    주변 구성요소 인터페이스 익스프레스(PCIe) 인터페이스;
    복수의 단일 포트 비휘발성 메모리(non-volatile memory: NVM) 디바이스들; 및
    상기 PCIe 인터페이스와 상기 복수의 단일 포트 NVM 디바이스들 사이에 접속된 NVM 스위치를 포함하고,
    상기 NVM 스위치는 프로세서 및 상기 프로세서에 의해 실행가능한 프로그램 코드가 저장된 머신 판독가능한 매체를 포함하고, 상기 프로그램 코드는 상기 NVM 스위치로 하여금,
    상기 복수의 단일 포트 NVM 디바이스들 상의 상이한 메모리 공간들에 상이한 루트 컴플렉스들을 예약하고; 그리고
    상기 상이한 루트 컴플렉스들 중 하나의 에러 상태가 상기 상이한 루트 컴플렉스들 중 다른 하나의 트랜잭션들에 영향을 미치는 것을 방지하게 하는 것을 특징으로 하는 비휘발성 메모리 인클로저.
  13. 제12항에 있어서,
    상기 프로그램 코드는, 상기 프로세서에 의해 실행되어 상기 NVM 스위치로 하여금, 상기 상이한 루트 컴플렉스들을 단일 루트 컴플렉스로서 상기 NVM 디바이스들에 제공하게 하는 프로그램 코드를 더 포함하는 것을 특징으로 하는 비휘발성 메모리 인클로저.
  14. 제12항에 있어서,
    상기 프로그램 코드는, 상기 프로세서에 의해 실행되어 상기 NVM 스위치로 하여금, 요청 식별자들 없이, 상기 상이한 루트 컴플렉스들 중 해당 루트 컴플렉스들과의 메모리 트랜잭션들의 연관성을 유지하게 하는 프로그램 코드를 더 포함하는 것을 특징으로 하는 비휘발성 메모리 인클로저.
  15. 제12항에 있어서,
    상기 상이한 루트 컴플렉스들 중 하나의 에러 상태가 상기 상이한 루트 컴플렉스들 중 다른 하나의 트랜잭션들에 영향을 미치는 것을 방지하는 프로그램 코드는,
    상기 루트 컴플렉스들 중 하나의 루트 컴플렉스로부터 에러 상태를 검출함에 기초하여, 상기 에러 상태의 루트 컴플렉스와 관련된 상기 NVM 스위치 내의 판독 완료 패킷들을 선택하고; 그리고
    상기 NVM 스위치로부터 상기 선택된 판독 완료 패킷들을 소거하게(clear) 하는 프로그램 코드를 포함하는 것을 특징으로 하는 비휘발성 메모리 인클로저.
  16. 제12항에 있어서,
    상기 상이한 루트 컴플렉스들 중 하나의 에러 상태가 상기 상이한 루트 컴플렉스들 중 다른 하나의 트랜잭션들에 영향을 미치는 것을 방지하는 프로그램 코드는, 상기 프로세서에 의해 실행되어 상기 NVM 스위치로 하여금,
    제 1 루트 컴플렉스로부터 제 1 엔드포인트 코어로의 리셋 커맨드를 검출함에 기초하여,
    상기 NVM 스위치로부터 아직 발행되지 않은 상기 제 1 루트 콤플렉스로부터 페치된 상기 NVM 스위치 상의 커맨드들을 폐기하고(discard);
    상기 복수의 NVM 디바이스들 중 적어도 하나로 발행되었지만 완료되지 않은 상기 NVM 스위치 상의 각각의 커맨드에 대한 어보트 커맨드를 통신하고;
    상기 제 1 엔드포인트 코어에 대한 트랜잭션 플러시를 트리거링하고;
    상기 제 1 엔드포인트 코어의 커맨드 및 서브미션 큐들을 소거하고; 그리고
    상기 제 1 엔드포인트 코어의 리셋을 시작하게 하는 프로그램 코드를 포함하는 것을 특징으로 하는 비휘발성 메모리 인클로저.
  17. 제12항에 있어서,
    상기 NVM 스위치는 내부 타이밍 소스를 더 포함하며,
    상기 상이한 루트 컴플렉스들 중 하나의 에러 상태가 상기 상이한 루트 컴플렉스들 중 다른 하나의 트랜잭션에 영향을 미치는 것을 방지하는 프로그램 코드는, 상기 프로세서에 의해 실행가능하며 상기 NVM 스위치로 하여금,
    제 1 루트 컴플렉스의 기준 클럭의 손실을 검출함에 기초하여 상기 내부 타이밍 소스를 기준 클럭으로 이용하도록 상기 제 1 루트 컴플렉스의 트랜잭션들의 프로세싱을 천이시키게 하는 프로그램 코드를 포함하는 것을 특징으로 하는 비휘발성 메모리 인클로저.
  18. 시스템으로서,
    백플레인 인터커넥트(backplane interconnect);
    복수의 호스트 디바이스들, 상기 호스트 디바이스들 각각은 루트 컴플렉스 및 인터커넥트 인터페이스를 포함하고, 상기 인터커넥트 인터페이스는 상기 호스트 디바이스들 중 해당 호스트 디바이스와 상기 백플레인 인터커넥트를 연결하며; 그리고
    비휘발성 메모리(NVM) 인클로저를 포함하되,
    상기 NVM 인클로저는
    복수의 단일 포트 NVM 디바이스들,
    상기 NVM 인클로저를 상기 백플레인 인터커넥트에 연결하는 인터커넥트 인터페이스, 및
    상기 복수의 단일 포트 NVM 디바이스들과 상기 NVM 인클로저의 인터커넥트 인터페이스 사이에 접속된 NVM 스위치를 포함하고,
    상기 NVM 스위치는
    프로세서 및 상기 프로세서에 의해 실행가능한 프로그램 코드가 저장된 머신 판독가능한 매체를 포함하고, 상기 프로그램 코드는 상기 NVM 스위치로 하여금, 상기 복수의 호스트 디바이스들 중 하나의 에러 상태가 상기 복수의 호스트 디바이스들 중 다른 하나의 트랜잭션들에 영향을 미치는 것을 방지하게 하는 것을 특징으로 하는 시스템.
  19. 제18항에 있어서,
    상기 복수의 호스트 디바이스들 중 하나의 에러 상태가 상기 복수의 호스트 디바이스들 중 다른 하나의 트랜잭션들에 영향을 미치는 것을 방지하는 프로그램 코드는,
    상기 복수의 호스트 디바이스들 중 하나의 호스트 디바이스로부터 에러 상태를 검출함에 기초하여, 상기 에러 상태의 호스트 디바이스와 관련된 상기 NVM 스위치 내의 판독 완료 패킷들을 선택하고; 그리고
    상기 NVM 스위치로부터 상기 선택된 판독 완료 패킷들을 소거하게(clear) 하는 프로그램 코드를 포함하는 것을 특징으로 하는 시스템.
  20. 제18항에 있어서,
    상기 NVM 스위치는 내부 타이밍 소스를 더 포함하고,
    상기 복수의 호스트 디바이스들 중 하나의 에러 상태가 상기 복수의 호스트 디바이스들 중 다른 하나의 트랜잭션들에 영향을 미치는 것을 방지하는 프로그램 코드는, 상기 프로세서에 의해 실행가능하며 상기 NVM 스위치로 하여금, 제 1 호스트 디바이스의 기준 클럭의 손실을 검출함에 기초하여 상기 내부 타이밍 소스를 기준 클럭으로 이용하도록 상기 제 1 호스트 디바이스의 트랜잭션들의 프로세싱을 천이시키게 하는 프로그램 코드를 포함하는 것을 특징으로 하는 시스템.
KR1020190096065A 2018-08-07 2019-08-07 호스트 분리를 구비한 비휘발성 메모리 스위치 KR20200016812A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201862715713P 2018-08-07 2018-08-07
US62/715,713 2018-08-07
US16/532,272 US11614986B2 (en) 2018-08-07 2019-08-05 Non-volatile memory switch with host isolation
US16/532,272 2019-08-05

Publications (1)

Publication Number Publication Date
KR20200016812A true KR20200016812A (ko) 2020-02-17

Family

ID=67587423

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190096065A KR20200016812A (ko) 2018-08-07 2019-08-07 호스트 분리를 구비한 비휘발성 메모리 스위치

Country Status (4)

Country Link
US (2) US11614986B2 (ko)
EP (2) EP4310659A3 (ko)
KR (1) KR20200016812A (ko)
CN (1) CN110825555A (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11216396B2 (en) * 2016-09-29 2022-01-04 Intel Corporation Persistent memory write semantics on PCIe with existing TLP definition
US11544000B2 (en) 2018-08-08 2023-01-03 Marvell Asia Pte Ltd. Managed switching between one or more hosts and solid state drives (SSDs) based on the NVMe protocol to provide host storage services
CN111930587B (zh) * 2020-06-24 2024-05-10 北京大米科技有限公司 告警消息处理方法、装置、存储介质及电子设备
US11789634B2 (en) 2020-07-28 2023-10-17 Samsung Electronics Co., Ltd. Systems and methods for processing copy commands
US11733918B2 (en) 2020-07-28 2023-08-22 Samsung Electronics Co., Ltd. Systems and methods for processing commands for storage devices
US11941298B2 (en) * 2021-05-11 2024-03-26 Mediatek Inc. Abort handling by host controller for storage device
US11860788B2 (en) * 2021-09-08 2024-01-02 Red Hat, Inc. Prefetching data in a distributed storage system
TWI802268B (zh) * 2022-02-14 2023-05-11 神雲科技股份有限公司 伺服系統

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6804766B1 (en) 1997-11-12 2004-10-12 Hewlett-Packard Development Company, L.P. Method for managing pages of a designated memory object according to selected memory management policies
US7412492B1 (en) 2001-09-12 2008-08-12 Vmware, Inc. Proportional share resource allocation with reduction of unproductive resource consumption
US7657663B2 (en) * 2006-12-19 2010-02-02 International Business Machines Corporation Migrating stateless virtual functions from one virtual plane to another
US8185664B1 (en) * 2009-06-17 2012-05-22 Qlogic, Corporation System and method to restore maximum payload size in a network adapter
US8868814B2 (en) 2009-07-06 2014-10-21 Nec Corporation I/O system, downstream PCI express bridge, interface sharing method, and program
EP2589208A1 (en) 2010-06-29 2013-05-08 Huawei Technologies Co., Ltd. Delegate gateways and proxy for target hosts in large layer 2 and address resolution with duplicated internet protocol addresses
US8601198B2 (en) * 2011-06-30 2013-12-03 Intel Corporation Controllable transaction synchronization for merging peripheral devices
CA2838836C (en) * 2012-10-27 2018-05-01 Huawei Technologies Co., Ltd. Method, device, system and storage medium for implementing packet transmission in pcie switching network
US8966164B1 (en) 2013-09-27 2015-02-24 Avalanche Technology, Inc. Storage processor managing NVME logically addressed solid state disk array
US9483431B2 (en) 2013-04-17 2016-11-01 Apeiron Data Systems Method and apparatus for accessing multiple storage devices from multiple hosts without use of remote direct memory access (RDMA)
US9298648B2 (en) * 2013-05-08 2016-03-29 Avago Technologies General Ip (Singapore) Pte Ltd Method and system for I/O flow management using RAID controller with DMA capabilitiy to directly send data to PCI-E devices connected to PCI-E switch
ES2656464T3 (es) * 2013-09-11 2018-02-27 Huawei Technologies Co., Ltd. Procedimiento, sistema informático y aparato de procesamiento de fallo
WO2015080690A1 (en) 2013-11-26 2015-06-04 Intel Corporation Method and apparatus for storing data
US9501441B2 (en) * 2013-12-16 2016-11-22 Dell Products, Lp Mechanism to boot multiple hosts from a shared PCIe device
EP3264280B1 (en) * 2013-12-31 2019-09-18 Huawei Technologies Co., Ltd. Method and apparatus for extending pcie domain
US20150261709A1 (en) * 2014-03-14 2015-09-17 Emilio Billi Peripheral component interconnect express (pcie) distributed non- transparent bridging designed for scalability,networking and io sharing enabling the creation of complex architectures.
US9842075B1 (en) * 2014-09-12 2017-12-12 Amazon Technologies, Inc. Presenting multiple endpoints from an enhanced PCI express endpoint device
US9547557B2 (en) * 2014-11-10 2017-01-17 Dell Products L.P. Peripheral bus error containment and recovery
US9749448B2 (en) * 2014-11-25 2017-08-29 Intel Corporation Header parity error handling
US9934173B1 (en) 2016-02-24 2018-04-03 Xilinx, Inc. Pseudo cut-through architecture between non-volatile memory storage and remote hosts over a fabric
US10769098B2 (en) 2016-04-04 2020-09-08 Marvell Asia Pte, Ltd. Methods and systems for accessing host memory through non-volatile memory over fabric bridging with direct target access
US10365706B2 (en) * 2017-03-03 2019-07-30 Qualcomm Incorporated Asymmetric power states on a communication link
US11086813B1 (en) * 2017-06-02 2021-08-10 Sanmina Corporation Modular non-volatile memory express storage appliance and method therefor
US10521273B2 (en) * 2017-06-08 2019-12-31 Cisco Technology, Inc. Physical partitioning of computing resources for server virtualization
US10496477B1 (en) * 2018-05-23 2019-12-03 Dell Products L.P. System and method of utilizing memory modules
US10636577B2 (en) * 2018-05-25 2020-04-28 Qualcomm Incorporated Safe handling of link errors in a peripheral component interconnect express (PCIE) device
US10977199B2 (en) 2018-08-08 2021-04-13 Marvell Asia Pte, Ltd. Modifying NVMe physical region page list pointers and data pointers to facilitate routing of PCIe memory requests
US11544000B2 (en) 2018-08-08 2023-01-03 Marvell Asia Pte Ltd. Managed switching between one or more hosts and solid state drives (SSDs) based on the NVMe protocol to provide host storage services

Also Published As

Publication number Publication date
EP4310659A3 (en) 2024-04-10
EP3608791B8 (en) 2023-12-20
US20200050505A1 (en) 2020-02-13
US11614986B2 (en) 2023-03-28
EP3608791B1 (en) 2023-11-01
US20230168957A1 (en) 2023-06-01
EP3608791A1 (en) 2020-02-12
CN110825555A (zh) 2020-02-21
EP4310659A2 (en) 2024-01-24

Similar Documents

Publication Publication Date Title
US11614986B2 (en) Non-volatile memory switch with host isolation
US7685476B2 (en) Early notification of error via software interrupt and shared memory write
US8285913B2 (en) Storage apparatus and interface expansion authentication method therefor
US8495265B2 (en) Avoiding non-posted request deadlocks in devices by holding the sending of requests
US6587962B1 (en) Write request protection upon failure in a multi-computer system
US6643727B1 (en) Isolation of I/O bus errors to a single partition in an LPAR environment
US8943226B1 (en) Interface for heterogeneous PCI-e storage devices
US7747809B2 (en) Managing PCI express devices during recovery operations
US8286027B2 (en) Input/output device including a mechanism for accelerated error handling in multiple processor and multi-function systems
US10027532B2 (en) Storage control apparatus and storage control method
US9143416B2 (en) Expander device
US10078543B2 (en) Correctable error filtering for input/output subsystem
US8644136B2 (en) Sideband error signaling
JP2006302287A (ja) 冗長i/oインターフェース管理
US20030110340A1 (en) Tracking deferred data transfers on a system-interconnect bus
US20050177760A1 (en) Computer system, bus controller, and bus fault handling method used in the same computer system and bus controller
US7536694B2 (en) Exception handling in a multiprocessor system
US7461299B2 (en) Monitoring writes to cache as part of system error handling
US8402320B2 (en) Input/output device including a mechanism for error handling in multiple processor and multi-function systems
US7437608B2 (en) Reassigning storage volumes from a failed processing system to a surviving processing system
US8589722B2 (en) Methods and structure for storing errors for error recovery in a hardware controller
US10042554B2 (en) Increased bandwidth of ordered stores in a non-uniform memory subsystem
US7568121B2 (en) Recovery from failure in data storage systems
US20040225748A1 (en) Systems and methods for deleting transactions from multiple fast data streams

Legal Events

Date Code Title Description
A201 Request for examination