KR20200041815A - FPGA+SSD 내부의 임베디드 PCIe 스위치로 이레이저 코드 데이터 보호 기능을 지원하는 시스템 - Google Patents

FPGA+SSD 내부의 임베디드 PCIe 스위치로 이레이저 코드 데이터 보호 기능을 지원하는 시스템 Download PDF

Info

Publication number
KR20200041815A
KR20200041815A KR1020190126503A KR20190126503A KR20200041815A KR 20200041815 A KR20200041815 A KR 20200041815A KR 1020190126503 A KR1020190126503 A KR 1020190126503A KR 20190126503 A KR20190126503 A KR 20190126503A KR 20200041815 A KR20200041815 A KR 20200041815A
Authority
KR
South Korea
Prior art keywords
erasure coding
data
coding logic
pcie switch
logic
Prior art date
Application number
KR1020190126503A
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
Priority claimed from US16/207,080 external-priority patent/US10635609B2/en
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Publication of KR20200041815A publication Critical patent/KR20200041815A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/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
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1678Details of memory controller using bus width
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0652Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
    • 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/0658Controller construction arrangements
    • 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/0683Plurality of storage devices
    • G06F3/0689Disk arrays, e.g. RAID, JBOD
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/154Error and erasure correction, e.g. by using the error and erasure locator or Forney polynomial
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Human Computer Interaction (AREA)
  • Pure & Applied Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Computer Hardware Design (AREA)
  • Algebra (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Lock And Its Accessories (AREA)
  • Preparation Of Compounds By Using Micro-Organisms (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

토폴로지가 공개된다. 이 토폴로지는 NVMe(Non-Volatile Memory Express) SSD(Solid-State Drive), 데이터 가속, 데이터 중복 제거, 데이터 무결성, 데이터 암호화 및 데이터 압축과 같이 NVMe SSD를 지원하는 하나 또는 그 이상의 기능들을 구현하는 FPGA(Field Programmable Gate Array) 및 PCIe(Peripheral Component Interconnect Express) 스위치를 포함할 수 있다. PCIe 스위치는 FPGA 및 NVMe SSD와 통신 할 수 있다.

Description

FPGA+SSD 내부의 임베디드 PCIe 스위치로 이레이저 코드 데이터 보호 기능을 지원하는 시스템{SYSTEM FOR SUPPORTING ERASURE CODE DATA PROTECTION WITH EMBEDDED PCIE SWITCH INSIDE FPGA+SSD}
본 발명은 컴퓨터 시스템에 관한 것으로, 좀 더 상세하게는 PCIe 스위치들 내의 이레이저 코딩에 관한 것이다.
현재, RAID(Redundant Array of Independent Disks) 보호 기능이 있는 대부분의 SSD들(Solid State Drives) 기반 NVMe(Non-Volatile Memory Express)는 외부 PCIe(Peripheral Component Interconnect Express) AIC들(Add-In-Cards)을 통해 수행된다. 호스트 CPU와 AIC RAID 컨트롤러 사이의 버스 대역폭을 최적화하기 위해, 버스들은 일반적으로 X16 PCIe 레인들을 지원한다. 하지만, PCIe 카드들의 표준 형태 인자(form factor)의 물리적인 한계들로 인해, 현재 NVMe SSD들에 대해 선호되는 커넥터인 소수의 U.2 커넥터들만이 각 AIC RAID 컨트롤러에 의해 지원된다: 보통, 정확히 2개 또는 4개의 U.2 커넥터들.
2U 섀시(chassis) 안에 24개까지의 NVMe SSD들을 지원하기 위해서는, 6개의 AIC RAID 컨트롤러들이 필요하므로 6개의 상이한 RAID 도메인들이 요구된다. 이 구성은 6개의 RAID 도메인들을 관리하기 위한 비용과 복잡성을 부가한다. 또한, 각 AIC RAID 컨트롤러의 비용은 현재 약 400달러이다. 따라서, NVMe SSD들의 비용을 고려하기 이전에, 단일 2U 섀시에 대한 전체 RAID 솔루션은 AIC RAID 컨트롤러들용으로만 2,400달러를 초과한다.
대규모 데이터 세트들에 대한 비용 효율적인 RAID 데이터 보호의 부족으로 인해, 대규모 사업 시장에서의 NVMe SSD 채택은 제한적이게 되었다. 소프트웨어 RAID 솔루션들은 상대적으로 소규모 데이터 세트들에서는 사용할 수 있지만 빅 데이터에서는 사용할 수 없다.
AIC RAID 컨트롤러들을 사용할 때 또 다른 문제점들이 있다.
1) 위에서 언급 한 것처럼, 섀시 안에 복수의 RAID 도메인들을 가지면 관리 복잡성이 증가한다.
2) RAID 도메인 관리 복잡성의 결과로써, 섀시는 단일 RAID 도메인(이는 바람직하다)을 가지지 않는다.
3) CPU(Central Processing Unit)는 많은 수의 PCIe 레인들을 지원할 필요가 있다: AIC RAID 컨트롤러 당 16개의 PCIe 레인들 X(곱하기) 섀시 당 6개의 AIC RAID 컨트롤러들 = AIC RAID 컨트롤러에 대해서만 96개의 PCIe 레인들. 고급 및 훨씬 비싼 CPU들만이 현재 이 많은 PCIe 레인들을 지원한다.
4) 각 AIC RAID 컨트롤러는 잠재적으로 25와트를 소비하므로 6개의 AIC RAID 컨트롤러들은 섀시 당 150와트까지의 전력 소비를 증가시킨다.
5) 섀시는 단지 몇 개의 PCIe 슬롯만을 갖는 경향이 있어, 추가될 수 있는 AIC RAID 컨트롤러들의 수를 잠재적으로 제한하고 섀시에서 RAID 보호 대상이 될 수 있는 NVMe SSD 수를 간접적으로 줄인다.
6) 소프트웨어 RAID 솔루션들은 비교적 적은 수의 RAID 레벨들을 지원하는 경향이 있으며 CPU 상의 오버 헤드를 증가시키는 경향이 있다.
7) 네트워크를 통해 사용될 때, SSD 액세스는 네트워크를 통해 데이터 액세스를 전송하는데 필요한 시간 때문에 느려질 수 있다. 또한, 일부 예에서, 네트워크 스토리지는 소프트웨어 RAID 구현을 요구하여 CPU 상의 오버 헤드를 증가시킬 수 있다.
AIC RAID 컨트롤러들 및 소프트웨어 RAID 솔루션들에 의해 부과되는 제한없이 많은 수의 스토리지 장치들을 이용하여 이레이저 코딩을 지원할 수 있는 방법이 필요하다.
본 발명은 상술된 기술적 과제를 해결하기 위한 것으로써, 본 발명의 목적은 이레이저 코드를 이용하여 데이터를 보호하는 시스템을 제공하는 데 있다.
본 발명의 일 실시 예에 따른 시스템은, NVMe(Non-Volatile Memory Express) SSD(Solid State Drive), NVMe SSD를 지원하는 하나 또는 그 이상의 기능들을 구현하는 FPGA 및 PCIe(Peripheral Component Interconnect Express) 스위치를 포함할 수 있다. NVMe SSD를 지원하는 하나 또는 그 이상의 기능들은 데이터 가속화, 데이터 중복 제거, 데이터 무결성, 데이터 암호화 및 데이터 압축을 포함하는 집합으로부터 획득될 수 있다. PCIe 스위치는 FPGA 및 NVMe SSD와 통신할 수 있다.
본 발명의 다른 실시 예에 따른 시스템은 NVMe(Non-Volatile Memory Express) SSD(Solid State Drive) 및 NVMe SSD를 지원하는 하나 또는 그 이상의 기능들을 구현하는 제 1 FPGA 부분 및 PCIe(Peripheral Component Interconnect Express) 스위치를 구현하는 제 2 FPGA 부분을 포함하는 FPGA(Field Programmable Gate Array)를 포함할 수 있다. NVMe SSD를 지원하는 기능은 데이터 가속화, 데이터 중복 제거, 데이터 무결성, 데이터 암호화 및 데이터 압축을 포함하는 집합으로부터 획득될 수 있다. PCIe 스위치는 FPGA 및 NVMe SSD와 통신할 수 있다. FPGA 및 NVMe SSD는 공통 하우징 내부에 있을 수 있다.
본 발명의 또 다른 실시 예에 따른 시스템은 NVMe(Non-Volatile Memory Express) SSD(Solid State Drive) 및 이레이저 코딩 로직을 포함하는 PCIe(Peripheral Component Interconnect Express) 스위치를 포함할 수 있다. PCIe 스위치는 PCIe 스위치가 프로세서와 통신 할 수 있게 하는 외부 커넥터, PCIe 스위치가 NVMe SSD와 통신 할 수 있게 하는 적어도 하나의 커넥터, PCIe 스위치를 구성하는 PPU(Power Processing Unit) 및 NVMe SSD에 저장된 데이터에 이레이저 코딩 방식을 적용하기 위한 회로를 포함하는 이레이저 코딩 컨트롤러를 포함할 수 있다.
본 발명의 실시 예에 따르면, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치를 사용하는 것은 이레이저 코딩을 스토리지 장치에 가깝게 이동시키므로, 데이터 이동에 필요한 시간을 단축시킬 수 있다. 또한, 이레이저 코딩 컨트롤러를 PCIe 스위치와 함께 배치함으로써, 값비싼 RAID add-in card들이 불필요해질 수 있으며, 여러 섀시에 이르기까지 더 큰 어레이가 사용될 수 있다.
도 1은 본 발명의 일 실시 예에 따른 Look-Aside 이레이저 코딩 로직을 갖는 PCIe 스위치를 포함하는 기계를 도시한다.
도 2는 도 1의 기계의 추가적인 세부 사항들을 도시한다.
도 3은 도 1의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치를 스토리지 장치들에 연결하는 미드 플레인 및 스위치 보드들을 포함하는 도 1의 기계의 추가적인 세부 사항들을 도시한다.
도 4는 상이한 이레이저 코딩 방식들을 달성하기 위해 사용되는 도 3의 스토리지 장치들을 도시한다.
도 5는 도 1의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치의 세부 사항을 도시한다.
도 6은 본 발명의 다른 실시 예에 따라, Look-Through 이레이저 코딩 로직을 포함하는 PCIe 스위치의 세부 사항들을 도시한다.
도 7은 본 발명의 실시 에에 따라, 도 1의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치를 사용하기 위한 제 1 토폴로지를 도시한다.
도 8은 본 발명의 다른 실시 예에 따라, 도 1의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치를 사용하기 위한 제 2 토폴로지를 도시한다.
도 9는 본 발명의 또 다른 실시 예에 따라, 도 1의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치를 사용하기 위한 제 3 토폴로지를 도시한다.
도 10은 본 발명의 또 다른 실시 예에 따라, 도 1의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치를 사용하기 위한 제 4 토폴로지를 도시한다.
도 11a 내지 도 11d는 본 발명의 일 실시 예에 따라, 이레이저 코딩 방식을 지원하기 위해 도 1의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치에 대한 예시적인 절차의 흐름도를 도시한다.
도 12a 내지 도 12b는 본 발명의 실시 예에 따라 초기화를 수행하기 위해 도 1의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치에 대한 예시적인 절차를 도시한다.
도 13은 본 발명의 일 실시 예에 따라, 이레이저 코딩 방식에 새로운 스토리지 장치를 포함시키기 위해, 도 1의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치에 대한 예시적인 절차의 흐름도를 도시한다.
도 14는 본 발명의 일 실시 예에 따라, 고장난 스토리지 장치를 처리하기 위한 도 1의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치에 대한 예시적인 절차의 흐름도를 도시한다.
본 발명의 기술적 사상의 실시 예들이 참조되며, 이들의 예들이 첨부된 도면들에 도시된다. 후술되는 상세한 설명에서, 다양한 특정한 상세들이 본 발명의 기술적 사상의 충분한 이해를 돕기 위하여 제공된다. 그러나 이 분야에 통상적인 기술을 가진 자들은 이러한 특정한 상세들 없이도 본 발명의 기술적 사상을 구현할 수 있다. 다른 예들로서, 잘 알려진 방법들, 절차들, 구성 요소들, 회로들, 그리고 네트워크들은 실시 예들의 측면들을 불필요하게 모호하게 하지 않기 위해 상세하게 설명되지 않는다.
본 명세서에서 제1 및 제2 등이 다양한 구성 요소들을 설명하는데 사용될 수 있지만, 이러한 구성 요소는 이러한 용어에 의해 한정되지 않는 것으로 이해 될 것이다. 상기 용어들은 하나의 구성 요소를 다른 것과 구별하기 위해 사용된다. 예를 들어, 제1 논리 단계는 제 2 논리 단계로 명명될 수 있으며, 이와 유사하게 본 발명의 개념의 범위를 벗어나지 않은 상태에서, 제2 논리 스테이지는 제1 논리 스테이지로 명명될 수 있다.
본 발명의 기술적 사상의 설명에서 사용되는 용어들은 특정한 실시 예들을 설명하기 위한 목적으로만 사용되며, 본 발명의 기술적 사상을 한정하는 것으로 의도되지 않는다. 본 발명의 기술적 사상의 설명 및 첨부된 청구항들에서 사용되는 바와 같이, 맥락에서 명확하게 명시되지 않으면 단수 표현들은 복수 표현들 또한 포함하는 것으로 의도된다. "그리고/또는"의 용어는 하나 또는 그보다 많은 연관된 항목들의 임의의 그리고 가능한 모든 조합들을 포함하는 것으로 참조된다. "포함한다" 그리고/또는 "포함하는"의 용어들은 상세한 설명에서 사용된 때에 언급된 특성들, 정수들, 단계들, 동작들, 원소들, 그리고/또는 구성 요소들의 존재를 명시하며, 하나 또는 그보다 많은 다른 특성들, 정수들, 단계들, 동작들, 원소들, 구성 요소들, 그리고/또는 그것들의 그룹들의 존재 또는 추가를 배제하지 않는다. 도면들의 구성 요소들 및 특성들은 실제 비율에 필수적으로 비례하지 않는다.
FPGA들(Field Programmable Gate Arrays)은 필요한 경우 RAID들(Redundant Array of Independent Disks)/이레이저 코드 패리티 생성 및 데이터 검색을 수행 할 수 있는 충분한 인텔리전스, 컴퓨팅 리소스 및 고속 입출력(I/O) 연결성을 갖는다. FPGA+SSD들(Solid State Drives)은 하나 이상의 SSD들, GPU들(Graphical Processing Units), TPU들(Tensor Processing Units) 등과 같은 더 많은 공동 컨트롤러들/프로세서들을 지원하기 위해 임베디드 PCIe(Peripheral Component Interconnect Express) 스위치를 요구할 수 있다. 다수의 공동 프로세서들은 또한 더 많은 NAND 플래시 메모리의 채널들을 요구한다.
본 발명의 실시 예는 FPGA 내부의 PCIe 스위치 내의 이레이저 코드들을 지원한다. 본 발명의 실시 예는 또한 BMC들(Baseboard Management Controllers)을 통해 사용자들이 원격으로(FPGA 내에서) RAID 엔진들을 구성 하도록 할 수 있다. PCIe(제어 플레인으로 사용됨) 또는 SMBus(System Management Bus)와 같은 이러한 표준 인터페이스들은 사용자가 RoC(RAID-on-a-Chip) 또는 이레이저 코드 컨트롤러를 사전 구성하는데 사용될 수 있다. 이 방법으로 스토리지 장치들을 구성 할 수 있다는 것은 컴퓨팅 리소스들을 임대하는 사용자들에게 유용 할 수 있다: 완료되는 경우, 사용자들은 다음 사용자가 동일한 컴퓨팅 리소스들을 사용하기 이전에 데이터를 빠르게 파괴하기를 원할 수 있다. 이 경우, BMC는 다수의 FPGA + SSD들 내부의 모든 임베디드 PCIe 스위치들에 소거 명령들을 보낼 수 있다. FPGA의 RoC/이레이저 코드 컨트롤러는 소거 명령을 수신하면, 명령 LBA(Logical Block Address) 범위들에 의해 지정된 데이터 및 패리티 데이터를 모두 소거할 수 있다.
오늘날, PCIe 스위치들은 하나 이상의 스위치가 관리자에게 노출되는 가상 스위치들 또는 그룹화을 노출시킨다. 이러한 구성들은 네트워크, CPU-GPU, FPGA 및 이러한 가상 도메인들 뒤에 있는 스토리지가 그룹화될 수 있는 경우에, 가상화된 환경에서 유용하다. 이러한 가상 그룹화는 일 실시 예에서 가상화된 환경에 대한 사용자 그룹들에 노출되거나 또는 RAID 10, RAID 50, RAID 60 등과 같은 RAID 그룹화에 사용되는 RAID 서브 그룹들을 생성함으로써 스토리지에 적용될 수 있다. 이런 계층화된 RAID 그룹들은 더 큰 RAID 솔루션을 만들기 위해, 소규모 그룹들을 만들고 추가 RAID 레이어를 적용한다. 가상 스위치들은 더 작은 RAID 그룹을 관리하는 반면 메인 스위치는 전반적인 RAID 구성을 관리한다.
데이터 보호 방식이 인에이블되고 관리가 스토리지 유닛들에 가깝게 유지되면서, 이 솔루션은 엔터프라이즈 및 데이터-중심 환경에서 큰 차별화 요소들인 이점들을 제공한다. 본 발명의 실시 예는 저 전력 소모로 더 높은 밀도 및 성능을 제공한다.
이 솔루션은 호스트와 SSD들 사이의 데이터 경로에 있는 통합된 RoC 또는 이레이저 코드 컨트롤러를 포함하는 임베디드 PCIe 스위치 하나로 구성 될 수 있다. PCIe 스위치+RoC 구성 요소는 구성 및 제어를 위해 BMC에 의해 관리될 수 있고, 새로운 사용자들에게 공개하기 이전에 특정 구성들에 대한 인터페이스를 소프트웨어에 노출 시킬 수 있다.
이레이저 코드/RAID 모드에서 작동하는 경우, 임베디드 PCIe 스위치로부터 들어오거나 나가는 모든 NVMe(Non-Volatile Memory Express) 또는 NVMe-oF(NVMe over Fabric) 트래픽은 RoC 또는 이레이저 코드 컨트롤러에 의해 스누핑(snooping) 될 수 있다(Look-Aside RoC 또는 이레이저 코드 컨트롤러라고도 함). RoC 또는 이레이저 코드 컨트롤러는 트래픽 내의 데이터가 그것의 로컬 캐시로 캐시 히트(cache hit)되는지 여부를 결정할 수 있다. 캐시 히트가 있으면, 트랜잭션(읽기 또는 쓰기)을 적절한 SSD로 전달할 필요가 없다. 요구된 판독 데이터는 RoC의 캐시에 의해 직접적으로 제공 될 수 있다. 쓰기 데이터는 RoC의 로컬 캐시로 직접 업데이트될 수 있고, "수정 된"또는 "더티" 데이터로 표시될 수 있다.
SSD들에 대한 경우, 패리티는 연결된 SSD들 사이에 분산 될 수 있다. 예를 들어, RAID 4가 선택되면, 마지막 SSD가 패리티만 저장하는데 사용될 수 있고, 나머지 SSD들은 데이터 저장에 사용될 수 있다.
호스트와 SSD 장치들 사이에 외부 PCIe 스위치가 존재함으로써, 가상 입출력 주소들이 지원 될 수 있다. 이 경우, 호스트 PCIe 스위치의 일부인 1차 RoC가 모든 SSD들 주소들을 가상화할 수 있다. 즉, 주소들과 장치들은 호스트 운영 체제(Opreating Systme, OS)에서 볼 수 없다. 본 발명의 실시 예들에서, 피어들(peers)인 적어도 2개의 SSD들 사이의 피어-투-피어 트랜잭션들이 허용되고 지원된다. 이 선택은 하나 이상의 SSD에 걸쳐 스트라이핑(striping)하여 SSD들의 중복성 및/또는 가용성의 일부 형태들을 향상시킬 수 있다. 이 모드에서, FPGA들 내에 임베디드된 RoC 또는 이레이저 코드 컨트롤러가(있는 경우), 디스인에이블될 수 있다. 인에이블된 유일한 RoC/이레이저 코드 컨트롤러는 호스트 PCIe 스위치 내에 있다.
스토리지 장치들이 단일 장치 모드에서 동작하면, 들어오는 모든 NVMe/PCIe 트래픽은 요청된 데이터를 갖는 SSD로 전달될 수 있다.
페어링 모드가 인에이블되면, RoC/이레이저 코드 컨트롤러는 요청된 데이터의 주소가 그것의 자체 BAR 도메인에 속하는지 여부를 결정할 수 있다. 이 경우, 트랜젝션은 로컬 RoC에 의해 완료될 수 있다. 쓰기 트랜잭션들에 대한 경우, (일부 임베디드된 SRAM 또는 DRAM을 사용하는) 게시된(posted) 쓰기 버퍼 또는 쓰기 캐시가 사용될 수 있다. 쓰기 캐시 히트가 있는 경우(이전의 쓰기가 발생했고 데이터가 여전히 쓰기 캐시 버퍼에 저장되어 있는 경우), 처리는 쓰기 캐시 정책에 따라 달라진다. 예를 들어, 캐시 정책이 후 기입(write-back)이면, 쓰기 명령은 완료될 수 있고 RoC 캐시에 의해 종료될 수 있다. 캐시 정책이 연속 기입(write-through)이면, 쓰기 데이터가 드라이브로 성공적으로 전송되는 경우 쓰기 명령이 완료될 수 있다. 이 경우, RoC는 쓰기 데이터가 로컬 캐시에 성공적으로 업데이트되면 바로 호스트에 대한 쓰기 명령을 종료 할 수 있다.
RoC는 RoC가 요구하는 다수의 장치들을 가상화할 수 있고, 다수의 장치들을 데이터 또는 장치 장애에 대해 보호하는 단일 장치 또는 더 적은 수의 장치들로써 나타낼 수 있다. 데이터 보호 방식은 데이터 손실이 있는 장치가 있는 경우, 다른 장치들로부터 데이터가 재구성될 수 있도록 자연적으로 여러 그룹에 분산될 수 있다. RAID 및 이레이저 코딩(EC)은 이러한 손실을 보호하기 위해 분산 알고리즘들을 사용하는 일반적으로 채택되는 데이터 보호이다.
RoC에서 장치들을 가상화하기 위해선, 장치들이 RoC에서 종료될 수 있고 호스트에서 보이지 않을 수 있다. 즉, PCIe 스위치는 모든 알려진 장치들에 연결될 수 있고, RoC는 스위치에 연결될 수 있다. 장치들을 관리하기 위해선, RoC는 PCIe 스위치를 통해 개별 장치들을 검색하고 구성 할 수 있다. 또는 RoC는 기본/출하시 모드에서 통과 될 수 있고, 호스트 소프트웨어가 RoC를 구성하게 할 수 있다. 호스트 소프트웨어는 PCIe 스위치+RoC 하드웨어와 함께 작동하도록 특별히 설계될 수 있다. 일단 구성되면, RoC는 장치들을 종료할 수 있고 장치들이 호스트에 보이지 않도록 만들 수 있다.
===PCIe 스위치+RoC는 RAID 및 EC 모드들에 대해 여러 가지 방법으로 구성될 수 있다. 더 많은 장치들을 지원하기 위해, 더 큰 팬 아웃 구성을 생성하기 위해 부가적인 PCIe 스위치들 다운스트림이 있을 수 있다. 부가적으로, 하나 이상의 이러한 하드웨어 조합이 더 큰 설정을 형성하기 위해 함께 연관 될 수 있다. 예를 들어, 2개의 PCIe 스위치들+RoC가 함께 작동하여 대체 구성을 형성 할 수 있다. 또는, 이러한 2 개의 PCIe 스위치들+RoC가 별도로 동작할 수 있다.
PCIe 스위치들+RoC가 별도로 동작하는 경우, 각 RoC 및 PCIe 스위치 조합이 호스트에 의해 별도의 장치로 인스턴스화된다. 여기에 있는 호스트는 RoC에 의해 가상화된 모든 SSD들을 볼 수 있는 표준 OS 드라이버들을 가질 수 있다. 예를 들어, 6개의 SSD들은 PCIe 스위치 아래에 장착되고, 1개의 SSD는 RoC에 의해 호스트에 노출된다고 가정하자; 제 2 RoC 및 PCIe 스위치 조합은 호스트에 유사한 설정을 노출 할 수 있다. 2개의 SSD들이 모든 RoC 컨트롤러 장치들(각각 하나씩)에 대한 호스트에 의해 탐색된다. 각 RoC 컨트롤러는 노출된 각 SSD에 대해 별도의 장치 공간을 노출시킬 수 있다. 이 노출 된 SSD와 그 뒤에 있는 지원하는 모든 장치들은 호스트에 의해 보여질 수 없다. RoC는 PCIe 스위치(들)를 통해 하드웨어 입출력 경로를 관리한다.
이 방법은 능동-수동 설정에서 사용될 수 있다. 여기서 제 2 컨트롤러는 제 1 컨트롤러 경로가 실패한 경우의 백업 경로이다. 호스트는 여기서 제 1 컨트롤러만 능동적으로 사용하고, 제 2 RoC 컨트롤러로는 입출력(I/O)이 전송되지 않는다. 능동-수동 설정이 사용되면, 2개의 RoC 컨트롤러들은 데이터를 내부적으로 복제할 수 있다. 이는 RAID 1 데이터 보호 설정에서와 같이 제 1 능동 컨트롤러가 모든 쓰기를 제 2 RoC 컨트롤러로 전송함으로써 수행될 수 있다.
제 2 RoC 및 PCIe 스위치가 그것 뒤에 그것 자체의 SSD들을 갖지 않고 단지 백업 컨트롤러 경로일 수 있는 제 2 능동-수동 설정이 있을 수 있다. 이 경우, 두 개의 RoC 컨트롤러들이 동일한 SSD들 세트를 참조하기 때문에 두 개의 RoC 컨트롤러들 사이에 입출력(I/O)이 전송되지 않을 수 있다. 이것은 표준 능동-수동 설정이다.
각 RoC 뒤에 있는 SSD들은 또한, 서로 조정하지 않을 수 있고, 이 경우 2개의 SSD들은 그것들 사이에서 공유되는 보호 없이 별도의 SSD들로 취급된다.
또 다른 사용법에서, 두 경로들 모두를 능동-능동 설정에서 사용될 수 있다. 이 설정은 부하-균형 목적으로 사용될 수 있다. 여기서, 호스트는 특수한 소프트웨어 계층이 입출력 작업 부하를 분산하기 위해 사용되는 방식으로 두 경로들 모두를 사용할 수 있다. 2개의 RoC 컨트롤러들은 SSD들 둘 다를 동기화 상태로 유지하기 위해 그것들 사이의 쓰기를 조정할 수 있다. 즉, 각 RoC 컨트롤러의 각 SSD에는 RAID 1 설정 내에서와 같은 동일한 데이터가 포함될 수 있다.
또 다른 구성에서, 2개의 RoC 컨트롤러들은 사용자 지정 설정에서 그것들의 입출력을 분산시키는 방식으로 통신한다. 여기에서, 하나의 RoC 컨트롤러만 호스트에 의해 사용된다: 다른 RoC 컨트롤러는 제 1 RoC 컨트롤러에 연결된다. 제 1 RoC 컨트롤러는 하나 이상의 가상 NVMe SSD들을 호스트로 노출시킬 수 있다. 2개의 RoC들은 그것들 사이에 홀수 및 짝수의 LBA 공간들을 나누기 위해 설정될 수 있다. NVMe는 장치 측면으로부터의 데이터를 위한 풀 모델을 사용하기 때문에, 명령들 만이 호스트에 의해서 제 1 RoC 컨트롤러에 의해 노출된 SSD들로 전송된다. RoC 컨트롤러는 그것의 사이드 채널 연결을 통해 제 2 RoC 컨트롤러로 메시지의 사본을 전송할 수 있다. RoC 컨트롤러들은 홀수 또는 짝수만의 LBA들, 스트라이프들, 구역들 등을 서비스하도록 설정될 수 있다. 이 설정은 호스트에서 관리될 필요가 없는 내부적인 부하 균형을 제공하고, RoC 및 PCIe 스위치 조합들에 의해 투명하게 관리될 수 있다. 개별 RoC 컨트롤러들은 홀수 또는 짝수의 LBA 범위들만 처리할 수 있고, 호스트 버퍼들에 대한 요청을 만족시킬 수 있다. 두 개의 RoC 컨트롤러들은 모두 호스트에 액세스 할 수 있기 때문에, 그것들은 그것들의 홀수 또는 짝수 쌍에 대한 데이터를 채울 수 있다.
예를 들어, 호스트는 4개의 연속적인 LBA들(0-3)을 읽기 위한 명령을 제 1 RoC 컨트롤러로 전송할 수 있고, 제 1 RoC 컨트롤러는 복사본을 제 2 RoC 컨트롤러로 전송할 수 있다. 그 다음, 제 1 RoC 컨트롤러는 자신의 PCIe 스위치 상의 제 1 두 개의 SSD들로부터의 LBA들(0-2)에 대한 데이터를 읽는 반면, 제 2 RoC 컨트롤러는 자신의 PCIe 스위치 상의 제 1 두 개의 SSD들의 LBA들(1-3)로부터 데이터를 읽는다. 그 다음, 제 2 RoC 컨트롤러는 제 1 RoC 컨트롤러에 자신의 동작들을 완료했다고 보고 할 수 있고, 그러면, 제 1 RoC 컨트롤러는 트랜잭션을 완료된 것으로 호스트에 보고 할 수 있다.
홀수/ 짝수 LBA/ 스트라이프/ 구역들 쌍은 다른 부하 분산 용도에 적용될 수있다.
본 발명의 실시 예들은 SSD 고장, 제거 및 핫 추가(hot addition)를 지원할 수 있다. SSD가 정상적으로 작동하지 않거나 그것의 슬롯으로부터 제거되는 경우, PCIe 스위치 내의 RoC는 해당 조건을 감지할 필요가 있다. PCIe 스위치가 이러한 상태를 감지하는 경우, RoC는 고장나거나 제거된 SSD에 대한 재구성 작업을 시작할 수 있다. 또한, RoC는 관련된 스트라이프로부터의 데이터를 우선 순위로 결정함으로써, 재구성 기간 동안 모든 입출력 작업들을 처리 할 수 있다.
SSD 고장 또는 제거가 PCIe 스위치 내의 RoC에 보고되는 것은 최소한 두 가지 방법들이 있다. 본 발명의 일 실시 예에서, 모든 SSD들은 BMC에 연결된 Present 핀들을 갖는다. SSD를 섀시에서 제거하는 경우, BMC는 제거를 감지한다. BMC는 영향을 받은 슬롯 번호를 PCIe 스위치 내의 RoC로 보고한다. 또한, BMC는 SSD들의 상태를 정기적으로 모니터링 할 수 있다. BMC가 SSD로부터 보고된 치명적인 오류 상태를 감지하면, BMC는 해당 SSD를 사용하지 않기로 결정할 수 있다. 그다음, BMC는 새로운 SSD가 재구성되도록 고장난 슬롯 번호를 RoC로 보고할 수 있다.
본 발명의 다른 실시 예에서, PCIe 스위치는 모든 SSD들이 PCIe 측대역(sideband) 신호들을 통해 접속되고 특정 에러 조건들을 감지 할 수 있는 핫 플러그(hot plug)를 지원할 수 있다. PCIe 스위치는 SSD를 제거하거나 추가하거나 또는 SSD에 연결된 PCIe 링크가 더 이상 작동하지 않는 것을 감지 할 수 있다. 이러한 오류 상황들에서, PCIe 스위치 내의 RoC가 고장난 SSD를 분리할 수 있거나, 또는 BMC가 고장난 장치의 전원을 디스인에이블이고 즉시 장치의 재구성을 시작함으로써 고장난 SSD를 분리할 수 있다.
활성화된 상태 일 때, 각 U.2 커넥터의 Presence(PRSNT #) 핀은 섀시 내에 새로운 장치가 있음을 나타낼 수 있다. 신호는 PCIe 스위치 및/또는 BMC에 연결된다. RoC는 현재 데이터 보호 정책에 의해 새로운 드라이브를 그것의 기존 도메인으로 적절하게 구성할 수 있다.
호스트로부터 들어오는 모든 트래픽은 스누핑 P2P 및 주소 변환 논리(물리적에서 논리적)로 전달되도록 요구된다. PCIe 열거(enumeration) 중에는, 모든 포트들로부터의 모든 구성 사이클들이 스누핑 P2P 로직으로 전달되도록 요구된다. 선택된 동작 모드에 따라, RoC가 있는 PCIe 스위치의 동작들은 다음과 같이 정의된다.
명령 일반적인 PCIe 스위치(디스인에이블된 RoC) 인에이블된 ROC를 포함하는 PCIe switch
PCIe 열거 다운스트림 포트에 대한 일반적인 P2P 업스트림 포트 스페셜: 스누핑 로직은 단일 장치로써 열거할 수 있다. 스누핑 로직은 선택된 이레이저 코드/RAID 레벨에 기초하여 다운스트림 포트들을 열거할 수 있다.
PCIe 구성 다운스트림 포트에 대한 일반적인 P2P 업스트림 스페셜: 스누핑 로직/RoC는 단일 장치로써 열거할 수 있다. RoC는 선택된 이레이저 코드/RAID 레벨에 기초하여 연결된 모든 다운스트림 포트들을 열거할 수 있다. 이 경우, RoC는 가상 볼륨 관리자/ 컨트롤러이다.
PCIe 읽기/쓰기 트랜잭션들 정상(Normal) 호스트는 RoC와 통신한다. RoC는 SSD들과 통신한다. 호스트-SSD 간 직접적인 통신은 없음.
RAID/이레이저 코드 유도된 초기화 N/A RoC는 모든 참여 SSD들을 초기화할 수 있고, 사용자 요구당 RAID/이레이저 코딩을 구성할 수 있다.
또한, RoC는 PCIe 스위치와 호스트 프로세서 사이에 일렬로(in-line) 배치될 수 있다. 본 발명의 이러한 실시 예에서, RoC는 Look-Through RoC로 지칭될 수 있다. Look-Through RoC를 사용하는 경우, PCIe 스위치가 일반적인 PCIe 스위치로써 동작하면 RoC가 디스인에이블되고 모든 포트들의 리타이머(re-timer)가 된다. 이 경우, 모든 업스트림 포트들은 정상적인 사용 예에서처럼 연결될 수 있다.
RoC가 인에이블되면, 소수의 NTB(non-transparent bridge) 포트들이 호스트에 연결된다. 이 경우, RoC는 선택된 RAID 또는 이레이저 코딩 레벨들에 따라 들어오는 주소를 논리 주소로 가상화 할 수 있다.
RoC가 Look-Aside RoC인지 Look-Through RoC인지 여부에 관계없이, 모든 들어오는 읽기/쓰기 메모리 요청들은 캐시 히트(hit) 또는 미스(miss)를 판단하기 위해 RoC의 로컬 캐시와 비교하여 확인될 수 있다. 캐시 히트가 있으면, 요구된 판독(읽기) 데이터는 SSD 대신에 RoC 로컬 캐시 메모리에 의해 제공 될 수 있다. 메모리 쓰기 히트의 경우, 쓰기 데이터는 캐시 메모리에 즉시 업데이트 될 수 있다. 동일한 쓰기 데이터는 나중에 SSD로 업데이트될 수 있다. 이 구현은 메모리 쓰기들에 대한 전반적인 지연(latency)을 낮춰 시스템 성능을 향상시킬 수 있다.
캐시 미스가 있는 경우, RoC 컨트롤러는 어느 SSD가 데이터에 액세스하기에 알맞는 드라이브인지 판단할 수 있다.
PCIe 장치를 주소 지정하기 위해선, PCIe 장치는 시스템의 입출력 포트 주소 공간 또는 메모리-매핑된 주소 공간에 매핑되도록 인에이블되어야 한다. 시스템의 펌웨어, 장치 드라이버들 또는 운영 체제는 구성 명령들을 PCIe 컨트롤러에 기록함으로써, BAR들(Base Address Registers)을 프로그래밍하여 주소 매핑을 장치에 알린다. 모든 PCIe 장치들은 시스템 재설정시 비활성 상태이기 때문에, PCIe 장치들은 운영 체제 또는 장치 드라이버들이 PCIe 장치들들과 통신할 수 있도록 PCIe 장치들에게 할당되는 주소를 가지지 않을 수 있다. BIOS 또는 운영 체제는 슬롯 당 IDSEL(Initialization Device Select) 신호들을 사용하여 PCIe 컨트롤러를 통해 PCIe 슬롯들(예를 들어, 마더 보드 상의 제 1 PCIe 슬롯, 제 2 PCIe 슬롯 또는 제 3 PCIe 슬롯 등)을 지리적으로 지정할 수 있다.
PCI BAR 비트들
비트들 설명 값들
모든 PCI bars에 대해
0 영역 유형 0 = 메모리
1 =(더 이상 사용되지 않는) 입출력
메모리 bars에 대해
2-1 위치 파악 가능 0 = 모든 32 비트
1 = < 1 MiB
2 = 모든 64 비트
3 프리페치 가능 0 = 아니오1 = 예
31-4 기본 주소 16 바이트 정렬
( 더 이상 사용되지 않는) 입출력 bars에 대해
1 예약된
31-2 기본 주소 4 바이트 정렬
BIOS 또는 운영 체제가 어떤 PCIe 슬롯들에 장치들이 설치되어 있는지를 판단하는(또는, 장치가 어떤 기능들을 구현하는지를 판단하는) 직접적인 방법이 없기 때문에, PCI 버스(들)이 열거된다. 버스 열거는 장치의 기능(15)에서 버스 번호 및 장치 번호의 조합 각각에 대한 벤더 ID(VID) 및 장치 ID(DID) 레지스터를 판독하기위해 시도함으로써 수행될 수 있다. DID와는 상이한 장치 번호는 단지 해당 버스 상의 장치들의 일련 번호일 수 있다. 게다가, 새로운 브리지가 감지 된 후, 새로운 버스 번호가 정의되고 장치 열거는 장치 번호 0에서 다시 시작된다.
장치의 기능(15)으로부터 응답이 수신되지 않으면, 버스 마스터는 중단을 수행하고 유효하지 않은 VID/DID 값인 모든-비트-온 값(16 진수로는 FFFFFFFF)을 반환한다. 이러한 방식으로, 장치 드라이버는 지정된 조합 버스/디바이스_번호/기능(B/ D/ F)이 존재하지 않음을 알 수 있다. 따라서, 주어진 버스/ 디바이스에 대한 기능 ID 0에 대한 판독(읽기)이 마스터(개시자)를 중단 시키게 되면, 장치 드라이버는 그 버스 상에 어떠한 동작 장치도 존재하지 않는다는 결론을 내릴 수 있다(장치들은 기능 번호 0을 구현하도록 요구된다). 이 경우, 남아있는 기능 번호들(1-7)에 대한 판독들은 남아있는 기능 번호들(1-7)이 또한 존재하지 않으므로 필요하지 않는다.
공급 업체 ID 레지스터에 대해 지정된 B/ D/ F 조합에 대한 판독이 성공하는 경우, 장치 드라이버는 해당 장치가 존재함을 안다. 장치 드라이버는 BAR들에 모두 1을 기록하고, 장치의 요청된 메모리의 크기를 인코딩 된 형식으로 다시 읽어 들일 수 있다. 디자인은 모든 주소 공간 크기가 2의 제곱수이며 자연스럽게 정렬됨을 의미한다.
이 시점에서, BIOS 또는 운영 체제는 메모리 매핑 및 입출력 포트 주소들을 장치의 BAR 구성 레지스터에 프로그래밍 할 수 있다. 이 주소들은 시스템이 켜져있는 한 유효하다. 전원을 끄면, 이러한 모든 설정들이 손실되고, 시스템 전원이 다시 켜지면 이 절차가 반복된다. 이러한 전체 프로세스가 완전히 자동화되기 때문에, 사용자는 카드들 자체 상의 DIP 스위치들을 변경함으로써, 새롭게 추가된 하드웨어를 수동적으로 구성하는 작업을 할 필요가 없다. 이 자동 장치 검색 및 주소 공간 할당은 플러그 앤 플레이가 구현되는 방식이다.
PCIe-to-PCIe 브리지가 탐색되면, 시스템은 0이 아닌 다른 버스 번호를 브리지를 넘어서는 2차 PCI 버스에 할당 한 다음 해당 2차 버스 상의 장치를 열거 할 수 있다. 더 많은 PCIe 브리지가 탐색되면, 모든 가능한 도메인/ 버스/ 장치 조합들이 스캔될 때까지 탐색이 재귀적으로 계속 될 수 있다.
각 비 브리지 PCIe 장치 기능은 최대 6개의 BAR들을 구현할 수 있으며, 각 BAR은 입출력 포트 및 메모리-매핑된 주소 공간 내의 상이한 주소들에 응답 할 수 있다. 각 BAR은 영역을 묘사한다.
또한, PCIe 장치는 드라이버 코드 또는 구성 정보가 들어있는 옵션 ROM을 가질 수 있다.
BMC는 RoC 설정을 직접적으로 구성 할 수 있다. BMC는 특정 데이터 보호 방식이 적용되는 하드 코딩된 경로 또는 구성 가능한 설정을 가질 수 있다. 후자는 인터페이스를 BIOS 옵션으로써 이 구성에 노출시키거나 추가적으로 하드웨어 노출된 인터페이스를 통한 소프트웨어에 노출시킬 수 있다. 하드 코딩된 방식은 BIOS 펌웨어 내에 구성될 수 있고, 보호 기능을 인에이블/디스인에이블 하기 위한 옵션을 제공 할 수 있다.
장치 실패를 처리하기 위해, 제어 경로를 통한 BMC는 드라이브가 손상되거나 제거되는 경우를 감지할 수 있다. 또한, BMC는 장치가 SMART(Self-Monitoring Analysis and Reporting Technology)를 통해 곧 손상될 것으로 예상 할 수 있다. 이 경우들에서, BMC는 실패한 시나리오들을 인에이블하거나 사용자에게 상황에 대해 경고하기 위해 RoC 하드웨어를 재구성할 수 있다. BMC는 데이터 경로가 아닌 제어 경로에만 허가된다. 새로운 드라이브가 삽입되는 경우, BMC는 다시 개입하고, 새로운 드라이브를 보호된 그룹(들)의 일부로써 구성하거나 재구성 작업을 시작할 수 있다. RoC 하드웨어는 데이터 액세스 경로들에서 더 낮은 지연들을 제공하면서 가능한 한 최소한의 성능 영향을 제공하기 위해 이 설정에서 실제 재구성 및 복구 경로들을 처리 할 수 있다.
도 1은 본 발명의 일 실시 예에 따른 Look-Aside 이레이저 코딩 로직을 갖는 PCIe 스위치를 포함하는 기계를 도시한다. 도 1에서, 기계(105)가 도시된다. 기계(105)는 프로세서(110)를 포함 할 수 있다. 프로세서(110)는 예를 들어 Intel Xeon, Celeron, Itanium 또는 Atom 프로세서, AMD Opteron 프로세서, ARM 프로세서 등 임의의 다양한 프로세서 일 수 있다. 도 1은 기계(105) 내의 단일 프로세서(110)를 도시하며, 기계(105)는 각각 단일 코어 또는 멀티 코어 프로세서들 일 수 있는 임의의 수의 프로세서들을 포함 할 수 있고, 임의의 원하는 조합으로 혼합 될 수 있다.
또한, 기계(105)는 메모리 컨트롤러(120)에 의해 관리될 수 있는 메모리(115)를 포함할 수 있다. 메모리(115)는 플래시 메모리, DRAM(Dynamic Random Access Memory), SRAM(Static Random Access Memory), 영구 RAM(Persistent Random Access Memory), FRAM(Ferroelectric Random Access Memory), 또는 MRAM(Magnetoresistive Random Access Memory)과 같은 NVRAM(Non-Volatile Random Access Memory)등 임의의 다양한 메모리일 수 있다. 메모리(115)는 또한 상이한 메모리 유형들의 임의의 원하는 조합일 수 있다.
기계(105)는 또한 Look-Aside 이레이저 코딩 로직을 갖는 PCIe 스위치(125)를 포함 할 수 있다. PCIe 스위치(125)는 Look-Aside 이레이저 코딩 로직을 지원하는 임의의 원하는 PCIe 스위치 일 수 있다.
기계(105)는 또한 장치 드라이버(135)에 의해 제어 될 수 있는 스토리지 장치(130)를 포함 할 수 있다. 스토리지 장치(130)는 PCIe 스위치(125)와 통신 할 수있는 임의의 원하는 형태의 스토리지 장치일 수 있다. 예를 들어, 스토리지 장치(130)는 NVMe SSD일 수 있다.
또한, 도 1은(독립형 서버 또는 랙(rack) 서버 일 수 있는) 서버로서 기계(105)를 도시하지만, 본 발명의 실시 예는 임의의 원하는 유형의 기계(105)를 제한없이 포함 할 수 있다. 예를 들어, 기계(105)는 데스크탑 또는 랩탑 컴퓨터 또는 본 발명의 실시 예로부터 이점을 얻을 수있는 임의의 다른 기계로 대체 될 수 있다. 기계(105)는 또한 특수한 휴대용 컴퓨팅 기계들, 태블릿 컴퓨터들, 스마트 폰들 및 다른 컴퓨팅 기계들을 포함 할 수 있다.
도 2는 도 1의 기계의 추가적인 세부 사항들을 도시한다. 도 2에서, 전형적으로, 기계(105)는 장치(105)의 구성들의 동작들을 조정하는데 사용될 수 있고 메모리 컨트롤러들(120) 및 클럭들(205)을 포함 할 수있는 하나 이상의 프로세서들(110)을 포함한다. 예를 들어, 프로세서들(110)은 예를 들어 RAM(random access memory), ROM(read-only memory) 또는 다른 상태 보존 매체를 포함할 수 있는 메모리들(115)과 연결될 수 있다. 프로세서들(110)은 또한 예를 들어 이더넷 커넥터 또는 무선 커넥터일 수 있는 네트워크 커넥터(210)에 연결될 수 있고, 스토리지 장치들(130)에 연결될 수 있다. 프로세서(110)는 또한 다른 구성들 중에서, 입출력 엔진들(225)를 사용하여 관리될 수 있는 사용자 인터페이스들(220) 및 입출력 인터페이스 포트들에 부착될 수 있는 버스들(215)에 연결될 수 있다.
도 3은 도 1의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)를 스토리지 장치들에 연결하는 미드 플레인 및 스위치 보드들을 포함하는 도 1의 기계(105)의 추가적인 세부 사항들을 도시한다. 도 3에서, 기계(105)는 미드 플레인(305) 및 스위치 보드들(310, 315)을 포함할 수 있다. 스위치 보드들(310, 315)은 각각 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들(125, 320) 및 베이스 보드 관리 컨트롤러들(325, 330)을 포함 할 수 있다. (스위치 보드들(310, 315)은 또한 도 3에 도시되지 않은 부가적인 구성 요소들을 포함 할 수 있다: 도 3은 본 발명의 실시 예들에 가장 적합한 요소들에 초점을 맞춘다.)
본 발명의 일부 실시 예들에서, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들(125, 320) 각각은 총 최대 96개의 PCIe 레인들을 지원할 수 있다. U.2 커넥터들을 사용하여 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들(125, 320)을 스토리지 장치들(130-1~130-6)에 연결하기 위해서, 각 U.2 커넥터는 장치 당 최대 4 개의 PCIe 레인들을 지원한다. 두 개의 X4 레인들(각 통신 방향에 대해 하나의 X4 레인)을 사용하면, 각 PCIe 스위치가 최대 96÷8=12개의 장치들을 지원할 수 있다. 따라서, 도 3은 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)와 통신하는 12개의 스토리지 장치들(130-1~130-3) 및 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(320)와 통신하는 12개의 스토리지 장치들(130-4~130-6)을 도시한다. 그러나, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들(125, 320)과 통신하는 스토리지 장치들의 수는 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들(125, 320)에 의해 제공되는 PCIe 레인들의 수 및 스토리지 장치들(130-1~130-6) 각각에 의해 사용되는 PCIe 레인들의 수에 의해서만 제한된다.
본 발명의 일부 실시 예들에서, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들(125, 320)은 커스텀 회로(custom circuitry)를 사용하여 구현될 수 있다. 본 발명의 다른 실시 예들에서, Loo-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들(125, 320)은 적절하게 프로그램된 FPGA(Field Programmable Gate Array) 또는 ASIC(Application-Specific Integrated Circuit)을 사용하여 구현될 수 있다.
BMC들(325 및 330)은 스토리지 장치들(130-1~130-6)을 구성하는데 사용될 수 있다. 예를 들어, BMC들(325 및 330)은 스토리지 장치들(130-1~130-6)을 초기화하여, 스토리지 장치들(130-1~130-6) 상에 존재하는 임의의 데이터를 소거 할 수 있다: 시작 시, 스토리지 장치들(130-1~130-6)이 이레이저 코드 방식에 추가되는 경우, 또는 둘 다. 또한, 이 기능은 프로세서(도 1의 프로세서(110))에 의해 또는, 존재하지만 스위치보드들(310, 315) 상에 도시되지 않은 로컬 프로세서(들)에 의해) 지원될 수 있다. BMC들(325, 330)(또는, 도 1의 프로세서(110) 또는 스위치보드들(310, 315) 상에 도시되지 않은 로컬 프로세서(들))는 또한 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들(125, 320)의 Look-Aside 이레이저 코딩 로직의 초기 구성을 담당할 수 있다.
도 3은 Look-Aside 이레이저 코딩 로직을 포함하는 두 개의 PCIe 스위치들(125, 320)을 이용한 데이터 보호의 예시적인 전체 설정을 도시한다: BMC들(325, 330)은 직접적 Look-Aside 이레이저 코딩 로직을 구성할 수 있다. BMC들(325, 330)은 특정 데이터 보호 방식이 적용되는 하드 코딩 경로 또는 구성 가능한 설정을 가질 수 있다. 후자는 인터페이스를 BIOS(Basic Input/Output System) 옵션으로써 이 구성에 노출시키거나 하드웨어 노출된 인터페이스를 통한 부가적인 소프트웨어에 노출시킬 수 있다. 하드 코딩된 방식은 BIOS 펌웨어 내에 구성될 수 있고, 보호 기능을 인에이블/디스인에이블 하기 위한 옵션을 제공할 수 있다.
스토리지 장치가 고장난 경우, BMC들(325, 330)은 스토리지 장치가 고장나거나 제어 경로를 통해 제거되는 때를 감지할 수 있다. 그 이후에, BMC들(325, 330)은 Look-Aside 이레이저 코딩 로직을 재구성하여 실패한 시나리오를 가능하게 할 수 있다. BMC들(325, 330)은 데이터 경로가 아닌 제어 경로에 연결될 수 있다. 유사하게, 새로운 스토리지 장치가 삽입될 때, BMC들(325, 330)은 새로운 스토리지 장치를 기존 그룹의 일부로서 개입하고 구성하거나 재구성 동작을 개시 할 수 있다. Look-Aside 이레이저 코딩 로직은 실제 재구성을 처리할 수 있다; 이 설정 내의 복구 경로들은 데이터 액세스에 대한 성능 영향을 이상적으로 최소화할 뿐만 아니라 나머지 스토리지 장치들로부터 재구성 스토리지 장치 상의 데이터를 재구성하여야 한다.
이 시점에서 "이레이저 코딩"이라는 용어를 정의하는 것이 가치가 있다. 이레이저 코딩은 다수의 스토리지 장치들 상에서 데이터를 인코딩하는 데 요구되는 모든 방법을 설명하기 위한 것이다. 적어도 두 개의 스토리지 장치들 또는 스토리지 장치의 적어도 두 개의 부분들(예를 들어, 2개 이상의 NAND 플래시 채널들을 포함하는 단일 쉘 또는 하우징)이 이레이저 코딩을 위해 요구될 수 있다. 하나의 스토리지 장치 만이 사용되는 경우, 데이터는 스토리지 장치에 적합한 일반적인(기존의) 데이터 액세스 기술을 사용하여 저장될 수 있기 때문이다. 즉, 이레이저 코딩은 스토리지 장치들을 보다 효율적으로 사용하는 방식 및/또는 데이터 중복성(redundancy)을 제공하는 방식으로, 두 개 이상의 스토리지 장치들, 단일 스토리지 장치의 두 개 이상의 부분들 또는 이들의 임의의 조합에 데이터를 저장하는 접근법을 의미한다.
RAID(Redundant Array of Independent Disks)는 이레이저 코딩의 하위 집합을 나타낸다. 즉, RAID 레벨들은 다양한 이레이저 코딩 방식들의 특정 구현들을 나타낸다. 그러나, 기존의 RAID 레벨들을 넘어서 정의 될 수 있는 다른 이레이저 코딩 방식들이 있을 수 있다.
이레이저 코딩(또는 RAID)을 구현하는 것은 자주 두 개 이상의 물리적으로 구분된 스토리지 장치들을 사용한다. 그러나, 본 발명의 일부 실시 예들에서, 단일 쉘 또는 하우징은 이레이저 코딩 목적을 위한 분리된 스토리지 장치들로서 취급 될 수 있는 스토리지 장치들의 다수의 부분들을 포함 할 수 있다. 예를 들어, 단일 NVMe SSD 셸 또는 하우징은 다수의 NAND 플래시 채널들을 포함할 수 있다. 각 NAND 플래시 채널은 다양한 NAND 플래시 채널들에서 데이터 스트라이핑(또는 다른 인코딩)된 이레이저 코딩 목적을 위한 분리된 스토리지 장치들로 간주될 수 있다. 이것은, 본 발명의 일부 실시 예들에서, 단일 스토리지 장치를 사용하여 이레이저 코딩을 구현하는 것이 가능할 수 있다. 게다가, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)가(Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125) 어딘가에 구성되거나 추가적인 로직에 의한) 에러 정정 코드 또는 단일 스토리지 장치에서 사용될 수 있는 다른 기능들을 지원할 수 있다.
도 4는 상이한 이레이저 코딩 방식들을 달성하기 위한 도 3의 스토리지 장치들(130-1~130-6)을 도시한다. 도 4에서, 스토리지 장치들(130-1~130-6)은 이레이저 코딩 방식(405)에 도시 된 바와 같이, RAID 0 구성에서 사용될 수 있다. RAID 0은 다양한 스토리지 장치들에 걸쳐서 데이터를 스트라이핑(stripe) 한다. 즉, 데이터는 스토리지 장치들에 적절한 논리 유닛들로 분할되고, 각 논리 유닛은 어레이 내의 스토리지 장치들의 수까지 상이한 스토리지 장치들에 기록된다; 모든 스토리지 장치들이 그것들 상에 기록된 하나의 논리 유닛의 데이터를 가진 후에, 데이터는 계속 해서 제 1 스토리지 장치에 다시 기록된다.
RAID 0은 단일 스토리지 장치를 단독으로 사용하거나 조직화되지 않은디스크들의 그룹(JBOD들(Just a Bunch of Disks) 또는 JBOF(Just a Bunch of Flash)와 같은)을 사용하는 것보다 이점을 제공한다. 데이터는 다수의 스토리지 장치들에 저장되므로, 데이터는 각 스토리지 장치가 병렬로 동작하면서 더 빨리 독출되거나 기록될 수 있다. 따라서, 예를 들어, 도 4에 도시 된 바와 같이 12개의 스토리지 장치들(130-1~130-6)에 걸쳐서 데이터를 분할함으로써 각 스토리지 장치(130-1~130-6)는 전체 데이터를 읽거나 쓰는 것보다 빠르게 전체 데이터의 1/12만 읽거나 쓸 필요가 있다. 어레이의 전체 용량은 어레이의 스토리지 장치들의 수에 어레이의 가장 작은 스토리지 장치의 용량을 곱한 값으로 계산될 수 있다. 따라서 도 4에서는, 어레이가 데이터에 대한 12개의 스토리지 장치들을 포함하므로, 어레이의 전체 용량은 어레이의 가장 작은 스토리지 장치의 용량의 12배이다.
RAID 0의 단점은 스토리지 장치가 고장나더라도 보호 기능이 있다는 것이다: 어레이의 임의의 스토리지 장치가 고장나면 데이터가 손실된다. 실제로, RAID 0은 JBOD 또는 JBOF보다 위험 할 수 있다: 다수의 스토리지 장치들에 걸쳐서 데이터를 스트라이핑함으로써, 임의의 개별적인 스토리지 장치가 고장나면, 모든 데이터가 손실된다.(반면, JBOD 또는 JBOF에서는 파일들은 일반적으로 하나의 스토리지 장치에만 기록된다. 따라서 JBOD 또는 JBOF 설정에서 단일 스토리지 장치가 고장나면 일부 데이터 손실은 발생할 수 있지만 필연적으로 모든 데이터가 손실되는 것은 아니다.)
RAID 0은 어떠한 중복성도 포함하지 않으므로, 기술적으로 독립적인 디스크들의 중복 어레이가 아니다. 그러나, RAID 0은 통상적으로 RAID 레벨로 간주되며, RAID 0은 확실히 이레이저 코딩 방식으로 간주 될 수 있다.
이레이저 코딩 방식(410)은 일반적인 RAID 방식인 RAID 5를 도시한다. RAID 5에서, 패리티 블록은 해당 스트라이프의 다른 스토리지 장치들에 저장된 데이터에 대해 계산될 수 있다. 따라서, 도 4에서, RAID 5 어레이는 총 12개의 스토리지 장치들을 포함하므로, 11개의 스토리지 장치들이 데이터 드라이브들로써 사용되고 1개의 스토리지 장치는 패리티 드라이브로써 사용된다.(RAID 5에서, 패리티 데이터는 패리티 드라이브에 제한되지 않지만 임의의 데이터 처럼 스토리지 장치들에 걸쳐서 분산되어 있다. 더 이상 많이 사용되지 않는 RAID 4는 모든 패리티 정보를 단일 드라이브에 저장한다.) 어레이 내의 n개의 스토리지 장치가 있는 어레이의 전체 용량은 가장 작은 스토리지 장치의 용량의 (n-1) 배로 계산될 수 있다. 각 스트라이프는 하나의 패리티 블록을 포함하기 때문에, 이레이저 코딩 방식(410)은 최대 하나의 스토리지 장치의 고장을 허용할 수 있고 여전히 모든 데이터에 액세스 할 수 있다(고장난 스토리지 장치의 데이터는 패리티 블록과 결합하여 기능적인 스토리지 장치들상의 데이터를 사용하여 복구될 수 있다).
RAID 5는 RAID 0보다 적은 전체 스토리지를 제공하지만, 스토리지 장치 고장에 대한 보호 기능을 제공한다. 이것은 RAID 레벨들 중에서 결정할 중요한 트레이드 오프이다: 전체 스토리지 용량과 중복성의 상대적 중요성.
도 4에 도시되지 않은 다른 RAID 레벨들 또한, 이레이저 코딩 방식들로써 사용될 수 있다. 예를 들어, RAID 6는 2개의 스토리지 장치를 사용하면서 패리티 정보를 저장하므로, 전체 스토리지 장치 용량을 가장 작은 스토리지 장치의 용량의 n-2 배로 줄이면서 동시에 최대 두 개의 스토리지 장치 고장을 허용한다. 하이브리드 방식들도 가능하다: 예를 들어, RAID 0+1, RAID 1+0, RAID 5+0, RAID 6+0 및 기타 RAID 방식들도 모두 가능하고, 각각은 다양한 전체 저장 용량들과 스토리지 장치 고장들에 대한 허용 오차들을 제공한다. 예를 들어, 스토리지 장치들(130-1~130-6) 중 5개는 하나의 RAID 5 어레이를 형성하는데 사용될 수 있고, 5개 이상의 스토리지 장치들(130-1~130-6)은 두 번째 RAID 5 어레이를 형성하는데 사용될 수 있으며, 나머지 2개의 스토리지 장치들과 결합되는 이러한 두 개의 그룹들은 더 큰 RAID 5 어레이를 형성하는데 사용될 수 있다. 또는, 스토리지 장치들(130-1~130-6)은 2개의 그룹들로 분할 될 수 있으며, 각각의 그룹은 RAID 0 어레이를 구현하며, 2개의 그룹들은 RAID 1 더 큰 어레이로서 동작한다(따라서, RAID 0+1 설정을 구현). RAID 및 이레이저 코딩 기법들은 고정 코드들 또는 회전 코드들을 사용하고, 상기 고정 코드/패리티 드라이버 표기법은 단지 예시 목적임을 유의해야 한다.
이레이저 코딩 방식(415)은 모든 RAID 레벨들 및 임의의 원하는 이레이저 코딩 방식들에 적용 가능한 보다 일반적인 설명을 나타낸다. 스토리지 장치들(130-1~130-6)의 어레이가 주어지면, 이 스토리지 장치들은 2개의 그룹들로 분할될 수 있다: 데이터를 저장하는데 사용되는 하나의 그룹, 코드들을 저장하는데 사용되는 다른 그룹. 코드들은 패리티 정보 또는 데이터 그룹 내의 데이터의 서브 세트로부터 누락된 데이터의 복원 및 코딩 그룹 내의 일부 코딩을 승인하는 임의의 원하는 코딩 정보일 수 있다. 도 4에 도시 된 바와 같이, 이레이저 코딩 방식(415)은 최대 X 개의 데이터 스토리지 장치들 및 Y개의 코드 스토리지 장치들을 포함할 수 있다. 어레이의 X개의 스토리지 장치들의 임의의 조합을 고려한다면, 모든 X개의 데이터 스토리지 장치들로부터의 데이터를 액세스하거나 재구성할 수 있을 것으로 예상된다. 따라서, 이레이저 코딩 방식(415)은 일반적으로 어레이 내의 최대 Y 개의 스토리지 장치 고장들을 허용할 수 있고, 여전히 어레이에 저장된 모든 데이터에 액세스 할 수 있다. 용량 측면에서, 이레이저 코딩 방식(415)의 전체 용량은 가장 작은 스토리지 장치의 용량의 X배이다.
상기 논의에서, 임의의 이레이저 코딩 방식의 전체 용량은 "가장 작은 스토리지 장치의 용량"과 관련하여 기술된다는 것에 유의하라. 몇몇 이레이저 코딩 방식들의 경우, 스토리지 장치들이 가변 용량들을 가지며 여전히 완전히 이용되는 것이 가능할 수 있다. 그러나, RAID 0 또는 RAID 1과 같은 몇몇 이레이저 코딩 방식들은 모든 스토리지 장치가 동일한 용량을 가질 것으로 예상하며, 더 큰 스토리지 장치가 포함할 수 있는 모든 용량을 제거할 것이다. 따라서, "가장 작은 스토리지 장치의 용량"이라는 표현은 상대적인 말로 이해되어야 하고, 임의의 특정 이레이저 코딩 방식을 사용하는 어레이에 의해 제공되는 전체 용량은 전술 한 공식보다 클 수 있다.
도 3으로 돌아가면, 사용된 특정 이레이저 코딩 방식에 관계없이, PCIe 스위치들(125, 320)의 Look-Aside 이레이저 코딩 로직은 물리 스토리지 장치들(130-1~130-6)로부터 새로운 스토리지 장치를 효과적으로 생성한다. 이 새로운 스토리지 장치는 이레이저 코딩 방식에 의해 제시된 스토리지 장치가 물리적으로 존재하지 않기 때문에 가상 스토리지 장치로 생각될 수 있다. 그리고, 이 가상 스토리지 장치는 물리 스토리지 장치들(130-1~130-6)을 사용하기 때문에, 물리 스토리지 장치들(130-1~130-6)은 호스트로부터 숨겨져 있어야 한다. 결국, 저장되어 있는 데이터가 호스트가 알지 못하는 방식으로 인코딩되어 저장된 경우, 호스트는 스토리지 장치들(130-1~130-6) 상의 블록들에 직접 액세스하려고 시도하는 것이 문제가 된다.
이러한 가상 스토리지 장치의 사용을 지원하기 위해, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들(125 및/또는 320)은 가상 스토리지 장치의 용량을 도 1의 프로세서(110)에 알릴 수 있다. 예를 들어, 스토리지 장치들(130-1~130-6)이 각각 1TB의 데이터를 저장하는 5개의 NVMe SSD들을 포함하고(수학적 단순화를 위해, 1TB는 1012 바이트가 아닌 240 바이트로 고려된다), 이레이저 코딩 방식이 RAID 5 어레이를 구현하는 경우, 가상 스토리지 장치의 유효 저장 용량은 4TB이다. (더 적은 또는 더 많은 스토리지 장치를 사용하는 이레이저 코딩의 다른 구현들은 각각 1TB보다 적게 또는 더 많이 저장할 수 있어 상이한 용량들을 갖는 가상 스토리지 장치가 될 수 있다.) Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들(125 및/또는 320)은 그것들이 총 4TB(또는 242 바이트)의 저장 용량을 제공하는 가상 스토리지 장치에 연결되었다는 것을 프로세서(110)에 알릴 수 있다. 그 이후에, 도 1의 프로세서(110)는 도 5를 참조하여 이하에서 더 설명 된 바와 같이, 이 가상 스토리지 장치 내의 블록들에 데이터를 기록 할 수 있고, Look-Aside 이레이저 코딩 로직은 데이터의 실제 저장을 처리 할 수 있다. 예를 들어, NVMe SSD들 상의 블록들이 각각 4KB 크기인 경우, 프로세서(110)는 0 내지(230-1)의 번호가 매겨진 논리 블록들에 데이터가 기록되도록 요청할 수 있다.
또는, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들(125 및/또는 320)은 가상 스토리지 장치와 통신하는 방법을 나타내는 도 1의 프로세서(110)로부터 호스트 메모리 주소들의 블록을 요청할 수 있다. 도 1의 프로세서(110)가 데이터를 판독하거나 기록하고자 하는 경우, 전송은 호스트 메모리 주소들의 블록 내의 적절한 주소룰 포함하는 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들(125 및/또는 320)로 송신될 수 있다. 이 호스트 메모리 주소들의 블록은 적어도 이레이저 코딩 방식을 사용하여 구현된 가상 스토리지 장치의 크기는 되어야 한다(그리고, 추가적인 스토리지 장치들이 사용 중에 이레이저 코딩 방식에 추가될 것으로 예상된다면, 가상 스토리지 장치의 초기 용량보다 클 수 있다).
도 5는 도 1의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)의 세부 사항을 도시한다. 도 5에서, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 커넥터들(505), PCIe-to-PCIe 스택들(510-1~510-6), PCIe 스위치 코어(515) 및 PPU(Power Processing Unit, 520)와 같은 다양한 구성들을 포함할 수 있다. 커넥터들(505)은 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)가 도 1의 프로세서(110), 도 3의 스토리지 장치들(130-1~130-6)과 같은 도 1의 기계(105) 내의 다양한 다른 구성들과 통신할 수 있게 한다. 하나 이상의 커넥터들(505)는(도 1의 프로세서(110)와 같은) 업스트림 구성들에 연결된다는 점에서 “외부” 커넥터로 지칭될 수 있다; 나머지 커넥터들(505)은 다운스트림 장치들(도 3의 스토리지 장치들(130-1~130-6)과 같은)에 연결되기 때문에 내부 또는 다운스트림 "커넥터"로 지칭 될 수 있다. PCIe-to-PCIe 스택들(510-1~510-6)은 PCIe들 장치 간의 데이터 교환을 허용한다. 예를 들어, 도 3의 스토리지 장치(130-1)는 도 3의 스토리지 장치(130-3)에 데이터를 전송할 수 있다. 또는, 도 1의 프로세서(110)는 읽기 또는 쓰기 요청을 수행하기 위해 도 3의 스토리지 장치들(130-1~130-6) 중 하나 이상을 요청할 수 있다. PCIe-to-PCIe 스택들(510-1~510-6)은 데이터를 일시적으로 저장하는 버퍼들을 포함 할 수 있다: 예를 들어, 특정 전송을 위한 대상 장치가 현재 바쁜 상태(busy)이면, PCIe-to-PCIe 스택들(510-1~510-6)은 대상 장치가 자유 상태(free)가 될 때까지 전송을 저장할 수 있다. PPU(520)는 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)에 대한 임의의 구성 요청들을 처리하는 구성 센터로서 동작 할 수 있다. 도 5는 6개의 PCIe-to-PCIe 스택들(510-1~510-6)을 도시하지만, 본 발명의 실시 예는 임의의 수의 PCIe-to-PCIe 스택들을 포함 할 수 있다. PCIe 스위치 코어(515)는 하나의 PCIe 포트에서 다른 PCIe 포트로 데이터를 라우팅하도록 동작한다.
스누핑 로직(525) 및 이레이저 코딩 컨트롤러(530)의 동작에 들어가기 전에,도 3의 스토리지 장치들(130-1~130-6)에 저장된 데이터에 대해 적어도 2개의 상이한 "주소들"이 사용된다는 것을 이해하는 것이 도움이 된다. 임의의 스토리지 장치에서, 데이터는 하드웨어 구조와 관련된 특정 주소에 기록된다. 이 주소는 "물리" 주소로 간주 될 수 있다: NVMe SSD의 맥락(context)에서, "물리" 주소는 일반적으로 PBA(Physical Block Address)로 지칭된다.
NVMe SSD들에서 사용되는 플래시 메모리는 일반적으로 데이터가 그 자리에 덮어 쓰여지는 것을 승인하지 않는다. 대신, 데이터가 덮어 쓰여져야 할 필요가 있는 경우, 이전 데이터는 무효화되고 새 데이터는 NVMe SSD 상의 다른 새로운 블록 어딘가에 기록된다. 따라서,(파일, 객체 또는 기타 데이터 구조인) 특정 데이터 구조와 관련되는 데이터가 기록되어 있는 PBA는 시간이 지남에 따라 변경 될 수 있다.
또한, 플래시 메모리에 데이터를 재배치해야하는 또 다른 이유들이 있다. 데이터는 일반적으로 플래시 메모리에 데이터를 쓸 때 사용되는 것보다 큰 유닛으로 플래시 메모리에서 소거된다. 유효한 데이터가 소거되는 유닛 어딘가에 저장되어있는 경우, 유효한 데이터는 유닛이 소거되기 전에 플래시 메모리의 다른 어딘가에 기록되어야 한다. 이 소거 프로세스는 일반적으로 가비지 콜렉션(Garbage Collection)으로 지칭되며, 소거될 유닛에서 유효한 데이터를 복사하는 프로세스는 프로그래밍으로 지칭된다. 그리고 Wear Leveling(플래시 메모리의 셀들을 대략 동일하게 사용하려고 시도하는 프로세스)은 플래시 메모리 내의 데이터를 또한 재배치 할 수도 있다.
호스트는 특정 데이터 블록이 이동될 때마다 통보 받고 또한 데이터의 새로운 저장 위치를 통지 받을 수 있다. 그러나, 이러한 방식으로 호스트에게 통보하는 것은 호스트에게 상당한 부담이 된다. 따라서, 대부분의 플래시 메모리 장치들은 데이터가 저장되는 논리 블록 주소(LBA)를 호스트에 알리고, LBA를 PBA(종종 플래시 변환 계층(FTL))에 매핑하는 테이블을 유지 관리한다. 그 이후에, 해당 데이터가 새로운 PBA로 이동될 때마다, 플래시 메모리는 호스트에 새로운 주소를 알리는 대신 FTL에서 LBA-PBA 매핑 테이블을 업데이트할 수 있다. 따라서, 각 스토리지 장치에 대해, 데이터와 관련된 PBA 및 LBA가 있을 수 있다.
Look-Aside 이레이저 코딩 로직에 의해 제시되는 것처럼 가상 스토리지 장치의 개념을 추가하면, 이 구조에 또 다른 레벨이 도입된다. 도 3을 참조하여, 이레이저 코딩 방식이 5개의 1TB NVMe SSD들을 포함하고 각 NVMe SSD는 4KB 크기의 블록들을 사용하는 상기 제시된 예를 상기하자. 각 NVMe SSD는 0에서 (228-1)까지 번호가 매겨진 LBA들이 포함될 수 있다. 그러나, 호스트에 제공된 가상 스토리지 장치는 0에서 (230-1)까지 번호가 매겨지는 LBA들이 포함된다.
따라서, 호스트에서 보여지는 LBA 범위들은 다양한 스토리지 장치들에 대한 다수의 LBA 범위들의 조합을 나타낼 수 있다. 호스트에서 사용되는 LBA 범위와 개별 스토리지 장치들의 LBA 범위들을 구별하기 위해, 호스트에서 사용하는 LBA를 "호스트 LBA", "글로벌 LBA" 또는 "운영 체제(O/S)-인식 LBA"라고 지칭되는 반면, 스토리지 장치에 의해 사용되는 LBA는 "장치 LBA", "로컬 LBA" 또는 "RoC 뒤 LBA"로 지칭 될 수 있다. 호스트 LBA 범위는 임의의 원하는 방식으로 다양한 스토리지 장치들로 분할 될 수 있다. 예를 들어, 호스트 LBA 범위는 인접한 블록들로 분할 될 수 있으며, 각 개별 블록은 특정 스토리지 장치에 할당된다. 이러한 방식을 사용하면, 호스트 LBA들 0 내지(228-1)은 스토리지 장치(130-1)에 대한 장치 LBA들 0 내지(228-1)에 맵핑 될 수 있고, 호스트 LBA들(228~229-1)은 스토리지 장치(130-2)에 대한 장치 LBA들(0~228-1)에 등등 맵핑 될 수 있다. 또한, 호스트 LBA 내의 개별 비트들은 해당 데이터를 저장하는 적절한 스토리지 장치 및 장치 LBA를 결정하는데 사용될 수 있다: 예를 들어, 호스트 LBA의 하위 비트들을 사용하여 장치를 식별하고, 그 비트들을 스트라이핑하여 스토리지 장치에 의해 사용되는 장치 LBA를 생성한다. 그러나, 호스트 LBA들이 장치 LBA들에 맵핑되는 방법에 관계없이, 데이터가 저장되는 위치를 나타내는 두 개, 세 개 또는 잠재적으로 훨씬 더욱 다른 주소가 있을 수 있다.
물론, 스토리지 장치들이 동종일 것을 요구하지 않는다: 즉, 그것들은 상이한 크기들을 가질 수 있고, LBA들의 수가 다를 수 있다: 예를 들어, 그것들은 서로 상이한 장치 유형들일 수 있고, SSD들 및 하드 디스크 드라이브들이 혼합되어 있을 수도 있다.
설명의 단순화를 위해, 스토리지 장치에 제공되는 주소가 논리 블록 주소(예를 들어, 하드 디스크 드라이브)가 아니어도 "장치 LBA"라는 용어가 사용될 수 있다. "장치 LBA"가 데이터가 스토리지 장치에 저장된 데이터가 있는 실제 주소인 경우, 스토리지 장치들은 데이터에 액세스하기 전에 장치 LBA를 다른 주소에 매핑하지 않을 수 있다.
도 5로 다시 돌아가면, 스누핑 로직(525) 및 이레이저 코딩 컨트롤러(530)는 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)의 Look-Aside 이레이저 코딩 로직으로써 동작한다. 스누핑 로직(525)은 (예를 들어, 요청이 그것의 목적지로 전달되기 전에 가로챔으로써) 전송을 “스누핑”할 수 있고, 멀티 플렉서(540)를 통해 스누핑 로직(525)으로 전달 될 수 있는 캡처 인터페이스들(535-1~535-6)을 사용하여 적절한 목적지를 결정할 수 있다. 상술 한 바와 같이, 프로세서(110)는 지정된 용량(또는 특정 크기의 호스트 메모리 주소들의 블록)의 가상 스토리지 장치를 오직 “보고”, 호스트 LBA들(가상 스토리지 장치와 연관됨)을 기반으로 데이터를 읽거나 쓰는 명령을 발행한다. 스누핑 로직(525)은 이들 호스트 LBA들을 하나 이상의 특정 물리 스토리지 장치들 상의 장치 LBA들로 변환하고, 이에 따라 요청들을 지시하도록 전송들을 변경할 수 있다. 스누핑 로직(525)은 임의의 원하는 방식으로 이 변환을 관리 할 수 있다. 예를 들어, 스누핑 로직(525)은 Look-Aside 이레이저 코딩 로직이 동작하는 방식과 관련될 수 있는 인자들(예를 들어, (RAID 레벨과 같은) 그것 자체의 이레이저 코딩 방식, 스트라이프 크기, 스토리지 장치들의 수 등)에 따라 달라지는 장치 LBA를 이용하여 도 3의 스토리지 장치(130-1)에 호스트 LBA들의 제 1 범위를 매핑하고, 도 3의 스토리지 장치(130-2)에 호스트 LBA들의 제 2 범위를 매핑하는 등등의 테이블을 포함 할 수 있다.. 또는, 스누핑 로직(525)은 호스트 LBA 내의 특정 비트들을 사용하여 도 3의 스토리지 장치들(130-1~130-6) 중 어느 것에 해당 데이터를 저장할지를 결정할 수 있다: 예를 들어, 어레이가 단지 2 개의 스토리지 장치들을 포함하는 경우, 스누핑 로직(525)은 하위 비트(또는 논리 블록 주소의 다른 비트)를 사용하여 데이터가 제 1 또는 제 2 스토리지 장치 중 어느 것에 기록될지를 결정할 수 있다. (더 많은 스토리지 장치들이 어레이에 포함됨에 따라, 분명히 더 많은 비트들이 사용될 수 있고, 논리 블록 주소들에 존재하지 않는 스토리지 장치를 "식별"하는 비트들의 조합이 포함되지 않도록 주의를 기울여야 한다. 예를 들어, 도 3은 비트 값들(00000~10111)을 사용할 수 있는 총 24개의 스토리지 장치들(130-1~130-6)을 도시한다; 11000과 11111 사이의 비트 값들은 피해야한다.) 본 발명의 실시 예들은 호스트로부터 수신된 논리 블록 주소들을 (적절한) 스토리지 장치들 상의 블록 주소들에 맵핑하는 임의의 다른 원하는 접근법을 사용할 수 있다.
예를 들어, (이레이저 코딩을 팩터링(factoring)(고려) 한 후에) 스토리지 장치들(130-1~130-6) 전체에 걸친 전체 스트라이프를 채우기에 충분한 데이터를 갖는 쓰기 요청을 송신하는 도 1의 프로세서(110)를 고려하자. 스누핑 로직(525)은 데이터를 개별적인 논리 유닛들로 분할 할 수 있으며, 이하에서 상술되는 바와 같이 이레이저 코딩 컨트롤러(530)는 데이터를 제공하거나 수정할 수 있다. 스누핑 로직(525)은 적절한 데이터와 함께 스토리지 장치들(130-1~130-6) 각각에 예정된 하나의 전송을 생성 할 수 있다.
스누핑 로직(525)이 원래의 호스트 LBA를 해당 스토리지 장치에 적합한 장치 LBA로 대체하는 경우, 그 장치 LBA는 물리 블록 주소일 필요는 없다는 것을 유의해야 한다. 달리 말하면, 스누핑 로직에 의해 사용되는 장치 LBA는 그 자체가 다른 논리 블록 주소 일 수 있다. 이러한 구조는 물리 스토리지 장치가 적절한 자체 데이터 스토리지를 관리하는 것을 계속하도록 해준다. 예를 들어, 물리 스토리지 장치가 NVMe SSD인 경우, SSD는 NAND 플래시 메모리 칩들 중 하나에 제공된 장치 LBA와 PBA의 연결을 관리하기 위한 그것의 플래시 변환 계층을 사용하여, 데이터를 이동시켜 가비지 수집이나 마모 평형을 수행할 수 있다. 이러한 동작들은 스누핑 로직(525)의 인식 없이도 발생 할 수 있다. 그러나, 호스트에 의해 지시되지 않는 한 해당 스토리지 장치가 데이터를 재배치하지 않는 다면, 스누핑 로직(525)에 의해 제공된 장치 LBA는 스토리지 장치상의 물리 주소일 수 있다.
상술 한 바와 같이, 이레이저 코딩 컨트롤러(530)는 이레이저 코딩 방식을 실행할 수있다. 이레이저 코딩 방식에 따라, 이레이저 코딩 컨트롤러(530)는 (예를 들어, RAID 5 또는 RAID 6 이레이저 코딩 방식을 사용하는 경우) 적절한 패리티 데이터를 간단히 생성 할 수 있고, (도 1의 프로세서(110)에 의해 제공된 바와 같이) 원본 데이터는 그대로 둘 수 있다. 그러나, 본 발명의 일부 실시 예들에서, 이레이저 코딩 컨트롤러(530)는 원본 데이터를 수정할 수도 있다. 예를 들어, 이레이저 코딩 컨트롤러(530)는 도 3의 개별 스토리지 장치들(130-1~130-6)에 저장된 블록들이 오류가 발생해도 적절하게 읽어지도록 오리지널 데이터에 에러 정정 코드를 구현할 수 있다. 또는, 이레이저 코딩 컨트롤러(530)는 도 3의 스토리지 장치들(130-1~130-6)에 기록 된 데이터를 암호화하여, 도 3의 스토리지 장치들(130-1~130-6)에 기록된 데이터가 암호화 키 없이 읽혀질 수 없게 할 수 있다-또는 더 나쁜 경우, 도 1의 프로세서(110)가 데이터를 직접 기록하는 경우, 이레이저 코딩 컨트롤러(530)는 스토리지 장치들(130-1~130-6)이 손상된것으로 생각할 수 있다. 또는, 이레이저 코딩 컨트롤러(530)는 도 3의 각 스토리지 장치들(130-1~130-6)에 기록 된 데이터에 패리티 정보(또는 유사한 유형들의 정보)를 도입 할 수 있다. 이레이저 코딩 컨트롤러(530)에 의해 수행되는 바와 같이, 데이터에 대한 특정 동작들은 사용되는 이레이저 코딩 방식에 의존한다.
스누핑 로직(525) 및 이레이저 코딩 컨트롤러(530)는 임의의 원하는 방식으로 구현 될 수 있다. 예를 들어, 스누핑 로직(525) 및 이레이저 코딩 컨트롤러(530)는 적절한 소프트웨어가 저장된 프로세서를 사용하여 구현 될 수 있다. 그러나 PCIe 스위치들은 (일반적으로 많은 수의 기능들을 구현할 필요가 없는 PCIe 스위치와 같은 장치의 프로세서에서 실행되는 소프트웨어보다 전형적으로 빠른) 하드웨어 회로로 일반적으로 구현되기 때문에, 스누핑 로직(525)과 이레이저 코딩 컨트롤러(530)은 적절한 회로를 사용하여 구현 될 수 있다. 이 회로는 적절히 프로그래밍 된 FPGA(Field Programmable Gate Array), ASIC(Application-Specific Integrated Circuit) 또는 기타 원하는 하드웨어 구현을 포함 할 수 있다.
가장 기본적인 실시 예에서, Look-Aside 이레이저 코딩 로직은 스누핑 로직(525) 및 이레이저 코딩 컨트롤러(530)만을 사용하여 구현 될 수 있다. 그러나, Look-Aside 이레이저 코딩 로직에서 캐시(545) 및/또는 쓰기 버퍼(550)를 포함하는 것은 상당한 이점을 제공 할 수 있다.
캐시(545)는 가상 스토리지 장치에 저장된 데이터의 서브 세트를 저장할 수있다. 일반적으로, 캐시(545)는 전체 가상 스토리지 장치보다 용량이 작지만 액세스가 빠르다. 따라서, 일부 데이터를 캐시(545)에 저장함으로써, 캐시(545)에 대한 캐시 히트는 기본(기저) 물리 스토리지 장치로부터 데이터에 액세스하는 것보다 가상 스토리지 장치의 성능이 더 빨라질 수 있다. 예를 들어, 캐시(545)는 가상 스토리지 장치로부터 가장 최근에 액세스 된 데이터를 저장할 수 있으며, 오래된(stale) 데이터가 증가함에 따라 임의의 원하는 알고리즘(예를 들어, 가장 최근에 사용되거나 가장 자주 사용되는 알고리즘)을 사용하여 대체용 데이터를 식별할 수 있다. 캐시(545)는 DRAM, SRAM, MRAM 또는 임의의 다른 원하는 메모리 구조와 같은 임의의 원하는 메모리 구조를 사용하여 구현될 수 있다. 캐시(545)는 프로세서 내의 L1 또는 L2 캐시들에서 사용될 수 있는 것과 같은 종래의 메모리보다 빠른 메모리 구조를 사용하여 구현 될 수도 있다. 마지막으로, 캐시(545)가 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)의 일부로서 도시되었지만, 캐시(545)는 또한, 도 1의 메모리(115)에 저장 될 수도 있고, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)에 의해 액세스될 수 있다.
쓰기 버퍼(550)는 쓰기 요청을 신속하게 처리하는 메커니즘을 제공한다. 이레이저 코딩을 사용하여 다수의 물리 스토리지 장치들을 확장(포괄)하는 가상 스토리지 장치에 쓰기 동작을 수행하는 데 필요한 시간은 단일 물리 스토리지 장치에 대한 유사한 쓰기 요청보다 느릴 수 있다. 기록(쓰기) 동작을 수행하는 것은 동일한 블록 내의 다른 스토리지 장치들로부터 데이터를 판독하는 단계를 수반할 수 있으며, 이후에 새로운 데이터가 병합 될 수 있고, 그 다음에 병합 된 데이터는 적절한 스토리지 장치들에 다시 기록 될 수 있다. 병합을 수행하는 것은 패리티 또는 다른 코드 정보를 계산하는 것을 포함할 수도 있다. 또한 기본 물리 스토리지 장치가 다른 동작들(예를 들어, 읽기 요청을 처리하는 것)을 수행하여 바쁜 상태인 경우, 쓰기 요청이 또한 지연 될 수도 있다. 쓰기 요청이 완료되기를 기다리는 동안 도 1의 프로세서(110) 상에서 실행되는 소프트웨어를 지연시키는 것은 바람직하지 않을 수 있다. 따라서, 도 1의 프로세서(110)상에서 실행되는 소프트웨어를 차단하는 대신에, 스누핑 로직(525)이 쓰기 요청이 이미 완료되었다는 것을 도 1의 프로세서(110) 상에서 실행되는 소프트웨어에 알리는 동안, 쓰기 버퍼(550)는 기본 물리 스토리지 장치들에 대한 기록이 완료될 때까지 일시적으로 데이터를 저장할 수 있다. 이 접근법은 프로세서(110)에서 실행중인 소프트웨어에 쓰기가 완료되었음을 알리기 전에, 쓰기 동작이 완료되는 후 기입 (write-back) 캐시 정책과 비교되는 연속 기입(write-through) 캐시 정책과 유사하다. 캐시(545)와 마찬가지로, 쓰기 버퍼(550)는 DRAM, SRAM, MRAM 또는 L1 또는 L2 캐시 구조들과 같은 임의의 원하는 메모리 구조를 사용하여 구현 될 수 있다.
쓰기 동작을 수행하는 일부로서, Look-Aside 이레이저 코딩 로직은 쓰기 동작을 완료하는데 필요한 임의의 데이터가 현재 캐시(545)에 있는지 여부를 체크 할 수 있다. 예를 들어, 도 1의 프로세서(110)가 가상 스토리지 장치에 쓰기 요구를 전송하면, 이레이저 코딩 방식은 패리티 또는 다른 코드 정보를 계산하기 위해 전체 스트라이프가 판독 될 것을 요구할 수 있다. 그 데이터의 일부(또는 전부)가 캐시(545)에 존재하는 경우, 데이터는 기본 물리 스토리지 디바이스들로부터 데이터를 독출하는 것이 아니라 캐시(545)로부터 액세스될 수 있다. 또한, 캐시 정책은 데이터가 단기간에 다시 요구 될 수 있는 경우에, 기록 될 데이터가 캐시(545)에도 캐시되어야된다고 제안 할 수 있다.
한편, 도 5는 캐시(545) 및 쓰기 버퍼(550)를 별개의 요소로서 도시하지만, 본 발명의 실시 예는 양자를 단일 요소(단지 "캐시"로 지칭 될 수 있음)로 결합 할 수있다. 본 발명의 실시 예에서, 캐시는 캐시에 저장된 데이터가 "클린(clean)"인지 "더티(dirty)"인지를 나타내는 비트들을 포함 할 수 있다. "클린" 데이터는 기본 물리 스토리지 장치들에 마지막으로 기록 된 이후로 독출되었지만 수정되지 않은 데이터를 나타낸다. "더티"인 데이터는 기본 물리 스토리지 장치들에 마지막으로 기록 된 이후에 수정되었다. 캐시에 "더티" 데이터가 포함 된 경우, Look-Aside 이레이저 코딩 로직은 캐시 정책에 따라 데이터가 캐시에서 제거 될 때 "더티" 데이터를 기본 스토리지 장치들에 다시 기록할 필요가 있다. 또한, 본 발명의 실시 예들은 캐시(545), 쓰기 버퍼(550), 모두(개별적으로 또는 단일 요소로 결합 됨)를 포함하거나 둘 다 포함하지 않을 수 있다.
상술 한 바와 같이, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)의 Look-Aside 이레이저 코딩 로직은 기본 물리 스토리지 장치들로부터 가상 스토리지 장치를 "생성"할 수 있고, 이것은 도 1의 프로세서(110)가 도 3의 물리 스토리지 장치들(130-1~130-6)에 대한 직접 액세스를 얻는 경우 문제될 수 있다. 따라서, 도 1의 기계(105)는 초기에 부팅(즉, 시작 또는 전원 켜기)하고 액세스 가능한 다양한 PCIe 장치들을 열거하려고 시도하는 경우, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 그것에 부착된 스토리지 장치들과 함께 Look-Aside 이레이저 코딩 로직을 사용하도록 결정할 수 있다. 이 경우, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)로부터 임의의 PCIe 장치들 다운스트림의 열거를 방지해야 한다. 이러한 열거를 방지함으로써, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 도 3의 스토리지 장치들(130-1~130-6) 상의 데이터에 직접적으로 액세스 할 수 있는 도 1의 프로세서(110)를 고려하지 않고(이레이저 코딩 방식에서 사용 된 데이터를 손상시킬 수 있음) 가상 스토리지 장치를 "생성"한다. 그러나, 도 9 및 도 10을 참조하여 아래에서 논의되는 바와 같이 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)가 PCIe 장치들의 다운스트림 열거를 허용해야하는 상황들이 있을 수 있다.
스누핑 로직(525)은 또한 PPU(520)에 구성 명령들을 전달할 수 있다. 이와 같이, 스누핑 로직(525)은 또한 PCIe 스위치 코어(515)를 PPU(520)와 연결하기 위한 목적으로 PCIe-to-PCIe 스택으로서 동작 할 수 있다.
마지막으로, 스누핑 로직(525)은 도 1의 프로세서(110)로부터 (아마도 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125) 상의 핀을 통해) 이레이저 코딩 인에이블 신호(555)를 수신 할 수 있다. 이레이저 코딩 인에이블 신호(555)는 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)에서 이레이저 코딩 로직을 인에이블 및 디스인에이블시키는 것을 가능하게 하는데 사용될 수 있다.
도 6은 본 발명의 다른 실시 예에 따른 Look-Through 이레이저 코딩 로직을 포함하는 PCIe 스위치의 세부 사항들을 도시한다. 도 5 및 도 6과 비교하여 알 수있는 바와 같이, 도 5의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)와 도 6의 Look-Through 이레이저 코딩 로직을 포함하는 PCIe 스위치(605)에서, Look-Aside 이레이저 코딩 로직과 Look-Through 이레이저 코딩 로직과의 주요 차이점은 이레이저 코딩 로직이 배치되는 곳이다. 도 5의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)에서, 이레이저 코딩 로직은 PCIe 스위치의 "측면"에 있고, 반면에 도 6의 Look- Through 이레이저 코딩 로직을 포함하는 PCIe 스위치(605)에서는 이레이저 코딩 로직은 PCIe 스위치와 동일 선상에(“inline”) 있다.
Look-Through 이레이저 코딩 로직과 비교하여 Look-Aside 이레이저 코딩 로직을 사용하는 것은 기술적 이점과 단점이 있다. 도 5의 Look-Aside 이레이저 코딩 로직은 호스트로부터의 데이터의 방향 전환을 가로 채고 관리하기 위해 스누핑 로직(525)이 필요하기 때문에 보다 복잡한 구현이다. 대조적으로, 호스트 및 도 3의 스토리지 장치들(130-1~130-6) 사이의 모든 데이터는 이레이저 코딩 컨트롤러(530)를 통과하기 때문에, 도 6의 Look- Through 이레이저 코딩 로직은 구현이 더 간단하다. 반면에, 이레이저 코딩 로직이 디스인에이블되되면, Look-Aside 이레이저 코딩 로직은 PCIe 스위치(125)의 동작에 추가 지연을 도입하지 않는다. 대조적으로, 도 6의 Look-Through 이레이저 코딩 로직은 PCIe 엔드 포인트로써 동작 할 수 있다. 도 6의 Look- Through 이레이저 코딩 로직은 호스트 및 도 3의 스토리지 장치들(130-1~130-6) 사이의 데이터를 버퍼링시킬 수 있고, 이는 통신의 지연을 증가시킬 수 있다. 도 6의 Look- Through 이레이저 코딩 로직에서, 이레이저 코딩 컨트롤러(530)는 또한 프레임 버퍼, 경로 테이블, 포트 조정 로직 및 스케줄러(도 6에 미도시)와 같은 요소들을 포함 할 수 있다: 전형적으로 PCIe 스위치 코어(515) 내에 포함되는 요소들.
또한, 일반적으로 PCIe 스위치는 (호스트로의) 업스트림 및 (스토리지 장치들 및 기타 연결된 장치들로의) 다운스트림 트래픽에서 동일한 수의 포트들을 사용한다. 예를 들어, PCIe 스위치(605)가 총 96개의 포트들을 포함하면, 일반적으로 업스트림 트래픽에는 48개가 사용되고 다운스트림 트래픽에는 48개가 사용된다. 그러나, 도 6의 Look-Through 이레이저 코딩 로직이 인에이블되면, 이레이저 코딩 컨트롤러(530)는 모든 다운스트림 장치들을 가상화 할 수 있다. 이러한 상황에서, 일반적으로 호스트와의 통신에는 단지 16개 또는 아마도 32개의 업스트림 포트들이 필요하다. PCIe 스위치(605)가 32개 또는 64개 보다 많은 포트들을 포함하는 경우, 추가적인 포트들은 가상 스토리지 장치의 용량을 증가시키는 데 사용될 수 있는 추가적인 다운스트림 장치들을 연결하는 데 사용될 수 있다. 이를 위해, 도 6의 이레이저 코딩 컨트롤러(530)는 호스트와 통신하기 위해 불투명 브리지(NTB) 포트들을 사용할 수 있다.
도 6은 Look-Through 이레이저 코딩 로직을 포함하는 PCIe 스위치(605)를 도시한다. 그러나, 본 발명의 실시 예는 PCIe 스위치(605)로부터 Look-Through 이레이저 코딩 로직을 분리 할 수있다. 예를 들어, Look-Through 이레이저 코딩 로직은 FPGA 또는 ASIC를 사용하는 PCIe 스위치(605)와 별도의 구성으로써 구현 될 수 있다.
그러나, 도 5에 도시 된 Look-Aside 이레이저 코딩 로직과 도 6에 도시된 Look-Through 이레이저 코딩 로직 사이에는 구현상 및 기술상의 차이점들이 있는 반면, 기능적으로 이레이저 코딩 로직들은 모두 유사한 결과들을 달성한다. 따라서, 도 5에 도시 된 Look-Aside 이레이저 코딩 로직과 도 6에 도시 된 Look-Through 이레이저 코딩 로직은 필요에 따라 교체될 수 있다. 이 문서에서 Look-Aside 이레이저 코딩 로직에 대한 어떤 참조도 Look-Through 이레이저 코딩 로직을 포함하도록 의도된다.
도 7 내지 도 10은 도 1의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)을 사용하기 위한 다양한 토폴로지를 도시한다. 그러나, 사용중인 토폴로지에 관계없이, 도 1의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)의 동작은 동일하다: 다양한 연결된 스토리지 장치들에 연결성을 제공하고 해당 스토리지 장치들에서 이레이저 코딩을 지원하기 위한.
도 7은 본 발명의 일 실시 예에 따라, 도 1의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)를 사용하기 위한 제 1 토폴로지를 도시한다. 도 7에서, 도 1의 기계(105)의 분리 된 구성으로써 구현 될 수 있는 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)가 도시된다. 즉, 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 도 1의 프로세서(110) 또는 스토리지 장치(130)와 같은 임의의 다른 구성과 별도로 제조 및 판매 될 수있다.
Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 스토리지 장치(130)에 연결될 수 있다. 도 7에서, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 이레이저 코딩을 지원하지 않을 수 있는 단 하나의 스토리지 장치에만 접속된 것으로 도시된다: 이레이저 코딩은 스트라이핑, 청크(chunking), 그룹화 및 패리티 또는 코드 정보 사용을 수행하기 위해 적어도 두 개의 스토리지 장치들 또는 스토리지 장치의 적어도 두 부분을 요구한다. 그러나, Look-Aside 이레이저 코딩 로직을 갖는 단일 스토리지 장치 PCIe 스위치(125)로도 몇몇 이점을 제공할 수 있다. 예를 들어, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 서비스들이 스토리지 장치(130)에 의해 선천적으로 제공되지 않는 경우 스토리지 장치(130)와 함께 에러 정정 코드를 사용하거나 스토리지 장치(130)에 저장된 데이터를 암호화하는 것을 지원할 수 있다.
스토리지 장치(130)는 또한 FPGA(705)에 연결될 수 있다. FPGA(705)는 가속을 지원할 수 있다. 즉, 데이터가 처리되고 그 다음에 폐기되어야 하는 상황이 있을 수 있다. 처리를 수행하기 위해 모든 데이터를 도 1의 프로세서(110)에 로딩하는 것은 많은 시간과 비용이 소요될 수 있다. 데이터에 더 가까운 계산은 더 쉽게 수행될 수 있다. FPGA(705)는 계산을 수행하기 위해 도 1의 프로세서(110)에 로드 될 데이터에 대한 필요성을 피하면서, 스토리지 장치에 더 가까운 이러한 계산을 수행하는 것을 지원할 수 있다: 이 개념은 "가속"으로 지칭된다. FPGA 기반 가속화는 여기에서 참조로 인용되는 2018년 3월 13일자로 출원된 미국 가출원 제 62/642,568 호 및 2018년 3월 9일자로 출원된 미국 가출원 제 62/641,267호 및 2018년 3월 5일자로 출원된 미국 가출원 제 62/638,904호에 대해 우선권 주장하며 2018년 9월 5일자로 출원된 미국 출원 제 16/122,865호에 개시되며, 또한 여기에서 참조로 인용되는 2018년 9월 6일자로 출원된 미국 출원 제 16/124,179호 및 2018년 9월 6일자로 출원된 미국 출원 제 16/124,183호 및 2018년 9월 5일자로 출원된 미국 가출원 제 16/122,865호에 개시된다. 가속화의 목적은 데이터를 도 1의 프로세서(110)로 전송하지 않고 처리하는 것이기 때문에, 도 7은 스토리지 장치(130)에 더 가까운 FPGA(705)를 도시한다. 하지만, 도 7에서 도시되는 특정 열거가 요구되지 않는다는 것에 유의하라: FPGA(705)는 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)와 스토리지 장치(130) 사이에 위치 될 수 있다.
데이터 가속(data acceleration) 이외에, FPGA(705)는 다른 기능성들을 제공하여 스토리지 장치(130)를 지원할 수 있다. 에를 들어, FPGA(705)는 동일한 데이터가 스토리지 장치(130)에 저장되는 횟수를 감소시키는 스토리지 장치(130)에 대한 데이터 중복 제거 기능들(data deduplication functions)을 구현할 수 있다. FPGA(705)는 특정 데이터가 스토리지 장치(130)에 두번 이상 저장되었는지를 판별하고, 다양한 논리 블록 어드레스들(또는 데이터를 식별하기 위해 호스트에 의해 사용되는 다른 정보) 사이의 연관성을 구성하고, 데이터가 스토리지 장치(130)에 저장된 경우, 추가적인 사본을 제거할 수 있다.
또는, FPGA(705)는 스토리지 장치(130)의 동작에서 에러들을 통한 데이터 손실을 방지하는 데이터 정정 코드(Error Correcting Code) 삽입, 또는 종단 보호(end-to-end prot4ection)을 위한 CRC(Cyclic Redundancy Correction)을 사용하는 T10DIF(Data Integrity Field)과 같이 스토리지 장치(130)에 데이터 신뢰성 기능들(data integrity functions)을 구현할 수 있다. 이러한 방식에서, FPGA(705)는 원본 데이터를 복원하고 전송하는 중에 데이터 또는 스토리지 장치(130) 상의 데이터를 읽거나 쓰는 중에 에러가 있음을 검출할 수 있다. FPGA(705)는 데이터 신뢰성 기능이 제공되는 것을 호스트가 인지하는 것 없이 데이터 신뢰성 기능을 구현할 수 있다. 호스트는 오직 데이터 자체만 식별할 수 있으며, 에러 정정 코드들(Error Correcting Codes)을 식별할 수 없다.
또는 FPGA(705)는 스토리지 장치(130)상의 데이터를 액세스할 수 있는 비인증 사용자로부터 보호를 위한 스토리 장치(130) 상의 데이터 암호화 기능들(data encryption functions)을 구현할 수 있다. 적절한 암호 키가 제공되는 것없이, FPGA(705)로부터 반환된 데이터는 요청자(requestor)에게 무의미할 수 있다. 호스트는 데이터를 읽거나 기입할 때 사용될 암호 키를 제공할 수 있다. 또는 FPGA(705)는 자동으로 데이터 암호화 및 복호화(encryption and decryption)을 수행할 수 있다. FPGA(705)는 암호 키들을 저장할 수 있고, (호스트를 대신하여 그것들을 생성할 수 있음.) 누가 데이터를 요청하는지를 기반으로 사용될 적절한 암호 키를 판별할 수 있다.
또는 FPGA(705)는 스토리지 장치(130)에 데이터를 저장하기 위해 요구되는 총 공간을 감소시키는 스토리지 장치(130) 상의 데이터 압축 기능들(data compression functions)을 구현할 수 있다. 스토리지 장치(130)로 데이터를 기입할 때, FPGA(705)는 호스트로부터 제공된 데이터를 더 작은 크기의 스토리지로 압축하고, 이후에 압축된 데이터를 (스토리지 장치(130)로부터 데이터를 읽을 때 원본 데이터를 복원하는데 필요한 정보와 함께) 저장할 수 있다. 스토리지 장치(130)로부터 데이터를 읽을 때, FPGA(705)는 압축된 데이터를 (압축된 데이터로부터 원본 데이터를 복원하는데 필요한 정보와 함께) 읽고, 압축을 제거하여 원본 데이터를 복원할 수 있다.
데이터 중복 제거, 데이터 신뢰성, 데이터 암호화, 및 데이터 압축의 적절한 구현들이 사용될 수 있다. 본 발명의 실시 예들은 이러한 기능들의 특정 구현에 제한되지 않는다.
FPGA(705)는 의도된 바와 같은 스토리지 장치(130) 상의 기능들의 조합을 구현할 수 있다. FPGA(705)는 데이터 압축 및 데이터 신뢰성 모두를 구현할 수 있다. (이는 데이터 압축이 데이터의 에러 민감도를 증가시킬 수 있기 때문에, 스토리지 장치(130)에 저장된 데이터의 싱글 에러는 사용할 수 없는 데이터의 크기를 증가시킬 수 있다. FPGA(705)는 (가능한 데이터의 작은 스토리지를 사용하면서 데이터를 보호하기 위해) 데이터 암호화 및 데이터 압축 모두를 수현할 수 있다. 둘 또는 그 이상의 기능들의 다른 조합들은 FPGA(705)에 의해 제공될 수 있다.
전반적인 동작의 맥락에서, 이러한 긴으들을 구현할 때, FPGA(705)는 적절한 소스로부터 데이터를 읽을 수 있다. "소스(source)"의 용어는 단수이나, 본 발명의 실시 예들은, 적절한 경우, (다수의 스토리지 장치들과 같은) 다수의 소스들로부터 데이터를 읽을 수 있다. FPGA(705)는 데이터 가속, 데이터 집적, 데이터 암호화, 및/똔느 데이터 압축과 같은 데이터에 대한 적절한 동작을 수행할 수 있다. FPGA(705)는 동작들의 결과들을 사용하여 적절한 대응(action), 예를 들어, 도 1의 호스트(105)로 결과들을 전송하는 것, 또는 스토리지 장치(130)로 데이터를 기입하는 것을 취할 수 있다.
상술된 기능성들(functionalities)이 도 7의 FPGA(705)를 참조하여 설명되었으나, 본 발명의 실시 예들은 FPGA를 포함하는 시스템의 어느 부분에서든, 이러한 기능성들을 포함할 수 있다. 더욱이, 본 발명의 실시 예들은 "원거리(distant)"의 스토리지 장치로부터 데이터를 액세스하는 FPGA(705)를 포함할 수 있다. 예를 들어, 도 3으로 돌아가서, 스토리지 장치(130-1)가 FPGA(705)와 유사한 FPGA를 포함하나, 스토리지 장치(130-2)는 이러한 스토리지 장치를 포함하지 않는 것으로 가정한다. 스토리지 장치(130-1)에 포함된 FPGA는 스토리지 장치(130-2)로 요청들을 전송함으로써, 스토리지 장치(130-2)로 그것의 기능성들을 적용하는데 사용될 수 있다. 예를 들어, 스토리지 장치(130-1)의 FPGA가 데이터 가속을 제공하는 경우, 스토리지 장치(130-1)의 FPGA는 스토리지 장치(130-2)로부터 데이터를 읽기 위한 요청들을 전송하고, 적절한 가속을 수행하고, 이후에, (도 1의 호스트(105)와 같은) 적절한 목적지로 결과들을 전송할 수 있다.
도 7에서(그리고, 아래의 도 8 내지 도 10에 도시된 토폴로지들에서), Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 이레이저 코딩에 적합하지 않은 장치들에 부착될 수 있다. 예를 들어, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 빌트인(built-in) 이레이저 코딩 기능을 갖는 다른 스토리지 장치들 또는 스토리지 장치들이 아닌 도 7의 FPGA(705) 또는 GPU와 같은 장치들에 부착될 수 있다. 이러한 모든 장치들은 이레이저 코딩(또는 적어도 Look-Aside 이레이저 코딩 로직을 갖는 PCIe 스위치(125)에 의한 이레이저 코딩)에 대해 자격이 없는 장치로서 기술될 수 있다.
Look-Aside 이레이저 코딩 로직을 갖는 PCIe 스위치(125)가 이레이저 코딩에 대해 자격없는 장치들에 접속 될 때, 시스템은 사용될 수 있는 다양한 대안법들을 갖는다. 본 발명의 일 실시 예에서, 이레이저 코딩에 대한 자격없는 임의의 장치들의 포함은 Look-Aside 이레이저 코딩 로직을 갖는 PCIe 스위치(125)의 Look-Aside 이레이저 코딩 로직을 디스인에이블 시킬 수 있다. 따라서, 예를 들어, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)가 도 7의 FPGA(705) 또는 GPU 또는 네이티브(native) 이레이저 코딩 로직을 갖는 스토리지 장치에 연결되면, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)에 연결된 스토리지 장치들 중 어느 것도 이레이저 코딩과 함께 사용될 수 없다. Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)의 Look-Aside 이레이저 코딩 로직을 디스인에이블시키는 결정은 필연적으로 동일한 섀시 또는 다른 섀시 내의 Look-Aside 이레이저 코딩 로직을 포함하는 다른 PCIe 스위치로 변환되는 것은 아님에 유의하라. 예를 들어, 도 3은 Look-Aside 이레이저 코딩 로직을 포함하는 2개의 PCIe 스위치들(125, 320)을 도시하며, 그 중 하나는 인에이블된 Look-Aside 이레이저 코딩 로직을 갖고, 다른 하나는 디스인에이블된 Look-Aside 이레이저 코딩 로직을 갖는다.
본 발명의 다른 실시 예는 이레이저 코딩에 자격 없는 장치들을 디스인에이블 시킬 수 있고, 이들을 마치 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)로 전혀 연결되지 않은 것처럼 처리한다. 본 발명의 실시 예에서, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 스토리지 장치(130)에 대한 Look-Aside 이레이저 코딩 로직을 인에이블시킬 수 있으며, 이레이저 코딩에 자격있는 임의의 다른 스토리지 장치들은 마치 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)에 연결되 않은 것처럼 비활성될 수 있다.
본 발명의 또 다른 실시 예에서, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 Look-Aside 이레이저 코딩 로직에 의해 커버 될 수 있는 스토리지 장치들을 위한 Look-Aside 이레이저 코딩 로직을 인에이블시킬 수 있지만, 이레이저 코딩에 대해 액세스 할 자격이 없는 다른 장치들을 인에이블시킬 수 있다. 본 발명의 이러한 실시 예는 가장 복잡한 구현이다: Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 어떤 장치가 이레이저 코딩에 적합하고 어떤 장치가 적합하지 않은지를 결정할 필요가 있고, 그 다음 트래픽이 가상 스토리지 장치로 지정될지(이 경우, 트래픽은 Look-Aside 이레이저 코딩 로직에 의해 인터셉트 됨), 지정되지 않을지(이 경우, 트래픽은 그것의 기존 목적지로 전달됨)에 대해 결정하기 위해 트래픽을 분석할 필요가 있다.
기계(105)가 설치된 장치들의 완전한 기능을 제공하지 못하는 본 발명의 실시 예에서-즉, 이레이저 코딩에 대해 자격 없는 장치들 또는 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)에 의해 디스인에이블되는 장치들의 존재로 인해 이레이저 코딩이 디스인에이블되는 본 발명의 실시 예들-기계(105)는 사용자에게 이 사실을 통지 할 수 있다. 이 통지는 도 1의 프로세서(110), 도 3의 BMC(325) 또는 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)에 의해 제공될 수 있다. 일부 기능이 디스인에이블되었다는 것을 사용자에게 알리는 것 이외에, 통지는 또한 사용자에게 기계(105)를 어떻게 재구성하여 추가된 기능을 허용 할지를 사용자에게 알려줄 수 있다. 예를 들어, 통지는 이레이저 코딩에 대해 자격 없는 장치들이 도 3의 미드 플레인(305)의 특정 슬롯들에 연결될 것을 -아마도 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(320)에 연결된 슬롯들-그리고 이레이저 코딩에 대해 자격 있는 스토리지 장치들은 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)에 연결된 슬롯들과 같은 다른 슬롯들에 연결될 것을 제안 할 수 있다. 이러한 방식으로, 이레이저 코딩에 대해 자격 있는 적어도 일부 스토리지 장치들은 이레이저 코딩에 대해 자격 없는 다른 장치들에 대한 액세스를 차단하지 않고 이레이저 코딩 방식으로부터 이점을 얻을 수 있다.
도 8은 본 발명의 다른 실시 예에 따라, 도 1의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)를 사용하기 위한 제 2 토폴로지를 도시한다. 도 8에서, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 FPGA(705) 내에 위치 될 수 있다: 즉, FPGA(705)는 또한 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)를 구현할 수있다. FPGA(705) 및 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 스토리지 장치들(130-1~130-4)에 연결될 수 있다. 반면, 도 8은 4개의 스토리지 장치들(130-1~130-4)에 연결된 FPGA(705) 및 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)를 도시하지만, 본 발명의 실시 예들은 임의의 수의 스토리지 장치들(130-1~130-6)을 포함 할 수 있다.
전형적으로, 도 8에 도시 된 토폴로지는 도시 된 모든 구성들을 포함하는 단일 쉘 또는 하우징 내에 구현 될 수 있다(SSD들(130-1~130-4)은 독립적인 SSD들이 아닌 별도의 플래시 메모리들 일 수 있다). 즉, 별도의 구성들로써 판매되는 것이 아니라, 도 8에 도시된 전체 구조는 단일 유닛으로 판매 될 수 있다. 그러나, 본 발명의 실시 예는 한 쪽 끝에는 도 1의 기계(105)(아마도 도 3의 미드 플레인(305)으로)에 연결되는 라이저(riser) 카드를 포함 할 수 있으며, 다른 쪽 끝에는 스토리지 장치들(130-1~130-4)에 연결하기 위해 U.2, M.3 또는 SFF-TA-1008 커넥터와 같은 커넥터들을 포함할 수 있다. 그리고, 도 8은 FPGA(705)의 일부로서 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)를 보여 주고 있지만, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 또한 스마트 SSD의 일부로서 구현 될 수 있다.
도 9는 도 1의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)를 사용하기 위한 제 3 토폴로지를 도시한다. 도 9에서, 최대 24개의 스토리지 장치들(130-1~130-6)을 사이에서 연결하는 Look-Aside 이레이저 코딩 로직을 포함하는 두 개의 PCIe 스위치들(125, 320)이 도시된다. 도 3을 참조하여 전술 한 바와 같이, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들(125, 320) 각각은 스토리지 장치들(130-1~130-6) 중 하나와 통신하기 위해 각 방향으로 사용되는 4개의 PCIe 레인들을 갖는 96개의 PCIe 레인들을 포함 할 수 있다: Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들(125, 320) 각각은 최대 12개의 스토리지 장치를 지원할 수 있다. Look-Aside 이레이저 코딩 로직을 포함하는 다수의 PCIe 스위치들(125, 320)에 의해 지원되는 스토리지 장치들에 걸쳐 이레이저 코딩을 지원하기 위해, Look-Aside 이레이저 코딩 로직을 포함하는 하나의 PCIe 스위치는 모든 장치들에 걸쳐 이레이저 코딩을 담당하도록 지정될 수 있으며, 인에이블된 Look-Aside 이레이저 코딩 로직을 가질 수 있다. Look-Aside 이레이저 코딩 로직을 포함하는 다른 PCIe 스위치(320)는 디스인에이블된 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치로써 전적으로 동작 할 수 있다. 이레이저 코딩을 처리하기 위해 어떤 PCIe 스위치가 선택되어야하는지에 대한 선택은 임의의 원하는 방식으로 수행 될 수 있다: 예를 들어, 2개의 PCIe 스위치들은 그것들 사이에서 이를 협상 할 수 있거나, 첫번째로 열거된 PCIe 스위치는 이레이저 코딩을 처리하도록 지정될 수 있다. 이레이저 코딩을 처리하도록 선택된 PCIe 스위치는 (PCIe 스위치들 모두에 걸쳐 있는) 가상 스토리지 장치를 보고 할 수 있는 반면, 이레이저 코딩을 처리하지 않는 PCIe 스위치는 (도 1의 프로세서(110)가 이레이저 코딩 방식의 일부인 스토리지 장치들로 액세스를 시도하는 것을 방지하기 위해) 다운스트림 장치들을 보고하지 않을 수 있다.
Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들(125, 320) 모두가 동일한 섀시 내에 있을 수 있지만, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들(125, 320)이 상이한 섀시 내에 있을 수 있음에 유의하라. 즉, 이레이저 코딩 방식은 다수의 섀시에서 스토리지 장치들을 확장(포괄) 할 수 있다. 요구되는 것은 다양한 섀시의 PCIe 스위치들이 이레이저 코딩 방식의 일부가 될 스토리지 장치들이 있는 곳에 대해 서로 협상 할 수 있어야 한다는 것이다. 또한, 본 발명의 실시 예는 Look-Aside 이레이저 코딩 로직을 포함하는 2개의 PCIe 스위치들(125, 320)로 제한되지 않는다: 이레이저 코딩 방식에 포함된 스토리지 장치들은 Look-Aside 이레이저 코딩 로직을 포함하는 임의의 수의 PCIe 스위치들(125, 320)에 연결될 수 있다.
호스트 LBA들은 임의의 원하는 방식으로 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들(125, 320)로 분할 될 수 있다. 예를 들어, 호스트 LBA의 최하위 비트는 어떤 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125, 또는 320)가 그 호스트 LBA를 포함하는 데이터를 저장하는 스토리지 장치를 포함하는지를 식별하는데 사용될 수 있다. Look-Aside 이레이저 코딩 로직을 포함하는 2개 이상의 PCIe 스위치들을 사용하면, 다수의 비트들은 어떤 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치가 데이터를 저장하는 스토리지 장치를 관리하는지를 결정하기 위헤 사용될 수 있다. Look-Aside 이레이저 코딩 로직을 포함하는 적절한 PCIe 스위치가 식별되면(그리고 도 5의 스누핑 로직(525)이 전송을 수정한 경우), 전송은 Look-Aside 이레이저 코딩 로직을 포함하는 적절한 PCIe 스위치로 라우팅 될 수 있다(전송이 인에이블된 Look-Aside 이레이저 코딩 로직을 포함하는 Look-Aside 이레이저 코딩 로직을 갖는 PCIe 스위치에 연결된 스토리지 장치로 향하지 않는다는 것을 가정).
본 발명의 다른 실시 예에서, Look-Aside 이레이저 코딩 로직을 포함하는 단일 PCIe 스위치가 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들 모두에 연결된 모든 스토리지 장치들을 가상화하는데 책임이 있는 대신, Look-Aside 이레이저 코딩 로직을 포함하는 각 PCIe 스위치는 별도의 가상 스토리지 장치(별도의 이레이저 코딩 도메인을 포함)를 생성 할 수 있다. 이러한 방식으로, 상이한 이레이저 코딩 도메인들은 상이한 고객들을 위해 생성될 수 있지만, 용량은 더 적을 수 있다.
도 9는 또한 본 발명의 다른 실시 예를 나타낼 수있다. 또한, 도 9는 스토리지 장치들(130-1~130-6)만이 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들(125, 320)에 연결된다는 것을 의미하지만, 위에서 언급하였듯이 본 발명은 이에 한정되지 않고 모든 스토리지 장치들(130-1~130-6)이 이레이저 코딩 방식과 함께 사용될 수 있다는 것을 의미한다. Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들(125, 320)은 그것들에 연결된 이레이저 코딩에 대해 자격 없는 장치들을 가질 수 있다. Look-Aside 이레이저 코딩 로직을 포함하는 상이한 PCIe 스위치(125) 아래에서 그룹화되는 이레이저 코딩에 대해 자격있는 스토리지 장치들을 포함하는 이러한 장치들은 Look-Aside 이레이저 코딩 로직을 포함하는 단일 PCIe 스위치 아래에서 그룹화될 수 있다. 이러한 방식으로, 도 1의 기계(105)의 최적의 기능은 Look-Aside 이레이저 코딩 로직을 포함하는 하나의(또는 일부) PCIe 스위치가 Look-Aside 이레이저 코딩 로직을 인에이블시키고, Look-Aside 이레이저 코딩 로직을 포함하는 하나의(또는 일부) PCIe 스위치가 Look-Aside 이레이저 코딩 로직을 디스인에이블시킴으로써 달성될 수 있다.
도 10은 본 발명의 또 다른 실시 예에 따라, 도 1의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)를 사용하기 위한 제 4 토폴로지를 도시한다. 도 10에서, 도 9와 비교되는 것과 같이, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들(125, 320, 1005)은 계층적으로 구성될 수있다. 계층의 최상부에 있는 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 계층 내의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125) 아래의 모든 스토리지 장치들에 대한 이레이저 코딩을 관리 할 수 있으므로, 인에이블된 Look-Aside 이레이저 코딩 로직을 가질 수 있다. 한편, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들(320, 1005)은 (그것들의 스토리지 장치들은 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)의 Look-Aside 이레이저 코딩 로직에 의해 관리되기 때문에) 그것들의 디스인에이블된 Look-Aside 이레이저 코딩 로직을 가질 수 있다.
도 10은 2단계 계층 구조로 구성된 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치들(125, 320, 1005)을 도시하는 반면, 본 발명의 실시 예는 포함된 PCIe 스위치들의 수 또는 이들의 계층적 구성에 제한되지 않는다. 따라서, 본 발명의 실시 예는 임의의 원하는 계층 구조로 배열된 Look-Aside 이레이저 코딩 로직을 포함하는 임의의 수의 PCIe 스위치들을 지원할 수 있다.
도 1 내지 도 10을 참조하여 전술된 본 발명의 실시 예는, 단일-포트 스토리지 장치들에 집중한다. 그러나, 본 발명의 실시 예들은 Look-Aside 이레이저 코딩 로직을 포함하는 다수의 PCIe 스위치들과 통신하는 하나 (또는 그 이상의) 스토리지 장치인 듀얼 포트 스토리지 장치들로 확장 될 수 있다. 본 발명의 이러한 실시 예들에서, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)가 듀얼 포트 스토리지 장치와 통신 할 수 없다면, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 스토리지 장치와의 통신을 시도하기 위해 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(320)로 전송을 송신할 수 있다. Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(320)는 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)를 스토리지 장치와 통신하도록 하는 브리지와 같이 효과적으로 동작한다.
본 발명의 실시 예는 또한 스토리지 장치의 고장을 감지하고 처리하는 것을 지원할 수있다. 예를 들어, 다시 도 4를 고려하고, 스토리지 장치(130-1)가 고장났다고 가정한다. 스토리지 장치(130-1)는 여러가지 이유들로 실패 할 수 있다: 전력 급증(Power surge)은 전자 장치를 손상시킬 수 있다. (스토리지 장치(130-1) 내부 또는 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)와 스토리지 장치(130-1) 사이의 연결 내의) 배선은 고장날 수도 있고, 스토리지 장치(130-1)는 너무 많은 오류를 감지하여 자체적으로 그것 자신을 종료시킬 수 있고, 스토리지 장치(130-1)는 다른 이유로 고장났을 수도 있다. 스토리지 장치(130-1)는 사용자에 의해 (아마도 더 새롭고 보다 신뢰성 있는, 또는 더 큰 스토리지 장치로 그것을 교체하기 위해) 그것의 슬롯으로부터 제거 될 수도 있다. 이유가 무엇이든, 스토리지 장치(130-1)는 이용 불가능하게 될 수있다.
Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 스토리지 장치(130-1)에 대한 커넥터 상의 Presence 핀을 통해 스토리지 장치(130-1)의 고장을 감지 할 수 있다. 스토리지 장치(130-1)가 섀시로부터 제거되거나 스토리지 장치(130-1)가 종료되면, 이는 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)에서 인터럽트를 트리거할 수 있는 커넥터상의 Presence 핀을 통해 더 이상 자신의 존재를 주장(행사) 할 수 없다. 또한, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)(또는, 도 3의 BMC(325))는 스토리지 장치(130-1)에 임시 메시지를 전송하여 그것이 여전히 활성 상태(때때로 “하트 비트(heart beat)”라고 불리는 과정)인지 확인할 수 있다: 스토리지 장치(130-1)가 그러한 메시지들에 응답하지 않으면, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125) 또는 도 3의 BMC(325)는 스토리지 장치(130-1)가 고장난 것으로 결론을 내릴 수 있다.
스토리지 장치(130-1)가 고장 나면, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 다른 수단을 사용하여 스토리지 장치(130-1)로부터 정상적으로 요청되는 임의의 데이터에 액세스함으로써 상황을 관리 할 수 있다. 예를 들어, 스토리지 장치(130-1)의 미러가 있는 경우, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 스토리지 장치(130-1)의 미러로부터 데이터를 요청할 수 있다. 또는, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 원하는 데이터를 포함하는 나머지 스트라이프를 어레이의 다른 스토리지 장치들로부터 요청할 수 있고, 이레이저 코딩 정보를 사용하여 스토리지 장치(130-1)로부터 데이터를 복원 할 수 있다. Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)가 고장난 스토리지 장치(130-1)에 저장된 데이터에 액세스 할 수 있는 다른 메커니즘이 있을 수있다.
본 발명의 실시 예들은 또한, 어레이로의 새로운 스토리지 장치의 삽입을 감지하고 처리하는 것을 지원할 수 있다. 스토리지 장치의 고장을 감지하는 것과 같이, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)(또는, 도 3의 BMC(325)는 때때로 무엇이 연결되었는지 또는 다른 원하는 메커니즘을 확인하기 위해 장치를 핑(ping)함으로써, 커넥터상의 Presence 핀을 통해 새로운 스토리지 장치의 삽입을 감지 할 수 있다(고장난 스토리지 장치를 감지하는 것과 같이, Presence 핀을 사용하여 새로운 스토리지 장치를 감지하는 것은 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)에서의 인터럽트를 트리거 할 수 있다). 새로운 스토리지 장치가 감지되면, Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 새로운 스토리지 장치를 어레이에 추가 할 수 있다. 어레이에 새로운 스토리지 장치를 추가하는 것은 이레이저 코딩 방식을 변경하는 것을 반드시 포함하지는 않는다: 이러한 변경은 스토리지 장치에 저장된 모든 데이터를 변경해야 할 것을 요구할 수도 있다. (예를 들어, RAID 5에서 RAID 6으로의 변경을 고려하자: 각 스트라이프는 이제 스토리지 장치들 간에 순환되어질 필요가 있는 2개의 패리티 블록들을 필요로 하며, 많은 양의 데이터는 계산되고 이동될 것이 요구된다.) 하지만, 새로운 스토리지 장치를 기존의 이레이저 코딩 방식에 추가하는 것은 많은 양의 데이터를 이동할 필요가 없을 수 있다. 따라서 새로운 스토리지 장치를 추가해도 스토리지 장치 고장에 대한 어레이의 허용치가 증가하지는 않지만, 새로운 스토리지 장치를 추가하는 것은 가상 스토리지 장치의 용량을 그럼에도 증가시킬 수 있다.
어레이에 고장난 스토리지 장치가 있는 경우, 새로운 스토리지 장치의 삽입은 고장난 스토리지 장치를 재구성 하는데 사용될 수 있다. 도 5의 이레이저 코딩 컨트롤러(530)는 고장난 스토리지 장치 상에 저장된 데이터를 계산하고, 그 데이터를 대체 스토리지 장치의 적절한 블록 주소들에 저장할 수 있다. 예를 들어, 고장난 스토리지 장치에 있던 원본 데이터는 다른 스토리지 장치들의 데이터(원본 데이터와 패리티 또는 코드 정보 모두)에서 계산 될 수 있다; 고장난 스토리지 장치에 저장된 패리티 또는 코드 정보는 다른 스토리지 장치들의 원본 데이터로부터 다시 계산 될 수 있다. (물론, 고장난 스토리지 장치가 미러링 된 경우, 도 5의 이레이저 코딩 컨트롤러(530)는 단순히 데이터가 미러로부터 대체 스토리지 장치에 복사되도록 지시 할 수 있다.)
고장난 스토리지 장치를 재구성하는 데는 시간이 오래 걸릴 수 있다. 본 발명의 일부 실시 예에서, 대체 스토리지 장치가 설치되는 즉시 재구성이 발생할 수 있다. 본 발명의 다른 실시 예에서, 스토리지 장치가 스랙 기간(여유 시간) 내에 재구성 될 수 있는 한, 도 5의 이레이저 코딩 컨트롤러(530)는 그렇게 할 수 있다. 그러나, 가상 스토리지 장치가 바쁜 상태이면, 도 5의 이레이저 코딩 컨트롤러(530)는 슬랙 시간이 발생할 때까지 대체 스토리지 장치의 재구성을 연기 할 수 있고, 도 1의 프로세서(110)로부터의 요청에 기초하여 필요에 따라 고장난 스토리지 장치로부터 데이터를 재구성 할 수 있다. (이러한 재구성 된 데이터는 물론 완전한 재구성을 기다리지 않고 대체 스토리지 장치에 기록될 수 있으므로, 나중에 다시 해당 데이터를 재계산할 필요가 없다.)
본 발명의 실시 예는 또한 스토리지 장치들의 초기화를 지원할 수있다. 새로운 스토리지 장치가 어레이에 추가되면-고장난 스토리지 장치를 위한 대체 스토리지 장치로써 또는 가상 스토리지 장치의 용량을 증가시키기 위해-새로운 스토리지 장치가 초기화 될 수 있다. 초기화는 이레이저 코딩 방식을 위한 스토리지 장치를 준비하는 단계를 포함 할 수 있다.
새로운 스토리지 장치의 초기화는 새로운 스토리지 장치로부터 기존 데이터를 소거하는 것을 포함할 수도 있다. 예를 들어, 특정 스토리지 장치가 고객에게 임대된 상황을 고려해 보자. 해당 고객의 임대가 종료되었으며 스토리지 장치는 새 고객에게 재사용될 수 있다. 그러나, 스토리지 장치는 여전히 고객의 원본 데이터를 가질 수 있다. 다음 고객이 이전 고객의 데이터에 액세스하지 못하게 하기 위해서는, 임의의 원하는 메커니즘을 사용하여 스토리지 장치의 데이터를 소거할 수 있다. 예를 들어, 데이터가 저장된 위치에 대한 정보를 저장하는 테이블들이 소거될 수 있다. 또는, (나중에 소거 된 임의의 정보를 복구하기 위해 시도하는 것을 방지하기 위해) 데이터 자체를 새로운 데이터로 덮어 쓸 수 있다. 새로운 데이터는 원본 데이터가 복구되지 않도록 보장하기 위해 설계된 패턴을 사용할 수 있다. 예를 들어, 미국 국방부(DOD)는 복구를 방지하기 위해 데이터를 소거하는 방법에 대한 표준들을 발표했다. 이러한 표준들은 스토리지 장치를 새로운 클라이언트에 맞게 다시 사용하기 전에 스토리지 장치에서 오래된 데이터를 소거하는데 사용될 수 있다.
새로운 스토리지 장치가 기존 어레이에 핫 추가(hot-added)되는 경우에만 초기화가 제한 되는 것은 아니다. 초기화는 스토리지 장치, 또는 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125), 또는 도 1의 기계(105)가 전체적으로 처음에 전원이 켜질 때 또한 발생한다.
도 11a 내지 도 11d는 본 발명의 일 실시 예에 따라, 도 4의 코딩 방식들(405, 410, 415)을 지원하기 위해 도 1의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)에 대한 예시적인 절차의 흐름도를 도시한다. 도 11a의 블록(1103)에서, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 도 1의 프로세서(110) 또는 도 3의 BMC(325)에 의해 초기화 될 수 있다. 블록(1106)에서, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 전송을 수신 할 수 있다. 이러한 전송은 도 1의 프로세서(110)로부터의 읽기 또는 쓰기 요청, 도 1의 프로세서(110) 또는 도 3의 BMC(325)로부터의 제어 전송, 또는 도 1의 프로세서(110)로부터의 읽기 또는 쓰기 요청에 응답하여 도 3의 스토리지 장치(130-1~130-6)에 의해 송신된 전송일 수 있다.
블록(1109)에서, 도 5의 스누핑 로직(525)은 전송이 도 1의 프로세서(110)로부터의 제어 전송인지를 결정할 수 있다. 만약 그렇다면, 블록(1112)에서, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 도 5의 PPU(520)로 제어 전송을 전달할 수 있다. 이후에 처리가 종료된다.
전송이 도 1의 프로세서(110)로부터의 제어 전송이 아니라면, 블록(1115)(도 11b)에서, 도 5의 스누핑 로직(525)은 전송이 호스트로부터의 읽기 또는 쓰기 요청인지를 결정할 수 있다. 그렇지 않다면, 블록(1118)에서, 도 5의 스누핑 로직(525)은 전송에서의 장치 LBA를 호스트에 적합한 호스트 LBA로 대체할 수 있다. 도 5의 스누핑 로직(525)은 또한 전송이 실제 데이터를 저장한 물리 스토리지 장치가 아니라 가상 스토리지 장치로부터 온 것을 의미하도록 전송을 수정할 수있다. 블록(1121)에서, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 도 1의 프로세서(110)로 전송을 전달할 수있다. 이후에 처리가 종료된다.
반면에, 전송이 도 1의 프로세서(110)로부터의 읽기 또는 쓰기 요청이면, 블록(1124)에서, 도 5의 스누핑 로직(525)은 문제의 데이터가 도 5의 캐시(545) 또는 도 5의 쓰기 버퍼(550)에서 이용 가능한지를 결정할 수 있다. 데이터가 도 5의 캐시(545) 또는 도 5의 쓰기 버퍼(550)에서 이용 가능하면, 블록(1127)(도 11c)에서, 도 5의 이레이저 코딩 컨트롤러(530)는 적절한 위치에서 데이터에 액세스 할 수 있다.
데이터가 도 5의 캐시(545) 또는 도 5의 쓰기 버퍼(550)에서 이용가능하지 않는다면, 블록(1130)에서, 도 5의 스누핑 로직(525)은 호스트에 의해 제공된 호스트 LBA를 스토리지 장치가 데이터를 읽어야 하는 장치 LBA로 대체하기 위해 전송을 수정할 수있다. 도 5의 스누핑 로직(525)은 또한, 전송을 수신하기 위한 적절한 스토리지 장치를 식별하기 위해 전송을 수정할 수도 있다. 그 다음, 블록(1133)에서, 스누핑 로직(525)은 전송을 적절한 스토리지 장치에 전달할 수 있다.
문제의 데이터가 캐시로부터 액세스 가능한지 또는 스토리지 장치로부터 판독되는지 여부에 관계없이, 이 시점에서 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 필요한 데이터를 갖는다. 이 시점에서 처리가 나뉠 수 있다. 전송이 도 1의 프로세서(110)로부터의 읽기 요청이면, 블록(1136)에서, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 도 1의 프로세서(110)로 데이터를 반환 할 수 있다. 도 5의 스누핑 로직(525)은 또한, 블록(1139)에 도시 된 바와 같이, 도 5의 캐시(545)에 데이터를 저장할 수도 있다. 블록(1139)은 선택적이며, 점선(1142)으로 도시 된 바와 같이 생략될 수있다. 이 시점에서, 처리는 종료된다.
반면에, 도 1의 프로세서(110)로부터의 전송이 쓰기 요청이면, 블록(1145)에서, 도 5의 이레이저 코딩 컨트롤러(530)는 도 3의 스토리지 장치들(130-1~130-6)에 걸쳐 스트라이프를 판독 할 수 있다. 블록(1145)은 블록들(1127, 1130, 1133)의 재 표현이며 필요하지 않을 수있다; 블록(1145)은 가상 스토리지 장치에 데이터를 기록하는 것이 스토리지 장치들(130-1~130-6)를 가로지르는 전체 스트라이프로부터 데이터를 읽는 것을 포함 할 수 있음을 강조하기 위해서 도 11에 포함된다. 블록(1148)에서, 도 5의 이레이저 코딩 컨트롤러(530)는 도 1의 프로세서(110)로부터 수신 된 데이터와 스토리지 장치들(130-1~130-6) 또는 캐시로부터 액세스 된 데이터 스트라이프를 병합할 수 있다.
이 시점에서, 절차는 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)가 도 5의 쓰기 버퍼(550)를 포함하는지 여부에 따라 나뉠 수 있다. 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)가 도 5의 쓰기 버퍼(550)를 포함하면, 블록(1151)(도 11d)에서, 도 5의 이레이저 코딩 컨트롤러(530)는 병합된 데이터 스트라이프를 도 5의 쓰기 버퍼(550)에 기록할 수 있다 (데이터를 “더티” 및 스토리지 장치들(130-1~130-6)에 플러싱 될 필요가 있다고 표시 함). 그 다음 블록(1154)에서, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 쓰기 요청이 완료되었음을 도 1의 프로세서(110)로 보고할 수 있다. 도 5의 쓰기 버퍼(550)가 write-back 캐시 정책을 사용하면 블록(1154)이 적절하다는 것에 유의하라; 도 5의 쓰기 버퍼(550)가 write-through 캐시 정책을 사용하면, 점선(1157)으로 도시 된 바와 같이 블록(1154)은 생략될 수 있다.
결국, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)가 도 5의 쓰기 버퍼(550)를 포함하지 않거나 도 5의 쓰기 버퍼(550)의 데이터가 도 3의 스토리지 장치들(130-1~130-6)로 플러시 되기 때문에, 블록(1160)에서, 도 5의 이레이저 코딩 컨트롤러(530)는 도 3의 스토리지 장치들(130-1~130-6)에 업데이트 된 스트라이프를 다시 기록 할 수 있다. 그 다음, 블록(1163)에서, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 쓰기 요청이 완료되었음을 도 1의 프로세서(110)로 보고할 수 있다. 병합된 데이터가 도 5의 쓰기 버퍼(550)에 저장되고 도 5의 쓰기 버퍼(550)가 write-back 캐시 정책을 사용한다면, 블록(1163)은 필요하지 않음에 유의하라: 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 쓰기 요청을 이미 완료했다고 보고하였다(블록(1154) 에서). 이러한 상황에서, 블록(1163)은 점선(1166)으로 도시 된 바와 같이 생략 될 수있다. 이 시점에서, 처리는 종료된다.
도 12a 내지 도 12b는 본 발명의 실시 예에 따라 초기화를 수행하기 위해 도 1의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)에 대한 예시적인 절차를 도시한다. 도 12a의 블록(1205)에서, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)에 연결된 장치들이 오직 스토리지 장치들만이고, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)에 의해 관리되는 이레이저 코딩을 가지는 여부를 판단할 수 있다. 스토리지 장치가 아닌 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)에 연결된 장치 있거나, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)에 의해 관리되는 이레이저 코딩을 포함하지 않는 스토리지 장치가 있다면, 본 발명의 일부 실시 예에서, 블록(1210)에서, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 Look-Aside 이레이저 코딩 로직을 디스인에이블 시킬 수 있다. 이후에 절차가 종료된다.
그러나, 본 발명의 다른 실시 예에서, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 이레이저 코딩에 자격없는 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)에 연결된 장치들이 있더라도, 이레이저 코딩을 관리 할 수 있다. 본 발명의 이러한 실시 예들에서, 또는 이레이저 코딩에 자격 있는 스토리지 장치들만이 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)에 연결되는 경우에, 블럭(1215)에서, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 Look-Aside 이레이저 코딩 로직을 인에이블시킬 수 있다. 그 다음, 블록(1220)(도 12b)에서, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 이레이저 코딩 방식을 사용하도록 구성될 수 있다(아마도, 도 3의 BMC(325) 또는 도 1의 프로세서(110)에 의해)
블록(1225)에서, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 이레이저 코딩에 적합하지 않은 장치들을 디스인에이블 시킬 수 있다. 블록(1225)은 점선(1230)으로 도시 된 바와 같이 선택적이다: 이레이저 코딩에 자격 없는 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)가 없거나 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)가 다른 장치들을 위해 이레이저 코딩을 사용함에도 불구하고, 이레이저 코딩에 대해 자격없는 장치들에 액세스하기 위해 도 1의 프로세서(110)를 승인할 수 있다.
블록(1235)에서, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 이레이저 코딩 대상이 되는 임의의 장치들에 대한 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)의 다운스트림 열거를 종료할 수 있다. 블록(1240)에서, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 이레이저 코딩의 대상이되는 도 3의 스토리지 장치들(130-1~130-6)에 기초하여 가상 스토리지 장치를 도 1의 프로세서(110)에 보고 할 수 있다. 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)는 또한 열거 될 수있는 임의의 다른 PCIe 장치들을 도 1의 프로세서(110)에 보고 할 수있다. 이 시점에서, 처리가 종료된다.
도 13은 본 발명의 일 실시 예에 따라, 도 4의 이레이저 코딩 방식들(405, 410, 415)에 새로운 스토리지 장치를 포함시키기 위해, 도 1의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)에 대한 예시적인 절차의 흐름도를 도시한다. 도 13의 블록(1305)에서, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)(또는, 도 3의 BMC(325))는 새로운 스토리지 장치를 검사 할 수 있다. 새로운 스토리지 장치가 감지되면, 그 다음 블록(1310)에서, 도 5의 이레이저 코딩 컨트롤러(530)는 가상 스토리지 장치 뒤의 어레이에 새로운 스토리지 장치를 추가 할 수 있다. 마지막으로, 블록(1315)에서, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)(또는, 도 3의 BMC(325) 또는, 도 1의 프로세서(110))는 새로운 스토리지 장치를 초기화 할 수 있다. 이 시점에서, 절차는 종료될 수 있거나, 점선(1320)으로 도시 된 바와 같이 추가의 새로운 스토리지 장치를 검사하기 위해 블록(1305)으로 되돌아 갈 수 있다.
도 14는 본 발명의 일 실시 예에 따라 고장난 스토리지 장치를 처리하기 위한 도 1의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)에 대한 예시적인 절차의 흐름도를 도시한다. 도 14의 블록 1405에서, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)(또는, 도 3의 BMC(325))는 고장난(또는, 제거된) 스토리지 장치를 검사 할 수 있다. 고장난 스토리지 장치가 감지되면, 블록(1410)에서, 도 5의 이레이저 코딩 컨트롤러(530)는 고장난 데이터로부터 데이터를 액세스하는 읽기 요청이 도착할 때, 고장난 스토리지 장치에 저장된 데이터의 이레이저 코딩 복원을 수행할 수 있다. 이러한 이레이저 코딩 복원은 다른 스토리지 장치들로부터 요구된 데이터를 포함하는 스트라이프로부터 데이터를 독출하는 것 및 스트라이프 내의 나머지 데이터로부터 요구 된 데이터를 계산하는 것을 포함 할 수 있다.
블록(1415)에서, 도 3의 Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치(125)(또는, 도 3의 BMC(325))은 대체 스토리지 장치가 가상 스토리지 장치 뒤의 어레이에 추가되었는지를 결정할 수 있다. 그렇다면, 블록(1420)에서, 도 5의 이레이저 코딩 컨트롤러(530)는 대체 스토리지 장치를 사용하여 고장난 스토리지 장치를 재구성 할 수 있다. 이 시점에서, 절차는 종료될 수 있거나, 점선(1425)으로 도시 된 바와 같이 추가적인 새로운 스토리지 장치를 검사하기 위해 블록(1405)으로 되돌아 갈 수 있다.
도 11a 내지 도 14를 참조하면, 본 발명의 일부 실시 예가 도시된다. 그러나 당업자라면 블록의 순서를 변경하거나, 블록을 생략하거나, 도면에 도시되지 않은 연결들을 포함함으로써 본 발명의 다른 실시 예도 가능하다는 것을 인식 할 수 있다. 흐름도의 이러한 모든 변형은 명시적으로 기술 되었든 아니든간에 본 발명의 실시 예인 것으로 간주된다.
본 발명의 실시 예는 종래 기술에 비해 기술적 이점을 제공한다. Look-Aside 이레이저 코딩 로직을 포함하는 PCIe 스위치를 사용하는 것은 이레이저 코딩을 스토리지 장치에 가깝게 이동시키므로, 데이터 이동에 필요한 시간이 단축된다. 프로세서에서 이레이저 코딩을 제거하면 프로세서의 부하가 감소되고, 프로세서는 응용 프로그램에 대한 더 많은 명령어를 실행할 수 있다. 구성가능한 이레이저 코딩 컨트롤러를 사용하면, 하드웨어 및 소프트웨어 이레이저 코딩 공급 업체에 의해 지원되는 제한된 방식들의 세트 대신 임의의 원하는 이레이저 코딩 방식이 사용될 수 있다. 이레이저 코딩 컨트롤러를 PCIe 스위치와 함께 배치함으로써, 값비싼 RAID add-in card들에 대한 필요성이 회피될 수 있으며, 여러 섀시에 이르기까지 더 큰 어레이가 사용될 수 있다.
아래의 설명은 본 발명의 기술적 사상의 일부 측면들이 구현되는 적절한 기계 또는 기계들의 짧고 일반적인 설명을 제공하고자 한다. 기계 또는 기계들은 적어도 일부는 다른 기게로부터 수신되는 지시들, 가상현실(VR) 환경과의 상호 작용, 생체 피드백, 또는 다른 입력 신호뿐 아니라 키보드, 마우스 등과 같은 통상적인 입력 장치들로부터의 입력에 의해 제어될 수 있다. 여기에서 사용되는 바와 같이, "기계"의 용어는 단일 기계, 가상 기계, 또는 기계들, 가상 기계들 또는 함께 동작하는 장치들과 통신하도록 결합된 시스템을 넓게 포함하는 것으로 의도된다. 예시적인 기계들은 예를 들어 자동차, 기차, 택시 등과 같은 개인용 또는 공공 수송과 같은 수송 장치들뿐 아니라 개인용 컴퓨터들, 워크스테이션들, 서버들, 포터블 컴퓨터들, 핸드헬드 장치들, 전화들, 태블릿들 등과 같은 컴퓨팅 장치들을 포함할 수 있다.
기계 또는 기계들은 프로그램 가능한 또는 프로그램 불가능한 논리 장치들 또는 어레이들, ASIC (Application Specific Integrated Circuit), 임베디드 컴퓨터들, 스마트 카드들 등과 같은 임베디드 컨트롤러들을 포함할 수 있다. 기계 또는 기계들은 네트워크 인터페이스, 모뎀, 또는 다른 통신 결합들을 통해서와 같이 하나 또는 그보다 많은 원격 기계들에 대한 하나 또는 그보다 많은 연결들을 활용할 수 있다. 기계들은 인트라넷, 인터넷, LAN (local area networks), WAN (wide area networks) 등과 같은 물리적 그리고/또는 논리적 네트워크의 수단으로 서로 연결될 수 있다. 이 분야에 숙력된 자는 네트워크 통신이 다양한 유선 그리고/또는 무선 근거리 또는 원거리 캐리어들 및 무선 주파수(RF), 위성, 마이크로파, IEEE 802.11, 블루투스, 광학, 적외선, 케이블, 레이저 등을 포함하는 프로토콜을 활용함을 이해할 것이다.
본 발명의 기술적 사상의 실시 예들은, 기계에 의해 액세스되는 때에 기계가 작업들을 수행하거나 또는 추상적인 데이터 타입들 또는 저레벨 하드웨어 콘텍스트들을 정의하는 것을 유발하는 함수들, 절차들, 데이터 구조들, 응용 프로그램들 등을 포함하는 연관된 데이터를 참조하여 또는 협력하여 설명될 수 있다. 연관된 데이터는, 예를 들어 RAM, ROM 등과 같은 휘발성 그리고/또는 불휘발성 메모리, 또는 다른 스토리지 장치들, 그리고 하드 드라이브, 플로피 디스크, 광학 스토리지, 테이프들, 플래시 메모리, 메모리 스틱들, 디지털 비디오 디스크들, 생체 스토리지 등을 포함하는 연관된 스토리지 매체에 저장될 수 있다. 연관된 데이터는 물리적 그리고/또는 논리적 네트워크를 포함하는 전송 환경들을 거쳐 패킷들, 직렬 데이터, 병렬 데이터, 전송신호들 등의 형태로 전달되고, 압축된 또는 암호화된 포맷으로 이용될 수 있다. 연관된 데이터는 분산 환경에서 사용될 수 있으며, 기계 액세스에 대해 지역적 그리고/또는 원격으로 저장될 수 있다.
본 발명의 기술적 사상의 실시 예들은 하나 또는 그보다 많은 프로세서들에 의해 실행 가능하며 여기에 설명된 바와 같이 본 발명의 기술적 사상의 원소들을 수행하게 하는 명령들을 포함하는 실재하는 비임시 기계 독출 매체를 포함할 수 있다.
위에서 설명된 방법들의 다양한 동작들은 다양한 하드웨어 및/또는 소프트웨어 구성(들), 회로들, 및/또는 모듈(들)과 같이 동작들을 수행할 수 있는 임의의 적합한 수단들에 의해 수행될 수 있다. 소프트웨어는 논리적 기능들을 구현하기 위한 실행 가능 명령들의 순서화된 목록을 포함할 수 있고, 단일 또는 멀티-코어 프로세서 또는 시스템을 포함하는 프로세서와 같은 명령 실행 시스템, 기구들 또는 장치를 사용하여 또는 이들과 관련하여 임의의 "프로세서 판독 가능 매체"에서 구현 될 수 있다.
여기에서 개시된 실시 예들과 관련하여 방법 또는 알고리즘의 블록들 또는 단계들 및 기능들은 하드웨어 및 프로세서에서 실행되는 소프트웨어 모듈 또는 이들의 조합으로 직접적으로 구현될 수 있다. 소프트웨어로 구현된다면, 기능들은 비 일시적 컴퓨터 판독 가능 매체 상에 하나 이상의 명령 또는 코드로서 저장되거나 전송 될 수 있다. 소프트웨어 모듈은 RAM(random access memory), 플래시 메모리, ROM, EPROM, EEPROM, 레지스터, 하드 디스크, 이동식 디스크, CD ROM, 또는 이 분야에 공지된 임의의 다른 형태의 저장 매체 일 수 있다.
도시된 실시 예들을 참조하여 설명된 본 발명의 기술적 사상의 원칙들을 가지면, 도시된 실시 예들이 이러한 원칙들로부터 멀어지지 않으면서 배열 및 상세에서 수정될 수 있고 필요한 임의의 방법으로 조합될 수 있음이 이해될 것이다. 앞선 설명이 구체적인 실시 예들에 집중하였지만, 다른 구성돌 또한 고려된다. 구체적으로, "본 발명의 기술적 사상의 실시 예에 따른"과 같은 설명들 또는 여기에 사용된 유사한 것들에 불구하고, 이러한 문구들은 일반적으로 실시 예의 가능성들을 참조하며, 본 발명의 기술적 사상을 구체적인 실시 예의 구성들로 한정하는 것을 의도하지 않는다. 여기에 사용되는 바와 같이, 이러한 용어들은 다른 실시 예들로 조합 가능한 동일한 또는 상이한 실시 예들을 참조할 수 있다.
앞서 설명된 실시 예들은 본 발명의 기술적 사상을 그것들로 한정하는 것으로 해석되지 않는다. 적은 실시 예들만이 설명되었지만, 이 분야에 숙련된 자들은 본 기재의 신규한 설명들 및 이점들로부터 실질적으로 멀어지지 않으면서 이러한 실시 예들에 많은 수정들이 가능함을 충분히 이해할 것이다. 따라서, 이러한 모든 수정들은 청구항들에서 정의되는 바와 같이 본 발명의 기술적 사상의 범위 내에 포함되는 것으로 의도된다.
본 발명의 실시 예들은 제한 없이 다음의 설명들로 확장될 수 있다.
설명 1. 본 발명의 개념의 실시 예는 이레이저 코딩 로직을 포함하는 PCIe 스위치를 포함한다. PCIe 스위치는:
상기 PCIe 스위치가 프로세서와 통신 할 수 있게 하는 외부 커넥터;
상기 PCIe 스위치가 적어도 하나의 스토리지 장치와 통신 할 수 있게 하는 적어도 하나의 커넥터;
PCIe 스위치의 구성을 처리하는 PPU;
상기 적어도 하나의 스토리지 장치에 저장된 데이터에 이레이저 코딩 방식을 적용하는 회로를 포함하는 이레이저 코딩 컨트롤러; 및
상기 PCIe 스위치에서 수신된 데이터 전송을 가로채고 상기 이레이저 코딩 방식에 응답하여 상기 데이터 송신을 수정하는 회로를 포함하는 스누핑 로직을 포함한다.
설명 2. 설명 1에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 상기 이레이저 코딩 로직은 Look-Aside 이레이저 코딩 로직 및 Look-Through 이레이저 코딩 로직을 포함하는 세트로부터 획득된다.
설명 3. 설명 1에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 상기 적어도 하나의 스토리지 장치는 적어도 하나의 NVMe SSD를 포함한다.
설명 4. 설명 3에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 스누핑 로직은 PCIe 스위치에서 수신된 제어 전송을 가로채고 상기 제어 전송을 PPU로 포워딩하도록 동작한다.
설명 5. 설명 3에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 스누핑 로직은 호스트로부터 PCIe 스위치에서 수신 된 데이터 전송을 가로채고 데이터 전송에서 호스트에 의해 사용되는 호스트 LBA를 상기 적어도 하나의 NVMe SSD에 의해 사용되는 장치 LBA로 대체하도록 동작한다.
설명 6. 설명 5에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 스누핑 로직은 데이터 전송을 적어도 하나의 NVMe SSD로 지시하도록 동작한다.
설명 7. 설명 3에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 스누핑 로직은 적어도 하나의 NVMe SSD 중 하나로부터 PCIe 스위치에서 수신 된 데이터 전송을 가로채고, 데이터 전송에서 적어도 하나의 NVMe SSD 중 하나에 의해 사용되는 장치 LBA를 호스트에 의해 사용되는 호스트 LBA로 대체한다.
설명 8. 설명 3에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 캐시를 더 포함한다.
설명 9. 설명 8에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 스누핑 로직은 캐쉬에 존재하는 데이터 전송에서 요청되는 데이터에 적어도 부분적으로 기초하여 호스트로부터 요청된 데이터 전송에 대한 응답을 반송하도록 동작한다.
설명 10. 설명 3에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서,
섀시에 위치하는 PCIe 스위치;
이레이저 코딩 컨트롤러에 의해 외부 캐시로서 사용되는 메모리를 포함하는 섀시를 포함한다.
설명 11. 설명 3에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 쓰기 버퍼를 더 포함한다.
설명 12. 설명 11에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서,
호스트로부터의 쓰기 동작을 포함하는 상기 데이터 전송; 및
데이터 전송에 대한 응답을 호스트로 전송한 후에 쓰기 동작을 완료하도록 동작하는 이레이저 코딩 컨트롤러를 포함한다.
설명 13. 설명 11에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서,
상기 이레이저 코딩 컨트롤러는 쓰기 동작에서의 데이터를 쓰기 버퍼에 저장하도록 동작한다.
설명 14. 설명 3에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, PCIe 스위치는 이레이저 코딩 컨트롤러와 함께 사용되는 적어도 하나의 NVMe SSD에 적어도 부분적으로 기초하여, 이레이저 코딩 컨트롤러 및 스투핑 로직을 인에이블시키록 동작한다.
설명 15. 설명 3에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, PCIe 스위치는 빌트인(built-in) 이레이저 코딩 기능이 포함된 적어도 하나의 NVMe SSD에 적어도 부분적으로 기초하여, 이레이저 코딩 컨트롤러 및 스누핑 로직을 디스인에이블시키도록 동작한다.
설명 16. 설명 15에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, PCIe 스위치는 빌트인(built-in) 이레이저 코딩 기능이 포함된 적어도 하나의 NVMe SSD에 적어도 부분적으로 기초하여, 사용자에게 이레이저 코딩 컨트롤러 및 스누핑 로직이 디스인에이블된 것을 알리도록 동작한다.
설명 17. 설명 3에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 상기 적어도 하나의 커넥터를 사용하여 상기 PCIe 스위치에 연결되는 비 스토리지 장치에 부분적으로 기초하여, 이레이저 코딩 컨트롤러 및 스누핑 로직을 디스인에이블시키도록 동작한다.
설명 18. 설명 17에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 상기 적어도 하나의 커넥터를 사용하여 상기 PCIe 스위치에 연결되는 비 스토리지 장치에 부분적으로 기초하여, 사용자에게 이레이저 코딩 컨트롤러 및 스누핑 로직이 디스인에이블된 것을 알리도록 동작한다.
설명 19. 설명 3에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 상기 적어도 하나의 커넥터를 사용하여 상기 PCIe 스위치에 연결되는 비 스토리지 장치에 부분적으로 기초하여, 이레이저 코딩 컨트롤러 및 스누핑 로직을 인에이블시키도록 동작한다.
설명 20. 설명 19에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, PCIe 스위치는 PCIe 스위치에 연결된 비 스토리지 장치가 액세스가 차단되었다는 것은 사용자에게 알리도록 동작한다.
설명 21. 설명 3에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, PCIe 스위치는 제 2 PCIe 스위치에 연결된 적어도 하나의 추가적인 NVMe SSD 상에서 이레이저 코딩 방식을 관리하기 위해 이레이저 코딩 컨트롤러 및 스누핑 로직을 사용하도록 동작한다.
설명 22. 설명 21에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 제 2 PCIe 스위치는 제 2 PCIe 스위치에서 제 2 이레이저 코딩 컨트롤러 및 제 3 스누핑 로직을 디스인에이블 시키도록 동작한다.
설명 23. 설명 22에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서,
제 1 섀시 내에 위치하는 PCIe 스위치; 및
제 2 섀시 내에 위치하는 제 2 PCIe 스위치를 포함한다.
설명 24. 설명 3에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, PCIe 스위치는 FPGA를 사용하여 구현된다.
설명 25. 설명 3에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서,
적어도 두 개의 NVMe SSD를 포함하는 상기 적어도 하나의 NVMe SSD; 및
공통 하우징 내부에 있는 상기 PCIe 스위치 및 상기 적어도 2 개의 NVMe SSD를 포함한다.
설명 26. 설명 3에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 상기 PCIe 스위치 및 상기 적어도 2 개의 NVMe SSD는 별도의 하우징들 내에 있다.
설명 27. 설명 3에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서,
상기 적어도 하나의 NVMe SSD의 고장난 NVMe SSD를 검출하도록 동작하는 상기 PCIe 스위치; 및
고장난 NVMe SSD를 설명하기 위해 데이터 전송을 처리하도록 동작하는 이레이저 코딩 컨트롤러를 포함한다.
설명 28. 설명 27에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 이레이저 코딩 컨트롤러는 고장난 NVMe SSD 상에 저장된 데이터의 이레이저 코딩 복원을 수행하도록 동작한다.
설명 29. 설명 28에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 이레이저 코딩 컨트롤러는 고장난 NVMe SSD를 위한 대체 NVMe SSD를 재구성하도록 동작한다.
설명 30. 설명 3에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서,
새로운 NVMe SSD를 검출하도록 동작하는 상기 PCIe 스위치; 및
이레이저 코딩 방식의 일부로서 새로운 NVMe SSD를 사용하도록 동작하는 이레이저 코딩 컨트롤러를 포함한다.
설명 31. 설명 30에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 이레이저 코딩 컨트롤러는 새로운 NVMe SSD를 사용하여 용량 추가를 수행하도록 동작한다.
설명 32. 설명 30에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, PCIe 스위치는 적어도 하나의 커넥터 중 하나에 연결된 새로운 NVMe SSD를 검출하도록 동작한다.
설명 33. 설명 30에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, PCIe 스위치는 제 2 PCIe 스위치로부터의 메시지를 통해 새로운 NVMe SSD를 검출하도록 동작한다.
설명 34. 설명 33에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 새로운 NVMe SSD는 제 2 PCIe 스위치상의 제 2 커넥터에 연결된다.
설명 35. 설명 3에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 적어도 하나의 커넥터는 고장난 NVMe SSD 및 새로운 NVMe SSD 모두를 검출하기 위한 presence 핀을 포함한다.
설명 36. 설명 3에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, PCIe 스위치는 호스트에 단일 장치로써 그것 자신을 나타내고, 적어도 하나의 다운스트림 PCIe 버스 열거를 방지하도록 동작한다.
설명 37. 설명 36에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, PCIe 스위치는 PCIe 스위치로부터 제 2 PCIe 스위치의 다운스트림 PCIe 버스 열거를 방지하도록 동작한다.
설명 38. 설명 36에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, PCIe 스위치는 적어도 하나의 NVMe SSD를 가상화하도록 동작한다.
설명 39. 설명 3에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 이레이저 코딩 컨트롤러는 적어도 하나의 커넥터 중 하나에 연결된 새로운 NVMe SSD를 초기화하도록 동작한다.
설명 40. 설명 39에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 이레이저 코딩 컨트롤러는 핫 삽입 이벤트 후에 새로운 NVMe SSD를 초기화하도록 동작한다.
설명 41. 설명 39에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 이레이저 코딩 컨트롤러는 시작할 때, 적어도 하나의 NVMe SSD를 초기화하도록 동작한다.
설명 42. 설명 3에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, PCIe 스위치는 적어도 하나의 커넥터 중 하나에 연결된 새로운 NVMe SSD를 초기화하도록 동작하는 BMC를 포함하는 시스템의 일부이다.
설명 43. 설명 42에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, BMC는 시작할 때 적어도 하나의 NVMe SSD를 초기화하도록 동작한다.
설명 44. 설명 3에 따른 이레이저 코딩 로직을 포함하는 PCIe 스위치에 있어서, 이레이저 코딩 컨트롤러는 적어도 하나의 NVMe SSD에 걸쳐 데이터를 스트라이핑하는 스트라이프 관리자를 포함한다.
설명 45. 본 발명의 개념의 실시 예는 방법을 포함한다. 상기 방법은:
이레이저 코딩 로직을 이용하여 PCIe 스위치에서 전송을 수신하는 단계;
상기 이레이저 코딩 로직에서 스누핑 로직을 사용하여 상기 전송을 처리하는 단계; 및
상기 PCIe 스위치를 통해 상기 전송을 그것의 목적지로 전달하는 단계를 포함한다.
설명 46. 설명 45에 따른 방법에 있어서, 이레이저 코딩 로직은 Look-Aside 이레이저 코딩 로직 및 Look-Through 이레이저 코딩 로직 중 하나를 포함한다.
설명 47. 설명 45에 따른 방법에 있어서,
상기 이레이저 코딩 로직에서 스누핑 로직을 사용하여 상기 전송을 처리하는 단계는 상기 전송이 상기 스누핑 로직에 의한 제어 전송을 포함하는 것으로 결정하는 단계를 포함하고,
상기 PCIe 스위치를 통해 상기 전송을 그것의 목적지로 전달하는 단계는 상기 전송을 PPU(Power Processing Unit)로 전달하는 단계를 포함한다.
설명 48. 설명 45에 따른 방법에 있어서,
상기 이레이저 코딩 로직에서 스누핑 로직을 사용하여 상기 전송을 처리하는 단계는 활성화된 이레이저 코딩 로직에 적어도 부분적으로 기초하여 스누핑 로직을 사용하여 전송을 처리하는 단계를 포함한다 .
설명 49. 설명 45에 따른 방법에 있어서,
이레이저 코딩 로직을 포함하는 PCIe 스위치에서 전송을 수신하는 단계는 호스트로부터 읽기 요청을 수신하는 단계를 포함하고,
상기 이레이저 코딩 로직에서 스누핑 로직을 사용하여 상기 전송을 처리하는 단계는 호스트 LBA를 읽기 요청 내의 장치 LBA로 대체하는 단계를 포함하고,
상기 PCIe 스위치를 통해 상기 전송을 그것의 목적지로 전달하는 단계는 읽기 요청을 NVMe SSD로 전달하는 단계를 포함한다.
설명 50. 설명 49에 따른 방법에 있어서, 상기 이레이저 코딩 로직에서 스누핑 로직을 사용하여 상기 전송을 처리하는 단계는 읽기 요청이 전달되어야하는 NVMe SSD를 식별하는 단계를 더 포함한다.
설명 51. 설명 49에 따른 방법에 있어서,
상기 이레이저 코딩 로직에서 스누핑 로직을 사용하여 상기 전송을 처리하는 단계는 캐시에 존재하는 데이터에 적어도 부분적으로 기초하여 캐시로부터의 읽기 요청 내의 호스트에 의해 요청된 데이터에 액세스하는 단계를 포함하고,
호스트 LBA를 읽기 요청 내의 장치 LBA로 대체하는 단계는 캐시에 존재하지 않는 데이터에 적어도 부분적으로 기초하여 호스트 LBA를 읽기 요청 내의 장치 LBA로 대체하는 단계를 포함하고,
상기 PCIe 스위치를 통해 상기 전송을 그것의 목적지로 전달하는 단계는 단계는 캐시에 존재하지 않는 데이터에 적어도 부분적으로 기초하여 NVMe SSD로 읽기 요청을 전달하는 단계를 포함한다.
설명 52. 설명 45에 따른 방법에 있어서,
이레이저 코딩 로직을 포함하는 PCIe 스위치에서 전송을 수신하는 단계는 호스트로부터 읽기 요청을 수신하는 단계를 포함하고,
상기 이레이저 코딩 로직에서 스누핑 로직을 사용하여 상기 전송을 처리하는 단계는 호스트 LBA를 읽기 요청 내의 장치 LBA로 대체하는 단계를 포함하고,
상기 PCIe 스위치를 통해 상기 전송을 그것의 목적지로 전달하는 단계는 읽기 요청을 NVMe SSD로 전달하는 단계를 포함한다.
설명 53. 설명 52에 따른 방법에 있어서,
상기 이레이저 코딩 로직에서 스누핑 로직을 사용하여 상기 전송을 처리하는 단계는 읽기 요청이 전달되어야하는 NVMe SSD를 식별하는 단계를 더 포함한다.
설명 54. 설명 52에 따른 방법에 있어서,
적어도 하나의 NVMe SSD로부터 블록들의 스트라이프를 독출하는 단계;
블록들의 업데이트 된 스트라이프를 형성하기 위해 상기 블록들의 스트라이프와 상기 쓰기 요청 내의 데이터를 병합하는 단계; 및
블록들의 상기 업데이트 된 스트라이프를 상기 적어도 하나의 NVMe SSD에 기록하는 단계를 더 포함한다.
설명 55. 설명 54에 따른 방법에 있어서,
상기 쓰기 요청 내의 데이터를 병합하는 단계는 쓰기 요청의 데이터에 추가하여 적어도 하나의 NVMe SSD에 기록하기 위한 추가 데이터를 계산하는 단계를 포함한다.
설명 56. 설명 54에 따른 방법에 있어서,
캐시 내에 존재하는 블록들의 스트라이프에 적어도 부분적으로 기초하여 캐시로부터 블록들의 스트라이프를 독출하는 단계; 및
적어도 하나의 NVMe SSD로부터 블록들의 스트라이프를 판독하는 단계는 캐시 내에 존재하지 않는 블록들의 스트라이프에 적어도 부분적으로 기초하여 적어도 하나의 NVMe SSD로부터 블록들의 스트라이프를 판독하는 단계를 포함한다.
설명 57. 설명 54에 따른 방법에 있어서,
블록들의 상기 업데이트 된 스트라이프를 상기 적어도 하나의 NVMe SSD에 기록하는 단계는 블록들의 상기 업데이트 된 스트라이프를 쓰기 버퍼에 기록하는 단계를 포함한다.
설명 58. 설명 57에 따른 방법에 있어서,
블록들의 업데이트 된 스트라이프가 쓰기 버퍼에 기록되고 난 후 블록들의 업데이트 된 스트라이프가 적어도 하나의 NVMe SSD에 기록되기 전에 기록이 완료되었음을 호스트에 응답하는 단계를 더 포함한다.
설명 59. 설명 45에 따른 방법에 있어서,
이레이저 코딩 로직을 포함하는 PCIe 스위치에서 전송을 수신하는 단계는 호스트로부터 응답을 수신하는 단계를 포함하고,
상기 이레이저 코딩 로직에서 스누핑 로직을 사용하여 상기 전송을 처리하는 단계는 읽기 요청 내의 장치 LBA를 호스트 LBA로 대체하는 단계를 포함하고,
상기 PCIe 스위치를 통해 상기 전송을 그것의 목적지로 전달하는 단계는 상기 응답을 호스트로 전달하는 단계를 포함한다.
설명 60. 설명 59에 따른 방법에 있어서,
상기 이레이저 코딩 로직에서 스누핑 로직을 사용하여 상기 전송을 처리하는 단계는 NVMe SSD의 식별자를 가상 스토리지 장치의 식별자로 대체하는 단계를 더 포함한다.
설명 61. 설명 45에 따른 방법에 있어서,
상기 PCIe 스위치를 통해 상기 전송을 그것의 목적지로 전달하는 단계는 상기 전송을 NVMe SSD가 연결된 제 2 PCIe 스위치로 전달하는 단계를 포함하고,
상기 NVMe SSD는 상기 목적지이다.
설명 62. 설명 61에 따른 방법에 있어서,
PCIe 스위치는 제 1 섀시에 있고, 제 2 PCIe 스위치는 제 2 섀시에 있다.
설명 63. 설명 45에 따른 방법에 있어서,
이레이저 코딩과 함께 사용하기 위해 PCIe 스위치에 연결된 적어도 하나의 NVMe SSD를 초기화하는 단계를 더 포함한다.
설명 64. 설명 45에 따른 방법에 있어서,
새로운 NVMe SSD가 상기 PCIe 스위치에 연결되었는지를 검출하는 단계; 및
새로운 NVMe SSD를 가상 스토리지 장치의 용량에 추가하는 단계를 더 포함한다.
설명 65. 설명 64에 따른 방법에 있어서,
이레이저 코딩과 함께 사용하기 위해 새로운 NVMe SSD를 초기화하는 단계를 더 포함한다.
설명 66. 설명 45에 따른 방법에 있어서,
상기 PCIe 스위치에 연결된 고장난 NVMe SSD를 검출하는 단계; 및
고장난 NVMe SSD 상에 저장된 데이터의 이레이저 코딩 복구를 수행하는 단계를 더 포함한다.
설명 67. 설명 66에 따른 방법에 있어서,
상기 고장난 NVMe SSD에 대한 대체 NVMe SSD를 검출하는 단계; 및
상기 대체 NVMe SSD를 사용하여 고장난 NVMe SSD를 재구성하는 단계를 더 포함한다.
설명 68. 설명 45에 따른 방법에 있어서,
PCIe 스위치에 연결된 이레이저 코딩 기능이 없는 NVMe SSD들만을 검출하는 단계;
상기 PCIe 스위치에서 이레이저 코딩 로직을 인에이블 하는 단계를 더 포함한다.
설명 69. 설명 68에 따른 방법에 있어서,
PCIe 스위치의 다운스트림 PCIe 버스 열거를 종료시키는 단계를 더 포함한다.
설명 70. 설명 68에 따른 방법에 있어서,
PCIe 스위치에 연결된 NVMe SSD들 및 이레이저 코딩 방식의 용량에 적어도 부분적으로 기초하는 용량을 갖는 가상 스토리지 장치를 호스트에 보고하는 단계를 더 포함한다.
설명 71. 설명 45에 따른 방법에 있어서,
이레이저 코딩 기능을 갖는 적어도 하나의 비 스토리지 장치 또는 적어도 하나의 NVMe SSD가 상기 PCIe 스위치에 연결되어 있음을 검출하는 단계; 및
상기 PCIe 스위치 내의 상기 이레이저 코딩 로직을 디스인에이블 시키는 단계를 더 포함한다.
설명 72. 설명 45에 따른 방법에 있어서,
이레이저 코딩 기능을 갖는 적어도 하나의 비 스토리지 장치 또는 적어도 하나의 NVMe SSD가 상기 PCIe 스위치에 연결되어 있음을 검출하는 단계;
상기 PCIe 스위치 내의 상기 이레이저 코딩 로직을 인에이블 시키는 단계; 및
이레이저 코딩 기능을 갖는 적어도 하나의 비 스토리지 장치 또는 적어도 하나의 NVMe SSD를 디스인에이블 시키는 단계를 더 포함한다.
설명 73. 설명 72에 따른 방법에 있어서,
PCIe 스위치로부터의 PCIe 버스 열거 다운스트림을 종료하는 단계를 더 포함한다.
설명 74. 설명 72에 따른 방법에 있어서,
PCIe 스위치에 연결된 NVMe SSD들 및 이레이저 코딩 방식의 용량들에 적어도 부분적으로 기초하는 용량을 갖는 가상 스토리지 장치를 호스트에 보고하는 단계를 더 포함한다.
설명 75. 설명 45에 따른 방법에 있어서,
이레이저 코딩 방식을 사용하는 이레이저 코딩 로직을 포함하는 PCIe 스위치를 구성하는 단계를 더 포함한다.
설명 76. 설명 75에 따른 방법에 있어서,
이레이저 코딩 방식을 사용하는 이레이저 코딩 로직을 포함하는 PCIe 스위치를 구성하는 단계는 BMC를 사용하여 이레이저 코딩 방식을 사용하는 이레이저 코딩 로직을 포함하는 PCIe 스위치를 구성하는 단계를 포함한다.
설명 77. 본 발명의 개념의 실시 예는 비 일시적인 저장 매체를 포함하는 물품을 포함하며, 상기 비 일시적인 저장 매체는 명령어들을 저장하며, 명령어들이 기계에 의해 실행되는 경우,
이레이저 코딩 로직을 이용하여 PCIe 스위치에서 전송을 수신하는 단계;
상기 이레이저 코딩 로직에서 스누핑 로직을 사용하여 상기 전송을 처리하는 단계; 및
상기 전송을 상기 PCIe 스위치를 통해 상기 목적지로 전송하는 단계가 처리된다.
설명 78. 설명 77에 따른 물품에 있어서,
본 발명의 개념의 실시 예는 설명 77에 따른 물품을 포함하며, 상기 이레이저 코딩 로직은 Look-Aside 이레이저 코딩 로직 및 Look-Through 이레이저 코딩 로직 중 하나를 포함한다.
설명 79. 설명 77에 따른 물품에 있어서,
상기 이레이저 코딩 로직에서 스누핑 로직을 사용하여 상기 전송을 처리하는 단계는 상기 전송이 상기 스누핑 로직에 의한 제어 전송을 포함하는 것으로 결정하는 단계를 포함하고,
상기 PCIe 스위치를 통해 상기 전송을 그것의 목적지로 전달하는 단계는 상기 전송을 PPU(Power Processing Unit)로 전달하는 단계를 포함한다.
설명 80. 설명 77에 따른 물품에 있어서,
상기 이레이저 코딩 로직에서 스누핑 로직을 사용하여 상기 전송을 처리하는 단계는 활성화된 이레이저 코딩 로직에 적어도 부분적으로 기초하여 스누핑 로직을 사용하여 전송을 처리하는 단계를 포함한다 .
설명 81. 설명 77에 따른 물품에 있어서,
이레이저 코딩 로직을 포함하는 PCIe 스위치에서 전송을 수신하는 단계는 호스트로부터 읽기 요청을 수신하는 단계를 포함하고,
상기 이레이저 코딩 로직에서 스누핑 로직을 사용하여 상기 전송을 처리하는 단계는 호스트 LBA를 읽기 요청 내의 장치 LBA로 대체하는 단계를 포함하고,
상기 PCIe 스위치를 통해 상기 전송을 그것의 목적지로 전달하는 단계는 읽기 요청을 NVMe SSD로 전달하는 단계를 포함한다.
설명 82. 설명 81에 따른 물품에 있어서,
상기 이레이저 코딩 로직에서 스누핑 로직을 사용하여 상기 전송을 처리하는 단계는 읽기 요청이 전달되어야하는 NVMe SSD를 식별하는 단계를 더 포함한다.
설명 83. 설명 81에 따른 물품에 있어서,
상기 이레이저 코딩 로직에서 스누핑 로직을 사용하여 상기 전송을 처리하는 단계는 캐시에 존재하는 데이터에 적어도 부분적으로 기초하여 캐시로부터의 읽기 요청 내의 호스트에 의해 요청된 데이터에 액세스하는 단계를 포함하고,
호스트 LBA를 읽기 요청 내의 장치 LBA로 대체하는 단계는 캐시에 존재하지 않는 데이터에 적어도 부분적으로 기초하여 호스트 LBA를 읽기 요청 내의 장치 LBA로 대체하는 단계를 포함하고,
상기 PCIe 스위치를 통해 상기 전송을 그것의 목적지로 전달하는 단계는 단계는 캐시에 존재하지 않는 데이터에 적어도 부분적으로 기초하여 NVMe SSD로 읽기 요청을 전달하는 단계를 포함한다.
설명 84. 설명 77에 따른 물품에 있어서,
이레이저 코딩 로직을 포함하는 PCIe 스위치에서 전송을 수신하는 단계는 호스트로부터 읽기 요청을 수신하는 단계를 포함하고,
상기 이레이저 코딩 로직에서 스누핑 로직을 사용하여 상기 전송을 처리하는 단계는 호스트 LBA를 읽기 요청 내의 장치 LBA로 대체하는 단계를 포함하고,
상기 PCIe 스위치를 통해 상기 전송을 그것의 목적지로 전달하는 단계는 읽기 요청을 NVMe SSD로 전달하는 단계를 포함한다.
설명 85. 설명 84에 따른 물품에 있어서,
상기 이레이저 코딩 로직에서 스누핑 로직을 사용하여 상기 전송을 처리하는 단계는 읽기 요청이 전달되어야하는 NVMe SSD를 식별하는 단계를 더 포함한다.
설명 86. 설명 84에 따른 물품에 있어서, 상기 비 일시적인 저장 매체는 명령어들을 저장하며, 명령어들이 기계에 의해 실행되는 경우,
적어도 하나의 NVMe SSD로부터 블록들의 스트라이프를 독출하는 단계;
블록들의 업데이트 된 스트라이프를 형성하기 위해 상기 블록들의 스트라이프와 상기 쓰기 요청 내의 데이터를 병합하는 단계; 및
블록들의 상기 업데이트 된 스트라이프를 상기 적어도 하나의 NVMe SSD에 기록하는 단계가 처리된다.
설명 87. 설명 86에 따른 물품에 있어서,
상기 쓰기 요청 내의 데이터를 병합하는 단계는 쓰기 요청의 데이터에 추가하여 적어도 하나의 NVMe SSD에 기록하기 위한 추가 데이터를 계산하는 단계를 포함한다.
설명 88. 설명 86에 따른 물품에 있어서,
캐시 내에 존재하는 블록들의 스트라이프에 적어도 부분적으로 기초하여 캐시로부터 블록들의 스트라이프를 독출하는 단계; 및
적어도 하나의 NVMe SSD로부터 블록들의 스트라이프를 판독하는 단계는 캐시 내에 존재하지 않는 블록들의 스트라이프에 적어도 부분적으로 기초하여 적어도 하나의 NVMe SSD로부터 블록들의 스트라이프를 판독하는 단계를 포함한다.
설명 89. 설명 86에 따른 물품에 있어서,
블록들의 상기 업데이트 된 스트라이프를 상기 적어도 하나의 NVMe SSD에 기록하는 단계는 블록들의 상기 업데이트 된 스트라이프를 쓰기 버퍼에 기록하는 단계를 포함한다.
설명 90. 설명 89에 따른 물품에 있어서, 상기 비 일시적인 저장 매체는 명령어들을 저장하며, 명령어들이 기계에 의해 실행되는 경우,
블록들의 업데이트 된 스트라이프가 쓰기 버퍼에 기록되고 난 후 블록들의 업데이트 된 스트라이프가 적어도 하나의 NVMe SSD에 기록되기 전에 기록이 완료되었음을 호스트에 응답하는 단계가 처리된다.
설명 91. 설명 77에 따른 물품에 있어서,
이레이저 코딩 로직을 포함하는 PCIe 스위치에서 전송을 수신하는 단계는 호스트로부터 응답을 수신하는 단계를 포함하고,
상기 이레이저 코딩 로직에서 스누핑 로직을 사용하여 상기 전송을 처리하는 단계는 읽기 요청 내의 장치 LBA를 호스트 LBA로 대체하는 단계를 포함하고,
상기 PCIe 스위치를 통해 상기 전송을 그것의 목적지로 전달하는 단계는 상기 응답을 호스트로 전달하는 단계를 포함한다.
설명 92. 설명 91에 따른 물품에 있어서,
상기 이레이저 코딩 로직에서 스누핑 로직을 사용하여 상기 전송을 처리하는 단계는 NVMe SSD의 식별자를 가상 스토리지 장치의 식별자로 대체하는 단계를 더 포함한다.
설명 93. 설명 77에 따른 물품에 있어서,
상기 PCIe 스위치를 통해 상기 전송을 그것의 목적지로 전달하는 단계는 상기 전송을 NVMe SSD가 연결된 제 2 PCIe 스위치로 전달하는 단계를 포함하고,
상기 NVMe SSD는 상기 목적지이다.
설명 94. 설명 93에 따른 물품에 있어서,
PCIe 스위치는 제 1 섀시에 있고, 제 2 PCIe 스위치는 제 2 섀시에 있다.
설명 95. 설명 77에 따른 물품에 있어서, 상기 비 일시적인 저장 매체는 명령어들을 저장하며, 명령어들이 기계에 의해 실행되는 경우,
이레이저 코딩과 함께 사용하기 위해 PCIe 스위치에 연결된 적어도 하나의 NVMe SSD를 초기화하는 단계가 처리된다.
설명 96. 설명 77에 따른 물품에 있어서, 상기 비 일시적인 저장 매체는 명령어들을 저장하며, 명령어들이 기계에 의해 실행되는 경우,
새로운 NVMe SSD가 상기 PCIe 스위치에 연결되었는지를 검출하는 단계; 및
새로운 NVMe SSD를 가상 스토리지 장치의 용량에 추가하는 단계가 처리된다.
설명 97. 설명 96에 따른 물품에 있어서, 상기 비 일시적인 저장 매체는 명령어들을 저장하며, 명령어들이 기계에 의해 실행되는 경우,
이레이저 코딩과 함께 사용하기 위해 새로운 NVMe SSD를 초기화하는 단계가 처리된다.
설명 98. 설명 77에 따른 물품에 있어서, 상기 비 일시적인 저장 매체는 명령어들을 저장하며, 명령어들이 기계에 의해 실행되는 경우,
상기 PCIe 스위치에 연결된 고장난 NVMe SSD를 검출하는 단계; 및
고장난 NVMe SSD 상에 저장된 데이터의 이레이저 코딩 복구를 수행하는 단계가 처리된다.
설명 99. 설명 98에 따른 물품에 있어서, 상기 비 일시적인 저장 매체는 명령어들을 저장하며, 명령어들이 기계에 의해 실행되는 경우,
상기 고장난 NVMe SSD에 대한 대체 NVMe SSD를 검출하는 단계; 및
상기 대체 NVMe SSD를 사용하여 고장난 NVMe SSD를 재구성하는 단계가 처리된다.
설명 100. 설명 77에 따른 물품에 있어서, 상기 비 일시적인 저장 매체는 명령어들을 저장하며, 명령어들이 기계에 의해 실행되는 경우,
PCIe 스위치에 연결된 이레이저 코딩 기능이 없는 NVMe SSD들만을 검출하는 단계;
상기 PCIe 스위치에서 이레이저 코딩 로직을 인에이블 하는 단계가 처리된다.
설명 101. 설명 100에 따른 물품에 있어서, 상기 비 일시적인 저장 매체는 명령어들을 저장하며, 명령어들이 기계에 의해 실행되는 경우,
PCIe 스위치의 다운스트림 PCIe 버스 열거를 종료시키는 단계가 처리된다.
설명 102. 설명 100에 따른 물품에 있어서, 상기 비 일시적인 저장 매체는 명령어들을 저장하며, 명령어들이 기계에 의해 실행되는 경우,
PCIe 스위치에 연결된 NVMe SSD들 및 이레이저 코딩 방식의 용량에 적어도 부분적으로 기초하는 용량을 갖는 가상 스토리지 장치를 호스트에 보고하는 단계가 처리된다.
설명 103. 설명 77에 따른 물품에 있어서, 상기 비 일시적인 저장 매체는 명령어들을 저장하며, 명령어들이 기계에 의해 실행되는 경우,
이레이저 코딩 기능을 갖는 적어도 하나의 비 스토리지 장치 또는 적어도 하나의 NVMe SSD가 상기 PCIe 스위치에 연결되어 있음을 검출하는 단계; 및
상기 PCIe 스위치 내의 상기 이레이저 코딩 로직을 디스인에이블 시키는 단계가 처리된다.
설명 104. 설명 77에 따른 물품에 있어서, 상기 비 일시적인 저장 매체는 명령어들을 저장하며, 명령어들이 기계에 의해 실행되는 경우,
이레이저 코딩 기능을 갖는 적어도 하나의 비 스토리지 장치 또는 적어도 하나의 NVMe SSD가 상기 PCIe 스위치에 연결되어 있음을 검출하는 단계;
상기 PCIe 스위치 내의 상기 이레이저 코딩 로직을 인에이블 시키는 단계; 및
이레이저 코딩 기능을 갖는 적어도 하나의 비 스토리지 장치 또는 적어도 하나의 NVMe SSD를 디스인에이블 시키는 단계가 처리된다.
설명 105. 설명 104에 따른 물품에 있어서, 상기 비 일시적인 저장 매체는 명령어들을 저장하며, 명령어들이 기계에 의해 실행되는 경우,
PCIe 스위치로부터의 PCIe 버스 열거 다운스트림을 종료하는 단계가 처리된다.
설명 106. 설명 104에 따른 물품에 있어서, 상기 비 일시적인 저장 매체는 명령어들을 저장하며, 명령어들이 기계에 의해 실행되는 경우,
PCIe 스위치에 연결된 NVMe SSD들 및 이레이저 코딩 방식의 용량들에 적어도 부분적으로 기초하는 용량을 갖는 가상 스토리지 장치를 호스트에 보고하는 단계가 처리된다.
설명 107. 설명 77에 따른 물품에 있어서, 상기 비 일시적인 저장 매체는 명령어들을 저장하며, 명령어들이 기계에 의해 실행되는 경우,
이레이저 코딩 방식을 사용하는 이레이저 코딩 로직을 포함하는 PCIe 스위치를 구성하는 단계가 처리된다.
설명 108. 설명 107에 따른 물품에 있어서,
이레이저 코딩 방식을 사용하는 이레이저 코딩 로직을 포함하는 PCIe 스위치를 구성하는 단계는 BMC를 사용하여 이레이저 코딩 방식을 사용하는 이레이저 코딩 로직을 포함하는 PCIe 스위치를 구성하는 단계를 포함한다.
설명 109. 본 발명의 개념의 실시 예는 시스템을 포함한다. 상기 시스템은:
NVMe SSD;
상기 NVMe SSD를 지원하는 하나 또는 그 이상의 기능들을 구현하는 FPGA; 및
PCIe 스위치를 포함하고,
상기 하나 또는 그 이상의 기능들은 데이터 가속화, 데이터 중복 제거, 데이터 무결성, 데이터 암호화, 및 데이터 압축 중 적어도 하나를 포함하는 집합으로부터 획득되고,
상기 PCIe 스위치는 상기 FPGA 및 상기 NVMe SSD와 통신한다.
설명 110. 설명 109에 따른 시스템에 있어서,
상기 FPGA 및 상기 NVMe SSD는 공통 하우징 내부에 있다.
설명 111. 설명 110에 따른 시스템에 있어서,
상기 PCIe 스위치는 상기 FPGA 및 상기 NVMe SSD를 포함하는 공통 하우징 외부에 있다.
설명 112. 설명 109에 따른 시스템에 있어서,
상기 PCIe 스위치는 상기 FPGA에 연결되고,
상기 FPGA는 상기 NVMe SSD에 연결된다.
설명 113. 설명 109에 따른 시스템에 있어서,
상기 PCIe 스위치는 상기 NVMe SSD에 연결되고,
상기 NVMe SSD는 FPGA에 연결된다.
설명 114. 설명 109에 따른 시스템에 있어서,
상기 PCIe 스위치는 이레이저 코딩 로직을 포함하고,
상기 이레이저 코딩 로직은 이레이저 코딩 컨트롤러를 포함한다.
설명 115. 설명 114에 따른 시스템에 있어서,
상기 이레이저 코딩 로직은 Look-Aside 이레이저 코딩 로직 및 Look-Through 이레이저 코딩 로직 중 하나를 포함한다.
설명 116. 설명 114에 따른 시스템에 있어서,
이레이저 코딩 로직은 캐시 내에 존재하는 읽기 요청에 의해 요청 된 데이터에 적어도 부분적으로 기초하여, 호스트로부터의 읽기 요청에 대한 응답을 반환하도록 동작한다.
설명 117. 설명 116에 따른 시스템에 있어서,
상기 이레이저 코딩 로직은 캐시를 더 포함한다.
설명 118. 설명 116에 따른 시스템에 있어서,
상기 PCIe 스위치는 섀시 내에 위치하고,
상기 섀시는 이레이저 코딩 로직에 의해 캐시로서 사용되는 메모리를 포함한다.
설명 119. 설명 114에 따른 시스템에 있어서,
이레이저 코딩 로직은 쓰기 요청을 완료하기 전에 호스트에 대한 쓰기 요청에 대한 응답을 반환하도록 동작한다.
설명 120. 설명 119에 따른 시스템에 있어서,
상기 PCIe 스위치는 쓰기 버퍼를 더 포함하고;
상기 이레이저 코딩 컨트롤러는 쓰기 요청 내의 데이터를 쓰기 버퍼에 저장하도록 동작한다.
설명 121. 설명 114에 따른 시스템에 있어서,
이레이저 코딩 로직은 스누핑 로직을 포함하는 Look-Aside 이레이저 코딩 로직 및 Look-Through 이레이저 코딩 로직을 포함한다.
설명 122. 설명 114에 따른 시스템에 있어서,
이레이저 코딩 로직은 PCIe 스위치에서 수신된 제어 전송을 가로채고 제어 전송을 PPU로 전송하도록 동작한다.
설명 123. 설명 114에 따른 시스템에 있어서,
이레이저 코딩 로직은 호스트로부터 PCIe 스위치에서 수신된 데이터 전송을 가로채고, 상기 데이터 전송에서 호스트에 의해 사용되는 호스트 LBA를 상기 NVMe SSD에서 사용되는 장치 LBA로 대체하도록 동작한다.
설명 124. 설명 123에 따른 시스템에 있어서,
이레이저 코딩 로직은 상기 NVMe SSD로 상기 데이터 전송을 지시하도록 동작한다.
설명 125. 설명 114에 따른 시스템에 있어서,
이레이저 코딩 로직은 NVMe SSD로부터 PCIe 스위치에서 수신된 데이터 전송을 가로채고, 상기 데이터 전송에서 NVMe SSD에서 사용되는 장치 LBA를 호스트에 의해 사용되는 호스트 LBA로 대체하도록 동작한다.
설명 126. 설명 114에 따른 시스템에 있어서,
이레이저 코딩 로직은 NVMe SSD 및 제 2 NVMe SSD에 걸친 가상 스토리지 장치를 정의한다.
설명 127. 설명 114에 따른 시스템에 있어서,
상기 PCIe 스위치는 이레이저 코딩 로직과 함께 사용 가능한 NVMe SSD에 적어도 부분적으로 기초하여 이레이저 코딩 로직을 인에이블하도록 동작한다.
설명 128. 설명 114에 따른 시스템에 있어서,
이레이저 코딩 로직을 포함하는 PCIe 스위치에 연결된 제 2 장치를 더 포함한다.
설명 129. 설명 128에 따른 시스템에 있어서,
상기 제 2 장치는 스토리지 장치, FPGA를 포함하는 SSD, 및 GPU 중 적어도하나를 포함한다.
설명 130. 설명 128에 따른 시스템에 있어서,
제 2 장치는 이레이저 코딩 로직과 함께 사용불가능하고,
상기 PCIe 스위치는 이레이저 코딩 로직과 함께 사용 불가능한 제 2 장치에 적어도 부분적으로 기초하여 이레이저 코딩 로직을 디스에이블하도록 동작한다.
설명 131. 설명 128에 따른 시스템에 있어서,
제 2 장치는 이레이저 코딩 로직과 함께 사용 불가능하고,
PCIe 스위치는 이레이저 코딩 로직과 함께 사용 가능한 NVMe SSD에 적어도 부분적으로 기초하여 이레이저 코딩 로직을 인에이블하고, 이레이저 코딩 로직을 사용함 없이 제 2 장치로의 액세스를 인에이블하도록 동작한다.
설명 132. 설명 128에 따른 시스템에 있어서,
제 2 장치는 이레이저 코딩 로직과 함께 사용 불가능하고,
PCIe 스위치는 이레이저 코딩 로직과 함께 사용 가능한 NVMe SSD에 적어도 부분적으로 기초하여 이레이저 코딩 로직을 인 에이블하고, 제 2 장치로의 액세스를 디스에이블하도록 동작한다.
설명 133. 본 발명의 개념의 실시 예는 시스템을 포함한다. 상기 시스템은:
NVMe SSD; 및
상기 NVMe SSD를 지원하는 하나 또는 그 이상의 기능들을 구현하는 제 1 FPGA 부분 및 PCIe 스위치를 구현하는 제 2 FPGA 부분을 포함하는 FPGA를 포함하되,
상기 하나 또는 그 이상의 기능들은 데이터 가속화, 데이터 중복 제거, 데이터 무결성, 데이터 암호화, 및 데이터 압축 중 적어도 하나를 포함하는 집합으로부터 획득되고,
상기 PCIe 스위치는 상기 FPGA 및 상기 NVMe SSD와 통신하고,
상기 FPGA 및 상기 NVMe SSD는 공통 하우징 내부에 있다.
설명 134. 설명 133에 따른 시스템에 있어서,
상기 PCIe 스위치는 이레이저 코딩 컨트롤러를 포함하는 이레이저 코딩 로직을 포함한다.
설명 135. 설명 134에 따른 시스템에 있어서,
상기 이레이저 코딩 로직은 NVMe SSD의 적어도 두 부분에 걸쳐있는 가상 스토리지 장치를 정의한다.
설명 136. 설명 134에 따른 시스템에 있어서,
상기 이레이저 코딩 로직은 NVMe SSD 및 제 2 NVMe SSD에 걸친 가상 스토리지 장치를 정의한다.
설명 137. 설명 136에 따른 시스템에 있어서,
상기 제 2 NVMe SSD는 공통 하우징 내부에 있다.
설명 138. 설명 136에 따른 시스템에 있어서,
상기 제 2 NVMe SSD는 공통 하우징 외부에 있다.
설명 139. 설명 134에 따른 시스템에 있어서,
상기 이레이저 코딩 로직은 Look-Aside 이레이저 코딩 로직 및 Look-Through 이레이저 코딩 로직 중 적어도 하나를 포함한다.
설명 140. 설명 134에 따른 시스템에 있어서,
상기 이레이저 코딩 로직은 캐시 내에 존재하는 읽기 요청에 의해 요청 된 데이터에 적어도 부분적으로 기초하여, 호스트로부터의 읽기 요청에 대한 응답을 반환하도록 동작한다.
설명 141. 설명 140에 따른 시스템에 있어서,
상기 FPGA는 상기 캐시를 더 포함한다.
설명 142. 설명 140에 따른 시스템에 있어서,
상기 공통 하우징은 상기 섀시 내에 위치하고,
상기 섀시는 상기 이레이저 코딩 로직에 의해 상기 캐시로서 사용되는 메모리를 포함한다.
설명 143. 설명 134에 따른 시스템에 있어서,
상기 이레이저 코딩 로직은 쓰기 요청을 완료하기 이전에, 호스트에 대한 상기 쓰기 요청에 대한 응답을 반환하도록 동작하는 시스템.
설명 144. 설명 143에 따른 시스템에 있어서,
상기 FPGA는 쓰기 버퍼를 더 포함하고,
상기 이레이저 코딩 컨트롤러는 쓰기 요청 내의 데이터를 쓰기 버퍼에 저장하도록 동작한다.
설명 145. 설명 134에 따른 시스템에 있어서,
상기 이레이저 코딩 로직은 스누핑 로직을 포함하는 Look-Aside 이레이저 코딩 로직 및 Look-Through 이레이저 코딩 로직을 포함한다.
설명 146. 설명 145에 따른 시스템에 있어서,
상기 스누핑 로직은 상기 PCIe 스위치에서 수신 된 제어 전송을 가로채고 상기 제어 전송을 상기 PPU로 전달하도록 동작한다.
설명 147. 설명 134에 따른 시스템에 있어서,
상기 이레이저 코딩 로직은 호스트로부터 PCIe 스위치에서 수신된 데이터 송신을 가로채고, 데이터 전송에서 호스트에 의해 사용된 호스트 LBA를 NVMe SSD에서 사용하는 장치 LBA로 대체하도록 동작한다.
설명 148. 설명 147에 따른 시스템에 있어서,
이레이저 코딩 로직은 데이터 전송을 NVMe SSD로 지시하도록 동작한다.
설명 149. 설명 134에 따른 시스템에 있어서,
상기 이레이저 코딩 로직은 NVCe SSD로부터 PCIe 스위치에서 수신된 데이터 송신을 가로채고, 데이터 전송에서 NVMe SSD에서 사용하는 장치 LBA를 호스트에 의해 사용된 호스트 LBA로 대체하도록 동작한다.
설명 150. 설명 134에 따른 시스템에 있어서,
이레이저 코딩 로직을 포함하는 상기 PCIe 스위치는 이레이저 코딩 로직과 함께 사용 가능한 NVMe SSD에 적어도 부분적으로 기초하여, 상기 이레이저 코딩 로직을 인에이블하도록 동작한다.
설명 151. 설명 134에 따른 시스템에 있어서,
이레이저 코딩 로직을 포함하는 상기 PCIe 스위치는 이레이저 코딩 로직과 함께 사용 불가능한 NVMe SSD에 적어도 부분적으로 기초하여, 상기 이레이저 코딩 로직을 디스에이블하도록 동작한다.
설명 152. 본 발명의 개념의 실시 예는 시스템을 포함한다. 상기 시스템은:
NVMe SSD; 및
이레이저 코딩 로직을 포함하는 PCIe 스위치를 포함하되,
상기 PCIe 스위치는:
상기 PCIe 스위치가 프로세서와 통신 할 수 있게 하는 외부 커넥터;
상기 PCIe 스위치가 상기 NVMe SSD와 통신 할 수 있게 하는 적어도 하나의 커넥터;
상기 PCIe 스위치를 구성하는 PPU; 및
상기 NVMe SSD에 저장된 데이터에 이레이저 코딩 방식을 적용하기 위한 회로를 포함하는 이레이저 코딩 컨트롤러를 포함한다.
설명 153. 설명 152에 따른 시스템에 있어서,
상기 시스템은 제 2 NVMe SSD를 더 포함하고,
이레이저 코딩 로직을 포함하는 상기 PCIe 스위치는 이레이저 코딩 로직을 포함하는 상기 PCIe 스위치가 제 2 NVMe SSD와 통신 할 수 있도록 하는 제 2 커넥터를 포함한다.
설명 154. 설명 152에 따른 시스템에 있어서,
상기 시스템은:
제 2 NVMe SSD; 및
제 2 PCIe 스위치를 더 포함하되,
상기 제 2 PCIe 스위치는:
상기 제 2 PCIe 스위치가 상기 프로세서와 통신 할 수 있게 하는 제 2 외부 커넥터;
상기 제 2 PCIe 스위치가 상기 제 2 NVMe SSD와 통신 할 수 있게 하는 제 2 커넥터; 및
상기 제 2 PCIe 스위치가 상기 이레이저 코딩 로직을 포함하는 상기 PCIe 스위치와 통신 할 수 있게 하는 제 3 커넥터를 포함하고,
상기 이레이저 코딩 로직을 포함하는 상기 PCIe 스위치는 상기 이레이저 코딩 로직을 갖는 상기 PCIe 스위치가 상기 제 2 PCIe 스위치와 통신 할 수 있게 하는 제 4 커넥터를 포함하고,
상기 이레이저 코딩 방식은 상기 NVMe SSD 및 상기 제 2 NVMe SSD에 저장된 데이터에 적용된다.
설명 155. 설명 154에 따른 시스템에 있어서,
상기 제 2 PCIe 스위치는 디스에이블 된 제 2 이레이저 코딩 로직을 더 포함한다.
설명 156. 설명 152에 따른 시스템에 있어서,
상기 이레이저 코딩 로직은 Look-Aside 이레이저 코딩 로직 및 Look-Through 이레이저 코딩 로직 중 적어도 하나를 포함한다.
설명 157. 설명 152에 따른 시스템에 있어서,
상기 이레이저 코딩 로직은 캐시 내에 존재하는 읽기 요청에 의해 요청 된 데이터에 적어도 부분적으로 기초하여, 호스트로부터의 읽기 요청에 대한 응답을 반환하도록 동작한다.
설명 158. 설명 157에 따른 시스템에 있어서,
상기 이레이저 코딩 로직은 캐시를 더 포함한다.
설명 159. 설명 157에 따른 시스템에 있어서,
이레이저 코딩 로직을 포함하는 상기 PCIe 스위치는 섀시 내에 위치하고,
상기 섀시는 이레이저 코딩 로직에 의해 캐시로서 사용되는 메모리를 포함한다.
설명 160. 설명 152에 따른 시스템에 있어서,
상기 이레이저 코딩 로직은 읽기 요청을 완료하기 전에 읽기 요청에 대한 응답을 호스트로 반환하도록 동작한다.
설명 161. 설명 160에 따른 시스템에 있어서,
이레이저 코딩 로직을 포함하는 상기 PCIe 스위치는 쓰기 버퍼를 더 포함하고,
상기 이레이저 코딩 컨트롤러는 상기 쓰기 요청 내의 데이터를 상기 쓰기 버퍼에 저장하도록 동작한다.
설명 162. 설명 152에 따른 시스템에 있어서,
이레이저 코딩 로직은 스누핑 로직을 포함하는 Look-Aside 이레이저 코딩 로직 및 Look-Through 이레이저 코딩 로직을 포함한다.
설명 163. 설명 152에 따른 시스템에 있어서,
상기 이레이저 코딩 로직은 상기 PCIe 스위치에서 수신된 제어 전송을 가로채고, 상기 제어 전송을 PPU로 전달하도록 동작한다.
설명 164. 설명 152에 따른 시스템에 있어서,
상기 이레이저 코딩 로직은 호스트로부터 PCIe 스위치에서 수신된 데이터 송신을 가로채고, 상기 데이터 전송에서 상기 호스트에 의해 사용된 호스트 LBA를 상기 NVMe SSD에서 사용하는 장치 LBA로 대체하도록 동작한다.
설명 165. 설명 164에 따른 시스템에 있어서,
상기 이레이저 코딩 로직은 상기 데이터 전송을 상기 NVMe SSD로 지시하도록 동작한다.
설명 166. 설명 152에 따른 시스템에 있어서,
상기 이레이저 코딩 로직은 상기 NVMe SSD로부터 상기 PCIe 스위치에서 수신 된 데이터 송신을 가로채고, 상기 데이터 전송에서 상기 NVMe SSD에서 사용하는 장치 LBA를 상기 호스트에 의해 사용된 호스트 LBA로 대체하도록 동작한다.
설명 167. 설명 152에 따른 시스템에 있어서,
상기 이레이저 코딩 로직은 상기 NVMe SSD 및 제 2 NVMe SSD에 걸친 가상 스토리지 장치를 정의한다.
설명 168. 설명 152에 따른 시스템에 있어서,
이레이저 코딩 로직을 갖는 상기 PCIe 스위치는 이레이저 코딩 로직과 함께 사용 가능한 NVMe SSD에 적어도 부분적으로 기초하여 이레이저 코딩 로직을 인 에이블하도록 동작한다.
설명 169. 설명 152에 따른 시스템에 있어서,
이레이저 코딩 로직을 포함하는 PCIe 스위치에 연결된 제 2 장치를 더 포함한다.
설명 170. 설명 169에 따른 시스템에 있어서,
상기 제 2 장치는 스토리지 장치, FPGA를 갖는 SSD, 및 GPU 중 적어도 하나를 포함한다.
설명 171. 설명 169에 따른 시스템에 있어서,
제 2 장치는 상기 이레이저 코딩 로직과 함께 사용 불가능하고,
이레이저 코딩 로직을 포함하는 상기 PCIe 스위치는 이레이저 코딩 로직과 함께 사용 불가능한 상기 제 2 장치에 적어도 부분적으로 기초하여 상기 이레이저 코딩 로직을 디스에이블하도록 동작한다.
설명 172. 설명 169에 따른 시스템에 있어서,
상기 제 2 장치는 이레이저 코딩 로직과 함께 사용 불가능하고,
이레이저 코딩 로직을 포함하는 상기 PCIe 스위치는 이레이저 코딩 로직과 함께 사용 가능한 NVMe SSD에 적어도 부분적으로 기초하여 이레이저 코딩 로직을 인 에이블하고, 이레이저 코딩 로직을 사용함이 없이 상기 제 2 장치로의 액세스를 인에이블하도록 동작한다.
설명 173. 설명 169에 따른 시스템에 있어서,
제 2 장치는 이레이저 코딩 로직과 함께 사용 불가능하고,
이레이저 코딩 로직을 갖는 상기 PCIe 스위치는 이레이저 코딩 로직과 함께 사용 가능한 NVMe SSD에 적어도 부분적으로 기초하여 이레이저 코딩 로직을 인 에이블하고, 상기 제 2 장치로의 액세스를 디스에이블하도록 동작한다.
결론적으로, 본 명세서에 기술된 실시 예에 대한 다양한 변경의 관점에서, 이 상세한 설명 및 첨부 된 자료는 단지 예시적인 것으로 의도되며, 본 발명의 범위를 제한하는 것으로 간주되어서는 안 된다. 그러므로, 본 발명으로써 청구되는 것은 후술하는 청구범위 및 그 균등물의 범위 및 사상 내에 있을 수 있는 모든 변형이다.

Claims (20)

  1. 시스템에 있어서,
    NVMe(Non-Volatile Memory Express) SSD(Solid State Drive);
    상기 NVMe SSD를 지원하는 하나 또는 그 이상의 기능들을 구현하는 FPGA; 및
    PCIe(Peripheral Component Interconnect Express) 스위치를 포함하되,
    상기 하나 또는 그 이상의 기능들은 데이터 가속화, 데이터 중복 제거, 데이터 무결성, 데이터 암호화, 및 데이터 압축 중 적어도 하나를 포함하고,
    상기 PCIe 스위치는 상기 FPGA 및 상기 NVMe SSD와 통신하는 시스템.
  2. 제 1 항에 있어서,
    상기 PCIe 스위치는 이레이저 코딩 로직(Erasure Coding Logic),을 포함하고,
    상기 이레이저 코딩 로직은 이레이저 코딩 컨트롤러를 포함하는 시스템.
  3. 제 2 항에 있어서,
    상기 이레이저 코딩 로직은 호스트로부터의 읽기 요청에서 요청된 데이터가 적어도 부분적으로 캐시에 존재하는 것에 기초하여, 상기 호스트로부터의 상기 읽기 요청에 대한 응답을 반환하도록 동작하는 시스템.
  4. 제 2 항에 있어서,
    상기 이레이저 코딩 로직은 쓰기 요청을 완료하기 이전에, 호스트에 대한 상기 쓰기 요청에 대한 응답을 반환하도록 동작하는 시스템.
  5. 제 2 항에 있어서,
    상기 이레이저 코딩 로직은 Look-Aside 코딩 로직을 포함하고,
    상기 Look-Aside 코딩 로직은 스누핑 로직을 포함하는 시스템.
  6. 제 2 항에 있어서,
    상기 이레이저 코딩 로직은 호스트로부터 상기 PCIe 스위치에서 수신된 데이터 전송을 가로채고, 상기 데이터 전송에서 상기 호스트에 의해 사용되는 호스트 논리 블록 어드레스(LBA; Logical Block Address)를 상기 NVMe SSD에 의해 사용되는 장치 LBA로 교체하도록 동작하는 시스템.
  7. 제 2 항에 있어서,
    상기 PCIe 스위치는 네이티브 이레이저 코딩 로직(native Erasure Coding Logic)을 포함하지 않는 상기 NVMe SSD에 적어도 부분적으로 기초하여, 상기 이레이저 코딩 로직을 활성화시키도록 동작하는 시스템.
  8. 제 2 항에 있어서,
    이레이저 코딩 로직을 포함하는 상기 PCIe 스위치와 연결된 제2 장치를 더 포함하는 시스템.
  9. 제 8 항에 있어서,
    상기 제 2 장치는 네이티브 이레이저 코딩 로직을 포함하는 스토리지 장치 및 비-스토리지 장치 중 적어도 하나를 포함하고,
    상기 PCIe 스위치는 상기 제 2 장치에 적어도 부분적으로 기초하여 상기 이레이저 코딩 로직을 디스에이블(disable) 시키도록 동작하는 시스템.
  10. 제 8 항에 있어서,
    상기 제 2 장치는 네이티브 이레이저 코딩 로직을 포함하는 스토리지 장치 및 비-스토리지 장치 중 적어도 하나를 포함하고,
    상기 PCIe 스위치는 네이티브 이레이저 코딩 로직을 포함하지 않는 NVMe SSD에 적어도 부분적으로 기초하여 상기 이레이저 코딩 로직을 인에이블(enable) 시키고, 상기 이레이저 코딩 로직을 사용하는 것 없이, 상기 제 2 장치에 대한 액세스를 인에이블(enable) 시키도록 동작하는 시스템.
  11. NVMe(Non-Volatile Memory Express) SSD(Solid State Drive); 및
    상기 NVMe SSD를 지원하는 하나 또는 그 이상의 기능들을 구현하는 제 1 FPGA 부분 및 PCIe(Peripheral Component Interconnect Express) 스위치를 구현하는 제 2 FPGA 부분을 포함하는 FPGA(Field Programmable Gate Array)를 포함하되,
    상기 하나 또는 그 이상의 기능들은 데이터 가속화, 데이터 중복 제거, 데이터 무결성, 데이터 암호화, 및 데이터 압축 중 적어도 하나를 포함하고,
    상기 PCIe 스위치는 상기 FPGA 및 상기 NVMe SSD와 통신하고,
    상기 FPGA 및 상기 NVMe SSD는 공통 하우징 내부에 있는 시스템.
  12. 제 11 항에 있어서,
    상기 PCIe 스위치는 이레이저 코딩 로직을 포함하고,
    상기 이레이저 코딩 로직은 이레이저 코딩 컨트롤러를 포함하는 시스템
  13. 제 12 항에 있어서,
    상기 이레이저 코딩 로직은 Look-Aside 이레이저 코딩 로직 및 Look-Through 이레이저 코딩 로직 중 적어도 하나를 포함하는 시스템.
  14. 제 12 항에 있어서,
    상기 이레이저 코딩 로직은 호스트로부터의 읽기 요청에서 요청된 데이터가 캐시에 존재하는 것에 적어도 부분적으로 기초하여, 상기 호스트로부터의 상기 읽기 요청에 대한 응답을 반환하도록 동작하는 시스템.
  15. 제 12 항에 있어서,
    상기 이레이저 코딩 로직은 호스트로부터의 쓰기 요청을 완료하기 전에, 상기 호스트로부터의 상기 쓰기 요청에 대한 응답을 반환하도록 동작하는 시스템.
  16. 제 12 항에 있어서,
    상기 이레이저 코딩 로직은 Look-Aside 코딩 로직을 포함하고,
    상기 Look-Aside 코딩 로직은 스누퍼 로직을 포함하는 시스템.
  17. 제 12 항에 있어서,
    상기 이레이저 코딩 로직은 호스트로부터 상기 PCIe 스위치에서 수신된 데이터 전송을 가로채고, 상기 데이터 전송에서 상기 호스트에 의해 사용되는 호스트 논리 블록 어드레스(LBA; Logical Block Address)를 상기 NVMe SSD에 의해 사용되는 장치 LBA로 변경하도록 동작하는 시스템.
  18. 제 12 항에 있어서,
    상기 이레이저 코딩 로직은 상기 NVMe SSD로부터 상기 PCIe 스위치에서 수신된 데이터 전송을 가로채고, 상기 데이터 전송에서 상기 NVMe SSD에 의해 사용되는 장치 논리 블록 어드레스(LBA; Logical Block Address)를 호스트에 의해 사용되는 호스트 LBA로 변경하도록 동작하는 시스템.
  19. 제 12 항에 있어서,
    이레이저 코딩 로직을 갖는 상기 PCIe 스위치는 네이티브 이레이저 코딩 로직(native Erasure Coding Logic)을 포함하지 않는 상기 NVMe SSD에 적어도 부분적으로 기초하여 상기 이레이저 코딩 로직을 인에이블(enable)시키도록 동작하는 시스템.
  20. 제 12 항에 있어서,
    이레이저 코딩 로직을 갖는 상기 PCIe 스위치는 네이티브 이레이저 코딩 로직(native Erasure Coding Logic)을 포함하는 상기 NVMe SSD에 적어도 부분적으로 기초하여 상기 이레이저 코딩 로직을 디스에이블(disable)시키도록 동작하는 시스템.
