KR20210076834A - 개선된 ssd 신뢰성 - Google Patents

개선된 ssd 신뢰성 Download PDF

Info

Publication number
KR20210076834A
KR20210076834A KR1020200115467A KR20200115467A KR20210076834A KR 20210076834 A KR20210076834 A KR 20210076834A KR 1020200115467 A KR1020200115467 A KR 1020200115467A KR 20200115467 A KR20200115467 A KR 20200115467A KR 20210076834 A KR20210076834 A KR 20210076834A
Authority
KR
South Korea
Prior art keywords
ssd
reliability
entry
scheme
module
Prior art date
Application number
KR1020200115467A
Other languages
English (en)
Inventor
기양석
레카 피추마니
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Publication of KR20210076834A publication Critical patent/KR20210076834A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1044Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices with specific ECC/EDC distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • 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
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0634Configuration or reconfiguration of storage systems by changing the state or mode of one or more devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0643Management of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0652Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Detection And Correction Of Errors (AREA)

Abstract

솔리드 스테이트 드라이브(SSD; Solid State Drive)가 개시된다. SSD는 호스트상의 애플리케이션으로부터 읽기 및 쓰기 요청들을 수신하기 위한 인터페이스를 포함할 수 있다. 적어도 하나의 칩을 포함한 스토리지는 데이터를 저장할 수 있다. SSD 컨트롤러는 애플리케이션으로부터 읽기 및 쓰기 요청들을 처리할 수 있다. 설정 모듈은 SSD를 설정할 수 있다. 스토리지는 SSD의 설정들 및 해당 설정들에 대한 신뢰성들을 지정하는 엔트리들을 포함할 수 있는 신뢰성 테이블을 포함할 수 있다.

Description

