KR102491112B1 - Msr 코드를 위한 fpga 가속 시스템 - Google Patents
Msr 코드를 위한 fpga 가속 시스템 Download PDFInfo
- Publication number
- KR102491112B1 KR102491112B1 KR1020190126494A KR20190126494A KR102491112B1 KR 102491112 B1 KR102491112 B1 KR 102491112B1 KR 1020190126494 A KR1020190126494 A KR 1020190126494A KR 20190126494 A KR20190126494 A KR 20190126494A KR 102491112 B1 KR102491112 B1 KR 102491112B1
- Authority
- KR
- South Korea
- Prior art keywords
- error correction
- data elements
- processing unit
- correction code
- data
- Prior art date
Links
- 230000001133 acceleration Effects 0.000 title description 10
- 238000012545 processing Methods 0.000 claims abstract description 108
- 238000012937 correction Methods 0.000 claims abstract description 60
- 238000004364 calculation method Methods 0.000 claims abstract description 39
- 239000000872 buffer Substances 0.000 claims abstract description 16
- 238000003860 storage Methods 0.000 claims description 55
- 238000000034 method Methods 0.000 claims description 32
- 230000001172 regenerating effect Effects 0.000 claims description 2
- 230000004044 response Effects 0.000 claims 5
- 230000004931 aggregating effect Effects 0.000 claims 2
- 238000005516 engineering process Methods 0.000 description 20
- 238000010586 diagram Methods 0.000 description 17
- 230000010365 information processing Effects 0.000 description 17
- 230000008569 process Effects 0.000 description 6
- 238000004891 communication Methods 0.000 description 4
- 238000002513 implantation Methods 0.000 description 4
- 238000005192 partition Methods 0.000 description 4
- 238000011084 recovery Methods 0.000 description 4
- 239000004065 semiconductor Substances 0.000 description 4
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000002950 deficient Effects 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000008929 regeneration Effects 0.000 description 2
- 238000011069 regeneration method Methods 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 1
- 239000000919 ceramic Substances 0.000 description 1
- 238000012508 change request Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 229910044991 metal oxide Inorganic materials 0.000 description 1
- 150000004706 metal oxides Chemical class 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 230000001953 sensory effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000007480 spreading Effects 0.000 description 1
- 238000003892 spreading Methods 0.000 description 1
- 230000000087 stabilizing effect Effects 0.000 description 1
- 230000004083 survival effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
- 235000012773 waffles Nutrition 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/079—Root cause analysis, i.e. error or fault diagnosis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
- G06F11/1096—Parity calculation or recalculation after configuration or reconfiguration of the system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0793—Remedial or corrective actions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1012—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
- G06F11/1032—Simple parity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1048—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30079—Pipeline control instructions, e.g. multicycle NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/3009—Thread control instructions
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, 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/65—Purpose and implementation aspects
- H03M13/6575—Implementations based on combinatorial logic, e.g. Boolean circuits
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Probability & Statistics with Applications (AREA)
- Human Computer Interaction (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Detection And Correction Of Errors (AREA)
- Error Detection And Correction (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
일반적인 양태에 따르면, 장치는 호스트 처리 장치로부터 오프로드 명령어를 수신하도록 구성된 호스트 인터페이스 회로를 포함할 수 있으며, 상기 오프로드 명령어는 장치가 복수의 데이터 요소와 관련된 에러 정정 코드를 계산하도록 지시한다. 장치는 복수의 데이터 요소를 수신하도록 구성된 메모리 인터페이스 회로를 포함할 수 있다. 장치는 복수의 데이터 요소를 일시적으로 저장하도록 구성된 복수의 메모리 버퍼 회로를 포함할 수 있다. 장치는 호스트 처리 장치에 의한 추가 프로세싱없이 적어도 부분적으로 에러 정정 코드를 계산하도록 구성된 복수의 에러 코드 계산 회로를 포함할 수 있다.
Description
이 설명은 데이터 스토리지에 관한 것으로, 보다 상세하게는 에러 정정 코드의 가속을 위한 시스템, 장치 그리고/또는 방법에 관한 것이다.
코딩 이론에서, 소거 코드(Erasure code)는 (비트 에러 대신에) 비트 소거를 가정한 순방향 에러 정정(Forward Error Correctio: FEC) 코드이며, k개의 심볼의 메시지를 n개의 심볼을 갖는 더 긴 메시지(코드 워드)로 변환하여 원래의 메시지가 n 개의 심볼의 서브 세트로부터 복구될 수 있다. 분수 r=k/n을 코드 레이트라고 한다. 분수 k'/k(k'는 복구에 필요한 심볼의 수를 나타냄)를 수신 효율이라고 한다.
재생 코드(Regenerating codes)은 기존의 인코딩 단편(encoded fragments)으로부터 손실된 인코딩된 단편을 재구성(복구라고도 함)하는 문제를 지시한다. 보다 상세하게, 재생 코드는 복구 중에 다운로드 양을 줄이면서도 기존의 최대 거리 분리형(Maximum Distance Separable: MDS) 코드의 저장 효율을 유지하는 것을 목표로하는 코드 클래스이다. 이 문제는 인코딩된 리던던시를 관리하기 위한 통신이 문제되는 분산 스토리지 시스템에서 발생한다.
분산 스토리지 시스템은 일반적으로 정보가 종종 복사된 방식으로 하나 이상의 노드 또는 장치에 저장되는 컴퓨터 네트워크이다. 분산 스토리지 시스템은, 사용자가 여러 노드에 정보를 저장하는 분산 데이터베이스, 또는 사용자가 여러 피어 네트워크 노드에 정보를 저장하는 컴퓨터 네트워크를 표현하는 데 종종 사용된다. 분산 스토리지 시스템은 일반적으로 에러 검출 및 정정 기술을 사용한다. 일부 분산 스토리지 시스템은 파일의 일부가 손상되었거나 사용할 수 없는 경우 순방향 에러 정정 기술을 사용하여 원본 파일, 청크 또는 블랍(Blob)을 복구한다. 다른 분산 스토리지 시스템은 다른 미러링된 소스로부터 해당 파일 다운로드를 재시도 한다.
본 발명의 목적은 분산 스토리지 시스템에서 에러 정정 연산시에 호스트에 의한 추가 처리없이 에러 정정 코드를 계산할 수 있는 기술을 제공하는데 있다.
본 발명의 일 실시 예에 따르면, 장치는 호스트 처리 장치로부터 오프로드 명령어를 수신하도록 구성된 호스트 인터페이스 회로를 포함할 수 있고, 상기 오프로드 명령어는 상기 장치가 복수의 데이터 요소와 관련된 에러 정정 코드를 계산하도록 지시한다. 상기 장치는 상기 복수의 데이터 요소를 수신하도록 구성된 메모리 인터페이스 회로를 포함할 수 있다. 상기 장치는 상기 복수의 데이터 요소를 일시적으로 저장하도록 구성된 복수의 메모리 버퍼 회로를 포함할 수 있다. 상기 장치는 상기 호스트 처리 장치에 의한 추가 처리없이 적어도 부분적으로 에러 정정 코드를 계산하도록 구성된 복수의 에러 코드 계산 회로를 포함할 수 있다.
본 발명의 다른 실시 예에 따르면, 시스템은 복수의 데이터 요소를 저장하도록 구성된 메모리를 포함할 수 있다. 상기 시스템은 에러 정정 코드의 계산을 재프로그램 가능한 처리 장치로 오프로드하도록 구성된 호스트 처리 장치를 포함할 수 있다. 시스템은 복수의 데이터 요소에 적어도 부분적으로 기초하여 에러 정정 코드를 계산하도록 구성될 수 있는 재프로그램 가능한 처리 장치를 포함할 수 있다. 상기 재프로그램 가능한 처리 장치는 적어도 부분적으로 에러 정정 코드를 계산하고 복수의 데이터 요소들에 기초하여 재구성되는 재구성 가능한 파이프 라인을 포함할 수 있다.
본 발명의 또 다른 실시 예에 따르면, 장치는 에러 정정 코드의 계산을 오프로드 처리 장치로 오프로드하도록 구성된 호스트 처리 장치를 포함할 수 있다. 상기 장치는 복수의 스토리지 장치로 데이터 요소를 독출 및 기입하도록 구성된 입출력(I/O) 시스템을 포함할 수 있다. 상기 장치는 복수의 데이터 요소에 적어도 부분적으로 기초하여 에러 정정 코드를 계산하도록 구성될 수 있는 오프로드 처리 장치를 포함할 수 있다. 상기 오프로드 처리 장치는 상기 복수의 데이터 요소를 수신하도록 구성된 메모리 인터페이스 회로를 포함할 수 있다. 상기 오프로드 처리 장치는 상기 복수의 데이터 요소를 일시적으로 저장하도록 구성된 복수의 메모리 버퍼 회로를 포함할 수 있다. 상기 오프로드 처리 장치는 호스트 처리 장치에 의한 추가 처리없이 오류 정정 코드를 적어도 부분적으로 계산하도록 구성된 복수의 오류 코드 계산 회로를 포함할 수 있다.
하나 또는 그 이상의 구현의 세부 사항은 첨부된 도면 및 이하의 설명에서 설명된다. 다른 특징들은 상세한 설명 및 도면 및 청구 범위로부터 명백해질 것이다.
데이터 저장을 위한 시스템 그리고/또는 방법, 보다 구체적으로, 도면들 중 적어도 하나와 관련하여 도시되고/되거나 기술된 바와 같이, 오류 정정 코드의 가속을 위한 시스템, 장치 그리고/또는 방법은 청구 범위에서 보다 완전하게 설명될 것이다.
상술한 특징에 따른 본 발명에 따르면, 본 발명의 처리 기법을 사용하는 분산 스토리지 시스템에서 에러 정정 연산시에 호스트에 의한 개입이 최소화되는 에러 정정 코드 연산이 가능하다. 따라서, 호스트의 성능을 높일 수 있다.
도 1은 개시된 주제에 따른 시스템의 예시적인 실시 예의 블록도이다.
도 2는 개시된 주제에 따른 시스템의 예시적인 실시 예의 블록도이다.
도 3a 및 3b는 개시된 주제에 따른 시스템의 예시적인 실시 예의 블록도이다.
도 4a 및 4b는 개시된 주제에 따른 시스템의 예시적인 실시 예의 타이밍도이다.
도 5는 개시된 주제의 원리에 따라 형성된 장치를 포함하는 정보 처리 시스템의 개략적인 블록도이다.
도 2는 개시된 주제에 따른 시스템의 예시적인 실시 예의 블록도이다.
도 3a 및 3b는 개시된 주제에 따른 시스템의 예시적인 실시 예의 블록도이다.
도 4a 및 4b는 개시된 주제에 따른 시스템의 예시적인 실시 예의 타이밍도이다.
도 5는 개시된 주제의 원리에 따라 형성된 장치를 포함하는 정보 처리 시스템의 개략적인 블록도이다.
다양한 예시적 실시 예들이 몇몇 실시 예들을 보여주는 첨부된 도면들을 참조하여 자세하게 설명될 것이다. 그러나, 본 개시된 내용은 많은 상이한 형태로 구체화될 수 있으며, 여기에 설명된 실시 예에 한정되는 것으로 해석되어서는 안된다. 오히려, 이러한 예시적인 실시 예들은 본 개시가 철저하고 완전해질 수 있도록 제공되며, 본 개시된 주제의 범위를 당업자에게 완전히 전달할 것이다. 도면에서, 층 및 영역의 크기 및 상대적 크기는 명확하게 하기 위해 과장될 수 있다.
요소 또는 층이 다른 엘리먼트 또는 층의 "위에", "연결된" 또는 "결합된"것으로 언급될 때, 그것은 다른 요소 또는 층에 직접적으로 연결, 결합되거나 또는 요소들 또는 층들이 그 사이에 존재할 수 있는 것으로 이해되어야 한다. 반면, 요소가 다른 요소 또는 층에 "직접적으로"또는 "직접 연결되어"또는 "직접 결합되어"있는 것으로 언급될 때, 개재하는 요소 또는 층이 존재하지 않는다. 동일한 도면 부호는 동일한 구성 요소를 지칭한다. 여기서 사용 된 바와 같이, "그리고/또는"이라는 용어는 하나 또는 그 이상의 관련된 열거된 항목의 임의의 조합 및 모든 조합을 포함한다.
비록 여기에서 제 1, 제 2, 제3 등의 용어들은 다양한 요소들, 성분들, 영역들, 층들 그리고/또는 섹션들을 설명하기 위해 사용되지만, 이러한 요소들, 성분들, 영역들, 층들 그리고/또는 섹션들은 이러한 용어들로 인해 제한되지 않는 것으로 이해될 것이다. 이러한 용어들은 다른 요소, 성분, 영역, 층, 또는 섹션으로부터 하나의 요소, 구성, 영역, 층 또는 섹션을 구별하기 위해 사용된다. 따라서, 후술하는 제 1 구성 요소, 성분, 영역, 층, 또는 섹션은 본 발명의 사상 및 범위를 벗어나지 않고, 제 2 구성 요소, 성분, 영역, 층, 또는 섹션을 지칭할 수 있다.
하나의 요소 또는 도면에서 도시된 다른 구성 요소(들) 또는 특징(들)과의 특징적인 관계를 설명하기 위한 설명을 용이하게 하기 위해 "아래의", "아래", "낮은", "특정 부분 아래", "위에", "상부"와 같은 공간적이고 상대적인 용어들이 여기에서 사용될 수 있다. 공간적이고 상대적인 용어들은 도면에서 묘사된 방향에 더해 사용 또는 동작에서 장치의 다른 방향들을 포함하도록 의도된 것이 이해될 것이다. 예를 들면, 만약 도면의 장치가 뒤집어지면, 다른 구성 요소들 또는 특징들의 "아래" 또는 "아래의" 또는 "특정 부분 아래"로 설명된 구성요소들은 다른 구성 요소들 또는 특징들의 "위로" 맞춰지게 된다. 따라서, "아래의" 또는 "특정 부분 아래"의 예시적인 용어들은 위 또는 아래 방향 모두를 포함할 수 있다. 장치는 다르게 맞춰질 수 있으며(예를 들면, 90도 도는 다른 방향으로 회전됨) 그리고 공간적으로 상대적인 기술어들은 그에 따라 해석되어야 한다.
마찬가지로, "높은", "낮은", "풀업", "풀다운", "1", "0"등과 같은 전기 용어는 도면에 도시된 바와 같이 다른 전압 레벨 또는 다른 요소(들) 또는 특징(들)에 대하여 전압 레벨 또는 전류를 설명하기 위한 표현의 편의를 위해 사용될 수 있다. 전기적 상대 용어는 도면에 도시된 전압 또는 전류에 더하여 사용 또는 동작중인 장치의 상이한 기준 전압을 포함하는 것으로 이해될 것이다. 예를 들어, 그림의 장치 또는 신호가 반전되거나 다른 기준 전압, 전류 또는 전하를 사용하는 경우 "높은" 또는 "풀업"으로 설명된 요소는 새로운 기준 전압 또는 전류에 비해 "낮은" 또는 "풀다운"된 것이다. 따라서, 예시적인 용어 "높은"은 비교적 저전압 또는 고전압 또는 전류를 모두 포함할 수 있다. 장치는 다른 전기 기준 프레임 및 본 명세서에서 사용된 전기적 상대적 설명에 기초하여 해석될 수 있다.
본 명세서에서 사용된 용어들은 단지 특정한 실시 예들을 설명하기 위한 것이고, 본 발명을 제한하려는 것으로 의도되지 않았다. 본 명세서에서 사용된 바와 같이, 문맥상 명백하게 다르게 뜻하지 않는 한, 단수 형태 "하나"는 복수의 형태도 포함하는 것으로 의도된다. "포함하는", 그리고 "포함하고 있는" 용어들이 본 명세서에서 사용될 때, 이러한 용어들은 정해진 특징들, 정수들, 단계들, 동작들, 요소들, 그리고/또는 성분들이 존재를 명시하나, 하나 또는 그 이상의 다른 특징들, 정수들, 단계들, 동작들, 요소들, 성분들, 그리고/또는 그것들의 그룹들의 추가 또는 존재를 불가능하게 하지 않는다.
예시적인 실시 예들은 이상적인 예시적인 실시 예(및 중간 구조들)의 개략도인 단면도를 참조하여 여기에 설명된다. 이와 같이, 예를 들어 제조 기술 그리고/또는 허용 오차와 같은 결과로서의 도면의 형상으로부터의 변형이 예상되어야 한다. 따라서, 예시적인 실시 예들은 본 명세서에 도시된 특정 형상의 영역들에 한정되는 것으로 해석되어서는 안되며, 예를 들어 제조로부터 초래되는 형상의 편차를 포함해야 한다. 예를 들어, 직사각형으로 도시된 주입 영역은 통상적으로, 주입 영역에서부터 주입되지 않은 영역으로의 이진 변화라기보다는, 둥근 또는 곡선의 피쳐 그리고/또는 모서리에서의 주입 농도의 기울기를 나타낼 것이다. 마찬가지로, 주입에 의해 형성된 매립 영역은 매립 영역과 주입이 일어나는 표면 사이의 영역에 약간의 주입을 초래할 수 있다. 따라서, 도면들에 예시된 영역들은 본질적으로 개략적이며, 그 형상들은 디바이스의 영역의 실제 형상을 예시하는 것이 아니며, 본 개시된 주제의 범위를 제한하려는 것이 아니다.
다르게 정의되지 않는 한, 본 명세서에서 사용된 모든 용어들(기술적 그리고 과학적 용어들을 포함하는)은 본 발명이 속한 기술 분야에서 당업자에 의해 일반적으로 이해되는 동일한 의미를 갖는다. 일반적으로 사용되는 사전에 정의된 이러한 용어들은 본 명세서 그리고/또는 관련 기술의 문맥에서 그들의 의미와 일치하는 의미를 갖는 것으로 해석되어야 하며, 본 명세서에서 명백하게 정의되지 않는 한 이상화되거나 지나지게 형식적인 감각으로 해석되지 않아야 한다.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시 예를 상세히 설명하기로한다.
도 1은 개시된 주제에 따른 시스템(100)의 예시적인 실시 예의 블록도이다. 도시된 실시 예에서, 시스템(100)은 복수의 노드 또는 스토리지 장치(180)에 걸쳐 데이터를 저장하는 분산 스토리지 시스템(114)을 포함할 수 있다.
분산 스토리지 시스템은 종종 대규모의 신뢰성 스토리지를 제공하기 위해 사용된다. 종종 이것은 다수의 노드 또는 스토리지 장치에 걸쳐 리던던시 또는 오류 정정(예를 들어, 패리티)을 확산시킴으로써 달성된다. 그러나 노드 또는 스토리지 장치가 오프라인 상태가 되면(예를 들면, 네트워크 오류, 하드웨어 오류 등으로 인해) 데이터가 손상되었거나 적어도 줄어든 리던던시 레벨을 갖는 것으로 의심된다. 스토리지 시스템이 분산될수록 이런 일들의 빈도는 높아진다.
그러한 사태의 발생을 방지하기 위해 다수의 기술이 이용될 수 있지만(예를 들어, 미러링, 리드-솔로몬 인코딩), 개시된 주제는 특정 인코딩에 제한되지 않는다. 이러한 실시 예에서, 누락된 데이터 조각(청크)은 나머지 데이터 조각에 기초한 공식을 사용하여 재생되거나 재구성된다.
예시된 실시 예에서, 시스템(100)은 분산 스토리지 시스템 또는 복수의 데이터 노드(114)를 관리하도록 구성된 하나 이상의 호스트 또는 컴퓨팅 장치(112)를 포함할 수 있다. 컴퓨팅 장치(112)는 스토리지 시스템(180)으로 및 로부터 읽고 그리고 쓰는 컴퓨터 장치(예를 들어, 컴퓨터, 서버, 가상머신)를 포함할 수 있다. 에러(예를 들어, 누락된 데이터 청크)가 발생하는 경우, 컴퓨팅 장치(112)는 일반적으로 에러를 검출하고 가능하면 복구할 책임이 있다.
다양한 실시 예에서, 컴퓨팅 장치(112)는 예를 들어 랩탑, 데스크탑, 워크 스테이션, 개인 휴대 정보 단말기, 스마트 폰, 태블릿, SoC(system-on-a-chip) 및 다른 적절한 컴퓨터 또는 가상 머신 또는 가상 머신의 가상 컴퓨팅 장치 등과 같은 컴퓨팅 장치를 포함할 수 있다. 다양한 실시 예들에서, 컴퓨팅 장치(112)는 사용자(도시되지 않음)에 의해 사용될 수 있다. 다양한 실시 예에서, 컴퓨팅 장치(112)는 하나 이상의 기계 실행가능 명령어 또는 소프트웨어, 펌웨어 또는 이들의 조합을 실행하도록 구성된 프로세서(102)를 포함할 수 있다. 컴퓨팅 장치(112)는 일부 실시 예에서 하나 이상의 데이터를 일시적으로, 영구적으로, 반영구적으로 또는 이들의 조합으로 저장하도록 구성된 메모리(도시되지 않음)를 포함할 수 있다. 더불어, 메모리는 휘발성 메모리, 비휘발성 메모리 또는 이들의 조합을 포함할 수 있다. 다양한 실시 예에서, 컴퓨팅 장치(112)는 반영구적 또는 실질적으로 영구적 인 형태로 데이터를 저장하도록 구성된 저장 매체(114)를 포함하거나 통신할 수 있다.
도시된 실시 예에서, 각각의 데이터 세트는 컴퓨팅 장치(112)에 의해 복수의 더 작은 조각의 데이터 또는 청크(198)로 분해되거나 분할될 수 있다. 도시된 실시 예에서, 데이터는 청크(198)로 분할된다(예를 들어, D1, D2, D3 및 D4). 또한, 다양한 실시 예에서, 컴퓨팅 장치(112)는 패리티 청크(예컨대, P1 및 P2로 명명되고, 그리고 이들은 또한 청크들 이므로 198로 번호 붙여짐)와 같은 일부 형태의 리던던시를 데이터 청크(198)에 적용할 수 있다.
본 기술을 설명하는 용어로, 원래의 데이터 청크(198, D1, D2, D3 및 D4)의 수는 변수 K 또는 k로서 기술된다. 마찬가지로, 리던던트 데이터 청크(198, P1 및 P2)의 수는 변수 R 또는 r로 기술된다. 따라서, 총 청크 수(198)는 K+R이 되도록 한다. 예시된 실시 예에서, K는 4이고, R은 2이며, K+R은 6으로 기술되었으나, 이러한 내용은 단지 개시된 주제가 제한되지 않는 예시적인 것으로 이해된다.
예시된 실시 예에서, 컴퓨팅 장치(112)는 이들 청크(198, 오리지날 및 리던던트) 각각이 스토리지 시스템(114)의 각각의 노드 또는 스토리지 장치에 저장되게 한다. 다양한 실시 예에서, 스토리지 장치(180)의 수는 청크(198)의 수와 같지 않을 수 있다.
다양한 실시 예들에서, 청크(198)는 누락되거나(예를 들어, 네트워크 또는 하드웨어 고장) 다르게는 에러와 관련될 수 있다. 도시된 실시 예에서, 청크(198) (및 각각의 스토리지 장치(180))가 갑자기 이용할 수 없게 된다고 가정하자. 컴퓨팅 장치(112)는 에러를 검출 할 때, 누락된 청크(198)를 재생성하거나 그렇지 않으면 에러를 정정하려고 시도할 수 있다.
이러한 실시 예에서, 하나의 청크에 결함이 존재(Fail)하고, 원래 데이터에 K(예를 들어, 4) 개의 총 청크가 있다면, 호스트 장치(112)가 결함이 존재하는 청크를 복구하기 위해 적어도 K(예를 들어, 4) 노드 또는 컴퓨팅 장치(180)는 호스트에 정보를 보내야 한다. 이들 K(예를 들어, 4) 청크는 임의의 K+R(예를 들어, 6) 청크로부터 유래될 수 있다. 예를 들어, 청크(198, D1, D2, D4 및 P1)은 누락된 청크(198, D3)를 재생성하는 데 사용될 수 있다.
재생 코드는 일반적으로 D 노드(D > K)로부터 전체 청크 크기 정보 미만을 전송함으로써 복구 대역폭을 감소시킨다. 즉, 스마트한 공식을 사용하여 컴퓨팅 장치(112)는 전체 청크(198, D1, D2, D4 및 P1)를 사용하지 않고 단지 청크(198, D1, D2, D4, P1 및 P2)의 일부만을 사용함으로써 누락된 청크(198, D3)를 재생성할 수 있다. 재생 코드는 일반적으로 더 많은 스토리지 장치(180)로부터 정보를 가져 오지만, 비재생 코드보다 각 스토리지 장치(180)로부터 적은 정보를 취한다. 상기 내용은 개시된 주제가 제한되지 않는 단지 하나의 예시적인 것으로 이해될 것이다.
예를 들어, 6 청크의 데이터(K = 6)와 6 청크의 리던던시가 사용되었고 (R=6 및 K+R=12), 각 청크의 크기가 16MB 인 경우, 표준 리드-솔로몬(RS) 에러 정정 인코딩 방식은 누락된 16MB 청크를 정정하기 위해 6(K) 16MB 청크가 호스트 장치로 전송되거나 96MB의 데이터가 전송될 것을 요구할 것이다. 반대로, 재생 기술이 사용된 경우, 12 개의 모든 청크(이 경우 K+R 또는 D) 중 일부가 읽혀지지만, 각 청크들의 일부(예를 들면, 2.7MB)만 사용되었기 때문에, 호스트 장치로 전송된 총량은 더 적을 수 있다(예 : 29.7MB).
재생 코드는 종종 저장 및 대역폭 트레이드 오프를 갖는다. 다양한 예에 있어서, 일반적으로, 재생 코드의 2 개의 클래스 또는 그룹이 존재한다. 스토리지 오버헤드가 최소인 경우, 이를 최소 스토리지 재생(Minimum Storage Regeneration: 이하, MSR) 코드라고 한다. 추가된 스토리지 오버 헤드에 대해 복구 대역폭이 최소인 경우, 이를 최소 대역폭 재생(Minimum Bandwidth Regeneration: 이하, MBR) 코드라고 한다. 이러한 광범위한 범주 내에서, 재생 코드를 수행하기 위해 다양한 특정 기술 또는 공식이 사용될 수 있다. 상술한 내용은 개시된 주제가 제한되지 않는 단지 몇몇 예시적인 것으로 이해되어야 한다.
도 1로 돌아가서, 도시된 실시 예에서, 저장 시스템(114)은 복수의 스토리지 장치(114)를 포함할 수 있다. 각 스토리지 장치(114)는 청크 또는 다른 방식으로 데이터를 저장하도록 구성될 수 있다. 도시된 실시 예에서, 스토리지 장치(114)는 하드 드라이브, 솔리드 스테이트 드라이브 또는 휘발성 메모리와 같은 비교적 통상적인 스토리지 장치일 수 있다.
도시된 실시 예에서, 시스템(100)은 또한 전술한 바와 같이 컴퓨팅 장치(112)를 포함할 수 있다. 이러한 실시 예에서, 컴퓨팅 장치(112)는 호스트 프로세서 또는 처리 장치(102)를 포함한다. 다양한 실시 예에서, 호스트 처리 장치(102)는 중앙 처리 장치(CPU), 장치 특정 또는 제어기 프로세서(예를 들어, 스토리지 장치에서 발견되는 것처럼) 또는 다른 처리 회로를 포함할 수 있다.
도시된 실시 예에서, 컴퓨팅 장치(112)는 또한 입출력(I/O) 인터페이스 또는 시스템(106)을 포함할 수 있다. 다양한 실시 예에서, 입출력(I/O) 시스템(106)은 스토리지 시스템(114)과 통신하도록 구성될 수 있다. 일부 실시 예에서, 입출력(I/O) 시스템(106)은 호스트 처리 장치(102)와 적어도 부분적으로 통합될 수 있다. 다른 실시 예에서, 입출력(I/O) 시스템(106)은 종종 메모리 관리 유닛(MMU) 또는 칩셋으로 표현되는 다른 구성 요소를 포함할 수 있다. 상기 내용은 개시된 주제가 제한되지 않는 단지 몇몇 예시적인 것으로 이해된다.
도시된 실시 예에서, 컴퓨팅 장치(112)는 리프로그램머블 오프로드 처리 장치(104, reprogrammable offload processing device 이하, ROPD)를 포함할 수 있다. 다양한 실시 예에서, 이 ROPD(104)는 특수 목적 논리 회로, 예를 들어 FPGA(필드 프로그램 가능 게이트 어레이) 또는 ASIC(응용 프로그램 별 집적 회로)를 포함할 수 있다. 다양한 실시 예들에서, ROPD(104)는 프로그래밍이 일반적으로 고정되도록 외부 장치에 의해 프로그래밍 가능할 수 있다. 다른 실시 예에서, ROPD(104)는 호스트 처리 장치(102) 또는 다른 장치에 의해 동적으로 재프로그램 가능하여, 그 회로(예를 들어, 파이프 라인)가 런타임 조건에 기초하여 동적으로 조정될 수 있다. 상기 내용은 개시된 주제가 제한되지 않는 단지 몇몇 예시적인 것으로 이해된다.
전술한 바와 같이, 도시된 실시 예에서, 필요한 에러 정정 코드(예를 들어, 패리티 청크, 누락된 데이터 청크의 재생)를 계산하는 것은 일반적으로 호스트 처리 장치(102)의 책임이지만, 호스트 처리 장치(102)는 해당 작업의 전체 또는 일부를 ROPD(104)에 오프로드하거나 위임하도록 선택하거나 설정될 수 있다.
통상적으로, 호스트 처리 장치(102)에 의한 에러 정정 코드의 계산 (종종 소프트웨어에 의해 제어됨)은 고비용의 작업이다. 종종 CPU 아키텍처 (예를 들면: SMP(Symmetric multiprocessing), SIMD(Single Instruction, Multiple Data))는 MSR(또는 기타) 코드 구성 및 재구성의 병렬 특성에 비해 병렬 처리량이 제한되어 있다. 또한, 에러 정정 코드를 생성하는데 필요한 메모리 액세스 패턴(즉, 모든 청크(198)에 액세스)은 로컬성(국부성)이 결여되어 있다. 데이터 요소에 대한 랜덤 액세스 및 각 데이터 요소 내부의 데이터에 대한 스트리밍 패턴은 많은 로컬성을 제공하지 않으므로 캐시 성능이 저하되고 전체 인코딩/ 디코딩 성능이 저하된다. 따라서, 통상의 소프트웨어를 사용한다는 개념은 높은 프로세서 및 메모리 대역폭 이용을 유도하고 다른 작업에 더 잘 사용될 수 있는 호스트 처리 장치(102)의 이용을 방해한다. 도시된 실시 예에서, 시스템(100)은 적어도 이러한 문제를 해결하는 에러 정정 코딩(예를 들어, 구성 및 재구성)을 위한 가속 시스템을 제공한다.
예시된 실시 예에서, 호스트 처리 장치(102)는 에러 정정 코딩을 하드웨어 가속기 또는 ROPD(104)로 오프로드하도록 구성될 수 있다. 이러한 실시 예에서, 에러 정정 코딩을 수행하라는 요청이 있을 때, 호스트 처리 장치(102)는 이 요청을 ROPD(104)에 전달할 수 있다. ROPD(104)는 입출력(I/O) 시스템(106)을 이용하여 데이터 요소(예를 들어, 청크(198) 또는 다른 크기의 데이터)에 액세스할 수 있다. 완료되면, ROPD(104)는 동작의 최종성을 호스트 처리 장치(102)에 전달할 수 있고, 그 후 호스트 처리 장치(102)는 데이터, 에러 정정 코드에 액세스하거나 그 동작을 간단히 실행할 수 있다. 이러한 실시 예에서, ROPD(104)가 에러 정정 코드를 계산하는 동안, 호스트 처리 장치(102)는 다른 작업을 수행 할 수 있다.
다양한 실시 예들에서, 호스트 처리 장치(102) 및 ROPD(104)는 직접 메모리 액세스(DMA)를 통해 통신할 수 있다. 일 실시 예에서, 이것은 입출력(I/O) 시스템(106)에서 메모리의 매핑된 부분을 포함할 수 있다. 다른 실시 예에서, 이것은 장치들(102 및 104) 사이의 직접 통신을 포함할 수 있다. 마찬가지로, 입출력(I/O) 시스템(106) 및 ROPD(104)는 피어-투-피어(peer-to-peer) DMA 프로토콜을 통해 통신할 수 있다. 상기 내용은 개시된 주제가 제한되지 않는 단지 몇몇 예시적인 것으로 이해되어야 한다.
도 2는 본 발명의 개시된 주제에 따른 시스템(200)의 예시적인 실시 예의 블록도이다. 다양한 실시 예에서, 시스템(200)은 전술한 바와 같이 리프로그램머블 오프로드 처리 장치(RPOD)를 포함할 수 있다.
도시된 실시 예에서, 시스템(200)은 오프로드 처리 회로(202)를 포함할 수 있다. 다양한 실시 예에서, 이 오프로드 처리 회로(202)는 전술한 바와 같이 리프로그램머블할 수 있다. 이러한 실시 예에서, 오프로드 처리 회로(202)는 호스트 처리 장치에 의한 추가 처리없이 에러 정정 코드를 계산하도록 구성될 수 있다.
도시된 실시 예에서, 오프로드 처리 회로(202)는 호스트 처리 장치 또는 프로세서와 통신하도록 구성된 호스트 인터페이스(232)를 포함한다. 다양한 실시 예들에서, 호스트 프로세서는 시스템(200)의 외부에 있거나 별도의 로직 블록(예를 들어, SoC (system-on-a-chip)의 일부로서)으로 통합될 수 있다. 다양한 실시 예들에서, 호스트 인터페이스(232)는 DMA를 통해 적어도 부분적으로 또는 전체적으로 통신할 수 있다.
예시된 실시 예에서, 시스템(200)은 메모리 회로 또는 유닛(204)을 포함하거나 이와 상호 작용할 수 있다. 일부 실시 예에서, 메모리(204)는 DDR (double data rate) SDRAM과 같은 시스템 메모리를 포함할 수 있으나, 상기 내용은 개시된 주제가 제한되지 않는 하나의 예시적인 것으로 이해되어야 한다. 이러한 실시 예에서, 메모리(204)는 에러 정정 코드 계산(예를 들어, 생성 또는 재구성)에 사용되는 데이터 요소(예를 들어, 정보 또는 패리티 청크)를 저장하도록 구성될 수 있다.
일 실시 예에서, 생성 또는 인코딩 절차를 위해, 호스트 프로세서는 인코딩될 필요가 있는 데이터 객체(예를 들어, 모든 정보 청크)를 메모리(204)에 전송할 수 있다. 이러한 실시 예에서, 이들 데이터 요소는 입력(212)으로서 저장될 수 있다. 이어서, 오프로드 처리 회로(202)는 패리티 청크(에러 정정 코드의 형태)를 계산하고(출력(214)에서) 메모리(204)에 다시 기입할 수 있다. 마지막으로, 정보 및 패리티 청크는 (입출력 시스템 또는 호스트 처리 장치에 의해) 상이한 스토리지 노드에 분배될 수 있다.
다른 실시 예에서, 재구성 또는 디코딩 절차를 위해, 생존 정보 데이터 요소 및 패리티 데이터 요소가 먼저 검색되어 메모리(204)에 입력(212)될 수 있다. 그 후, 오프로드 처리 유닛(202)은 재구축 청크(오류 정정 코드)를 계산하고 이를 출력(214)에서 메모리(204)에 기입할 수 있다. 마지막으로, 재구축된 청크가 호스트 처리 장치로 전송된다.
도시된 실시 예에서, 오프로드 처리 회로(202)는 메모리(204)와 통신하도록 구성된 메모리 인터페이스 회로(222)를 포함할 수 있다. 도시된 실시 예에서, 메모리 인터페이스 회로(222)는 데이터 요소를 수신하는 멀티플렉서(MUX)로 도시되어 있다. 마찬가지로, 디멀티플렉서(DeMUX)는 데이터 요소를 메모리(204)에 기입할 수 있다. 상기 내용은 개시된 주제가 제한되지 않는 하나의 예시적인 것으로 이해되어야 한다.
오프로드 처리 회로(202)는 복수의 데이터 요소를 일시적으로 저장하도록 구성된 복수의 메모리 버퍼 회로(224)를 포함할 수 있다. 하나의 특정 실시 예에서는, 입력 데이터(212)는 효율적인 512-비트 그룹화로 오프로드 처리 회로(202)에 도달할 수 있지만, 요소 자체는 단지 8-비트일 수 있다. 이러한 실시 예에서, 메모리 인터페이스 회로(222)는 입력(212)을 64 개의 데이터 요소로 분할하고 그것들을 개별(또는 분배된 부분의) 버퍼(224)에 저장할 수 있다. 상기 내용은 개시된 주제가 제한되지 않는 하나의 예시적인 것으로 이해되어야 한다.
예시된 실시 예에서, 오프로드 처리 회로(202)는 데이터가 메모리(204)으로부터 독출되고 버퍼(224)에 기입되는 방법을 관리하도록 구성된 어드레스 제어기(228)를 포함할 수 있다. 어떤 실시 예에서, 어드레스 제어기(228)는 에러 정정 코드 컴퓨팅을 위해 버퍼(224)로부터 데이터가 독출되는 방법을 관리하도록 구성된다. 일부 실시 예들에서, 오프로드 처리 회로(202)는 버퍼(224)가 액세스될 미리 저장된 시퀀스를 포함하는 인덱스 테이블(230)을 포함할 수 있다.
오프로드 처리 회로(202)는 복수의 에러 코드 계산 회로(226)를 포함할 수 있다. 이들 에러 코드 계산 회로(226)는 호스트 처리 장치에 의한 추가 처리없이 에러 정정 코드를 계산하도록 구성될 수 있다. 도시된 실시 예에서, 에러 코드 계산 회로(226)는 주로 다중 가산 회로(Multiple-add circuits)를 포함할 수 있다. 다양한 실시 예들에서, 에러 코드 계산 회로(226)는 룩업 테이블들 또는 비트 단위 XOR 게이트들로서 구현될 수 있다. 상기 내용은 개시된 주제가 제한되지 않는 단지 몇몇 예시적인 예인 것으로 이해되어야 한다.
일부 실시 예들에서, 시스템(200)은 에러 정정 코드의 생성을 독출, 처리 및 기입하는 3 단계로 수행할 수 있다. 독출 단계에서, 데이터 요소(재 구축시 패리티 요소를 포함)는 메모리(204)로부터 독출되어 버퍼(224)에 배치될 수 있다.
처리 단계 동안, 어드레스 제어기(228)는 사전에 저장된 인덱스 테이블(230)에 따라 독출된 메모리를 제어하고, k 개의 버퍼(224)에서 정확한 데이터 슬라이스를 동시에 독출할 수 있다. 이 데이터는 에러 정정 계산을 위해 에러 코드 계산 회로(226)에 공급될 수 있다.
에러 코드 계산 회로(226)의 하나의 가능한 실시 예의 상세한 구조는 도면의 상세도 부분으로 도시되어 있다. 에러 코드 계산 회로(226)는 원하는 패리티 계산 또는 정보 재구성 기술(예를 들어, 갈루아 필드(GF) 계산)에 대응하는 미리 저장된 계수 테이블(242)을 포함할 수 있다. 에러 코드 계산 회로(226)는 또한 빠른 곱셈 연산을 위해 k 개의 곱셈기 또는 곱셈 룩업 테이블 (244)을 포함할 수 있다. 에러 코드 계산 회로(226)는 또한 XOR 또는 덧셈기(246) 트리 구조를 포함할 수 있다. 일 실시 예에서, 각각의 곱셈기(244)는 하나의 데이터 요소(252)(예를 들어, 8-비트의 데이터)를 처리할 수 있다. 궁극적으로, 에러 코드 계산 회로(226)는 에러 정정 코드(254, 또는 후술되는 바와 같이 그 일부)를 생성 또는 출력할 수 있다.
기입 단계 동안, 에러 정정 코드(254)는 출력(224)으로서 메모리(204)에 다시 쓰여질 수 있다. 다양한 실시 예들에서, 에러 정정 코드(254)는 처리 직후에 메모리(204)에 다시 쓰여질 수 있다. XOR(246) 트리 다음에 파이프 라인 단계를 하나 더 추가하는 것으로 간주할 수 있다. 이러한 실시 예에서, 이것은 시스템(200)이 불연속(discrete) 또는 아토믹(atomic) 동작과 반대로 파이프 라인 데이터 처리에 관여하게 할 수 있다. 이러한 실시 예에서, 이것은 후술되는 바와 같이 멀티 패스 동작을 가속화시킬 수 있다. 일부 실시 예에서, 데이터는 버퍼(224)로 독출될 때 분할되기 때문에, 데이터 출력은 별도의 출력 파티션에서 메모리(204)에 다시 기입된다.
다양한 실시 예에서, 예를 들어 MSR 코드(n, k, m)와 같이, (인코딩 절차에서) k 개의 입력 데이터 청크가 존재하고, 입력 데이터는 전체적으로 내부 버퍼(224) 크기보다 클 수 있다. 이러한 실시 예에서, 시스템(200)은 전체 입력 데이터 세트를 처리하기 위해 다수 또는 'p' 패스(pass)를 사용할 수 있으며, 여기서 p는 각 정보/패리티 요소에 대해 분할된 정보/패리티 슬라이스의 수와 동일하다. 이러한 실시 예에서, 시스템(200)은 더 큰 데이터 세트를 각각 k 또는k 개 이하의 데이터 요소를 갖는 p 개의 파티션으로 분할할 수 있다. 이러한 실시 예에서, 각각의 패스는 각각의 파티션과 연관된 에러 정정 코드를 독출, 처리 및 기입하는 것을 포함할 수 있다.
데이터 세트의 수가 버퍼(224)에서의 스토리지 총량보다 적은 다른 실시 예에서, 데이터 세트는 각각이 버퍼 크기보다 작은 k 개의 데이터 요소들에 매핑될 수 있다. 이러한 실시 예에서, 가변 데이터 요소 크기는 시스템(200)에 의해 처리될 수 있다.
데이터 요소의 수가 k 개의 버퍼(224)보다 작은 (따라서 k 개의 에러 코드 계산 회로(226)) 또 다른 실시 예에서, 에러 코드 계산 회로(226)의 수는 동적으로 변경될 수 있다. 이러한 실시 예에서, 시스템(200)의 파이프 라인은 처리량뿐만 아니라 레이턴시를 최적화하도록 동적으로 변경될 수 있다. 이러한 실시 예에서, 에러 코드 계산 회로(226)의 수는 데이터 요소의 수(최대 하드웨어 한계까지)와 일치하도록 조정될 수 있다. 이러한 실시 예에서, 곱셈 룩업 테이블(244)은 사이클마다 액세스될 수 있다. 데이터 요소(따라서 데이터 노드)에 대한 이 병렬 처리는 SIMD 명령어의 피연산자 수가 고정되어 있는 통상의 CPU와는 다르므로 피연산자 자체는 처리가 불편한 데이터 요소의 수를 고려하여 조작되어야만 한다.
도 3a 및 3b는 개시된 주제에 따른 시스템(300)의 예시적인 실시 예의 블록도이다. 도 3a는 ROPD가 없는 시스템(300)의 단순화된 버전을 도시한 반면, 도 3b는 시스템(300) 내에서의 ROPD의 사용을 도시한다. 도 3a 및 3b는 본 명세서에 설명된 에러 정정 코드 계산을 이용하는 시스템(300) 내에서의 명령어 또는 소프트웨어 쓰레드(thread)의 실행을 도시한다.
도시된 실시 예에서, 시스템(300)은 데이터 세트(및 따라서 데이터 요소들)에 대한 액세스를 요구하는 일부 작업을 수행하는 메인 또는 유저 쓰레드 또는 애플리케이션 프로그램 인터페이스(API, 302)를 포함할 수 있다. 이러한 실시 예에서, 유저 쓰레드(302)는 호스트 프로세서에 의해 실행될 수 있다.
도시된 실시 예에서, 시스템은 명령어의 계산 쓰레드(312)를 처리하고 입출력(I/O) 큐(316)를 통해 스토리지 장치(306)와 상호 작용하는 LIB(304)를 포함할 수 있다.
오프로드 처리 장치가 활성화되지 않은 실시 예에서, 계산 쓰레드(312)는 에러 정정 코드를 계산(예컨대, 패리티 요소를 구축하거나 데이터 요소를 재구성)하기 위해 사용자 요청(요청 큐(322)에 배치된)을 수신할 수 있다. 인코딩(패리티 요소 구축)이 요청되면, 요청이 인코딩 동작(324)에 도달할 때, 패리티 요소를 각각의 저장 매체 (306)에 기입하기 위해 호스트 처리 장치는 인코딩을 수행한 다음, 입출력(I/O) 큐(316) 및 그들의 입출력(I/O) 쓰레드(317, 개별 I/O 쓰레드(352))를 야기 할 수 있다. 마찬가지로, 필요한 나머지 데이터 요소(패리티 요소를 포함)가 입출력(I/O) 쓰레드(352)에 의해 완료 큐(326)로 리턴되고, 결국 디코딩 동작(호스트 프로세서에 의해 수행되는)에 도달할 때, 디코드(데이터 요소 재구축)가 요청된다.
도 3b에서, 하드웨어 가속기 또는 오프로드 처리 장치(308)가 호스트 프로세서(쓰레드(302, 312 및 LIB 304)를 실행하는)와 상호 작용하는 방법이 설명된다. 다시, 계산 쓰레드(312)는 유저 쓰레드(302)로부터의 요청을 처리할 수 있다. 이러한 실시 예에서, 이는 인코딩/디코딩 계산을 오프로드 처리 장치(308)로 오프로드하는 것을 포함할 수 있다.
전술한 바와 같이, 각각의 계산 쓰레드(312)는 요청 큐(322)(유저 쓰레드(302)에 의해 큐잉됨) 및 완료 큐(326)(입출력(I/O) 쓰레드(317)에 의해 큐잉됨)를 포함할 수 있다. 이러한 실시 예에서, 계산 쓰레드(312)는 오프로드 처리 장치(308)와 상호 작용할 수 있다.
예를 들어, 인코딩 또는 패리티 생성 시나리오에서, 계산 쓰레드(312)는 인코딩 요청을 요청 큐(322)에 배치할 수 있다. 인코딩 요청이 인코딩 단계(324)에 도달하면, 호스트 장치에 의해 직접 처리되지 않고, 계산 쓰레드(312)는 인코딩 요청을 오프로드 처리 장치(308)로 오프로드할 수 있다. 일 실시 예에서, 이것은 콜백 쓰레드(314)를 통해 추적될 수 있다. 이러한 실시 예에서, 오프로드 요청은 하드웨어 가속 또는 오프로드 요청 큐(322)에 배치될 수 있다. 요청이 하드웨어 가속 큐(322) 내에 존재함에 따라, 콜백 쓰레드(314)는 오프로드 처리 장치(308)에 DMA 요청을 할 수 있다. 오프로드 처리 장치(308)는 전술한 바와 같이 에러 코드 계산 회로(342)를 포함할 수 있다. 완료되면, 콜백 쓰레드(314)는 계산 쓰레드(312)로 다시 보고 할 수 있고, 이는 다시 유저 쓰레드(302)에 보고될 수 있다. 이 시점에서, 입출력(I/O) 쓰레드(317)는 인코딩된 데이터를 스토리지(306)에 기입할 수 있다.
디코딩 또는 재구성 동작의 예에서, 계산 쓰레드(312)는 입출력(I/O) 쓰레드(317)로부터 데이터를 요청한다. 그 후 요청을 완료 큐(326)에 배치할 수 있다. 요청이 디코딩 단계(328)에 도달하면, 호스트 장치에 의해서 직접 처리되는 대신 계산 쓰레드(312)는 디코딩 요청을 오프로드 프로세싱 장치(308)로 오프로드할 수 있다. 일 실시 예에서, 이것은 콜백 쓰레드(314)를 통해 추적될 수 있다. 이러한 실시 예에서, 오프로드 요청은 하드웨어 가속 또는 오프로드 요청 큐(322)에 배치될 수 있다. 오프로드 처리 장치(308)는 입출력(I/O) 쓰레드(317)로부터 DMA를 통해 기존 데이터 요소를 수신할 수 있다. 요청이 하드웨어 가속 큐(322)에 존재함에 따라, 콜백 쓰레드(314)는 계산 쓰레드(312) 및/또는 유저 쓰레드(302)에 다시 보고할 수 있다.
도 4a 및 4b는 개시된 주제에 따른 시스템의 예시적인 실시 예의 타이밍도이다. 도 4a는 인코딩 또는 패리티 생성 동작의 타이밍도(400)를 도시한다. 도 4b는 디코딩 또는 재구성 동작의 타이밍도(401)를 도시한다. 다양한 실시 예들에서, 이러한 타이밍도들은 도 3a 및 3b의 시스템(300)에 의해 생성될 수 있다. 상술한 설명은 개시된 주제가 제한되지 않는 단지 하나의 예시에 불과한 것으로 이해되어야 한다.
예시된 실시 예에서, 행(402)은 유저 쓰레드의 가능한 타이밍을 도시한다. 예시된 실시 예에서, 행(404)은 계산 쓰레드의 가능한 타이밍을 도시한다. 예시된 실시 예에서, 행(406)은 유저 쓰레드의 가능한 콜백을 도시한다. 예시된 실시 예에서, 행(408)은 입출력(I/O) 쓰레드의 가능한 타이밍을 도시한다.
도 4a에서, 타이밍도(400)는 인코딩 동작을 위한 쓰레드 스테이지 및 타이밍의 실시 예를 도시한다. 이러한 실시 예에서, 유저 쓰레드(402)는 계산 쓰레드로 입출력(I/O) 쓰기 요청을 큐잉하고(블록 412), 요청의 완료를 기다릴 수 있다(블록 414). 다양한 실시 예들에서, 호스트 장치는 완료를 기다리는 동안(블록 414) 다른 동작들(미도시)을 수행할 수 있다.
이러한 실시 예에서, 계산 쓰레드(404)는 요청 큐로부터 유저 요청을 디큐잉(degueu)하고(블록 422) 하드웨어 또는 오프로드 요청을 큐에 큐잉(enqueue)할 수 있다(블록 424). 계산 쓰레드(404)는 완료를 기다릴 수 있다(블록 426).
이러한 실시 예에서, 콜백 쓰레드(406)는 하드웨어 가속 요청을 디큐잉하고(블록 432), 인코딩 동작을 개시하고(블록 434), 대기하고(블록 436), 동작이 완료될 때 완료 큐에 통지한다(블록 438). 도시된 실시 예에서, 계산 쓰레드(404)는 입출력(I/O) 요청을 입출력(I/O) 큐에 큐잉할 수 있다(블록 428).
이러한 실시 예에서, 입출력(I/O) 쓰레드(408)는 입출력(I/O) 요청을 디큐잉함으로써 입출력 동작을 수행하고(블록 442), 요청을 스토리지 장치에 발행할 수 있다(블록 444). 데이터가 기입되기를 기다린 후(블록 446), 입출력(I/O) 쓰레드(408)는 유저 쓰레드에게 완료를 통지할 수 있다(블록 448). 상술한 설명은 개시된 주제가 제한되지 않는 단지 하나의 예시에 불과한 것으로 이해되어야 한다.
도 4b에서, 타이밍도(401)는 디코딩 동작을 위한 쓰레드 스테이지 및 타이밍의 실시 예를 도시한다. 이러한 실시 예에서, 유저 쓰레드(402)는 계산 쓰레드로 입출력(I/O) 읽기 요청을 큐잉하고(블록 413, 도면 변경요: Deq->Eng), 이어서 요청의 완료를 기다릴 수 있다(블록 415). 다양한 실시 예들에서, 호스트 장치는 완료를 기다리는 동안 다른 동작들(미도시)을 수행할 수 있다(블록 415).
이러한 실시 예에서, 계산 쓰레드(404)는 요청 큐로부터 사용자 요청을 디큐잉하고(블록 422), 입출력(I/O) 요청을 큐에 큐잉할 수 있다(블록 428). 계산 쓰레드(404)는 완료를 기다릴 수 있다(블록 427).
이러한 실시 예에서, 입출력(I/O) 쓰레드(408)는 입출력(I/O) 요청을 디큐잉함으로써 입출력(I/O) 동작을 수행하고(블록 442), 요청을 스토리지 장치에 발행할 수 있다(블록 444). 데이터가 독출되기를 기다린 후(블록 447), 입출력(I/O) 쓰레드(408)는 하드웨어 가속 요청을 큐잉함(블록 449)으로써 계산 쓰레드(404)에게 완료를 통지할 수 있다.
이러한 실시 예에서, 콜백 쓰레드(406)는 하드웨어 가속 요청을 디큐잉하고(블록 432), 디코딩 동작을 개시하고(블록 435), 대기하고(블록 436), 동작이 완료되면 유저 쓰레드(402)에게 통지할 수 있다(블록 439). 상기 내용은 개시된 주제가 제한되지 않는 단지 하나의 예시에 불과한 것으로 이해되어야 한다.
도 5는 개시된 주제의 원리에 따라 형성된 반도체 장치를 포함하는 정보 처리 시스템(500)의 개략적인 블록도이다.
도 5를 참조하면, 정보 처리 시스템(500)은 개시된 주제의 원리에 따라 구성된 장치들 중 하나 또는 그 이상을 포함할 수 있다. 다른 실시 예에서, 정보 처리 시스템(500)은 개시된 주제의 원리에 따라 하나 또는 그 이상의 기술을 사용하거나 실행할 수 있다.
다양한 실시 예에서, 정보 처리 시스템(500)은 예를 들어 랩탑, 데스크탑, 워크 스테이션, 서버, 블레이드 서버, 개인 휴대 정보 단말기, 스마트 폰, 태블릿 및 다른 적절한 컴퓨터와 같은 컴퓨팅 장치 또는 가상 머신 또는 이의 가상 컴퓨팅 장치 등을 포함할 수 있다. 다양한 실시 예들에서, 정보 처리 시스템(500)은 사용자(미도시)에 의해 사용될 수 있다.
개시된 주제에 따른 정보 처리 시스템(500)은 중앙 처리 장치(CPU), 로직 또는 프로세서(510)를 더 포함할 수 있다. 일부 실시 예에서, 프로세서 (510)는 하나 이상의 기능 유닛 블록(FUB) 또는 조합 논리 블록(CLB, 515)를 포함할 수 있다. 이러한 실시 예에서, 조합 논리 블록은 다양한 부울 논리 연산(예를 들어, NAND, NOR, NOT, XOR), 안정화 논리 장치(예를 들어, 플립 플롭, 래치), 다른 논리장치 또는 이들의 조합을 포함할 수 있다. 이들 조합 논리 연산은 원하는 결과를 달성하기 위해 입력 신호를 처리하도록 단순하거나 복잡한 방식으로 구성될 수 있다. 동기식 조합 논리 연산의 몇몇 예시적인 예가 설명되었지만, 개시된 주제는 그렇게 제한되지 않으며 비동기 연산 또는 이들의 조합을 포함할 수 있는 것으로 이해되어야 한다. 일 실시 예에서, 조합 논리 연산은 복수의 상보형 금속 산화물 반도체(CMOS) 트랜지스터를 포함할 수 있다. 다양한 실시 예에서, 이들 CMOS 트랜지스터는 논리 동작을 수행하는 게이트로 배열될 수 있으나, 다른 기술이 사용될 수 있고 개시된 주제의 범위 내에 있는 것으로 이해된다.
개시된 주제에 따른 정보 처리 시스템(500)은 휘발성 메모리(520) (예를 들어, 랜덤 액세스 메모리(RAM))를 더 포함할 수 있다. 개시된 주제에 따른 정보 처리 시스템(500)은 비휘발성 메모리(530, 예를 들어, 하드 드라이브, 광 메모리, NAND 또는 플래시 메모리)를 더 포함할 수 있다. 일부 실시 예에서, 휘발성 메모리(520), 비휘발성 메모리(530) 또는 이들의 조합 또는 일부는 "저장 매체"로 지칭될 수 있다. 다양한 실시 예들에서, 휘발성 메모리(520) 그리고/또는 비휘발성 메모리(530)는 반영구적 또는 실질적으로 영구적인 형태로 데이터를 저장하도록 구성될 수 있다.
다양한 실시 예들에서, 정보 처리 시스템(500)은 정보 처리 시스템(500)이 통신 네트워크의 일부이고 통신 네트워크를 통해 통신할 수 있도록 구성된 하나 또는 그 이상의 네트워크 인터페이스(540)를 포함할 수 있다. Wi-Fi 프로토콜의 예는 IEEE 802.11n, IEEE(Institute of Electrical and Electronics Engineers) 802.11g를 포함할 수 있지만, 여기에 국한되지는 않는다. 셀룰러 프로토콜의 예는 IEEE 802.16m(일명 Wireless-MAN (Metropolitan Area Network) Advanced, LTE(Long Term Evolution) Advanced, GSM(Global System for Mobile Communications) Evolution)의 향상된 데이터 속도를 포함하지만 이에 제한되지 않는다. 유선 프로토콜의 예는 IEEE 802.3(일명 이더넷), 파이버 채널, 전력선 통신(예를 들어, HomePlug, IEEE 1901)을 포함할 수 있지만, 이에 제한되지는 않는다. 상기 내용은 개시된 주제가 제한되지 않는 단지 몇몇 예시에 불과한 것으로 이해되어야 한다.
개시된 주제에 따른 정보 처리 시스템(500)은 사용자 인터페이스 유닛(550, 예를 들어, 디스플레이 어댑터, 햅틱 인터페이스, 휴먼 인터페이스 장치)을 더 포함할 수 있다. 다양한 실시 예들에서, 이 사용자 인터페이스 유닛(550)은 사용자로부터 입력을 수신하거나 그리고/또는 사용자에게 출력을 제공하도록 구성될 수 있다. 사용자와의 상호 작용을 제공하기 위해 다른 종류의 장치가 사용될 수도 있다. 예를 들어, 사용자에게 제공되는 피드백은 임의의 형태의 감각 피드백, 예를 들어 시각적 피드백, 청각 피드백 또는 촉각 피드백일 수 있고, 사용자로부터의 입력은 음향, 음성 또는 촉각 입력을 포함하는 임의의 형태로 수신될 수 있다.
다양한 실시 예에서, 정보 처리 시스템(500)은 하나 또는 그 이상의 다른 장치 또는 하드웨어 구성 요소(560, 예를 들어, 디스플레이 또는 모니터, 키보드, 마우스, 카메라, 지문 독출기, 비디오 프로세서)를 포함할 수 있다. 상기 내용은 개시된 주제가 제한되지 않는 단지 몇몇 예시에 불과한 것으로 이해되어야 한다.
개시된 주제에 따른 정보 처리 시스템(500)은 하나 이상의 시스템 버스(505)를 더 포함할 수 있다. 이러한 실시 예에서, 시스템 버스(505)는 프로세서(510)와 휘발성 메모리(520), 비휘발성 메모리(530), 네트워크 인터페이스(540), 사용자 인터페이스 유닛(550) 그리고 하나 이상의 하드웨어 구성 요소(560)를 통신 가능하게 연결하도록 구성될 수 있다. 프로세서(510)에 의해 처리된 데이터 또는 비휘발성 메모리(530)의 외부로부터 입력된 데이터는 비휘발성 메모리(530) 또는 휘발성 메모리(520)에 저장될 수 있다.
다양한 실시 예에서, 정보 처리 시스템(500)은 하나 또는 그 이상의 소프트웨어 구성 요소(570)를 포함하거나 실행할 수 있다. 일부 실시 예에서, 소프트웨어 구성 요소(570)는 운영 체제(OS) 그리고/또는 애플리케이션을 포함할 수 있다. 일부 실시 예들에서, OS는 하나 이상의 서비스를 애플리케이션에 제공하고 애플리케이션과 정보 처리 시스템의 다양한 하드웨어 구성 요소들 (예를 들어, 프로세서(510), 네트워크 인터페이스(540)) 사이의 중개자로서 관리하거나 행동하도록 구성될 수 있다. 이러한 실시 예에서, 정보 처리 시스템(500)은 로컬(예를 들어, 비휘발성 메모리(530) 내에)에 설치될 수 있고 프로세서(510)에 의해 직접 실행되고 OS와 직접 상호 작용하도록 구성될 수 있는 하나 이상의 고유 애플리케이션을 포함할 수 있다. 이러한 실시 예에서, 네이티브 애플리케이션은 사전 컴파일된 머신 실행 가능 코드를 포함할 수 있다. 일부 실시 예에서, 네이티브 애플리케이션은 스크립트 해석기(예를 들어, C 쉘 (csh), AppleScript, 오토 핫키) 또는 가상 실행 머신(VM, 예를 들어, Java 가상 머신, Microsoft 공용 언어 런타임)을 포함할 수 있다. 소스 또는 객체 코드를 실행 가능한 코드로 변환하여 프로세서(510)에 의해 실행된다.
전술한 반도체 장치는 다양한 패키징 기술을 사용하여 캡슐화될 수 있다. 예를 들어, 개시된 주제의 원리에 따라 구성된 반도체 디바이스는 패키지 온 패키지(POP) 기술, 볼 그리드 어레이(BGA) 기술, 칩 스케일 패키지(CSP) 기술, 플라스틱 중 어느 하나를 사용하여 캡슐화될 수 있다. 리드 칩 캐리어 (PLCC) 기술, 플라스틱 이중 인라인 패키지(PDIP) 기술, 다이 인 와플 팩 기술, 다이 인 웨이퍼 형태 기술, 칩 온 보드(COB) 기술, 세라믹 듀얼 인라인 패키지(CERDIP) 기술, PMQFP(plastic metric quad flat package) 기술, PQFP(plastic quad flat package) 기술, SOIC(small outline package) 기술, SSOP(shrink small outline package) 기술, 얇은 작은 윤곽선 패키지(TSOP) 기술, TQFP(thin quad flat package) 기술, SIP(system in package) 기술, 다중 칩 패키지(MCP) 기술, 웨이퍼 레벨 가공 패키지(WFP) 기술, 웨이퍼 레벨 처리 스택 패키지(WSP) 기술 또는 당업자에게 알려진 다른 기술을 사용하여 캡슐화될 수 있다.
방법 단계는 입력 데이터를 조작하고 출력을 생성함으로써 기능을 수행하기 위해 컴퓨터 프로그램을 실행하는 하나 또는 그 이상의 프로그램 가능 프로세서에 의해 수행될 수 있다. 방법 단계들은 또한 특수 목적 논리 회로, 예를 들어 FPGA(필드 프로그램 가능 게이트 어레이) 또는 ASIC(애플리케이션 특정 집적 회로)에 의해 수행될 수 있고 장치가 구현될 수 있다.
다양한 실시 예에서, 컴퓨터 독출 가능 매체는 실행될 때 장치로 하여금 방법 단계의 적어도 일부를 수행하게하는 명령어를 포함할 수 있다. 일부 실시 예에서, 컴퓨터 독출 가능 매체는 자기 매체, 광학 매체, 다른 매체 또는 이들의 조합(예를 들어, CD-ROM, 하드 드라이브, 독출 전용 메모리, 플래시 드라이브)에 포함될 수 있다. 이러한 실시 예에서, 컴퓨터 독출 가능 매체는 유형적으로 그리고 비일시적으로 구현된 제조 물품일 수 있다.
개시된 주제의 원리가 예시적인 실시 예를 참조하여 설명되었지만, 이들 개시된 개념의 사상 및 범위를 벗어나지 않으면서 다양한 변경 및 변형이 이루어질 수 있음은 당업자에게 명백할 것이다. 그러므로 이상에서 기술한 실시 예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다. 따라서, 개시된 개념의 범위는 다음의 청구 범위 및 그 등가물의 가장 넓은 허용 가능한 해석에 의해 결정되며, 전술한 설명에 의해 제한되거나 제한되어서는 안된다. 그러므로, 첨부된 청구 범위는 실시 예의 범위 내에 있는 그러한 모든 수정 및 변경을 포함하도록 의도된다는 것을 이해해야 한다.
Claims (20)
- 장치에 있어서:
분산 스토리지 시스템을 관리하도록 구성된 호스트 처리 장치로부터 오프로드 명령어를 수신하도록 구성된 호스트 인터페이스 회로;
외부 분산 스토리지 시스템으로부터 복수의 데이터 요소들을 수신하도록 구성된 메모리 인터페이스 회로; 그리고
상기 호스트 처리 장치에 의한 추가 처리없이 에러 정정 코드를 적어도 부분적으로 계산하도록 구성된 에러 코드 계산 회로를 포함하되,
상기 오프로드 명령어는 상기 장치가 외부 분산 스토리지 시스템에 의해 저장된 상기 복수의 데이터 요소들과 관련된 상기 에러 정정 코드를 계산하도록 지시하는 장치. - 제 1 항에 있어서,
상기 장치는:
상기 복수의 데이터 요소들을 서브-부분들로 분할하고;
상기 복수의 데이터 요소의 서브-부분에 의해 다중 패스들을 실행하고; 그리고
각 패스의 출력을 집계하여 상기 에러 정정 코드를 형성하여 상기 에러 정정 코드를 계산하도록 구성되는 장치. - 제 1 항에 있어서,
상기 메모리 인터페이스 회로는 상기 에러 코드 계산 회로의 출력을 외부 메모리에 자동으로 기입하도록 구성되는 장치. - 제 1 항에 있어서,
상기 복수의 데이터 요소들은 상기 분산 스토리지 시스템의 다수의 데이터 노드들과 관련되고;
데이터 노드는 복수의 데이터 요소들의 부분을 원격 장소에 저장하고; 그리고
상기 에러 코드 계산 회로는 데이터 노드들의 수에 기반하여 재구성 가능한 장치. - 제 1 항에 있어서,
상기 에러 코드 계산 회로는, 곱셈 회로들과 덧셈 회로들이 교차하는 트리(Tree)를 포함하는 장치. - 제 5 항에 있어서,
상기 곱셈 회로들은 룩업 테이블들을 포함하고; 그리고
상기 덧셈 회로들은 XOR 게이트들을 포함하는 장치. - 제 1 항에 있어서,
상기 에러 코드 계산 회로는 상기 호스트 처리 장치에 의해 리프로그램머블 한 장치. - 제 1 항에 있어서,
상기 에러 코드는 최소 스토리지 재생성(Minimum Storage Regenerating: MSR) 코드를 포함하는 장치. - 외부 분산 스토리지 시스템에 의해 저장된 복수의 데이터 요소들을 저장하도록 구성된 메모리;
분산 스토리지 시스템을 관리하고 그리고 에러 정정 코드의 계산을 리프로그램머블한 처리 장치로 오프로드하도록 구성된 호스트 처리 장치; 및
상기 에러 정정 코드를 계산하도록 구성되는 리프로그램머블한 처리 장치를 포함하되,
상기 리프로그램머블한 처리 장치는, 상기 에러 정정 코드를 적어도 부분적으로 계산하고 그리고 상기 복수의 데이터 요소들에 기초하여 재구성되는 재구성 가능한 파이프 라인을 포함하는 시스템. - 제 9 항에 있어서,
상기 호스트 처리 장치는 동작 동안:
상기 에러 정정 코드의 계산을 상기 리프로그램머블한 처리 장치로 오프로드하기 위한 요청을 생성하는 명령어들의 계산 쓰레드를 실행하고;
상기 리프로그램머블한 처리 장치를 제어하기 위한 명령어들의 콜백 쓰레드 생성하고; 그리고
상기 복수의 데이터 요소들을 상기 메모리로부터 독출하거나 상기 에러 정정 코드를 상기 메모리로부터 독출하기 위한 명령어들의 적어도 하나의 입출력(I/O) 쓰레드를 생성하는 시스템. - 제 10 항에 있어서,
상기 호스트 처리 장치가 패리티 데이터 요소를 생성할 때 구성되는 경우:
오프로드 요청을 큐잉하는 것에 응답하여 계산 쓰레드를 중지시키고;
상기 리프로그램머블한 처리 장치가 상기 에러 정정 코드를 계산했음을 나타내는 상기 콜백 쓰레드에 응답하여, 상기 계산 쓰레드를 재시작하고; 그리고
상기 입출력(I/O) 쓰레드가 상기 에러 정정 코드를 상기 패리티 데이터 요소로 메모리에 기입하도록 하는 시스템. - 제 11 항에 있어서,
상기 호스트 처리 장치가 데이터 요소를 재구성할 때 구성되는 경우:
상기 입출력(I/O) 쓰레드가 상기 메모리로부터 상기 리프로그램머블한 처리 장치로 복수의 데이터 요소드을 독출하게 하고;
상기 입출력(I/O) 쓰레드가 상기 리프로그램머블한 처리 장치가 상기 복수의 데이터 요소들을 수신했음을 지시할 때까지 상기 계산 쓰레드를 중지시키고; 그리고
상기 리프로그램머블한 처리 장치가 상기 에러 정정 코드를 계산하는 것에 응답하여 상기 데이터 요소가 재구성되었다는 명령어들을 유저 쓰레드에게 통지하는 시스템. - 제 9 항에 있어서,
상기 리프로그램머블한 처리 장치는:
상기 호스트 처리 장치로부터 오프로드 명령어를 수신하도록 구성된 호스트 인터페이스 회로;
상기 복수의 데이터 요소들을 수신하도록 구성된 메모리 인터페이스 회로;
상기 복수의 데이터 요소들을 일시적으로 저장하도록 구성된 메모리 버퍼 회로; 그리고
상기 호스트 처리 장치에 의한 추가 처리없이 상기 에러 정정 코드를 적어도 부분적으로 계산하도록 구성된 에러 코드 계산 회로를 포함하는 시스템. - 제 9 항에 있어서,
상기 호스트 처리 장치 및 상기 리프로그램머블한 처리 장치는 직접 메모리 액세스(DMA)를 통해 통신하도록 구성되는 시스템. - 제 9 항에 있어서,
상기 메모리 및 상기 리프로그램머블한 처리 장치는 직접 메모리 액세스(DMA)를 통해 통신하도록 구성되는 시스템. - 에러 정정 코드의 계산을 오프로드 처리 장치로 오프로드하도록 구성된 호스트 처리 장치;
분산 스토리지 장치들의 시스템으로 복수의 데이터 요소들을 읽고 쓰도록 구성된 입출력(I/O) 시스템; 그리고
상기 분산 스토리지 장치들에 저장된 복수의 데이터 요소들에 적어도 부분적으로 기초하여 에러 정정 코드를 계산하도록 구성되는 오프로드 처리 장치를 포함하되,
상기 오프로드 처리 장치는:
상기 복수의 데이터 요소들을 수신하도록 구성된 메모리 인터페이스 회로; 그리고
상기 호스트 처리 장치에 의한 추가 처리없이 상기 에러 정정 코드를 적어도 부분적으로 계산하도록 구성된 에러 코드 계산 회로를 포함하는 장치. - 제 16 항에 있어서,
상기 오프로드 처리 장치는:
상기 복수의 데이터 요소들을 서브-부분들로 분할하고;
상기 복수의 데이터 요소들의 서브-부분에 의해 다중 패스들을 실행하고; 그리고
각 패스의 출력을 집계하여 상기 에러 정정 코드를 형성하여 에러 정정 코드를 계산하도록 구성되는 장치. - 제 16 항에 있어서,
상기 복수의 데이터 요소들은 스토리지 장치들의 수와 관련되고; 그리고
상기 에러 코드 계산 회로 내의 숫자는 데이터 노드들의 수와 일치하도록 재구성 가능하여, 상기 데이터 노드들과 상기 에러 코드 계산 회로 사이에 상관성이 존재하는 장치. - 제 16 항에 있어서,
상기 에러 코드 계산 회로는 곱셈 회로들 및 덧셈 회로들이 교차하는 트리를 포함하되,
상기 곱셈 회로들은 룩업 테이블들을 포함하고, 그리고
상기 덧셈 회로들은 XOR 게이트들을 포함하는 장치. - 제 16 항에 있어서,
상기 오프로드 처리 장치는:
인코딩 요청에 응답하여, 상기 에러 정정 코드를 패리티 요소로서 계산하고, 그리고
디코딩 요청에 응답하여, 상기 에러 정정 코드를 재구축된 데이터 요소로서 계산하는 장치.
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201862780185P | 2018-12-14 | 2018-12-14 | |
US62/780,185 | 2018-12-14 | ||
US16/271,777 | 2019-02-08 | ||
US16/271,777 US11061772B2 (en) | 2018-12-14 | 2019-02-08 | FPGA acceleration system for MSR codes |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20200073978A KR20200073978A (ko) | 2020-06-24 |
KR102491112B1 true KR102491112B1 (ko) | 2023-01-20 |
Family
ID=71072501
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020190126494A KR102491112B1 (ko) | 2018-12-14 | 2019-10-11 | Msr 코드를 위한 fpga 가속 시스템 |
Country Status (5)
Country | Link |
---|---|
US (3) | US11061772B2 (ko) |
JP (1) | JP7356887B2 (ko) |
KR (1) | KR102491112B1 (ko) |
CN (1) | CN111324479B (ko) |
TW (1) | TWI791891B (ko) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018176238A1 (en) | 2017-03-28 | 2018-10-04 | Intel Corporation | Technologies for hybrid field-programmable gate array-application-specific integrated circuit code acceleration |
US11061772B2 (en) * | 2018-12-14 | 2021-07-13 | Samsung Electronics Co., Ltd. | FPGA acceleration system for MSR codes |
US11934330B2 (en) | 2020-05-08 | 2024-03-19 | Intel Corporation | Memory allocation for distributed processing devices |
US11568089B2 (en) * | 2020-08-31 | 2023-01-31 | Frontiir Pte Ltd. | Offloading operations from a primary processing device to a secondary processing device |
US20220206855A1 (en) * | 2020-12-29 | 2022-06-30 | Advanced Micro Devices, Inc. | Offloading computations from a processor to remote execution logic |
US20230153023A1 (en) * | 2021-11-15 | 2023-05-18 | Samsung Electronics Co., Ltd. | Storage device and method performing processing operation requested by host |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1040698A (zh) | 1988-09-02 | 1990-03-21 | 三菱电机株式会社 | 错误校正电路 |
CN101740135A (zh) | 2008-11-18 | 2010-06-16 | 富士通株式会社 | 错误判断电路和共享的存储器系统 |
US20140317222A1 (en) | 2012-01-13 | 2014-10-23 | Hui Li | Data Storage Method, Device and Distributed Network Storage System |
US20160110254A1 (en) | 2014-10-15 | 2016-04-21 | Empire Technology Development Llc | Partial Cloud Data Storage |
US20170179979A1 (en) | 2015-12-18 | 2017-06-22 | Netapp, Inc. | Systems and Methods for Minimum Storage Regeneration Erasure Code Construction Using r-Ary Trees |
US20180300201A1 (en) | 2017-04-17 | 2018-10-18 | Intel Corporation | Bypassing error correction code (ecc) processing based on software hint |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7673222B2 (en) | 2005-07-15 | 2010-03-02 | Mediatek Incorporation | Error-correcting apparatus including multiple error-correcting modules functioning in parallel and related method |
CN102272730B (zh) * | 2008-10-09 | 2017-05-24 | 美光科技公司 | 经虚拟化错误校正码nand |
US8356137B2 (en) | 2010-02-26 | 2013-01-15 | Apple Inc. | Data storage scheme for non-volatile memories based on data priority |
US8650446B2 (en) | 2010-03-24 | 2014-02-11 | Apple Inc. | Management of a non-volatile memory based on test quality |
US9647698B2 (en) | 2013-02-26 | 2017-05-09 | Peking University Shenzhen Graduate School | Method for encoding MSR (minimum-storage regenerating) codes and repairing storage nodes |
US8996796B1 (en) | 2013-03-15 | 2015-03-31 | Virident Systems Inc. | Small block write operations in non-volatile memory systems |
US9547458B2 (en) | 2014-12-24 | 2017-01-17 | International Business Machines Corporation | Intra-rack and inter-rack erasure code distribution |
US10007587B2 (en) | 2015-09-18 | 2018-06-26 | Qualcomm Incorporated | Systems and methods for pre-generation and pre-storage of repair fragments in storage systems |
US10452477B2 (en) | 2016-08-26 | 2019-10-22 | Netapp, Inc. | Multiple node repair using high rate minimum storage regeneration erasure code |
US11061772B2 (en) * | 2018-12-14 | 2021-07-13 | Samsung Electronics Co., Ltd. | FPGA acceleration system for MSR codes |
-
2019
- 2019-02-08 US US16/271,777 patent/US11061772B2/en active Active
- 2019-09-18 TW TW108133489A patent/TWI791891B/zh active
- 2019-10-11 KR KR1020190126494A patent/KR102491112B1/ko active IP Right Grant
- 2019-11-20 CN CN201911143197.3A patent/CN111324479B/zh active Active
- 2019-12-10 JP JP2019222969A patent/JP7356887B2/ja active Active
-
2021
- 2021-07-02 US US17/367,315 patent/US11726876B2/en active Active
-
2023
- 2023-07-17 US US18/223,019 patent/US20230367675A1/en active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1040698A (zh) | 1988-09-02 | 1990-03-21 | 三菱电机株式会社 | 错误校正电路 |
CN101740135A (zh) | 2008-11-18 | 2010-06-16 | 富士通株式会社 | 错误判断电路和共享的存储器系统 |
US20140317222A1 (en) | 2012-01-13 | 2014-10-23 | Hui Li | Data Storage Method, Device and Distributed Network Storage System |
US20160110254A1 (en) | 2014-10-15 | 2016-04-21 | Empire Technology Development Llc | Partial Cloud Data Storage |
US20170179979A1 (en) | 2015-12-18 | 2017-06-22 | Netapp, Inc. | Systems and Methods for Minimum Storage Regeneration Erasure Code Construction Using r-Ary Trees |
US20180300201A1 (en) | 2017-04-17 | 2018-10-18 | Intel Corporation | Bypassing error correction code (ecc) processing based on software hint |
Also Published As
Publication number | Publication date |
---|---|
CN111324479A (zh) | 2020-06-23 |
US11061772B2 (en) | 2021-07-13 |
US11726876B2 (en) | 2023-08-15 |
US20210334162A1 (en) | 2021-10-28 |
JP7356887B2 (ja) | 2023-10-05 |
CN111324479B (zh) | 2022-08-09 |
US20230367675A1 (en) | 2023-11-16 |
KR20200073978A (ko) | 2020-06-24 |
US20200192757A1 (en) | 2020-06-18 |
JP2020095722A (ja) | 2020-06-18 |
TWI791891B (zh) | 2023-02-11 |
TW202026871A (zh) | 2020-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102491112B1 (ko) | Msr 코드를 위한 fpga 가속 시스템 | |
US20200250032A1 (en) | Flexible reliability coding for storage on a network | |
US11940875B2 (en) | System, device and method for storage device assisted low-bandwidth data repair | |
US11086525B2 (en) | Resilient external memory | |
US20160196179A1 (en) | Reconfigurable ecc for memory | |
US20200042500A1 (en) | Collaborative compression in a distributed storage system | |
US11782844B2 (en) | Vector processor storage | |
US20140344643A1 (en) | Hybrid memory protection method and apparatus | |
US11467902B2 (en) | Apparatus to insert error-correcting coding (ECC) information as data within dynamic random access memory (DRAM) | |
US10102072B2 (en) | Flexible redundant array of independent disks (RAID) computation device | |
CN111610932B (zh) | 减少键值存储服务器的漏洞窗口而不牺牲可用容量的系统 | |
KR20230121154A (ko) | 원격 실행 디바이스에서의 호스트 기반 오류 검출 능력제공 | |
WO2023208231A1 (zh) | 一种内存数据读写方法、系统以及内存控制器 | |
US20160336971A1 (en) | Consensus decoding algorithm for generalized reed-solomon codes | |
WO2023274531A1 (en) | Data storage system and method of managing the data storage system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
A302 | Request for accelerated examination | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |