KR20190017630A - 분산 소거 코딩을 위한 시스템 및 방법 - Google Patents

분산 소거 코딩을 위한 시스템 및 방법 Download PDF

Info

Publication number
KR20190017630A
KR20190017630A KR1020180048726A KR20180048726A KR20190017630A KR 20190017630 A KR20190017630 A KR 20190017630A KR 1020180048726 A KR1020180048726 A KR 1020180048726A KR 20180048726 A KR20180048726 A KR 20180048726A KR 20190017630 A KR20190017630 A KR 20190017630A
Authority
KR
South Korea
Prior art keywords
storage device
data
storage
parity code
previous
Prior art date
Application number
KR1020180048726A
Other languages
English (en)
Other versions
KR102279723B1 (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 KR20190017630A publication Critical patent/KR20190017630A/ko
Application granted granted Critical
Publication of KR102279723B1 publication Critical patent/KR102279723B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • G06F11/108Parity data distribution in semiconductor storages, e.g. in SSD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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
    • 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

Abstract

분산 소거 코딩을 위한 시스템 및 방법이 제공된다. 복수의 스토리지 장치들은, 데이터를 스토리지 장치들에 분산시키고, 데이터 보호를 제공하는 중재 중앙 컨트롤러 없이, 하나 이상의 호스트 컴퓨터들과 직접 연결된다. 패리티 코드들은 하나 이상의 전용 스토리지 장치들에 저장되거나, 복수의 스토리지 장치들로 분산된다. 스토리지 장치가 쓰기 커맨드를 수신한 경우, 부분 패리티 코드가 계산되고, 쓰여진 데이터에 대한 패리티 코드가 다른 스토리지 장치에 있다면, 부분 패리티 코드를 사용하여 패리티 코드를 업데이트하도록, 부분 패리티 코드가 다른 스토리지 장치에 전송된다.

Description

분산 소거 코딩을 위한 시스템 및 방법{SYSTEM AND METHOD FOR DISTRIBUTED ERASURE CODING}
본 발명에 따른 실시예들의 하나 이상의 양상들은 데이터 스토리지에 관한 것으로, 좀 더 구체적으로 분산 소거 코딩을 위한 시스템 및 방법에 관한 것이다.
중복 데이터 저장 시스템은 RAID(Redundant array of independent disks)로 언급될 수 있는 복수의 스토리지 장치들에 걸쳐 데이터를 분산시킬 수 있다. RAID 어레이는 쓰기 커맨드들을 수신하고, 패리티 코드들을 생성하고, 패리티 코드들과 함께 RAID 어레이에 쓰여질 데이터를 저장하는 RAID 컨트롤러로 언급되는 중앙 컨트롤러에 의하여 제어될 수 있다. 데이터 손실 시에, RAID 컨트롤러는 패리티 코드들로부터 손실된 데이터를 재생성할 수 있다.
이러한 시스템에서, RAID 컨트롤러는 많은 비용이 들고, 효율성을 감소시키는 병목 현상을 나타낼 수 있다.
본 발명은 병목 현상에 의한 효율성 저하를 방지하고, 손실된 데이터를 복구할 수 있는 데이터를 저장하는 시스템 및 방법을 제공한다.
본 발명의 실시예들의 양상들은 분산 소거 코딩을 위한 시스템 및 방법으로 나타난다. 복수의 스토리지 장치들은, 데이터를 스토리지 장치들에 분산시키고 데이터 보호를 제공하는 중재 중앙 컨트롤러 없이, 하나 이상의 호스트 컴퓨터들과 직접 연결된다. 패리티 코드들은 하나 이상의 전용 스토리지 장치들에 저장되거나, 복수의 스토리지 장치들로 분산된다. 스토리지 장치가 쓰기 커맨드를 수신한 경우, 부분 패리티 코드가 계산되고, 쓰여진 데이터에 대한 패리티 코드가 다른 스토리지 장치에 있다면, 부분 패리티 코드를 사용하여 패리티 코드를 업데이트하도록, 부분 패리티 코드가 다른 스토리지 장치에 전송된다.
본 발명의 실시예에 따르면, 스토리지 장치 어레이에 데이터를 저장하는 방법이 제공되며, 이러한 방법은, 스토리지 장치 어레이의 제1 스토리지 장치가 호스트 컴퓨터로부터, 제1 스토리지 장치의 논리 블록 어드레스에서 제1 스토리지 장치에 쓰여지는 쓰기 데이터를 포함하는 쓰기 커맨드를 수신하는 단계; 제1 스토리지 장치가 논리 블록 어드레스에 저장된 이전 데이터를 검색하는 단계; 제1 스토리지 장치가 이전 데이터 및 쓰기 데이터로부터, 부분 패리티 코드를 계산하는 단계; 스토리지 장치 어레이의 제2 스토리지 장치가 부분 패리티 코드와 함께 이전 패리티 코드를 평가하여 새로운 패리티 코드를 생성하는 단계; 및 스토리지 장치 어레이의 제3 스토리지 장치가 새로운 패리티 코드를 저장하는 단계를 포함하되, 부분 패리티 코드는, 이전 데이터를 포함하고 스토리지 장치 어레이 모두에 걸쳐 확장되는 데이터의 이전 가상 스트라이프에 대한 데이터 보호 코드인, 이전 패리티 코드와 함께 평가되는 경우, 스토리지 장치 어레이 모두에 걸쳐 확장되고 이전 데이터 대신에 쓰기 데이터를 포함하는 데이터의 새로운 가상 스트라이프에 대한 데이터 보호 코드인, 상기 새로운 패리티 코드를 발생시키는 수치이다.
일례로, 제3 스토리지 장치는 제2 스토리지 장치이다.
일례로, 상기 방법은, 제1 스토리지 장치가, 제2 스토리지 장치의 식별자를 계산하는 단계; 제2 스토리지 장치의 식별자가 제1 스토리지 장치의 식별자와 다른지 판별하는 단계; 및 제2 스토리지 장치의 식별자가 제1 스토리지 장치의 식별자와 다를 경우, 부분 패리티 코드를 포함하는 패리티 메시지를 제2 스토리지 장치에 전송하는 단계를 포함한다.
일례로, 쓰기 커맨드는 네임 스페이스 식별자를 더 포함하고, 제2 스토리지 장치의 식별자를 계산하는 단계는, 네임 스페이스 식별자에 기초하여 네임 스페이스 오프셋 테이블로부터 네임 스페이스 오프셋을 획득하는 단계; 및 네임 스페이스 오프셋 및 논리 블록 어드레스의 합으로 가상 스트라이프 식별자를 계산하는 단계를 포함한다.
일례로, 제2 스토리지 장치의 식별자를 계산하는 단계는, 제1 스토리지 장치가, 제1 스토리지 장치의 제1 테이블로부터 스트라이드를 검색하는 단계; 및 가상 스트라이프 식별자 modulo 스트라이드 사이즈를 계산하는 단계를 포함한다.
일례로, 패리티 메시지를 제2 스토리지 장치에 전송하는 단계는, 제1 스토리지 장치가, 제1 스토리지 장치의 제2 테이블로부터 제2 스토리지 장치의 어드레스를 검색하는 단계; 및 제2 스토리지 장치의 어드레스에 패리티 메시지를 전송하는 단계를 포함한다.
일례로, 제1 스토리지 장치는 이더넷 스토리지 장치이고, 제2 스토리지 장치는 이더넷 스토리지 장치이고, 제2 스토리지 장치의 어드레스는 제2 스토리지 장치의 이더넷 어드레스이다.
일례로, 상기 방법은, 스토리지 시스템 관리 회로가, 제1 스토리지 장치의 제2 테이블에 제2 스토리지 장치의 어드레스를 저장하는 단계를 포함한다.
일례로, 상기 방법은, 스토리지 시스템 관리 회로가, 제1 테이블에 스트라이드 사이즈를 저장하는 단계를 포함한다.
일례로, 제1 스토리지 장치는 PCI(Peripheral component interconnect) 익스프레스 스위치에 연결되고, 제2 스토리지 장치는 PCI 익스프레스 스위치에 연결되고, 제2 스토리지 장치의 어드레스는 제2 스토리지 장치의 PCI 익스프레스 어드레스이다.
일례로, 이전 패리티 코드 및 새로운 패리티 코드 각각은 RAID 4, RAID 5, RAID 6, 및 소거 코드 데이터 보호 시스템들로 이루어진 그룹으로부터 선택된 데이터 보호 시스템에 이용되는 데이터 보호 코드이다.
일례로, 상기 방법은, 제1 스토리지 장치의 페일 또는 분리 시에, 스토리지 시스템 관리 회로가, 스토리지 인터페이스 스위치를 재구성하여, 제1 스토리지 장치로 어드레스된 스토리지 커맨드들을 스토리지 시스템 관리 회로로 전송시키는 단계; 및 수신된 스토리지 커맨드에 응답하여, 스토리지 시스템 관리 회로가 스토리지 인터페이스 스위치를 통하여, 제1 스토리지 장치가 존재하고 올바르게 동작한다면 전송하는 것과 동일한 커맨드 완료를 전송하는 단계를 포함한다.
일례로, 상기 방법은, 스토리지 시스템 관리 회로가, 제1 스토리지 장치에 이전에 저장된 데이터를 복구하는 단계; 및 복구된 데이터를 제2 스토리지 장치에 저장하는 단계를 더 포함한다.
일례로, 상기 방법은, 스토리지 시스템 관리 회로가, 제1 스토리지 장치의 페일 또는 분리 시에, 스토리지 시스템 관리 회로가, 스토리지 인터페이스 스위치를 재구성하여, 제1 스토리지 장치로 어드레스된 스토리지 커맨드들을 제2 스토리지 장치로 전송시키는 단계; 및 수신된 스토리지 커맨드에 응답하여, 제2 스토리지 장치가, 스토리지 인터페이스 스위치를 통하여, 제1 스토리지 장치가 존재하고 올바르게 동작한다면 전송하는 것과 동일한 커맨드 완료를 전송하는 단계를 포함한다.
일례로, 상기 방법은 제1 스토리지 장치에 분리 페일의 발생 및 읽기 커맨드의 수신 시에, 제1 스토리지 장치가, 분리 페일에 의하여 영향을 받은 데이터를 복구하는 단계; 및 읽기 커맨드에 응답하여, 제1 스토리지 장치가, 스토리지 인터페이스 스위치를 통하여, 분리 페일이 발생하지 않았다면 제1 스토리지 장치가 전송하는 것과 동일한 커맨드 완료를 전송하는 단계를 포함한다.
일례로, 상기 방법은 제1 스토리지 장치에 분리 페일의 발생 및 읽기 커맨드의 수신 시에, 스토리지 시스템 관리 회로가, 분리 페일에 의하여 영향을 받은 데이터를 복구하는 단계; 및 읽기 커맨드에 응답하여, 스토리지 시스템 관리 회로가, 스토리지 인터페이스 스위치를 통하여, 분리 페일이 발생하지 않았다면 제1 스토리지 장치가 전송하는 것과 동일한 커맨드 완료를 전송하는 단계를 포함한다.
본 발명의 실시예에 따르면, 스토리지 장치 어레이를 포함하되, 데이터를 저장하는 시스템이 제공되며, 이러한 시스템은, 스토리지 장치 어레이의 제1 스토리지 장치가 호스트 컴퓨터로부터, 제1 스토리지 장치의 논리 블록 어드레스에서 제1 스토리지 장치에 쓰여지는 쓰기 데이터를 포함하는 쓰기 커맨드를 수신하고; 제1 스토리지 장치가 논리 블록 어드레스에 저장된 이전 데이터를 검색하고, 제1 스토리지 장치가, 이전 데이터 및 쓰기 데이터로부터 부분 패리티 코드를 계산하고; 스토리지 장치 어레이의 제2 스토리지 장치가 부분 패리티 코드와 함께 이전 패리티 코드를 평가하여 새로운 패리티 코드를 생성하고; 스토리지 장치 어레이의 제3 스토리지 장치가 새로운 패리티 코드를 저장하도록 구성되되, 부분 패리티 코드는, 이전 데이터를 포함하고 스토리지 장치 어레이 모두에 걸쳐 확장되는 데이터의 이전 가상 스트라이프에 대한 데이터 보호 코드인, 이전 패리티 코드와 함께 평가되는 경우, 스토리지 장치 어레이 모두에 걸쳐 확장되고 이전 데이터 대신에 쓰기 데이터를 포함하는 데이터의 새로운 가상 스트라이프에 대한 데이터 보호 코드인, 상기 새로운 패리티 코드를 발생시키는 수치이다.
일례로, 제3 스토리지 장치는 제2 스토리지 장치이다.
일례로, 시스템은 부분 패리티 코드를 포함한다.
일례로, 제2 스토리지 장치의 식별자를 계산하는 단계는, 제1 스토리지 장치가, 제1 스토리지 장치의 제1 테이블로부터 스트라이드를 검색하는 단계; 및 가상 스트라이프 식별자 modulo 스트라이드 사이즈를 계산하는 단계를 포함한다.
일례로, 패리티 메시지를 제2 스토리지 장치에 전송하는 단계는, 제1 스토리지 장치가, 제1 스토리지 장치의 제2 테이블로부터 제2 스토리지 장치의 어드레스를 검색하는 단계; 및 제2 스토리지 장치의 어드레스에 패리티 메시지를 전송하는 단계를 포함한다.
일례로, 제1 스토리지 장치는 이더넷 스토리지 장치이고, 제2 스토리지 장치는 이더넷 스토리지 장치이고, 제2 스토리지 장치의 어드레스는 제2 스토리지 장치의 이더넷 어드레스이다.
일례로, 시스템은 제1 스토리지 장치의 제2 테이블에 제2 스토리지 장치의 어드레스를 저장하도록 구성되는 스토리지 시스템 관리 회로를 포함한다.
일례로, 제1 스토리지 장치는 PCI(peripheral component interconnect) 익스프레스 스위치에 연결되고, 제2 스토리지 장치는 PCI 익스프레스 스위치에 연결되고, 제2 스토리지 장치의 어드레스는 제2 스토리지 장치의 PCI 익스프레스 어드레스이다.
일례로, 이전 패리티 코드 및 새로운 패리티 코드 각각은 RAID 4, RAID 5, RAID 6, 및 소거 코드 데이터 보호 시스템들로 이루어진 그룹으로부터 선택된 데이터 보호 시스템에 이용되는 데이터 보호 코드이다.
본 발명의 실시예에 따르면, 데이터를 저장하는 시스템이 제공되되, 스토리지 장치 어레이; 및 스토리지 시스템 관리 수단들을 포함하며, 이러한 시스템은, 스토리지 장치 어레이의 제1 스토리지 장치가 호스트 컴퓨터로부터, 제1 스토리지 장치의 논리 블록 어드레스에서 제1 스토리지 장치에 쓰여지는 쓰기 데이터를 포함하는 쓰기 커맨드를 수신하고; 제1 스토리지 장치가 논리 블록 어드레스에 저장된 이전 데이터를 검색하고, 제1 스토리지 장치가, 이전 데이터 및 쓰기 데이터로부터 부분 패리티 코드를 계산하고; 스토리지 장치 어레이의 제2 스토리지 장치가 부분 패리티 코드와 함께 이전 패리티 코드를 평가하여 새로운 패리티 코드를 생성하고; 스토리지 장치 어레이의 제3 스토리지 장치가 새로운 패리티 코드를 저장하도록 구성되되, 부분 패리티 코드는, 이전 데이터를 포함하고 스토리지 장치 어레이 모두에 걸쳐 확장되는 데이터의 이전 가상 스트라이프에 대한 데이터 보호 코드인, 이전 패리티 코드와 함께 평가되는 경우, 스토리지 장치 어레이 모두에 걸쳐 확장되고 이전 데이터 대신에 쓰기 데이터를 포함하는 데이터의 새로운 가상 스트라이프에 대한 데이터 보호 코드인, 상기 새로운 패리티 코드를 발생시키는 수치이다.
일례로, 스토리지 시스템 관리 수단들은 스토리지 장치들 각각에 다른 스토리지 장치의 어드레스를 저장하도록 구성된다.
본 발명에 따른 데이터를 저장하는 시스템 및 방법은 병목 현상에 의한 효율성 저하를 방지하고, 손실된 데이터를 복구할 수 있다.
도 1은 본 발명의 실시예에 따른 스토리지 시스템의 개략도이다.
도 2a는 본 발명의 실시예에 따른 보호 그룹에 대한 데이터 및 패리티의 레이아웃 다이어그램이다.
도 2b는 본 발명의 실시예에 따른 보호 그룹에 대한 데이터 및 패리티의 레이아웃 다이어그램이다.
도 3은 본 발명의 실시예에 따른 스토리지 시스템의 스토리지 맵이다.
도 4는 본 발명의 실시예에 따른 패리티 메시지의 개략도이다.
도 5는 본 발명의 실시예에 따른 초기화 과정에 대한 블록도이다.
도 6은 본 발명의 실시예에 따른 데이터 쓰기 동작에 대한 순서도이다.
도 7은 본 발명의 실시예에 따른 패리티 업데이트 동작에 대한 순서도이다.
도 8은 본 발명의 실시예에 따른 RAID 4에 대한 데이터 및 패리티의 레이아웃 다이어그램이다.
도 9는 본 발명의 실시예에 따른 RAID 5에 대한 데이터 및 패리티의 레이아웃 다이어그램이다.
도 10은 본 발명의 실시예에 따른 RAID 6에 대한 데이터 및 패리티의 레이아웃 다이어그램이다.
도 11은 본 발명의 실시예에 따른 소거 코드 데이터 보호에 대한 데이터 및 패리티 레이아웃 다이어그램이다.
도 12는 본 발명의 실시예에 따른 페일 복구 동작에 대한 순서도이다.
도 13은 본 발명의 실시예에 따른 페일 복구 동작에 대한 순서도이다.
첨부된 도면들과 함께 아래에서 진술되는 상세한 설명은 본 발명에 따라 제공되는 분산 소거 코딩을 위한 시스템 및 방법의 예시적인 실시예들에 대한 설명으로 의도되고, 단지 본 발명이 구성되거나 이용될 수 있는 형식들을 나타내는 것으로 의도되지 않는다. 상세한 설명은 설명된 실시예들과 함께 본 발명의 특징들을 진술한다. 그러나, 동일하거나 동등한 기능들 및 구조들이, 또한 본 발명의 본질 및 범위 내에서 포괄되는 것으로 의도되는 다른 실시예들에 의하여 달성될 수 있음이 이해될 것이다. 여기에서 달리 명시되지 않는 한, 같은 참조 번호들은 같은 구성 요소들 또는 특징들을 나타내는 것으로 의도된다.
도 1을 참조하면, 일부 실시예들에서, 이더넷 SSD(Ethernet solid state drive) 섀시(110)에 구현되는 스토리지 시스템은 (예를 들어, 24개 또는 48개) (즉, 복수의) 이더넷 SSD들의 어레이를 포함하되, 이더넷 SSD들 각각이 예를 들어 이더넷 스위치와 같은 스토리지 인터페이스 스위치에 연결된다. 이더넷 SSD들 각각은, 베이스보드 관리 컨트롤러(Baseboard management controller, BMC)와 같은, (더 구체적으로 후술될 프로세싱 회로일 수 있는) 스토리지 시스템 관리 회로와 연결될 수 있다. 이더넷 SSD들은 미드플레인(midplane) 및 PCI 익스프레스(Peripheral component interconnect express, PCIe) 스위치를 통하여 베이스보드 관리 컨트롤러와 연결될 수 있다. 이더넷 SSD들은 원격 DAS(Direct attached storage) 구성과 연결될 수 있으며, 이더넷 SSD 각각은 IO 동작들을 위한 다른 이더넷 SSD들에 독립적이다. 이러한 구성에서, RAID 컨트롤러의 잠재적인 병목 현상이 회피될 수 있다. 나아가, 도 1의 시스템은 원칙적으로, 다수의 이더넷 SSD들 (예를 들어, 256개의 이더넷 SSD들)을 수용 가능하다.
이더넷 SSD 각각은 비휘발성 메모리 (예를 들어, 플래시 메모리), 버퍼, 및 프로세싱 회로일 수 있는 컨트롤러를 포함할 수 있으며, 더욱 구체적으로 후술된다. 컨트롤러는 호스트 컴퓨터와 인터페이스될 수 있고, 데이터의 저장을 제외한 이더넷 SSD의 모든 기능들을 수행할 수 있으며, 데이터의 저장은 버퍼 및 비휘발성 메모리에 의하여 수행될 수 있다. 버퍼는 휘발성 메모리일 수 있다. 여기에서 사용되는 “스토리지 인터페이스 스위치”는 호스트 컴퓨터로 하여금 각각의 이더넷 SSD들과 상호작용하여, 예를 들어 이더넷 SSD들과 커맨드들 및 커맨드 완료들을 교환하게 하는 스위치이다
(여러 개일 수 있는) 어플리케이션(120)은, 어플리케이션이 실행되고 있는 호스트 컴퓨터의 동작 시스템의 파일 시스템(130)을 통하여, 그리고 호스트에 인스턴스화된(instantiated) NVMe-of(Nonvolatile Memory Express over Fabrics) 드라이버를 통하여, 스토리지 시스템과 상호작용할 수 있다. 호스트는 스토리지 시스템에 의하여 제공된 섀시 레벨의 데이터 보호에 어그노스틱(agnostic)될 수 있다. (예를 들어, 데이터 보호의 구현은 호스트로부터 숨겨질 수 있으며, 호스트는 오직 신뢰할 수 있는 스토리지 시스템만을 인지할 수 있고, 신뢰할 수 있는 스토리지 시스템은 변화하는 성능을 가질 수 있다. (예를 들어, 데이터 복구 동작들이 발생될 경우, 성능이 감소된다.)) 분리된 드라이버는 이더넷 SSD 각각을 위한 호스트에 인스턴스화될 수 있다. 드라이버 인스턴스(140)는, 이더넷 SSD로의 모든 접근이 드라이버 인스턴스(140) 각각을 통하여 이루어질 수 있다는 의미에서, 그리고 호스트에 대한 드라이버 인스턴스들(140)과 시스템의 이더넷 SSD들 사이에 1 대 1 관계가 있을 수 있다는 의미에서, 이더넷 SSD를 “소유”할 수 있다. 이더넷 SSD 각각은 자체의 네임 스페이스들을 가질 수 있다. 스토리지 시스템은 RAID 4, RAID 5, RAID 6, 및 소거 코딩(Erasure Coding) (또는 “소거 코드 데이터 보호”)을 포함하는 임의의 다양한 보호 모드들을 구현하도록 구성될 수 있다.
도 2a 및 도 2b를 참조하면, 데이터 보호 시스템은 여기에서 “가상 스트라이프들”로 언급되는 데이터의 유닛들을 보호할 수 있다. 가상 스트라이프 각각에 번호 또는 “식별자”가 할당된다. 가상 스트라이프 각각은 데이터 및 패리티 코드들을 포함한다. 여기에서 사용되는 “패리티 코드”는 데이터와 함께 저장되는 중복 데이터이고, (예를 들어, 페일된 이더넷 SSD로부터 유발된 저장된 데이터의 손실을 포함하는) 저장된 데이터에 대한 에러 또는 소거의 경우에 이러한 데이터는 패리티 코드로부터 복구될 수 있다. 가상 스트라이프 각각은 임의의 이더넷 SSD의 페일이 복구할 수 없는 데이터의 손실을 유발시키지 않도록, 복수의 이더넷 SSD들에 걸쳐 분산된다.
도 2a 및 도 2b의 실시예에서, n+1 개의 이더넷 SSD들은 보호 그룹의 일부이고, 이들은 도시된 바와 같이, 0에서 n까지의 번호가 부여된 (이더넷 SSD 섀시(110))의 슬롯들(210)에 인스톨된다. 스토리지 시스템 (및/또는 이더넷 SSD 섀시(110))은 하나 이상의 보호 그룹들을 포함할 수 있다. 이더넷 SSD 각각은 블록들(220) 단위로 스토리지를 제공하며, 각각의 블록(220)은 도 2a 및 도 2b에서 각각의 직사각형으로 나타난다. 블록들(220)의 사이즈들은 프로그램될 수 있고, 각각의 블록(220)은 예를 들어, 512 바이트, 1024 바이트, 또는 4096 바이트로 이루어질 수 있다. 가상 스트라이프 각각은 이더넷 SSD들 각각으로부터 하나의 블록(220)을 포함할 수 있는데, 예를 들어, 가상 스트라이프 0은 슬롯 0의 이더넷 SSD로부터 블록 D0을, 그리고 슬롯 1의 이더넷 SSD로부터 블록 D0 등을 포함하고, 가상 스트라이프 2는 (도시된 바와 같이) 슬롯 0의 이더넷 SSD로부터 블록 D2를, 그리고 슬롯 1의 이더넷 SSD로부터 블록 D2 등을 포함하는 것과 같다.
패리티 데이터(P0, P1 등)는 도 2a에 도시된 바와 같이, (“고정 패리티”로 언급될 수 있는 배열로) 슬롯 n의 이더넷 SSD에 저장되거나, 도 2b에 도시된 바와 같이, 패리티 데이터는 (“순환 패리티”로 언급될 수 있는 배열로) 이더넷 SSD들을 통해 순환하는 슬롯 및 블록(220)에 저장될 수 있다. 순환 패리티 배열에서, 슬롯 n의 이더넷 SSD는 대체된 데이터 플레인으로 작동할 수 있고, 이더넷 SSD가 통상적으로 저장했던 데이터를 패리티 코드에 대한 블록(220)에 대신 저장한 결과로, “대체된” 데이터를 저장할 수 있다. 가상 스트라이프들은 “스트라이드”로 언급되는 그룹들로 그룹화될 수 있다. 스트라이드 각각의 사이즈는 n일 수 있고, 순환 패리티 배열에서, 패리티 데이터의 위치는 추가적인 스트라이드 각각에서 반복될 수 있다. (예를 들어, 패리티 데이터가 제2 드라이브(슬롯 1)에서, 스트라이드 0의 제2 가상 스트라이프(가상 스트라이프 1) 및 스트라이드 1의 제2 가상 스트라이프(가상 스트라이프 n+1)에 있을 수 있다.)
새로운 데이터가 쓰여질 경우에, 패리티 코드들의 계산 및 업데이트의 책임은 예를 들어, 순환 패리티가 채택된다면 패리티 데이터에 대한 스토리지와 일치할 수 있는 순환 배열에서 SSD들 사이에 분산될 수 있다. (그리고, 고정 패리티가 채택된다면, 패리티 데이터가 패리티 플레인에 저장되나, 이러한 책임은 순환 배열과 동일하게 배정될 수 있다.) 예를 들어, 순환 패리티가 채택된다면, 슬롯 2의 이더넷 SSD는 (i) 패리티 데이터(P2)를 업데이트하고, (ii) 패리티 데이터(P2)를 저장할 책임이 있을 수 있다. 고정 패리티가 채택된다면, 슬롯 2의 이더넷 SSD는 패리티 데이터(P2)를 업데이트할 책임이 있고, 슬롯 n(패리티 플레인)의 이더넷 SSD는 패리티 데이터(P2)를 저장할 책임이 있을 수 있다. 임의의 스트라이프에 대하여 패리티 코드들을 계산 및 업데이트할 책임이 있는 이더넷 SSD는 스트라이프에 대한 “D/P 이더넷 SSD” 또는 “D/P eSSD”로 언급될 수 있다. 패리티 코드들을 계산 및 업데이트할 책임이 있는 이더넷 SSD의 식별자 (또는 슬롯 번호)는 임의의 가상 스트라이프에 대하여 (가상 스트라이프 식별자) modulo (스트라이드 사이즈(n))으로 계산될 수 있다.
도 3을 참조하면, 이더넷 SSD들 각각은 하나 이상의 (도 3에서 “NS0”, “NS1” 등의 라벨이 부여된) 네임 스페이스들을 관리할 수 있다. 네임 스페이스 각각은 네임 스페이스 오프셋 테이블에서, 네임 스페이스가 시작하는 이더넷 SSD 내의 위치를 결정하는 오프셋과 연관될 수 있다. 네임 스페이스에 대한 쓰기 동작이 수행될 경우, 네임 스페이스를 호스팅하는 이더넷 SSD들은, 네임 스페이스 오프셋에 쓰기 동작의 논리 블록 어드레스(Logic block address, LBA)를 추가함으로써, 쓰기가 수행되는 가상 스트라이프를 계산할 수 있다.
가상 스트라이프 내의 데이터가 (예를 들어, 쓰여질 데이터 또는 “쓰기 데이터”를 포함하는 쓰기 커맨드를 실행한 결과로) 변경된 경우, 가상 스트라이프에 대한 패리티 코드는 이하와 같이 다시 계산될 수 있다. 각각의 패리티 코드는 가상 스트라이프에서의 모든 데이터에 대한 함수일 수 있다. 예를 들어, 패리티 코드(P)는 가상 스트라이프에서의 모든 데이터의 비트간 배타적 논리합(bit-wise exclusive OR)일 수 있다.
P = D0 + D1 + D2 + ... + Dn-1
“+”는 비트간 배타적 논리합 동작을 나타내고, Di는 데이터이다. 데이터 블록들 중 하나가 변화된다면, 예를 들어, D1은 D1'로 대체되고, 패리티 코드는 새로운 값 P'로 업데이트된다.
P' = D0 + D1' + D2 + ... + Dn-1
이러한 변화를 만들기 위하여, 부분 패리티 코드는 이전 패리티 코드(P)에 계산 및 적용되어 새로운 패리티 코드(P')를 생성할 수 있다. 부분 패리티 코드는 이전 패리티 코드와 함께 평가되는 경우(예를 들어, 적절한 함수(예를 들어, 배타적 논리합(exclusive OR))를 사용하여 이전 패리티 코드와 결합된 경우), 새로운 패리티 코드를 생성하는 값이다. 개념적으로, 부분 패리티 코드는 (i) 패리티 코드로부터, 이전 데이터의 기여분을 제거하고, (ii) 패리티 코드에 새로운 데이터의 기여분을 추가한 효과를 갖는 값으로 간주될 수 있다. 이러한 개념은 상징적으로 이하와 같이 쓰여질 수 있다.
Delta D1 = fInverse(D1) + D1'
fInverse(D1)는 적절한 함수를 사용하여 이전 패리티 코드와 결합된 경우에, 이전 패리티 코드로부터 D1의 기여분을 제거한 값이다. 일단 부분 패리티 코드가 계산되면, 패리티 코드는 이하와 같이 업데이트 될 수 있다.
P' = P + Delta D1
exclusive OR 함수의 역은 exclusive OR 함수이다. 그 결과, 패리티 코드가 비트간 exclusive OR을 사용하여 계산된다면, fInverse(D1)=D1이다.
Delta D1 = D1 + D1'
쓰기 동작이 수행될 경우, 변경된 데이터를 저장하는 이더넷 SSD는 (i) 다른 드라이브가 변경된 데이터 블록에 대한 패리티 데이터를 업데이트할 책임이 있는 경우, (부분 패리티 코드를 포함하는) 패리티 메시지를 생성하고, 이를 다른 드라이브에 전송하거나, (ii) 그 자체가 패리티 데이터를 업데이트할 책임이 있는 경우, 패리티 데이터를 업데이트할 수 있다.
도 4는 패리티 메시지의 예시를 도시한다. 패리티 메시지는 가상 스트라이프 식별자(Virtual stripe identifier, VSID) (즉, 스트라이프 번호)를 포함하는 헤더, 및 부분 패리티 코드를 포함한다. 이더넷 SSD들은 PCIe 스위치 또는 이더넷 스위치(도 1)를 통한 사설 통신 채널을 통하여 패리티 메시지들을 서로에게 전송할 수 있다.
베이스보드 관리 컨트롤러는 시작 시에 스토리지 시스템의 이더넷 SSD 각각을 초기화할 수 있다. 아래의 표 1은 베이스보드 관리 컨트롤러가 초기화 동안에 이더넷 SSD들 각각에 쓸 수 있는 보호 구성 테이블의 포맷을 도시한다. 표 1은 각각의 필드가 나타낼 수 있는 다양한 값들을 도시하며, 나아가 아래의 테이블(표)들은 베이스보드 관리 컨트롤러가 테이블에 쓸 수 있는 값들의 예시를 도시한다.
보호 구성 테이블
파라미터 코멘트들
모드 RAID-4
RAID-5
RAID-6
소거 코드들 (EC)
 
패리티 코드# 1 to j 계산 및 저장을 위한 패리티 코드들의 번호
패리티 코드 식별자(ID)들 비트 벡터 [0:j-1] 인에이블된 패리티 코드/함수들의 리스트
패리티 위치 고정순환 전용 패리티 스토리지 (P eSSDs)
분산 패리티 스토리지 (D/P eSSDs)
스트라이드 0 to n 가상 스트라이프에 관여하는 eSSD들의 번호
가상 스트라이프# 1 to m 공지된 표준의 eSSD 사용자 용량
블록 사이즈 (바이트) 512, 4K, 8K, 16K +8, 및 +16 변화들이 가능함
슬롯 ID 0 to n-1  
도 5는 실시예에 따른 초기화 과정에 대한 순서도이다. 시작 시에, 베이스보드 관리 컨트롤러는, 510 단계에서 이더넷 SSD 섀시(110)의 모든 이더넷 SSD들을 스캔할 수 있고, 520 단계에서 데이터 보호 모드를 선택할 수 있고, 530 단계에서 보호 모드를 위한 파라미터들을 결정할 수 있고, 540 단계에서 이더넷 SSD 각각에 슬롯 식별자(ID) (또는 슬롯 번호) 각각을 프로그램하고, 550 단계에서 이더넷 SSD 각각에 보호 파라미터들을 프로그램하고, 560 단계에서 이더넷 SSD 각각에 어드레스 정보를 프로그램할 수 있다. 어드레스 정보는 이더넷 SSD의 이더넷 SSD 어드레스 테이블에 저장될 수 있고, 아래의 표 2의 정보를 (비어있는 셀들 각각에 삽입되는 적절한 어드레스들과 함께) 포함할 수 있다.
이더넷 SSD(eSSD) 어드레스 테이블
슬롯 ID 이더넷 어드레스 PCIe 어드레스 필요한 임의의 다른 전송 필드들
0      
1      
2      
       
       
n-1      
도 6의 순서도에 도시된 바와 같이 데이터 쓰기 동작이 진행될 수 있다. 605 단계에서 커맨드 실행이 시작되고, 610 단계에서 이더넷 SSD는 호스트 쓰기 데이터를 인출할 수 있고, 615 단계에서 이더넷 SSD는 호스트 쓰기 데이터를 지속시킨다. 여기에서 사용되는 데이터를 “지속시킨다”란 비휘발성 메모리 또는 파워 손실이 보호되는 메모리에 데이터를 저장함을 의미한다. 이후, 이더넷 SSD는 620 단계에서 동일한 네임 스페이스 논리 블록 어드레스로부터 이전 데이터를 인출하고, 필요하다면, 625 단계에서 이더넷 SSD는 이전 데이터에 역함수를 수행하고, 630 단계에서 이더넷 SSD는 부분 패리티 코드 (또는 코드들)를 계산 (또는 연산)하는데 사용되는 파라미터들을 보호 구성 테이블에서 검색하고, 635 단계에서 이더넷 SSD는 부분 패리티 코드 (또는 코드들)를 계산하고, 640 단계에서 이더넷 SSD는 D/P 이더넷 SSD의 슬롯 식별자를 계산한다. 이후, 645 단계에서 이더넷 SSD는 그 자체로 D/P 이더넷 SSD인지 판별한다. 그러하다면, 650 단계에서 이더넷 SSD는 패리티 블록을 업데이트하고, 655 단계에서 이더넷 SSD는 패리티 블록을 지속시키고, 660 단계에서 이더넷 SSD는 호스트에 쓰기 커맨드 완료를 전송한다. 쓰기 커맨드를 실행하는 이더넷 SSD가 그 자체로 D/P 이더넷 SSD가 아니라면, 이후, 665 단계에서 이더넷 SSD는 부분 패리티 메시지를 생성하고, 670 단계에서 이더넷 SSD는 부분 패리티 메시지를 D/P 이더넷 SSD에 전송하고, 675 단계에서 이더넷 SSD는 D/P 이더넷 SSD로부터의 확인을 기다리고, 660 단계에서, 이더넷 SSD는 호스트에 쓰기 커맨드 완료를 전송한다. 이러한 실시예에서, 이전 패리티 코드들의 인출 효율성은, D/P 이더넷 SSD가 캐시에서 패리티 코드들의 일부를 유지할 수 있으므로, 향상될 수 있다. 고정 패리티의 경우에, D/P 이더넷 SSD는 업데이트된 패리티 블록을, 저장을 위한 이더넷 SSD의 패리티 플레인에 전송할 수 있다. 고정 패리티에 대한 일부 실시예들에서, 각각의 이더넷 SSD가 수행하는 데이터 쓰기 동작을 위한 D/P 이더넷 SSD의 기능을 수행할 수 있다. (즉, 가상 스트라이프를 책임지는 전용 D/P 이더넷 SSD가 없을 수 있다.) 이러한 실시예에서, 데이터 쓰기 동작을 수행하는 이더넷 SSD는 부분 패리티 코드를 계산하고, 이더넷 SSD의 패리티 플레인으로부터 이전 패리티 블록을 인출하고, 패리티 블록을 업데이트하고, 업데이트된 패리티 블록을 저장을 위한 이더넷 SSD의 패리티 플레인에 전송할 수 있다.
패리티 업데이트 동작은 D/P 이더넷 SSD에 의하여 수행될 수 있고, 도 7에 도시된 바와 같이 진행될 수 있다. 710 단계에서, D/P 이더넷 SSD는 수신된 패리티 메시지로부터 가상 스트라이프 식별자를 추출한다. 이후, 730 단계에서, D/P 이더넷 SSD는 패리티 블록을 인출하고, 740 단계에서, D/P 이더넷 SSD는 패리티 블록을 업데이트하고, 750 단계에서, D/P 이더넷 SSD는 업데이트된 패리티 블록을 지속시키고, 760 단계에서, D/P 이더넷 SSD는 확인 메시지를 쓰기 커맨드를 실행하는 이더넷 SSD에 전송한다.
일부 실시예들에서, RAID 4는 도 8에 도시된 바와 같이 구현될 수 있다. RAID 4는 도시된 바와 같이 고정 패리티를 사용할 수 있다. 아래의 표 3은 RAID 4를 구현하기 위한 베이스보드 관리 컨트롤러에 의하여 이더넷 SSD 각각의 보호 구성 테이블에 프로그램될 수 있는 값들을 도시한다. 또한, 표 3은 이더넷 SSD 어드레스 테이블에 프로그램될 수 있는 예시적인 값들을 도시한다.
보호 구성 테이블
파라미터
모드 RAID-4
패리티 코드# 1
패리티 코드 ID들 0001
패리티 위치 고정(Fixed)
스트라이드 n
가상 스트라이프# m
블록 사이즈 512B
슬롯 ID 0
이더넷 SSD 어드레스 테이블
슬롯 ID 이더넷 어드레스 PCIe 어드레스 임의의 다른 전송 필드들
0 0x12345678
1 0x23456781
n-1 0x34567812
n 0x12345678
일부 실시예들에서, RAID 5는 도 9에 도시된 바와 같이 구현될 수 있다. RAID 5는 도시된 바와 같이 순환 패리티를 사용할 수 있다. 아래의 표 4는 RAID 5를 구현하기 위한 베이스보드 관리 컨트롤러에 의하여 이더넷 SSD 각각의 보호 구성 테이블에 프로그램될 수 있는 값들을 도시한다. 또한, 표 4는 스토리지 시스템에 다른 이더넷 SSD들의 이더넷 어드레스들을 제공하는 이더넷 SSD 어드레스 테이블에 프로그램될 수 있는 예시적인 값들을 도시한다. 이더넷 SSD 각각은, 예를 들어 쓰기 커맨드를 실행할 경우에 업데이트되는 패리티 코드들을 준비하는 경우에, 이러한 정보를 사용할 수 있다.
보호 구성 테이블
파라미터
모드 RAID-5
패리티 코드# 1
패리티 코드 ID들 0001
패리티 위치 분산(Distributed)
스트라이드 N
가상 스트라이프# M
블록 사이즈 512B
슬롯 ID 0
이더넷 SSD 어드레스 테이블
슬롯 ID 이더넷 어드레스 PCIe 어드레스 임의의 다른 전송 필드들
0 0x12345678
1 0x23456781
n-1 0x34567812
n 0x45678901
일부 실시예들에서, RAID 6은 도 10에 도시된 바와 같이 구현될 수 있다. RAID 6은 도시된 바와 같이, 스트라이프 당 두 개의 패리티 블록들과 함께, 그리고 대체된 데이터 블록들에 사용되는 두 개의 슬롯들과 함께, 순환 패리티를 사용할 수 있다. 아래의 표 5는 RAID 6을 구현하기 위한 베이스보드 관리 컨트롤러에 의하여 이더넷 SSD 각각의 보호 구성 테이블에 프로그램될 수 있는 값들을 도시한다. 또한, 표 5는 스토리지 시스템에 다른 이더넷 SSD들의 이더넷 어드레스들을 제공하는 이더넷 SSD 어드레스 테이블에 프로그램될 수 있는 예시적인 값들을 도시한다.
보호 구성 테이블
파라미터
모드 RAID-6
패리티 코드# 2
패리티 코드 ID들 0011
패리티 위치 분산(Distributed)
스트라이드 N
가상 스트라이프# M
블록 사이즈 512B
슬롯 ID 0
이더넷 SSD 어드레스 테이블
슬롯 ID 이더넷 어드레스 PCIe 어드레스 임의의 다른 전송 필드들
0 0x12345678
1 0x23456781
n-1 0x34567812
n 0x45678901
n+1 0x56789012
일부 실시예들에서, 소거 코드 데이터 보호는 도 11에 도시된 바와 같이 구현될 수 있다. 소거 코드 데이터 보호는 도시된 바와 같이, t개의 체계적인 입력 유닛들 및 스트라이프 당 n-t개의 패리티 코드 블록들과 함께, 고정 패리티를 사용할 수 있다. 아래의 표 6은 소거 코드 데이터 보호를 구현하기 위한 베이스보드 관리 컨트롤러에 의하여 이더넷 SSD 각각의 보호 구성 테이블에 프로그램될 수 있는 값들을 도시한다. 또한, 표 6은 스토리지 시스템에 다른 이더넷 SSD의 이더넷 어드레스들을 제공하는 이더넷 SSD 어드레스 테이블에 프로그램될 수 있는 예시적인 값들을 도시한다.
보호 구성 테이블
파라미터
모드 소거 코딩
패리티 코드# 3
패리티 코드 ID들 00111
패리티 위치 고정(Fixed)
스트라이드 8
가상 스트라이프# M
블록 사이즈 512B
슬롯 ID 0
이더넷 SSD 어드레스 테이블
슬롯 ID 이더넷 어드레스 PCIe 어드레스 임의의 다른 전송 필드들
0 0x12345678
1 0x23456781
10 0x34567812
도 12는 일부 실시예들에서, 분리 페일들로부터 복구하기 위한 방법에 대한 순서도를 도시한다. 여기에서 사용되는 “분리 페일(discrete failure)”은 이더넷 SSD로 하여금 동작을 계속하게 하나, 이더넷 SSD가 저장한 데이터의 일부를 성공적으로 읽지 못하도록 하는, 이더넷 SSD에서의 페일이다. 분리 에러들은 플래시 메모리 페이지 또는 블록의 페일로부터 유발되거나, 플래시 메모리에 의하여 채택될 수 있는 LDPC(low-density parity-check) 에러 정정 코드에 의하여 정정할 수 없는 메모리 에러들로부터 유발될 수 있다. 1205 단계에서, 이더넷 SSD는 페일을 검출하고, 1210 단계에서, 이더넷 SSD는 손실 데이터의 가상 스트라이프 ID를 결정한다. 이후, 1215 단계에서, 이더넷 SSD는 보호 구성 테이블로부터 데이터 복원을 위한 파라미터들을 검색하고, 1220 단계에서, 이더넷 SSD는 손실 데이터를 복구하는데 요구되는 이더넷 SSD들의 세트를 결정한다. 이후, 1225, 1230, 및 1235 단계에서, 이더넷 SSD는 손실 데이터를 복구하는데 요구되는 데이터를 모두 검색할 때까지, 이러한 이더넷 SSD들로부터 데이터를 반복적으로 요청한다. 이후, 1240 단계에서, 이더넷 SSD는 손실 데이터 블록을 계산하고, 1245 단계에서, 이더넷 SSD는 손실 데이터 블록을 지속시키고, 1250 단계에서, 적절하다면, 이더넷 SSD는 손실 데이터를 호스트에 전송한다. 다른 실시예들에서, 에러 복구는 베이스보드 관리 컨트롤러에서 대신 수행된다. 이러한 실시예에서, 페일에 의하여 영향을 받는 이더넷 SSD는 베이스보드 관리 컨트롤러에 알림을 제공하며, 베이스보드 관리 컨트롤러는 가상 스트라이프로부터 손실 데이터를 복구하는데 요구되는 데이터를 요청하고, 손실 데이터를 계산하고, 영향을 받은 이더넷 SSD에 복구된 데이터를 다시 쓴다.
[0078] 도 13은 일부 실시예들에서, 디스크 페일들로부터 복구하기 위한 방법에 대한 순서도를 도시한다. 디스크 페일들은 이더넷 SSD에서 중앙 하드웨어 페일에 의하여 유발되거나, 이더넷 SSD의 갑작스러운 제거에 의하여 유발될 수 있다. 일부 실시예들에서 복구는 도 13에 도시된 바와 같이, 베이스보드 관리 컨트롤러에 의하여 수행될 수 있다. 이더넷 SSD 각각은 핀이라는 존재를 가질 수 있으며, 이더넷 SSD의 제거는 핀이라는 존재와의 접촉 손실을 유발할 수 있으므로, 이더넷 SSD의 제거가 베이스보드 관리 컨트롤러에 알려진다.
1305 단계에서, 베이스보드 관리 컨트롤러는 페일 (또는 풀 아웃(pull out)된 이벤트)를 검출하고, 1310 단계에서, 베이스보드 관리 컨트롤러는 손실 데이터를 복구하는데 요구되는 이더넷 SSD의 세트를 결정한다. 이후, 1315 단계에서, 베이스보드 관리 컨트롤러는 보호 구성 테이블로부터 데이터 복원을 위한 파라미터들을 검색하고, 1320 단계에서, 베이스보드 관리 컨트롤러는 손실 데이터를 재건하도록 여분의(spare) 이더넷 SSD를 식별한다. 이후, 베이스보드 관리 컨트롤러는 두 개의 내포된 루프들을 포함하는 과정을 사용하여 데이터를 재건한다. 1325, 1330, 및 1335 단계를 포함하는 외부 루프는 모든 가상 스트라이프들이 복구될 때까지 (즉, 가상 스트라이프 각각의 손실 블록이 여분의 이더넷 SSD에서 복구될 때까지) 실행되고, 1340 및 1345 단계를 포함하는 내부 루프는 이러한 데이터를 저장하는 이더넷 SSD들 각각으로부터 재건을 위하여 요구되는 데이터를 읽도록 실행된다. 일단 외부 루프가 종료된다면 (그리고 손실 데이터가 재건된다면), 베이스보드 관리 컨트롤러는, 1350 단계에서, 여분의 이더넷 SSD를 보호 그룹에 추가하고, 1355 단계에서, 새롭게 추가된 이더넷 SSD를 호스트로 하여금 알 수 있게 한다.
복구 동작 동안, 필요에 따라 요청된 데이터를 복원함으로써 호스트로부터의 읽기 커맨드들에 응답하여, 그리고 (i) 손실 데이터가 복원되는 여분의 이더넷 SSD에 데이터를 쓰거나, (ii) 쓰기 커맨드에서의 데이터가, 진행중인 데이터 복구 과정에 의하여 복원되는 다른 이더넷 SSD들에 데이터 및/또는 패리티 코드들을 쓰게 함으로써 호스트로부터의 쓰기 커맨드들에 응답하여, 베이스보드 관리 컨트롤러는 이더넷 스위치를 다시 프로그램할 수 있고, 페일된 이더넷 SSD를 위한 프록시로 작동할 수 있다.
일부 실시예들에서, 베이스보드 관리 컨트롤러에 의한 복구는 여분의 이더넷 SSD로 넘겨진다. 베이스보드 관리 컨트롤러는 페일된 것 대신에 여분의 이더넷 SSD를 대체하고, 여분의 이더넷 SSD에 디스크 복구를 넘긴다. 새로운 이더넷 SSD는 백그라운드에서 복구된 데이터에 대한 모든 가상 스트라이프들을 만들고, 가상 스트라이프들로 향한 임의의 IO 동작들을 처리한다.
상술한 관점에서, 분산 소거 코딩을 위한 시스템 및 방법은 개시된다. 일부 실시예들에서, 복수의 스토리지 장치들은, 데이터를 스토리지 장치들에 분산시키고, 데이터 보호를 제공하는 중재 중앙 컨트롤러 없이, 직접 하나 이상의 호스트 컴퓨터들과 연결된다. 패리티 코드들은 하나 이상의 전용 스토리지 장치들에 저장되거나, 복수의 스토리지 장치들로 분산된다. 스토리지 장치가 쓰기 커맨드를 수신한 경우, 스토리지 장치는 부분 패리티 코드를 계산하고, 쓰여지는 데이터에 대한 패리티 코드가 다른 스토리지 장치에 있다면, 스토리지 장치는 부분 패리티 코드를 다른 스토리지 장치에 전송하고, 이러한 부분 패리티 코드를 사용하여 패리티 코드를 업데이트한다.
비록 여기에서 설명된 일부 실시예들은 이더넷 SSD들을 영구 저장 장치들로 채택하나, 본 발명의 다른 실시예들이 하드 디스크 드라이브들과 같은 다른 스토리지 장치들과 행하여질 수 있음이 이해될 것이다. 비록 가상 스트라이프가 일부 실시예들에서 보호 그룹에서의 복수의 이더넷 SSD들에 걸친 블록들의 세트로 구성된 것으로 설명되나, 블록들 각각의 논리 블록 어드레스가 동일한 가상 스트라이프는 더욱 일반적으로 보호 그룹에 걸쳐 분산되고 데이터 보호를 위한 중복 데이터(예를 들어, 패리티 코드들)를 포함하는, 데이터의 세트일 수 있다.
“프로세싱 회로” 용어는 여기에서 임의의 하드웨어, 펌웨어, 및 소프트웨어의 조합을 의미하도록 여기에서 사용되고, 데이터 또는 디지털 신호들을 처리하기 위하여 채택된다. 프로세싱 회로 하드웨어는 예를 들어, ASICs (application specific integrated circuits), 범용 또는 특수 목적의 CPUs(central processing units, DPSs(digital signal processors, GPUs(graphics processing units), 및 FPGAs(field programmable gate arrays)와 같은 프로그래머블 논리 장치들을 포함할 수 있다. 프로세싱 회로에서, 여기에서 사용되는 각각의 기능은 이러한 기능을 수행하도록 구성된, 즉 하드와이어된 하드웨어 또는 비 일시적인 스토리지 매체에 저장된 명령어들을 실행하도록 구성된 CPU와 같은 더욱 범용적인 하드웨어들에 의하여 수행된다. 프로세싱 회로는 단일 PCB(printed circuit board)상에 제작되거나, 여러 개의 상호 연결된 PCB들에 걸쳐 분산될 수 있다. 프로세싱 회로는 다른 프로세싱 회로들을 포함할 수 있다. 예를 들어, 프로세싱 회로는 PCB에 상호 연결되는 FPGA 및 CPU와 같은, 두 개의 프로세싱 회로들을 포함할 수 있다.
비록 “제1”, “제2”, “제3” 등의 용어들이 여기에서 다양한 구성 요소들, 컴포넌트들, 영역들, 레이어들, 및/또는 부분들을 설명하기 위하여 사용될 수 있으나, 이러한 구성 요소들, 컴포넌트들, 영역들, 레이어들, 및/또는 부분들은 이러한 용어들에 의하여 제한되지 않아야 함이 이해될 것이다. 이러한 용어들은 단순히 하나의 구성 요소, 컴포넌트, 영역, 레이어 또는 부분을 또다른 구성 요소, 컴포넌트, 영역, 레이어 또는 부분과 구별하는데 사용된다. 따라서, 아래에 논의되는 제1 구성 요소, 컴포넌트, 영역, 레이어, 또는 부분은 본 발명의 개념의 본질 및 범위에 벗어남이 없이, 제2 구성 요소, 컴포넌트, 영역, 레이어, 또는 부분으로 명명될 수 있다.
여기에서 사용되는 용어는 단순히 특정 실시예들을 설명하기 위한 목적을 위한 것이고, 본 발명의 개념을 제한하도록 의도되지 않는다. 여기에서 사용되는 “실질적으로”, “대략”의 용어들 및 유사한 용어들은 근사치를 위한 용어로 사용되고, 범위를 위한 용어로 사용되지 않고, 당업자에 의하여 인식되는 측정되거나 계산된 값들에서 내재된 편차들을 설명하는 것으로 의도된다. 여기에서 사용되는 단수 형식들 “a” 및 “an”은 문맥상에서 달리 지칭하지 않는 한, 또한 복수 형식들을 포함하는 것으로 의도된다. 나아가, “포함한다” 및/또는 “포함하는” 용어들은, 상세한 설명에서 사용되는 경우, 진술된 특징들, 숫자들, 단계들, 동작들, 구성 요소들, 및/또는 컴포넌트들의 존재를 구체화하기 위한 것이고, 하나 이상의 다른 특징들, 숫자들, 단계들, 동작들, 구성 요소들, 컴포넌트들, 및/또는 이의 그룹들의 존재 또는 추가를 배제하는 것은 아님이 이해될 것이다. 여기에서 사용되는 “및/또는” 용어들은 관련되어 열거된 하나 이상의 항목들의 임의의 그리고 모든 조합들을 포함한다. “적어도 하나”와 같은 표현들은, 구성 요소들의 목록에 앞서 있는 경우, 구성 요소들의 전체 목록을 변경하는 것이고, 목록의 개별적인 구성 요소들을 변경하는 것은 아니다. 나아가, “할 수 있다”의 사용은 본 발명의 개념에 대한 실시예들을 설명하는 경우에, “본 발명의 하나 이상의 실시예들”로 언급된다. 또한, “예시적인”은 예시 또는 설명을 언급하는 것으로 의도된다. 여기에서 사용되는 “사용하다”, “사용하는”, 및 “사용되는” 용어들은 각각 “이용하다”, “이용하는”, 및 “이용되는” 용어들과 동의어로 고려된다.
구성 요소 또는 레이어가 다른 구성 요소 또는 레이어“에”, “와 연결되는”, “와 결합되는”, 또는 “에 인접한” 것으로 언급되는 경우, 이는 직접 다른 구성 요소 또는 레이어에, 와 연결되는, 와 결합되는, 에 인접할 수 있거나, 하나 이상의 개입된 구성 요소들 또는 레이어들이 존재할 수 있음이 이해될 것이다. 반면, 구성 요소 또는 레이어가 다른 구성 요소 또는 레이어”에 직접”, “와 직접 연결되는”, “와 직접 결합되는”, 또는 “와 바로 인접한” 것으로 언급되는 경우, 어떠한 개입된 구성 요소들 또는 레이어도 존재하지 않는다.
여기에서 열거된 임의의 수치 범위는 열거된 범위 이내에 포함된 동일한 수치 정밀도에 대한 모든 서브-범위들을 포함하는 것으로 의도된다. 예를 들어, “1.0 내지 10.0”의 범위는 열거된 최소 값인 1.0과 열거된 최대 값인 10.0 사이 (및 포함하는) 즉, 예를 들어 2.4 내지 7.6과 같은, 1.0 이상의 최소 값 및 10.0 이하의 최대 값을 갖는 모든 서브 범위들을 포함하는 것으로 의도된다. 여기에서 열거된 임의의 최대 수치 한정은 그 안에 포함된 더 낮은 모든 수치 한정들을 포함하는 것으로 의도되고, 상세한 설명에 열거된 최소 수치 한정은 그 안에 포함된 더 높은 수치 한정들을 포함하는 것으로 의도된다.
비록 분산 소거 코딩을 위한 시스템 및 방법이 여기에서 구체적으로 설명되나, 수많은 변경들 및 변화들이 당업자에게 명백할 것이다. 따라서, 본 발명의 원리들에 따라 구성된 분산 소거 코딩을 위한 시스템 및 방법은 여기에서 구체적으로 설명된 것과 다르게 실시될 수 있다. 또한, 본 발명은 이하의 청구항들 및 이의 균등물로 정의된다.
110: 이더넷 SSD 섀시
210: 슬롯들
220: 블록들

Claims (20)

  1. 스토리지 장치 어레이에 데이터를 저장하는 방법에 있어서,
    상기 스토리지 장치 어레이의 제1 스토리지 장치가, 호스트 컴퓨터로부터, 상기 제1 스토리지 장치의 논리 블록 어드레스에서 상기 제1 스토리지 장치에 쓰여지는 쓰기 데이터를 포함하는 쓰기 커맨드를 수신하는 단계;
    상기 제1 스토리지 장치가, 상기 논리 블록 어드레스에 저장된 이전 데이터를 검색하는 단계;
    상기 제1 스토리지 장치가, 상기 이전 데이터 및 상기 쓰기 데이터로부터 부분 패리티 코드를 계산하는 단계;
    상기 스토리지 장치 어레이의 제2 스토리지 장치가, 상기 부분 패리티 코드와 함께 이전 패리티 코드를 평가하여 새로운 패리티 코드를 생성하는 단계; 및
    상기 스토리지 장치 어레이의 제3 스토리지 장치가, 상기 새로운 패리티 코드를 저장하는 단계를 포함하되,
    상기 부분 패리티 코드는,
    상기 이전 데이터를 포함하고 상기 스토리지 장치 어레이 모두에 걸쳐 확장되는 데이터의 이전 가상 스트라이프에 대한 데이터 보호 코드인, 상기 이전 패리티 코드와 함께 평가되는 경우,
    상기 스토리지 장치 어레이 모두에 걸쳐 확장되고 상기 이전 데이터 대신에 상기 쓰기 데이터를 포함하는 데이터의 새로운 가상 스트라이프에 대한 데이터 보호 코드인, 상기 새로운 패리티 코드를 발생시키는 수치인 방법.
  2. 제1 항에 있어서,
    상기 제3 스토리지 장치는 상기 제2 스토리지 장치인 방법.
  3. 제1 항에 있어서,
    상기 제1 스토리지 장치가, 상기 제2 스토리지 장치의 식별자를 계산하는 단계;
    상기 제2 스토리지 장치의 상기 식별자가 상기 제1 스토리지 장치의 식별자와 다른지 판별하는 단계; 및
    상기 제2 스토리지 장치의 상기 식별자가 상기 제1 스토리지 장치의 상기 식별자와 다를 경우, 상기 부분 패리티 코드를 포함하는 패리티 메시지를 상기 제2 스토리지 장치에 전송하는 단계를 더 포함하는 방법.
  4. 제3 항에 있어서,
    상기 쓰기 커맨드는 네임 스페이스 식별자를 더 포함하고,
    상기 제2 스토리지 장치의 상기 식별자를 계산하는 단계는,
    상기 네임 스페이스 식별자에 기초하여 네임 스페이스 오프셋 테이블로부터 네임 스페이스 오프셋을 획득하는 단계; 및
    상기 네임 스페이스 오프셋 및 상기 논리 블록 어드레스의 합으로 가상 스트라이프 식별자를 계산하는 단계를 포함하는 방법.
  5. 제4 항에 있어서,
    상기 제2 스토리지 장치의 상기 식별자를 계산하는 단계는,
    상기 제1 스토리지 장치가, 상기 제1 스토리지 장치의 제1 테이블로부터 스트라이드 사이즈를 검색하는 단계; 및
    상기 가상 스트라이프 식별자 modulo 상기 스트라이드 사이즈를 계산하는 단계를 더 포함하는 방법.
  6. 제5 항에 있어서,
    상기 패리티 메시지를 상기 제2 스토리지 장치에 전송하는 단계는,
    상기 제1 스토리지 장치가, 상기 제1 스토리지 장치의 제2 테이블로부터 상기 제2 스토리지 장치의 어드레스를 검색하는 단계; 및
    상기 제2 스토리지 장치의 상기 어드레스에 상기 패리티 메시지를 전송하는 단계를 포함하는 방법.
  7. 제6 항에 있어서,
    상기 제1 스토리지 장치는 이터넷 스토리지 장치이고,
    상기 제2 스토리지 장치는 이더넷 스토리지 장치이고,
    상기 제2 스토리지 장치의 상기 어드레스는 상기 제2 스토리지 장치의 이더넷 어드레스인 방법.
  8. 제6 항에 있어서,
    스토리지 시스템 관리 회로가, 상기 제1 스토리지 장치의 상기 제2 테이블에 상기 제2 스토리지 장치의 상기 어드레스를 저장하는 단계를 더 포함하는 방법.
  9. 제8 항에 있어서,
    상기 스토리지 시스템 관리 회로가, 상기 제1 테이블에 상기 스트라이드 사이즈를 저장하는 단계를 더 포함하는 방법.
  10. 제6 항에 있어서,
    상기 제1 스토리지 장치는 PCI(Peripheral component interconnect) 익스프레스 스위치에 연결되고,
    상기 제2 스토리지 장치는 상기 PCI 익스프레스 스위치에 연결되고,
    상기 제2 스토리지 장치의 상기 어드레스는 상기 제2 스토리지 장치의 PCI 익스프레스 어드레스인 방법.
  11. 제1 항에 있어서,
    상기 이전 패리티 코드 및 상기 새로운 패리티 코드 각각은 RAID 4, RAID 5, RAID 6, 및 소거 코드 데이터 보호 시스템들로 이루어진 그룹으로부터 선택된 데이터 보호 시스템에 이용되는 데이터 보호 코드인 방법.
  12. 제1 항에 있어서,
    상기 제1 스토리지 장치는 스토리지 인터페이스 스위치에 연결되되, 상기 제1 스토리지 장치의 페일 또는 분리 시에,
    스토리지 시스템 관리 회로가, 상기 스토리지 인터페이스 스위치를 재구성하여, 상기 제1 스토리지 장치로 어드레스된 스토리지 커맨드들을 상기 스토리지 시스템 관리 회로로 전송시키는 단계; 및
    수신된 스토리지 커맨드에 응답하여, 상기 스토리지 시스템 관리 회로가, 상기 스토리지 인터페이스 스위치를 통하여, 상기 제1 스토리지 장치가 존재하고 올바르게 동작한다면 전송하는 것과 동일한 커맨드 완료를 전송하는 단계를 더 포함하는 방법.
  13. 제12 항에 있어서,
    상기 스토리지 시스템 관리 회로가, 상기 제1 스토리지 장치에 이전에 저장된 데이터를 복구하는 단계; 및
    상기 복구된 데이터를 제4 스토리지 장치에 저장하는 단계를 더 포함하는 방법.
  14. 제1 항에 있어서,
    상기 제1 스토리지 장치는 스토리지 인터페이스 스위치에 연결되되, 상기 제1 스토리지 장치의 페일 또는 분리 시에,
    스토리지 시스템 관리 회로가, 상기 스토리지 인터페이스 스위치를 재구성하여, 상기 제1 스토리지 장치로 어드레스된 스토리지 커맨드들을 제4 스토리지 장치로 전송시키는 단계; 및
    수신된 스토리지 커맨드에 응답하여, 상기 제4 스토리지 장치가, 상기 스토리지 인터페이스 스위치를 통하여, 상기 제1 스토리지 장치가 존재하고 올바르게 동작한다면 전송하는 것과 동일한 커맨드 완료를 전송하는 단계를 더 포함하는 방법.
  15. 제1 항에 있어서,
    상기 제1 스토리지 장치는 스토리지 인터페이스 스위치에 연결되되, 상기 제1 스토리지 장치에 분리 페일의 발생 및 읽기 커맨드의 수신 시에,
    상기 제1 스토리지 장치가, 상기 분리 페일에 의하여 영향을 받은 데이터를 복구하는 단계; 및
    상기 읽기 커맨드에 응답하여, 상기 제1 스토리지 장치가, 상기 스토리지 인터페이스 스위치를 통하여, 상기 분리 페일이 발생하지 않았다면 상기 제1 스토리지 장치가 전송하는 것과 동일한 커맨드 완료를 전송하는 단계를 더 포함하는 방법.
  16. 제1 항에 있어서,
    상기 제1 스토리지 장치는 스토리지 인터페이스 스위치에 연결되되, 상기 제1 스토리지 장치에 분리 페일의 발생 및 읽기 커맨드의 수신 시에,
    스토리지 시스템 관리 회로가, 상기 분리 페일에 의하여 영향을 받은 데이터를 복구하는 단계; 및
    상기 읽기 커맨드에 응답하여, 상기 스토리지 시스템 관리 회로가, 상기 스토리지 인터페이스 스위치를 통하여, 상기 분리 페일이 발생하지 않았다면 상기 제1 스토리지 장치가 전송하는 것과 동일한 커맨드 완료를 전송하는 단계를 더 포함하는 방법.
  17. 데이터를 저장하는 시스템에 있어서,
    스토리지 장치 어레이를 포함하되,
    상기 스토리지 장치 어레이의 제1 스토리지 장치가, 호스트 컴퓨터로부터, 상기 제1 스토리지 장치의 논리 블록 어드레스에서 상기 제1 스토리지 장치에 쓰여지는 쓰기 데이터를 포함하는 쓰기 커맨드를 수신하고,
    상기 제1 스토리지 장치가, 상기 논리 블록 어드레스에 저장된 이전 데이터를 검색하고,
    상기 제1 스토리지 장치가, 상기 이전 데이터 및 상기 쓰기 데이터로부터 부분 패리티 코드를 계산하고,
    상기 스토리지 장치 어레이의 제2 스토리지 장치가, 상기 부분 패리티 코드와 함께 이전 패리티 코드를 평가하여 새로운 패리티 코드를 생성하고,
    상기 스토리지 장치 어레이의 제3 스토리지 장치가, 상기 새로운 패리티 코드를 저장하되,
    상기 부분 패리티 코드는,
    상기 이전 데이터를 포함하고 상기 스토리지 장치 어레이 모두에 걸쳐 확장되는 데이터의 이전 가상 스트라이프에 대한 데이터 보호 코드인, 상기 이전 패리티 코드와 함께 평가되는 경우,
    상기 스토리지 장치 어레이 모두에 걸쳐 확장되고 상기 이전 데이터 대신에 상기 쓰기 데이터를 포함하는 데이터의 새로운 가상 스트라이프에 대한 데이터 보호 코드인, 상기 새로운 패리티 코드를 발생시키는 수치인 시스템.
  18. 제17 항에 있어서,
    상기 제3 스토리지 장치는 상기 제2 스토리지 장치인 시스템.
  19. 제17 항에 있어서,
    상기 제1 스토리지 장치가 상기 제2 스토리지 장치의 식별자를 계산하고,
    상기 제2 스토리지 장치의 상기 식별자가 상기 제1 스토리지 장치의 식별자와 다른지 판별하고,
    상기 제2 스토리지 장치의 상기 식별자가 상기 제1 스토리지 장치의 상기 식별자와 다를 경우, 상기 부분 패리티 코드를 포함하는 패리티 메시지를 상기 제2 스토리지 장치에 전송하는 시스템.
  20. 데이터를 저장하는 시스템에 있어서,
    스토리지 장치 어레이; 및
    스토리지 시스템 관리 수단들을 포함하되,
    상기 스토리지 장치 어레이의 제1 스토리지 장치가, 호스트 컴퓨터로부터, 상기 제1 스토리지 장치의 논리 블록 어드레스에서 상기 제1 스토리지 장치에 쓰여지는 쓰기 데이터를 포함하는 쓰기 커맨드를 수신하고,
    상기 제1 스토리지 장치가, 상기 논리 블록 어드레스에 저장된 이전 데이터를 검색하고,
    상기 제1 스토리지 장치가, 상기 이전 데이터 및 상기 쓰기 데이터로부터 부분 패리티 코드를 계산하고,
    상기 스토리지 장치 어레이의 제2 스토리지 장치가, 상기 부분 패리티 코드와 함께 이전 패리티 코드를 평가하여 새로운 패리티 코드를 생성하고,
    상기 스토리지 장치 어레이의 제3 스토리지 장치가, 상기 새로운 패리티 코드를 저장하되,
    상기 부분 패리티 코드는,
    상기 이전 데이터를 포함하고 상기 스토리지 장치 어레이 모두에 걸쳐 확장되는 데이터의 이전 가상 스트라이프에 대한 데이터 보호 코드인, 상기 이전 패리티 코드와 함께 평가되는 경우,
    상기 스토리지 장치 어레이 모두에 걸쳐 확장되고 상기 이전 데이터 대신에 상기 쓰기 데이터를 포함하는 데이터의 새로운 가상 스트라이프에 대한 데이터 보호 코드인, 상기 새로운 패리티 코드를 발생시키는 수치인 시스템.
KR1020180048726A 2017-08-10 2018-04-26 분산 소거 코딩을 위한 시스템 및 방법 KR102279723B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201762543789P 2017-08-10 2017-08-10
US62/543,789 2017-08-10
US15/789,884 2017-10-20
US15/789,884 US10585749B2 (en) 2017-08-10 2017-10-20 System and method for distributed erasure coding

Publications (2)

Publication Number Publication Date
KR20190017630A true KR20190017630A (ko) 2019-02-20
KR102279723B1 KR102279723B1 (ko) 2021-07-21

Family

ID=65275031

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180048726A KR102279723B1 (ko) 2017-08-10 2018-04-26 분산 소거 코딩을 위한 시스템 및 방법

Country Status (5)

Country Link
US (1) US10585749B2 (ko)
JP (1) JP7084243B2 (ko)
KR (1) KR102279723B1 (ko)
CN (1) CN109388515B (ko)
TW (1) TWI746845B (ko)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10620855B2 (en) * 2016-09-06 2020-04-14 Samsung Electronics Co., Ltd. System and method for authenticating critical operations on solid-state drives
CN109313593B (zh) * 2016-09-16 2022-03-01 株式会社日立制作所 存储系统
US10635609B2 (en) 2018-03-02 2020-04-28 Samsung Electronics Co., Ltd. Method for supporting erasure code data protection with embedded PCIE switch inside FPGA+SSD
US10990554B2 (en) 2018-03-02 2021-04-27 Samsung Electronics Co., Ltd. Mechanism to identify FPGA and SSD pairing in a multi-device environment
KR20200108650A (ko) * 2019-03-11 2020-09-21 삼성전자주식회사 스토리지 장치 및 스토리지 장치의 동작 방법
GB201905209D0 (en) * 2019-04-12 2019-05-29 Vaion Ltd Method of strong items of data
WO2021012164A1 (zh) * 2019-07-22 2021-01-28 华为技术有限公司 数据重构的方法、装置、计算机设备、存储介质及系统
US11334434B2 (en) 2020-02-19 2022-05-17 Seagate Technology Llc Multi-level erasure system with cooperative optimization
US11609869B2 (en) 2020-07-14 2023-03-21 Samsung Electronics Co., Ltd. Systems, methods, and devices for time synchronized storage delivery
KR20220058224A (ko) * 2020-10-30 2022-05-09 에스케이하이닉스 주식회사 메모리 시스템 및 이에 포함된 메모리 컨트롤러의 동작 방법
US11372553B1 (en) 2020-12-31 2022-06-28 Seagate Technology Llc System and method to increase data center availability using rack-to-rack storage link cable
US20230305713A1 (en) * 2022-03-23 2023-09-28 Samsung Electronics Co., Ltd. Client and network based erasure code recovery

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20120086695A (ko) * 2009-10-09 2012-08-03 바이올린 메모리 인코포레이티드 Raid 그룹의 여러 스트라이핑을 갖는 메모리 및 그 수행방법
KR20150105323A (ko) * 2013-01-08 2015-09-16 바이올린 메모리 인코포레이티드 데이터 스토리지 방법 및 시스템
KR20160075229A (ko) * 2014-12-19 2016-06-29 삼성전자주식회사 가비지 컬렉션 동작 방법 및 이를 적용하는 레이드 스토리지 시스템
KR20160083762A (ko) * 2015-01-02 2016-07-12 삼성전자주식회사 스토리지 시스템에서의 매핑 테이블 관리 방법 및 이를 적용한 스토리지 시스템

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05324579A (ja) * 1992-05-25 1993-12-07 Hitachi Ltd 分散ファイルシステム及び記憶装置
DE69434381T2 (de) * 1993-06-04 2006-01-19 Network Appliance, Inc., Sunnyvale Verfahren zur Paritätsdarstellung in einem Raid-Untersystem unter Verwendung eines nichtflüchtigen Speichers
CA2134016A1 (en) * 1994-01-07 1995-07-08 Peter B. Bandy Data storage device and method of operation
US6742081B2 (en) * 2001-04-30 2004-05-25 Sun Microsystems, Inc. Data storage array employing block checksums and dynamic striping
JP3702231B2 (ja) * 2002-01-31 2005-10-05 株式会社東芝 ディスクアレイ装置及び同装置における動的記憶容量拡張方法
US7389393B1 (en) * 2004-10-21 2008-06-17 Symantec Operating Corporation System and method for write forwarding in a storage environment employing distributed virtualization
JP2007179297A (ja) * 2005-12-28 2007-07-12 Fujitsu Ltd Raid5のパリティチェック強化方法、装置及びプログラム
TW200727167A (en) * 2006-01-02 2007-07-16 Via Tech Inc Disk array data arrangement structure and its data access method
US7822921B2 (en) * 2006-10-31 2010-10-26 Netapp, Inc. System and method for optimizing write operations in storage systems
US8321597B2 (en) 2007-02-22 2012-11-27 Super Talent Electronics, Inc. Flash-memory device with RAID-type controller
US8751862B2 (en) * 2007-08-10 2014-06-10 Dell Products L.P. System and method to support background initialization for controller that supports fast rebuild using in block data
US8402217B2 (en) * 2009-09-15 2013-03-19 Marvell International Ltd. Implementing RAID in solid state memory
US8327225B2 (en) * 2010-01-04 2012-12-04 Micron Technology, Inc. Error correction in a stacked memory
US9582431B2 (en) 2010-03-22 2017-02-28 Seagate Technology Llc Storage address space to NVM address, span, and length mapping/converting
US8583987B2 (en) * 2010-11-16 2013-11-12 Micron Technology, Inc. Method and apparatus to perform concurrent read and write memory operations
US9569320B2 (en) 2010-12-01 2017-02-14 Seagate Technology Llc Non-volatile memory program failure recovery via redundant arrays
KR101695991B1 (ko) * 2011-09-06 2017-01-12 한국전자통신연구원 파일 데이터 분산 저장 장치 및 방법
US8856431B2 (en) 2012-08-02 2014-10-07 Lsi Corporation Mixed granularity higher-level redundancy for non-volatile memory
US9311181B2 (en) * 2012-11-15 2016-04-12 Samsung Electronics Co., Ltd. Memory controller changing partial data in memory device and method for changing partial data thereof
JP2014203233A (ja) * 2013-04-04 2014-10-27 株式会社日立製作所 ストレージシステム及びストレージシステムにおいてデータを更新する方法
KR102318478B1 (ko) * 2014-04-21 2021-10-27 삼성전자주식회사 스토리지 컨트롤러, 스토리지 시스템 및 상기 스토리지 컨트롤러의 동작 방법
WO2015162777A1 (ja) * 2014-04-25 2015-10-29 株式会社日立製作所 計算機システム及び接続構成制御方法
US9384093B1 (en) 2014-05-28 2016-07-05 Microsemi Storage Solutions (U.S.), Inc. Raid enabled NVME device
US9274720B1 (en) 2014-09-15 2016-03-01 E8 Storage Systems Ltd. Distributed RAID over shared multi-queued storage devices
US9977734B2 (en) * 2014-12-11 2018-05-22 Toshiba Memory Corporation Information processing device, non-transitory computer readable recording medium, and information processing system
US9880755B2 (en) * 2015-02-25 2018-01-30 Western Digital Technologies, Inc. System and method for copy on write on an SSD
US9678665B2 (en) 2015-03-06 2017-06-13 Western Digital Technologies, Inc. Methods and systems for memory page allocation
US10061694B2 (en) 2015-09-07 2018-08-28 Toshiba Memory Corporation Memory system and method for controlling non-volatile memory
KR102413755B1 (ko) 2015-11-20 2022-06-28 삼성전자주식회사 리텐션 특성에 의한 성능 저하를 복구하는 저장 장치의 동작 방법 및 이를 포함하는 데이터 처리 시스템의 동작 방법

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20120086695A (ko) * 2009-10-09 2012-08-03 바이올린 메모리 인코포레이티드 Raid 그룹의 여러 스트라이핑을 갖는 메모리 및 그 수행방법
KR20150105323A (ko) * 2013-01-08 2015-09-16 바이올린 메모리 인코포레이티드 데이터 스토리지 방법 및 시스템
KR20160075229A (ko) * 2014-12-19 2016-06-29 삼성전자주식회사 가비지 컬렉션 동작 방법 및 이를 적용하는 레이드 스토리지 시스템
KR20160083762A (ko) * 2015-01-02 2016-07-12 삼성전자주식회사 스토리지 시스템에서의 매핑 테이블 관리 방법 및 이를 적용한 스토리지 시스템

Also Published As

Publication number Publication date
JP2019036301A (ja) 2019-03-07
CN109388515A (zh) 2019-02-26
US10585749B2 (en) 2020-03-10
JP7084243B2 (ja) 2022-06-14
US20190050289A1 (en) 2019-02-14
KR102279723B1 (ko) 2021-07-21
TWI746845B (zh) 2021-11-21
TW201911041A (zh) 2019-03-16
CN109388515B (zh) 2023-11-03

Similar Documents

Publication Publication Date Title
KR102279723B1 (ko) 분산 소거 코딩을 위한 시스템 및 방법
US10191676B2 (en) Scalable storage protection
EP2972871B1 (en) Methods and apparatus for error detection and correction in data storage systems
US8327080B1 (en) Write-back cache protection
US8601348B2 (en) Error checking addressable blocks in storage
US10921994B2 (en) Managing storage array configuration
CN102483686B (zh) 数据存储系统和用于操作数据存储系统的方法
US7752389B1 (en) Techniques for determining physical data layout of RAID devices
US11288119B2 (en) Key value SSD
US20030066010A1 (en) Xor processing incorporating error correction code data protection
US20100037091A1 (en) Logical drive bad block management of redundant array of independent disks
US8484506B2 (en) Redundant array of independent disks level 5 (RAID 5) with a mirroring functionality
CN104598162A (zh) 用于跨存储设备写入数据的方法和系统
US8132044B1 (en) Concurrent and incremental repair of a failed component in an object based storage system for high availability
US20130179750A1 (en) Semiconductor storage device and method of controlling the same
US20200004628A1 (en) Error correction decoding augmented with error tracking
US11269726B2 (en) Method and device for managing storage system
JP4843695B2 (ja) ディスクアレイ制御装置及びディスクアレイ装置
WO2023208231A1 (zh) 一种内存数据读写方法、系统以及内存控制器

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