KR1020190126503A 2018-10-12 2019-10-11 FPGA+SSD 내부의 임베디드 PCIe 스위치로 이레이저 코드 데이터 보호 기능을 지원하는 시스템 KR20200041815A (ko)

Applications Claiming Priority (8)

Application Number Priority Date Filing Date Title
US201862745261P 2018-10-12 2018-10-12
US62/745,261 2018-10-12
US16/207,080 2018-11-30
US16/207,080 US10635609B2 (en) 2018-03-02 2018-11-30 Method for supporting erasure code data protection with embedded PCIE switch inside FPGA+SSD
US16/226,629 2018-12-19
US16/226,629 US10838885B2 (en) 2018-03-02 2018-12-19 Method for supporting erasure code data protection with embedded PCIE switch inside FPGA+SSD
US16/260,087 2019-01-28
US16/260,087 US11860672B2 (en) 2018-03-02 2019-01-28 Method for supporting erasure code data protection with embedded PCIE switch inside FPGA+SSD

Publications (1)

Publication Number Publication Date
KR20200041815A true KR20200041815A (ko) 2020-04-22

Family

ID=70219044

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190126503A KR20200041815A (ko) 2018-10-12 2019-10-11 FPGA+SSD 내부의 임베디드 PCIe 스위치로 이레이저 코드 데이터 보호 기능을 지원하는 시스템

