KR102168960B1 - 이레이저 코드 데이터 보호 및 복구 계산 시스템 및 방법 - Google Patents

이레이저 코드 데이터 보호 및 복구 계산 시스템 및 방법 Download PDF

Info

Publication number
KR102168960B1
KR102168960B1 KR1020170078134A KR20170078134A KR102168960B1 KR 102168960 B1 KR102168960 B1 KR 102168960B1 KR 1020170078134 A KR1020170078134 A KR 1020170078134A KR 20170078134 A KR20170078134 A KR 20170078134A KR 102168960 B1 KR102168960 B1 KR 102168960B1
Authority
KR
South Korea
Prior art keywords
data
segment
erasure code
processing circuit
recovery
Prior art date
Application number
KR1020170078134A
Other languages
English (en)
Other versions
KR20180020874A (ko
Inventor
윌리엄 데이비드 슈와드러
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Publication of KR20180020874A publication Critical patent/KR20180020874A/ko
Application granted granted Critical
Publication of KR102168960B1 publication Critical patent/KR102168960B1/ko

Links

Images

Classifications

    • 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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • 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
    • 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/158Finite field arithmetic processing
    • 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/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/373Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 with erasure correction and erasure determination, e.g. for packet loss recovery or setting of erasures for the decoding of Reed-Solomon codes
    • 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/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/3761Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35 using code combining, i.e. using combining of codeword portions which may have been transmitted separately, e.g. Digital Fountain codes, Raptor codes or Luby Transform [LT] codes
    • 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/65Purpose and implementation aspects
    • H03M13/6502Reduction of hardware complexity or efficient processing

Landscapes

  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Probability & Statistics with Applications (AREA)
  • General Physics & Mathematics (AREA)
  • Algebra (AREA)
  • Pure & Applied Mathematics (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • Detection And Correction Of Errors (AREA)
  • Optical Recording Or Reproduction (AREA)

Abstract

본 발명은 간단한 산술 및 데이터 조작 기능들을 사용하여 이레이저 코드 데이터 보호 및 복구 계산들을 수행하기 위한 시스템 및 방법에 관한 것이다. 다른 실시 예들은 다수의 컴팩트한 1차원 표 검색 연산들을 갖는 계산 기능들을 이용하기 위한 기술들을 설명한다. 할당된 멀티 스레드된 프로세서 스레드들의 집합은 이레이저 코드 데이터 보호 정보를 생성하기 위해 그리고 사용 가능한 데이터 및 데이터 보호 정보를 이용하여 데이터 복구 연산들을 수행하기 위해 병렬로 데이터 값들에 대해 계산들을 수행한다. 정상 연산들 동안, 일 실시 예에서, 스레드들은 간단한 산술 연산들 및 데이터 조작 기능들의 작은 집합을 이용하여 병렬 계산들을 수행할 수 있다. 다른 실시 예들에 있어서, 스레드들은 또한 스레드된 프로세서 내에 저장되거나 그렇지 않으면 계산들을 수행하기 위해 멀티 스레드된 프로세서에 의해 접근할 수 있는 다수의 컴팩트한 1차원 검색 표들을 이용할 수 있다.

Description

이레이저 코드 데이터 보호 및 복구 계산 시스템 및 방법{ERASURE CODE DATA PROTECTION AND RECOVERY COMPUTATION SYSTEM AND METHOD}
본 발명에 따른 실시 예들의 하나 이상의 양상들은 컴퓨터 데이터 파일 보호 시스템들과 관련되고 좀 더 구체적으로 이레이저 코드 데이터 보호 및 복구 계산 시스템 및 방법에 관련된다.
데이터 센터 저장 시스템들은 1개 저장 장치가 제공할 수 있는 것 이상의 총 저장 용량 및 전체 성능이 필요하다. 결과적으로, 이들 저장 시스템들은 전형적으로 “저장 장치 뱅크들(storage device banks)”로 알려진 복수의 독립적인 저장 자원을 구성하고 관리한다. 저장 장치 뱅크 내의 복수의 저장 장치는 상이한 저장 용량들 및 성능 특성들을 제공하는 상이한 설계들 및 특성들을 가질 수 있다. 그것들은 상이한 접근 인터페이스들을 갖는 하드 디스크 드라이브들(hard disk drives; HDDs), 상이한 접근 인터페이스들을 갖는 솔리드 스테이트 드라이브들(solid state drives; SSDs), 디램 램-드라이브들(DRAM RAM-drives), 불휘발성 매체를 이용하는 영구 저장 메모리 공간들, 등을 포함할 수 있다. 이 접근법은 데이터 센터 컴퓨팅 시스템들이 하나 이상의 저장 장치 뱅크들 내에서 다수의 그러한 저장 장치들을 병렬로 접근하는 것에 의해 다수의 데이터 파일 데이터 블록들(blocks)에 동시에 접근할 수 있게 한다.
저장 장치 뱅크들은 증가된 저장 용량 및 일반적으로 증가된 성능을 제공하지만, 저장 장치 뱅크의 평균 고장 시간(mean time to failure; MTTF)은 독립적인 저장 장치들의 수가 증가됨에 따라 비례하여 저하된다. 예를 들어, 하나의 저장 장치가 F의 평균 고장 시간을 갖고 저장 장치 뱅크가 N개의 그러한 저장 장치들로 구성되면, 저장 장치 뱅크의 평균 고장 시간은 N이 클수록 감소하는 값인 약 F/N이다.
이 저하는 만족스럽지 못한 저장 장치 뱅크에 대한 평균 데이터 손실 시간(mean time to date loss; MTTDL) 확률을 야기할 수 있고, 데이터 손실 방지 조치들이 취해지지 않으면 잠재적으로 불필요한 데이터 손실을 야기할 수 있다. 저하된 평균 고장 시간으로부터 저장 장치 뱅크 저장 장치들 내에 저장된 데이터를 보호하기 위해, 오류 복구 메커니즘들(fault recovery mechanisms)이 전형적으로 이용된다.
이레이저 코딩(erasure coding)은 저장 장치 뱅크들 내의 데이터 저장 용량을 이용하기 위해 오류 복구를 제공하는 다양한 기술들의 잘 알려진 집합과 관련이 있다. 솔리드 스테이트 드라이브와 같은 저장 장치가 그것의 저장 매체 전체에 걸쳐 내부적인 이레이저 코딩을 제공할 수 있으면, 저장 장치의 평균 데이터 손실 시간 신뢰성 및 사용 가능한 수명은 크게 향상될 수 있다. 이레이저 코딩이 저장 장치 뱅크 내의 저장 장치들의 전체 또는 일부에 걸쳐 사용되면, 그것은 저장 장치 뱅크의 전체 평균 데이터 손실 시간을 줄일 수 있고, 그렇게 함으로써 저장 장치 뱅크의 신뢰성이 향상된다.
본 발명은 상술한 기술적 과제를 해결하기 위한 것으로, 본 발명은 이레이저 코드 데이터 보호 및 복구 계산 시스템 및 방법을 제공할 수 있다.
본 발명의 실시 예들은 일반적으로 복구 연산들을 수행하기 위해 다중 컴퓨팅 시스템들을 가능하게 하는 좀 더 효율적인 이레이저 코드 데이터 보호 및 복구 계산들을 가능하게 하는 시스템들, 솔루션들, 및/또는 기술들에 관한 것이다.
본 발명의 실시 예들은 고성능의 방식으로 데이터 파일 이레이저 코드 계산들을 수행하기 위해 이레이저 코드 데이터 보호 및 복구 방법들을 사용하는 컴퓨터들의 방법들을 개시한다. 이러한 방법들은 이레이저 코드 데이터 보호 및 복구 방법들이 이레이저 코드들을 생성하고 그것들을 사용하여 손실을 복구하거나 그렇지 않으면 파일 데이터를 재구성하게 할 수 있다.
방법들에서, 할당된 스트라이프를 접근하기 위해 스트라이프 오프셋을 계산하는 스레드 식별 번호를 이용하여, 파일 데이터 세그먼트들의 배열 내 각 세그먼트들에 걸쳐, 할당된 스트라이프 내에서 데이터 유닛 오프셋에 기초하여 첫 번째 배타적 논리합 연산을 수행하는 것에 의해 생성되는 복수의 값을 누적하는 것에 의해 첫 번째 이레이저 코드를 계산하는 단계; 할당된 스트라이프 내 각 데이터 유닛 오프셋에 대해, 간단한 연산 기능들 또는 컴팩트한 1차원 표들을 참조하여 검색 연산들에 의해 획득된 검색 표 값들과 결합된 간단한 연산 기능들 어느 하나를 이용하여 결정된 계산된 값들에 기초하여 두 번째 배타적 논리합을, 파일 데이터 세그먼트들의 배열의 각 세그먼트에 걸쳐, 수행하는 것에 의해 생성된 복수의 값을 누적하는 것에 의해 다수의 추가적인 개별 이레이저 코드들을 계산하는 단계; 및, 할당된 스트라이프 내에서 각 데이터 유닛 오프셋에 대해, 이레이저 코드 데이터 보호 및 복구 기능 또는 다른 소프트웨어 시스템들에 의한 저장 장치 배치가 가능한 N개 파일 데이터 세그먼트들과 연관된 첫 번째 이레이저 코드 및 다수의 추가적인 개별 이레이저 코드들 만드는 단계들, 스트라이프는 각 세그먼트 내 공통 오프셋에서 스트라이프 내 데이터 세그먼트 당 S개 데이터 유닛들의 집합을 포함한다.
당업자들은 동일한 크기를 갖는 이레이저 코드 구성에서 사용되는 모든 스트라이프들에 이점이 있는 것 그리고 마지막 스트라이프가 NxS 값들로 채워지는 것을 보장하기 위해 필요할 수 있는 채우기 데이터 유닛들과 함께 복수의 파일 데이터 세그먼트의 크기를 조정하는 것을 인식할 것이다. 이러한 채우기 데이터 유닛들은 파일 데이터 유닛들과 함께 저장될 수 있으나 파일 데이터 유닛들을 접근할 때 실제 파일 데이터 유닛 값들로서 달리 간주되어서는 안 된다. 물론, 다른 실시 예들에서, 스트라이프 크기는 변할 수 있다.
본 발명의 일부 실시 예들은 달리 복잡한 이레이저 코드 데이터 보호 및 복구 계산들을 간단하고, 효율적인 산술 명령어들로 단순화하는 이점을 갖는다. 일부 실시 예들의 다른 이점들은 복잡한 이레이저 코드 데이터 보호 및 복구 계산들이 다수의 1차원 표들을 이용하여 간단하고, 효율적인 산술 명령어들 및 다수의 1차원 표들을 사용하는 표 검색 연산들의 조합으로 줄어들 수 있다는 것이다. 이러한 실시 예들은 그렇게 함으로써 계산상의 복잡성을 줄이고 전체 시스템 효율을 증가시킨다. 다수의 데이터 파일 세그먼트들 및 관련 에러 복구 데이터 세그먼트들이 상이한 저장 장치들에 저장되어 물리적으로 분산되면, 다중 컴퓨팅 시스템들은 병렬로 손실 데이터 파일 세그먼트들 및 관련 에러 복구 데이터 세그먼트들을 복구할 수 있다.
본 발명의 실시 예에 따라 데이터를 저장하기 위한 시스템이 제공되고, 시스템은 포함한다: 제 1 프로세싱 회로; 제 2 프로세싱 회로로 전송하도록 구성되는 제 1 프로세싱 회로: 복수의 입력 데이터 유닛; 수행되는 이레이저 코드 연산을 명시하는 요청, 이레이저 코드 연산은: 패리티 생성 연산; 또는 체계적인 데이터 복구 연산; 및 이레이저 코드 연산을 수행하는데 사용되는 하나 이상의 상수들.
일 실시 예에 있어서, 하나 이상의 상수들은 포함한다: 복수의 입력 값 각각에 대해, 갈루아체의 입력 값의 거듭제곱을 나열하는 거듭제곱들 표, 및 복수의 입력 값 각각에 대해, 갈루아체의 입력 값의 로그를 나열하는 로그 표.
일 실시 예에 있어서, 입력 데이터 유닛들 각각은 n 비트 수이고, n은 2의 거듭제곱의 양의 정수이고, 갈루아체는 GF(2^n)이다.
일 실시 예에 있어서, 하나 이상의 상수들은 체계적인 데이터 복구 연산을 수행하는데 적합한 역 배열을 포함한다.
일 실시 예에 있어서, 역 배열은 갈루아체에서, N x 1 벡터가 곱해질 때 N개 복구된 데이터 유닛들을 생성하는 N x N 배열이고, N은 양의 정수이다.
일 실시 예에 있어서, 하나 이상의 상수들은 곱셈 표를 포함한다.
일 실시 예에 있어서, 곱셈 표는 제 1 인자의 각 가능한 값에 대해, 제 1 인자 및 가중치의 곱을 나열하고, 가중치는 슬라이스 내 데이터 유닛들의 가중 배타적 논리합으로서 Q 이레이저 코드 데이터 유닛을 생성하는데 사용되는 복수의 가중치 중 하나이다.
본 발명의 실시 예에 따라 데이터를 저장하기 위한 시스템이 제공되고, 시스템은 포함한다: 제 1 프로세싱 회로; 제 2 프로세싱 회로에 전송하도록 구성되는 제 1 프로세싱 회로: 복수의 입력 데이터 유닛; 수행되는 이레이저 코드 연산을 명시하는 요청, 이레이저 코드 연산은: 패리티 생성 연산; 또는 체계적인 데이터 복구 연산이고; 및 커널, 커널은 제 2 프로세싱 회로에 의해 실행될 때 제 2 프로세싱 회로가 이레이저 코드 연산을 수행하게 하는 머신 코드 명령어들을 포함하되, 커널은 조건부의 연산들 없이 제 1 인자 및 제 2 인자의 곱셈을 수행하기 위한 명령어들을 포함한다.
일 실시 예에 있어서, 제 1 인자 및 제 2 인자의 곱셈을 수행하기 위한 명령어들은 복수의 왼쪽 쉬프트 연산 및 복수의 덧셈 연산을 포함하고, 복수의 덧셈 연산의 각 덧셈 연산은 모듈로 2 덧셈 연산이고 1의 값을 갖는 제 2 인자의 해당 비트에 대응한다.
본 발명의 실시 예에 따라 데이터를 저장하기 위한 시스템이 제공되고. 시스템은 포함한다: 제 1 프로세싱 회로; 및 제 2 프로세싱 회로, 제 1 프로세싱 회로는 제 2 프로세싱 회로로 전송하도록 구성된다: 복수의 입력 데이터 유닛; 수행되는 이레이저 코드 연산을 명시하는 요청, 이레이저 코드 연산은: 패리티 생성 연산; 또는 체계적인 데이터 복구 연산; 및 이레이저 코드 연산을 수행하는데 사용되는 하나 이상의 상수들.
일 실시 예에 있어서, 제 1 프로세싱 회로는 CPU이고 제 2 프로세싱 회로는 GPU이다.
일 실시 예에 있어서, 하나 이상의 상수들은 포함한다: 복수의 입력 값 각각에 대해, 갈루아체의 입력 값의 거듭제곱을 나열하는 거듭제곱들 표; 복수의 입력 값 각각에 대해, 갈루아체의 입력 값의 로그를 나열하는 로그 표.
일 실시 예에 있어서, 입력 데이터 유닛들 각각은 n 비트 수이고, n은 2의 거듭제곱의 양의 정수이고, 갈루아체는 GF(2^n)이다.
일 실시 예에 있어서, 하나 이상의 상수들은 체계적인 데이터 복구 연산을 수행하는데 적합한 역 배열을 포함한다.
일 실시 예에 있어서, 역 배열은 갈루아체에서, N x 1 벡터가 곱해질 때 N개 복구된 데이터 유닛들을 생성하는 N x N 배열이고, N은 양의 정수이다.
일 실시 예에 있어서, 하나 이상의 상수들은 곱셈 표를 포함한다.
일 실시 예에 있어서, 곱셈 표는 제 1 인자의 각 가능한 값에 대해, 제 1 인자 및 가중치의 곱을 나열하고, 가중치는 슬라이스 내 데이터 유닛들의 가중 배타적 논리합으로서 Q 이레이저 코드 데이터 유닛을 생성하는데 사용되는 복수의 가중치 중 하나이다.
일 실시 예에 있어서, 제 2 프로세싱 회로는 복수의 코어를 포함하고, 복수의 코어 중 제 1 코어는: 시동시, 제 1 코어 및 제 1 코어에 의해 실행되는 스레드의 식별 번호를 찾고, 식별 번호를 이용하여 계산된 메모리 주소에 저장된 입력 데이터 유닛을 이용하여 이레이저 코드 연산을 수행하도록 구성된다.
본 발명의 실시 예에 따라 데이터를 저장하거나 복구하기 위한 방법이 제공되고, 방법은 포함한다: 제 1 프로세싱 회로에 의해 제 2 프로세싱 회로로 전송하는 단계: 복수의 입력 데이터 유닛; 수행되는 이레이저 코드 연산을 명시하는 요청, 이레이저 코드 연산은: 패리티 생성 연산; 또는 체계적인 데이터 복구 연산; 및 이레이저 코드 연산을 수행하는데 사용되는 하나 이상의 상수들; 및 제 2 프로세싱 회로에 의해 요청된 이레이저 코드 연산을 수행하는 단계.
일 실시 예에서, 제 1 프로세싱 회로는 CPU이고 제 2 프로세싱 회로는 GPU이다.
본 발명의 실시 예들을 사용하면, 이레이저 코드 데이터 보호 및 복구 계산 복잡도는 복잡한 갈루아체 연산에서 간단한 비트 단위 XOR 합산들 및 비트 조작들로 감소된다.
본 발명의 실시 예들의 장점은 달리 복잡한 이레이저 코드 데이터 보호 및 복구 계산들은 효율적인 산술 명령어들 또는 기본 1차원 표 검색 연산들로 간단하게 되고, 그렇게 함으로써 계산상의 복잡성을 줄이고 전체 시스템 효율을 증가시킨다. 적절한 멀티 스레드된 프로세서 플랫폼에서 구현될 경우, 상당한 시스템 성능 향상이 달성될 수 있다.
본 발명의 이들 및 다른 특징들 및 이점들은 명세서, 청구 범위, 및 첨부 도면들을 참조하여 인식되고 이해될 것이다:
도 1은 본 발명의 실시 예에 따라, 이레이저 코드 데이터 보호 및 복구 세그먼트 배열로서 구성된 독립적인 저장 파일 데이터 세그먼트들의 집합이다;
도 2a는 본 발명의 실시 예에 따라, 비트 단위 모듈로 2 곱셈 결과를 계산하기 위한 방법의 순서도이다; 도 2b는 본 발명의 실시 예에 따라, 0x011D 원시 다항식에 대해 GF(2) 이상의 확대체로서 갈루아체 GF(2^8) 내에서 비트 단위 모듈로 2 곱셈 결과를 그것의 동일한 요소로 변환하기 위한 방법 단계들의 순서도이다;
도 2c는 본 발명의 실시 예에 따라, GF(2) 이상의 확대체로서 갈루아체 GF(2^8) 내의 요소의 곱셈의 역원을 결정하기 위한 방법 단계들의 순서도이다;
도 3a는 본 발명의 실시 예에 따라, P 및 Q 관련 데이터 복구 세그먼트 데이터 유닛들을 생성하기 위한 방법 단계들의 순서도이다;
도 3b는 본 발명의 실시 예에 따라, P 및 Q 모두에 대한 데이터 유닛을 생성하기 위해 스레드가 수행하는 방법 단계들의 순서도이다;
도 4a는 본 발명의 실시 예에 따라, P 및 Q 관련 데이터 복구 세그먼트 데이터 유닛들 및 나머지 사용 가능한 파일 데이터 세그먼트들을 이용하여 2개 파일 데이터 세그먼트들을 복구하기 위한 방법 단계들의 순서도이다;
도 4b는 본 발명의 실시 예에 따라, 2개 파일 데이터 세그먼트들을 복구하기 위해 스레드가 수행하는 방법 단계들의 일부의 순서도이다;
도 4c는 본 발명의 실시 예에 따라, 2개 파일 데이터 세그먼트들을 복구하기 위해 스레드가 수행하는 방법 단계들의 순서도를 완료한다;
도 5는 본 발명의 실시 예에 따른, 곱셈 표이다;
도 6a는 본 발명의 실시 예에 따른, 거듭제곱들 표이다;
도 6b는 본 발명의 실시 예에 따른, 로그 표이다;
도 7은 본 발명의 실시 예에 따라, 곱셈을 수행하는 연산 처리 도면이다.
첨부된 도면들과 관련되어 이하에 제시되는 상세한 설명은 본 발명에 따라 제공되는 이레이저 코드 데이터 보호(erasure code data protection) 및 복구 계산 시스템 및 방법의 예시적인 실시 예들을 설명할 의도이고 단지 본 발명이 구성될 수 있거나 이용될 수 있는 형태들을 나타내기 위한 의도는 아니다. 설명은 예시된 실시 예들과 관련하여 본 발명의 특징들을 설명한다. 그러나, 또한 본 발명의 사상 및 범위 내에 포함되도록 의도된 다른 실시 예들에 의해 동일하거나 등등한 기능들 및 구조들이 달성될 수 있음은 이해된다. 본 명세서의 다른 곳에서 나타낸 바와 같이, 동일한 구성요소들 참조번호들은 동일한 구성요소들 또는 특징들을 나타내기 위한 것이다.
본 발명의 기술 분야에서 알려진 이레이저 코딩(erasure coding)을 자주 사용하는 하나의 보편적인 데이터 구조 방법은 “객체 저장(object storage)”이다. 객체 저장에서, 개별적인 데이터 파일은 “객체”라 한다.
당업자는 데이터 파일들, 데이터 객체들, 및 다른 데이터 범위들로부터 데이터 값들의 집합으로 이루어질 수 있는 메모리 내 주소 범위들을 포함하는, 알려진 크기의 임의의 데이터 블록(data block) 또는 그 일부는 인접한 데이터 블록 데이터의 N개의 겹치지 않고, 동일한 크기의 세그먼트들(segments)로 나눠질 수 있음을 이해할 것이다. N개의 세그먼트들은 상호 배타적이고 전체 포괄적이며, 다수의 세그먼트들은 계산 연산들을 단순화하기 위해 추가된 패딩(padding)을 포함할 수 있다.
각 세그먼트가 K개의 일정한 크기의 데이터 유닛들을 포함한다고 가정하면(여기서, 데이터 유닛은 4비트, 8비트, 또는 16비트 등과 같은 다수의 인접 비트를 포함), 이러한 데이터 블록 분할 처리(data block partitioning process)에서, N-1개의 세그먼트들은 동일한 크기고 나머지 하나 세그먼트는 처음에 다른 N-1개의 세그먼트들보다 작은 크기를 가질 수 있다. 0 값들과 같은, 다수의 “채우기(fill)” 데이터 문자들을 보다 작은 크기의 세그먼트에 첨부하는 것은 N-1개의 다른 세그먼트들의 크기를 갖는 세그먼트를 야기하며, 그렇게 함으로써 N개의 동일한 크기의 데이터 세그먼트들을 생성하고, 그 중 하나는 패딩 데이터 유닛들을 갖는다. 당업자는 알려진 크기의 데이터 블록들, 데이터 파일들, 데이터 객체들, 및 메모리 내 데이터 범위들을 분할하는 다른 방법들이 있음을 인식할 것이고 제안된 방법은 단지 본 발명의 범위를 제한하는 것으로 간주되지 않는 많은 가능한 방법들 중 하나일 뿐이다.
본 발명의 기술 분야에서 알려진 바와 같이, 이레이저 코딩과 함께, 이전에 구성된 N개의 파일 데이터 세그먼트들에 대한 오류 보호를 제공하는 다수의 M개 관련 에러 복구 데이터 세그먼트들(“이레이저 코드” 데이터)을 구성하는 것이 가능하다. 적절하게 구성되면, 집합적인 N+M개의 세그먼트들 및 (아마 다수의 데이터 뱅크들 또는 데이터 센터 랙들(data center racks), 데이터 센터 섬들(data center isles), 데이터 센터 룸들(data center rooms), 데이터 센터 플로어들(data center floors) 및 지리적으로 떨어져 있는 데이터 센터들(data centers)과 같은 다른 분리된 물리적인 지역들 내) 다른 장치들에서의 그것들의 저장은 데이터 세그먼트 및 관련 에러 복구 데이터 세그먼트들을 저장하는 데이터 뱅크들이 복구할 수 있는 저장 장치 및 데이터 센터 구성 요소의 고장들을 겪게 할 수 있고, 그러므로, 너무 많은 다른 그러한 고장들이 발생하기 전에 손실된 데이터를 복구하는 적절한 연산들이 시작되면 영구적인 데이터 손실을 야기하지 않는다.
이러한 일반화된 예시에서, 효과적인 이레이저 코딩 보호는 파일 데이터가 회복 불가능하게 손실되기 전에 N+M개의 세그먼트들 중 임의의 M개를 손실하거나 그렇지 않으면 접근할 수 없게 한다. N+M개 세그먼트들 중 N개만은 데이터 손실을 방지하기 위해 사용 가능할 필요가 있으므로, 이것은 당업자에게 “N+M개 중 N개” 이레이저 코드 전략으로서 알려져 있다. 기본적인 하나의 가정은 이레이저 코드 데이터 보호 및 복구 시스템은 어느 데이터 세그먼트들이 손실되거나 그렇지 않으면 사용 불가능한지 그리고 그것들이 원래 어떻게 구성되었었는지를 식별할 수 있다는 것이다.
N개 데이터 파일 세그먼트들로부터 다수의 M개 관련 에러 복구 데이터 세그먼트들을 구성하는 연산들은 이하 “데이터 유닛들(data units)”로 불리는 N개 세그먼트들 내에서 균일한 크기의 데이터 유닛들 상에서 연산한다. 데이터 유닛 크기는 보호가 필요한 주어진 데이터 블록들에 대해 일정하지만 다른 데이터 블록들은 상이한 데이터 유닛 크기들 및 상이한 이레이저 코드 데이터 보호를 가질 수 있고 다른 방법들을 이용하여 주어진 데이터 블록을 보호하는 복구 시스템들은 다른 데이터 유닛 크기들을 이용할 수 있다. 그래도 하나의 방법은 다른 방법으로 생성되는 관련 에러 복구 데이터 세그먼트들을 이용할 수 없다. 그러한 경우, 방법들은 독립적이다.
상술한 바와 같이, 다른 크기들도 가능하지만, 데이터 유닛 크기는 4비트, 8비트, 또는 16비트일 수 있고, 이런 예시적인 크기들은 따라서 본 발명의 범위를 제한하는 것으로 간주되어서는 안 된다. 이하, 보호가 필요한 데이터 블록은 “파일 데이터(file data)”라 칭할 것이다.
“N+M개 중 N개” 방법에서 4비트 데이터 유닛들로 작업할 때, 종래의 이레이저 코드 데이터 보호 및 복구의 한가지 속성은 다수의 M개의 구성된 관련 에러 복구 데이터 세그먼트들은 16개 원본 파일 데이터 세그먼트들까지 보호할 수 있다는 것이다. 즉, N은 16 이하여야 한다. 그러나, 8비트 데이터 유닛들로 작업할 때, 다수의 구성된 관련 에러 복구 데이터 세그먼트들은 256개 원본 파일 데이터 세그먼트들까지 보호할 수 있다. 유사하게, 16비트 데이터 유닛들로 작업할 때, 다수의 구성된 관련 에러 복구 데이터 세그먼트들은 65,536개 원본 파일 데이터 세그먼트들까지 보호할 수 있다.
데이터 파일 세그먼트들의 증가된 수로 동작하는 능력은 유리할 수 있으므로 보호될 수 있는 파일 데이터 세그먼트들의 수의 증가는 중요하다.
일 예로서, 파일 데이터를 6개의 관련 에러 복구 데이터 세그먼트들과 함께 10개의 동일한 크기의 세그먼트들로 분할하는, “16개 중 10개” 접근 대신에, 파일 데이터를 12개 관련 에러 복구 데이터 세그먼트들과 함께 20개의 동일한 크기의 세그먼트들로 분할하는 “32개 중 20개” 접근은 추가적인 저장 용량 요구 없이 이레이저 코드 데이터 보호 및 복구 스킴(scheme)이 두 배 많은 관련 에러 복구 데이터 세그먼트들을 생성할 수 있게 한다. 관련 에러 복구 데이터 세그먼트들의 수를 두 배로 늘리는 것은 방법이 파일 데이터에 제공하는 보호를 크게 강화한다.
두 번째 예로서, 일부 이레이저 코드 방법 전략들은 원본 파일 데이터 세그먼트들보다 더 많은 관련 에러 복구 데이터 세그먼트들을 생성한다. 다수의 관련 에러 복구 데이터 세그먼트들은 대게 원본 파일 데이터의 스크램블된(scrambled) 버전들이다. 그러므로, 필요한 때 원본의, 스크램블되지 않은 데이터는 관련 에러 복구 데이터 세그먼트로부터 복구될 수 있으므로, 종종 보안 수단으로서 원본의, 스크램블되지 않은 데이터를 버릴 수 있다.
세 번째 예로서, 일반적으로 파일 데이터 관련 에러 복구 데이터 세그먼트 정보를 업데이트 하기 위해 다양한 손실된 데이터 세그먼트들을 복구하는 능력을 보장하기 위해 추가적인 계산 자원들을 포함하긴 하지만, 6개 관련 에러 복구 데이터 세그먼트들 및 데이터 파일 세그먼트들을 저장하기 위해 전체 저장 용량의 37.5 퍼센트를 사용하는 “16개 중 10개” 방법 또는 “32개 중 20개” 방법 대신에, 저장 관리자들은 “32개 중 20개” 방법 보다는 “26개 중 20개” 방법을 사용할 수 있다. 이 전략은 “16개 중 10개”의 보호 수준을 제공하지만 그러나 이전 12개가 아닌 6개 관련 에러 복구 데이터 세그먼트들을 저장하기 위해 전체 저장 용량의 18.75 퍼센트만 사용한다. 또한, 이것은 손실된 세그먼트들을 복구하는 능력을 보장하는데 사용되는 계산 자원들을 줄일 수 있다.
당업자는 6개의 관련 에러 복구 데이터 세그먼트들과 함께 10개의 동일한 크기의 데이터 세그먼트들 및 12개의 관련 에러 복구 데이터 세그먼트들과 함께 20개의 동일한 크기의 데이터 세그먼트들은 단순한 예시들이고 다른 데이터 분할 및 관련 에러 복구 데이터 세그먼트 구성들이 가능한 것을 인식할 것이다.
또한, 당업자는 다른 파일 데이터 세그먼트들 및 에러 복구 데이터 세그먼트들을 다른 저장 장치들, 아마 심지어 다른 데이터 센터 플로어들상의 다른 네트워크 스위치들 상의 다른 저장 장치 뱅크들, 및 다른 지리적으로 떨어진 데이터 센터들에 저장하는 것이 유리하다는 것을 또한 인식할 것이다. 이 접근법은 특정, 개별 파일 데이터와 연관된 다중 세그먼트들의 손실을 야기하는 통신 스위치와 같은 단일 저장 장치 또는 데이터 센터 자원의 고장을 방지하여 단일 지점 고장들(single-point-of-failures)을 피하는데 도움이 된다.
개별 저장 장치 고장은 다른 파일 데이터와 연관된 많은 저장된 데이터 세그먼트들의 손실을 야기할 수 있지만, 고장의 영향은 각 손실된 세그먼트가 다른 데이터 파일에 속하면 크게 줄어들 수 있다. 이러한 세그먼트 저장 분산 전략을 사용하면, 다중 데이터 센터 시스템들은 집합적으로 손실된 세그먼트들을 복구하기 위해 병렬로 데이터 복구 프로세스들을 개시할 수 있고, 그렇게 함으로써 복구 연산들이 수행되는 동안 복구를 가속화하고 저장 시스템이 손상되고 작동적으로 저하된 모드에서 동작하는 시간 간격을 줄인다.
본 발명의 실시 예들에 있어서, 이레이저 코드 데이터 보호 및 복구 방법 내의 N개의 파일 데이터 세그먼트들은 N개의 파일 데이터 세그먼트들 전체에 걸쳐 복수의 “스트라이프(stripe)”로서 정리된다. 각 스트라이프는 각 파일 데이터 세그먼트 내의 데이터 유닛들의 균일한 카운트(count) 및 각 관련 복구 데이터 세그먼트 내의 데이터 유닛들의 해당 카운트를 포함한다. 주어진 스트라이프 내에서 파일 데이터 세그먼트 내의 다수의 데이터 유닛들은 스트라이프의 다른 파일 데이터 세그먼트들 및 복구 데이터 세그먼트들 내의 다수의 데이터 유닛들과 함께 공통 오프셋(offset) 값을 공유한다.
논의를 단순화하기 위해, T는 데이터 파일에 대한 이레이저 코드 데이터 보호 및 복구 방법의 스트라이프들의 수를 지정한다. T개의 스트라이프들은 Stripe[0], Stripe[1], …, Stripe[T-2], 및 Stripe[T-1]로 지정될 것이다. 각 데이터 파일 세그먼트 또는 에러 복구 데이터 세그먼트는 K개의 데이터 유닛들을 가지므로, 각 스트라이프는 각 파일 데이터 세그먼트 및 관련 에러 데이터 세그먼트로부터 K/T개의 데이터 유닛들을 갖는다. 간결성을 위해, S는 각 파일 데이터 세그먼트 및 관련 에러 데이터 세그먼트로부터의 데이터 유닛들의 수이다(S=K/T). S=K/T이므로, T=K/S.
주어진 스트라이프에 대해, N개의 세그먼트들은 파일 데이터를 저장하고 M개의 세그먼트들은 스트라이프 내에서 연관된 파일 데이터를 보호하기 위해 사용될 수 있는 “이레이저 코드 데이터 유닛들”로 알려진 에러 복구 데이터를 저장한다.
전술한 바와 같이, 데이터 파일에 대한 이레이저 코드 데이터 보호 및 복구 방법에서, 스트라이프들의 수인 T는 하나의 파일 데이터 세그먼트 내 데이터 유닛들의 수인 K가 스트라이프 내 개별 파일 데이터 세그먼트로부터 파일 데이터 세그먼트 데이터 유닛들의 수인 S로 나뉘어진 값과 동일하다. 예를 들어, 파일 데이터 세그먼트들이 100,000개의 데이터 유닛들을 갖고 그리고 각 세그먼트로부터 스트라이프들이 각각 10개의 데이터 유닛들을 포함하면, 10,000개(100,000/10)의 스트라이프들이 있다.
이전에 논의된 바와 같이, 데이터 파일의 콘텐츠(contents)는 상호 배타적이고 전체 포괄적인 겹치지 않으며 동일한 크기인 N개의 세그먼트들로 나눠질 수 있다. 또한, 이레이저 코드 데이터 보호 및 복구 방법은 다수의 M개 관련 에러 복구 데이터 세그먼트들을 생성한다. 예시적인 목적들 그리고 개념 논의들을 간단히 하기 위해, 이 설명은 데이터 유닛 크기가 바이트(byte, 8비트)고 M의 값은 2로 가정한다. 당업자는 본 발명의 범위를 벗어나지 않고 데이터 유닛 크기가 4비트 또는 16비트, 또는 다른 것들과 같은 다른 값을 가질 수도 있고, M은 1, 2, 또는 2보다 큰 수와 동일할 수 있음을 인식할 것이다.
이레이저 코드 데이터 보호 및 복구 방법은 파일 데이터 세그먼트 유닛들과 동일한 유닛 크기를 갖는 관련 에러 복구 데이터 세그먼트들을 생성하기 위해 데이터 파일 세그먼트 데이터 유닛들을 이용한다. 이레이저 코드 방법들은 많은 종류의 이레이저 코드 데이터 유닛들을 생성할 수 있지만, 본 설명에서, “P 코드 데이터 유닛들” 및 “Q 코드 데이터 유닛들”로 언급되는 두 종류의 이레이저 코드 데이터 유닛들이 있고, 그들은 집합적으로 오류 복구 데이터의 두 세그먼트들을 포함한다. 에러 복구 데이터 세그먼트들 내에 구성된 데이터 유닛들의 크기는 데이터 파일 세그먼트들 내의 데이터 유닛들의 크기와 같기 때문에, 각 P 코드 데이터 유닛 및 Q 코드 데이터 유닛의 크기는 8비트 이다.
임의의 “N+M” 이레이저 코드 데이터 보호 및 복구 방법에서, P 코드 데이터 유닛들은 주어진 스트라이프 내의 N개 데이터 파일 세그먼트들 각각 내에서 동일한 바이트 오프셋을 공유하는 파일 데이터의 N개 데이터 유닛들의 이진 배타적 논리합으로서, 파일 데이터 세그먼트 당 1 바이트로 계산된다. 이런 이유로, 각 데이터 파일 세그먼트는 해당 바이트 오프셋의 P 코드 데이터 유닛에 1 바이트를 제공한다.
해당 Q 코드 데이터 유닛은 P 코드 데이터 유닛들을 계산하는데 사용된 파일 데이터의 N개 데이터 유닛들의 동일한 집합으로부터 계산된다. Q 코드 데이터 유닛은 N개 곱들의 배타적 논리합으로서 계산되고, 각 곱은 파일 데이터의 해당 바이트와 세그먼트 수와 연관된 일정한 값의 계수를 곱함으로써 계산된다. 8비트 데이터 유닛들에 대해, 이러한 곱셈 연산들은 GF(2) 이상의 확대체로서 갈루아체(Galois field) GF(2^8)에서 수행된다.
당업자는 2개의 P 및 Q 코드들을 계산하기 위해 사용되는 1개의 P 코드 데이터 유닛, 1개의 Q 코드 데이터 유닛, 및 N개의 데이터 유닛들과 함께, N+2 바이트 값들에서 임의의 2개의 데이터 유닛들은 손실될 수 있고(이레이저될 수 있고) 그럼에도 불구하고 2개의 데이터 유닛들은 복구될 수 있음을 인식할 것이다. 결과적으로, 파일 데이터 세그먼트들 및 관련 에러 복구 데이터 세그먼트들은 상이한 저장 장치들에 모두 저장되고 이레이저 코드 데이터 보호 및 복구 데이터 뱅크 배열 내 그러한 저장 장치들의 임의의 2개가 고장 나면, 이레이저 코드 데이터 보호 및 복구 배열은 파일 데이터의 손실 없이 손상된 모드에서 연산할 수 있다.
또한, 대체 드라이브들은 복구 연산 모드 동안 복구된 세그먼트 데이터로 대체 드라이브들을 채우기 위해 이레이저 코드 데이터 보호 및 복구 방법에 의해 접근 가능한 데이터 뱅크들 내에서 설치될 수 있다. 당업자는 본 발명의 범위를 벗어나지 않고 2개보다 많은 관련 에러 복구 데이터 세그먼트들이 유리하게 구성될 수 있음을 인식할 것이다.
이레이저 코드 데이터 보호 및 복구 보호된 디스크 뱅크는 파일 데이터의 손실 없이 손상된 또는 복구 모드에서 계속 연산할 수 있지만, 연산을 계속하는데 필요한 관련 계산 부하는 단일 호스트 프로세서에 대해 커다란 부담이 될 수 있다. 기존의 특정 데이터 보호 및 복구 시나리오들에서, 하나 또는 소수의 호스트들에 의해 제어되는 손상된 이레이저 코드 데이터 보호 및 복구 저장 장치 배열에 접근하는 유저 어플리케이션들의 앞으로의 진행은 손상된 저장 장치 배열 데이터에 접근하는데 필요한 복잡한 이레이저 코드 데이터 보호 및 복구 계산들에 의해 거의 완전히 방해 받을 수 있다.
본 발명의 실시 예들은 디스크들의 배열에 제한되지 않는다. 대신에, 이하의 설명은 좀 더 일반적이고, 그리고 본 발명의 실시 예들이 종래의 디스크 배열들뿐만 아니라, 솔리드 스테이트 또는 다른 유형의 메모리와 같은 임의의 유형의 데이터 저장 장치와 함께 동작할 수 있는 것을 명확하게 하기 위한 “세그먼트 배열(114)” 참조를 사용한다.
도 1은 본 발명의 실시 예에 따른, 이레이저 코드 데이터 보호 및 복구 세그먼트 배열로서 구성된 독립적인 파일 데이터 세그먼트들의 집합을 도시한다.
당업자는 “스레드(thread)” 용어가 CUDA(Complete Unified Device Architecture) 제품 및 문헌과 함께 사용될 수 있고 Khronos Group에 의해 개발된 OpenCL(Open Computing Language)이 “작업 항목(work item)”으로 불리는 유사한 개념을 갖는 것을 인식할 것이다. OpenCL은 호스트 시스템의 CPUs(central processing units), GPUs(graphics processing units), DSPs(digital signal processors), FPGAs(field-programmable gate arrays) 및 다른 프로세서들 또는 하드웨어 가속기들(hardware accelerators)로 구성되는 여러 다른 종류들로 이뤄진 플랫폼들에 걸쳐 실행되는 프로그램들을 작성하기 위한 프레임 워크(frame work)이다. 따라서, 실시 예로서 그래픽 처리 카드(graphics processing card)를 사용하는 것은 본 발명을 구현하기 위한 많은 가능한 방법들 중 하나이고 본 발명의 범위를 제한하는 것으로 간주되지 않는다.
본 명세서에서 설명된 병렬 프로세서들은 California의 Santa Clara의 Nvidia Corp. 에 의해 개발된 CUDA 프로그래밍을 이용하여, 또는 2013, David B. Kirk, Wen-mei W. Hwu, Morgan Kaufmann, Second Edition, “Programming Massively Parallel Processors, A Hands-on Approach” 프로그래밍 서적들(전체 내용은 본 명세서에 참조로 포함된다)을 참조하여 프로그램될 수 있다.
이레이저 코드 데이터 보호 및 복구 계산들
도 1은 본 발명의 실시 예에 따라, 이레이저 코드 데이터 보호 및 복구 세그먼트 배열(410)로서 사용하기 위해 구성된 파일 데이터의 세그먼트들의 집합을 도시한다. 전술한 바와 같이, 세그먼트 배열(410)은 디스크 배열로서 설명될 수 있는 것의 실시 예일 수 있다. 종래 기술과 달리, 세그먼트 배열(410)은 디스크들의 배열로 제한되지 않으며, 그러나, 대신 DRAM 및 영구 메모리 자원들의 메모리 주소 범위들을 포함하는 임의의 유형의 데이터 저장 장치 및 장치들을 지칭할 수 있다. 도 1의 예시적인 이레이저 코드 데이터 보호 및 복구 세그먼트 배열(410)은 세그먼트[0]~세그먼트[N-1]로 분류된 N개의 세그먼트들(412(0)~412(N-1), 을 포함한다. 각 세그먼트(412)는 임의의 수인 총 K개의 데이터 유닛들을 포함할 수 있고, 세그먼트(412) 내 각 데이터 유닛에 일반적으로 0부터 시작하는, 순차적으로 증가하는 오프셋 값이 할당된다.
세그먼트들(412) 내 데이터 유닛들은 스트라이프들로서 지칭되는 집합들로 구성된다. 각 스트라이프(440)는 전형적으로 각각의 세그먼트(412) 내에서 동일한 오프셋 값을 갖는 것을 특징으로 하는, 각 세그먼트 내에서 S개의 데이터 유닛들의 집합을 포함한다. 예를 들어, 데이터 유닛들(420(0)~420(N-1))은 오프셋 값이 0인 스트라이프(440(0))를 포함하고, 데이터 유닛들(424(0)~424(N-1))은 파일 데이터 오프셋 값이 S*(N-1)인 스트라이프(440(T-1))를 포함한다.
스트라이프들(440(0)~440(N-1))은 스트라이프들의 첫 번째 그룹을 포함한다. 스트라이프들의 추가적인 그룹들은 스트라이프(440(N-1)) 다음에 할당될 수 있고, 예를 들어 오프셋 값이 S*N인 세그먼트에서 시작한다. 스트라이프들의 그룹들은 스트라이프들(440(0)~440(N-1))에 대하여 반복적인 패턴들로 할당될 수 있다. 각 세그먼트는 데이터 유닛[0]부터 데이터 유닛[k-1]까지 분류된 K개 데이터 유닛들의 집합을 포함한다. 세그먼트 내의 각 데이터 유닛은 특정 데이터 유닛 오프셋에서 저장된다. 데이터 유닛[k-1]은 오프셋이 k-1로 세그먼트 내에 저장되는 반면 데이터 유닛[0]은 오프셋이 0인 바이트로 주어진 세그먼트 내에 저장된다.
특정 실시 예들에 있어서, k는 2의 거듭제곱이고 각 세그먼트는 2개 데이터 유닛들의 거듭제곱의 적분(integral power of two Data Units)을 포함한다. 이하, 데이터 유닛은 바이트(8비트)로 가정하고 계산들은 GF(2) 이상의 확대체로서 갈루아체 GF(2^8)에서 수행된다. 당업자는 다른 데이터 유닛 크기들 및 갈루아체들이 가능하고 가정은 많은 가능한 것들 중 하나일 뿐이고 본 발명의 범위를 제한하는 것으로 간주되지 않음을 인식할 것이다.
각 스트라이프(440) 내에서, N-2개 세그먼트들(420(0)~420(N-3))은 파일 데이터를 저장한다. 세그먼트(420(N-2))는 P 이레이저 코드 데이터를 저장하고 세그먼트(420(N-1))는 Q 이레이저 코드 데이터를 저장한다. 후술할 바와 같이, P 이레이저 코드 데이터 및 Q 이레이저 코드 데이터는 스트라이프 내의 임의의 세그먼트 파일 데이터가 업데이트될 때 업데이트된다(쓰기 업데이트들).
P 이레이저 코드 세그먼트 데이터는 스트라이프 내에 연관된 파일 데이터 세그먼트들에 대한 P 이레이저 코드 데이터를 저장하기 위해 할당된 K개의 데이터 유닛들을 포함한다. 이러한 데이터 유닛들은 P 이레이저 코드 데이터 유닛들로 지칭된다.
Q 이레이저 코드 데이터의 세그먼트는 스트라이프 내 연관된 파일 데이터 세그먼트들에 대한 Q 이레이저 코드 데이터를 저장하기 위해 할당된 K개의 데이터 유닛들을 포함한다. 이러한 데이터 유닛들은 Q 이레이저 코드 데이터 유닛들로 지칭된다.
각 스트라이프 내에서, P 및 Q 이레이저 코드 데이터 유닛들은 주어진 스트라이프 내 각 세그먼트를 통해 주어진 공통 바이트 오프셋에 대해 계산된다. 예를 들어, 데이터 유닛 크기가 바이트(8비트)라 가정하면, 스트라이프 0에서, 파일 데이터 세그먼트(420(0))부터 파일 데이터 세그먼트(420(N-3)))까지의 바이트[0]가 P 세그먼트(420(N-2))의 바이트[0]에 저장된 1개의 P 이레이저 코드 바이트 및 Q 세그먼트(420(N-1))의 바이트[0]에 저장된 1개의 Q 이레이저 코드 바이트를 계산하기 위해 사용된다.
유사하게, P 및 Q 이레이저 코드 데이터 유닛들은 0부터 K까지 각 바이트 오프셋에 대해 계산될 수 있다. 파일 데이터가 스트라이프 내 임의의 파일 데이터 세그먼트에서 업데이트될 때마다, 해당 P 및 Q 이레이저 코드 데이터 유닛들의 새로운 집합은 계산되어야 하고 그것들 각각의 세그먼트들에 저장되어야 한다. 객체 저장 시스템들은 전체 객체를 새로운 객체 형태(version)로 교체하여 완전히 새로운 P 세그먼트(420(N-2)) 및 Q 세그먼트(420(N-1))을 재계산할 수 있다.
1개의 P 이레이저 코드 바이트를 생성하기 위해, 각 세그먼트(412) 내 특정 바이트 오프셋으로부터 파일 데이터의 데이터 유닛들은 XOR 합산 연산을 이용하여 누적된다. 수학식 1은 세그먼트 오프셋 j를 갖는 세그먼트 내의 P 이레이저 코드 바이트인 Pj를 어떻게 계산하는지를 설명한다. 수학식 1에서, 변수 “i"는 N-2보다 작은 세그먼트(420[i])에 대한 파일 데이터 세그먼트(420)의 인덱스 값을 나타내고, “j”는 K보다 작은 세그먼트 오프셋을 나타내고, 그리고 “d”는 세그먼트(420)의 오프셋 j와 함께 세그먼트(420[i]) 내 바이트 데이터 값을 나타낸다.
Figure 112017059254715-pat00001
수학식 1로부터, P 이레이저 코드 데이터를 저장하기 위해 할당된 P 세그먼트(412(N-2)) 내의 각 P 이레이저 코드 데이터 유닛은 해당 파일 데이터 코드 데이터 유닛들을 통해 XOR 합산 연산을 수행함으로써 계산되어야 한다.
1개의 Q 이레이저 코드 바이트를 생성하기 위해, 각 데이터 파일 세그먼트(412)로부터 특정 바이트 오프셋으로부터 데이터 유닛들은 우선 상수 Ai와 곱해진다. 이러한 8비트 데이터 유닛들 곱셈 연산들은 GF(2) 이상의 확대체로서 갈루아체 GF(2^8)에서 수행된다. 결과물은 XOR 합산 연산을 이용하여 누적된 결과에 추가된다.
당업자는 후속 데이터 복구 연산 시도들에 데이터 복구 연산들을 위해 독립적인 선형 방정식들이 제공되어야 하는 것을 보장하기 위해 상수 Ai가 신중하게 선택되어야 하는 것을 인식할 것이다. 또한, Ai가 곱셈 계산을 제거하기 때문에 Ai는 1의 값을 갖는 이점이 있다.
수학식 2는 세그먼트 오프셋 j를 갖는 Q 세그먼트(412(N-1)) 내의 Q 이레이저 코드 바이트인 Qj가 어떻게 계산되어야 하는지를 설명한다. 수학식 1에서와 같이, 수학식 2에서, 변수 “i"는 파일 데이터 세그먼트(412(i))의 수를 나타내고, “j”는 파일 데이터 세그먼트(412) 내의 세그먼트 오프셋을 나타내고, 그리고 “d”는 파일 데이터 세그먼트 i 내 세그먼트 오프셋 j와 함께 바이트 데이터 값을 나타낸다.
Figure 112017059254715-pat00002
8비트 데이터 유닛들에 대해, 수학식 2의 곱셈 연산자는 GF(2) 이상의 확대체로서 갈루아체 GF(2^8)에서 발생한다. 이 확대는 잘 알려진 다항식 0x011D가 이레이저 코드 데이터 보호 및 복구 방법들에서 통상적으로 사용되지만, 16개의 잘 알려진 원시 다항식들(primitive polynomials)의 집합으로부터 임의의 원시 다항식을 이용하여 형성될 수 있다.
정상적인 이레이저 코드 데이터 보호 및 복구 연산들 동안, 이하에서 세그먼트 x로 표시되는 제 1 세그먼트(410)는 사용 가능하지 않고 복구가 필요할 수 있다. 또한, 이하에서 세그먼트 y로 표시되는 제 2 세그먼트(420)도 또한 사용 가능하지 않고 복구가 필요할 수 있다.
하나의 실질적인 가정은 주어진 세그먼트가 사용 가능하지 않으면, 그 고장은 호스트 시스템에 알려져 있다는 것이다. 이런 이유로, 호스트 시스템은 x 및 y의 값들을 안다.
주어진 x 및 y 저장 장치 고장들에 대해, 파일 데이터의 임의의 조합, Q 이레이저 코드 데이터, 또는 P 이레이저 코드 데이터는 어느 세그먼트(410)가 접근되는지에 따라 고장난 드라이브 상에 존재할 수 있다. 각 손실 시나리오는 특정 복구 전략을 사용한다.
하나의 저장 장치 고장을 수반하는 시나리오에서, 주어진 스트라이프 내 하나의 세그먼트로부터 세그먼트 데이터는 “이레이저 된다(erased)”. 이레이저된 세그먼트는 P 이레이저 코드 데이터, Q 이레이저 코드 데이터, 또는 파일 데이터를 저장할 수 있다.
이레이저된 P 이레이저 코드 데이터 또는 Q 이레이저 코드 데이터를 수반하는 하나의 저장 장치 고장 시나리오에서, 해당 데이터는 접근 가능한 파일 데이터로부터 재계산될 수 있다. 이레이저된 파일 데이터를 수반하는 하나의 저장 장치 고장 시나리오에서, 남아있는, 사용 가능한 파일 데이터 세그먼트 및 P 이레이저 코드 데이터 내에서 값들을 취하는 XOR 합산 연산은 하나의 고장난 드라이브와 연관된 이레이저된 파일 데이터를 재구성하는데 사용될 수 있다.
P 이레이저 코드 데이터 세그먼트 및 Q 이레이저 코드 데이터 세그먼트 모두를 수반하는 2개 드라이브 고장 시나리오에서, 이레이저된 P 이레이저 코드 데이터 세그먼트 데이터 및 Q 이레이저 코드 세그먼트 데이터는 접근 가능한 파일 데이터로부터 재계산될 수 있다. 1개의 파일 데이터 세그먼트 및 Q 이레이저 코드 데이터 세그먼트를 수반하는 2개 드라이브 고장 시나리오에서, 남아있는, 접근 가능한 파일 데이터 세그먼트들 및 P 이레이저 코드 데이터 세그먼트는 고장난 Q 이레이저 코드 데이터의 재계산을 허용하는, 이레이저된 파일 데이터를 재계산하는데 먼저 사용될 수 있다.
2개의 파일 데이터 세그먼트들의 이레이저를 야기하는 (저장 장치들 x 및 y 상의) 2개의 동시의 드라이브 고장들을 수반하는 시나리오에서, 남아있는, 접근 가능한 파일 데이터 세그먼트들, P 이레이저 코드 데이터, 및 Q 이레이저 코드 데이터는 2개의 이레이저된 파일 데이터 세그먼트들을 재구성하는데 사용될 수 있다.
수학식 3 내지 수학식 12는 1개 해당 P 이레이저 코드 값 및 1개 해당 Q 이레이저 코드 값을 이용하여 이레이저된 파일 데이터의 2개 값들(이레이저된 세그먼트 당 1개의 이레이저된 값)을 재구성하는데 사용될 수 있는 단계들을 상세히 설명한다. 이레이저된 파일 데이터 세그먼트들 내의 각 파일 데이터 값은 이러한 단계들을 이용하여 재구성될 수 있다.
수학식 3에서, 남아있는, 접근 가능한 파일 데이터 값들의 합인 Pxy는, 그러한 저장 장치들로부터의 데이터는 사용 가능하지 않으므로 저장 장치들 x 및 y가 제외되는 것을 제외하고, P 이레이저 코드 값을 생성하기 위해 사용되는 합산 연산과 동등한 합산 연산을 이용하여 고장 나지 않은 저장 장치들로부터 파일 데이터의 실행 가능한 값들(di)의 집합을 통해 계산된다.
Figure 112017059254715-pat00003
아래의, 수학식 4에서 나타낸 바와 같이, Pxy의 합 및 접근 가능한 P 이레이저 코드 값(P)은 2개의 이레이저된 데이터 값들, dx 및 dy의 합과 동일하다.
Figure 112017059254715-pat00004
수학식 5에서, 실행 가능한 데이터 값들의 합인 Qxy는 고장 나지 않은 저장 장치들에 저장된 사용 가능한 파일 데이터 세그먼트들로부터의 파일 데이터의 실행 가능한 데이터 값들(di)의 집합을 통해 계산된다. 계산은 고장 나거나 또는 그렇지 않으면 사용 가능하지 않은 저장 장치들 x 및 y에 저장된 파일 데이터 세그먼트들이 제외된다는 것을 제외하고, Q 이레이저 코드 값을 생성하기 위해 사용되는 수학식 2의 합산 연산과 동등한 합산 연산이다.
Figure 112017059254715-pat00005
아래의 수학식 6에서 나타낸 바와 같이, Qxy 및 Q 이레이저 코드 값의 합은 각 이레이저된 데이터 값에 각각의 Ai를 곱한 결과들의 합과 동일하다.
Figure 112017059254715-pat00006
Figure 112017059254715-pat00007
로 나타낸다. 이 표기법으로, 수학식 4 및 수학식 6은 아래의 수학식 7 및 수학식 8로 다시 쓰여진다.
Figure 112017059254715-pat00008
Figure 112017059254715-pat00009
수학식 7의 양변에 Ax를 곱하면, 아래의 수학식 9가 산출된다.
Figure 112017059254715-pat00010
배타적 논리합 연산자를 사용하여 수학식 9를 수학식 7에 더하면, 아래의 수학식 10이 산출된다.
Figure 112017059254715-pat00011
당업자는 수학식 11을 산출하기 위해, 아래의, dy는 수학식 10으로부터 분리될 수 있음을 인식할 것이다.
Figure 112017059254715-pat00012
Ax, Ay, pxy, 및 qxy 모두는 알려진 값들을 가지므로, 표현
Figure 112017059254715-pat00013
은 dy의 값을 얻기 위해 평가될 수 있다. 당업자는 0은 곱셈의 역원을 가지지 않기 때문에
Figure 112017059254715-pat00014
의 값은 0이 아니어야 함을 인식할 것이다. 독립적인 선형 방정식 평가들을 이용하여 관련 에러 복구 데이터 세그먼트들을 생성하기 전에 Ai 계수들의 집합이 올바르게 선택되면
Figure 112017059254715-pat00015
의 값은 0이 아닐 것이다.
수학식 11에서 분리된 dy를 수학식 7의 양측에 더하는 것은 아래에서 수학식 12에 나타난 것과 같이 dx를 분리한다.
Figure 112017059254715-pat00016
pxy 및 dy가 이제 알려진 값들을 갖기 때문에, 표현
Figure 112017059254715-pat00017
은 dx 값을 얻기 위해 평가될 수 있다.
이 점에서, (고장난 저장 장치들 x 및 y 상의) 이레이저된 파일 데이터의 두 값들은 복구되고 과정은 다른 누락된 파일 데이터 값들을 복구하기 위해 반복된다.
중요하게, 모든 수학적 계산들은 다음과 같이 계산된 값들 pxy, qxy, 및 사전에 계산된 표들을 이용하여 수행될 수 있다.
상수
Figure 112017059254715-pat00018
를 수학식 11에 대입하면 아래의 수학식 13이 된다.
Figure 112017059254715-pat00019
상수
Figure 112017059254715-pat00020
를 수학식 13에 대입하면 아래의 수학식 14가 된다.
Figure 112017059254715-pat00021
수학식 14에서, Vxy 및 Wxy 모두는 파일 데이터 세그먼트 데이터 유닛들의 집합을 복원하기 위해 곱셈 연산들에서 반복적으로 사용되는 상수 값들이다. 이러한 곱셈 연산들은 계산 집약적인 것이 중요하다.
Vxy 및 Wxy 모두 일정한 값들이기 때문에, 그것들은 데이터 복구 연산들이 시작하기 전에 그래픽 처리 장치와 연결된 호스트에 의해 일단 계산될 수 있고 그래픽 처리 유닛으로 전달될 수 있다. 이 사전 계산은 Vxy 및 Wxy를 결정하기 위한 계산들을 수행하는 것으로부터 스레드 프로그래밍을 완화하고, 그렇게 함으로써 연산들을 가속화한다. 이것은 GF(2) 이상의 확대체로서 갈루아체에서 수행되는 2개 곱셈 연산들의 결과들을 배타적 논리합하여 그것을 감소시켜 dy 복구 연산을 단순화한다.
데이터 복구 연산들을 더 가속하기 위해, 데이터 복구 연산들이 시작하기 전에, 그래픽 처리 유닛과 연결되는 호스트는 V[] 및 W[]로 지정된 2개의 완전한 1차원 곱셈 표들을 그래픽 처리 유닛에 전달할 수 있다. V[]는 모든 가능한 데이터 유닛 값들 곱하기 Vxy의 갈루아체 GF(2^8) 곱셈들 값들을 포함할 것이다. W[]는 모든 가능한 데이터 유닛 값들 곱하기 Wxy의 갈루아체 GF(2^8) 곱셈들 값들을 포함할 것이다.
예를 들어, 데이터 유닛들의 크기가 4비트 인 경우, V[3]은
Figure 112017059254715-pat00022
의 GF(2) 이상의 확대체로서 갈루아체 GF(2^4) 곱셈 결과 값을 포함할 것이다. 유사하게, W[7]은
Figure 112017059254715-pat00023
의 GF(2) 이상의 확대체로서 갈루아체 GF(2^4) 곱셈 결과 값을 포함할 것이다.
4비트 데이터 유닛들에서, 각 1차원 표는 16개 엔트리들(entries)을 가질 것이다. 엔트리 값들 V[0] 및 W[0]은 항상 0일 것이다. 또한, 구성 요소 V[1]에 대한 엔트리 값은 항상 Vxy일 것이고 구성 요소 W[1]에 대한 엔트리 값은 항상 Wxy일 것이다. 메모리 공간을 절약하기 위해, V[0] 및 W[0] 표 엔트리들은 정의에 의해 그 값들이 항상 0이기 때문에 제거될 수 있다. 유사하게, V[1] 및 W[1]에 대한 표 엔트리들은 그 값들이 항상 Vxy 및 Wxy이기 때문에 제거될 수 있다. 따라서 실시 예는 복구를 수행하는 스레드들은 그들의 부재를 인식하고 이에 따라 표 검색 연산 인덱스 값들을 조정해야 하지만, 메모리 공간을 절약하기 위해 그 표 엔트리들을 생략할 수 있다. 또한, 4비트 데이터 유닛들과 함께, 각 구성 요소는 바이트(8비트)의 절반을 사용한다. 따라서 4비트 값들을 바이트들로 패킹(packing)하면 표의 크기가 절반으로 줄어들어, 공간을 더 절약한다.
그러나, V[0] 및 W[0] 표 엔트리들을 생략하거나 또는 4비트 값들을 패킹하는 것에 의해 얻어진 임의의 공간 절약 이익들은 스레드 효율의 비용들일 수 있다. 예를 들어, V[0] 및 W[0] 표 엔트리들을 생략하는 것에 의해, 스레드 처리는 공간이 감소된 표 구성을 보상하기 위해 Ai 계수들이 0 또는 1 값을 갖는지를 지속적으로 테스트해야 한다.
그래픽 처리 유닛 아키텍처(architecture)에 따라, V[0] 및 W[0] 표 엔트리들을 생략하는 것은 많은 병렬 실행 스레드들은 0 또는 1인 데이터 값들을 가지지 않을 수 있으므로 스레드 경로 발산 성능 패널티들을 야기할 수 있다. 그러므로 그것들은 SIMT 동기화를 유지하기 위해 0 또는 1 데이터 값들을 갖는 스레드들이 그것들의 연산들을 수행하기를 기다리기 위해 연산들을 중지할 수 있다.
그러나, V[] 및 W[] 표들을 갖는 것은 복구 연산이 dy를 복구하기 위해 V[] 및 W[]로부터 값을 추출한 다음 추출된 2개의 값들을 배타적 논리합하는 2개의 작은 표들 각각에서 이제 하나의 1차원 표 검색 연산으로 감소되기 때문에 수학식 14에서 dy를 복구하는데 필요한 계산들을 크게 단순화한다.
세그먼트 배열(410)에 대한 이레이저 코드 데이터 보호 및 복구 연산들의 정상적인 연산에 앞서, 1차원의, 사전에 계산된 2개의 표들 각각은 계산되고 이레이저 코드 데이터 보호 및 복구 계산들을 맡고 있는 프로세서에 접근 가능한 메모리에 저장되어야 한다. GF(2) 곱셈 결과 값 이상의 확대체로서 갈루아체 GF(2^4)의 2개의 4비트 데이터 유닛 피승수들의 곱셈 결과를 계산하는 방법은 다음과 같다.
곱해지는 2개 4비트 값들이 0x0D 및 0x0B라고 가정한다. 이 두 값들을 비트 패턴들로 표현하면, 이 값들은 각각 1101b 및 1011b이다. 곱하고 중간 결과들을 배타적 논리합으로 연산하면 1111111b의 값이 된다:
Figure 112017059254715-pat00024
이 유형의 곱셈 연산은 비트 단위 모듈로 2 곱셈(bit-wise modulo 2 multiplication)으로서 알려져 있고 일반적으로 4개 이상의 유효 비트들을 갖는 값들을 생성한다. 당업자는 4개 이상의 유효 비트들을 갖는 값들이 갈루아체 GF(2^4)에서 동일한 4 비트 값들로 먼저 변환된다는 것을 인식할 것이다.
당업자는 갈루아체 GF(2^4)와 연관된 2개의 원시 다항식들 있음을 또한 인식한다. 그것들은 0x13 및 0x19 숫자들로 각각 표현되는 x4+x+1 및 x4+x3+1이다.
원시 다항식 표현으로서 0x13 값을 선택하면, 0x0D 및 0x0b의 곱을 얻기 위해 비트 단위 모듈로 2 나누기(bit-wise modulo two division)를 이용하여 1111111b 모듈러스(modulus) 0x13의 값을 계산한다.
0x13이 10011b의 이진 표현을 갖는 것에 유의하고, 비트 단위 모듈로 2 나누기를 수행하기 위해 중간 나누기 결과들을 결합하여 배타적 논리합을 사용하는 것은 아래의 값들을 생성한다:
Figure 112017059254715-pat00025
이런 이유로, 원시 다항식 표현 값을 이용한 4비트 데이터 유닛들 0x0D 및 0x0B의 곱은, 4비트 값이고 갈루아체 GF(2^4)의 일원인, 0110b 또는 0x06이다. 0x19의 다른 원시 다항식 표현 값을 사용했다면, 다른 값이 생성되었을 것이다.
당업자는 이레이저 코드 보호 및 복구 방법은 관련 에러 복구 데이터 세그먼트들을 계산하고 고장난 데이터 값들을 복구하기 위해 일관되게 동일한 원시 다항식 표현 값을 사용해야 한다는 것을 인식할 것이다.
이 전술한 방법을 사용하는 것은 호스트 프로세서들이 앞서 언급한 2개 1차원 검색 표들을 구축하게 할 수 있다. 데이터 복구 수학적 과정은 실제로 행렬 반전 과정이므로 유사한 곱셈 계산 방법들도 또한 다른 데이터 유닛 크기들을 지원하고 그리고 가능할 수 있다. Ai 계수들을 신중하게 선택하면 행렬은 항상 반전하는 것을 보장한다.
당업자는 8비트 데이터 유닛들이 모듈러스 연산자 값으로서 8차 원시 다항식의 이진 표현을 사용할 것이라는 것을 인식할 것이다. 그러므로, 제안된 4 비트 데이터 유닛 예시는 본 발명의 범위를 제한하는 것으로 간주되지 않으며 다른 크기들을 갖는 데이터 유닛들에 대한 그러한 방법들은 본 발명의 범위 내에 있다.
마지막으로, “X+Y중 X” 구성을 보호하는 이레이저 코드 보호 및 복구 방법으로, 임의의 Y 데이터 세그먼트들이 사용 가능하지 않게 될 수 있다. 전술한 방법들은 또한 Y 또는 Y보다 적은 세그먼트들(412)이 손실된 때 데이터를 복구하는데 효과적이다. 복구 과정은 덧셈 연산자에 대한 배타적 논리합 연산자를 이용하고 GF(2) 이상의 확대체로서 갈루아체 GF(2^8)에서 곱셈 연산들을 수행하여, 변수들로서 손실된 값들을 갖는 선형 방정식들의 집합을 간단하게 푼다. 이러한 연산들에서, 당업자는 그래픽 처리 유닛이 이러한 기술들을 병렬로 수행할 수 있다는 것을 인식할 것이다.
다른 실시 예에 있어서, 그래픽 처리 유닛을 갖는 호스트 시스템은 그래픽 처리 유닛이 그 값을 이용하여 곱셈 결과들을 계산하게 할 수 있는 데이터 값에 대한 2개의 1차원 표들을 사전에 계산할 수 있고 값 역수들(value inverses)을 계산하고 그것들을 연산들 내 피승수들로 이용하는 것에 의해 그 값을 이용하여 나눗셈 연산들을 수행할 수 있다.
이 실시 예에서, 하나의 표는 거듭제곱들 표(powers table)이고, 다른 표는 로그 표(logarithm table)이다. 설명을 간단히 하기 위해 데이터 유닛 크기는 3 비트로 가정한다.
당업자는 3 비트 갈루아체 GF(2^3)는 2개 원시 다항식들, 즉, x3+x+1 및 x3+x2+1을 갖는 것을 인식한다. 각 원시 다항식 표현 값들은 0x0B 및 0x0D 이다. 예시로써, 원시 다항식으로 x3+x+1을 선택한다.
α를 x3+x+1의 근으로 하면, α3+α+1=0 이다. 그러므로, 수학식 15는 아래와 같다.
Figure 112017059254715-pat00026
α의 거듭제곱들을 사이클링(cycling) 하고, 수학식 15로부터, α3을 α+1로 대체하면 다음과 같이 주어진다:
α0 = 1
α1 = α
α2 = α2
α3 = α3 = α + 1 (수학식 15로부터)
α4 = α2 + α
α5 = α3 + α2 = (α + 1) + α2 = α2 + α + 1 (수학식 15로부터 대체)
α6 = α3 + α2 + α = (α + 1) + α2 + α = α2 + 1 (수학식 15로부터 대체)
α7 = α3 + α = (α + 1) + α = 1 (수학식 15로부터 대체)
유사하게,
α8 = (α7)(α) = (1)(α) = α
α9 = (α7)(α2) = (1)(α2) = α2
α10 = (α7)(α3) = (1)(α3) = α + 1
α11 = (α7)(α4) = (1)(α4) = α2 + α
아래와 같이 제 1 거듭제곱들 표(표 1)를 구성할 수 있다.
α 거듭제곱 값 다항식 결과 다항식 결과 숫자 표현
0 1 0x01
1 α 0x02
2 α2 0x04
3 α + 1 0x03
4 α2 + α 0x06
5 α2 + α + 1 0x07
6 α2 + 1 0x05
제 1 거듭제곱들 표를 검색 표(lookup table)로 사용하면, α5 가 0x07인 것을 빠르게 결정할 수 있다. 즉, 다항식 결과 숫자 표현 열의 엔트리 5는 0x07 값을 갖는다. 이 표로부터, 인덱스 값으로서 α 거듭제곱 값을 사용하는 1차원 거듭제곱들 배열을 만들어 내는 것이 가능하다.
제 1 거듭제곱들 표 값 내의 인덱스 범위는 0 이상 6 이하이다. α를 6번 거듭제곱한 후 α의 지수 값들을 반복하는 것은 0부터 6까지 범위 밖의 값들에 대해 모듈러스 7 연산(modulus 7 operation)을 사용하게 할 수 있다.
제 1 거듭제곱들 표는 α 거듭제곱 열 상에 정렬된다. 다항식 결과 숫자 표현 열을 정렬하고 열들을 재배치하면 아래의 기본 α 로그 표(표 2)가 주어진다:
다항식 결과 숫자 표현 다항식 결과 숫자 표현을 얻기 위해 필요한 α 거듭제곱
0x01 0x00
0x02 0x01
0x03 0x03
0x04 0x02
0x05 0x06
0x06 0x04
0x07 0x05
이 로그 표는 loga(0x05) = 0x06 임을 빨리 결정하게 할 수 있다. 제 1 거듭제곱들 표를 확인하면, α6 = 0x05 이므로 이것이 참임을 알 수 있다.
당업자는 갈루아체 요소들을 α의 거듭제곱들로서 표현하는 것은 그래픽 처리 유닛 스레드들이 정상적인 기본 10진수를 이용하여 피승수들을 나타내는 α의 지수 값들을 먼저 더함으로써 곱셈 결과들을 계산할 수 있게 함을 인식할 것이다. 그 다음에, 이 갈루아체 GF(2^3) 예시에 대해, 합계에 대해 기본 10 모듈러스 7 연산을 적용하면 0부터 6까지의 값 범위의 숫자 값이 생성된다. 그 다음에 이 값을 거듭제곱들 표 인덱스로서 이용하면 두 피승수들의 곱셈 결과가 결정된다.
당업자는 또한, 이 갈루아체 GF(2^3) 예시에 대해, 요소의 역수 값은 α 의 거듭제곱으로서 갈루아체 요소들을 표현하는 것에 의해, 기본 10진수를 이용하여 7에서 그 값을 빼는 것에 의해, 그리고 거듭제곱들 표의 인덱스 값으로서 계산된 차를 이용하는 것에 의해 결정되는 것을 인식할 것이다.
이 전술한 방법을 사용하는 것은 호스트 프로세서들이 2개의 1차원 거듭제곱들 및 로그 검색 표들을 만들고 그것들을 곱셈 및 나눗셈 계산들을 위해 그래픽 처리 유닛들에 전달하게 할 수 있다. 유사한 거듭제곱들 및 로그 표 생성 방법은 다른 데이터 유닛 크기들을 지지한다. 예를 들어, 8 비트 데이터 유닛들은 255 엔트리들의 1차원 거듭제곱들 및 로그 표들을 가질 것이다. 그러므로, 당업자는 갈루아체 GF(2^3), 3 비트 데이터 유닛, 예시는 간략화 및 설명의 명료성을 위한 것이고 본 발명의 범위를 제한하는 것으로 간주되지 않으며 다른 크기들의 데이터 유닛들에 대한 이러한 방법들도 본 발명의 범위 내에 있다는 것을 인식할 것이다.
본 발명의 다른 실시 예에 있어서, 스레드는 비트 단위 모듈로 2 곱셈 값의 결과를 평가할 수 있다. 위의 갈루아체 GF(2^4) 4 비트 예시에서, 0x13의 원시 다항식 표현 값을 이용하여 계산된 곱셈 값은 1111111b 이었다. 0x13 값은 선택된 원시 다항식 x4+x+1의 숫자 표현이다.
α를 이 다항식의 근으로 하면, α4+α+1=0 이다. 그러므로, 수학식 16은 아래와 같다.
Figure 112017059254715-pat00027
α의 거듭제곱들을 사이클링하고, 수학식 16으로부터, α4 을 α+1로 대체하면 다음과 같이 주어진다:
α0 = 1
α1 = α
α2 = α2
α3 = α3
α4 = α + 1 (수학식 16으로부터)
α5 = α2 + α
α6 = α3 + α2
그러므로,
Figure 112017059254715-pat00028
Figure 112017059254715-pat00029
Figure 112017059254715-pat00030
수학식 17, 수학식 18, 및 수학식 19 내의 3개 다항식들을 이진 숫자 표현으로 줄이는 것은 α4 + α + 1에 대한 0010011b, α5 + α2 + α에 대한 0100110b, 및 α6 + α3 + α2에 대한 1001100b 각각의 값들을 제공한다. 수학식 17, 수학식 18, 및 수학식 19는 3개 식들 각각의 값이 모두 0으로 같기 때문에, 다음과 같이 이들은 비트 단위 모듈로 2 곱셈 값 1111111b와 결합할 수 있다.
Figure 112017059254715-pat00031
이런 이유로, 이 접근을 이용하면 1111111b가 4 비트 값이 되는 것을 방지하는 상위 유효 비트를 제거하여 1111111b 값을 4 비트 0110b 값으로 바꾼다. 이것은 111111b를 갈루아체 GF(2^3) 내의 동일한 값으로 바꾸고 연산은 비트 단위 모듈로 2 나눗셈 과정을 이용하여 이전에 생성된 값을 생성한다.
이 갈루아체 GF(2^3) 예시에 대한 유효 비트 제거 변환 과정은 호스트 시스템이 미리 계산할 수 있고 그래픽 유닛에 전송할 수 있는 3개의 값들을 이용한다. 또는, 스레드 프로그램은 상수 값들 또는 정의들로서 컴파일된(compiled) 것들을 가질 수 있다. 어느 경우든, 스레드는 수학식 17, 수학식 18, 및 수학식 19 내 값들을 계산해야 하는 것으로부터 완화되고, 그렇게 함으로써 스레드 처리가 가속되고 스레드 성능이 올라간다.
당업자는 임의의 순서로 방법 단계들을 수행하도록 구성된 임의의 시스템이 본 발명의 범위에 있음을 이해할 것이다. 값들은 함께 결합될 수 있고 그 다음 비트 단위 모듈로 2 곱셈 결과와 결합될 수 있다. 또한, 그들은 원치 않는 상위 비트 위치들의 기여를 점진적으로 제거하기 위해 개별적으로 비트 단위 모듈로 2 곱셈 결과에 더해질 수 있다.
본 발명의 다른 실시 예에서, 데이터 유닛 크기는 그래픽 프로세서 유닛들이 사용하기에 너무 큰 거듭제곱들 및 로그 표들을 야기할 수 있다. 예를 들어, 16 비트 데이터 유닛들은 각 131,072 바이트(128KB) 크기의 곱셈 표들 또는 거듭제곱들 및 로그 표들이 필요하다. 이러한 경우에, GF(2) 이상의 확대체로서 갈루아체 곱셈 연산들을 계산하기 위해, 그래픽 처리 유닛 스레드들은 원시 다항식 숫자 연산 모듈러스 연산 다음으로 전술한 비트 단위 모듈로 2 곱셈을 직접적으로 수행할 수 있다.
X값에 X의 역수 값을 곱함으로써 나눗셈을 수행하는 것은 역수 값들을 계산하는 그래픽 처리 유닛 스레드들이 필요하다. 역수 값을 계산하기 위해, 그래픽 처리 유닛들은 보다 큰 숫자 값으로서 원시 다항식 숫자 표현, 보다 작은 숫자 값으로서 X 값, 곱셈 및 나눗셈 연산들을 위한 비트 단위 모듈로 2 곱셈 및 나눗셈, 및 덧셈을 위한 배타적 논리합 연산들을 이용하여 잘 알려진 확대 유클리드 알고리즘(Extended Euclidian Algorithm)을 수행할 수 있다. 또한, 호스트들은 상수들을 미리 계산할 수 있고 그리고 이전과 같이 그것들을 그래픽 처리 유닛으로 전달할 수 있다.
다른 실시 예에서, 비트 단위 모듈로 2 곱셈 연산들은 Q 세그먼트 데이터 유닛 계산들에서 사용된 Ai 계수들에 대한 피승수 쉬프트 패턴들을 사전에 결정하는 것에 의해 가속화될 수 있다. 예를 들어, A7 = 0x02로 가정한다. 비트 단위 모듈로 2 계산하는 것
Figure 112017059254715-pat00032
은 단지 0x04 위치를 왼쪽으로 비트 쉬프트(bit shift)하고 전술한 방법을 이용하여 존재할 수 있는 임의의 원치 않는 상위 비트를 제거하는 연산이 된다. C 프로그래밍 언어에서, 쉬프팅(shifting) 연산은 다음과 같이 프로그램된다:
(0x04) << 1
유사하게, A7 = 0x0A 이면, C 프로그래밍 언어 비트 단위 모듈로 2 곱셈 연산은 다음과 같이 프로그램 된다:
Figure 112017059254715-pat00033
미리 결정된 쉬프트 패턴들을 사용하지 않는 일반화된 곱셈 접근법은 스레드가 어떤 쉬프트들이 필요한지 결정하는 것을 요구한다. 쉬프트 패턴들을 미리 결정하는 것은 Q 세그먼트 데이터 유닛 계산들에서 사용된 비트 단위 모듈로 2 곱셈 연산들의 불필요한 오버헤드를 방지한다.
위의 예시에서, 당업자는 우선 ((0x04)<<1)을 계산하고 그 결과를, 예를 들면, “Temp”로 명명된 임시 레지스터 변수에 할당하는 것이 유리하다는 것을 인식할 것이다. C 프로그래밍 언어 비트 단위 모듈로 2 곱셈 연산은 다음과 같을 수 있다:
Figure 112017059254715-pat00034
쉬프팅 몇 임시 레지스터 변수 할당 연산들의 속도에 따라, 이 접근법은 임시 레지스터 변수 할당을 사용하지 않는 방법보다 더 높은 성능을 제공할 수 있다.
도 2a는 본 발명의 실시 예에 따른 미리 결정된 쉬프트 연산들을 사용하지 않고 8비트 값들에 대해 비트 단위 모듈로 2 곱셈 결과를 동적으로 계산하는 방법 단계들의 예시적인 순서도이다. 도 2a에서, 0부터 7까지 비트 위치들의 첫 번째 8비트 피승수 “M1”은 0부터 7까지 비트 위치들의 두 번째 8비트 피승수 “M2”와 곱해진다.
방법은 510 단계에서 시작되며, 510 단계에서 변수 “Product”는 0으로 초기화되고, M2 비트 값들을 테스트하는 테스트 비트 마스크 “TestBIt”는 하위 차수 비트, 비트 0을 테스트하도록 설정되고, 그리고 루프 인덱스 “Index”는 0으로 설정된다.
512 단계는 테스트된 M2 비트가 2진 1 비트 값을 갖는지 여부를 판별한다. 테스트된 M2 비트가 이진 0의 비트 값을 가지면, 제어는 516 단계로 바로 넘어간다. 테스트된 M2 비트가 이진 1의 비트 값을 가지면, 제어는 Product의 현재 값과 M1 현재 값을 배타적 논리합하고, 결과를 Product에 할당하고, 516 단계로 진행하는 514 단계로 넘어간다.
516 단계는 모든 8개의 M2 비트 위치 테스트들이 완료되었는지 여부를 테스트한다. 그렇지 않으면, 하나 이상의 추가 루프 반복이 사용되고 제어는 518 단계로 넘어간다. 518 단계는 테스트 비트 위치를 쉬프트하여 다음의 고차 M2 비트를 테스트하고, M2 1 비트 위치 값을 왼쪽으로 쉬프트하고, 루프 인덱스를 증가시킨다. 그 다음에 제어는 다른 루프 반복을 위해 512 단계로 되돌아간다.
최종적으로 516 단계는 8개 루프 반복이 완료되었다고 판별하고 제어는 520 단계로 넘어가고 과정은 GF(2) 이상의 확대체로서 갈루아체 GF(2^8) 내의 동일한 유한 필드 요소로 변환되는 성공적으로 계산된 15 비트 비트 단위 모듈로 2 곱셈 값을 갖는 것으로 끝낸다.
도 2b는 0x011D 원시 다항식에 대해 GF(2) 이상의 확대체로서 갈루아체 GF(2^8) 내에서 15 비트 비트 단위 모듈로 2 곱셈 결과를 그것의 동일한 요소로 변환하는 것에 대한 방법 단계들의 예시적인 순서도이다.
설명의 명료성을 위해, 방법은 “Poly” 변수를 다항식의 숫자 표현 값으로 설정함으로써 단계 560에서 시작한다. 그 다음 달리 사용되지 않은 Poly 값 6 비트 위치들을 왼쪽으로 쉬프트하고 쉬프트된 값을 “Xval” 변수에 할당한다. 그 다음 변환될 비트 위치들 0부터 14까지를 갖는 15 비트 곱셈 값을 “Result” 변수에 할당하고, “Mask” 비트 테스트 마스크 변수를 Product 변수의 테스트 비트 위치 14로 설정하고, 562 단계로 제어가 넘어가기 전에 “Index” 루프 인덱스 값을 0으로 설정한다.
562 단계는 테스트된 비트가 이진 1 비트 값을 가지는지 여부를 판별하기 위해 Mask 변수와 Product 변수를 배타적 논리합한다. 테스트된 비트가 이진 1 비트 값을 가지지 않으면, 제어는 566 단계로 넘어간다. 가지면, 제어는 564 단계로 넘어간다.
564 단계는 Result 변수와 Xval 변수를 배타적 논리합하고, 테스트된 비트를 계산된 값 내 0 비트로 변환한다. 566 단계로 제어가 넘어가기 전에 계산된 값을 Result 변수로 할당한다.
566 단계는 Mask 변수를 오른쪽으로 쉬프트하고 쉬프트된 값을 Mask에 할당한다. 그 다음 Xval 변수를 오른쪽으로 쉬프트하고 쉬프트된 값을 Xval에 할당한다. 이러한 두 연산들은 다음 하위 순서 비트 값이 1을 가지면 이것을 0 값으로 변환하는 루프를 준비한다. 566 단계는 570 단계로 제어가 넘어가기 전에 Index 루프 인덱스 변수를 증가시킨다.
570 단계는 루프가 7번 반복 수행하였는지 여부를 테스트한다. 루프가 7번 반복 수행하였으면, 제어는 580 단계로 넘어간다. 그렇지 않으면, 제어는 추가 처리를 위해 562 단계로 되돌아간다.
결국 570 단계는 7번 반복이 완료된 것으로 판별하고 제어는 580 단계로 넘어가고 그리고 과정은 GF(2) 이상의 확대체로서 갈루아체 GF(2^8) 내의 동일한 유한 필드 요소로 변환되는 성공적으로 계산된 15 비트 비트 단위 모듈로 2 곱셈 값을 갖는 것으로 끝낸다.
도 2c는 GF(2) 이상의 확대체로서 갈루아체 GF(2^8) 내 요소의 역수를 결정하기 위한 방법 단계들의 예시적인 순서도이다. 이러한 필드들의 0이 아닌 모든 요소들은 항상 곱셈의 역원을 갖는다. 도 2c의 이 방법은 로그 표(logarithm table) 및 진수 표(anti-logarithm table)를 이용하는 것과 같은 다른 방법들에 비해 계산상 비효율적이고 논의를 간단하게 하기 위해 예시로서 제공된다. 따라서, 이것은 본 발명의 범위를 제한하는 것으로 간주되지 않는다.
복구 연산은 동일한 역수 값들을 여러 번 사용할 수 있기 때문에, 호스트 프로세서는 역수 값들을 결정할 수 있고 그것들을 스레드들을 개시하기 전에 모든 스레드들이 접근할 수 있는 GPU 로컬 병렬 프로세싱 메모리(204) 내에 배치할 수 있다.
도 2c의 방법은 “Index” 변수를 1의 값으로 설정함으로써 시작하고 “Val” 변수는 역수 값 결정을 이용하는 값으로 사전에 설정되는 것으로 가정한다. 제어는 Val 및 Index 변수들의 곱을 계산하는 594 단계로 넘어간다. 곱셈 연산은 GF(2) 이상의 확대체로서 갈루아체 GF(2^8) 내에서 수행된다.
594 단계에서 계산된 곱셈이 1의 값을 가지면, 제어는 “Inverse” 변수 값을 Index 값의 값으로 설정하는 597 단계로 넘어가고, 역수 값 결정을 완료하는 598 단계로 넘어간다. 그렇지 않으면, 594 단계에서 계산된 곱셈이 1의 값을 가지지 않고 제어는 595 단계로 넘어간다. 595 단계는 Index 변수를 증가시키고 다른 시도를 위해 제어를 594 단계로 되돌린다.
당업자는 도 2c의 역수 값 결정 방법이 역수를 찾지 못하였을 때 에러 경로를 제공하지 않는 것을 인식할 것이다. 이것은 GF(2) 이상의 확대체로서 갈루아체 GF(2^8) 내의 0이 아닌 모든 요소들이 8 비트 곱셈의 역원을 반드시 갖기 때문이다. 요소에 대한 역수를 식별하는 데 실패하는 것은 갈루아체 내에서 구성하거나 달리 연산하려는 잘못된 시도를 나타낸다. 최종적으로, 당업자는 0 값은 역수를 가지지 않고 이것을 식별하는 시도는 결정되지 않은 프로세서의 행동들 및 부작용들을 야기할 수 있는 것을 인식한다. 그러므로 592 단계의 “Val” 변수는 결코 0 값을 가져서는 안 된다.
GPU Co- 프로세서 상의 이레이저 코드 데이터 보호 및 복구 계산
다음의 예시적인 실시 예는 명료성을 위해 간단하다. 이는 GPU 및 CPU(102) 모두가 접근할 수 있는 독립적인 메모리를 갖는 신중한(discreet) GPU를 사용하는 예시를 설명한다. 방법은 단지 P(412[N-2]) 및 Q(412[N-1])로 명명된 2개의 관련된 데이터 복구 세그먼트들에 대한 데이터 유닛들을 생성한다. 또한, 복구 방법은 2개의 식별된 파일 데이터 세그먼트들이 복구를 위해 필요한 것으로 가정한다. 또한 Q 관련 데이터 복구 세그먼트 데이터 유닛들을 계산하는데 사용되는 계수들은 GPU가 P(412[N-2]) 및 Q(412[N-1]) 관련 데이터 복구 세그먼트들을 생성하기 위해 사용하는 프로그래밍 로직(커널)에 컴파일된다고 가정한다. 또한, GPU는 개별 스레드가 단지 세그먼트 당 하나의 데이터 유닛을 처리하는 충분한 스레드들을 제공한다고 가정한다. 이런 이유로, 스트라이프는 세그먼트당 하나의 데이터 유닛을 포함한다(S=1 및 K=T). 최종적으로, 그리드 오버레이(grid overlay)는 1차원이고, 그리드 블록 크기(grid block size)는 K(세그먼트내의 데이터 유닛들의 수)를 고르게 나누고, 그리고 호스트 CPU(102)는 계산들을 수행하기 위해 필요한 그리드 블록들의 수를 정확하게 개시한다.
당업자는 설명의 명료성을 위해, 일부 실시 예들은 스레드들에 의한 합병된 데이터 접근과 같은 고려 사항들을 개시하지 않음을 인식할 것이다. 또한, 다른 것들 중에서, 일부 실시 예들은 페이지 락 호스트 메모리(page-locked (pinned) host memory), 동시 커널 실행, 비동기식 GPU 데이터 전송 동작들, 동적 병렬 처리, 및 CPU-GPU 통합 메모리 아키텍처들과 같은 추가 고려 사항들을 포함하지 않는다. 그러한 구조적 특징들, 및 다른 것들을 이용하거나 달리 이용할 수 있는 실시 예들은 다른 실시 예들이 드러내지 않는 상당한 성능 가속화 이득들을 보일 수 있다.
게다가, 개별 GPU들 및 SOCs(System-on-Chips)에 통합된 GPU들과 같은 CPU-GPU 통합 메모리 아키텍처 실시 예들에서, 일부 실시 예들에서 설명된 모든 명시적인 데이터 전송 단계들은 요구되지 않을 수 있다.
따라서, 다음의 실시 예의 예시는 본 발명이 구현될 수 있는 많은 가능한 방법들 중 하나이고 실시 예의 측면들을 모호하게 하는 것을 피하기 위해 의도적으로 단순화되었고 본 발명의 범위를 제한하는 것으로 간주되어서는 안 된다.
도 3a는 P(412[N-2]) 및 Q(412[N-1]) 관련 데이터 복구 세그먼트 데이터 유닛들을 생성하기 위한 방법 단계들의 예시적인 순서도이다.
610 단계는 파일 데이터 데이터 블록을 N개의 동일한 크기의 파일 데이터 세그먼트들(412)로 분할함으로써 시작한다. 이것은 모든 세그먼트들이 동일한 크기를 갖도록 마지막 데이터 세그먼트에 데이터 유닛 패딩(data unit padding)을 추가하는 것을 요구할 수 있다. 제어는 이제 615 단계로 넘어간다.
615 단계는 각각의 N개 데이터 파일 세그먼트들(412), P(412[N-2]) 및 Q(412[N-1]) 관련 데이터 복구 세그먼트들, 및 세그먼트 카운트 및 세그먼트 크기를 포함하는 추가적인 세그먼트 설명 정보에 대해 GPU 로컬 병렬 프로세싱 메모리(204) 내 공간을 할당한다. GPU는 공간을 예약하고 다양한 예약된 공간들의 주소들을 반환한다. 호스트 CPU(102)는 다양한 할당된 공간들에 대한 GPU 로컬 병렬 프로세싱 메모리(204)의 주소들을 보존한다. 제어는 620 단계로 넘어간다.
620 단계는 N개 데이터 파일 세그먼트들(412), 세그먼트 카운트, 및 세그먼트 주소 정보를 615 단계의 GPU 로컬 병렬 프로세싱 메모리(240) 할당들에 의해 예약된 GPU 로컬 병렬 프로세싱 메모리(204) 주소들로 전송한다. 615 단계 할당 단계에서 GPU가 반환한 위치들로의 전송들이다. 제어는 이제 625 단계로 넘어간다.
625 단계에서, 호스트 CPU(102)는 P(412[N-2]) 및 Q(412[N-1]) 관련 복구 세그먼트들을 계산하기 위한 세그먼트들(412) 및 추가 메모리 세그먼트 정보의 GPU 로컬 병렬 프로세싱 메모리(204) 주소들을 명시하는 파라미터들(parameters)을 이용하는 GPU 스레드들을 개시한다. 제어는 630 단계로 넘어간다.
630 단계는 635 단계로 넘어가기 전에 모든 스레드들이 처리를 완료하게 한다.
635 단계에서, 계산된 P(412[N-2]) 및 Q(412[N-1]) 관련 데이터 복구 세그먼트들의 최종 배치를 다루는 다른 소프트웨어에 의한 접근을 위해 CPU(102)는 계산된 P(412[N-2]) 및 Q(412[N-1]) 관련 데이터 복구 세그먼트들을 GPU 로컬 병렬 프로세싱 메모리(204)에서 시스템 메모리(104)로 전송한다. 제어는 이제 640 단계로 넘어간다.
방법은 640 단계에서 종료된다.
도 3b는 P(412[N-2]) 및 Q(412[N-1]) 모두에 대한 데이터 유닛을 생성하기 위해 스레드가 수행하는 방법 단계들의 예시적인 순서도이다.
650 단계에서, 방법은 620 단계에서 GPU 로컬 병렬 프로세싱 메모리(204)로 전달된 세그먼트 정보에 접근하고 변수 “N”을 데이터 파일 세그먼트들(412)의 수로 설정하기 위해 이 정보를 사용한다. 방법은 또한 변수 “TreadID”를 프로세싱 스레드 ID로 설정한다. CUDA 프로그래밍 기술 분야의 당업자는 스레드 ID가 blockIdx.x*blockDim.x + threadIdx.x의 값을 계산하는 것에 의해 결정될 수 있다는 것을 인식한다. 여기서 blockIdx.x, blockDim.x, 및 threadIdx.x는 각 스레드에 제공된 개인용 레지스터들이다. OpenCL과 같은 다른 프로그래밍 환경들은 유사한 스레드 ID 식별 규정들을 갖는다. 최종적으로, “P”, “Q”, 및 “SegIndex” 변수들은 0으로 설정된다. 제어는 이제 655 단계로 넘어간다.
655 단계. Thread ID 변수를 이용하여 제 1 세그먼트로 인덱스하고 세그먼트[SegIndex](412) 데이터 유닛 값을 “DataUnit” 변수로 추출한다. 제어는 이제 660 단계로 넘어간다.
660 단계는 데이터 유닛 값과 기존의 P 변수 값을 배타적 논리합하고 P 변수에 그 결과를 할당함으로써 P 변수를 업데이트 한다. 660 단계는 또한 현재 Q 변수 값과 데이터 유닛 값에 세그먼트[SegIndex](412)와 연관된 계수가 곱해진 결과를 배타적 논리합 함으로써 Q 변수를 업데이트 한다. 곱셈 연산은 GF(2) 이상의 확대체로서 갈루아체 GF(2^8)에서 수행된다. 결과는 Q 변수에 할당된다. 이 실시 예는 계수 값이 컴파일된 값으로서 프로그래밍 로직에 알려진 것으로 가정한다. 제어는 이제 665 단계로 넘어간다.
665 단계는 P 및 Q 변수 계산들이 모든 데이터 파일 세그먼트들(412)을 수반하는 계산들을 포함하는지 여부를 테스트한다. 포함하지 않으면, 제어는 다른 세그먼트(412)에 대한 데이터 유닛 계산들을 포함하도록 다른 루프 반복을 위해 제어가 655 단계로 되돌아가기 전에 세그먼트 인덱스를 증가시키는 670 단계로 넘어간다. 그렇지 않으면, P 및 Q 변수 계산들은 모든 데이터 파일 세그먼트들(412)을 수반하는 계산들을 포함하고 제어는 675 단계로 넘어간다.
675 단계는 P 변수 값을 해당 P 세그먼트(412) 데이터 유닛으로 할당하고 Q 변수 값을 해당 Q 세그먼트(412) 데이터 유닛으로 할당한다. 제어는 이제 스레드의 과정을 종료하는 680 단계로 넘어간다. 다른 스레드들은 세그먼트(412) 당 1개 데이터 유닛의 각각의 스트라이프를 처리할 것이고 집합적인 스레드들은 모든 세그먼트들(412) 내의 모든 데이터 유닛들을 처리한다.
도 4a는 P(412[N-2]) 및 Q(412[N-1]) 관련 데이터 복구 세그먼트 데이터 유닛들 및 나머지 사용 가능한 파일 데이터 세그먼트들(412)을 이용하여 2개의 파일 데이터 세그먼트들을 복구하기 위한 방법 단계들의 순서도이다. 사용 가능하지 않은 파일 데이터 세그먼트들(412) 및 이들과 연관된 Q 계산 데이터 유닛 계수들은 CPU(102) 프로그래밍에 알려져 있다. 사용 가능하지 않은 세그먼트들(412)은 세그먼트[X](412) 및 세그먼트[Y](412)로 지정된다고 하자. 이들과 연관된 계수들은 Ax 및 Ay로 지정된다고 하자. “Ns” 변수는 파일 데이터 세그먼트들(412)의 수와 동일한 값을 갖는다고 하자.
710 단계는 P 및 Q 관련 데이터 복구 세그먼트들뿐만 아니라 나머지 Ns-2 사용 가능한 데이터 파일 세그먼트들에 접근함으로써 시작한다. 수학식 11로부터,
Figure 112017059254715-pat00035
로 지정된
Figure 112017059254715-pat00036
의 역수를 계산하는 것이 유리할 수 있다. 그것은 계수로서 그것의 복구 연산들의 모든 스레드들에 의해 사용되기 때문이다.
715 단계에서 2개의 누락 세그먼트들(412), P(412[N-2]) 및 Q(412[N-1]) 관련 데이터 복구 세그먼트들, 및 세그먼트 카운트, 세그먼트 크기, 및
Figure 112017059254715-pat00037
의 계산된 값을 포함하는 추가 세그먼트 설명 정보를 포함하는, N개 데이터 파일 세그먼트들(412) 각각에 대한 GPU 로컬 병렬 프로세싱 메모리(204) 내에 공간을 할당한다. GPU는 로컬 병렬 처리 메모리(204) 공간을 예약하고 다양한 예약된 공간들의 주소들을 반환한다. 호스트 CPU(102)는 다양한 할당된 공간들에 대한 GPU 로컬 병렬 프로세싱 메모리(204) 주소들을 보존한다. 제어는 이제 720 단계로 넘어간다.
720 단계는 Ns-2 사용 가능한 데이터 파일 세그먼트들(412), P(412[N-2]) 및 Q(412[N-1]) 관련 데이터 복구 세그먼트들, 파일 데이터 세그먼트 카운트, 누락 세그먼트[X](412) 및 세그먼트[Y](412) 세그먼트 주소들을 포함하는 세그먼트 주소 정보, 및
Figure 112017059254715-pat00038
의 계산된 역수 값을 715 단계 GPU 로컬 병렬 프로세싱 메모리(204) 할당들에 의해 예약된 GPU 로컬 병렬 프로세싱 메모리(204) 주소들로 전송한다. GPU가 715 단계 할당 단계에서 되돌아간 위치로의 전송이다.
누락 세그먼트[X](412) 및 세그먼트[Y](412)는 전송될 수 없고 그들 각각의 예약된 공간들은 복구 방법이 복구된 세그먼트[X](412) 및 세그먼트[Y](412) 정보를 배치한 곳이다. 제어는 이제 725 단계로 넘어간다.
725 단계에서, 호스트 CPU(102)는 누락 세그먼트[X](412) 및 세그먼트[Y](412) 세그먼트들을 복구하기 위해 N-2개 파일 데이터 세그먼트들(412), P 및 Q 세그먼트들(412), 누락 세그먼트[X](412) 및 세그먼트[Y](412) 세그먼트 식별, 추가 메모리 세그먼트 정보, 및 역수 값 계산의 GPU 로컬 병렬 프로세싱 메모리(204) 주소들을 명시하는 파라미터들과 함께 GPU 스레드들을 개시한다. 제어는 이제 730 단계로 넘어간다.
730 단계는 제어가 735 단계로 넘어가기 전에 모든 스레드들이 처리를 완료하게 한다.
735 단계에서, CPU(102)는 최종 배치를 다루는 다른 소프트웨어에 의한 접근을 위해 복구된 누락 세그먼트[X](412) 및 세그먼트[Y](412) 세그먼트를 GPU 로컬 병렬 프로세싱 메모리(204)에서 시스템 메모리(104)로 전송한다. 제어는 이제 740 단계로 넘어간다.
방법은 740 단계에서 종료된다.
도 4b는 2개 파일 데이터 세그먼트들(412)을 복구하기 위해 스레드가 수행하는 방법 단계들의 일부의 예시적인 순서도이다.
755 단계에서, 스레드는 호스트 CPU(102)가 데이터 파일 세그먼트들(412)의 총 개수인 변수 “N”의 값을 수량화하는 GPU 로컬 병렬 프로세싱 메모리(204) 내에 배치한 정보에 접근한다. 스레드는 또한 GPU 로컬 병렬 프로세싱 메모리(204) 내 P(412[N-2]) 및 Q(412[N-1]) 관련 데이터 복구 세그먼트들(412)의 위치뿐만 아니라 GPU 로컬 병렬 프로세싱 메모리(204) 내 그들의 할당된 공간 위치들에도 접근한다. 누락 파일 데이터 세그먼트들의 인덱스들은 호스트 CPU(102)에 의해 전달되고 2개 “MissingX” 및 “MissingY” 변수들에 할당된다. 세그먼트 인덱싱(indexing) 변수 “SegIndex”는 0 값으로 설정되고 “DataUnitIndex” 인덱싱 변수는 스레드 ID 값으로 설정된다. “Pxy” 및 “Qxy” 변수들은 모두 0 값으로 설정되고 수학식 3 및 수학식 5의 Pxy 및 Qxy 각각에 대응한다. 제어는 이제 758 단계로 넘어간다.
758 단계는 현재 세그먼트 인덱스가 누락 파일 데이터 세그먼트(412)에 대한 것인지를 테스트한다. 그렇다면, 제어는 762 단계로 넘어간다. 그렇지 않으면, 제어는 760 단계로 넘어간다.
760 단계는 적절한 세그먼트 데이터 유닛에 접근하고 그 값을 Pxy 변수의 현재 값에 배타적 논리합하기 위해 P(412[N-2]) 관련 복구 데이터 세그먼트(412) 내에서 인덱스한다. 760 단계는 이 배타적 논리합 연산의 결과를 Pxy 변수에 할당한다. 760 단계는 다음에 적절한 세그먼트 데이터 유닛에 접근하고 그 값을 Q(412[N-1]) 관련 복구 데이터 세그먼트(412)와 연관된 계수와 곱하기 위해 Q(412[N-1]) 관련 복구 데이터 세그먼트(412) 내에서 인덱스한다. 이 곱셈 연산은 GF(2) 이상의 확대체로서 갈루아체 GF(2^8) 내에서 수행된다. 단계 760은 다음에 이 연산의 값을 Qxy 변수의 현재 값에 논리적 배타합하고 Qxy 변수에 논리적 배타합의 결과를 할당한다. 제어는 이제 762 단계로 넘어간다.
762 단계. 모든 사용 가능한 파일 데이터 세그먼트들(412)로부터의 데이터 유닛들이 Pxy 및 Qxy 변수 계산들에 포함되는지를 테스트한다. 포함되지 않으면, 제어는 다른 루프 반복을 개시하기 위해 SegIndex 인덱스 값을 증가시키는 764 단계로 넘어가고 758 단계로 제어를 넘긴다. 그렇지 않으면, 제어는 766 단계로 넘어간다.
766 단계는 계산된 Pxy 변수 값과 인덱스된 P(412[N-2]) 관련 복구 데이터 세그먼트(412) 데이터 유닛을 배타적 논리합한다. 이 배타적 논리합의 결과는 pxy 변수(소문자 “p”)에 할당된다. 766 단계는 다음에 계산된 Qxy 변수 값과 인덱스된 Q(412[N-1]) 관련 복구 데이터 세그먼트(412) 데이터 유닛과 배타적 논리합한다. 이 배타적 논리합의 결과는 qxy 변수(소문자 “q”)에 할당된다. pxy 변수들 및 qxy 변수들 각각은 수학식 7 및 수학식 8 내의 pxy 및 qxy 변수들에 대응한다. 제어는 이제 복구 방법의 이 부분을 완료하는 768 단계로 넘어간다.
도 4c는 2개 파일 데이터 세그먼트들(412)의 복구를 수행하는 스레드의 방법을 완료하는 것을 나타내는 예시적인 순서도이다.
772 단계는 호스트 CPU(102)가
Figure 112017059254715-pat00039
의 계산된 값을 GPU 로컬 병렬 프로세싱 메모리(204)에 배치한 것을 인식한다. 먼저
Figure 112017059254715-pat00040
의 값을 계산하고 그 다음 도 2a, 도 2b, 및 도 2c에서 설명된 반복적인 곱셈 방법들을 이용하여 반복적으로 곱셈하는 것에 의해 이 값은 계산된다. 변수 “Inv”는
Figure 112017059254715-pat00041
의 값으로 설정된다. 제어는 이제 775 단계로 넘어간다.
775 단계는
Figure 112017059254715-pat00042
의 값을 계산하고 그 결과를 “Val” 변수에 할당한다. 수학식 11에 이어서, Val은 오프셋 DataUnitIndex에서 segment[MissingY](412) 내의 해당 데이터 유닛의 값을 갖는다. 그래서, 775 단계는 파일 데이터 segment[MissingY][DataUnitIndex](412)에 Val 변수의 값을 할당한다. 제어는 이제 780 단계로 넘어간다.
수학식 12에 이어서, 780 단계는 Segment[MissingX][DataUnitIndex]의 값을 생성하기 위해 pxy 변수와 Val 변수를 배타적 논리합한다. MissingX 파일 데이터 세그먼트(412) 및 MissingY 파일 데이터 세그먼트(412) 내의 특정 오프셋에서 2개 데이터 유닛들의 스레드 복구는 완료된다. 다른 개시된 스레드들은 MissingX 및 MissingY 파일 데이터 세그먼트 내에서 그들의 해당 데이터 유닛들을 복구할 것이다. 모든 스레드 처리가 완료되면, MissingX 및 MissingY 파일 데이터 세그먼트 복구는 완료된다.
요컨대, 멀티-스레딩된 프로세서 상에서 효율적인 이레이저 코드 데이터 보호 및 복구 계산들을 수행하기 위한 기술들이 개시되었다. 당업자는 본 방법 단계들을 임의의 순서로 수행하도록 구성되는 임의의 시스템이 본 발명의 범위 내에 있는 것을 이해할 것이다.
본 발명의 실시 예들을 사용하면, 이레이저 코드 데이터 보호 및 복구 계산 복잡도는 복잡한 갈루아체 연산에서 간단한 비트 단위 XOR 합산들 및 비트 조작들로 감소된다. 멀티 스레드된 프로세서(multi-threaded processor) 내에서 스레드들의 집합은 이레이저 코드 데이터 보호 및 복구 스트라이프 내 데이터의 스트라이프 상에서 이레이저 코드 데이터 보호 및 복구 계산들을 수행하도록 구성된다. 실시 예에서, 각 스레드는 세그먼트 당 하나 데이터 유닛 상에서 이레이저 코드 데이터 보호 및 복구 계산들을 수행한다.
본 발명의 실시 예들의 장점은 달리 복잡한 이레이저 코드 데이터 보호 및 복구 계산들은 효율적인 산술 명령어들 또는 기본 1차원 표 검색 연산들로 간단하게 되고, 그렇게 함으로써 계산상의 복잡성을 줄이고 전체 시스템 효율을 증가시킨다. 적절한 멀티 스레드된 프로세서 플랫폼에서 구현될 경우, 상당한 시스템 성능 향상이 달성될 수 있다.
당업자는 이레이저 코드 데이터 보호 및 복구 계산들을 수행하기 위해 본 명세서에서 교시된 기술들이 맞춰진 고정된 기능의 하드웨어 또는 적절하게 구성된 하드웨어 시스템에서 실행되는 소프트웨어 프로그램으로서 구현될 수 있다는 것을 손쉽게 인식할 것이다. 또한, 교시된 기술들은 리드 솔로몬(Reed Solomon) 기술들을 사용하고 그래픽 프로세서가 수행할 수 있는 상이한 수학적 기술들을 사용하는 Mojette 변환과 같은 다른 데이터 변환들을 사용하는 것들을 포함하는 다른 방법들도 가능하다.
본 발명의 실시 예는 컴퓨터 시스템과 함께 사용하기 위한 프로그램 제품으로서 구현될 수 있다. 프로그램 제품의 프로그램(들)은 실시 예들의 기능들(본 명세서에서 설명된 방법들을 포함)을 정의하고 다양한 컴퓨터 판독 가능 메모리 및 저장 매체에 포함될 수 있다. 예시적인 컴퓨터 판독 가능 저장 매체는 (i) 정보가 영구적으로 저장되는 기록 불가능한 저장 매체(예를 들면, CD-ROM 드라이브에 의해 판독 가능한 CD-ROM 세그먼트들과 같은 컴퓨터 내의 판독 전용 메모리 장치들, 플래시 메모리, ROM 칩들 또는 임의의 종류의 솔리드 스테이트 비휘발성 반도체 메모리), 및 (ii) 변경 가능한 정보가 저장되는 기록 가능한 저장 매체(예를 들면, 디스켓 드라이브(diskette drive)의 플로피 세그먼트들(floppy segments) 또는 하드-저장 장치 또는 임의의 종류의 솔리드 스테이트 랜덤-액세스(random-access) 반도체 메모리)를 포함하나 이에 제한되지는 않는다.
전술한 것을 반복하고 보충하면, 일부 실시 예들에서 제 1 프로세싱 회로(예를 들면, CPU)는 패리티 생성(즉, 파일 데이터 세그먼트들을 보호하기 위한 P 이레이저 코드 데이터 세그먼트들 및 Q 이레이저 코드 데이터 세그먼트들과 같은 이레이저 코드들의 생성) 및/또는 체계적인 데이터 복구(즉, 오류 후의 데이터 복구)를 위해 제 2 프로세싱 회로(예를 들면, GPU)와 협력할 수 있다. 예를 들어, 8 비트 데이터 유닛들을 갖는 10/12 시스템에서, 10개 파일 데이터 유닛들의 각 집합은, 패리티 생성으로 지칭되는 이레이저 코드 연산에서, P 이레이저 코드 데이터 유닛 및 Q 이레이저 코드 데이터 유닛을 포함하는 2개의 이레이저 코드 데이터 유닛들에 의해 보호될 수 있다.
패리티 생성을 수행하기 위해, CPU는 복수의 스트라이프를 포함하는 데이터 유닛들의 블록을 GPU에 보낼 수 있다. 각 스트라이프는 복수의 세그먼트 각각으로부터 S개 데이터 유닛들을 포함한다. 전송은 예를 들어, CPU 및 GPU 모두 접근할 수 있는 공유된 메모리로 데이터 유닛들의 블록을 쓰는 것을 수반할 수 있다. CPU는 또한 GPU가 실행하기 위한 커널, 하나 이상의 상수들의 집합을(커널에 하드 코딩되거나, 예를 들어, 또는 GPU에 개별적으로 제공되는, 예를 들면, 공유된 메모리의 별도의 영역) 제공할 수 있다.
예를 들어, S=1 그리고 8 비트 데이터 유닛들을 갖는 10/12 시스템에서, P 이레이저 코드 데이터 유닛(또는 “패리티 값”)은 보호되는 10 바이트 데이터의 각 스트라이프의 배타적 논리합으로서 형성될 수 있고, Q 이레이저 코드 데이터 유닛은 보호되는 10 바이트 데이터의 가중된 논리적 배타합으로서 형성될 수 있다(즉, 곱셈들의 집합의 배타적 논리합, 각 이러한 곱셈은, GF(2^8)에서, 스트라이프의 각 바이트와 함께 각각의 가중치(10개의 가중치들)의 곱셈이다). 다음의 텍스트에서, 모든 연산들(예를 들면, 곱셈들, 덧셈들, 거듭제곱들, 및 로그들)은 갈루아체(예를 들면, 8 비트 데이터 유닛들에 대한 GF(2^8)) 내에 있는 것으로 이해될 수 있다. 일부 실시 예들에서, 각 데이터 유닛은 n 비트수이고, 여기서 n은 2의 거듭제곱의 양의 정수이고(즉, n은 거듭제곱2가 양의 정수로 거듭제곱되는 것과 같다), 그리고 갈루아체는 GF(2^n)이다.
이러한 상황에서, 보호되는 가중치들 및 바이트의 곱셈들을 형성하기 위해, 많은 양의 데이터에 대해 패리티를 생성하는 동안 Q 이레이저 코드 데이터 유닛들을 생성하는 것은 GF(2^8)에서 다수의 곱셈 연산들을 수반할 수 있다. 계산된 각 곱셈은 다른 많은 수의 곱셈들과 공통된 인자를 가질 수 있다. 예를 들어, 모든 스트라이프들 내 제 1 바이트의 제 1 가중치의 곱셈들은 공통 인자로서 제 1 가중치를 갖는다. 이러한 곱셈들은 (CPU의 요구에서) GPU에 의해 고도의 병렬 방식으로 계산될 수 있고 CPU는 곱셈들을 수행하는 것을 돕기 위해, GPU에 적합한 커널을 제공함으로써 및/또는 GPU에 하나 이상의 상수들의 집합을 제공함으로써 GPU 내 이러한 계산들의 효율을 여러 방법들로 증가시킬 수 있다.
도 5를 참조하면, 예를 들어, 곱셈 표가 사용될 수 있다. 표는 형성되는 곱셈의 제 1 인자에 의해 1차원에서 그리고 형성되는 곱셈의 제 2 인자에 의해 2차원에서 인덱스된 2차원 배열일 수 있다. 설명을 용이하게 하기 위해, 2개의 3 비트 숫자들의 곱셈에 대한 표가 도 5에서 도시되었다; 2개의 임의의 8 비트 수들의 곱셈에 대한 곱셈 표는 256개 행들과 256개 열들을 가질 수 있다. 표의 크기는 (i) 0 및 1의 인자들에 대응하는 행들 및 열들 (곱셈은 간단함) 그리고 (ii) 2의 거듭제곱들에 대응하는 행들 및 열들을 (곱셈은 쉬프트 연산에 의해 대체될 수 있음) 제거함으로써 (추가적인 조건부의 명령어들의 비용을 지불하고) 조금 감소될 수 있다. 10/12 시스템 내 Q 이레이저 코드 데이터 유닛들을 계산하는 상술한 예시에서, 10개 가중치들에 대응하는 행들을 제외한 모든 행들은 생략될 수 있다(또는, 등가적으로, 10개 가중치들 각각에 대한, 10개 1차원 곱셈 표들이 사용될 수 있다). CPU는, 예를 들어, 10개 곱셈 표들 중 제 1 곱셈 표에서 검색 동작으로서 제 1 웨이트를 곱하여 하드 코딩(hard-coded)되고, 10개 곱셈 표들 중 제 2 곱셈 표에서 검색 동작으로서 제 2 웨이트를 곱하여 하드 코딩되는 등의 커널을 GPU에 보낼 수 있다.
다른 실시 예에 있어서, 각 곱셈은 2개 인자들의 각각의 로그들을 취하고, 로그들을 더하고, 그리고 합의 거듭제곱(또는 진수(anti-logarithm))을 취함으로써 수행된다. 로그 연산은 1차원 배열(예를 들면, 8 비트 데이터 유닛의 로그를 검색하기 위한 1 x 256 배열)일 수 있는 로그 표의 검색으로서 커널에 코딩될 수 있다. 이러한 배열은 도 6b에 도시되어 있다. 도 6b의 배열은 1:1에 가까운 가로 세로의 비를 갖는 도면에서 설명의 용이함을 위해 2차원 표로서 도시된다; 도시된 양은 근본적으로 1차원 배열이지만, 그러나, 256개의 8 비트 수들 각각의 로그를 나열한다. 유사하게, 거듭제곱들 (또는 진수) 표는 1차원 배열이다, 예를 들면, 256개의 8 비트 수들 각각의 거듭제곱을 나열하는 표이다. 거듭제곱들 (또는 진수) 표는 도 6a에 (2차원 형태로) 도시된다. 가중치들에 의한 곱셈이 곱해질 2개 인자들의 각각의 로그들을 취하고, 로그들을 더하고, 합의 거듭제곱(또는 진수)을 취함으로써 수행되어야 하면, 그 다음에 CPU는 10개 가중치들의 로그들을 미리 계산하고, 로그 표 및 거듭제곱들 표와 함께, 그들을 상수들로서 GPU에 제공할 수 있다. (또한 CPU에 의해 제공되는) 커널은 그 다음 GPU에 보호되는 각 바이트의 로그를 취하고, 로그를 각 가중치의 로그에 더하고, 그리고 합의 거듭제곱을 취하도록 명령할 수 있다.
다른 실시 예에 있어서, 곱셈은 부분 곱들(705)의 합을 형성하는 것을 포함하는 제 1 동작과 함께, 도 7에서 도시된 대로 수행된다. 각 부분 곱(705)은 제 2 피승수의 해당 비트 값에 따라, 제 1 피승수(또는 인자) 또는 0 중 어느 하나와 동일하다. GF(2^8)에서의 곱셈의 경우에서, 그 다음에 최하위 8 비트는 도 7의 오른쪽의 표(710)로부터 선택된 하나 이상의 수들과의 하나 이상의 배타적 논리합 연산들을 이용하여 결합될 수 있다. 각 선택된 수는 부분 곱들의 합의 나머지 비트(즉, 최하위 8비트보다 더 중요한 비트)의 집합 내의 1개 비트의 비트 위치에 대응하는 표의 위치에 있다. 예를 들어, 도 7에서, 나머지 비트는 비트 위치 9, 10, 및 11에서 각각 3개 1들을 포함하고, 그리고 곱은 (i) 부분 곱들의 합의 최하위 8 비트와 (ii) 도 7의 오른쪽의 표(710)의 오른쪽의 9, 10, 및 11 위치들의 3개 숫자들을 배타적 논리합하는 것으로써 알아낸다. 부분 곱들의 합은 (i) 7개의 왼쪽 쉬프트 연산들 및 (ii) 복수의 중간 덧셈 연산들의 조합으로서 하드 코딩될 수 있다. 여기서, 하나의 덧셈은 값이 1인 제 2 피승수의 각 비트 위치에 대해 이루어진다. 만약 제 2 인자가 상수인 부분 곱들의 합이 이 방식으로 코딩되면, 커널에서, CPU에 의해, GPU가 제 2 피승수의 각 비트에 대한 조건부 명령어를 수행(제 2 피승수의 해당 비트가 1이면 덧셈을 수행)할 필요가 방지되고, 사용되는 연산들의 수가 상당히 감소한다.
GPU에 의해 수행되는 이레이저 코드 연산이 체계적인 데이터 복구 연산인 경우 유사한 효율 향상이 가능할 수 있다. 10/12 시스템에서 체계적인 데이터 복구 연산은 예를 들면, 10개 파일 데이터 유닛들과 2개 이레이저 코드 데이터 유닛들(P 이레이저 코드 데이터 유닛 및 Q 이레이저 코드 데이터 유닛)을 본래 포함하는 스트라이프로부터 손실된 2개 데이터 유닛들인 2개 미지수들에 대한 2개 선형 방정식들을 설정하는 것을 수반할 수 있다. 이러한 방정식들 중 첫 번째 방정식은 P 이레이저 코드 데이터 유닛에 대한 방정식으로부터 얻을 수 있다; 이 방정식에서, 각 미지수의 계수는 1이고 방정식의 우변은 P 이레이저 코드 데이터 유닛과 나머지 데이터 유닛들(즉, 스트라이프로부터 손실되지 않은 8개 데이터 유닛들)의 배타적 논리합과 동등한 첫 번째 중간 데이터 복구 값이다. 이러한 방정식들 중 두 번째 방정식은 Q 이레이저 코드 데이터 유닛에 대한 방정식으로부터 얻을 수 있다; 이 방정식에서, 각 미지수의 계수는 그 데이터 유닛에 대응하는 각 가중치이고, 방정식의 우변은 (i) Q 이레이저 코드 데이터 유닛과 (ii) 나머지 데이터 유닛들의 가중 배타적 논리합의 배타적 논리합과 동등한 두 번째 중간 데이터 복구 값이다. 2개 선형 방정식들은 행렬 방정식으로서 쓰여질 수 있고, 해는 (i) 2 x 2 역행렬 및 (ii) 첫 번째 중간 데이터 복구 값 및 두 번째 중간 데이터 복구 값을 포함하는(예를 들면, 구성되는) 2개 요소 벡터의 곱으로서 쓰여질 수 있다. 체계적인 데이터 복구 연산을 수행할 때, CPU는 2 x 2 역행렬을 미리 계산하고 그것을 나머지 데이터 유닛들, P 이레이저 코드 데이터 유닛, 및 Q 이레이저 코드 데이터 유닛과 함께 GPU에 보낼 수 있다. 많은 손실된 값들이 복구될 수 있는 시스템에서, 2 x 2 행렬 대신에 N x N 행렬이 사용될 수 있다(N은 양의 정수).
CPU는 또한 (전술한대로, 패리티 생성 동작의 문맥에서와 같이) 하나 이상의 곱셈 표들, 또는 거듭제곱들 표 및 로그 표와 같은, 체계적인 데이터 복구 연산에 포함된 곱셈 연산들을 간소화하는 데이터 및/또는 코드를 GPU에게 보낼 수 있다. 일부 실시 예들에서, GPU에서, 독립 선형 방정식들의 해(예를 들면, 10/12 시스템에서, 2개 미지수들의 2개 독립 선형 방정식의 해)를 찾는 것을 간소화하기 위해, CPU는 GPU에 4개 코드 세그먼트들을 보낼 수 있다. 4개 코드 세그먼트들 각각은 2 x 2 역행렬의 요소들 중 하나에 대응하고 각 행렬 요소에 의해 곱셈을 실행하는 쉬프트 연산들 및 (모듈로 2) 덧셈 연산들의 시퀀스로 구성된다.
GPU는 다수의 코어들, 예를 들어, 수백 또는 수천 개의 코어들을 포함할 수 있으며, 각 코어는 식별 번호를 갖는다. 시동(startup)시, 각 코어는 그것의 식별 번호를 판별할 수 있거나 “찾을 수 있다”. 동작에서, 각 코어는 CPU에 의해 GPU에 제공되는 데이터 유닛들의 블록의 각각의 부분 집합 상에서 이레이저 코드 연산들을 수행하기 위해 (코어의 식별 번호와 같은 스레드 ID를 갖는) 스레드를 실행한다. 예를 들어, (0 식별 번호를 갖고 0 스레드 ID를 갖는 스레드를 실행하는) 제 1 코어는 데이터 유닛들의 제 1 서브 블록을 처리할 수 있고, 제 2 코어는 데이터 유닛들의 제 2 서브 블록을 처리할 수 있고, 다른 코어들도 유사하게 처리할 수 있다. 다른 실시 예에서, GPU가 M개 코어들을 포함하면, 제 1 코어는 주소 0에서 데이터 유닛으로 시작하는 모든 M번째 데이터 유닛을 처리할 수 있고, 제 2 코어는 주소 1에서 데이터 유닛으로 시작하는 모든 M번째 데이터 유닛을 처리할 수 있고, 다른 코어들도 유사하게 처리할 수 있다. 각 CPU 코어는 실행될 때, 코어 식별 번호를 사용하여 계산된 주소를 사용하는 어드레싱 모드들을 갖는 명령어들을 포함하는 명령어 집합을 가질 수 있다.
전술한 관점에서, 본 발명의 일부 실시 예들은 패리티 생성 연산들 및 체계적인 데이터 복구 연산들과 같은 이레이저 코드 연산들을 간소화하는 방법들을 제공한다. CPU와 같은 제 1 프로세싱 회로는 GPU와 같은 제 2 프로세싱 회로에 이레이저 코드 데이터 유닛들이 생성될 데이터, 또는 손실된 데이터가 복구되어야 하는 이레이저 코드 데이터 유닛들을 포함하는 데이터를 보낼 수 있다. 제 1 프로세싱 회로는 또한 제 2 프로세싱 회로에 하나 이상의 이레이저 코드 연산들을 수행하기 위한 명령어들을 포함하는 커널, 및 제 2 프로세싱 회로가 이레이저 코드 연산들을 간소화하는데 사용할 수 있는 하나 이상의 상수들의 집합을 보낼 수 있다.
용어 “프로세싱 회로”는 데이터 또는 디지털 신호들을 처리하기 위해 채용된 하드웨어, 펌웨어, 및 소프트웨어의 임의의 조합을 의미하기 위한 것으로 본 명세서에서 사용된다. 프로세싱 회로는 예를 들면, ASICs(application specific integrated circuits), 범용 또는 특수 목적의 CPUs(central processing units), DSPs(digital signal processors), GPUs(graphics processing units), 및 FPGAs(field programmable gate arrays)와 같은 프로그래머블 로직 장치들(programmable logic devices)을 포함할 수 있다. 본 명세서에서 사용되는 프로세싱 회로에서, 각 기능은 그 기능을 수행하도록 구성된 하드웨어, 즉, 기능이 하드웨어에 내장된(hard-wired), 또는 일시적이지 않은 저장 매체에 저장된 명령어들을 수행하도록 구성된 CPU와 같은 좀 더 일반적인 목적의 하드웨어 중 어느 하나에 의해 수행된다. 프로세싱 회로는 하나의 PWB(printed wiring board) 상에 제작될 수 있거나 또는 일부 상호 연결된 PWBs 상에 분산될 수 있다. 프로세싱 회로는 다른 프로세싱 회로들을 포함할 수 있다; 예를 들면, 프로세싱 회로는 PWB 상에 상호 연결된 2개 프로세싱 회로들(FPGA 및 CPU)을 포함할 수 있다.
비록 여기에서 제 1, 제 2, 제3 등의 용어들은 다양한 요소들, 성분들, 영역들, 층들 그리고/또는 섹션들을 설명하기 위해 사용되지만, 이러한 요소들, 성분들, 영역들, 층들 그리고/또는 섹션들은 이러한 용어들로 인해 제한되지 않는 것으로 이해될 것이다. 이러한 용어들은 다른 요소, 성분, 영역, 층, 또는 섹션으로부터 하나의 요소, 구성, 영역, 층 또는 섹션을 구별하기 위해 사용된다. 따라서, 후술하는 제 1 구성 요소, 성분, 영역, 층, 또는 섹션은 본 발명의 사상 및 범위를 벗어나지 않고, 제 2 구성 요소, 성분, 영역, 층, 또는 섹션을 지칭 할 수 있다.
본 발명의 기술적 사상의 설명에서 사용되는 용어들은 특정한 실시 예들을 설명하기 위한 목적으로만 사용되며, 본 발명의 기술적 사상을 한정하는 것으로 의도되지 않는다. 본 명세서에서 사용된 바와 같이, “대체로”, “약” 용어 그리고 이와 유사한 용어들은 근사치의 용어들로서 사용되고, 정도의 용어들로서 사용되지 않고, 본 발명의 당업자에 의해 식별되는 측정된 또는 계산된 값들의 고유한 변동을 고려하기 위한 것이다. 본 명세서에서 사용된 바와 같이, “주요 성분” 용어는 조성물의 적어도 절반을 구성하는 성분을 의미하고, “주요 부분” 용어는 복수의 항목에 적용될 때, 항목의 적어도 절반을 의미한다.
본 명세서에서 사용된 바와 같이, 문맥상 명백하게 다르게 뜻하지 않는 한, 단수 형태 “하나”는 복수의 형태도 포함하는 것으로 의도된다. “포함하는” 및/또는 “포함하고 있는” 용어들이 본 명세서에서 사용될 때, 이러한 용어들은 정해진 특징들, 정수들, 단계들, 동작들, 요소들, 및/또는 성분들의 존재를 명시하나, 하나 또는 그 이상의 다른 특징들, 정수들, 단계들, 동작들, 요소들, 성분들, 및/또는 그것들의 그룹들의 추가 또는 존재를 불가능하게 하지 않는 것이 더 이해될 것이다. 본 명세서에서 사용된 바와 같이, “및/또는” 용어는 나열된 항목들과 연관된 하나 이상의 임의의 그리고 모든 조합들 포함한다. “적어도 하나”와 같은 표현들은, 구성 요소들의 리스트보다 앞설 때, 요소들 전체 리스트를 수정하고 그리고 리스트의 개별 요소들을 수정하지 않는다. 또한, 본 발명의 실시 예들을 기술할 때 "할 수 있다"의 사용은 "본 발명의 하나 이상의 실시 예들"을 의미한다. 또한, "예시" 용어는 예 또는 그림을 의미한다. 본 명세서에서 사용된 바와 같이, “사용”, “사용되는”, 그리고 “사용된” 용어들은 “이용”, “이용되는”, 그리고 “이용된” 용어들의 동의어로 각각 간주 될 수 있다.
요소 또는 층이 다른 요소 또는 층의 "위에", "연결된", "결합된" 또는 "인접한"으로 언급될 때, 그것은 다른 요소 또는 층에 직접적으로 위에, 연결된, 결합된, 또는 인접할 수 있고, 또는 하나 이상의 중간 요소들 또는 층들이 존재할 수 있다. 대조적으로, 하나의 요소 또는 층이 다른 요소 또는 층에 "직접적으로 위에", "직접적으로 연결된", "직접적으로 결합된"또는 "바로 인접한"으로 언급될 때, 중간 요소들 또는 층들이 존재하지 않는다.
본 명세서에 인용된 임의의 수치 범위는 인용된 범위 내에 포함되는 동일한 수치 정밀도의 모든 부분 범위들을 포함하도록 의도된다. 예를 들어, “1.0에서 10.0”의 범위에는 인용된 최소값 1.0과 인용된 최대값 10.0 사이의 (그리 포함하는), 즉, 예를 들면, 2.4에서 7.6까지와 같이, 1.0과 같거나 큰 최소값 및 10.0과 같거나 작은 최대값을 갖는, 모든 부분 범위가 포함된다. 본 명세서에 인용된 최대 수치 제한은 본 명세서에 포함된 더 낮은 모든 수치 제한들을 포함하도록 의도되며, 본 명세서에 인용된 임의의 최소 수치 제한은 본 명세서에 포함된 더 높은 모든 수치 제한들을 포함하도록 의도된다.
비록 이레이저 코드 데이터 보호 및 복구 계산 시스템 및 방법의 예시적인 실시 예들이 본 명세서에서 구체적으로 설명되고 예시되었으나, 많은 수정들 및 변형들이 당업자에게 명백할 것이다. 따라서, 본 발명의 원리들에 따라 구성되는 이레이저 코드 데이터 보호 및 복구 계산 시스템 및 방법은 본 명세서에서 구체적으로 설명된 것 이외에 구현될 수 있다는 것을 이해해야 한다. 본 발명은 또한 다음의 청구 범위, 및 그 등가물에 의해서 정의된다.
410: 세그먼트 배열

Claims (10)

  1. 제 1 프로세싱 회로를 포함하되,
    상기 제 1 프로세싱 회로는:
    복수의 입력 데이터 유닛(input data unit);
    수행되는 이레이저 코드 연산(erasure code operation)을 명시하는 요청; 및
    상기 이레이저 코드 연산을 수행하는데 사용되는 하나 이상의 상수들을 제 2 프로세싱 회로로 전송하되,
    상기 이레이저 코드 연산은:
    패리티(parity) 생성 연산; 또는
    체계적인(systematic) 데이터 복구 연산이고,
    상기 제 2 프로세싱 회로는 복수의 코어를 포함하고, 상기 복수의 코어 중 제 1 코어는:
    시동 시, 상기 제 1 코어 및 상기 제 1 코어에 의해 실행되는 스레드의 식별 번호를 찾고, 그리고
    상기 식별 번호를 이용하여 계산된 메모리 주소에 저장된 입력 데이터 유닛을 이용하여 이레이저 코드 연산을 수행하는 데이터를 저장하기 위한 시스템.
  2. 제 1 항에 있어서,
    상기 하나 이상의 상수들은:
    복수의 입력 값 각각에 대해, 갈루아체(Galois field)의 입력 값의 거듭제곱을 나열하는 거듭제곱들 표; 및
    상기 복수의 입력 값 각각에 대해, 상기 갈루아체의 상기 입력 값의 로그를 나열하는 로그 표를 포함하는 데이터를 저장하기 위한 시스템.
  3. 제 2 항에 있어서,
    상기 입력 데이터 유닛들 각각은 n 비트 수이고, 상기 n은 2의 거듭제곱의 양의 정수이고, 상기 갈루아체는 GF(2^n)인 데이터를 저장하기 위한 시스템.
  4. 제 1 항에 있어서,
    상기 하나 이상의 상수들은 상기 체계적인 데이터 복구 연산을 수행하기 위한 역행렬을 포함하는 데이터를 저장하기 위한 시스템.
  5. 제 4 항에 있어서,
    상기 역행렬은 갈루아체에서, N × 1 벡터(vector)가 곱해질 때 N개 복구된 데이터 유닛들을 생성하는 N × N 배열이고, 상기 N은 양의 정수인 데이터를 저장하기 위한 시스템.
  6. 제 1 항에 있어서,
    상기 하나 이상의 상수들은 곱셈 표를 포함하는 데이터를 저장하기 위한 시스템.
  7. 제 1 프로세싱 회로를 포함하되,
    상기 제 1 프로세싱 회로는:
    복수의 입력 데이터 유닛(input data unit);
    수행되는 이레이저 코드 연산(erasure code operation)을 명시하는 요청; 및
    제 2 프로세싱 회로에 의해 실행될 때 상기 제 2 프로세싱 회로가 상기 이레이저 코드 연산을 수행하게 하는 머신 코드 명령어들(machine code instructions)을 포함하는 커널(kernel)을 제 2 프로세싱 회로로 전송하되,
    상기 이레이저 코드 연산은:
    패리티(parity) 생성 연산; 또는
    체계적인(systematic) 데이터 복구 연산이고,
    상기 커널은 조건부의 연산들 없이, 제 1 인자 및 제 2 인자의 곱셈을 수행하기 위한 명령어들을 포함하고,
    상기 제 2 프로세싱 회로는 복수의 코어를 포함하고, 복수의 코어 중 제 1 코어는:
    시동 시, 상기 제 1 코어 및 상기 제 1 코어에 의해 실행되는 스레드의 식별 번호를 찾고, 그리고
    상기 식별 번호를 이용하여 계산된 메모리 주소에 저장된 상기 입력 데이터 유닛을 이용하여 상기 이레이저 코드 연산을 수행하는 데이터를 저장하기 위한 시스템.
  8. 제 7 항에 있어서,
    상기 제 1 인자 및 상기 제 2 인자의 상기 곱셈을 수행하기 위한 상기 명령어들은 복수의 왼쪽 쉬프트 연산(left-shift operation) 및 복수의 덧셈 연산을 포함하고, 상기 복수의 덧셈 연산의 각 덧셈 연산은 모듈로(modulo) 2 덧셈 연산이고 그리고 1의 값을 갖는 상기 제 2 인자의 해당 비트에 대응하는, 데이터를 저장하기 위한 시스템.
  9. 복수의 입력 데이터 유닛(input data unit);
    수행되는 이레이저 코드 연산(erasure code operation)을 명시하는 요청; 및
    상기 이레이저 코드 연산을 수행하는데 사용되는 하나 이상의 상수들을 제 1 프로세싱 회로에 의해, 제 2 프로세싱 회로로 전송하는 단계; 및
    상기 제 2 프로세싱 회로에 의해, 상기 요청된 이레이저 코드 연산을 수행하는 단계를 포함하되,
    상기 이레이저 코드 연산은:
    패리티(parity) 생성 연산; 또는
    체계적인(systematic) 데이터 복구 연산이고,
    상기 제 2 프로세싱 회로는 복수의 코어를 포함하고, 복수의 코어 중 제 1 코어는:
    시동 시, 상기 제 1 코어 및 상기 제 1 코어에 의해 실행되는 스레드의 식별 번호를 찾고, 그리고
    상기 식별 번호를 이용하여 계산된 메모리 주소에 저장된 상기 입력 데이터 유닛을 이용하여 상기 이레이저 코드 연산을 수행하는 데이터를 저장하거나 복구하기 위한 방법.
  10. 제 9 항에 있어서,
    상기 제 1 프로세싱 회로는 CPU(central processing unit)이고 상기 제 2 프로세싱 회로는 GPU(graphics processing unit)인 데이터를 저장하거나 복구하기 위한 방법.
KR1020170078134A 2016-08-19 2017-06-20 이레이저 코드 데이터 보호 및 복구 계산 시스템 및 방법 KR102168960B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201662377096P 2016-08-19 2016-08-19
US62/377,096 2016-08-19
US15/431,629 2017-02-13
US15/431,629 US10230398B2 (en) 2016-08-19 2017-02-13 Erasure code data protection and recovery computation system and method

Publications (2)

Publication Number Publication Date
KR20180020874A KR20180020874A (ko) 2018-02-28
KR102168960B1 true KR102168960B1 (ko) 2020-10-22

Family

ID=61192332

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170078134A KR102168960B1 (ko) 2016-08-19 2017-06-20 이레이저 코드 데이터 보호 및 복구 계산 시스템 및 방법

Country Status (2)

Country Link
US (1) US10230398B2 (ko)
KR (1) KR102168960B1 (ko)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10379948B2 (en) 2017-10-02 2019-08-13 Western Digital Technologies, Inc. Redundancy coding stripe based on internal addresses of storage devices
US10474528B2 (en) 2017-10-02 2019-11-12 Western Digital Technologies, Inc. Redundancy coding stripe based on coordinated internal address scheme across multiple devices
US10892781B2 (en) * 2017-11-20 2021-01-12 Zebware Ab Method and devices for a reduced repair and update erasure code
US10901845B2 (en) * 2018-04-16 2021-01-26 Microsoft Technology Licensing, Llc Erasure coding for a single-image memory
CN108595270B (zh) * 2018-04-27 2021-07-23 新华三信息安全技术有限公司 一种内存资源的回收方法及装置
US10725941B2 (en) 2018-06-30 2020-07-28 Western Digital Technologies, Inc. Multi-device storage system with hosted services on peer storage devices
US10409511B1 (en) 2018-06-30 2019-09-10 Western Digital Technologies, Inc. Multi-device storage system with distributed read/write processing
US10592144B2 (en) 2018-08-03 2020-03-17 Western Digital Technologies, Inc. Storage system fabric with multichannel compute complex
US10649843B2 (en) 2018-08-03 2020-05-12 Western Digital Technologies, Inc. Storage systems with peer data scrub
US10831603B2 (en) 2018-08-03 2020-11-10 Western Digital Technologies, Inc. Rebuild assist using failed storage device
US10824526B2 (en) 2018-08-03 2020-11-03 Western Digital Technologies, Inc. Using failed storage device in peer-to-peer storage system to perform storage-centric task
US10901848B2 (en) 2018-08-03 2021-01-26 Western Digital Technologies, Inc. Storage systems with peer data recovery
CN109194369A (zh) * 2018-09-11 2019-01-11 广东石油化工学院 一种电力线通信信号自适应重构方法
US10877810B2 (en) 2018-09-29 2020-12-29 Western Digital Technologies, Inc. Object storage system with metadata operation priority processing
WO2020081512A1 (en) 2018-10-15 2020-04-23 Netapp, Inc. Improving available storage space in a system with varying data redundancy schemes
US11182258B2 (en) 2019-01-04 2021-11-23 Western Digital Technologies, Inc. Data rebuild using dynamic peer work allocation
CN109918225B (zh) * 2019-02-18 2023-05-09 麒麟软件有限公司 基于飞腾平台的raid6数据恢复优化方法
CN111078460B (zh) * 2019-11-18 2020-08-25 北京中电兴发科技有限公司 一种快速纠删码计算方法
US11928497B2 (en) 2020-01-27 2024-03-12 International Business Machines Corporation Implementing erasure coding with persistent memory
TWI738359B (zh) * 2020-05-26 2021-09-01 慧榮科技股份有限公司 資料儲存裝置與資料處理方法
CN113258938B (zh) * 2021-06-03 2021-10-08 成都信息工程大学 一种单节点故障快速修复纠删码的构造方法

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7003712B2 (en) * 2001-11-29 2006-02-21 Emin Martinian Apparatus and method for adaptive, multimode decoding
US7581156B2 (en) * 2002-12-16 2009-08-25 Microsoft Corporation Systems and methods for providing improved encoding and reconstruction of data
US7103716B1 (en) 2003-06-26 2006-09-05 Adaptec, Inc. RAID 6 disk array with prime number minus one disks
US8145941B2 (en) * 2006-10-31 2012-03-27 Hewlett-Packard Development Company, L.P. Detection and correction of block-level data corruption in fault-tolerant data-storage systems
US8225325B2 (en) * 2008-06-06 2012-07-17 Apple Inc. Multi-dimensional thread grouping for multiple processors
US8150031B2 (en) 2008-12-19 2012-04-03 Intel Corporation Method and apparatus to perform redundant array of independent disks (RAID) operations
US8296515B1 (en) 2009-05-22 2012-10-23 Nvidia Corporation RAID-6 computation system and method
KR101241976B1 (ko) 2011-02-17 2013-03-11 인하대학교 산학협력단 Ssd 기반 저장장치
US8683296B2 (en) 2011-12-30 2014-03-25 Streamscale, Inc. Accelerated erasure coding system and method
EP2767904B1 (en) * 2013-02-18 2018-07-04 Hybridserver Tec IP GmbH Method, processing modules and system for executing an executable code
US9600365B2 (en) * 2013-04-16 2017-03-21 Microsoft Technology Licensing, Llc Local erasure codes for data storage
US9405623B2 (en) 2013-09-25 2016-08-02 Xyratex Technology Limited Method of, and apparatus for, layout rectification of erasure encoded storage systems
KR102210996B1 (ko) * 2014-01-03 2021-02-02 삼성전자주식회사 프로세서 및 프로세서 제어 방법
US9647690B2 (en) * 2014-07-23 2017-05-09 Raidix Corporation Systems and methods for error correction coding
KR102279027B1 (ko) * 2014-12-03 2021-07-19 삼성전자주식회사 멀티 스레드를 실행하는 방법 및 장치
US9116833B1 (en) * 2014-12-18 2015-08-25 Igneous Systems, Inc. Efficiency for erasure encoding
US9501353B2 (en) * 2015-01-28 2016-11-22 Quantum Corporation Erasure code prioritization
KR101616347B1 (ko) 2015-04-16 2016-05-13 인하대학교산학협력단 범용 그래픽 프로세서 기반 클라우드 스토리지의 소거 코딩 방법
CN104850504B (zh) 2015-05-26 2017-12-22 华中科技大学 一种加速基于xor的raid‑6编解码过程的方程并行计算方法
CN104850468B (zh) 2015-05-31 2018-04-27 上海交通大学 基于校验矩阵的纠删码解码方法
US9985654B1 (en) * 2016-04-14 2018-05-29 Xilinx, Inc. High-throughput low-latency erasure error correction in an integrated circuit

Also Published As

Publication number Publication date
US10230398B2 (en) 2019-03-12
US20180054217A1 (en) 2018-02-22
KR20180020874A (ko) 2018-02-28

Similar Documents

Publication Publication Date Title
KR102168960B1 (ko) 이레이저 코드 데이터 보호 및 복구 계산 시스템 및 방법
US10146447B1 (en) Mapped RAID (redundant array of independent disks) in a data storage system with drive extents allocated to individual RAID extents from individual sub-groups of storage made up of ranges of logical block addresses defined across a group of hard disk drives
Rashmi et al. Having Your Cake and Eating It Too: Jointly Optimal Erasure Codes for {I/O}, Storage, and Network-bandwidth
US10545865B2 (en) Systems and methods for implementing low-latency lookup circuits using sparse hash functions
Corbett et al. Row-diagonal parity for double disk failure correction
US10248326B2 (en) Incremental erasure coding for storage systems
CN112292816A (zh) 处理核心数据压缩和存储系统
US7356731B2 (en) Uniform and symmetric double failure correcting technique for protecting against two disk failures in a disk array
JP4935367B2 (ja) Raid装置及びガロア体の積演算処理方法
US7797612B2 (en) Storage accelerator
US20170083603A1 (en) Co-derived data storage patterns for distributed storage systems
KR101522509B1 (ko) 갈루아 필드 산술을 사용하는 효율적이고 스케일링가능한 순환 중복 검사 회로
US10013359B2 (en) Redundant disk array storage system and method using heterogeneous disks and a lookup table
US10509676B1 (en) Techniques for optimizing entropy computations
US10296252B1 (en) Reducing drive extent allocation changes while splitting a group of storage drives into partnership groups in response to addition of a storage drive to an array of storage drives in a data storage system that uses mapped RAID (redundant array of independent disks) technology
US10761761B2 (en) Method and device for managing storage system
US7346831B1 (en) Parity assignment technique for parity declustering in a parity array of a storage system
CN112948279A (zh) 管理存储系统中的访问请求的方法、设备和程序产品
US11188247B2 (en) Method, device, and computer program product for managing storage system
CN112988051A (zh) 存储系统和存储管理方法
Sze Schönhage-strassen algorithm with mapreduce for multiplying terabit integers
US11422909B2 (en) Method, device, and storage medium for managing stripe in storage system
WO2020029423A1 (zh) 一种修复二进制阵列码校验矩阵的构造方法及修复方法
JP2002328814A (ja) パリティ演算を実行する方法
US11513681B2 (en) Method, device, and computer program product for managing storage system

Legal Events

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