개선된 SSD 신뢰성{ENHANCED SSD RELIABILITY}
본 발명의 개념은 일반적으로 스토리지 시스템들에 관한 것으로, 좀더 상세하게는 가변적인 레벨들의 신뢰성을 제공하는 스토리지 시스템들에 관한 것이다.
이상적으로, SSD(Solid State Drive)와 같은 스토리지 장치들은 완벽할 수 있다: 기록된 모든 비트는 오류 없이 판독될 수 있다. 그러나 실제 세계는 완벽하지 않다: SSD 제조자들의 최선의 노력에도 불구하고 때때로 오류들이 발생한다.
소비자들을 돕기 위해, 제조자들은 장치의 신뢰성의 추정치들을 제공할 수 있다. 예를 들어, 제조자는 99.99 %의 신뢰성 (또는 이에 상응하는 기록 및/또는 판독된 1000 비트들 당 1 비트의 평균 오류율)을 보고할 수 있다. (실제로, 이 신뢰성은 상대적으로 낮다. SSD에 기록된 거의 모든 페이지에서 적어도 하나의 오류를 암시할 수 있다. 다만, 이 신뢰성 레벨은 예시일 뿐이다.)
그러나, 이 신뢰성은 SSD에 기록되거나 SSD로부터 판독된 비트들의 개수에 관련된다. 이 신뢰성은 애플리케이션 시점에서 데이터의 신뢰성을 정확하게 반영하지 않을 수 있다. SSD에 의해 수행되는 다른 기능들도 진정한 신뢰성에 영향을 줄 수 있다.
스토리지 시스템들의 신뢰성을 보다 정확하게 결정하고 스토리지 시스템들의 신뢰성을 제어할 필요성이 남아있다.
본 발명의 목적은 가변적인 레벨들의 신뢰성을 제공하는 개선된 스토리지 시스템을 제공하는데 있다.
본 발명의 실시 예에 따른 방법은 솔리드 스테이트 드라이브(SSD; Solid State Drive)는 호스트상의 제 1 애플리케이션으로부터 읽기 요청들 및 쓰기 요청들을 수신하기 위한 인터페이스, 적어도 하나의 칩을 포함하는 데이터에 대한 스토리지, 스토리지를 사용하여 호스트상의 제 1 애플리케이션으로부터의 읽기 요청들 및 쓰기 요청들을 처리하는 솔리드 스테이트 드라이브(SSD; Solid State Drive) 컨트롤러, SSD를 설정하기 위한 설정 모듈, 및 신뢰성 테이블에 대한 스토리지를 포함하고, 신뢰성 테이블은 적어도 제 1 엔트리 및 제 2 엔트리를 포함하고, 제 1 엔트리는 SSD의 제 1 설정 및 SSD의 제 1 설정에 대한 제 1 신뢰성을 식별하고, 제 2 엔트리는 SSD의 제 2 설정 및 SSD의 제 2 설정에 대한 제 2 신뢰성을 식별한다.
본 발명의 실시 예에 따른 방법은 적어도 하나의 칩을 포함하는 데이터에 대한 솔리드 스테이트 드라이브(SSD; Solid State Drive)에 대한 원하는 신뢰성을 결정하는 단계 , SSD로부터 신뢰성 테이블의 제 1 엔트리에 액세스하는 단계, 및 제 1 엔트리에 따라 SSD를 설정하는 단계를 포함하고, 신뢰성 테이블은 적어도 제 1 엔트리 및 제 2 엔트리를 포함하고, 제 1 엔트리는 SSD의 제 1 설정 및 SSD의 상기 제 1 설정에 대한 제 1 신뢰성을 식별하고, 제 2 엔트리는 SSD의 제 2 설정 및 SSD의 상기 제 2 설정에 대한 제 2 신뢰성을 식별한다.
본 발명의 실시 예에 따른 방법은 SSD에 대한 유효 신뢰성을 요청하는 신뢰성 요청을 호스트상의 애플리케이션으로부터 SSD로 전송하는 단계, 호스트상의 애플리케이션에서 SSD로부터 SSD에 대한 유효 신뢰성을 수신하는 단계, SSD에 저장된 신뢰성 테이블을 요청하는 신뢰성 테이블 요청을 호스트상의 애플리케이션으로부터 SSD로 전송하는 단계, 호스트상의 애플리케이션에서 SSD로부터 신뢰성 테이블을 수신하는 단계, 호스트상의 애플리케이션에 대한 적어도 원하는 신뢰성에 기초하여 신뢰성 테이블에서 엔트리를 선택하는 단계, 및 호스트상의 애플리케이션으로부터 SSD로 설정 요청을 전송하는 단계를 포함하고, 신뢰성 테이블의 엔트리 각각은 SSD의 설정 및 SSD의 설정에 대한 신뢰성을 식별하고, 설정 요청은 신뢰성 테이블에서 엔트리를 식별한다.
본 발명의 실시 예에 따르면, 가변적인 레벨들의 신뢰성을 제공하는 개선된 스토리지 시스템이 제공된다.
도 1은 본 발명의 일 실시 예에 따른 클라이언트들 및 솔리드 스테이드 드라이브(SSD; Solid State Drive)를 포함하는 서버들을 포함하는 시스템을 도시한다.
도 2는 도 1의 서버의 세부 사항들을 도시한다.
도 3은 도 1의 SSD의 세부 사항들을 도시한다.
도 4는 도 1의 SSD에 대한 신뢰성 테이블을 도시한다.
도 5는 도 1의 SSD의 대안적인 뷰를 도시한다.
도 6은 도 5의 애플리케이션 및 도 1의 SSD 사이의 교환된 메시지들을 도시한다.
도 7은 본 발명의 일 실시 예에 따른, 원하는 신뢰성을 제공하도록 스스로를(셀프) 설정하는 도 1의 SSD에 대한 예시적인 절차의 흐름도를 도시한다.
도 8은 스스로를(셀프) 설정하는 도 1의 SSD에 대한 예시적인 절차의 흐름도를 도시한다.
도 9A 및 도 9B는 원하는 신뢰성을 결정하기 위한 도 1의 SSD에 대한 예시적인 절차의 흐름도를 도시한다.
도 10은 도 1의 SSD의 유효 신뢰성을 결정하기 위한 도 1의 SSD에 대한 예시적인 절차의 흐름도를 도시한다.
도 11a 및 도 11b는 본 발명의 일 실시 예에 따른 원하는 신뢰성을 제공하기 위해, 도 1의 SSD에 지시하는 도 5의 애플리케이션에 대한 예시적인 절차의 흐름도를 도시한다.
본 발명의 실시 예들을 상세히 참조할 것이며, 이들의 예는 첨부 도면들에 도시된다. 이하의 상세한 설명에서, 본 발명의 개념을 완전히 이해할 수 있도록 다수의 특정 세부 사항들이 설명된다. 그러나, 당업자는 이러한 특정 세부 사항들 없이 본 발명의 개념을 실시할 수 있음을 이해해야 한다. 다른 경우들에서, 공지된 방법들, 절차들, 컴포넌트들, 회로들 및 네트워크들은 실시 예들의 양태들을 불필요하고 모호하게 하지 않기 위해 상세히 설명되지 않았다.
제 1, 제 2 등의 용어는 본 명세서에서 다양한 요소들을 설명하기 위해 사용될 수 있지만, 이들 요소들을 이 용어들에 의해 제한되지 않아야 한다는 것이 이해될 것이다. 이 용어들은 하나의 요소를 다른 요소와 구별하기 위해서만 사용된다. 예를 들어, 제 1 모듈은 제 2 모듈로 지칭될 수 있고, 유사하게, 제 2 모듈은 본 발명의 개념의 범주를 벗어나지 않으면서 제 1 모듈로 지칭될 수 있다.
본 명세서에서 본 발명의 개념의 설명에 사용된 용어는 특정 실시 예들 만을 설명하기 위한 것이며 본 발명의 개념을 제한하려는 것은 아니다. 본 발명의 개념 및 첨부된 청구 범위의 설명에 사용된 바와 같이, 단수 형태("a", "an"및 "the")는 문맥상 명백하게 다르게 나타내지 않는 한 복수 형태도 포함하도록 의도된다. 본 명세서에 사용된 용어 "및/또는"은 하나 이상의 관련된 열거된 항목들의 임의의 및 모든 가능한 조합들을 지칭하고 포함하는 것으로 이해될 것이다. 본 명세서에서 "포함하다" 및/또는 "포함하는"을 사용될 때, 용어 "포함하다" 및/또는 "포함하는"은 언급된 특징들, 정수들(integer), 단계들, 연산들, 요소들 및/또는 구성요소들의 존재를 명시하지만, 하나 이상의 다른 특징들, 정수들, 단계들, 연산들, 요소들, 구성요소들 및/또는 이들의 그룹들의 존재 또는 추가를 배제하지는 않는다는 것을 이해할 것이다. 도면들의 구성요소들 및 특징들은 반드시 축척대로 도시된 것은 아니다.
제조자에 의해 열거된 신뢰성이 스토리지 장치의 진정한 신뢰성을 정확하게 반영하지 않을 수 있는 방법의 예시로서, 데이터 압축을 고려한다. 솔리드 스테이트 드라이브(SSD; Solid State Drive)가 데이터를 기록하기 전에 데이터를 압축하면, 압축된 데이터의 단일 비트 오류(error)가 실제로 원시 데이터의 다수의 비트들에 영향을 줄 수 있다. 예를 들어, 데이터가 2 : 1의 유효 비율로 압축된 경우(즉, 기록된 데이터의 크기가 원시 데이터의 크기의 1/2 임), 단일 비트 오류는 원시 2 비트들의 데이터에 영향을 줄 것으로 예상될 수 있다. 즉, 평균 오류율을 사실상 두 배로 높인다. 또는 최악의 경우 오류로 인해 SSD가 원시 데이터를 성공적으로 압축 해제하지 못하여 원시 데이터 전체가 손실될 수 있다.
또는 데이터 중복 제거(data deduplication)를 고려할 수 있다. 데이터 중복 제거에서, SSD는 다수의 파일들에서 동일한 데이터 덩어리들(chunks of data)(또는 심지어 여러 번 동일하게 저장된 전체 파일들)를 식별하여 스토리지 효율성을 개선하려고 한다. 데이터의 다수의 사본들을 저장하는 대신, SSD는 오직 하나의 사본을 저장하고 및 해당 데이터 덩어리를 포함하는 다양한 파일들로부터 해당 사본을 참조할 수 있다. 그러나 중복 제거된 데이터에 오류가 있는 경우, 해당 오류는 해당 데이터를 사용하는 모든 파일에서 오류가 되고 오류율을 다시 확대한다. 예를 들어, 동일한 데이터가 세 개의 다른 파일들에 사용되는 경우, 중복된 데이터의 단일 오류는 실제로 세 개의 다른 파일들에서 세 개의 오류들이다.
더욱이, 상이한 애플리케이션들은 각각 상이한 신뢰성 요건들을 가질 수 있다. 예를 들어, 한 애플리케이션은 애플리케이션에 의해 기록된 1MB에 1개의 오류만을 원하지만, 다른 애플리케이션은 애플리케이션에 의해 기록된 1GB의 데이터에 1개의 오류만을 원할 수 있다. 애플리케이션은 사용 가능한 상이한 스토리지 장치들 중에서 선택하는데 도움이 되도록 이러한 신뢰성 비율들을 명시할 수 있지만, 현재 단일 스토리지 장치가 다수의 상이한 신뢰성 레벨들을 지원할 수 없다.
구현에 따라, SSD들은 다수의 레벨들을 포함할 수 있으며, 신뢰성은 다수의 레벨들로 관리될 수 있다. 이러한 신뢰성이 관리될 수 있는 다수의 레벨들은 NAND 플래시 메모리 칩들, 불휘발성 메모리 칩들 또는 메모리 칩들의 다른 기타 유형들과 같은 플래시 메모리 칩들일 수 있는 (데이터가 실제로 저장되는) 메모리 칩들 그 자체, (메모리 칩으로부터 판독된 오류들을 검출 및/또는 정정하는) 오류 정정 코드(ECC; Error Correcting Code) 모듈을 사용하는 것, 및 (약간의 리던던시(redundancy)를 위해 다수의 채널들을 통해 다수의 메모리 칩들에 걸쳐 데이터가 저장될 수 있는) RAID/소거 코딩 구현을 포함할 수 있다.
RAID(Redundant Array of Independent Disk) 또는 소거 코딩(Erasure Coding)을 사용하여 오류 검출 및 정정을 제공하는 다양한 방법이 있다. 예를 들어, RAID 1, RAID 5, RAID 6 또는 오류 정정을 지원하는 다른 소거 코딩 구현들을 사용할 수 있다. 각 구현은 신뢰성의 다양한 수준들을 제공한다.
ECC 모듈들이 또한 사용될 수 있으며, 임의의 원하는 ECC 알고리즘들을 구현할 수 있다. 오류 검출 및/또는 정정을 제공할 수 있는 예시적인 알고리즘들은 기본 패리티 체크(basic parity check), CRC(Cyclic Redundancy Check), 해밍 코드들(Hamming Codes), 및 이와 유사한 것을 포함하며, 모두는 오류 검출 및/또는 정정을 수행하기 위한 잘 알려진 스킴(scheme)들이다. 각 구현은 신뢰성의 다양한 수준들을 제공한다.
마지막으로, NAND 플래시 메모리 칩들은 신뢰성과 관련하여 일부 옵션들을 제공할 수도 있다. 예를 들어, 단일 레벨 셀(SLC; Single-Level Cell)를 고려할 수 있다. SLC는 1비트의 데이터를 저장할 수 있다. 셀에 적절한 전압을 인가함으로써, SSD는 비트를 판독할 수 있다 (즉, 셀에 하나의 전압을 인가하면 셀은 "0"을 저장하도록 결정될 수 있는 반면, 셀에 다른 전압을 인가함으로써 셀은 "1"값을 저장하기로 결정될 수 있음). 멀티 레벨 셀(MLC; Multi-Level Cell)는 2비트들의 데이터를 저장하므로, 셀에 저장된 값을 결정하기 위해 최대 4 개의 다른 전압 레벨이 요구된다. 트리플 레벨 셀(TLC; Triple-Level Cells)는 최대 3 비트들의 데이터를 저장하므로, 셀에 저장된 값을 결정하기 위해 최대 8 개의 다른 전압 레벨이 요구된다. 쿼드 레벨 셀(QLC; Quad-Level Cell)는 최대 4 비트들의 데이터를 저장하므로, 셀에 저장된 값을 결정하기 위해 최대 16 개의 다른 전압 레벨이 요구된다.
셀에 저장된 비트의 개수가 증가함에 따라, 상이한 가능한 저장된 값들을 구분하는 전압 범위들의 폭은 더 작아진다. 따라서, QLC가 인가된 전압 처리에서 발생하는 오류로 인해 오류를 반환할 가능성이, SLC가 이러한 오류를 반환하는 것보다 높다 (MLC 및 TLC의 경우도 마찬가지 임). 더욱이, 셀은 저장하는 비트들 개수가 증가함에 따라 더 적은 쓰기를 지원하는 경향이 있다. 따라서 SLC는 최대 100,000 개의 데이터 쓰기를 지원할 수 있는 반면, QLC는 최대 100 개의 데이터 쓰기만 지원할 수 있다 (그 후 데이터를 기록함에 있어서, 오류가 발생할 가능성이 더 높다). (또한 셀 값을 결정하기 위해 셀에 인가해야 하는 전압들의 개수가 셀에 저장된 비트들의 개수에 따라 증가하므로, SLC보다 QLC에서 셀에서 데이터를 읽는 데 시간이 더 걸릴 수 있다.)
셀에 저장된 비트들의 개수와 입력 전압의 부정확한 처리로 인한 오류 (발생) 가능성 사이에는 관계가 있기 때문에, QLC는 다른 셀 유형들 보다 이러한 오류를 경험할 가능성이 더 높고, SLC는 그러한 오류를 경험할 가능성이 가장 낮다고 결론을 내릴 수 있다 (또는 그 대신에, QLC는 가장 신뢰성이 낮은 셀 유형이며, SLC는 보다 신뢰성 높음). 물론, NAND 플래시 메모리 칩이 두 유형의 셀을 모두 제공하지 않는 한, 특정 신뢰성을 달성하기 위해 데이터를 원하는 셀 유형에 저장할 수는 없다. 그러나 저장할 수 있는 것보다 적은 수의 비트들을 저장하는 셀을 사용할 수 있으므로, 신뢰성을 향상시킬 수 있다.
QLC 유형을 고려한다. QLC가 4 비트들의 데이터를 저장하면 신뢰성은 알려진 대로이다. 그러나 QLC가 예를 들어 하나의 비트만 저장하면 (다른 3 비트들은 기본 값들(default values) 또는 "무정의(don't care)"값들로 남김), QLC는 사실상 SLC를 에뮬레이트(emulate) 한다. "무정의" 비트들의 값들을 구별하는 전압 처리 오류들로 인해 발생하는 오류들은 관련이 없게 된다: 셀의 값을 결정하기 위해 인가해야 하는 입력 전압들은 사실상 오직 두 개뿐이다. (본 발명의 실시 예들은 QLC가 1 비트만을 잠재적으로 저장하고 판독하도록 구현될 수 있음을 시사하는 것이 아니라, "무정의 (don't care)"비트들과 관련하여 반환된 정보 및 그 정보와 연관된 오류들은 함께 무시될 수 있음을 시사한다. 본 발명의 실시 예들은 또한 QLC에 한 번에 하나의 비트만을 저장하는 것이, 증가된 기록 동작들의 수를 지원하는 QLC를 야기할 수 있음을 시사하지는 않는다.) 따라서, QLC가 1 비트만을 저장하는 경우, 오류율이 감소되고, 신뢰성이 향상될 수 있다. 설계된 것보다 적은 비트들을 저장하는데 사용되는 임의의 셀 유형의 경우에도 마찬가지다. 따라서 QLC는 TLC, MLC 또는 SLC로 에뮬레이트 할 수 있으며, TLC는 MLC 또는 SLC로 에뮬레이트 할 수 있으며, MLC는 SLC로 에뮬레이트 할 수 있으며, 모두 신뢰성이 향상될 수 있다. (반대로 수행될 수는 없다. 어떤 셀 유형도 신뢰성이 떨어지더라도 지정된 정보의 비트들 개수 이상을 저장할 수 없다.)
QLC를 취하고 그것을 경험적으로 테스트하여 4 비트들보다 적은 비트를 저장할 때 그것이 얼마나 신뢰성이 있는지를 결정하는 것이 가능하다: TLC 및 MLC에 대해서도 마찬가지이다. 이 테스트는 QLC에 기록되는 데이터의 양을 제외하고, QLC들(또는 다른 셀 유형들)이 일반적인 그들의 신뢰성을 결정하기 위해 테스트되는 방법과 다르지 않다. 따라서, 각 셀 유형에 대해, 셀에 의해 지원되는 최대 수보다 적은 경우에도, 임의의 비트들의 수를 저장할 때의 신뢰성을 결정하는 것이 가능하다.
RAID/소거 코딩 및 ECC 모듈들의 경우, 그들의 신뢰성을 추정할 수 있는 수학적 모델들이 있거나, 신뢰성은 실제 사용에 의해 경험적으로 결정될 수 있다 (개별 셀 유형들의 신뢰성이 어떻게 결정될 수 있는가와 매우 유사함).
SSD의 다양한 레벨들에서 오류 정정 스킴들이 서로 완전히 독립적이지 않다는 것이 사실이다. 즉, RAID 구현 및 ECC 모듈의 오류율이 10-10이고 QLC를 사용하여 하나의 비트만 저장하는 경우 오류율이 10-10 인 경우 세 가지를 모두 사용하면 10-30의 오류율(개별 오류율들의 곱)이 발생하지 않는다. 그러나 다양한 레벨들의 솔루션들은 적어도 부분적으로 보완적이다. SSD의 하나 이상의 레벨에서 오류 정정 스킴들의 조합을 사용하면, 별개로 개별적인 레벨에 의해 제공될 수 있는 것보다 높은 신뢰성 비율을 제공할 수 있다.
SSD 장치들의 제조 시, 다양한 레벨에서 각각의 오류 정정 조합의 신뢰성을 테스트하고, 임의의 개별적인 조합의 전반적인 신뢰성을 결정할 수 있다. 따라서 예를 들어, NAND 플래시 메모리에 QLC가 포함된 경우, 즉, 4 가지 가능한 변형들(QLC를 사용하여 4 비트들, 3 비트들, 2 비트들 또는 1 비트 저장함)이 있고, ECC는 3 개의 상이한 오류 정정 스킴들을 제공하고, RAID/소거 코딩 구현이 10 가지의 상이한 오류 정정 변형들을 제공하는 경우, 총 120 가지의 다른 조합들(4 x 3 x 10 = 120)이 있을 수 있다. 제조자는 이러한 각 조합을 테스트하고 각 조합의 개별적인 신뢰성을 결정할 수 있다. 이 정보는 SSD 내의 스토리지에 (예를 들어, 설정 모듈) 저장될 수 있다. 설정 모듈은 또한 원하는 신뢰성을 달성하기 위해 다양한 레벨들에서 적절한 오류 정정 조합을 선택하는 것을 담당할 수 있다.
본 발명 일부 실시 예들에서, 애플리케이션은 데이터에 적용될 신뢰성을 특정할 수 있다. 예를 들어, 일부 애플리케이션들은 데이터의 높은 신뢰성을 요구할 수 있는 반면, 다른 애플리케이션들은 데이터가 (예를 들어, 임시 데이터 또는 손실된 경우 쉽게 재복원되는 데이터) 손실되는 경우 그다지 신경 쓰지 않을 수 있다. 애플리케이션에 지정된 신뢰성이 주어지면, 설정 모듈은 다양한 오류 정정 조합들에 대한 신뢰성 비율들을 사용하여 애플리케이션 데이터의 목표 신뢰성(target reliability)을 달성하도록 SSD를 설정할 수 있다. 다수의 애플리케이션들이 동일한 SSD에 데이터를 기록하는 경우, 설정 모듈은 전체 SSD가 애플리케이션들 중 임의의 하나에 의해 요구되는 최고 신뢰성으로 작동하도록 설정하거나, 또는 설정 모듈이 SSD의 다른 영역들이 다른 신뢰성 레벨들로 작동하도록 설정할 수 있다. 예를 들어, RAID 또는 ECC 구현을 변경하지 않고, SSD는 더 높은 신뢰성을 요구하는 데이터를 위해 1 비트만을 QLC에 저장할 수 있고, 더 낮은 신뢰성을 허용하는 데이터를 위해 4 비트를 QLC에 저장할 수 있다. 본 발명의 실시 예들은 데이터의 임의의 원하는 유닛(예를 들어, 페이지, 블록, 플레인, 다이, 칩, 또는 전체 SSD)으로 신뢰성 관리를 지원할 수 있음에 유의한다.
본 발명의 다른 실시 예들에서, 애플리케이션은 데이터에 대한 신뢰성 요건을 제공하지 않고, 단순히 데이터를 제공할 수 있다. 본 발명의 개념의 이러한 실시 예들에서, 더 상세하게는, SSD가 압축, 데이터 중복 제거, 또는 신뢰성의 영향을 미칠 수 있는 임의의 다른 트랜잭션(transaction)들을 사용할 수 있는 본 발명의 개념의 실시 예들의 경우, SSD는 임의의 특정 데이터 유닛(unit)(또는, 단위)에 대한 유효 신뢰성(effective reliability)이 무엇인지를 추적할 수 있다. 따라서 애플리케이션의 원시 데이터가 압축되는 경우, SSD는 데이터의 유효 압축 비율을 추적할 수 있고, 이 비율은 오류율에 대한 승수(multiplier)를 결정하는 데 사용될 수 있다. 또는 SSD가 데이터 중복 제거를 사용하는 경우, SSD는 특정 데이터 유닛을 공유하는 파일들의 수를 추적할 수 있고, 이것은 (다시) 오류율의 승수를 결정하는 데 사용될 수 있다. 그 후, 공시된 신뢰성이 달성되도록 보장하기 위해, 설정 모듈은 이 정보를 다양한 오류 정정 조합들에 대한 신뢰성 비율들과 결합하여 사용함으로써, 공시된 신뢰성을 제공하는 적절한 조합을 선택할 수 있다 (SSD 동작들을 기반으로 오류들이 어떻게 증대되는지를 고려함)
목표 신뢰성을 달성하기 위해 오류 정정 조합을 선택할 때 고려할 수 있는 유일한 변수는 신뢰성이 아니라는 점에 유의해야한다 (단, 주요 변수 일 수 있음). 만약 신뢰성 하나만이 유일한 고려사항이었다면, SSD는 단순히 가장 높은 신뢰성을 제공하는 오류 정정 조합을 사용하도록 설정될 수 있고, 그것으로 마무리될 수 있다: 더 높은 신뢰성을 달성될 수 없다. 그러나 다양한 오류 정정 조합들에도 다른 영향들(implication)이 있다. 이러한 다른 영향들은 공간 오버 헤드(space overhead)와 성능을 포함한다. 예를 들어, QLC를 사용하여 정보의 1 비트만 저장하는 경우, QLC는 더 높은 신뢰성으로 동작하지만, (QLC는 4 비트들만큼 저장할 수 있기 때문에) 스토리지 측면에서 1/4 정도만 효율적이다. 성능 또한 고려해야 할 사항이다. 다른 오류 정정 조합은 데이터 처리에 더 많은 시간이 필요할 수 있으며, 이는 SSD의 레이턴시(latency)에 영향을 줄 수 있다.
따라서, 다른 고려 사항들을 고려하여, 설정 모듈은 목표 신뢰성 비율을 제공하는 SSD를 설정하기 위해 사용할 오류 정정 조합을 선택할 수 다. 예를 들어, 공간 오버 헤드가 중요한 요소로 간주되는 경우, QLC가 4 비트들의 데이터를 저장하게 하는 오류 정정 조합이(또는, ECC 모듈 또는 RAID/소거 코딩에 더 의존하는), QLC에서 1 비트만 저장하는 오류 정정 조합보다 선호될 수 있다. 또는 성능이 공간 오버 헤드보다 큰 문제인 경우, QLC가 1비트의 데이터만 저장하더라도, 데이터를 정정하기 위해 ECC 모듈 및/또는 RAID/소거 코딩에 덜 의존하는 오류 정정 조합이 선호될 수 있다.
도 1은 본 발명의 실시 예에 따른 클라이언트들 및 SSD를 포함하는 서버를 포함하는 시스템을 도시한다. 도 1에서, 클라이언트들(105-1, 105-2)은 네트워크 (115)를 통해 서버(110)와 통신하는 것으로 도시된다. 클라이언트들(105-1, 105-2) 및 서버(110)는 클라이언트-서버 관계에 있을 수 있다: 클라이언트들(105-1, 105-2)은 커맨드들을 발행하고, 서버(110)는 그 커맨드들을 실행할 수 있다. 대안 적으로, 서버(110)는 클라이언트들(105-1, 105-2)의 관여를 피하면서 최종 사용자에 의해 직접 사용되는 컴퓨터일 수 있다.
네트워크(115)는 네트워크의 임의의 유형 또는 변종들일 수 있다. 예를 들어, 네트워크(115)는 다른 가능한 것들 중에서, LAN(Local Area Network), WAN(Wide Area Network), MAN(Metropolitan Area Network) 또는 인터넷과 같은 글로벌 네트워크를 포함할 수 있다. 데이터는 네트워크(115)를 통해 직접 전송될 수 있거나, 예를 들어 암호화 또는 VPN(Virtual Private Network)을 사용하여 보호될 수 있다. 네트워크(115)는 유선 또는 무선 연결들을 포함할 수 있다. 또한, 네트워크(115)는 이 대안들의 임의의 원하는 조합들을 포함할 수 있다. 예를 들어, 클라이언트들 (105-1, 105-2)은 무선 연결을 통해 LAN과 연결되고, 결국 LAN은 유선 연결을 통해 인터넷과 연결되고, 결국 인터넷은 서버(110)와 연결된 다른 LAN에 연결될 수 있다. 클라이언트들(105-1, 105-2)과 서버(110) 사이의 연결은 다양할 수 있다: 모든 상황들에서 연결들이 동일할 필요 없다.
서버(110)는 프로세서(120), 메모리(125) 및 솔리드 스테이트 드라이브(SSD) (130)를 포함할 수 있다. 프로세서(120)는 운영 체제를 포함하는 소프트웨어 스택, 애플리케이션들, (파일 시스템과 같은) 스토리지 소프트웨어, 및 서버(110)에 부착된 장치(예컨대, 메모리(125) 및 SSD(130))를 관리하기 위한 컨트롤러 소프트웨어를 포함할 수 있다. 프로세서(120)는 임의의 유형의 프로세서, 예를 들어, Intel Xeon, Celeron, Itanium 또는 Atom 프로세서, AMD Opteron 프로세서, ARM 프로세서 등일 수 있다. 도 1은 단일 프로세서(120)를 도시하지만, 서버(110)는 임의의 수의 프로세서들을 포함할 수 있으며, 각각의 프로세서는 단일 코어 또는 다중 코어 프로세서들일 수 있고, 임의의 원하는 조합으로 혼합될 수 있다.
메모리(125)는 서버(110)에서 사용되는 일반적인 메모리일 수 있다. 메모리(125)는 플래시 메모리, DRAM(Dynamic Random Access Memory), SRAM(Static Random Access Memory), Persistent Random Access Memory, FRAM(Ferroelectric Random Access Memory) 또는 MRAM(Magnetoresistive Random Access Memory)등과 같은 NVRAM(Non-Volatile Random Access Memory)과 같은 임의의 유형의 메모리 일 수 있다. 메모리(125)는 휘발성 메모리 또는 불휘발성 메모리일 수 있다. 메모리(125)는 또한 상이한 메모리 유형들의 임의의 원하는 조합일 수 있다. 메모리(125)는 메모리 컨트롤러(도 1에 미도시)에 의해 관리(또는 제어)될 수 있으며, 이는 소프트웨어 스택의 일부인 드라이버를 갖는 서버(110)의 별개의 구성요소일 수 있다. 메모리(125)는 "단기(short-term)"로 지칭될 수 있는 데이터, 즉 장기간 저장될 것으로 예상되지 않는 데이터를 저장하는데 사용될 수 있다. 단기 데이터의 예들은 임시 파일들, 애플리케이션들에 의해 로컬로 사용되는 데이터(다른 스토리지 위치로부터 복사되었을 수 있음) 등을 포함할 수 있다.
프로세서(120) 및 메모리(125)는 또한 다양한 애플리케이션들이 실행될 수 있는 운영 체제를 지원할 수 있다. 이 애플리케이션들은 메모리(125) 또는 SSD(130)로부터 데이터를 판독하거나 메모리(125) 또는 SSD(130)로 기록하는 요청들을 발행할 수 있다. 메모리(125)는 "단기"로 지칭될 수 있는 데이터를 저장하는데 사용될 수 있는 반면, SSD(130)는 "장기(long-term)"로 간주되는 데이터, 즉, 장기간 저장될 것으로 예상되는 데이터를 저장하는데 사용되는 스토리지 장치들일 수 있다. SSD(130)는 프로세서(120)에서 실행되는 소프트웨어 스택에서 컨트롤러 소프트웨어를 사용하여 액세스될 수 있다. 도 1은 단지 하나의 SSD(130)를 도시하지만, 본 발명의 실시 예들은 임의의 유형의 스토리지 장치들을 포함하고 임의의 원하는 연결을 통해 연결될 수 있다. 따라서, SSD(130)는 SATA(Serial AT Attachment) 하드 디스크 드라이브들, 이더넷 SSD들 또는 다른 유형의 스토리지 장치들로 대체될 수 있다. 또한, 본 발명의 실시 예들은 임의의 수(0 이상)의 스토리지 장치들을 포함할 수 있고, 각각의 스토리지 장치는 임의의 원하는 유형일 수 있으며, 따라서 다수의 상이한 유형의 스토리지 장치들이 서버(110)에서 혼합될 수 있다.
도 2은 도 1의 서버(110)의 세부 사항들을 도시한다. 도 2에서 도시된 바와 같이, 일반적으로, 서버(110)는 하나 이상의 프로세서들(120)을 포함할 수 있다. 프로세서들(120)은 메모리 컨트롤러들(205) 및 클럭들(210)을 포함할 수 있고, 머신의 구성요소들의 동작들을 조정하는데 사용될 수 있다. 프로세서들(120)은 또한 예를 들어, RAM(random access memory), ROM(read-only memory) 또는 다른 상태 보존 매체를 포함할 수 있는 메모리들(125)에 연결될 수 있다. 프로세서들(120)은 스토리지 장치들(130) 및 네트워크 커넥터(215)에 연결될 수 있으며, 네트워크 커넥터(215)는 예를 들어 이더넷 커넥터 또는 무선 커넥터일 수 있다. 프로세서들(120)은 또한 버스들(220)에 연결될 수 있으며, 버스들(220)은 사용자 인터페이스들(225) 및 입/출력 인터페이스 포트들과 연결될 수 있다. 입/출력 인터페이스 포트들은 다른 구성요소들 중에서 입/출력 엔진들(230)을 사용하여 관리될 수 있다.
도 3은 도 1의 SSD(130)의 세부 사항들을 도시한다. 도 3에서, SSD(130)는 호스트 인터페이스 로직(HIL)(305), SSD 컨트롤러(310) 및 다양한 메모리 칩들(315-1 ~ 315-8)(또한 "메모리 스토리지”로 지칭됨)을 포함할 수 있으며, 메모리 칩들(315-1 ~ 315-8)은 다양한 채널들(320-1~320-4)로 조직화될 수 있다. 호스트 인터페이스 로직(305)은 SSD(130)와 다른 구성 요소들(예컨대, 도 1의 프로세서(120) 또는 다른 SSD) 간의 통신들을 관리할 수 있다. 이러한 통신들은 SSD(130)로부터 데이터를 판독하기 위한 읽기 요청들 및 SSD(130)에 데이터를 기록하기 위한 쓰기 요청들을 포함할 수 있다. 호스트 인터페이스 로직(305)은 단일 포트만을 통해 인터페이스를 관리할 수 있거나, 또는 다수의 포트들을 통해 인터페이스들을 관리할 수 있다. 대안적으로, SSD(130)는 다수의 포트들을 포함할 수 있으며, 이들 각각은 그 포트를 통한 인터페이스들을 관리하기 위해 별도의 호스트 인터페이스 로직(305)을 가질 수 있다. 본 발명의 실시 예들은 또한 가능성들을 혼합할 수 있다 (예를 들어, 3 개의 포트들을 갖는 SSD는 하나의 포트를 관리하기 위한 하나의 호스트 인터페이스 로직 및 다른 두개의 포트들을 관리하기 위한 제 2 호스트 인터페이스 로직을 가질 수 있음).
SSD 컨트롤러(310)는 메모리 컨트롤러(도 3에 미도시)를 사용하여 메모리 칩들(315-1 ~ 315-8)상의 가비지 컬렉션(garbage collection) 및 다른 동작들 함께 읽기 및 쓰기 동작들을 관리할 수 있다. 메모리 칩들(315-1 ~ 315-8)은 NAND 플래시 메모리 칩 또는 다른 불휘발성 메모리 칩들과 같은 임의의 유형의 메모리 칩들일 수 있지만, 본 발명의 실시 예들은 NVRAM(Non-Volatile RAM)과 같은 다른 스토리지 시스템들로 확장될 수 있다.
SSD 컨트롤러(310)는 변환 계층(325), 오류 정정 코드 모듈(330), RAID/소거 코딩 모듈(335), 설정 모듈(340) 및 신뢰성 테이블 스토리지(345)를 포함할 수 있다. 변환 계층(325)은 도 1의 프로세서(120)에서 실행되는 애플리케이션들에 의해 사용되는 논리 블록 어드레스들(LBA)을 데이터가 SSD(130)에 실제로 저장되는 물리 블록 어드레스들(PBA)로 매핑(mapping)을 관리할 수 있다. 변환 계층(325)을 사용함으로써 (본 발명의 일부 실시 예들에서, 변환 계층(325)은 플래시 변환 계층(325)로 지칭될 수 있음), SSD(130)는, 애플리케이션이 데이터가 현재 존재하는 곳을 잘 알고 있도록 유지해야 하는 것 없이도, 데이터를 메모리 칩들(315-1 ~ 315-8) 사이에서 이동시킬 수 있다. (예를 들어, 애플리케이션이 새로운 값들로 데이터 덮어쓰기(overwrite)를 요청하는 경우에 이것이 발생할 수 있음(SSD들은 일반적으로 그 위치에서(제자리에, in place) 데이터 덮어쓰기를 지원하지 않으므로, 새로운 위치에 새로운 데이터를 저장함). 또는 일부 유효한 데이터를 포함하는 블록이 가비지 컬렉션에 대상이 된 경우에 이것이 발생할 수 있음). 변환 계층(325)은 SSD(130) 내의 어딘가에 일부 (바람직하게는) 불휘발성 스토리지에 저장된 테이블로서 구현될 수 있다.
오류 정정 코드(ECC) 모듈(330)은 오류 정정 코드들을 메모리 칩들(315-1 ~ 315-8)에 기록될 데이터에 적용할 수 있다. 본 발명의 일부 실시 예들에서, ECC 모듈(330)은 어느 메모리 칩들(315-1 ~ 315-8)에 데이터를 저장할 것인지에 관계없이 데이터에 적용될 수 있고; 다른 실시 예들에서, 채널들(320-1 ~ 320-4) 각각 (또는 메모리 칩들(315-1 ~ 315-8) 각각)은 자체 ECC 모듈(330)을 가질 수 있다. ECC 모듈(330)은 임의의 원하는 오류 정정 알고리즘을 구현할 수 있고, 따라서 (구현된 알고리즘에 따라) 여러 오류들의 검출 및/또는 정정을 지원할 수 있다. ECC 모듈(330)에 의해 사용될 수 있는 예시적인 알고리즘들은 패리티 코드들(parity codes), CRC(Cyclic Redundancy Check) 코드들 또는 해밍 코드들(Hamming codes)과 같은 것을 포함한다. ECC 모듈(330)은 적절한 명령어들을 실행하는 범용 프로세서를 사용하거나, FPGA(Field Programmable Gate Array), ASIC(Application-Specific Integrated Circuit), GPU(Graphics Processing Unit) 또는 기타 원하는 구현을 사용하여 구현될 수 있다.
RAID/소거 코딩 모듈(335)은 메모리 칩들(315-1 ~ 315-8) 상에 데이터를 저장하기 위해 임의의 원하는 RAID 또는 소거 코딩 스킴(scheme)을 구현할 수 있다 (RAID(Redundant Array of Independent Disks)는 소거 코딩의 특정 구현 세트를 기술하고 있기 때문에, RAID/소거 코딩 모듈(335)은 기능면에서 축소 없이 소거 코딩 모듈로서 보다 일반적으로 설명될 수 있음). 일반적으로, RAID/소거 코딩 모듈(335)은 SSD(130) 상에 기록될 데이터를 취하여, 그 데이터를 다양한 유닛들로 분할하고, 이들 유닛들을 상이한 메모리 칩들(315-1 ~ 315-8)에 저장할 수 있다. 리던던시를 도입하기 위해, 동일한 데이터는 다수의 메모리 칩들(315-1 ~ 315-8) 상에 저장될 수 있거나, (패리티 코드들, CRC 코드들 또는 해밍 코드들과 같은) 오류 정정 정보가 사용될 수 있다. 이러한 방식으로, 오류들은 검출되고 정정될 수 있다. (RAID/소거 코딩 모듈(335)과 ECC 모듈(330) 모두에서 동일한 기본 접근법이 사용될 수 있지만, 다른 규모(비율, scale)들일 수 있음: 솔루션들은 따라서 서로 보완될 수 있음) 소거 코딩 모듈(335)은 적절한 명령어들을 실행하는 범용 프로세서를 사용 하거나, FPGA, ASIC, GPU 또는 기타 원하는 구현들을 사용하여 구현될 수 있다.
설정 모듈(340)은 신뢰성을 향상시키기 위해 어떤 기술들이 사용될지를 프로그래밍하는데 사용될 수 있다. 다른 신뢰성 기술들을 어떻게 사용할 수 있을지 궁금하지만 대답은 간단하다. ECC 모듈(330) 및 RAID/소거 코딩 모듈(335)은 각각 (잠재적으로) 상이한 신뢰성 비율을 갖는 상이한 오류 정정 기술들에 대한 지원을 제공할 수 있다. 설정 모듈(340)은 ECC 모듈(330) 및/또는 RAID/소거 코딩 모듈(335)에게 주어진 시간에 어떤 오류 정정 기술이 사용될 수 있는지를 지시하는데 사용될 수 있다.
그러나, 이 답변은 후속 질문으로 이어진다: 다양한 수준의 신뢰성을 제공하는 상이한 오류 정정 기술들이 있다면, 왜 항상 가장 안정적인(신뢰성이 높은) 접근법을 사용하지 않는가? 답은 상이한 기술들이 SSD(130)의 동작에 다른 영향들을 미칠 수 있으며, 이는 더 높은 신뢰성의 이점을 상쇄할 수 있다는 것이다. 예를 들어, 동일한 데이터가 각각의 메모리 칩들(315-1 ~ 315-8)에 저장될 수 있는 가능성을 고려해보자. 이 접근 방식은 데이터의 8 배(겹)(8-fold) 복제를 도입하며, 단일 메모리 칩의 고장으로 인해 데이터의 손실을 야기시키지 않는다. 이 접근법의 단점은 동일한 데이터가 8 번 저장되기 때문에 SSD(130)의 총 가용 스토리지는 단일 메모리 칩의 스토리지보다 크지 않다는 것이다. 달리 말하면, SSD(130)에 의해 제공되는 총 가용 스토리지(available storage)는 SSD(130)에 의해 제공되는 실제 스토리지의 8 분의 1에 불과하거나, 가용 스토리지의 87.5%가 데이터의 중복된 사본을 위해 예약되어 있다. 데이터가 너무 민감하여 8 배 복제가 필요한 경우, 이 대가는 용납될 수 있다. 그러나 대부분의 사용자에게 이러한 리던던시는 과도하며 사용 가능한 스토리지(usable storage)의 감소는 용납할 수 없다.
따라서, 설정 모듈(340)은 ECC 모듈(330) 및 RAID/소거 코딩 모듈(335)에 의해 제공되는 것들로부터 특정 기술들을 사용하도록 ECC 모듈(330) 및 RAID/소거 코딩 모듈(335)을 지시(또는 프로그램, 또는 설정: 어떤 용어도 선호될 수 있다)하도록 사용될 수 있다.
ECC 모듈(330) 및 RAID/소거 코딩 모듈(335) 외에, 설정 모듈(340)에 의해 설정될 수 있는 다른 구성요소들, 구체적으로 메모리 칩들(315-1 ~ 315-8)이 있다. 다른 메모리 칩들은 데이터를 저장하는 다른 방법들을 제공할 수 있으며, 이는 메모리 칩들의 신뢰성에 영향을 줄 수 있다. 이 사실을 이해하려면 다른 유형의 메모리 스토리지를 이해하는 것이 중요하다.
메모리는 무슨 일이 일어나고 있는지에 따라 다양한 레벨들의 입도(세분도, granularity)에서 데이터를 관리한다. 예를 들어, 데이터를 읽고 쓰는 기본 액세스 유닛은 페이지이다 (이는 임의의 원하는 크기일 수 있다: 예, 4KB의 데이터). 페이지가 프리(free) 상태에 있는 경우, 페이지가 기록될 수 있다. 그러나 새 데이터가 기존 데이터를 대체할 때, 페이지들을 덮어쓸 수 없을 수 있다. 이 경우 원본 페이지는 유효하지 않은 것으로 표시되고, 새 데이터가 새 페이지에 기록된다. 페이지들은 블록들로 지칭되는 그룹들 안(속)으로 조직(organize)된다 (또는, 블록은 복수의 페이지들을 포함한다). 예를 들어, 블록은 64 또는 128 페이지들을 가질 수 있다. 블록 (또는 블록들의 그룹인 수퍼 블록)은 일반적으로 데이터를 소거(erase) (이는 페이지를 새로 쓸수 있는 프리(free) 상태로 반환한다)하는 유닛이다. 따라서, 소거를 위해 선택된 블록에 임의의 유효한 데이터가 있는 경우, 블록을 소거하기 전에 유효한 데이터를 블록 밖(또는 다른 블록)으로 복사해야 한다 (블록을 소거할 때 유효한 데이터가 손실되지 않아야 함).
그러나, 더 미세한 레벨들에서도, 데이터 스토리지에서 변형들이 존재한다. 셀들이라고 지칭되는 개별적인 유닛들은 페이지보다 세밀한 입도에서 데이터를 저장한다. (개별 셀들은 직접 액세스할 수 없다. 전체 페이지를 한 유닛으로 읽거나 쓸 수 있다.) 각 셀은 다양한 전압들이 인가될 때 응답하도록 설계되었다. 이러한 상이한 응답들을 사용하여 값을 셀에 읽거나 쓸 수 있다.
가장 간단한 형태에서, 셀은 그 응답이 변하는 단일 트리거(trigger) 전압(경계 지점으로 생각될 수 있음)을 갖는다. 즉, 해당 트리거 전압 미만의 전압을 인가하면 응답은, 해당 트리거 전압 이상의 전압을 인가하는 것과 다르다. 따라서 예를 들어 입력 전압이 0V에서 5V까지 변할 수 있으면, 셀이 응답하기 시작할 수 있는 지점이 2.5V가 될 수 있다. (셀이 응답하는 방법은 셀에 저장된 값에 따라 달라질 수 있다. 예를 들어, 셀이 이진 값 0을 나타내는 경우, 셀은 하나의 전압(예를 들어, 제 1 전압)을 출력할 수 있지만, 셀이 이진 값 1을 나타내는 경우, 셀은 다른 전압(예를 들어, 제 2 전압)을 출력할 수 있다.) 단일 비트만 저장하는 셀을 단일 레벨 셀(SLC; Single Level Cell)들이라고도 한다.
멀티 레벨 셀(MLC; Multi-Level Cell)들은 1 비트 보다 많은 비트들을 저장하는 셀들을 지칭한다. "멀티"는 "2 이상"을 의미하는 것으로 이해될 수 있지만, 실제로 MLC들은 일반적으로 2 비트들을 저장할 수 있는 반면, 트리들 레벨 셀 (TLC; Triple Level Cell)들은 3 비트들을 저장할 수 있고, 쿼드 레벨 셀(QLC; Quad-Level Cell)들은 4 비트들을 저장할 수 있다. MLC(및 1 비트 보다 많은 비트들을 저장하는 다른 모든 유형의 셀들)들은 다수의 비트들을 저장하기 때문에, MLC들은 다수의 트리거 전압들을 가진다. 예를 들어, 입력 전압이 0V에서 5V까지 변할 수 있는 경우, MLC는 1V, 2V, 3V 및 4V에서 트리거 전압들을 가질 수 있다. 트리거 전압에 따라, 플래시 메모리 칩은 셀에 저장된 실제 값을 결정할 수 있다. 따라서, 예를 들어, 트리거 전압이 1V이면, 셀은 값 00을 저장할 수 있고; 트리거 전압이 2V이면, 셀은 값 01을 저장할 수 있고; 트리거 전압이 3V이면, 셀은 값 10을 저장할 수 있고; 트리거 전압이 4V이면, 셀은 값 11을 저장할 수 있다.
다양한 셀 유형들은 서로 다른 장점/단점을 갖는다. 분명히, 셀 당 하나 이상의 비트 정보를 저장할 수 있다는 것은 동일한 양의 데이터를 저장하는 데 더 적은 수의 셀들이 필요하다는 것을 의미한다. 따라서, 데이터가 SLC들에 저장되면, 동일한 양의 데이터를 저장하기 위해 MLC들, TLC들 또는 QLC들이 필요한 것보다 더 많은 SLC들이 필요하다. 더 많은 비트들을 저장하는 개별 셀들은 더 적은 비트들을 저장하는 셀보다 더 비싼 경향이 있지만, 증가된 비용은 그러한 더 적은 셀들을 필요로 함으로써 상쇄될 수 있다. 따라서, 동일한 양의 데이터를 저장하기 위해, 일반적으로 QLC들이 TLC들보다 저렴할 수 있으며, 이는 MLC들보다 저렴할 수 있으며, 이는 SLC들보다 저렴할 수 있다.
그러나 비용을 상쇄할 수 있는 다른 요인들이 있다. 첫째, SSD는 셀에 저장된 값을 결정하기 위해 여러 다른 전압들에 대해 셀을 테스트해야 하므로, 수행해야 할 이러한 테스트가 많을수록 셀 성능이 저하될 수 있다. 예를 들어, QLC를 고려한다. QLC는 4 비트들의 데이터를 저장하므로, QLC는 16 개의 가능한 값들 중 하나를 취할 수 있다. 따라서 QLC를 읽으려면 16 개의 가능한 트리거 전압들에 대해 QLC를 테스트하는 것이 요구될 수 있으며, 이는 2 개의 트리거 전압들에 대해 셀을 테스트하는 것보다 시간이 오래 걸린다. 따라서, QLC들은 TLC들보다 느리게 판독될 수 있으며, 이는 MLC들보다 느리게 판독될 수 있으며, 이는 SLC들보다 느릴 수 있다. 더욱이, 셀이 저장할 수 있는 비트들이 많을수록, 셀 수명에서 프로그램/소거 주기들의 수가 감소할 수 있다. 예를 들어, SLC들은 셀이 실패하기 전에 100,000번의 프로그램/소거 동작들을 보장할 수 있는 반면, MLC들의 경우 10,000번, TLC들의 경우 1,000번, QLC들의 경우 100으로 떨어질 수 있다. 그러므로, 상이한 유형들의 셀들이 상이한 스토리지 프로파일(profile)들에 대해 더 잘 이용될 수 있다: QLC들은 거의 변하지 않는 데이터를 저장하는데 더 잘 사용될 수 있는 반면, SLC들은 비교적 변하는 빈도수가 높은 데이터에 사용될 수 있다.
셀 유형들의 최종 단점은 더 높은 밀도(density)의 데이터를 저장하는 셀들에 필요한 트리거 전압들의 개수와 다시 관련이 있다. 트리거 전압들의 수가 많을수록, 그 트리거 전압들이 서로 더 가깝게 배치될 수 있다. 그러나 트리거 전압들이 서로 가까울수록 잠재적인 오류에 대한 셀의 취약성이 높아진다. 예를 들어, QLC를 고려한다. QLC는 4 비트들의 데이터를 저장할 수 있으므로, QLC에는 16 개의 가능한 값이 존재한다. 16 개의 가능한 값들을 구별하려면 16 개의 트리거 전압들이 필요할 수 있으며, 이는 트리거 전압들 사이의 간격(gap)이 0.25V보다 약간 클 수 있음을 의미한다. 셀이 실제로 의도한 것과 다른 전압에 응답하고 있다고 생각하는데 급격한 전압 강하(dip) 또는 전압 상승(surge)이 요구되지 않으며, 이는 QLC가 셀 읽기 시도에 잘못 응답할 수 있다는 것을 의미한다. (고려해야 할 트리거 전압들이 적기 때문에 오류의 마진(margin of error)이 더 크더라도, 이 동일한 분석은 MLC 및 TLC 셀 유형들에도 적용할 수 있다)
따라서, 신뢰성의 문제로 되돌아 가면, QLC들은 더 높은 데이터 밀도들을 저장할 수 있지만, 오류의 마진이 감소되는 희생을 해야 한다. 그러나 QLC(또는 2 비트들의 데이터 이상을 저장하는 임의의 유형의 셀)가 다수의 비트들을 저장할 수 있다고 해서 QLC가 반드시 다수의 비트들을 저장해야 한다는 의미는 아니다. 이러한 QLC는 4 비트들의 데이터 미만을 저장하는 데 사용될 수 있으며, QLC의 다른 비트들에 할당된 임의의 값들은 읽기 동작에서 무시된다. QLC에 더 적은 비트들을 저장함으로써, 유효 트리거 전압들의 개수가 감소하여 오류의 마진을 넓힐 수 있다. (QLC는 16 개의 트리거 전압들 모두에 대해 테스트하기 위해 여전히 하드와이어(hardwire)될 수 있지만, 셀에 액세스하는 데 필요한 시간은 감소되지 않고, 오류 발생 가능성만 감소된다.)
예를 들어, QLC가 단지 1 비트의 데이터를 저장하는데 사용되었다고 가정한다. 이 값 (0 또는 1)은 QLC의 4 비트들 중 어느 하나에 저장될 수 있으며, 다른 비트들은 SSD에 의해 사실상 무시된다 (즉, 해당 비트들은 셀이 기록될 때 임의의 값들이 할당되고, 해당 비트들에서 읽은 값들은 무시되고 관심 비트만 반환된다). QLC는 이제 하나의 트리거 전압만 실질적으로 가지므로, 셀이 잘못 (예: 전압 변동으로 인해) 쓰이거나 잘못 읽힐 가능성이 줄어든다.
따라서, 균등한 플래시 메모리 칩들(315-1 ~ 315-8)의 동작 상의 거동(behavior)을 변경함으로써, SSD의 신뢰성에 영향을 줄 수도 있다. 그러나 고려해야 할 몇 가지 경고가 있다. 먼저, 플래시 메모리 칩들(315-1 ~ 315-8)의 동작 거동을 변경함으로써, SSD의 신뢰성이 영향을 받는지 여부는 플래시 메모리 칩들(315-1 ~ 315-8)에 사용되는 셀들의 유형에 의존한다. 셀들의 데이터 밀도가 높을수록, SSD의 신뢰성에 영향을 줄 수 있는 옵션들이 더 많다. 예를 들어 SLC들은 1 비트의 데이터만 저장하므로, SLC들 동작 형태를 변경함으로써, SLC들만 사용하는 SSD의 신뢰성은 향상되지 않을 수 있다.
더욱이, 상술한 개선점은 한 방향으로만 작동한다. 더 높은 밀도의 데이터를 저장할 수 있는 셀은, 셀의 일부 비트들을 무시함으로써 더 낮은 밀도의 데이터를 저장하는데 사용될 수 있다. 그러나 셀이 저장할 수 있는 것보다 더 많은 비트들을 셀에 저장하려고 시도하여, SSD의 신뢰성을 감소시킬 수는 없다. 예를 들어, SLC는 1 비트의 데이터만을 저장할 수 있기 때문에, (허용될 수 있는 신뢰성의 감소와 상관없이) SLC에 2 비트들을 저장할 수는 없다. (물론, 저장 가능한 것보다 적은 수의 비트들을 저장하는 셀은, 그 증가가 셀의 능력을 초과하지 않는다면, 데이터 밀도가 증가할 수 있다. 따라서, 예를 들어, 4 비트들을 저장할 수 있는 QLC가 현재 2 비트들만 저장하는 경우, 데이터 밀도가 3 비트들 또는 4 비트들로 증가할 수 있지만, 5 비트들로는 증가할 수 없다.)
둘째, 플래시 메모리 칩들(315-1 ~ 315-8)을 사용하여 동일한 데이터를 모두 저장하는 것과 같이, 셀에 저장할 수 있는 것보다 적은 수의 비트들을 저장하면 SSD에서 사용 가능한 스토리지(usable storage)가 줄어들 수 있다. 예를 들어, QLC 셀들을 사용하고 총 가용 스토리지 용량(total available storage)이 1TB 인 SSD를 고려한다. QLC들을 사용하여 셀 당 하나의 비트만 저장하는 경우, SSD의 유효 용량은 단지 256GB (총 사용 가능한 스토리지 용량의 25 %)이다. 나머지 768GB의 스토리지는 QLC들의 사용되지 않는 비트들에서 "손실"된다.
한편, 상이한 플래시 메모리 칩들은 서로 다른 전반적인(overall) 신뢰성들을 달성하도록 설정될 수 있다. 따라서, 예를 들어, 플래시 메모리 칩들(315-1 ~ 315-8)은 모두 QLC 셀들을 사용한다고 가정하자. 플래시 메모리 칩(315-1)은 각각의 셀에 하나의 비트만을 저장하도록 설정될 수 있으며, 이에 따라 감소된 가용 스토리지의 희생으로 증가된 신뢰성을 제공한다. 한편, 플래시 메모리 칩(315-2)은 각각의 셀에 4 비트들을 저장하도록 설정될 수 있어서, 낮은 신뢰성의 희생으로 최대 가용 스토리지를 제공할 수 있다.
설정 모듈(340)은 적절한 명령어들을 실행하는 범용 프로세서를 사용하여, 또는 FPGA, ASIC, GPU 또는 임의의 다른 원하는 구현을 사용하여 구현될 수 있다. 도 3에서, ECC 모듈(330), RAID/소거 코딩 모듈(335) 및 설정 모듈(340)은 서로 다른 구성요소들로서 도시된다. 이들 구성요소들은 별도로 제조되어 SSD(130)에 설치될 수 있기 때문에, 이들은 별도의 구성요소들로 구현될 수 있다. 또한 이러한 구성요소들은 실제로 물리적으로 다른 위치들에 있을 수 있다. 예를 들어, 도 5를 참조하여 상술된 및 추가로 논의되는 바와 같이, ECC 모듈(330)은 개별 채널들 (그러나 다수의 메모리 칩들에)에 적용될 수 있는 반면, RAID/소거 코딩 모듈(335)은 다수의 채널들에 걸쳐 적용될 수 있다. 이러한 설정들에서, ECC 모듈(330), RAID/소거 코딩 모듈(335) 및 설정 모듈(340) 중 임의의 것이 공통의 하드웨어(common hardware)를 사용하여 구현될 가능성은 적다. 그러나 본 발명의 개념의 몇몇 실시 예들에서, 이들 구성 요소들 중 일부 또는 전부가 공통의 하드웨어를 사용하여 구현될 수 있다.
상술된 논의는 설정 모듈(340)이 메모리 칩들(315-1 ~ 315-8), ECC 모듈(330) 및 RAID/소거 코딩 모듈(335)을 설정하기 위해 무엇을 할 수 있는지에 초점을 맞추고 있지만, 설정 모듈(340)이 그러한 동작들을 수행하도록 트리거(trigger)하는 것에 관해서는 아직 설명되지 않았다. 이하의 도 5 및 도 6은 설정 모듈(340)이 동작들을 수행하도록 트리거 할 수 있는 것을 논의한다.
마지막으로, 설정 모듈(340)을 지원하기 위해, SSD(130)는 신뢰성 테이블 스토리지(345)를 포함할 수 있다. 신뢰성 테이블 스토리지(345)는 신뢰성 테이블을 저장할 수 있다. 이 신뢰성 테이블은 메모리 칩들(315-1 ~ 315-8), ECC 모듈(330) 및 RAID/소거 코딩 모듈(335)에 의해 사용되는 다양한 스킴들의 조합들에 의해 제공되는 신뢰성에 대한 정보를 제공할 수 있다.
도 4는 도 1의 SSD(130)에 대한 신뢰성 테이블을 도시한다. 도 4에서 신뢰성 테이블(405)이 도시된다. 신뢰성 테이블(405)은 스토리지 스킴들(410), ECC 스킴들(415) 및 소거 코딩 스킴들(420)과 같은 다양한 열들을 포함한다. 집합 적으로, 스토리지 스킴들(410), ECC 스킴들(415) 및 소거 코딩 스킴들(420)은 설정들(425)을 구성한다: 즉, 신뢰성 테이블(405)에서 주어진 엔트리에 대한, 스토리지 스킴들(410), ECC 스킴들(415) 및 소거 코딩 스킴들(420)은 도 3의 메모리 칩들(315-1 ~ 315-8), 도 3의 ECC 모듈들(330), 도 3의 RAID/소거 코딩 모듈들(335)이 어떻게 설정될 수 있는지 구체적으로 명시한다. 다른 열들은 신뢰성(470) (주어진 설정의 전체 신뢰성을 명시할 수 있음), 공간 오버 헤드(430) (특정 설정을 사용함으로써 발생하는 임의의 공간 제한들을 명시할 수 있음) 및 성능(435) (특정 설정을 사용함으로써 발생하는 임의의 성능 제한들을 명시할 수 있음)을 포함할 수 있다. 신뢰성만이 도 1의 SSD(130)를 설정하는 방법에 대한 강력한 고려 사항이라면, 공간 오버 헤드(430) 및 성능(435)은 신뢰성 테이블(405)에서 생략될 수 있다.
신뢰성 테이블(405)은 도 1의 SSD(130)의 각각의 가능한 설정에 대한 엔트리들을 포함할 수 있다. 예를 들어, 도 4는 6 개의 엔트리들(440, 445, 450, 455, 460, 465)를 포함하는 신뢰성 테이블을 도시한다. 각각의 엔트리는 도 1의 SSD(130)의 상이한 가능한 설정을 나타낸다. 따라서, 예를 들어, 엔트리(440)는 도 3의 메모리 칩들(315-1 ~ 315-8)에 대한 제 1 스토리지 스킴(Storage1), 도 3의 ECC 모듈(330)에 대한 제 1 ECC 스킴(ECC1), 도 3의 RAID/소거 코딩 모듈(335)에 대한 제 1 소거 코딩 스킴(EC1)을 사용하는 설정에 대한 신뢰성을 식별한다. 이 설정에 대해서, 전체 신뢰성은 기록된 또는 판독된 1012 비트들에서 1개의 오류이다. 이 설정은 또한 공간 오버 헤드 또는 성능 오버 헤드를 부과(impose)하지 않는다 (예를 들어, 엔트리(440)는 도 1의 SSD(130)의 기본 설정을 나타낼 수 있으며, 이 경우 엔트리(440)에 대한 신뢰성 비율은 도 1의 SSD(130)에 대한 공시된 신뢰성 비율일 수 있다). 대조적으로, 엔트리(445)는 도 3의 메모리 칩들(315-1 ~ 315-8)에 대해 제 2 스토리지 스킴(Storage2), 도 3의 ECC 모듈(330)에 대한 제 1 ECC 스킴(ECC1), 도 3의 RAID/소거 코딩 모듈(335)에 대한 제 1 소거 코딩 스킴(EC1)을 사용하는 설정을 나타낸다. 이 설정은 기록된 또는 판독된 1014 비트들에서 1개의 오류가 있는 신뢰성 비율을 갖고, 도 1의 SSD(130)의 가용 저장 용량에서 50 % 감소를 부과한다 (그러나 성능 오버 헤드는 없음). 예를 들어, 엔트리(445)는 리던던시를 위해 데이터가 2 개의 상이한 메모리 칩들에 기록되는 설정을 나타낼 수 있으며, 이는 SSD(130)의 전체 신뢰성을 향상시키지만 가용 스토리지의 양을 감소시키는 희생을 치른다.
엔트리들(450, 455)는 엔트리들(440, 445)과 유사하지만, 제 2 ECC 스킴(ECC2)을 사용하는 도 3의 ECC 모듈(330)을 갖는다. 알 수 있는 바와 같이, 이 설정들은 각각 1016 및 1018 비트들에서 1개의 오류가 있는 신뢰성 비율을 갖는다: 엔트리들(440, 445)에 도시된 설정에 비해 104 개선된다. 그러나 제 2 ECC 스킴(ECC2)은 제 1 ECC 스킴(ECC1)보다 더 많은 계산 자원들을 요구할 수 있기 때문에, 엔트리들(450, 455)이 가리키는 설정들은 25 %의 성능 적중(hit)을 부과할 수 있다 (즉, 도 1의 SSD(130)는 엔트리들(440, 445)이 가리키는 설정들 보다, 엔트리들(450, 455)이 가리키는 설정을 사용하여 읽기 및/또는 쓰기 요청들을 처리하는데 25 % 더 많은 시간을 요구할 수 있다)
엔트리들(460, 465)은 엔트리들(440, 445)과 유사하지만, 제 2 소거 코딩 스킴(EC2)을 갖는 도 3의 RAID/소거 코딩 모듈(335)을 갖는다. 알 수 있는 바와 같이, 이 설정들은 각각 1014 및 1017 비트들에서 1개의 오류가 있는 신뢰성 비율을 가지며, 이는 10-100 배 더 큰 신뢰성을 나타낸다. 그러나 제 2 소거 코딩 스킴(EC2)은 제 1 소거 코딩 스킴(EC1)보다 더 많은 계산 자원들을 요구할 수 있기 때문에, 엔트리들(460, 465)이 가리키는 설정은 10 %의 성능 적중(hit)을 부과할 수 있다 (즉, 도 1의 SSD(130)는 엔트리들(440, 445)이 가리키는 설정들 보다 엔트리들(460, 465)이 가리키는 설정들을 사용하는 읽기 및/또는 쓰기 요청들을 처리하는데 10 % 더 많은 시간을 요구할 수 있다)
제 2 소거 코딩 스킴(EC2) 단독에 의해 제공되는 개선은 엔트리들(460, 465)이 가리키는 설정들 모두에 대해 동일하지 않다는 점에 유의한다. 엔트리들(460, 465)은 도 1의 SSD(130)의 다른 구성 요소들에 대해 다른 스킴들 조합하는 것이, 임의의 신뢰성을 제공하는 오직 하나의 구성 요소에 비해 개선점을 제공할 수 있지만, 다른 구성 요소들에 대한 스킴들을 조합하는 것의 이점은 완전히 직교적(orthogonal, 서로 간에 독립적)인 것은 아니라는 사실을 나타낸다. 달리 말하면, 다수의 구성 요소들의 신뢰성 옵션들을 사용하는 것이 단일 구성 요소의 하나의 신뢰성 옵션을 사용하는 것보다 우수할 수 있지만, 두 구성 요소들 모두 사용하여 신뢰성을 향상시킬 때, 두 구성 요소들의 신뢰성들을 단순히 곱하여 신뢰성 비율을 결정하는 것은 아니다. 따라서, 예를 들어, 도 3의 메모리 칩들(315-1 ~ 315-8), 도 3의 ECC 모듈(330), 도 3의 RAID/소거 코딩 모듈(355)에서 판독 또는 기록된 1010 비트들에서 1개의 오류를 갖는 오류율을 제공하는 특정 스킴들이 있더라도, 3 가지 스킴 모두를 함께 사용한다고 해서 필연적으로 판독 또는 기록된 1030 비트들에서 1개의 오류를 갖는 오류율이 되는 것은 아니다.
따라서, 스킴들의 조합의 신뢰성 비율이 개별 스킴들의 신뢰성 비율의 곱으로서 계산되지 않으면, 특정 설정의 신뢰성 비율은 신뢰성 테이블(405)의 엔트리에 어떻게 결정될 수 있는가? 답은 도 1의 SSD(130)의 제조자가 가능한 모든 설정을 개별적으로 테스트하는 것이다. 즉, 다양한 SSD들은 각각의 가능한 설정들의 조합을 사용하도록 설정될 수 있다. 그리고 이러한 SSD들을 테스트하여 각각의 오류율들 (및 공간 오버 헤드 및 성능 오버 헤드)을 확인한다. 이 정보는 이후 동일한 사양들(specifications)에 따라 제조된 모든 SSD들에 대한 신뢰성 테이블(405)에 저장될 수 있다.
또한, 도 4는 도 3의 메모리 칩들(315-1 ~ 315-8), 도 3의 ECC 모듈(330) 도 3의 RAID/소거 코딩 모듈(335) 각각을 사용하는 신뢰성에 대한 상이한 스킴들의 조합들만을 도시하고 있으나, 신뢰성 테이블(405)은 개별 스킴들의 신뢰성 비율 (및 원하는 경우, 공간 및 성능 오버 헤드)을 나타내기 위해 또한 사용될 수도 있다. 예를 들어, 신뢰성 테이블(405)은, 도 3의 ECC 모듈(330) 또는 도 3의 RAID/소거 코딩 모듈(335) 대한 관련된 스킴 없이, 도 3의 메모리 칩들(315-1 ~ 315-8)에 대한 제 1 및 제 2 스토리지 스킴(Storage1, Storage2) 대한 엔트리들을 포함할 수 있다: 이 경우에, (도 3의 ECC 모듈(330) 또는 도 3의 RAID/소거 코딩 모듈(335)로부터의 어떠한 신뢰성 향상을 추가하지 않고) 이들 엔트리들은 제 1 및 제 2 스토리지 스킴(Storage1, Storage2)을 사용하는 신뢰성 비율을 각각 나타낼 수 있다. 유사하게, 신뢰성 테이블(405)은 단지 제 1 및 제 2 ECC 스킴(ECC1, ECC2), 및/또는 제 1 및 제 2 소거 코딩 스킴(EC1, EC2) 대한 엔트리들을 포함할 수 있다.
신뢰성 테이블(405)은 다수의 축들을 따라 검색될 수 있다. 예를 들어, 신뢰성 테이블(405)은 특정 설정의 신뢰성 (및 공간 오버 헤드 및/또는 성능과 같은 다른 결과들)을 결정하기 위해 사용될 수 있다. 신뢰성 테이블(405)은 또한 특정 신뢰성을 지원하는 설정을 결정하는데 사용될 수 있다. 즉, 특정의 원하는 신뢰성 비율이 주어지면, 신뢰성 테이블(405)은 그 신뢰성 비율 (또는 우수한 신뢰성 비율)을 제공하는 특정 설정을 찾기 위해 검색될 수 있다.
다수의 설정들이 원하는 신뢰성 비율 (또는 우수한 신뢰성 비율)을 제공할 수 있다면, 도 3의 설정 모듈(340)은 임의의 원하는 접근법을 사용하여 옵션들 중에서 선택할 수 있다. 예를 들어, 도 3의 설정 모듈(340)은 원하는 신뢰성 비율을 충족하거나 초과하는 가장 낮은 신뢰성 비율 또는 가장 높은 신뢰성 비율을 제공하는 설정을 선택할 수 있다. 또는, 도 3의 설정 모듈(340)은 (신뢰성 테이블(405)에 포함된 경우) 설정의 공간 오버 헤드 및/또는 성능 결과들을 사용하여 가장 적은 다른 결과들과 충분한 신뢰성 비율을 제공하는 설정을 선택할 수 있다. 도 3의 설정 모듈(340)은 또한 충분한 신뢰성을 제공하는 다수의 설정들 중에서 선택하기 위해 임의의 다른 원하는 기술을 사용할 수 있다.
신뢰성 테이블(405)에서 특정 조합을 식별하는데 도움을 주기 위해, 신뢰성 테이블(405)은 또한 식별자(475)를 포함할 수 있다. 식별자(475)는 신뢰성 테이블(405)의 각각의 엔트리에 할당된 고유 식별자일 수 있다. 따라서, 예를 들어, 엔트리(440)는 식별자 "1"이 할당되고, 엔트리(445)는 식별자 "2" 등이 할당될 수 있다. 식별자(475)가 숫자이거나 순차적일 필요는 없음에 유의한다. 예를 들어, 식별자(475)는 임의의 문자열들, 또는 엔트리에 도시된 정보의 해시들, 또는 임의의 다른 원하는 식별자일 수 있다. 유일하게 유용한 요소는 식별자(475)가 고유할 수 있으며, 따라서 신뢰성 테이블(405)의 고유한 엔트리는 주어진 식별자를 사용하여 찾을 수 있다.
도 3으로 되돌아 가면, 도 3은 4 개의 채널들(320-1 ~ 320-4)로 조직된 8 개의 메모리 칩들(315-1 ~ 315-8)을 포함하는 SSD(130)를 도시하지만, 본 발명의 실시 예들은 임의의 수의 채널들로 조직된 임의의 수의 메모리 칩들을 지원할 수 있다. 유사하게, 도 3은 SSD의 구조를 도시하지만, 다른 스토리지 장치 (예를 들어, 하드 디스크 드라이브들)는 상이한 구조를 사용하여 구현될 수 있지만 유사한 잠재적 이점을 갖는다.
도 5는 도 1의 SSD(130)의 대안적인 뷰를 도시한다. 도 5에서, SSD(130)는 RAID/소거 코딩 모듈(335), ECC 모듈들(330-1, 330-2, 330-3)을 포함하는 것으로 도시되어 있으며, 각각 채널들(320-1, 320-2, 320-3)을 따라 동작할 수 있다. 채널들(320-1, 320-2, 320-3)은 메모리 칩들(315-1, 315-3, 315-5)을 포함한다. 따라서, 데이터는 RAID 또는 소거 코딩을 사용하여 다수의 메모리 칩들에 저장되도록 조직될 수 있으며, 이들 각각은 상이한 (또는 동일한) 채널들 상에 있을 수 있다.
데이터는 애플리케이션들(505-1, 505-2)로부터 수신될 수 있다 (그러나, 임의의 수 (하나 이상의) 애플리케이션들이 있을 수 있음). 각각의 애플리케이션은 자신이 원하는 신뢰성(510-1, 510-2)을 가질 수 있다. 각 애플리케이션의 원하는 신뢰성은 해당 애플리케이션이 원하는 신뢰성 비율을 나타낸다. 원하는 신뢰성들(510-1, 510-2)은 합의(또는 동일)할 필요가 없다: 각 어플리케이션은 다른 신뢰성을 기대할 수 있다.
각각의 애플리케이션(505-1, 505-2)은 각각 자신의 연관된 명칭 공간(namespace)(515-1, 515-2)을 가질 수 있다. 명칭 공간들(515-1, 515-2)은 각 애플리케이션에서 들어오는 데이터를 쉽게 식별 및/또는 그룹화할 수 있도록 구성(조직)하는 방법들을 제공한다. 명칭 공간들(515-1, 515-2)의 사용은 선택 사항이다.
도 5는 데이터 중복 제거(data deduplication) 및 압축의 개념을 나타낸다. 데이터 중복 제거는 SSD(130)에 저장된 특정 데이터의 다수의 사본이 있을 수 있다는 아이디어를 참조한다. 다수의 사본을 저장하는 대신, 단일 사본이 저장되고 다른 사본들은 저장된 사본을 참조한다. 이렇게 하면, 다수의 파일들을 저장하는 데 사용되는 공간의 양이 줄어 든다.
예를 들어, 사진과 같은 이미지 파일을 고려한다. 동일한 사진이 아마도 여러 파일 이름들로 여러 번 저장되는 것은 드문 일이 아니다 (사진이 이전에 다른 이름으로 저장되었다는 사실을 잊기 쉽기 때문에). 그러나 호스트 머신 또는 SSD(130)가 특정 파일이 이전에 저장된 파일의 복제본(duplicate)인 것을 인식하는 것은 충분히 간단하다 (SSD(130)가 중복 파일들을 식별하는 일부 처리 능력을 포함한다고 가정). 동일한 사진을 여러 번 저장할 필요는 없다. (복제본들이 저장된 다른 폴더들로부터 참조(reference)들과 함께) 단일 사본이면 충분하다.
데이터 복제본이 식별될 수 있는 방법의 예로서, 각 파일마다 암호화 해시가 생성될 수 있다. 두 파일들의 암호화 해시가 동일하면, 두 파일들에 동일한 데이터가 포함되어 있을 가능성이 (아마도 강한 가능성) 있다. 따라서, 새로운 파일이 SSD(130) 상에 이미 저장된 파일의 복제본인지 결정하는 것은, 단지 그 새로운 파일의 암호화 해시를 생성하고, 그 암호화 해시를 다른 파일들의 암호화 해시 (아마도 해시 테이블을 사용)와 비교하고, 및 일치하는 경우, 일치하는 파일의 데이터와 (상세하게) 비교를 수행한다.
데이터 중복 제거는 임의의 원하는 데이터 유닛에서 동작 할 수 있음에 유의한다. 파일들은 데이터 중복 제거를 위한 공통의(common) 유닛이지만, 다른 유닛들은 블록들 또는 페이지들(SSD(130) 내의 데이터 유닛)일 수 있다. 또 다른 데이터의 유닛들이 사용될 수도 있다.
한편, 압축은 원시 데이터보다 적은 공간을 차지하는 방식으로 데이터가 저장될 수 있는 기술들을 의미한다. 예를 들어, 숫자 10100 (일반적으로 구골(googol)이라고 함)을 고려한다. 이 숫자를 원시 값으로 저장하려면 약 2300 비트들 또는 238 바이트들이 필요하다 (컴퓨터가 이렇게 큰 정수를 저장하도록 설계되었다고 가정하면). 반면, 이 숫자는 1개의 "1"과 뒤따르는 100개의 "0"으로 표시될 수도 있다. 런 길이 부호화(Run Length Encoding)와 같은 인코딩 스킴을 사용하면, 이 값은 1, 1, 100, 0의 4 바이트들 (즉, "1"값의 하나의 사본 및 "0"값의 100 개 사본들)을 사용하여 표현할 수 있다. 4 바이트들은 238 바이트들보다 상당히 작기 때문에, 이 값에 인코딩을 사용하여 공간을 절약하는 것은 조금의 과장 없이 엄청나다 할 수 있다. ("압축"이라는 용어는 일반적으로 허프만 코드들(Huffman code)과 같은 구조들을 사용하여 데이터를 인코딩하는 알고리즘들을 의미하지만, 이 문맥에서 "압축"은 데이터가 차지하는 공간의 양을 줄이는 데 사용될 수 있는 임의의 기술들을 의미하므로 "인코딩"과 같은 용어를 사용하여 일반적으로 언급되는 기술들을 포함한다.)
스토리지 장치에서 차지할 수 있는 “풋 프린트(footprint)” 데이터를 줄일 수 있다는 점에서, 데이터 중복 제거 및 압축은 그들만의 장점들이 있지만, 특히 오류들을 논의할 때 잠재적인 단점이 있다. 예를 들어 SSD(130)에 저장된 특정 파일에 실제로 5 개의 상이한 파일들 (원본 1 개와 4 개의 복제본)에 대한 데이터가 포함되어 있다고 가정한다. 4 개의 복제본들은 원본 파일로서 동일한 데이터를 가리키기 때문에, 저장된 파일의 어느 곳에 단일 비트 오류가 있으면, 임의의 다른 파일들에 액세스 할 때마다 해당 오류를 읽는다. 따라서, SSD(130)에 저장된 데이터에 대한 단일 비트 오류는 실제로 5 비트 오류들로 이해될 것이다: 원본 파일 및 복제본들 각각에서의 동일한 비트 오류. 다시 말해서, 데이터 중복 제거 기술은 파일의 참조된 사본들의 개수만큼 SSD(130)의 오류율을 확대한다.
유사하게, 압축은 실제 오류율이 무엇인지에 영향을 줄 수 있다. 런 길이 부호화를 사용하여 10100을 저장하는 방법의 예를 다시 고려한다. "0"값이 "1"(단일 비트 오류)로 바뀌면, 인코딩의 전체 길이에 걸쳐 해당 오류가 확대된다. 10100을 나타내는 대신, 인코딩은 101번 반복된 숫자 "1"을 나타낸다: 매우 다른 값이다. 따라서 압축된 데이터의 단일 비트 오류는 실제로 보다 효과적으로 많은 수의 비트 오류들을 의미할 수 있다. 일반적인 가이드로서, 사용된 기술의 압축비에 비례하여 단일 비트 오류가 대략 확대될 수 있다. 따라서, 압축 기술로 인해 데이터를 2만큼 압축하는 경우 (즉, 절반의 공간을 차지함), 단일 비트 오류는 데이터에서 2 비트 오류들을 사실상 의미한다. 압축 기술로 인해 데이터를 3만큼 압축하는 경우 (즉, 1/3의 공간을 차지하는 경우) 단일 비트 오류는 사실상 데이터의 3 비트 오류들을 의미한다 (최악의 경우, 압축된 데이터에서 단일 비트 오류는 실제로 원시 데이터를 전혀 복구하지 못할 수 있다.)
따라서, 도 4의 신뢰성 테이블(405)의 엔트리들은 SSD(130)의 신뢰성을 위한 유용한 시작점일지라도, SSD(130)의 진정한 신뢰성을 완전히 나타내지 않을 수 있다. 이를 위해, SSD(130)는 (아마도 설정 모듈(340)을 통해) 애플리케이션들(505-1, 505-2)을 대신하여 수행되는 트랜잭션들(데이터 중복 제거 및 압축은 두 가지 예시들이다.)을 추적할 수 있다. 그리고 SSD(130)는 이러한 트랜잭션들을 사용하여 승수(multiplier)를 결정한다. (SSD(130)의 설정을 기반으로 도 4의 신뢰성 테이블(405)로부터 결정된) SSD(130)의 신뢰성은, SSD(130)의 유효 신뢰성 비율을 결정하기 위해, 이 승수에 의해 곱해질 수 있다.
신뢰성 비율에 대한 승수는 임의의 원하는 접근법들을 사용하여 결정될 수 있다. 예를 들어, SSD(130)는 특정 트랜잭션을 추적하고, 그 트랜잭션에 적용 가능한 승수를 결정한 다음, 그 승수 및 이전 승수 중 큰 값을 유지할 수 있다. 그러나 이 방법은 승수들이 서로 독립적이라고 가정한다. 데이터 중복 제거가 승수를 도입(introduce)할 수 있는 사용된 유일한 기술이거나, 압축이 승수를 도입할 수 있는 사용된 유일한 기술인 경우, 이러한 가정은 합리적일 수 있다. 그러나 압축된 파일에 데이터 중복 제거가 적용되는 경우, 모두 공간 절약 방식의 결과로 단일 비트 오류가 증대될 수 있다.
따라서, SSD(130)는 현재까지 가장 높은 승수뿐 만 아니라, 각각의 공간 절약 스킴에 개별적으로 적용 가능한 가장 높은 승수를 추적할 수 있다. 이러한 방식으로 SSD(130)는 새로운 승수가 단일 스킴에 대한 최고 승수인지 여부뿐 만 아니라, 승수가 스킴들을 겹칠(cross) 수 있는지 여부를 고려할 수 있다. 예를 들어, SSD(130)가 현재 다음을 추적한다고 가정한다: (압축 대상 파일은 SSD(130)에 두 번 이상 저장되지 않았다고 가정할 때) 최고 압축 승수 2.0, 최고 데이터 중복 제거 승수 5.0, 및 최고 전체 승수 5.0. 그러면 SSD(130)가 이전에 압축 및 중복 제거된 파일이 세 번째로 기록된 것을 추적하면, 이는 해당 파일의 3 개의 사본들은 SSD(130)에 이제 저장되었다는 것을 (중복 제거됨) 의미한다. 따라서 이 트랜잭션은 (새 압축이 발생하지 않았기 때문에) 최고 압축 승수 또는 (모든 파일의 현재 최대 복제본의 개수는 5이므로) 최고 중복 제거 승수를 증가시키지 않지만, 최고 전체 승수는 6.0으로 증가될 수 있다. (2.0 승수의 대상이 되는 압축된 파일의 사본이 3 개 있기 때문에) 따라서, (도 4의 신뢰성 테이블(405)에서 알려져 있는 바와 같이) 신뢰성 비율이 무엇이든, 그 신뢰성 비율은 6.0을 곱하여 SSD(130)의 유효 신뢰성을 결정한다. 대안적으로, SSD(130)는 압축 및 데이터 중복 제거 각각에 대해 최고 승수를 추적하고, SSD(130)의 최소 유효 신뢰성을 결정하기 위해 두 가지를 모두 신뢰성에 적용한다. (압축 및 데이터 중복 제거가 모두 적용되는 SSD(130)에 저장된 데이터가 없을 수 있기 때문에 이 계산은 트랜잭션들의 영향을 과도하게 강조할 수 있으나, 그럼에도 불구하고 보수적인 계산이 사용될 수 있다.)
SSD(130)의 유효 신뢰성에 대한 트랜잭션들의 이러한 영향은 또한 SSD(130)에 대한 설정의 선택을 고려할 수 있다. 예를 들어, SSD(130)에 저장된 데이터로 인해 승수가 있다는 것을 알면, 설정 모듈(340)은 다양한 설정들의 신뢰성을 애플리케이션들(505-1, 505-2)의 원하는 신뢰성(510-1, 520-2)과 비교할 때, 그 승수를 사용할 수 있다. 즉, 도 4의 신뢰성 테이블(405)에 열거된 신뢰성들을 원하는 신뢰성(510-1 및 520-2)들과 단순히 비교하는 것만으로는 충분하지 않을 수 있다: SSD(130)에 현재 저장된 데이터가 주어진 경우, SSD(130)의 유효 신뢰성을 반영하기 위해, 도 4의 신뢰성 테이블(405)에 열거된 신뢰성들은 승수에 따라 조정될 필요가 있다.
도 6은 도 5의 애플리케이션(505-1)과 도 1의 SSD(130)간에 교환된 메시지들을 보여준다. 본 발명의 개념의 일 실시 예에서, 애플리케이션(505-1)은 신뢰성 메시지(605)를 SSD(130)에 전송할 수 있다: 신뢰성 메시지(605)는 도 5의 원하는 신뢰성(510-1)을 포함할 수 있다. (도 6에 도시되지는 않았지만, 도 5의 애플리케이션(505-2)은 또한 SSD(130)를 사용하는 다른 애플리케이션들과 함께 그들 자신의 원하는 신뢰성들을 전송할 수 있다.) 그 후, SSD(130)는 셀프 설정(610)에 의해 도시된 바와 같이, 제공된 원하는 신뢰성들 (즉, 제공된 가장 엄격한 신뢰성을 만족함으로써) 모두를 만족시키도록 (도 3의 설정 모듈(340)을 사용하여) 스스로 설정할 수 있다.
그러나 본 발명의 개념의 다른 실시 예에서, 애플리케이션(505-1)은 신뢰성 요청(615)을 전송할 수 있다. 신뢰성 요청(615)은 SSD(130)의 (위에서 설명된 바와 같이 결정되는) 유효 신뢰성을 요청할 수 있으며, 이는 메시지(620)로 반환될 수 있다. 애플리케이션(505-1)은 또한 신뢰성 테이블 요청(625)을 전송할 수 있으며, 이는 SSD(130)로부터 도 4의 신뢰성 테이블(405)을 요청할 수 있다. SSD(130)는 메시지(630)에서 도 4의 신뢰성 테이블(405)을 반환함으로써 응답할 수 있다. 그러면 애플리케이션(505-1)은 충분한 신뢰성 (도 5의 원하는 신뢰성(510-1) 또는 일부 우수한 설정)을 제공하는 설정을 선택할 수 있고, 설정 요청(635)을 SSD(130)에 전송하여, 애플리케이션(505-1)이 원하는 도 4의 신뢰성 테이블(405)의 엔트리를 식별할 수 있다. 그러면 SSD(130)는 셀프 설정(640)에 의해 도시 된 바와 같이 식별된 신뢰성 테이블(405)의 엔트리에 따라 자체(셀프) 설정할 수 있다.
그러나, 셀프 설정(640)은 점선들로 도시되어 있음에 유의한다. 여기에는 두 가지 이유들이 있다. 먼저, 애플리케이션(505-1)은 아마도 메시지(620)에서 수신된 유효 신뢰성 비율을 비교할 것이다: 유효 신뢰성 비율이 도 5의 원하는 신뢰성(510-1)보다 높은 경우, 애플리케이션(505-1)은 설정 요청(635)을 송신하지 않을 것이다 (이 경우 셀프 설정(640)은 필요하지 않음). 그러나 본 발명의 개념의 일부 실시 예들에서, 애플리케이션(505-1)은 SSD(130)로부터 유효 신뢰성을 요구하지 않고, 대신에 도 4의 신뢰성 테이블(405)로부터 원하는 설정을 선택하고, 이에 따라 설정 요청(635)을 전송할 수 있다. 본 발명의 개념의 이러한 실시 예들에 서, SSD(130)는 (아마도 설정 모듈(340)을 통해) 유효 신뢰성을 설정 요청(635)에서 식별된 설정과 비교할 수 있다. SSD(130)의 유효 신뢰성이 설정 요청(635)에서 식별된 설정의 신뢰성보다 큰 경우, SSD(130)는 셀프 설정(640)을 생략할 수 있다 (현재 설정이 이미 충분하기 때문에).
둘째, 상술한 바와 같이, 애플리케이션(505-1)은 독립적으로(고립되어 별개로) 동작하지 않을 수 있다: 다른 애플리케이션들(도 5의 애플리케이션(505-2)과 같은)은 그들 자신의 설정 요청(635)을 전송할 수 있다. 이 경우, SSD(130)는 모든 애플리케이션들을 만족시키는 방식으로 셀프 설정을 선택할 수 있고, 따라서 가장 높은 신뢰성 비율을 갖는 설정에 따라 설정할 수 있다 (그 설정을 요청하는 애플리케이션이 신뢰성이 더 낮은 설정에 의해 만족되지 않을 수 있다는 가정하에). 따라서, SSD(130)는 셀프 설정(640)을 수행할 수 있지만, 셀프 설정(640)은 설정 요청(635)에 지정된 것과 다른 설정을 포함(수반)할 수 있다.
도 6에서, 설정 모듈(340)은 도 1의 SSD(130)를 설정할 때 애플리케이션(505-1)에 응답할 수 있다. 그러나 설정 모듈(340)은 또한 도 1의 SSD(130)를 설정하기 위해 "자발적으로" 동작할 수 있다. 예를 들어, 원하는 신뢰성이 주어지면, (다른 가능성들 중에서, 신뢰성 메시지(605)에서 애플리케이션(505-1)으로부터 수신된 도 5의 원하는 신뢰성(510-1) 일 수 있거나, 또는 제조자에 따라, 도 1의 SSD(130)의 공시된 신뢰성 일 수 있음) 설정 모듈(340)은 도 1의 SSD(130)의 유효 신뢰성을 추적할 수 있다. 도 1의 SSD(130)의 유효 신뢰성이 원하는 신뢰성 아래로 떨어지면, 도 1의 SSD(130)의 신뢰성을 허용 가능한 레벨로 유지하도록 보장하기 위해, 설정 모듈(340)은 (임의의 승수들을 고려하여) 원하는 신뢰성을 제공하는 새로운 설정을 선택할 수 있다.
설정 모듈(340)이 어떻게 도 1의 SSD(130)를 설정할 수 있는지 언급할 가치가 있다. 상술된 바와 같이, 도 4의 신뢰성 테이블(405)의 엔트리들은 도 3의 메모리 칩들(315-1 ~ 315-8), 도 3의 ECC 모듈(330), 도 3의 RAID/소거 코딩 모듈(335)에 의해 사용될 특정 스킴들을 지정한다. 도 1의 SSD(130)를 설정하려면. 설정 모듈(340)은 어떤 스킴을 사용할 것인지에 관해 이들 구성 요소들에 지시할 수 있다. 즉, 설정 모듈(340)은 도 3의 메모리 칩들(315-1 ~ 315-8)에 각각의 셀에 저장할 비트들의 특정 개수를 지시 및/또는 도 3의 ECC 모듈(330)에 특정 ECC 스킴을 사용하라고 지시, 및/또는 도 3의 RAID/소거 코딩 모듈(335)에 특정 소거 코딩 스킴을 사용하라고 지시할 수 있다. 데이터가 이미 (제자리에) 존재하는 스킴을 변경하는 것은 도 1의 SSD(130)로부터 데이터를 판독하고, 충분한 신뢰성이 유지되도록 해당 데이터에 적용되는 스킴을 변경하는 것을 포함할 수 있음에 유의한다. 따라서 예를 들어, 데이터가 현재 각각의 QLC 셀에서 4 비트들을 사용하여 저장되지만 이제는 각각의 QLC 셀에서 오직 2 비트들에 저장될 필요가 있다면, 도 3의 메모리 칩들 (315-1 ~ 315-8)에 데이터는 읽혀지고, 어딘가에 (일부 로컬 스토리지 또는 서버(110)의 메인 메모리에) 일시적으로 버퍼링된 다음, 새로운 스토리지 스킴을 사용하여 메모리 칩들(315-1 ~ 315-8)에 다시 기록될 수 있다. 유사하게, 새로운 ECC 스킴 또는 소거 코딩 스킴을 적용하는 것은 변화를 적용하기 위해, SSD(130)로부터 데이터를 판독하고 SSD(130)에 데이터를 기록하는 것을 포함할 수 있다.
도 7은 본 발명의 실시 예에 따른, 원하는 신뢰성을 제공하도록 스스로를(셀프) 설정하는 도 1의 SSD(130)에 대한 예시적인 절차의 흐름도를 도시한다. 도 7을 참조하면, 블록(705)에서 도 3의 설정 모듈(340)은 도 1의 SSD(130)에 대한 원하는 신뢰성을 결정할 수 있다. 상술된 바와 같이, 도 3의 설정 모듈(340)은 자신의 원하는 신뢰성을 선택하거나, 도 5의 애플리케이션(505-1)으로부터 도 6의 신뢰성 메시지(605)를 통해 도 5의 원하는 신뢰성(510-1)을 수신할 수 있다. 블록(710)에서 도 3의 설정 모듈(340)은 도 1의 SSD(130)의 유효 신뢰성을 결정할 수 있다. 블록(715)에서 도 3의 설정 모듈(340)은 원하는 신뢰성을 (트랜잭션들로 인한 임의의 승수들을 고려한) 도 1의 SSD(130)의 유효 신뢰성과 비교할 수 있다. 유효 신뢰성이 원하는 신뢰성을 만족시키기에 충분하면, 프로세싱이 완료되고, 도 3의 설정 모듈(340)이 더 이상 동작할 필요가 없다.
반면에, 유효 신뢰성이 원하는 신뢰성보다 낮으면, 블록(720)에서 도 3의 설정 모듈(340)이 그곳에 있는 엔트리들을 고려하기 위해서, 도 4의 신뢰성 테이블(405)에 액세스(또는 접근)할 수 있다. 블록(725)에서, 도 3의 설정 모듈(340)은 도 4의 신뢰성 테이블(405)에서 적어도 원하는 신뢰성만큼 높은 (임의의 승수들을 고려하여) 신뢰성을 갖는 엔트리를 선택할 수 있다. 블록 (730)에서, 도 3의 설정 모듈(340)은 도 4의 신뢰성 테이블(405)에서 선택된 엔트리의 설정에 따른 도 1의 SSD(130)를 설정하고, 그 후에 처리가 완료될 수 있다.
도 8은 스스로를(또는 셀프) 설정하는 도 1의 SSD(130)에 대한 예시적인 절차의 흐름도를 도시한다. 도 8을 참조하면, 블록(805)에서, 도 3의 설정 모듈(340)은 도 3의 하나 이상의 메모리 칩들(315-1 ~ 315-8)을 특정 스토리지 스킴을 사용하도록 설정할 수 있다. 블록(810)에서, 도 3의 설정 모듈(340)은 도 3의 ECC 모듈(330)을 특정 오류 정정 코드 스킴을 사용하도록 설정할 수 있다. 블록(815)에서, 도 3의 설정 모듈(340)은 도 3의 RAID/소거 코딩 모듈(335)을 특정 소거 코딩 스킴을 사용하도록 설정할 수 있다. 블록들(805, 810, 815)은 모두 개별적으로 선택적이고, 점선(820, 825 및 830)으로 도시된 바와 같이 생략될 수 있다.
도 9A-9B는 원하는 신뢰성을 결정하기 위해, 도 1의 SSD(130)에 대한 예시적인 절차의 흐름도를 도시한다. 도 9A를 참조하면, 블록(905)에서, 도 1의 SSD(130)는 SSD(130)의 원하는 신뢰성을 지정할 수 있는 도 6의 신뢰성 메시지(605)를 수신할 수 있다.
대안으로, 도 9b를 참조하면, 블록(910)에서, 도 1의 SSD(130)은 도 5의 애플리케이션(505-1)으로부터 도 6의 신뢰성 요청(615)을 수신할 수 있다. 블록(915)에서 도 1의 SSD(130)는 도 1의 SSD(130)의 유효 신뢰성을 결정할 수 있다. 블록(920)에서, SSD(130)는 유효 신뢰성을 도 6의 메시지(620)로서 도 5의 애플리케이션(505-1)에게 전송할 수 있다. 점선(925)으로 도시된 바와 같이, 블록 (910, 915, 920)은 선택적이다.
블록(930)에서 도 5의 애플리케이션(505-1)은 도 6의 신뢰성 테이블 요청(625)을 전송할 수 있다. 블록(935)에서 도 1의 SSD(130)는 도 3의 신뢰성 테이블 스토리지(345)로부터도 도 4의 신뢰성 테이블(405)을 회수(retrieve)할 수 있다. 블록(940)에서 도 1의 SSD(130)는 메시지(630)로 도 5의 애플리케이션(505-1)에게 도 4의 신뢰성 테이블(405)을 전송할 수 있다. 마지막으로, 블록(945)에서, 도 5의 애플리케이션(505-1)은 도 1의 SSD(130)에 설정 요청(635)을 전송할 수 있다. 설정 요청(635)은 도 3의 설정 모듈(340)이 도 6의 설정 요청(635)에서 식별된 신뢰성 테이블(405)의 엔트리에 따라 도 1의 SSD(130)를 설정하도록 요청할 수 있다.
도 10 은 도 1의 SSD(130)의 유효 신뢰성을 결정하기 위해 도 1의 SSD(130)에 대한 예시적인 절차의 흐름도를 도시한다. 도 10을 참조하면, 블록(1005)에서, 도 1의 SSD(130)는 (적어도, 도 1의 SSD(130)의 현재 설정에 따른) 도 1의 SSD(130)의 공시된 신뢰성을 결정할 수 있다. 블록(1010)에서, SSD(130)는 도 5의 애플리케이션(505-1)에 의해 요청된 (또는 그를 대신하여) 현재 트랜잭션을 추적할 수 있다. 블록(1015)에서 도 1의 SSD(130)은 현재 트랜잭션들에 (및 이전 트랜잭션들)에 응답하여 하나의 승수 (또는 하나 이상의 승수)를 결정할 수 있다. 마지막으로, 블록(1020)에서, 도 1의 SSD(130)는 공시된 신뢰성에 승수/승수들 곱하여, 도 1의 SSD(130)의 유효 신뢰성을 결정할 수 있다.
도 11a 및 도 11b는 본 발명의 실시 예에 따라, 도 1의 SSD(130)이 원하는 신뢰성을 제공하도록 지시하는 도 5의 애플리케이션(505-1)에 대한 예시적인 절차의 흐름도를 도시한다. 도 11a를 참조하면, 블록(1105)에서 도 5의 애플리케이션(505-1)은 도 5의 원하는 신뢰성(510-1)을 (도 6의 신뢰성 메시지(605)로서) 도 1의 SSD(130)에 전송할 수 있다. 이 시점에서 도 5의 애플리케이션(505-1)은 도 5의 원하는 신뢰성(510-1)이 제공되는 것을 보장하기 위해, 도 1의 SSD(130)에 남겨두고 완료될 수 있다.
대안으로, 블록(1110)에서 도 5의 애플리케이션(505-1)은 도 6의 신뢰성 요청(615)을 도 1의 SSD(130)에 전송할 수 있다. 블록(1115)에서 도 5의 애플리케이션(505-1)은 도 6의 메시지(620)에서 도 1의 SSD(130)의 현재 유효 신뢰성을 수신할 수 있다. 블록(1120)에서 도 5의 애플리케이션(505-1)은 도 5의 원하는 신뢰성(510-1)을 도 1의 SSD(130)의 (도 6의 메시지(620)에서 수신된) 유효 신뢰성과 비교할 수 있다. 도 1의 SSD(130)의 유효 신뢰성이 적어도 도 5의 원하는 신뢰성(510-1)만큼 높다면, 처리가 종료될 수 있다(아무 것도 할 필요가 없다).
한편, 도 1의 SSD(130)의 유효 신뢰성이 도 5의 원하는 신뢰성(510-1)보다 작다면 (또는, 점선 화살표(1125)로 도시된 바와 같이, 도 5의 애플리케이션(505-1)이 유효 신뢰성에 관계없이, 도 1의 SSD(130)가 특정 설정으로 설정되도록 요청하는 경우), 도 11b를 참조하면, 블록(1130)에서 도 5의 애플리케이션(505-1)은 도 6의 신뢰성 테이블 요청(625)을 도 1의 SSD(130)에게 전송할 수 있다. 블록(1135)에서 도 1의 SSD(130)는 도 4의 신뢰성 테이블(405)을 메시지(630)로서 도 5의 애플리케이션(505-1)에게 전송할 수 있다. 블록(1140)에서 도 5의 애플리케이션(505-1)은 도 4의 신뢰성 테이블(405)에서 원하는 신뢰성을 제공하는 엔트리를 선택할 수 있다. 마지막으로, 블록(1145)에서 도 5의 애플리케이션(505-1)은 도 6의 설정 요청(635)을 전송할 수 있으며, 도 1의 SSD(130)가 도 4의 신뢰성 테이블(405)에서 선택된 엔트리에 따라 설정되도록 요청할 수 있다.
도 7-11b를 참조하면, 본 발명의 개념의 일부 실시 예들이 도시된다. 그러나, 당업자는 블록들의 순서를 변경하거나, 블록들을 생략하거나, 도면들에 도시되지 않은 링크들을 포함함으로써 본 발명의 개념의 다른 실시 예들도 가능하다는 것을 이해할 것이다. 흐름도들의 이러한 모든 변형들은 명시적으로 설명되든 아니든 본 발명의 실시 예들인 것으로 고려된다.
본 발명의 실시 예는 종래 기술에 비해 기술적 이점들을 제공한다. 일반적인 시스템에서, 스토리지 장치의 신뢰성은 제조자에 의해 설정되며, 기본적으로 사용자의 제어 범위를 벗어난다. 본 발명의 실시 예들은 고객에게 스토리지 장치의 신뢰성에 대한 어느 정도의 제어를 제공할 뿐만 아니라, 그러한 관리를 자동화할 수 있게 한다. 애플리케이션들은 원하는 신뢰성을 지정할 수 있다 (또는 원하는 신뢰성을 구현하는 스토리지 장치의 특정 설정을 지정할 수 있다). 스토리지 장치는 스토리지 장치의 사용에 기초하여 필요에 따라 설정을 변경함으로써 신뢰성의 수준을 유지할 수 있다.
다음의 논의는 본 발명의 개념의 특정 양태들이 구현될 수 있는 적합한 머신(machine) 또는 머신들에 대한 간략한 일반적인 설명을 제공하기 위한 것이다. 머신 또는 머신들은 적어도 부분적으로 키보드, 마우스 등과 같은 종래의 입력 장치로부터의 입력뿐 만 아니라, 다른 기계로부터 수신된 지시들, 가상 현실(VR) 환경과의 상호 작용, 바이오메트릭 피드백(biometric feedback), 또는 기타 입력 신호에 의해 제어될 수 있다. 본 명세서에서 사용되는 바와 같이, 용어 "머신"은 단일 머신, 가상 머신, 또는 통신적으로 결합된 머신들, 가상 머신들 또는 함께 작동하는 장치들의 시스템을 광범위하게 포함하도록 의도된다. 예시적인 머신들은 개인용 컴퓨터들, 워크 스테이션들, 서버, 휴대용 컴퓨터들, 핸드 헬드 장치(handheld devices), 전화들, 태블릿들 등과 같은 컴퓨팅 장치뿐만 아니라, 개인 또는 대중 교통 (예: 자동차들, 기차들, 택시들 등)과 같은 운송 장치들을 포함할 수 있다.
머신 또는 머신들은 프로그램 가능 또는 프로그래밍 불가한 논리 장치들 또는 어레이, ASICs(Application Specific Integrated Circuits), 임베디드 컴퓨터들, 스마트 카드들 등과 같은 내장형 컨트롤러들을 포함할 수 있다. 머신 또는 머신들은 네트워크 인터페이스, 모뎀 또는 다른 통신 커플링과 같은 하나 이상의 원격 머신들에 대한 하나 이상의 연결들을 활용할 수 있다. 머신들은 인트라넷, 인터넷, 로컬 영역 네트워크, 광역 네트워크 등과 같은 물리적 및/또는 논리적 네트워크에 의해 상호 접속될 수 있다. 당업자는 네트워크 통신이 RF(radio frequency), 위성, 마이크로 웨이브, IEEE(Institute of Electrical and Electronics Engineers) 802.11, Bluetooth®광학, 적외선, 케이블, 레이저 등을 포함하는 다양한 유선 및/또는 무선 근거리 통신망이나 장거리 통신 사업자 및 프로토콜을 이용할 수 있음을 인식할 것이다.
본 발명의 개념의 실시예들은 머신에 의해 액세스될 때 머신이 작업들을 수행하거나 추상적인 데이터 타입 또는 로우-레벨 하드웨어 컨텍스트(context)들을 정의하는, 기능들, 절차들, 데이터 구조들, 애플리케이션 프로그램들 등을 포함하는 관련 데이터를 참조하거나 그와 관련하여 기술될 수 있다. 관련된 데이터는 예를 들어, RAM, ROM 등과 같은 휘발성 및/또는 불휘발성 메모리, 또는 하드 드라이브들, 플로피 디스크들, 광학 저장 장치, 테이프들, 플래시 메모리, 메모리 스틱들, 디지털 비디오 디스크들, 생물학적 저장 장치 등을 포함하는 다른 저장 장치들 및 관련 저장 매체에 저장될 수 있다. 관련된 데이터는 패킷들, 직렬 데이터, 병렬 데이터, 전파 신호들 등의 형태로 물리적 및/또는 논리적 네트워크를 포함하는 전송 환경들을 통해 전달될 수 있고, 압축 또는 암호화된 포맷으로 사용될 수 있다. 관련된 데이터는 분산 환경에서 사용될 수 있으며 머신 액세스를 위해 로컬 및/또는 원격으로 저장될 수 있다.
본 발명의 개념의 실시예들은 하나 이상의 프로세서들에 의해 실행 가능한 명령어들을 포함하는 유형의 비-일시적 머신-판독 가능 매체를 포함할 수 있으며, 상기 명령어들은 본 명세서에서 설명된 바와 같은 본 발명 개념들의 요소들을 수행하기 위한 명령어들을 포함한다.
상술된 방법들의 다양한 동작들은 다양한 하드웨어 및/또는 소프트웨어 구성(들), 회로들, 및/또는 모듈(들)과 같이 동작들을 수행할 수 있는 임의의 적합한 수단들에 의해 수행될 수 있다. 소프트웨어는 논리적 기능들을 구현하기 위한 실행 가능 명령들의 순서화된 목록을 포함할 수 있고, 단일 또는 멀티-코어 프로세서 또는 시스템을 포함하는 프로세서와 같은 명령어 실행 시스템, 기구들 또는 장치를 사용하여 또는 이들과 관련하여 임의의 "프로세서 판독 가능 매체"에서 구현될 수 있다.
여기에서 개시된 실시 예들과 관련하여 방법 또는 알고리즘의 블록들 또는 단계들 및 기능들은 하드웨어 및 프로세서에서 실행되는 소프트웨어 모듈 또는 이들의 조합으로 직접적으로 구현될 수 있다. 소프트웨어로 구현된다면, 기능들은 비-일시적 컴퓨터 판독 가능 매체 상에 하나 이상의 명령어들 또는 코드로서 저장되거나 전송될 수 있다. 소프트웨어 모듈은 RAM(random access memory), 플래시 메모리, ROM, EPROM, EEPROM, 레지스터, 하드 디스크, 이동식 디스크, CD ROM, 또는 이 분야에 공지된 임의의 다른 형태의 저장 매체일 수 있다.
예시된 실시 예들을 참조하여 본 발명의 개념의 원리를 설명하고 예시하였지만, 도시된 실시 예는 이러한 원리를 벗어나지 않고 배열 및 세부 사항을 수정할 수 있으며 임의의 바람직한 방식으로 결합될 수 있음을 알 것이다. 또한, 상술한 설명은 특정 실시 예들에 초점을 맞추었지만, 다른 구성들도 고려된다. 특히, "발명의 개념의 실시 예에 따른" 등과 같은 표현이 본 명세서에서 사용되었으나, 이러한 문구는 일반적으로 실시 예 가능성을 참조하는 것으로 의도되며, 본 발명의 개념을 특정 실시 예의 구성으로 제한하려는 것이 아니다. 본 명세서에 사용된 바 와 같이, 이들 용어는 다른 실시 예들과 조합 가능한 동일하거나 상이한 실시 들을 나타낼 수 있다.
상술한 예시적인 실시 예들은 본 발명의 개념의 개념을 제한하는 것으로 해석되어서는 안된다. 비록 일부 실시예들이 설명되었지만, 당업자는 본 개시의 신규한 교시 및 이점으로부터 실질적으로 벗어나지 않고도 이들 실시 예들에 다 양한 수정이 가능하다는 것을 용이하게 이해할 것이다. 따라서, 이러한 모든 수정은 청구항에 정의된 본 발명의 개념의 범위 내에 포함되는 것으로 의도된다.
본 발명의 실시 예는 제한 없이 다음의 설명으로 확장될 수 있다.
설명 1. 본 발명의 실시 예는 솔리드 스테이트 드라이브(SSD)를 포함한다. SSD는:
호스트상의 제 1 애플리케이션으로부터 판독 요청들 및 기록 요청들을 수신하기 위한 인터페이스;
적어도 하나의 칩을 포함하는 데이터를 위한 스토리지;
상기 스토리지를 사용하여 상기 호스트상의 상기 제 1 애플리케이션으로부터 상기 판독 요청들 및 상기 기록 요청들을 처리하는 SSD 컨트롤러;
상기 SSD를 설정하기 위한 설정 모듈; 및
적어도 제 1 엔트리 및 제 2 엔트리를 포함하는 신뢰성 테이블을 위한 스토리지를 포함하고, 제 1 엔트리는 상기 SSD의 제 1 설정 및 상기 SSD의 상기 제 1 설정에 대한 제 1 신뢰성을 식별하고, 상기 제 2 엔트리는 상기 SSD의 제 2 설정 및 상기 SSD의 제 2 설정에 대한 제 2 신뢰성을 식별한다.
설명 2. 본 발명의 실시 예는 설명 1에 따른 SSD를 포함하고, 상기 인터페이스는 상기 호스트상의 상기 제 1 애플리케이션으로부터 설정 요청을 수신할 수 있다.
설명 3. 본 발명의 실시 예는 설명 2에 따른 SSD를 포함하며, 상기 설정 요청은 신뢰성 테이블에서 제 1 엔트리 및 제 2 엔트리 중 하나의 식별자를 포함한다.
설명 4. 본 발명의 실시 예는 설명 3에 따른 SSD를 포함하고, 상기 설정 모듈은 상기 신뢰성 테이블에서 상기 제 1 엔트리 및 상기 제 2 엔트리 중 하나의 상기 식별자에 따라 상기 SSD를 재설정 할 수 있다.
설명 5. 본 발명의 실시 예는 설명 1에 따른 SSD를 포함하고, 상기 인터페이스는 상기 호스트상의 상기 제 1 애플리케이션으로부터 신뢰성 메시지를 수신할 수 있고, 상기 신뢰성 메시지는 상기 호스트사의 상기 제 1 애플리케이션에 대한 제 1 원하는 신뢰성을 포함한다.
설명 6. 본 발명의 실시 예는 설명 5에 따른 SSD를 포함하고, 상기 설정 모듈은 적어도 상기 제 1 원하는 신뢰성을 기반으로 상기 신뢰성 테이블에서 상기 제 1 엔트리 및 상기 제 2 엔트리 중 하나에 따라 상기 SSD를 설정할 수 있다.
설명 7. 본 발명의 실시 예는 설명 6에 따른 SSD를 포함하고, 상기 설정 모듈은 적어도 상기 호스트상의 상기 제 1 애플리케이션에 대한 상기 제 1 원하는 신뢰성 및 상기 호스트상의 상기 제 2 애플리케이션에 대한 상기 제 2 원하는 신뢰성을 기반으로 상기 신뢰성 테이블의 제 1 엔트리 및 제 2 엔트리 중 하나에 따라 상기 SSD를 설정할 수 있다.
설명 8. 본 발명의 실시 예는 설명 1에 따른 SSD를 포함하고, 적어도 하나의 칩은 적어도 제 1 칩 신뢰성을 갖는 제 1 스토리지 스킴 및 제 2 칩 신뢰성을 갖는 제 2 스토리지 스킴을 제공한다.
설명 9. 본 발명의 실시 예는 설명 8에 따른 SSD를 포함하고, 상기 SSD의 제 1 설정은 상기 제 1 스토리지 스킴을 식별하고 상기 SSD의 제 2 설정은 상기 제 2 스토리지 스킴을 식별한다.
설명 10. 본 발명의 실시 예는 설명 1에 따른 SSD를 포함하고, 오류 정정 코드(ECC; Error Correcting Code) 모듈을 더 포함하고, 상기 ECC 모듈은 적어도 제 1 ECC 신뢰성을 갖는 제 1 ECC 스킴 및 제 2 ECC 신뢰성을 갖는 제 2 ECC 스킴을 제공한다.
설명 11. 본 발명의 실시 예는 설명 10에 따른 SSD를 포함하고, 상기 SSD의 상기 제 1 설정은 상기 제 1 ECC 스킴을 식별하고, 상기 SSD의 상기 제 2 설정은 상기 제 2 ECC 스킴을 식별한다.
설명 12. 본 발명의 실시 예는 설명 1에 따른 SSD를 포함하고, 소거 코딩 모듈 또는 RAID(Redundant Array of Independent Disks) 모듈 중 적어도 하나를 더 포함하고, 상기 소거 코딩 모듈은 적어도 제 1 소거 코딩 신뢰성을 갖는 제 1 소거 코딩 스킴 및 제 2 소거 코딩 신뢰성을 갖는 제 2 소거 코딩 스킴을 제공하고, 상기 RAID 모듈은 적어도 제 1 RAID 신뢰성을 갖는 제 1 RAID 스킴 및 제 2 RAID 신뢰성을 갖는 제 2 RAID 스킴을 제공한다.
설명 13. 본 발명의 개념의 일 실시 예는 설명 12에 따른 SSD를 포함하고, 상기 SSD의 상기 제 1 설정은 상기 제 1 소거 코딩 스킴 또는 상기 제 1 RAID 스킴 중 적어도 하나를 식별하고, 상기 SSD의 상기 제 2 구성은 상기 제 2 소거 코딩 스킴 또는 상기 제 2 RAID 스킴 중 적어도 하나를 식별한다.
설명 14. 본 발명의 개념의 일 실시 예는 설명 1에 따른 SSD를 포함하고, 상기 신뢰성 테이블의 상기 제 1 엔트리는 상기 SSD의 상기 제 1 설정에 대한 제 1 공간 오버 헤드 또는 제 1 성능 중 적어도 하나를 식별하고, 상기 신뢰성 테이블의 상기 제 2 엔트리는 상기 SSD의 상기 제 2 설정에 대한 제 2 공간 오버 헤드 또는 제 2 성능 중 적어도 하나를 식별한다.
설명 15. 본 발명의 실시 예는 설명 1에 따른 SSD를 포함하고, 적어도 하나의 칩은 적어도 하나의 NAND 플래시 칩을 포함한다.
설명 16. 본 발명의 실시 예는 방법을 포함한다. 방법은:
솔리드 스테이트 드라이브(SSD; Solid State Drive)에 대한 원하는 신뢰성을 결정하는 단계, SSD는 데이터에 대한 스토리지를 포함하고, 스토리지는 적어도 하나의 칩을 포함하고;
상기 SSD로부터 신뢰성 테이블의 제 1엔트리에 액세스하는 단계, 상기 신뢰성 테이블은 적어도 상기 제 1 엔트리 및 상기 제 2 엔트리를 포함하고, 상기 제 1 엔트리는 상기 SSD의 제 1 설정 및 상기 SSD의 상기 제 1 설정에 대한 제 1 신뢰성을 식별하고, 상기 제 2 엔트리는 상기 SSD의 제 2 구성 및 상기 SSD의 상기 제 2 구성에 대한 제 2 신뢰성을 식별하고; 및
상기 제 1 엔트리에 따라 상기 SSD를 설정하는 단계를 포함한다.
설명 17. 본 발명의 실시 예는 설명 16에 따른 방법을 포함하며,
상기 제 1 엔트리는 상기 칩에 대한 제 1 스토리지 스킴을 포함하고;
상기 제 2 엔트리는 상기 칩에 대한 제 2 스토리지 스킴을 포함하고; 및
상기 제 1 엔트리에 따라 상기 SSD를 설정하는 단계는 상기 제 1 스토리지 스킴 또는 제 2 스토리지 스킴에 따라 상기 칩을 설정하는 단계를 포함한다.
설명 18. 본 발명의 실시 예는 설명 16에 따른 방법을 포함하며,
상기 SSD는 오류 정정 코드(ECC; Error Correcting Code) 모듈을 포함하고;
상기 제 1 엔트리는 상기 ECC 모듈에 대한 제 1 ECC 스킴을 포함하고;
상기 제 2 엔트리는 상기 ECC 모듈에 대한 제 2 ECC 스킴을 포함하고; 및
상기 제 1 엔트리에 따라 상기 SSD를 설정하는 단계는 상기 제 1 ECC 스킴 또는 제 2 ECC 스킴에 따라 상기 ECC 모듈을 설정하는 단계를 포함한다.
설명 19. 본 발명의 실시 예는 설명 16에 따른 방법을 포함하며,
상기 SSD는 소거 코딩 모듈 또는 RAID(Redundant Array of Independent Disks) 모듈 중 적어도 하나를 포함하고;
상기 제 1 엔트리는 상기 소거 코딩 모듈에 대한 제 1 소거 코딩 스킴 또는 상기 RAID 모듈에 대한 제 1 RAID 스킴 중 적어도 하나를 포함하고;
상기 제 2 엔트리는 상기 소거 코딩 모듈에 대한 제 2 소거 코딩 스킴 또는 상기 RAID 모듈에 대한 제 2 RAID 스킴 중 적어도 하나를 포함하고; 및
상기 제 1 엔트리에 따라 상기 SSD를 설정하는 단계는 상기 제 1 소거 코딩 스킴 또는 상기 제 2 소거 코딩 스킴에 따라 상기 소거 코딩 모듈 또는 상기 제 1 RAID 스킴 또는 상기 제 2 RAID 스킴에 따라 상기 RAID 모듈 중 적어도 하나를 설정하는 단계를 포함한다.
설명 20. 본 발명의 실시 예는 설명 16에 따른 방법을 포함하고, 상기 SSD에 대한 원하는 신뢰도를 결정하는 단계는 상기 호스트상의 애플리케이션으로부터 상기 SSD에서 상기 원하는 신뢰성을 수신하는 단계를 포함한다.
설명 21. 본 발명의 실시 예는 설명 20에 따른 방법을 포함하고, 상기 SSD로부터 신뢰성 테이블의 제 1 엔트리에 액세스하는 단계는:
상기 신뢰성 테이블의 상기 제 1 엔트리 및 상기 제 2 엔트리에 액세스하는 단계; 및
상기 제 1 엔트리가 적어도 상기 원하는 신뢰성만큼 높은 신뢰성을 포함하는지 식별하는 단계를 포함한다.
설명 22. 본 발명의 실시 예는 설명 16에 따른 방법을 포함하고,
상기 SSD에서 상기 호스트상의 상기 애플리케이션으로부터 상기 SSD에 대한 유효 신뢰성에 대한 신뢰성 요청을 수신하는 단계;
상기 SSD에 대한 유효 신뢰성을 결정하는 단계; 및
상기 SSD로부터 상기 호스트상의 상기 애플리케이션으로 상기 유효 신뢰성을 전송하는 단계를 더 포함한다.
설명 23. 본 발명의 실시 예는 설명 22에 따른 방법을 포함하며, 상기 SSD에 대한 유효 신뢰성을 결정하는 단계는:
상기 SSD에 대해 공시된 신뢰성을 결정하는 단계;
상기 SSD에서 동작을 추적하는 단계;
상기 SSD상의 동작을 기반으로 승수를 결정하는 단계; 및
상기 공시된 신뢰성에 상기 승수를 곱하여 상기 유효 신뢰성을 결정하는 단계를 포함한다.
설명 24. 본 발명의 실시 예는 설명 16에 따른 방법을 포함하며, 상기 SSD로부터 신뢰성 테이블의 제 1 엔트리에 액세스하는 단계는 상기 SSD에서 상기 호스트상의 상기 애플리케이션으로부터 상기 신뢰성 테이블의 상기 제 1 엔트리의 식별자를 수신하는 단계를 포함한다.
설명 25. 본 발명의 실시 예는 설명 24에 따른 방법을 포함하고, 상기 SSD로부터 상기 호스트상의 상기 애플리케이션으로 상기 유효 신뢰성을 전송하는 단계는 상기 SSD로부터 상기 호스트상의 상기 애플리케이션으로 상기 신뢰성 테이블의 상기 제 1 엔트리 및 상기 제 2 엔트리를 전송하는 단계를 포함한다.
설명 26. 본 발명의 실시 예는 설명 16에 따른 방법을 포함하며,
상기 신뢰성 테이블의 상기 제 1 엔트리는 상기 SSD의 상기 제 1 설정에 대한 제 1 공간 오버 헤드 또는 제 1 성능 중 적어도 하나를 식별하고;
상기 신뢰성 테이블의 상기 제 2 엔트리는 상기 SSD의 제 2 설정에 대한 제 2 공간 오버 헤드 또는 제 2 성능 중 적어도 하나를 식별하고; 및
상기 SSD로부터 신뢰성 테이블의 제 1 엔트리에 액세스하는 단계는 적어도 원하는 신뢰성에 기초하고, 원하는 공간 오버 헤드 또는 원하는 성능 중 적어도 하나에 기초하여 상기 SSD로부터 상기 신뢰성 테이블의 상기 제 1 엔트리에 액세스하는 단계를 포함한다.
설명 27. 본 발명의 실시 예는 설명 16에 따른 방법을 포함하며, 적어도 하나의 칩은 적어도 하나의 NAND 플래시 칩을 포함한다.
설명 28. 본 발명의 실시 예는 방법을 포함한다. 방법은:
호스트상의 애플리케이션으로부터 SSD로 신뢰성 요청을 전송하는 단계, 상기 신뢰성 요청은 상기 SSD에 대한 유효 신뢰성을 요청하고;
상기 호스트상의 상기 애플리케이션에서 상기 SSD로부터 상기 SSD에 대한 유효 신뢰성을 수신하는 단계;
상기 호스트상의 상기 애플리케이션으로부터 상기 SSD로 신뢰성 테이블 요청을 전송하는 단계, 상기 신뢰성 테이블 요청은 상기 SSD에 저장된 신뢰성 테이블을 요청하고;
상기 호스트상의 상기 애플리케이션에서 상기 SSD로부터 상기 신뢰성 테이블을 수신하는 단계, 상기 신뢰성 테이블의 각 엔트리는 상기 SSD의 설정 및 상기 SSD의 구성에 대한 신뢰성을 식별하고;
상기 호스트상의 상기 애플리케이션에 대한 원하는 신뢰도에 적어도 기초하여 상기 신뢰도 테이블에서 엔트리를 선택하는 단계; 및
상기 호스트상의 상기 애플리케이션으로부터 상기 SSD로 설정 요청을 전송하는 단계를 포함하고, 상기 설정 요청은 상기 신뢰성 테이블의 상기 엔트리를 식별한다.
설명 29. 본 발명의 실시 예는 설명 28에 따른 방법을 포함하며,
상기 SSD에 대한 유효 신뢰성을 상기 호스트상의 상기 애플리케이션에 대한 원하는 신뢰성과 비교하는 단계; 및
상기 SSD에 대한 유효 신뢰성을 적어도 기반으로, 상기 호스트상의 상기 애플리케이션에 대한 상기 원하는 신뢰성을 초과하는 경우, 상기 SSD에 상기 설정 요청을 전송하는 않는 단계를 더 포함한다.
설명 30. 본 발명의 실시 예는 설명 28에 따른 방법을 포함하며, 상기 호스트상의 상기 애플리케이션에 대한 적어도 원하는 신뢰성에 기초하여 상기 신뢰성 테이블 내의 엔트리를 선택하는 단계는, (상기 엔트리에 대해서) 상기 SSD의 설정에 대한 상기 신뢰성이 적어도 상기 원하는 신뢰성만큼 높은 상기 신뢰성 테이블에서의 상기 엔트리를 선택하는 단계를 포함한다.
설명 31. 본 발명의 실시 예는 설명 28에 따른 방법을 포함하며,
상기 신뢰성 테이블의 각 엔트리는 상기 SSD의 상기 설정에 대한 제 1 공간 오버 헤드 또는 제 1 성능 중 적어도 하나를 더 식별하고;
상기 신뢰성 테이블의 제 2 엔트리는 제 2 공간 오버 헤드 또는 제 2 성능 중 적어도 하나를 더 식별하고; 및
상기 호스트상의 상기 애플리케이션에 대한 적어도 원하는 신뢰성에 기초하여 신뢰성 테이블의 엔트리를 선택하는 단계는, 상기 호스트상의 상기 애플리케이션에 대한 적어도 원하는 신뢰성에 기초하고, 상기 원하는 공간 오버 헤드 또는 원하는 성능 중 적어도 하나에 기초하여 상기 신뢰도 테이블 내의 엔트리를 선택하는 단계를 포함한다.
설명 32. 본 발명의 실시 예는 비-일시적 저장 매체를 포함하고, 머신에 의해 실행될 때, 아래의 단계들을 수행하는 명령어들이 저장되는 상기 비-일시적 저장 매체를 포함하는 물품(article)에 있어서, 상기 단계들은:
솔리드 스테이트 드라이브(SSD; Solid State Drive)에 대한 원하는 신뢰도를 결정하는 단계, 상기 SSD는 데이터에 대한 스토리지를 포함하고, 스토리지는 적어도 하나의 칩을 포함하며;
상기 SSD로부터 신뢰성 테이블의 제 1 엔트리를 액세스하는 단계; 상기 신뢰성 테이블은 적어도 제 1 엔트리 및 제 2 엔트리를 포함하고, 상기 제 1 엔트리는 상기 SSD의 제 1 설정 및 상기 SSD의 상기 제 1 설정에 대한 제 1 신뢰성을 식별하고, 상기 제 2 엔트리는 상기 SSD의 제 2 설정 및 상기 SSD의 상기 제 2 설정에 대한 제 2 신뢰성을 식별하고; 및
상기 제 1 엔트리에 따라 SSD를 설정하는 단계를 포함한다.
설명 33. 본 발명의 실시 예는 설명 32에 따른 물품을 포함하며,
상기 제 1 엔트리는 상기 칩에 대한 제 1 스토리지 스킴을 포함하고;
상기 제 2 엔트리는 상기 칩에 대한 제 2 스토리지 스킴을 포함하고; 및
상기 제 1 엔트리에 따라 상기 SSD를 설정하는 단계는 상기 제 1 스토리지 스킴 또는 제 2 스토리지 스킴에 따라 상기 칩을 설정하는 단계를 포함한다.
설명 34. 본 발명의 실시 예는 설명 32에 따른 물품을 포함하며,
상기 SSD는 오류 정정 코드(ECC; Error Correcting Code) 모듈을 포함하고;
상기 제 1 엔트리는 상기 ECC 모듈에 대한 제 1 ECC 스킴을 포함하고;
상기 제 2 엔트리는 상기 ECC 모듈에 대한 제 2 ECC 스킴을 포함하고; 및
상기 제 1 엔트리에 따라 상기 SSD를 설정하는 단계는 상기 제 1 ECC 스킴 또는 제 2 ECC 스킴에 따라 상기 ECC 모듈을 설정하는 단계를 포함한다.
설명 35. 본 발명의 실시 예는 설명 32에 따른 물품을 포함하며,
상기 SSD는 소거 코딩 모듈 또는 RAID(Redundant Array of Independent Disks) 모듈 중 적어도 하나를 포함하고;
상기 제 1 엔트리는 상기 소거 코딩 모듈에 대한 제 1 소거 코딩 스킴 또는 상기 RAID 모듈에 대한 제 1 RAID 스킴 중 적어도 하나를 포함하고;
상기 제 2 엔트리는 상기 소거 코딩 모듈에 대한 제 2 소거 코딩 스킴 또는 상기 RAID 모듈에 대한 제 2 RAID 스킴 중 적어도 하나를 포함하고; 및
상기 제 1 엔트리에 따라 상기 SSD를 설정하는 단계는 상기 제 1 소거 코딩 스킴 또는 상기 제 2 소거 코딩 스킴에 따라 상기 소거 코딩 모듈 또는 상기 제 1 RAID 스킴 또는 상기 제 2 RAID 스킴에 따라 상기 RAID 모듈 중 적어도 하나를 설정하는 단계를 포함한다.
설명 36. 본 발명의 실시 예는 설명 32에 따른 물품을 포함하고, 상기 SSD에 대한 원하는 신뢰도를 결정하는 단계는, 상기 호스트상의 애플리케이션으로부터 상기 SSD에서 상기 원하는 신뢰성을 수신하는 단계를 포함한다.
설명 37. 본 발명의 실시 예는 설명 36에 따른 물품을 포함하고, 상기 SSD로부터 신뢰성 테이블의 제 1 엔트리에 액세스하는 단계는:
상기 신뢰성 테이블의 상기 제 1 엔트리 및 상기 제 2 엔트리에 액세스하는 단계; 및
상기 제 1 엔트리가 적어도 상기 원하는 신뢰성만큼 높은 신뢰성을 포함하는지 식별하는 단계를 포함한다.
설명 38. 본 발명의 실시 예는 설명 32에 따른 물품을 포함하고, 비-일시적 저장 매체는 머신에 의해 실행될 때 아래의 단계들을 더 수행하는 명령어들이 저장되는 상기 비-일시적 저장 매체를 포함하는 물품에 있어서, 상기 단계들은:
상기 SSD에서 상기 호스트상의 상기 애플리케이션으로부터 상기 SSD에 대한 유효 신뢰성에 대한 신뢰성 요청을 수신하는 단계;
상기 SSD에 대한 유효 신뢰성을 결정하는 단계; 및
상기 SSD로부터 상기 호스트상의 상기 애플리케이션으로 상기 유효 신뢰성을 전송하는 단계를 더 포함한다.
설명 39. 본 발명의 실시 예는 설명 38에 따른 물품을 포함하며, 상기 SSD에 대한 상기 유효 신뢰성을 결정하는 단계는:
상기 SSD에 대해 공시된 신뢰성을 결정하는 단계;
상기 SSD에서 동작을 추적하는 단계;
상기 SSD상의 동작을 기반으로 승수를 결정하는 단계; 및
상기 공시된 신뢰성에 상기 승수를 곱하여 상기 유효 신뢰성을 결정하는 단계를 포함한다.
설명 40. 본 발명의 실시 예는 설명 38에 따른 물품을 포함하며, 상기 SSD로부터 신뢰성 테이블의 제 1 엔트리에 액세스하는 단계는, 상기 SSD에서 상기 호스트상의 상기 애플리케이션으로부터 상기 신뢰성 테이블의 상기 제 1 엔트리의 식별자를 수신하는 단계를 포함한다.
설명 41. 본 발명의 실시 예는 설명 40에 따른 물품을 포함하고, 상기 SSD로부터 상기 호스트상의 상기 애플리케이션으로 상기 유효 신뢰성을 전송하는 단계는, 상기 SSD로부터 상기 호스트상의 상기 애플리케이션으로 상기 신뢰성 테이블의 상기 제 1 엔트리 및 상기 제 2 엔트리를 전송하는 단계를 포함한다.
설명 42. 본 발명의 실시 예는 설명 32에 따른 물품을 포함하며,
상기 신뢰성 테이블의 상기 제 1 엔트리는 상기 SSD의 상기 제 1 설정에 대한 제 1 공간 오버 헤드 또는 제 1 성능 중 적어도 하나를 식별하고;
상기 신뢰성 테이블의 상기 제 2 엔트리는 상기 SSD의 제 2 설정에 대한 제 2 공간 오버 헤드 또는 제 2 성능 중 적어도 하나를 식별하고; 및
상기 SSD로부터 신뢰성 테이블의 제 1 엔트리에 액세스하는 단계는, 적어도 원하는 신뢰성에 기초하고, 원하는 공간 오버 헤드 또는 원하는 성능 중 적어도 하나에 기초하여 상기 SSD로부터 상기 신뢰성 테이블의 상기 제 1 엔트리에 액세스하는 단계를 포함한다.
설명 43. 본 발명의 실시 예는 설명 32에 따른 물품을 포함하며, 적어도 하나의 칩은 적어도 하나의 NAND 플래시 칩을 포함한다.
설명 44. 본 발명의 실시 예는 비-일시적 저장 매체를 포함하고, 머신에 의해 실행될 때, 아래의 단계들을 수행하는 명령어들이 저장되는 상기 비-일시적 저장 매체를 포함하는 물품(article)에 있어서, 상기 단계들은:
호스트상의 애플리케이션으로부터 SSD로 신뢰성 요청을 전송하는 단계, 상기 신뢰성 요청은 상기 SSD에 대한 유효 신뢰성을 요청하고;
상기 호스트상의 상기 애플리케이션에서 상기 SSD로부터 상기 SSD에 대한 유효 신뢰성을 수신하는 단계;
상기 호스트상의 상기 애플리케이션으로부터 상기 SSD로 신뢰성 테이블 요청을 전송하는 단계, 상기 신뢰성 테이블 요청은 상기 SSD에 저장된 신뢰성 테이블을 요청하고;
상기 호스트상의 상기 애플리케이션에서 상기 SSD로부터 상기 신뢰성 테이블을 수신하는 단계, 상기 신뢰성 테이블의 각 엔트리는 상기 SSD의 설정 및 상기 SSD의 구성에 대한 신뢰성을 식별하고;
상기 호스트상의 상기 애플리케이션에 대한 원하는 신뢰도에 적어도 기초하여 상기 신뢰도 테이블에서 엔트리를 선택하는 단계; 및
상기 호스트상의 상기 애플리케이션으로부터 상기 SSD로 설정 요청을 전송하는 단계를 포함하고, 상기 설정 요청은 상기 신뢰성 테이블의 상기 엔트리를 식별한다.
설명 45. 본 발명의 실시 예는 설명 44에 따른 물품을 포함하고, 비-일시적 저장 매체는 머신에 의해 실행될 때 아래의 단계들을 더 수행하는 명령어들이 저장되는 상기 비-일시적 저장 매체를 포함하는 물품에 있어서, 상기 단계들은:
상기 SSD에 대한 유효 신뢰성을 상기 호스트상의 상기 애플리케이션에 대한 원하는 신뢰성과 비교하는 단계; 및
상기 SSD에 대한 유효 신뢰성을 적어도 기반으로, 상기 호스트상의 상기 애플리케이션에 대한 상기 원하는 신뢰성을 초과하는 경우, 상기 SSD에 상기 설정 요청을 전송하는 않는 단계를 더 포함한다.
설명 46. 본 발명의 실시 예는 설명 44에 따른 물품을 포함하고, 상기 호스트상의 상기 애플리케이션에 대한 적어도 원하는 신뢰성에 기초하여 상기 신뢰성 테이블 내의 엔트리를 선택하는 단계는, 상기 신뢰성 테이블에서 상기 SSD의 설정에 대한 상기 신뢰성이 적어도 상기 원하는 신뢰성만큼 높은 상기 엔트리를 선택하는 단계를 포함한다.
설명 47. 본 발명의 실시 예는 설명 44에 따른 물품을 포함하며,
상기 신뢰성 테이블의 각 엔트리는 상기 SSD의 상기 설정에 대한 제 1 공간 오버 헤드 또는 제 1 성능 중 적어도 하나를 더 식별하고;
상기 신뢰성 테이블의 제 2 엔트리는 제 2 공간 오버 헤드 또는 제 2 성능 중 적어도 하나를 더 식별하고; 및
상기 호스트상의 상기 애플리케이션에 대한 적어도 원하는 신뢰성에 기초하여 신뢰성 테이블의 엔트리를 선택하는 단계는, 상기 호스트상의 상기 애플리케이션에 대한 적어도 원하는 신뢰성에 기초하고, 상기 원하는 공간 오버 헤드 또는 원하는 성능 중 적어도 하나에 기초하여 상기 신뢰도 테이블 내의 엔트리를 선택하는 단계를 포함한다.
결론적으로, 본 명세서에 기술된 실시 예들에 대한 다양한 변경의 관점에서, 이 상세한 설명 및 첨부된 자료는 단지 예시적인 것으로 의도되며, 본 발명의 개념의 범위를 제한하는 것으로 간주되어서는 안된다. 따라서, 본 발명의 개념으로서 청구되는 것은 다음의 청구 범위 및 그 균등물의 범위 및 사상 내에서 있을 수 있는 모든 변형이다.

Claims (20)

  1. 호스트상의 제 1 애플리케이션으로부터 읽기 요청들 및 쓰기 요청들을 수신하기 위한 인터페이스;
    적어도 하나의 칩을 포함하는 데이터에 대한 스토리지;
    상기 스토리지를 사용하여 상기 호스트상의 상기 제 1 애플리케이션으로부터의 상기 읽기 요청들 및 상기 쓰기 요청들을 처리하는 솔리드 스테이트 드라이브(SSD; Solid State Drive) 컨트롤러;
    SSD를 설정하기 위한 설정 모듈; 및
    신뢰성 테이블에 대한 스토리지를 포함하고,
    상기 신뢰성 테이블은 적어도 제 1 엔트리 및 제 2 엔트리를 포함하고, 상기 제 1 엔트리는 상기 SSD의 제 1 설정 및 상기 SSD의 상기 제 1 설정에 대한 제 1 신뢰성을 식별하고, 상기 제 2 엔트리는 상기 SSD의 제 2 설정 및 상기 SSD의 상기 제 2 설정에 대한 제 2 신뢰성을 식별하는 SSD.
  2. 제 1 항에 있어서,
    상기 인터페이스는 상기 호스트상의 상기 제 1 애플리케이션으로부터 설정 요청을 수신하는 SSD.
  3. 제 2 항에 있어서,
    상기 설정 요청은 상기 신뢰성 테이블에서 상기 제 1 엔트리 및 상기 제 2 엔트리 중 하나의 식별자를 포함하는 SSD.
  4. 제 1 항에 있어서,
    상기 인터페이스는 상기 호스트상의 상기 제 1 애플리케이션으로부터 신뢰성 메시지를 수신하고, 상기 신뢰성 메시지는 상기 호스트상의 상기 제 1 애플리케이션에 대한 제 1 원하는 신뢰성을 포함하는 SSD.
  5. 제 4 항에 있어서,
    상기 설정 모듈은 적어도 상기 제 1 원하는 신뢰성에 기초하여 상기 신뢰성 테이블의 상기 제 1 엔트리 및 상기 제 2 엔트리 중 하나에 따라 상기 SSD를 설정하는 SSD.
  6. 제 1 항에 있어서,
    상기 적어도 하나의 칩은 적어도 제 1 칩 신뢰성을 갖는 제 1 스토리지 스킴 및 제 2 칩 신뢰성을 갖는 제 2 스토리지 스킴을 제공하는 SSD.
  7. 제 6 항에 있어서,
    상기 SSD의 제 1 설정은 제 1 스토리지 스킴을 식별하고, 상기 SSD의 제 2 설정은 제 2 스토리지 스킴을 식별하는 SSD.
  8. 제 1 항에 있어서,
    오류 정정 코드(ECC; Error Correcting Code) 모듈을 더 포함하고,
    상기 ECC 모듈은 적어도 제 1 ECC 신뢰성을 갖는 제 1 ECC 스킴 및 제 2 ECC 신뢰성을 갖는 제 2 ECC 스킴을 제공하는 SSD.
  9. 제 8 항에 있어서,
    상기 SSD의 제 1 설정은 제 1 ECC 스킴을 식별하고 상기 SSD의 제 2 설정은 제 2 ECC 스킴을 식별하는 SSD.
  10. 제 1 항에 있어서,
    소거 코딩 모듈 또는 RAID 모듈 중 적어도 하나를 더 포함하고,
    상기 소거 코딩 모듈은 적어도 제 1 소거 코딩 신뢰성을 갖는 제 1 소거 코딩 스킴 또는 제 2 소거 코딩 신뢰성을 갖는 제 2 소거 코딩 스킴을 제공하고, 상기 RAID 모듈은 적어도 제 1 RAID 신뢰성을 갖는 제 1 RAID 스킴 또는 제 2 RAID 신뢰성을 갖는 제 2 RAID 스킴을 제공하는 SSD.
  11. 제 10 항에 있어서,
    상기 SSD의 제 1 설정은 제 1 소거 코딩 스킴 또는 제 1 RAID 스킴 중 적어도 하나를 식별하고, 상기 SSD의 제 2 설정은 제 2 소거 코딩 스킴 또는 제 2 RAID 스킴 중 적어도 하나를 식별하는 SSD.
  12. 적어도 하나의 칩을 포함하는 데이터에 대한 스토리지를 포함하는 솔리드 스테이트 드라이브(SSD; Solid State Drive)에 대한 원하는 신뢰성을 결정하는 단계;
    상기 SSD로부터 신뢰성 테이블의 제 1 엔트리에 액세스하는 단계; 및
    상기 제 1 엔트리에 따라 SSD를 설정하는 단계를 포함하되
    상기 신뢰성 테이블은 적어도 상기 제 1 엔트리 및 제 2 엔트리를 포함하고, 상기 제 1 엔트리는 상기 SSD의 제 1 설정 및 상기 SSD의 상기 제 1 설정에 대한 제 1 신뢰성을 식별하고, 상기 제 2 엔트리는 상기 SSD의 제 2 설정 및 상기 SSD의 상기 제 2 설정에 대한 제 2 신뢰성을 식별하는 방법.
  13. 제 12 항에 있어서,
    상기 제 1 엔트리는 상기 칩을 위한 제 1 스토리지 스킴을 포함하고,
    상기 제 2 엔트리는 상기 칩을 위한 제 2 스토리지 스킴을 포함하고,
    상기 제 1 엔트리에 따라 상기 SSD를 설정하는 단계는, 상기 제 1 스토리지 스킴 또는 상기 제 2 스토리지 스킴에 따라 상기 칩을 설정하는 단계를 포함하는 방법.
  14. 제 12 항에 있어서,
    상기 SSD는 오류 정정 코드(ECC; Error Correcting Code) 모듈을 포함하고,
    상기 제 1 엔트리는 상기 ECC 모듈에 대한 제 1 ECC 스킴을 포함하고,
    상기 제 2 엔트리는 상기 ECC 모듈을 대한 제 2 ECC 스킴을 포함하고,
    상기 제 1 엔트리에 따라 상기 SSD를 설정하는 단계는, 상기 제 1 ECC 스킴 또는 제 2 ECC 스킴에 따라 상기 ECC 모듈을 설정하는 단계를 포함하는 방법.
  15. 제 12 항에 있어서,
    상기 SSD는 소거 코딩 모듈 또는 RAID 모듈 중 적어도 하나를 포함하고,
    상기 제 1 엔트리는 상기 소거 코딩 모듈에 대한 제 1 소거 코딩 스킴 또는 상기 RAID 모듈에 대한 제 1 RAID 스킴 중 적어도 하나를 포함하고,
    상기 제 2 엔트리는 상기 소거 코딩 모듈에 대한 제 2 소거 코딩 스킴 또는 상기 RAID 모듈에 대한 제 2 RAID 스킴 중 적어도 하나를 포함하고,
    상기 제 1 엔트리에 따라 상기 SSD를 설정하는 단계는, 상기 제 1 소거 코딩 스킴 또는 제 2 소거 코딩 스킴에 따라 상기 소거 코딩 모듈 또는 상기 제 1 RAID 스킴 또는 상기 제 2 RAID 스킴에 따라 상기 RAID 모듈 중 적어도 하나를 설정하는 단계를 포함하는 방법.
  16. 제 12 항에 있어서,
    상기 SSD에 대한 원하는 신뢰성을 결정하는 단계는, 호스트상의 애플리케이션으로부터 상기 SSD에서 원하는 신뢰성을 수신하는 단계를 포함하는 방법.
  17. 제 16 항에 있어서,
    상기 SSD로부터 신뢰성 테이블의 제 1 엔트리에 액세스하는 단계는:
    상기 신뢰성 테이블에서 상기 제 1 엔트리 및 상기 제 2 엔트리에 액세스하는 단계; 및
    상기 제 1 엔트리가 적어도 상기 원하는 신뢰성만큼 높은 신뢰성을 포함하는지 식별하는 단계를 포함하는 방법.
  18. 제 12 항에 있어서,
    상기 SSD로부터 신뢰성 테이블의 제 1 엔트리에 액세스하는 단계는, 상기 SSD에서 호스트상의 애플리케이션으로부터 상기 신뢰성 테이블의 상기 제 1 엔트리의 식별자를 수신하는 단계를 포함하는 방법.
  19. SSD에 대한 유효 신뢰성을 요청하는 신뢰성 요청을 호스트상의 애플리케이션으로부터 상기 SSD로 전송하는 단계;
    상기 호스트상의 상기 애플리케이션에서 상기 SSD로부터 상기 SSD에 대한 상기 유효 신뢰성을 수신하는 단계;
    상기 SSD에 저장된 신뢰성 테이블을 요청하는 신뢰성 테이블 요청을 상기 호스트상의 상기 애플리케이션으로부터 상기 SSD로 전송하는 단계;
    상기 호스트상의 상기 애플리케이션에서 상기 SSD로부터 상기 신뢰성 테이블을 수신하는 단계;
    상기 호스트상의 상기 애플리케이션에 대한 적어도 원하는 신뢰성에 기초하여 상기 신뢰성 테이블에서 엔트리를 선택하는 단계; 및
    상기 호스트상의 상기 애플리케이션으로부터 상기 SSD로 설정 요청을 전송하는 단계를 포함하고,
    상기 신뢰성 테이블의 각 엔트리는 상기 SSD의 설정 및 상기 SSD의 상기 설정에 대한 신뢰성을 식별하고, 상기 설정 요청은 상기 신뢰성 테이블에서 상기 엔트리를 식별하는 방법.
  20. 제 19 항에 있어서,
    상기 호스트상의 상기 애플리케이션에 대한 적어도 원하는 신뢰성에 기초하여 상기 신뢰성 테이블에서 엔트리를 선택하는 단계는, 상기 SSD의 상기 설정에 대한 상기 신뢰성이 적어도 상기 원하는 신뢰성만큼 높은 상기 신뢰성 테이블에서의 상기 엔트리를 선택하는 단계를 포함하는 방법.
KR1020200115467A 2019-12-16 2020-09-09 개선된 ssd 신뢰성 KR20210076834A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201962948792P 2019-12-16 2019-12-16
US62/948,792 2019-12-16
US16/853,731 2020-04-20
US16/853,731 US11307804B2 (en) 2019-12-16 2020-04-20 Enhanced SSD reliability

Publications (1)

Publication Number Publication Date
KR20210076834A true KR20210076834A (ko) 2021-06-24

Family

ID=76318025

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200115467A KR20210076834A (ko) 2019-12-16 2020-09-09 개선된 ssd 신뢰성

Country Status (5)

Country Link
US (3) US11307804B2 (ko)
JP (1) JP2021096837A (ko)
KR (1) KR20210076834A (ko)
CN (1) CN112988056A (ko)
TW (1) TW202125208A (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11307804B2 (en) * 2019-12-16 2022-04-19 Samsung Electronics Co., Ltd. Enhanced SSD reliability
KR20220077208A (ko) * 2020-11-30 2022-06-09 삼성전자주식회사 데이터 중복 제거 기능을 갖는 스토리지 장치, 스토리지 장치의 동작 방법, 및 스토리지 서버의 동작 방법
US11733893B2 (en) * 2021-07-28 2023-08-22 International Business Machines Corporation Management of flash storage media
US11989088B2 (en) * 2022-08-30 2024-05-21 Micron Technology, Inc. Read data path

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8006166B2 (en) * 2007-06-12 2011-08-23 Micron Technology, Inc. Programming error correction code into a solid state memory device with varying bits per cell
JP5349897B2 (ja) * 2008-10-21 2013-11-20 株式会社日立製作所 ストレージシステム
US10073737B2 (en) * 2009-10-30 2018-09-11 International Business Machines Corporation Slice location identification
US8533564B2 (en) 2009-12-23 2013-09-10 Sandisk Technologies Inc. System and method of error correction of control data at a memory device
KR101678404B1 (ko) 2010-02-25 2016-11-23 삼성전자주식회사 사전 확률 정보를 사용하는 메모리 시스템 및 그것의 데이터 처리 방법
WO2011159805A2 (en) * 2010-06-15 2011-12-22 Fusion-Io, Inc. Apparatus, system, and method for providing error correction
US8533550B2 (en) 2010-06-29 2013-09-10 Intel Corporation Method and system to improve the performance and/or reliability of a solid-state drive
KR101801147B1 (ko) 2011-08-30 2017-11-27 삼성전자주식회사 데이터 신뢰성을 개선하는 데이터 관리 방법 및 그에 따른 데이터 저장 장치
US10418097B2 (en) 2017-11-27 2019-09-17 Western Digital Technologies, Inc. Non-volatile storage system with read calibration
US11307804B2 (en) * 2019-12-16 2022-04-19 Samsung Electronics Co., Ltd. Enhanced SSD reliability

Also Published As

Publication number Publication date
US20230305751A1 (en) 2023-09-28
US20220214836A1 (en) 2022-07-07
US11307804B2 (en) 2022-04-19
TW202125208A (zh) 2021-07-01
CN112988056A (zh) 2021-06-18
US11662951B2 (en) 2023-05-30
JP2021096837A (ja) 2021-06-24
US20210181983A1 (en) 2021-06-17

Similar Documents

Publication Publication Date Title
US9582220B2 (en) Notification of trigger condition to reduce declared capacity of a storage device in a multi-storage-device storage system
KR20210076834A (ko) 개선된 ssd 신뢰성
US9158681B1 (en) Process and apparatus to reduce declared capacity of a storage device by conditionally trimming
US9524105B2 (en) Process and apparatus to reduce declared capacity of a storage device by altering an encoding format
US9543988B2 (en) Adaptively strengthening ECC for solid state cache
US9665311B2 (en) Process and apparatus to reduce declared capacity of a storage device by making specific logical addresses unavailable
US20160011786A1 (en) Storage system and data write method
US10095585B1 (en) Rebuilding data on flash memory in response to a storage device failure regardless of the type of storage device that fails
US9519427B2 (en) Triggering, at a host system, a process to reduce declared capacity of a storage device
WO2015034954A1 (en) Process and apparatus to reduce declared capacity of a storage device by reducing a range of logical addresses
US20220043713A1 (en) Meta Data Protection against Unexpected Power Loss in a Memory System
EP3189438B1 (en) Triggering a process to reduce declared capacity of a storage device in a multi-storage-device storage system
US9524112B2 (en) Process and apparatus to reduce declared capacity of a storage device by trimming
US9582203B2 (en) Process and apparatus to reduce declared capacity of a storage device by reducing a range of logical addresses
KR20150052402A (ko) Ssd 기반 raid 스토리지에서 데이터 및 패리티 디스크의 복합적 중복제거 방법
US9563362B2 (en) Host system and process to reduce declared capacity of a storage device by trimming
US20160062667A1 (en) Process and Apparatus to Reduce Declared Capacity of a Storage Device by Reducing a Count of Logical Addresses
US9582202B2 (en) Process and apparatus to reduce declared capacity of a storage device by moving data
US9552166B2 (en) Process and apparatus to reduce declared capacity of a storage device by deleting data
US9582212B2 (en) Notification of trigger condition to reduce declared capacity of a storage device
KR20220086934A (ko) 비휘발성 메모리 시스템의 저널링 제어 장치 및 방법
US9563370B2 (en) Triggering a process to reduce declared capacity of a storage device