Country Status (4)

Country Link
JP (1) JP7370801B2 (ko)
KR (1) KR20200041815A (ko)
CN (1) CN111045597A (ko)
TW (1) TWI791880B (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102225577B1 (ko) * 2020-08-21 2021-03-09 (주)테온 하이브리드 스토리지를 이용한 데이터 분산 저장 방법 및 장치
CN112148227B (zh) * 2020-09-25 2023-03-24 中国科学院空天信息创新研究院 一种存储设备及信息处理方法
CN112732477B (zh) * 2021-04-01 2021-06-29 四川华鲲振宇智能科技有限责任公司 一种带外自检故障隔离的方法
JP2023001494A (ja) * 2021-06-21 2023-01-06 キオクシア株式会社 メモリシステムおよび制御方法
TWI784804B (zh) * 2021-11-19 2022-11-21 群聯電子股份有限公司 時脈重整電路模組、訊號傳輸系統及訊號傳輸方法

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8572320B1 (en) * 2009-01-23 2013-10-29 Cypress Semiconductor Corporation Memory devices and systems including cache devices for memory modules
CN102819517A (zh) * 2011-06-08 2012-12-12 鸿富锦精密工业(深圳)有限公司 Pcie接口卡
US20130232293A1 (en) * 2012-03-05 2013-09-05 Nguyen P. Nguyen High performance storage technology with off the shelf storage components
US9111621B2 (en) * 2012-06-20 2015-08-18 Pfg Ip Llc Solid state drive memory device comprising secure erase function
JP2014063497A (ja) * 2012-09-21 2014-04-10 Plx Technology Inc 論理装置の機能を有するpciエクスプレススイッチ
US8954657B1 (en) * 2013-09-27 2015-02-10 Avalanche Technology, Inc. Storage processor managing solid state disk array
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
US9336173B1 (en) * 2013-12-20 2016-05-10 Microsemi Storage Solutions (U.S.), Inc. Method and switch for transferring transactions between switch domains
US9940036B2 (en) * 2014-09-23 2018-04-10 Western Digital Technologies, Inc. System and method for controlling various aspects of PCIe direct attached nonvolatile memory storage subsystems
US20160259754A1 (en) * 2015-03-02 2016-09-08 Samsung Electronics Co., Ltd. Hard disk drive form factor solid state drive multi-card adapter
US10007443B1 (en) * 2016-03-31 2018-06-26 EMC IP Holding Company LLC Host to device I/O flow
CN108073833A (zh) * 2016-11-10 2018-05-25 苏州韦科韬信息技术有限公司 基于pcie接口的固态硬盘保密系统及方法
TW201823916A (zh) * 2016-12-27 2018-07-01 英業達股份有限公司 伺服器系統
US10255134B2 (en) * 2017-01-20 2019-04-09 Samsung Electronics Co., Ltd. Control plane method and apparatus for providing erasure code protection across multiple storage devices

Also Published As

Publication number Publication date
CN111045597A (zh) 2020-04-21
JP7370801B2 (ja) 2023-10-30
JP2020061149A (ja) 2020-04-16
TWI791880B (zh) 2023-02-11
TW202020675A (zh) 2020-06-01

Similar Documents

Publication Publication Date Title
US11860672B2 (en) Method for supporting erasure code data protection with embedded PCIE switch inside FPGA+SSD
US11360679B2 (en) Paging of external memory
US11797181B2 (en) Hardware accessible external memory
TWI791880B (zh) 電腦系統
TWI591512B (zh) 儲存系統及儲存保護之方法
US11086525B2 (en) Resilient external memory
US11782634B2 (en) Dynamic use of non-volatile ram as memory and storage on a storage system
US20210271393A1 (en) Method and apparatus for performing data access management of all flash array server
KR20230172394A (ko) 캐시 일관된 상호 연결 저장 장치에서 raid 회로를 사용하는 중복 배열 독립 디스크 시스템 및 방법
US20240095196A1 (en) Method for supporting erasure code data protection with embedded pcie switch inside fpga+ssd
JP5856665B2 (ja) ストレージシステム及びストレージシステムのデータ転送方法

Legal Events

Date Code Title Description
A201 Request for examination