KR101411566B1 - Raid 그룹의 여러 스트라이핑을 갖는 메모리 및 그 수행방법 - Google Patents
Raid 그룹의 여러 스트라이핑을 갖는 메모리 및 그 수행방법 Download PDFInfo
- Publication number
- KR101411566B1 KR101411566B1 KR1020137005934A KR20137005934A KR101411566B1 KR 101411566 B1 KR101411566 B1 KR 101411566B1 KR 1020137005934 A KR1020137005934 A KR 1020137005934A KR 20137005934 A KR20137005934 A KR 20137005934A KR 101411566 B1 KR101411566 B1 KR 101411566B1
- Authority
- KR
- South Korea
- Prior art keywords
- data
- memory
- module
- stripe
- write
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/16—Protection against loss of memory contents
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
- G06F11/1092—Rebuilding, e.g. when physically replacing a failing disk
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/24—Memory cell safety or protection circuits, e.g. arrangements for preventing inadvertent reading or writing; Status cells; Test cells
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2211/00—Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
- G06F2211/10—Indexing scheme relating to G06F11/10
- G06F2211/1002—Indexing scheme relating to G06F11/1076
- G06F2211/1061—Parity-single bit-RAID4, i.e. RAID 4 implementations
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
데이터를 쓰거나 소거하는데 필요한 시간 및 데이터를 읽는데 필요한 시간에 비대칭이 있을 수 있는 데이터 메모리 시스템이 기술되어 있다. 데이터는 RAID 데이터 저장 수단을 이용해 저장될 수 있고 모듈에 대한 읽기, 쓰기, 및 소거 동작은 읽기 동작을 수행하는데 상당한 지연 없이 소거 및 쓰기 동작이 수행될 수 있도록 배열될 수 있다. 메모리 시스템에서 메모리 모듈의 고장이 발생하면, 복구불가능한 데이터 손실 확률 또는 지연 성능의 열화를 최소화하는 것과 관련될 수 있는 정책에 따라 선택될 수 있는 고장난 모듈의 데이터를 복구하는 방법이 개시되어 있다.
Description
본 출원은 2008년 3월 26일자로 출원된 일부계속출원 US 12/079,364호로, 2007년 3월 29일자로 출원된 미국 가출원 60/920,737의 우선권과 또한 2009년 10월 9일자로 출원된 미국 가출원 61/250,216의 우선권을 주장하며, 이들 각각은 본 명세서에 참조로 합체되어 있다.
본 발명은 컴퓨터 메모리 시스템 및 그 사용방법에 관한 것이다.
컴퓨터 메모리 시스템은 지속성 또는 비지속성 타입일 수 있다. 지속성 메모리 타입의 예는 자기코어, 디스크 드라이버, 테이프 드라이버 및 반도체 FLASH 메모리이다. 비지속성 메모리 타입은 DRAM 등과 같은 반도체 메모리일 수 있다. 비지속성 메모리 타입은 일반적으로 데이터의 읽기 및 쓰기 모두에 대해 빠른 접속시간을 가지며 컴퓨터 메인 메모리 또는 캐시 메모리로 사용된다. 데이터는 전원을 필요로 하는 수단에 의해 이런 메모리에 보유되고, 메모리에 저장된 정보는 전원이 끊기면 손실될 수 있다. 비지속성 메모리 시스템은 대개 단시간 정전용 커패시티브 스토리지 디바이스일 수 있는 백업 전원 또는 장기간 데이터 보유를 위해 배터리, 발전기 등을 이용한 백업 전원을 갖는다.
디스크, 테이프 또는 FLASH 메모리와 같은 지속성 스토리지 디바이스는 전원이 디바이스로부터 제거되어도 저장된 데이터를 보유하고 비지속성 데이터 스토리지 디바이스 및 계속 전원을 제공하는 비용 또는 신뢰가 비실용적인 데이터 스토리지를 장기간 백업하는데 종종 사용된다. 추가로, 더 많은 양의 데이터가 지속성 데이터 스토리지 디바이스에 저장되기 때문에, 개발된 기술들은 접속 속도보다는 스토리지의 비트당 원가 절감을 위해 지향되어 왔다. 따라서, 많은 컴퓨팅 시스템들은 다양한 메모리 타입을 이용해 즉시 필요한 데이터가 비지속성 스토리지에 저장되는 다른 저장기능을 수행하며, 덜 빈번히 데이터 접속되는 동안 지속성 스토리지 디바이스에 백업될 수 있고, 대형 데이터 그룹화가 지속성 스토리지에 저장된다.
데이터 센터라고 할 수 있는 컴퓨터 데이터베이스 시스템 또는 인터넷 및 관련된 스토리지 디바이스와 같은 분산 데이터 시스템은 방대한 양의 데이터를 저장할 수 있다. 이 구조의 소정 태양들을 현재 "클라우드" 컴퓨팅이라 한다. 오늘날, 이런 데이터 스토리지 요건들은 1000 테라바이트(1000TB)를 초과할 수 있고 계속 늘어날 것으로 예상된다. 이들 데이터 세트 대부분은 실질적으로 즉시 접속할 비지속성 스토리지 용량보다 더 크고, 클라이언트 컴퓨터로부터 요청을 서비스할 때 데이터 센터에서 서버들의 응답시간은 시스템 수행시 심각한 병목현상이 될 수 있다. 이런 많은 제한은 지속성 스토리지 매체의 데이터 접속 시간지연의 결과이다. 테이프 시스템에 대해, 읽기 또는 쓰기되는 데이터 부분이 읽기 또는 쓰기 헤드에 위치되도록 선형 테이프가 옮겨져야 한다. 마찬가지로, 디스크에 대해, 헤드는 데이터의 소정 섹터가 위치되는 데이터 트랙 위에 있도록 위치되어야 하며, 그런 후 디스크 컨트롤러는 섹터가 위치된 헤더 아래에서 회전할 때까지 대기한다. 이들 동작들 중 어느 하나는 실질적으로 비지속성 메모리 디바이스에 읽기 또는 쓰기보다 더 느리다. 이런 제한들은 특히 데이터베이스에서 랜덤 위치를 갖는 데이터 싱글 메모리 위치들이 읽기, 쓰기 또는 변경될 필요가 있을 경우 심각하다.
메모리에 저장된 데이터 요청 및 메모리로부터 데이터 검색 간의 시간을 지연(latency)이라 할 수 있다. 현재 사용된 지속성 메모리 기술들 가운데 플래시 메모리는 디스크와 같이 기계적 디바이스들보다는 지연이 낮으나, 현재 사용중인 비지속성 메모리 타입보다는 지연이 상당히 더 크다. 플래시 메모리의 가격 및 유사한 고체상태 기술들은 통상적으로 18개월 주기동안 디바이스의 용량은 배로 가격은 절반인 일반적인 경향을 표현하는 무어의 법칙으로 알려진 원칙에 지배되어 왔다. 이와 같이, 가령 디스크에서보다 플래시 메모리에 데이터를 저장하는 단가가 곧 패리티(parity)에 도달할 것으로 예상된다.
디스크 디바이스보다 상당히 지연이 낮지만, 플래시 메모리는 현재 이용가능한 메모리 모듈의 동작 방법 및 설계에 의해 접속시간에 여전히 한계가 있다. 플래시 메모리는 일반 용어이며, 다양한 타입의 고체상태 디바이스들이 플래시 메모리로 고려될 수 있다. 본래 EEPROM(Electronically Erasable Programmable Read Only Memory)에 잇따라 NOR-FLASH, NAND-FLASH 등과 같이 공지된 다른 개발들이 있다. 각각의 기술들은 데이터의 읽기 및 쓰기에 대해 다른 디자인과 구성 및 다른 속성들을 갖는다. 즉, 읽기 또는 쓰기일 수 있는 (예컨대, 데이터 워드, 페이지, 또는 데이터 섹터) 데이터 블록의 최소 크기에 대한 제한 또는 데이터를 읽고 쓰는데 필요한 시간 차가 있을 수 있다. 많은 경우, 데이터를 읽거나 쓰기 위한 시간은 정해지지 않고 폭넓은 범위로 변할 수 있다. 메모리 컨트롤러 또는 다른 이런 디바이스는 이들이 실행될 때까지 현저한 요청들을 추적해야 하고, 이 요건은 데이터 지연을 전체 시스템의 속도를 느리게 할 수 있는 가변량으로 하고, 메모리를 관리하는데 사용되는 하드웨어 및 소프트웨어의 복잡도를 증가시킬 수 있다. 또한, 플래시 메모리 디바이스의 수명은 마멸과정을 받는 것으로 간주되며, 읽기, 쓰기(플래시 메모리를 말하는 경우 "프로그램"이라 함) 또는 소거 사이클에서 측정된다. 본 명세서에서, "쓰기"라는 용어는 플래시 메모리가 이용되는 경우 "프로그램"을 말하는데 사용된다.
수명에 있어 싸이클의 회수가 각 위치 또는 섹터에 대해 커질 수 있으나, 실제로 그리고 발생할 수 있는 병적 상황에 있어 모두 플래시 디바이스로부터 형성된 큰 메모리의 개개의 구성성분들의 수명이 충분히 짧아 메모리의 마모를 고르게 하고 오류 검출 및 정정을 수행하며, 배드 데이터 블록들을 표시하는 등에 상당한 노력이 필요할 수 있다.
RAID(Redundant Arrays of Independent, 또는 Inexpensive, Disks)의 개념은 적어도 1988년 데이비드 패터슨, 가스 깁슨, 및 랜디 에이치. 캣츠가 쓴 논문으로 거슬러 올라간다. RAID는 중복을 추가함으로써 포함된 데이터를 손실에 대해 보호하도록 디스크 메모리 시스템이 배열되게 허용한다. 적절히 구성된 RAID 구조에서, 임의의 싱글 디스크의 손실은 저장된 데이터에 접속하거나 재구성하는 능력과 간섭하지 않으나, 다른 성능 표시가 영향받을 수 있다. RAID 없이 디스크 어레이의 평균고장간격(Mean Time Between Failure, MTBF)은 어떤 디스크 손실로 데이터를 상실하기 때문에 어레이에서 드라이브의 개수로 나누어진 개개의 드라이브의 MTBF와 같다. 이로 인해, 많은 적용 요건들에 대해 디스크 드라이브 어레이의 MTBF가 너무 낮을 수 있다. 그러나, 디스크 어레이는 다양한 방식으로 정보를 중복 저장함으로써 고장이 방지될 수 있다.
예컨대, RAID-3, RAID-4, 및 RAID-5 등이 주제에 대한 변형들이다. 상기 주제는 패리티 기반의 RAID이다. RAID-1에서와 같이 데이터의 전체 사본을 유지하는 대신, 데이터는 추가된 추가 디스크와 함께 여러 디스크들에 걸쳐 퍼진다. 추가 디스크에 대한 데이터는 다른 디스크들에 대한 데이터를 기초로 (불리안(Boolean) XORs을 이용해) 계산될 수 있다. 디스크 세트에서 임의의 싱글 디스크가 손실되면, 디스크에 저장된 데이터는 나머지 디스크의 데이터에 대해 수행된 계산을 통해 복구될 수 있다. 이들 실행은 RAID-1(미러링)보다 덜 고가인데 왜냐면 이들은 RAID-1이 요구하는 100% 디스크 공간 오버헤드를 필요로 하지 않기 때문이다. 그러나, 디스크의 데이터는 계산에 의해 복구되기 때문에, 데이터를 쓰고 디스크가 손실된 후 데이터를 복구하는데 대한 성능적 함의가 있다. 패리티 RAID의 많은 상업적 수단들은 캐시 메모리를 이용해 성능 문제들을 완화한다.
RAID-4 디스크 어레이에서, 대개 4 또는 5개의 데이터 디스크들 더하기 다른 디스크들에 데이터에 대한 패리티를 저장하는데 사용되는 하나의 가외 디스크의 세트가 있다. 모든 쓰기들로 패리티 디스크가 업데이트되기 때문에, 상기 디스크는 전체 어레이에 모든 쓰기 활동을 느리게 하는 성능 병목현상이 될 수 있다.
RAID에 대한 원리는 "스트립핑(stripping)"으로, 여러 드라이브들(메모리 유닛들)을 하나의 논리 스토리지 유닛에 연쇄연결하는 방법이다. 스트립핑은 각 드라이브의 스토리지 공간을 "스트라이프(stripes)"로 분할하는 것을 포함하며, 상기 스트라이프는 한 섹터(가령, 512 바이트)만큼 작게 또는 수 메가바이트 이상만큼 클 수 있다. 그런 후 이들 스트라이프들은 결합된 스토리지 공간이 스트라이프내 각 드라이브로부터 스트라이프들로 구성되도록 인터리브된다. 적용 환경, I/O, 또는 데이터 집중(data intensive) 타입은 큰 또는 작은 스트라이프들이 사용되는지를 판단하는 디자인 고려일 수 있다.
RAID-5는 RAID-4와 동일한 하드웨어 구성을 이용해 실행될 수 있다. RAID-4의 경우, 패리티 블록은 각각의 스트라이프들에 대해 동일한 디스크에 저장되므로, 패리티 디스크라고 하는 것을 가질 수 있다. RAID-5의 경우, 각 스트라이프에 대한 패리티 블록은 스트라이프의 일부인 디스크에 저장되나, 패리티 블록은 이들이 스토리지 시스템을 구성하는 복수의 디스크들에 걸쳐 기본적으로 균일하게 분포되도록 분산된다. RAID-6는 예컨대 패리티를 계산하기 위한 기초로서 스트라이프들의 컬럼을 이용해 복수의 스트라이프들에 걸친 패리티의 계산을 포함하는 데이터 보호에 있어 또 다른 향상이다.
RAID 3 또는 RAID 4 어레이의 성능(레벨 0과 동일한 성능)은 읽기에 이점적일 수 있다. 그러나, 쓰기는 패리티 데이터가 매번 업데이트되는 것을 필요로 한다. 이는 특히, 대량 쓰기 또는 순차적 쓰기가 꽤 빠르긴 하나 작은 랜덤 쓰기를 느리게 한다. 어레이에서 단 하나의 드라이브만이 중복 데이터를 저장하기 때문에, RAID 4 어레이의 메가바이트당 단가가 꽤 낮아질 수 있다. 여러 디스크들에 걸친 데이터의 분산은 전용 하드웨어 또는 소프트웨어에 의해 관리될 수 있다. 추가로, 부분적으로 소프트웨어 및 부분적으로 하드웨어 기반의 방안인 하이브리드 RAID 구조들이 있다.
개념적으로, 데이터 및 오류 보정 패리티 데이터의 구성이 도 1에 도시되어 있으며, 한 블록(A)에서 데이터는 데이터 세트(A1,A2,A3)로서 3개의 디스크들에 걸쳐 스트라이프되고, 패리티 데이터 세트(Ap)는 4번째 디스크에 있으며, 패리티 데이터 세트(Ap)는 일반적으로 데이터 세트(A1,A2,A3)의 배타적 OR(XOR)로 계산된다. 그런 후, 당업자에 공지된 바와 같이, 데이터 세트(A1,A2,A3 또는 Ap) 중 하나가 다른 3개 데이터 세트로 재구성될 수 있다. 그러므로, 가령 디스크들 중 하나의 고장을 나타내는 데이터 세트 중 어느 하나에서의 오류가 다른 데이터 세트들의 이용에 의해 보정될 수 있다.
오류정정코드(ECC)는 각 데이터 신호가 특정 계산규칙을 따르는 알고리즘이므로 오류를 나타내는 수신된 신호 또는 복구된 신호에서 이 계산으로부터 출발이 일반적으로 자동으로 검출되거나 정정될 수 있다. ECC는 컴퓨터 데이터 스토리지, 예컨대 다이나믹 RAM, FLASH 메모리 등 및 데이터 전송에 사용된다. ECC의 예는 해밍코드, BCH 코드, 리드-솔로몬 코드, 리드-뮬러코드(Reed-Muller code), 이진 골레이 코드(binary Golay code), 컨볼루션 코드, 및 터보코드를 포함한다. 가장 간단한 오류정정코드는 싱글비트 오류를 정정하고 이중비트 오류를 검출할 수 있다. 다른 코드들은 멀티비트 오류들을 검출 또는 정정할 수 있다. ECC 메모리는 컴퓨터 메모리에서의 오류에 대해 보호함으로써 더 큰 데이터 정확도와 시스템 업데이트를 제공한다. 스트립 데이터의 각 데이터 세트(A1,A2,A3,Ap)는 이에 첨부되고 일반적으로 동일한 디스크에 저장된 관련된 오류정정코드(ECC) 데이터 세트를 가질 수 있다. 데이터가 디스크로부터 읽어질 때, ECC에 의해 데이터의 무결성이 검증되고 이용된 ECC에 따라, 하나 이상의 오류들이 검출 및 정정될 수 있다. 일반적으로, 여러 오류들의 검출 및 정정은 이용된 ECC의 함수이며, ECC의 선택은 요구된 데이터 무결성 수준, 처리시간 및 기타 코스트(cost)에 따른다.
데이터 쓰기 및 읽기 능력을 각각 갖는 복수의 메모리 모듈을 포함한 메모리 시스템이 개시되어 있다. 복수의 모듈들의 모듈 그룹은 상기 모듈 그룹에 저장된 데이터가 모듈 그룹의 모듈들 중 어느 하나로부터 데이터의 쓰기 또는 소거와 관련된 봉쇄 없이 읽혀질 수 있도록 구성된다.
또 다른 태양으로, 메모리 시스템은 데이터 쓰기 및 읽기 능력을 각각 갖는 복수의 메모리 모듈들을 구비한다. 상기 복수의 메모리 모듈들로 된 한 모듈 그룹은 사용자 데이터 및 상기 사용자 데이터용 패리티 데이터를 저장한다. 상기 모듈 그룹의 쓰기 또는 소거 동작은 읽기 요청시 적어도 모든 사용자 데이터 또는 읽기 요청시 모든 사용자 데이터 미만 및 요청된 사용자 데이터를 재구성하기 위한 충분한 패리티 데이터 중 적어도 하나가 요청되도록 구성되며, 데이터를 읽거나 재구성하는 시간 지연은 모듈 그룹 중 한 모듈이 쓰기 또는 소거 상태에 있는 시간 간격 미만이다.
또 다른 태양으로, 메모리 시스템은 데이터 쓰기 및 읽기 능력을 각각 갖는 복수의 메모리 모듈들을 갖는다. 상기 복수의 메모리 모듈들로 된 한 모듈 그룹은 사용자 데이터 및 상기 사용자 데이터용 패리티 데이터를 저장하고, 상기 모듈 그룹의 쓰기 또는 소거 동작은 적어도 모든 사용자 데이터 또는 모든 사용자 데이터 미만 및 사용자 데이터를 재구성하기 위한 충분한 패리티 데이터 중 적어도 하나가 모듈 그룹에 수행된 소거 또는 쓰기 동작으로 인한 시간 지연과 조우함이 없이 읽혀질 수 있도록 배열된다. 모듈로의 데이터 할당은 메모리 모듈에 대한 어드레스 그룹들을 논리 어드레스 공간에서 발생 패턴에 따라 RAID 스트라이프에 할당하는 것을 포함한다.
또 다른 태양으로, 메모리 시스템은 데이터 쓰기 및 읽기 능력을 각각 갖는 복수의 메모리 모듈들을 갖는다. 복수의 모듈로 된 한 모듈 그룹은 상기 모듈 그룹에 수행되는 쓰기 동작이 복수의 쓰기 동작들이 중첩되는 시간 간격에서 수행되도록 제한되게 구성된다.
복수의 메모리 모듈들로 된 그룹은 상기 메모리 모듈들 중 단 하나만 임의의 시기에 쓰기 또는 소거 동작을 수행하는 중이도록 동작하게 제어가능한 복수의 메모리 모듈들을 제공하는 단계와, 사용자 데이터가 상기 쓰기 또는 소거 동작을 수행하지 않는 메모리 모듈로부터 모든 사용자 데이터를 읽거나, 쓰기 또는 소거 동작을 수행하지 않는 메모리 모듈로부터 모든 사용자 데이터 미만을 읽는 것 중 하나에 의해 읽혀질 수 있도록 사용자 데이터의 패리티 데이터를 포함하는 메모리 모듈의 그룹에 대한 사용자 데이터 파일을 저장하는 단계를 포함하고, 패리티 데이터를 저장하는 메모리 모듈은 쓰기 또는 소거 동작을 수행하지 않는 메모리 시스템에서 데이터 저장 방법이 개시되어 있다.
또 다른 태양으로, 복수의 메모리 모듈들로 된 그룹은 상기 메모리 모듈들 중 단 하나만 임의의 시기에 쓰기 또는 소거 동작을 수행하는 중이도록 동작하게 제어가능한 복수의 메모리 모듈들을 제공하는 단계와, 사용자 데이터가 상기 쓰기 또는 소거 동작을 수행하지 않는 메모리 모듈로부터 모든 사용자 데이터를 읽거나, 쓰기 또는 소거 동작을 수행하지 않는 메모리 모듈로부터 모든 사용자 데이터 미만을 읽는 것 중 하나에 의해 읽혀질 수 있도록 사용자 데이터의 패리티 데이터를 포함하는 메모리 모듈의 그룹에 대한 사용자 데이터 파일을 저장하는 단계를 포함하고, 패리티 데이터를 저장하는 메모리 모듈은 쓰기 또는 소거 동작을 수행하지 않는 메모리 시스템에 데이터를 저장하는 방법이 개시되어 있다.
본 발명의 내용에 포함됨.
도 1은 복수의 디스크 드라이브들에 대한 RAID 4 데이터 스토리지 시스템을 도시한 것이다(종래 기술).
도 2는 행렬 스토리지 어레이에 배열된 복수의 메모리 모듈들을 도시한 것이다.
도 3은 복수의 메모리 모듈에 저장된 어레이(A)에 대한 데이터 구조의 예이다.
도 4a는 3개 아키텍쳐로 배열된 메모리 모듈의 배열을 도시한 것으로, 논리 데이터 스트라이프에서 메모리 모듈들은 브랜치의 끝에 있는 리브들에 위치해 있다.
도 4b는 도 4a에서와 같은 메모리 모듈의 배열을 도시한 것으로, 논리 데이터 스트라이프에서 메모리 모듈들은 브랜치에 위치해 있다.
도 5는 RAID 메모리에서 데이터의 개략적 배열이다.
도 6a는 RAID 스트라이프에 대한 쓰기 동작의 타임 시퀀스를 도시한 것이다.
도 6b는 도 6a의 순차적 시간간격에 대한 쓰기 및 읽기 동작의 관계를 도시한 것이다.
도 7은 메모리 모듈의 블록도이다.
도 8은 각 모듈이 한 RAID 그룹 이상에 속하는 메모리 모듈들의 그룹을 도시한 것으로, 상기 RAID 그룹은 모듈들에 걸쳐 여러가지 방식으로 스트라이프된다.
도 9는 그룹내 어드레스 시퀀스가 연속적일 수 없는 RAID 배열을 도시한 것이다.
도 10은 치수 5×5의 논리 어드레스 공간과 0의 기울기(열 당 행)로 지향된 길이 5의 스트라이프를 도시한 것이다.
도 11은 치수 5×5의 논리 어드레스 공간과 -1 기울기로 지향된 길이 5의 스트라이프를 도시한 것이다.
도 12는 치수 5×5의 논리 어드레스 공간과 +1 기울기로 지향된 길이 5의 스트라이프를 도시한 것이다.
도 13은 치수 5×9의 논리 어드레스 공간과 +2 기울기로 지향된 길이 5의 스트라이프를 도시한 것이다.
도 14는 치수 5×9의 논리 어드레스 공간과 -2 기울기로 지향된 길이 5의 스트라이프를 도시한 것이다.
도 15는 치수 5×5의 논리 어드레스 공간과 열과 일치하게 지향된 길이 5의 스트라이프를 도시한 것이다.
도 16은 치수 5×5의 논리 어드레스 공간과, 어레이 경계에서 스트라이프를 감싼 것으로 도시된, -2 기울기로 지향된 길이 5의 스트라이프를 도시한 것이다.
도 17은 치수 5×5의 논리 어드레스 공간과, 어레이 경계에서 스트라이프를 감싼 것으로 도시된, +2 기울기로 지향된 길이 5의 스트라이프를 도시한 것이다.
도 18은 치수 5×5의 논리 어드레스 공간 및 (3,3)을 지나는 기울기 0,±1,±2의 스트라프들과 함께 길이 5의 스트라이프를 도시한 것이다.
도 19는 치수 5×5의 논리 어드레스 공간 및 (3,3)을 수직으로 지나는 기울기 0,±1,±2의 스트라프들과 함께 길이 5의 스트라이프를 도시한 것이다.
도 20은 치수 5×5의 논리 어드레스 공간 및 (3,3)을 수직으로 지나는 기울기 0,±1,±2의 스트라프들과 함께 길이 5의 스트라이프를 도시한 것으로, 스트라이프 패턴들은 다른 폭을 갖는다.
도 21은 치수 5×3의 논리 어드레스 공간과 -1 기울기의 스트라이프를 갖는 길이 5의 스트라이프를 도시한 것이다.
도 22는 치수 5×7의 논리 어드레스 공간과 +2 기울기의 스트라이프를 갖는 길이 5의 스트라이프를 도시한 것이다.
도 23은 도 18의 발생함수가 열 3의 각 행에 위치되는 치수 5×5의 논리 어드레스 공간을 도시한 것이다.
도 24는 도 18의 발생함수가 (1,3)에 위치되는 치수 5×5의 논리 어드레스 공간을 도시한 것이다.
도 25는 또 다른 발생함수의 예를 이용한 치수 5×5의 논리 어드레스 공간을 도시한 것이다.
도 26은 (1,3)에 위치된 도 25의 발생함수에 따른 치수 5×5의 논리 어드레스 공간을 도시한 것이다.
도 27은 어레이의 각 행렬에 위치된 도 18의 발생함수에 따른 치수 5×5의 논리 어드레스 공간을 도시한 것이다.
도 28은 치수 5×7의 발생함수에 따라, 치수 7×7의 논리 어드레스 공간을 도시한 것이다.
도 29는 치수 5×9의 발생함수에 따라, 치수 7×9의 논리 어드레스 공간을 도시한 것이다.
도 30은 치수 5×7의 논리 어드레스 공간을 도시한 것으로, 스트라이프들은 특정 데이터 손실 패턴이 되도록 애플리케이션 A-F에 할당된다.
도 31은 좌측 대각선 스트라이핑을 포함한 치수 7×7의 논리 어드레스 공간을 도시한 것이다.
도 32는 스트라이프의 논리 어드레스 범위들이 어드레스 범위들 간에 2열씩 증가되는 치수 7×7의 논리 어드레스 공간과 최종발생한 랩 어라운드(wrap-around)패턴을 도시한 것이다.
도 33은 스트라이프의 논리 어드레스 범위들이 어드레스 범위들 간에 2열씩 증가되는 치수 7×7의 논리 어드레스 공간과 최종발생한 랩 어라운드 패턴을 도시한 것이다.
도 34는 도 31-33의 스트라이핑 패턴을 도시한 것으로, 총 스트라이프들을 발생하기 위해 더 큰 증가가 이용된다.
도 35는 치수 7×7의 어레이 어드레스의 논리 어드레스 공간(1,4)에 공통인 스트라이프들의 분포를 도시한 것이다.
도 36은 총 48개 스트라이프들에 대한 발생 패턴으로서 도 31의 스트라이핑 패턴을 도시한 것이다.
도 37은 도 36의 (1,1)을 지나는 스트라이프들의 분포를 도시한 것이다.
도 38은 스트라이프내 어드레스 범위 증가가 5인 도 36과 유사한 도면이다.
도 39는 도 38의 (1,1)을 지나는 스트라이프들의 분포를 도시한 것이다.
도 40은 논리 어드레스 공간에 걸쳐 모듈을 지나는 스트라이프들을 더 넓게 분산시키기 위한 다른 많은 스트라이핑 패턴들의 사용을 도시한 것이다.
도 41은 0, 좌측 대각선, 우측 대각선 기울기의 스트라이프들을 갖는 6×10의 논리 어드레스 공간을 도시한 것이다.
도 2는 행렬 스토리지 어레이에 배열된 복수의 메모리 모듈들을 도시한 것이다.
도 3은 복수의 메모리 모듈에 저장된 어레이(A)에 대한 데이터 구조의 예이다.
도 4a는 3개 아키텍쳐로 배열된 메모리 모듈의 배열을 도시한 것으로, 논리 데이터 스트라이프에서 메모리 모듈들은 브랜치의 끝에 있는 리브들에 위치해 있다.
도 4b는 도 4a에서와 같은 메모리 모듈의 배열을 도시한 것으로, 논리 데이터 스트라이프에서 메모리 모듈들은 브랜치에 위치해 있다.
도 5는 RAID 메모리에서 데이터의 개략적 배열이다.
도 6a는 RAID 스트라이프에 대한 쓰기 동작의 타임 시퀀스를 도시한 것이다.
도 6b는 도 6a의 순차적 시간간격에 대한 쓰기 및 읽기 동작의 관계를 도시한 것이다.
도 7은 메모리 모듈의 블록도이다.
도 8은 각 모듈이 한 RAID 그룹 이상에 속하는 메모리 모듈들의 그룹을 도시한 것으로, 상기 RAID 그룹은 모듈들에 걸쳐 여러가지 방식으로 스트라이프된다.
도 9는 그룹내 어드레스 시퀀스가 연속적일 수 없는 RAID 배열을 도시한 것이다.
도 10은 치수 5×5의 논리 어드레스 공간과 0의 기울기(열 당 행)로 지향된 길이 5의 스트라이프를 도시한 것이다.
도 11은 치수 5×5의 논리 어드레스 공간과 -1 기울기로 지향된 길이 5의 스트라이프를 도시한 것이다.
도 12는 치수 5×5의 논리 어드레스 공간과 +1 기울기로 지향된 길이 5의 스트라이프를 도시한 것이다.
도 13은 치수 5×9의 논리 어드레스 공간과 +2 기울기로 지향된 길이 5의 스트라이프를 도시한 것이다.
도 14는 치수 5×9의 논리 어드레스 공간과 -2 기울기로 지향된 길이 5의 스트라이프를 도시한 것이다.
도 15는 치수 5×5의 논리 어드레스 공간과 열과 일치하게 지향된 길이 5의 스트라이프를 도시한 것이다.
도 16은 치수 5×5의 논리 어드레스 공간과, 어레이 경계에서 스트라이프를 감싼 것으로 도시된, -2 기울기로 지향된 길이 5의 스트라이프를 도시한 것이다.
도 17은 치수 5×5의 논리 어드레스 공간과, 어레이 경계에서 스트라이프를 감싼 것으로 도시된, +2 기울기로 지향된 길이 5의 스트라이프를 도시한 것이다.
도 18은 치수 5×5의 논리 어드레스 공간 및 (3,3)을 지나는 기울기 0,±1,±2의 스트라프들과 함께 길이 5의 스트라이프를 도시한 것이다.
도 19는 치수 5×5의 논리 어드레스 공간 및 (3,3)을 수직으로 지나는 기울기 0,±1,±2의 스트라프들과 함께 길이 5의 스트라이프를 도시한 것이다.
도 20은 치수 5×5의 논리 어드레스 공간 및 (3,3)을 수직으로 지나는 기울기 0,±1,±2의 스트라프들과 함께 길이 5의 스트라이프를 도시한 것으로, 스트라이프 패턴들은 다른 폭을 갖는다.
도 21은 치수 5×3의 논리 어드레스 공간과 -1 기울기의 스트라이프를 갖는 길이 5의 스트라이프를 도시한 것이다.
도 22는 치수 5×7의 논리 어드레스 공간과 +2 기울기의 스트라이프를 갖는 길이 5의 스트라이프를 도시한 것이다.
도 23은 도 18의 발생함수가 열 3의 각 행에 위치되는 치수 5×5의 논리 어드레스 공간을 도시한 것이다.
도 24는 도 18의 발생함수가 (1,3)에 위치되는 치수 5×5의 논리 어드레스 공간을 도시한 것이다.
도 25는 또 다른 발생함수의 예를 이용한 치수 5×5의 논리 어드레스 공간을 도시한 것이다.
도 26은 (1,3)에 위치된 도 25의 발생함수에 따른 치수 5×5의 논리 어드레스 공간을 도시한 것이다.
도 27은 어레이의 각 행렬에 위치된 도 18의 발생함수에 따른 치수 5×5의 논리 어드레스 공간을 도시한 것이다.
도 28은 치수 5×7의 발생함수에 따라, 치수 7×7의 논리 어드레스 공간을 도시한 것이다.
도 29는 치수 5×9의 발생함수에 따라, 치수 7×9의 논리 어드레스 공간을 도시한 것이다.
도 30은 치수 5×7의 논리 어드레스 공간을 도시한 것으로, 스트라이프들은 특정 데이터 손실 패턴이 되도록 애플리케이션 A-F에 할당된다.
도 31은 좌측 대각선 스트라이핑을 포함한 치수 7×7의 논리 어드레스 공간을 도시한 것이다.
도 32는 스트라이프의 논리 어드레스 범위들이 어드레스 범위들 간에 2열씩 증가되는 치수 7×7의 논리 어드레스 공간과 최종발생한 랩 어라운드(wrap-around)패턴을 도시한 것이다.
도 33은 스트라이프의 논리 어드레스 범위들이 어드레스 범위들 간에 2열씩 증가되는 치수 7×7의 논리 어드레스 공간과 최종발생한 랩 어라운드 패턴을 도시한 것이다.
도 34는 도 31-33의 스트라이핑 패턴을 도시한 것으로, 총 스트라이프들을 발생하기 위해 더 큰 증가가 이용된다.
도 35는 치수 7×7의 어레이 어드레스의 논리 어드레스 공간(1,4)에 공통인 스트라이프들의 분포를 도시한 것이다.
도 36은 총 48개 스트라이프들에 대한 발생 패턴으로서 도 31의 스트라이핑 패턴을 도시한 것이다.
도 37은 도 36의 (1,1)을 지나는 스트라이프들의 분포를 도시한 것이다.
도 38은 스트라이프내 어드레스 범위 증가가 5인 도 36과 유사한 도면이다.
도 39는 도 38의 (1,1)을 지나는 스트라이프들의 분포를 도시한 것이다.
도 40은 논리 어드레스 공간에 걸쳐 모듈을 지나는 스트라이프들을 더 넓게 분산시키기 위한 다른 많은 스트라이핑 패턴들의 사용을 도시한 것이다.
도 41은 0, 좌측 대각선, 우측 대각선 기울기의 스트라이프들을 갖는 6×10의 논리 어드레스 공간을 도시한 것이다.
도면을 참조로 예시적인 실시예들이 더 잘 이해되나, 이들 실시예들은 제한적인 특성인 것으로 의도되어 있지 않다. 동일하거나 다른 도면에서 동일한 번호의 요소들은 등가의 기능을 수행한다. 요소들은 숫자나 두문자로 또는 둘 다로 표시될 수 있고, 표현 간의 선택은 단지 명확히 하기 위한 것으로, 숫자로 표시된 요소 및 두문자 또는 문자숫자 표시자로 나타낸 동일 요소는 이를 바탕으로 구별되지 않아야 한다.
상술한 방법들 및 도면에 도시된 기기들은 기계실행 명령어, 가령 소프트웨어 또는 하드웨어 또는 모두의 조합으로 구성 또는 구현될 수 있음이 이해된다. 기계실행 명령어는 상기 명령어에 대해 동작하는 범용 컴퓨터, DPS와 같은 특수용 프로세서, 또는 어레이 프로세서 등이 본 명세서에 기술된 기능들을 수행하게 하도록 사용될 수 있다. 대안으로, 동작들은 기술된 동작을 수행하기 위한 하드와이어 로직 또는 펌웨어 명령어를 가질 수 있는 특수 하드웨어 구성요소들에 의해 또는 아날로그 회로를 포함할 수 있는 프로그램된 컴퓨터 구성요소 및 커스텀 하드웨어 구성요소의 임의의 조합에 의해 수행될 수 있다.
상기 방법들은 적어도 부분적으로 컴퓨터(또는 기타 전자 디바이스)를 프로그램하여 상기 방법들을 수행하도록 이용될 수 있는 저장된 명령어를 갖는 비휘발성 기계판독가능 매체를 포함할 수 있는 컴퓨터 프로그램 제품으로서 제공될 수 있다. 본 설명을 위해, "기계판독가능 매체"라는 용어는 컴퓨팅 장치 또는 특수용 하드웨어에 의한 실행을 위해 데이터 또는 명령어 시퀀스를 저장 또는 인코딩할 수 있고 기계 또는 특수용 하드웨어가 본 발명의 방법들 또는 기능들 중 어느 하나를 수행할 수 있는 임의의 매체를 포함하는 것으로 해석되어야 한다. 따라서, "기계판독가능 매체"라는 용어는 고체상태 메모리, 광학 및 자기 디스크, 자기 메모리, 및 광학 메모리 뿐만 아니라 이런 목적을 위해 개발될 수 있는 임의의 등가 디바이스를 포함하나 이에 국한되지 않는 것으로 해석되어야 한다.
예컨대, 제한이 아니라, 기계판독가능 매체는 ROM, 모든 타입의 RAM(가령, S-RAM, D-RAM, P-RAM), PROM, EPROM, 자기랜덤 접속메모리, 자기디스크 저장매체, NAND 또는 NOR 구성될 수 있는 플래시 메모리, 메모리 저항기, 또는 전기, 광학, 음향 데이터 저장매체 등을 포함할 수 있다. DRAM과 같은 휘발성 메모리 디바이스는 휘발성 메모리 디바이스가 전원을 갖는 시스템의 일부인 경우 컴퓨터 프로그램 제품을 정하는데 사용될 수 있고, 전원 또는 배터리는 컴퓨터 프로그램 제품이 휘발성 메모리 디바이스에 저장되는 시간주기 동안 회로에 회로에 전력을 제공한다.
종종 데이터는 데이터 구조로서 논리 어레이의 형태로 관리된다. 그러나, 동일한 논리 어레이는 동일한 구성, 또는 다른 구성을 갖는 물리적 메모리 어레이와 관련될 수 있다. 마치 논리 데이터 구조와 물리적 기기 간에 직접적으로 일치되는 것으로 본 명세서에서 많은 예들의 동작이 설명되나, 이는 실제 배열일 수 없고, 데이터를 메모리 위치에 할당하는 것은 메모리 시스템의 구조, 배드(가령, 고장 또는 손실(missing)) 메모리 위치, 마모 평준화(wear-leveling) 고려 등에 의해 지배될 수 있다. 이와 같이 물리적 위치에 데이터의 할당은 PCMCIA 플래시 변환계층(Flash Translation Layer, FTL) 또는 Linux Journaling FLASH File System version 2(JFFS2), Aleph One Yet Another FLASH File System(YAFFS), 또는 Sun ZFS(Sun Microsystems)과 같은 인식 저장장치 파일 시스템과 같은 파일 시스템, 및 당업자에 알려진 기타 파일 시스템에 의해 수행될 수 있거나, 유사 또는 등가 기능을 수행하도록 개발될 수 있다.
본 명세서에 기술된 실시예들의 해석시 논리적 및 물리적 어드레스 간의 관계가 가정될 수 있다. 논의를 위해 한 또는 다른 것의 선택은 편의의 문제이며 특별히 언급하지 않는 한 국한되지 않는다. 이와 같이, RAID-구성 메모리의 데이터 스트라이프들은 메모리 시스템에서 실제 메모리 위치들 중 어느 하나로 맵핑될 수 있다. 따라서, 소거, 쓰기 및 읽기 동작 타이밍에 대한 제한들은 이런 스트라이프가 메모리 시스템에 위치되어 있을 때마다 한 스트라이프내 데이터에 대해 해석되어야 한다. 즉, 메모리 모듈, 메모리 위치, 데이터 블록 등의 용어들은 일반적으로 상호교환가능하게 유효하게 사용될 수 있다. 메모리 소자를 상호연결하는 구조 또는 방법은 본 명세서에 의해 제한되는 것으로 의도되어 있지 않다. 더욱이, 물리적 메모리는 예로서 복수의 모듈들, 싱글 모듈, 또는 싱글 기판으로 구현될 수 있다.
게다가, 해당기술분야에서 통상적으로 소프트웨어는 일형태 또는 다른 형태(가령, 프로그램, 절차, 프로세스, 애플리케이션, 모듈, 알고리즘 또는 로직)로 동작을 하거나 결과를 일으키는 것이라 한다. 이런 표현들은 당업자에게 잘 알려진 바와 같이 단지 컴퓨터 또는 등가의 디바이스에 의한 소프트웨어의 명령어 실행으로 컴퓨터 또는 등가의 디바이스의 프로세서가 동작을 수행하거나 결과를 발생하게 하는 것을 말하는 편리한 방법이다.
특별한 예를 설명할 경우, 상기 예는 특별한 특징, 구조, 또는 특성을 포함할 수 있으나, 모든 예는 특별한 특징, 구조, 또는 특성을 반드시 포함할 필요는 없다. 이는 그 조합이 명시적으로 배제될 때를 제외하고는 2 이상의 예들의 특징, 구조, 또는 특성이 조합되지 않아야 하거나 조합될 수 없는 제안 또는 뜻으로 해석되지 않아야 한다. 특별한 특징, 구조, 또는 특성이 예와 연계하여 기술될 경우, 명시적으로 기술되었든 아니든 간에, 당업자는 다른 예들과 연계해 이런 특징, 구조, 또는 특성을 실행할 수 있다.
메모리 어레이는 디스크 드라이브와는 다른 메모리 소자들로 구성될 수 있다. 예컨대, 메모리 어레이는 휘발성 또는 비휘발성 메모리 디바이스들일 수 있는 복수의 플래시 메모리 모듈들 또는 다른 반도체 메모리 디바이스들로 형성될 수 있다. 본 명세서에서, 메모리 시스템의 메모리 디바이스로서 플래시 메모리 회로를 이용한 예들이 제공되어 있으나, 상술한 바와 같거나 또는 하기에서 메모리 시스템의 설계 또는 구성에 있어 단독으로 또는 조합으로 동일하거나 유사한 기능을 위해 개발될 수 있는 그런 지속성 또는 비지속성 메모리의 임의의 형태의 사용을 배제하도록 의도하는 것은 아니다.
제 1 예로, 다른 RAID 구조 등이 배제되는 것을 암시하지 않는 RAID 4 구조가 사용된다. 실제로, RAID 수(3, 5, 6 등)는 스토리지 시스템을 기술하는 유용한 간단한 방법이나 이들은 이런 시스템에 대해 정확하지도 구별되는 설명도 아니다. 단지 2개의 스토리지 성분을 갖는 RAID 4 시스템은 또한 RAID 1 시스템이라 할 수 있다. 공통 접속크기가 풀 스트립인 RAID 4 시스템은 RAID 3 시스템이라 할 수 있다. RAID 3 시스템은 RAID 5 시스템의 회전 패리티를 이용하는 것으로부터 배제하지 않는다. 추가로 임의의 RAID 시스템은 RAID 번호와 일치하지 않는 패리티 또는 델타 로깅(delta logging)과 같은 추가적 속성들을 가질 수 있다. RAID 6와 같은 다른 것들은 패리티 중 한 비트 이상이 사용될 수 있음을 나타내나 가능한 많은 다수의 패리티 실행들이 의도된 것을 나타내지 않는다. 따라서, 본 명세서에서 RAID 수비학(numerology)의 이용은 순전히 예시적이며 설명된 기술들의 적용력에 제한을 나타내는 것으로 해석되지 않아야 함을 알아야 한다. RAID 구조의 선택은 코스트, 신뢰도, 읽기 또는 쓰기 지연, 전력소비, 데이터 복구속도 등과 같은 기준을 기초로 한 공학적 경제적 판단이다. 당업자는 사용자 요청 또는 하우스키핑 동작에 대한 응답에 따라 (데이터 소거를 포함한) 데이터 읽기 또는 데이터 쓰기의 동작들 중 하나 이상에서 RAID 시스템의 성능을 향상시키기 위해 이 예에 나타난 시스템 및 방법이 채택될 수 있음을 알 것이다.
플래시 메모리는 수명이 유한하다. 플래시 메모리의 고장은 잠재적이거나, 시간 경과에 의해 발현되고 대표적인 전자구성부품 및 마모 메카니즘이 고려되는 구성에 있어 결함과 관련된 종래 고장모드로 광범위하게 나누어질 수 있다. 일반적으로, 특정 기술에 따라, 읽기 또는 쓰기가 마모 메카니즘일 수 있으나, 마모 메카니즘은 플래시 메모리 모듈이 소거공작을 위해 접속되는 회수와 연관있다. 전자적 고장 메카니즘이나, 자동차가 운행된 마일 수로 인해 알려져 있듯이 이를 더 대표적인 기계적 고장 메카니즘으로 간주할 수 있다. 양 메카니즘들은 시스템 설계시에 고려될 필요가 있을 수 있고, 시스템 동작의 하드웨어 또는 소프트웨어 관리에 의해 특정 메모리 위치의 남용이 방지될 필요가 있을 수 있다.
플래시 메모리가 사용될 경우, 마모시 고장 메카니즘은 데이터 어레이에서 단일비트 오류일 수 있다. 이런 단일비트 오류는 특정 메모리 모듈에서 데이터 세트와 관련된 오류정정코드(ECC)에 의해 검출 및 보정될 수 있다. 그런 후 보정된 데이터는 메모리 컨트롤러로 전송되어 다른 스트라이프들로부터 읽어진 데이터와 결합되어 요청된 데이터 세트(A)를 이룬다. 저장된 데이터 서브세트(A1,A2,A3)로부터 검색된 데이터는 전혀 오류를 갖지 않거나 오류들은 ECC에 의해 보정되었기 때문에, 데이터 세트(Ap)로부터 데이터가 중복된다. 데이터 세트(A1,A2,A3) 중 하나가 가령 메모리 모듈 고장로 인해 검출되지만 정정할 수 없는 오류를 가질 때에만, 데이터 세트(Ap)는 데이터 세트(A)의 데이터를 보정할 필요가 있다. 이런 멀티비트 오류들은, 가령 메모리 모듈 자체가 고장날 경우 및 나머지 3개의 데이터 세트(데이터 세트(A1,A2,A3,Ap) 중 다른 3개)를 이용해 데이터 세트(A)의 데이터가 재구성될 필요가 있을 경우에 발생할 것이다. 설계를 위해, 이런 오류타입의 발생은 단일 메모리 모듈 또는 디스크의 간의 전자 평균고장시간(MTBF)에 의해 특징되는 것으로 간주될 수 있다. 일반적으로, 스트라이프(A1,A2,A3)에 있는 데이터만 이용되고 패리티 스트라이프(Ap)는 고장이 발생할 때 데이터의 재구성을 위해서만 검색되고 사용된다.
일태양으로, 플래시 메모리 시스템에서, 메모리 모듈에 저장된 데이터에서 단일비트 오류가 보고된 경우, 플래시 메모리 모듈은 신뢰될 수 없는 것으로 간주될 수 있고, 메모리 컨트롤러는 메모리 모듈과 같은 이런 시간이 대체될 때까지 사용불가한 것으로 메모리 모듈의 위치를 "마크" 또는 기록할 수 있다. 대안으로, 단일비트 또는 멀티비트 오류들의 정해진 개수는 메모리 모듈 또는 메모리 회로가 사용불가인 것으로 간주되기 전에 축적하게 허용될 수 있고 수리 동작이 행해질 수 있다.
일부 플래시 메모리 기술들의 특징들은 데이터의 작은 크기의 블록들의 쓰기 및 읽기를 약간 비실행적이게 할 수 있고, 쓰기 실행될 블록의 크기가 메모리 시스템이 쓰기 또는 소거할 수 있는 최소 블록크기보다 더 작을 수 있는 상황이 발생할 수 있다. 예컨대, 소프트웨어 시스템은 512 바이트의 블록 크기들로 파일들을 분할할 수 있다; 그러나, 메모리 시스템에 대한 최소 실제 소거크기는 128K 바이트이다.
4개의 512 바이트 데이터 요소들은 2K 바이트 페이지를 함께 구성하도록 간주될 수 있다. 디스크 구조에 대한 유추를 이용해 플래시 메모리를 참조하면, 회전 매체가 전혀 포함되지 않더라도 이런 연속 메모리 위치들의 그룹을 "섹터"라 할 수 있다. 일반적으로 임의의 타입의 데이터를 말할 때 "블록"이라는 용어는 바이트 또는 임의의 다른 단위로 특정 크기를 의미하도록 의도된 것이 아니라, 특정 설명과 관련될 수 있는 데이터 그룹을 말하는데 사용된다.
RAID 4 시스템이 사용될 경우, 512 바이트를 포함한 2K 데이터 페이지의 섹터는 4 메모리 모듈에 걸쳐 스트라이프될 수 있는 한편, 제 5 메모리 모듈은 패리티 데이터용으로 사용된다. 이 예에서, 512 바이트 섹터 크기, 페이지 및 패리티 데이터의 국면을 저장하기 위한 5 메모리 모듈의 사용, 및 각 메모리 모듈에 대한 128K 바이트의 최소 소거 크기가 가정되나, 이는 이들 파라미터들은 단지 예이며 시스템 또는 방법의 임의의 특별한 제한을 의미하는 것이 아님을 알아야 한다.
도 2는 복수의 메모리 모듈을 포함한 메모리 시스템을 도시한 것으로, 메모리 모듈은 버스를 통해 메모리 컨트롤러에 연결된다. 각 버스는 직렬버스 구성으로 연결된 복수의 메모리 모듈들을 가지며, 도 1의 디스크 어레이의 디스크의 구성에 상당하는 것으로 간주될 수 있는 구성을 갖는다. 메모리 모듈의 물리적 배열을 나타내는 것 외에, 이 배열은 다른 물리적 구성을 갖는 메모리 모듈들에 대해 논리 어드레스 공간으로 간주될 수 있다.
도 3은 데이터 어레이(A)에 해당하는 메모리 위치들의 구성을 도시한 것으로, 데이터 어레이 크기는 메모리 디바이스에 작성될 수 있는 섹터 크기의 배인 것으로 고려될 수 있다. 각각의 메모리 모듈은 512 바이트 크기의 복수의 메모리 섹터들로 구성되고 Amn 설계된 128K 바이트의 소거 블록크기를 가지며, m은 메모리 모듈이 위치된 메모리 버스이고 n은 각 메모리 모듈 쓰기 블록에 512 바이트 섹터들과 연결된 개개의 메모리 위치를 나타낸다. 이 예에서, 메모리 모듈의 각 128K바이트 소거블록에 있는 512 바이트의 256개 섹터들이 있다. 메모리 모듈은 다수의 소거 블록들을 구비할 수 있다.
따라서, 512 바이트 데이터 블록은 A11,A21,A31,A41 섹터들에 쓰여질 수 있고 패리티 섹터(Ap)는 데이터 어레이(A1,A2,A3, 및 A4)에 배타적 OR을 계산함으로써 업데이트될 수 있다. 섹터(A11,A21,A31,A41)에 데이터를 쓸 때, 예컨대, 메모리 모듈(0)의 섹터(A12-A1n)에 포함된 데이터도 또한 쓰여질 수 있다. 이는 어레이(A1)에서 데이터가 섹터(A11)에 변경된 또는 새 데이터를 기록하기 전에 소거될 필요가 있을 수 있다. 이 동작의 예는 데이터 어레이(A1)를 비지속성 메모리 디바이스에서 읽고, 메모리 모듈(0)에 있는 데이터 어레이(A1)과 관련된 메모리를 소거하며, 메모리 모듈(0)에 있는 데이터 어레이(A1)의 섹터(A11)에 있는 데이터를 변경하고, 그런 후 비지속성 메모리로부터 메모리 모듈(0)로 어레이(A1)의 데이터를 쓰는 것을 포함할 수 있다. 이는 플래시 메모리에 저장된 데이터를 변경하는 과정에서 수행될 수 있는 동작의 예를 나타낸다. 플래시 메모리 시스템의 하우스키핑 동작들은 본 명세서에 설명하지 않을 것이다. 이런 하우스키핑 동작은 메모리 위치("가비지 컬렉션"), 오류검출 및 보정 등을 재생하기 위해 배드 블록들에 대한 검사, 마모 평준화, 데이터 합병을 포함할 수 있다. 이런 동작은 오버헤드로서 간주될 수 있고 쓰기 또는 읽기를 위한 용량 또는 시스템 대역폭이 줄어들고 또한 지연시간을 늘린다. 본 명세서의 예에서 플래시 메모리의 동작은 매크로스코픽 레벨로 기술되어 있고, 사용자에 실질적으로 투명한 임의의 내부 동작은 다른 설명 없이 발생되는 것으로 추정된다. 그러나, 메모리의 읽기 또는 쓰기 동작의 제한이 주장될 경우, 하우스키핑 동작은 일반적으로 외부 읽기 또는 쓰기에 대한 제한에 따를 수 있으나, 필요하다면, 이들이 허용된 시간간격 동안 실행에 우선순위가 주어질 수 있다. 외부 명령을 달성할 필요가 있을 수 있는 "읽기" 또는 "쓰기"와 같은 내부 동작들은 이런 동작들이 읽기 및 쓰기 내부동작들의 결합일 수 있으나 읽기 및 쓰기에 할당된 주기동안 수행될 수 있다. 이는 임의의 시간에 수행된 하우스키핑 동작을 배제하는 것으로 해석되지 않아야 하며, 바람직하기로 하우스키핑 동작은 사용자의 요건을 달성하도록 중단될 수 있다. 일태양으로, 데이터를 읽는 것을 필요로 하는 하우스키핑 동작은 외부 읽기동작이 일시적으로 억제된 메모리 회로상에 수행될 수 있다.
현재 이용가능한 단일레벨셀(SLC) NAND 플래시 메모리 구성부품들을 이용한 일예로, 플래시 메모리와 내부 데이터 레지스터 간에 2K 바이트의 플래시 칩내로 데이터 이전은 읽기 동작을 위해 약 25㎲가 걸릴 수 있다. 내부 레지스터로부터 플래시를 제어하는 디바이스로 512 바이트의 전송은 메모리 모듈상의 컨트롤러에 의해 플래시 칩에 접속하는데 이용된 버스 상에 25MB/s의 속도로 약 20㎲가 걸릴 수 있고, 총 약 45㎲ 시간이 걸린다. 그러나, 새 데이터가 쓰여질 수 있도록 플래시의 128KB 소거 블록의 소거를 수행하는 시간은 약 1msec 에서 약 2msec까지 걸릴 수 있고, 이는 읽기 동작을 수행하는 시간의 약 20 내지 40배이다. 플래시의 프로그램(쓰기) 동작을 수행하는 것은 버스의 데이터의 512 바이트를 플래시 칩의 내부 레지스터로 전송하는데 약 20㎲ 및 플래시 메모리의 섹터로 데이터를 프로그램하는데 약 200㎲에서 약 700㎲가 걸릴 수 있으며, 이는 읽기 동작을 수행하는데 걸리는 시간의 약 5 내지 15배이다. 128K 블록을 소거하고 128K 블록을 프로그래밍하는데 약 13㎳에서 약 42㎳, 또는 읽기 동작을 수행하는 시간의 약 200에서 800배까지 걸릴 수 있다. 메모리 모듈이 소거 또는 프로그래밍(쓰기) 동작에 관여되는 시간 주기동안, 메모리 모듈은 다른 섹터들(A12 내지 A1n) 중 어느 하나를 읽는 것과 같이 다른 기능들을 수행할 수 없다. 읽도록 요망된 데이터가 소거 또는 프로그램되는 모듈의 동일한 디바이스에 있다. 그래서, 시간주기 동안, 동일한 메모리 어레이 블록(A1)에 또한 저장된 무관한 데이터일 수 있는 읽기 동작들은 쓰기(프로그램) 동작 또는 소거 동작이 읽기 요청이 수신될 때 진행 중에 있을 경우 배제(억제)될 수 있다. 많은 데이터베이스 시스템들에서, 지연이라고 할 수 있는 그러한 딜레이(delay)는 바람직하지 못하고 허용될 수 없다. 시간 딜레이는 디스크 스토리지 매체에 조우된 시간 딜레이에 비교될 수 있다.
SLC에 대한 예는 다양한 명령들의 실행을 위한 특정 시간 주기를 이용한다. 이들은 현재 일반적인 생산 디바이스들이고 개발 목적에 따라 앞으로 더 빠르거나 더 느리게 진화할 것으로 예상된다. 예컨대, 멀티레벨셀(MLC) 플래시 기술은 일반적으로 더 큰 공간 메모리 밀도를 제공하면서 명령을 실행하는데 더 긴 시간 주기를 갖는다.
데이터 섹터에 대한 읽기 동작시간 및 쓰기 동작시간 간의 비대칭이 데이터의 읽기보다는 데이터의 쓰기에 더 빨라지도록 의도된 상황에서, 4 메모리 모듈 및 패리티 모듈에 걸쳐 스트립된 2K 바이트의 블록을 쓰는 동작으로 10K에서 30K까지의 데이터가 쓰기동작 주기동안 읽혀질 수 있는 읽기 동작이 봉쇄될 수 있다. 마찬가지로, 소거 동작은 데이터의 약 80K에서 160K의 읽기 동작을 봉쇄할 수 있다.
이 상황은 데이터가 동시라기보다는 순차적으로 각각의 메모리 모듈(Al, A2, A3, A4 및 Ap)에서 512 바이트의 하나 이상의 섹터들에 쓰여지도록 메모리 컨트롤러 및 메모리 모듈의 동작에 의해 완화될 수 있다. 따라서, 어레이(A1)에 대한 쓰기 동작은 A2에 대한 쓰기 동작을 시작하기 전에 마쳐지게 허용되며, 유사하게, A2에 대한 쓰기 동작은 A3에 대한 쓰기 동작을 시작하기 전에 마쳐지게 허용된다. 이는 모듈(Ap)에 피리티의 계산 및 쓰기를 포함한 스트라이프(A)에서 모든 메모리 모듈이 마칠 때까지 계속된다. 데이터 어레이(Al, A2, A3, 및 Ap)를 포함한 모듈들 중 각각의 모듈이 쓰여지는 시간동안, 모듈과 관련된 특정 데이터 어레이는 읽어질 수 없다. 그러나, 이 예에서, 모듈(Al, A2, A3, A4 및 Ap)들 중 단 하나만이 임의의 한 시간에 쓰기 동작을 수행할 수 있다.
가령 모듈(Al1, A21, A31, A41 및 Ap)에 저장된 데이터의 512 바이트들에 대해 읽기 명령이 내려지면, 각각의 메모리 모듈들은 읽기 요청을 수신할 수 있다. 메모리 모듈들은 읽기 요청이 즉각적으로 처리되고 데이터가 메모리 컨트롤러로 복귀될 수 있는 상태에 있을 수 있다. 그러나, 쓰기(또는 소거) 명령이 메모리 모듈에 의해 처리될 때, 데이터는 메모리 모듈로부터 즉시 읽혀질 수 없고, 따라서 데이터 어레이(Al, A2, A3, A4 및 Ap)로부터 응답들 중 하나가 실질적으로 지연될 수 있다. 모듈(Ap)이 데이터 복구용으로만 사용될 경우의 상황에서, 모듈(Ap)은 메모리 고장이 없는 한 읽혀질 수 없다. 일반적인 메모리 관리 하드웨어 또는 소프트웨어는 모든 적절한 메모리 모듈(A1-A4)로부터 응답을 갖는 것이 예상되기 때문에, 외부 명령 또는 하우스키핑 동작 중 어느 하나로 인해 메모리 모듈들 중 하나 이상이 기록될 경우, 응답의 완료가 지연될 수 있다.
그러나, 데이터를 포함한 4개 메모리 모듈들과 패리티 데이터를 포함한 하나의 메모리 모듈이 있는 상황에서, 5개 모듈들 중 4개만 소정 데이터가 복구되도록 데이터를 반환할 필요가 있을 수 있다. 즉, 데이터 모듈들 중 하나가 고장날 수 있거나, 복구불가능 오류를 보고할 수 있거나, 쓰기 또는 소거 동작에 의해 차단될 수 있다. 예컨대, 데이터를 반환하지 않는 데이터 모듈이 A2이면, 나머지 데이터 모듈들은 Al, A3, A4 및 Ap일 수 있고, 이 경우 소정의 512 바이트가 검색될 수 있다. 모듈들(Al, A2, A3, 및 A4)중 하나로부터의 데이터를 상실한 경우, 패리티 데이터인 모듈(Ap)로부터 데이터가 손실 또는 지연응답 모듈의 데이터를 복구하는데 사용될 수 있다.
메모리 모듈(A1)에 저장된 데이터가 읽어지면, 예컨대, 데이터가 오류정정코드를 이용해 검증될 수 있으며, 상기 데이터(ECC1)가 데이터와 동일한 모듈에 저장될 수 있다. 읽기 데이터가 정정되면, 어떠한 동작도 취해질 필요가 없다. 오류가 검출되면, 오류가 정정될 수 있고, 검출되거 정정될 수 있는 오류의 개수는 사용된 특정 오류정정코드(ECC)의 특징이다. 메모리 컨트롤러로 복귀됨에 따라, 읽혀진 데이터는 정정되거나 ECC에 의해 정정되거나, ECC가 오류(들)를 검출할 수 있으나 오류를 정정할 수 없는 경우 오류가 있는 것으로 표시된다.
일반적으로, 플래시 메모리 시스템에서, 마모현상으로 인해 단일 오류가 발생하거나 메모리 모듈은 메모리 컨트롤러에 의해 검출될 수 있는 타입의 오류들이 다수있는 대규모 하드웨어 고장을 갖는다. 메모리 모듈은 작동되지 않을 수 있다.
단일 오류가 보고되나, 오류가 ECC에 의해 검출되지 않는 상황에서, 오류의 발생은 온칩 메모리 관리를 포함한 메모리 컨트롤러 또는 플래시 메모리 시스템을 관리하는데 사용된 다른 하드웨어 또는 소프트웨어에 보고될 수 있으며, 메모리 모듈 또는 특정 칩 또는 데이터 블록은 결함이 있는 것으로 표시되거나 다른 정정가능한 오류들에 대해 모니터될 수 있다. 메모리 관리 알고리즘은 메모리 모듈 또는 칩이 더 이상 데이터 스토리지용으로 사용될 수 없음을 판단할 수 있다. 메모리 모듈 또는 칩에 현재 저장된 데이터가 결함으로서 표시되지 않은 또 다른 메모리 위치로 옮겨지게 된다.
대안으로, 가령 대규모 하드웨어 고장로 인해 전체 메모리 모듈이 결함인 경우, 데이터 어레이(Al, A2, A3, 및 A4)로부터의 데이터가 없거나 오류가 있는 것으로 판단된다. Ap로부터의 데이터는 고장 모듈의 데이터를 재구성하는데 사용될 수 있고 재구성된 데이터는 결함이 표시되지 않은 모듈에 저장될 수 있다. 대안으로, Ap가 오류가 있으면, 데이터 어레이(Al, A2, A3, 및 A4)로부터의 데이터는 Ap를 재구성하는데 사용될 수 있다. 따라서, 대규모 하드웨어 고장이 발생할 때에도 데이터 무결성이 유지된다.
데이터가 정정된 것으로 알려지거나 ECC에 의해 오류가 정정된 경우, 소정 데이터는 5개 메모리(Al, A2, A3, A4 및 Ap) 중 임의의 4개 어레이를 포함한 모듈로부터 데이터가 반환되었을 때 메모리 컨트롤러에 이용가능해질 수 있다. 예컨대, 메모리 모듈(Al, A2, A3, 및 A4)로부터 데이터가 수신될 수 있다. 그런 후, Ap를 포함한 모듈로부터의 데이터는 소정 데이터에서 데이터의 정확도를 판단할 필요가 없거나 오류를 정정할 필요가 있기 때문에 중복된다. 데이터 어레이(Al, A2, A3, 및 A4)를 갖는 모듈들 중 어느 하나가 데이터를 반환하지 않거나, 부정확한 것으로 알려진 데이터를 반환하거나 또는 데이터가 지연된 상황에서, 모듈(Ap)로부터 데이터는 Ap에서 패리티 데이터와 나머지 3개 데이터 어레이를 이용해 손실 데이터를 재구성하는데 사용될 수 있다. "데이터를 반환하지 않는"이란 용어가 사용되면, 기준은 가령 특정 시간주기내에서 데이터가 반환되지 않는 것일 수 있으며, 이는 일반적인 읽기 동작이 된다. 데이터를 복원하는데 더 길어진 시간은 간섭 쓰기 또는 소거 동작 또는 하드웨어 고장로 인한 것일 수 있다. "데이터를 반환하지 않는" 모듈로부터의 데이터는 나중에 반환되도록 허용되거나 소거된 모듈에 대한 읽기 동작일 수 있다. 여하튼, 합당한 시간 프레임내에 데이터를 반환하 못하는 모듈에 의해 데이터 스트라이프로부터 데이터를 검색하는 시간이 이에 따라 연장되지 않을 수 있다.
따라서, 메모리 모듈의 배열에서, 메모리 모듈들 중 하나가 중복 데이터(가령, 패리티 데이터)에 사용되는 경우, 모든 메모리 모듈들이 요청된 데이터가 이용가능해지거나 데이터가 재구성되기 전에 유효한 데이터를 반환할 필요가 없다. 즉, 예컨대, 모듈(Al, A2, A3, 및 Ap)로부터 데이터가 읽어졌을 때 요청된 데이터가 이용가능해진다. A4로부터의 데이터가 필요없을 수 있다.
A4로부터의 데이터가 이용가능하지 않거나 적시적으로 이용가능하지 않을 수 있는 이유는 데이터가 A4의 일부 섹터에 쓰여지고 있기 때문이며, 이는 쓰여진 블록으로부터의 데이터 읽기를 지연시킬 수 있거나 블록이 소거되며, 타 블록에 대한 읽기 동작은 메모리 디바이스의 접속 특징으로 인해 저지된다. 5개 메모리 모듈들 중 4개로부터의 데이터가 읽기 시간의 특징인 읽기 요청의 수신 후에 한번에 이용가능해진다. 부정확한 오류의 경우를 제외하고 쓰기 동작이 진행중이지 않고 5번째 모듈로부터의 데이터가 무시될 수 있다면, 5번째 모듈로부터의 데이터가 적시에 이용가능해질 수 있다. 데이터가 실질적으로 지연되면, 지연된 데이터는 중복 데이터이고, 메모리 컨트롤러에서 데이터의 루틴 처리시 무시될 수 있다.
적어도 하나의 모듈이 다른 4개의 모듈들에 저장된 스트라이프에 대한 패리티 데이터를 갖는 5개 모듈 구성의 일태양에 있어, 데이터를 즉시 읽을 수 있는 것으로 알려진 4개 메모리 모듈들(위치들)에만 읽기 명령이 내려질 수 있다. 제 5 읽기 명령은 생략될 수 있다. 그러나, 제 5 모듈로부터의 데이터가 통상적인 상황하에 사용되도록 되어 있지 않더라도 제 5 읽기 명령이 내려지는 상황들이 있다. 이런 명령은 명백히 취소될 수 있거나 타임-아웃 간격이 초과될 때 메모리 시스템에 있는 임의의 레벨에서 취소될 수 있다. 이런 계류중인 읽기 명령은 이전에 수신된 데이터에 오류가 있는 것으로 판단하는 것과 재구성에 사용된 제 5 데이터 블록에 대한 요청이 작용될 수 있는 시간 사이의 간격 동안 데이터가 소거되는 것을 방지할 수 있다.
일태양으로, 읽기 명령은 순차적 쓰기 또는 소거 구속조건들 또는 몇몇 다른 구속조건들로 인해 데이터를 즉시 읽을 수 있는 것으로 알려진 메모리 모듈에만 내려질 수 있다. 다른 읽기 명령은 생략될 수 있다. 그러나, 다른 모듈로부터의 데이터가 내려진 또 다른 읽기 명령 대신 통상적인 상황하에서 사용되도록 되어 있지 않을 수 있다면 보존 명령이 내려질 수 있는 상황들이 있다. 이런 명령은 명백히 취소될 수 있거나 타임-아웃 간격이 초과될 때 메모리 시스템내 임의의 레벨에서 취소될 수 있다. 이러한 계류중인 명령은 이전에 수신된 데이터에 오류가 있는 것으로 판단하는 것과 재구성에 사용될 수 있는 또 다른 데이터에 대한 요청이 작용될 수 있는 시간 사이의 간격 동안 데이터가 소거되는 것을 방지할 수 있다. 보존 명령은 많은 방법들 중 어느 하나에 의해 데이터의 소거 또는 손실을 방지하도록 이용될 수 있다.
보존 명령의 대상인 어드레스에 연속적 쓰기를 명령하는 경우, 모듈은 새 데이터를 쓰기 전에 기존 데이터를 읽을 수 있다. 일태양으로, 모듈은 새 데이터를 새 위치에 쓰기 전에 구(舊) 데이터의 위치를 추적할 수 있으므로, 필요하다면 구 데이터를 읽을 능력을 보유한다. 보존 명령으로 보존 명령이 취소되거나 타임-아웃될 때까지 동일 어드레스에 연이은 쓰기 명령이 지연된다. 보존 명령에 의해 보호된 데이터를 검색하기 위해, 가장 최근에 쓰여진 어드레스 값에 반대되는 주어진 어드레스에 대한 구 보존 데이터를 검색하는데 특별한 읽기 명령이 사용될 수 있다. 단일 어드레스에 대한 다수의 두드러진 보존 명령들이 있을 수 있고 보존된 데이터 중 일부는 비휘발성 스토리지에 아직 보내지지 않은 휘발성 메모리에 저장될 수 있는 어드레스로의 연이은 일련의 읽기 및 쓰기가 가능하다.
그러므로, 예컨대, 5개 메모리 모듈 중 4개의 데이터 읽기는 읽어진 5개 메모리 모듈 중 4개에 쓰기 동작에 의해 손상되지 않기 때문에, 스트라이프에서 5개 메모리 모듈 중 임의의 4개로부터의 데이터가 낮은 지연시간으로 스트라이프에 저장된 데이터를 읽는데 사용될 수 있다.
읽기 및 쓰기 시간이 비대칭이고 쓰기 시간이 실질적으로 읽기 시간보다 더 긴 메모리 시스템에서 메모리를 관리하는 공정은 복수의 메모리 모듈에 데이터를 쓰는 것을 포함할 수 있고, 메모리 모듈은 논리적으로 스트라이프 패턴으로 구성된다. 각각의 메모리 모듈은 메모리 모듈에 있는 데이터에 대해 오류정정코드를 가질 수 있고, 추가 메모리 모듈은 복수의 모듈들에 있는 데이터에 대해 오류정정코드(가령, XOR 패리티)를 가질 수 있다. 쓰기 또는 소거 동작들은 가령 각각의 메모리 모듈들에 순차적으로 데이터를 읽거나 소거함으로써 수행될 수 있고, 각 연속적인 모듈에 쓰기 또는 소거동작은 이전 메모리 모듈에 쓰기 동작을 마칠 때까지 지연된다. 각각의 메모리 모듈에 쓰기 또는 소거 동작을 마치면, 데이터 무결성이 유지되도록 추가 모듈에 있는 중복 데이터가 업데이트된다. 따라서, 한 번에 단 하나의 메모리 모듈만이 쓰기 상태에 있을 수 있다. 대안으로, 중복 데이터는 데이터 포함한 모듈들의 쓰기 또는 소거가 마칠 때까지 비지속성 스토리지에 업데이트될 수 있고, 그런 후 데이터는 추가 모듈에 기록된다. 비지속성 스토리지는 모듈에 로컬적이거나 더 글로벌해질 수 있다.
쓰기 또는 소거 동작이 순차적으로 스트라이프에 있는 메모리 모듈들에 수행되면, 스트라이프에 있는 메모리 모듈들 중 단 하나만 읽기 요청에 응답해 즉시 데이터 일기로부터 봉쇄되고, 이 예에서, 5개 메모리 모듈 중 적어도 4개가 즉시 데이터를 메모리 컨트롤러로 반환한다. 이는 적절한 경우 패리티 데이터를 이용해 읽기 동작을 완료하는데 충분하다. 이와 같이, 스트라이프와 관련된 단 하나의 모듈만이 한번에 한 쓰기 또는 소거 상태에 있을 수 있기 때문에 타임라인 로딩 및 동작의 믹스에 따라 쓰기 또는 소거 동작의 전체 속도가 줄어들 수 있으나 읽기 동작은 쓰기 또는 소거 동작에 의해 지연되지 않는다. 실질적으로 데이터를 메모리 모듈에 쓰기 위한 시간의 비중첩 주기는 데이터 스트라이프에 대한 읽기 및 쓰기 동작 사이의 갈등을 최소화한다.
메모리 컨트롤러는 읽기 동작을 마치는 시간 주기를 대기할 수 있고, 그런 후 5개의 응답 중 적어도 4개를 이용해 데이터 또는 재구성 데이터인 요청된 데이터 섹터를 어셈블리한다. 데이터 블록들 중 5개 모두가 반환되면, 한 데이터 블록은 무시될 수 있거나, 중복 데이터는 설계시 요망되는 데이터 신뢰도 수준에 따라 추가 오류 검출단계로 사용될 수 있다.
메모리 모듈이라는 용어는 일반적인 의미로 사용되며, 물리적 메모리 모듈은 플래시 칩과 같이 복수의 메모리 디바이스들을 가질 수 있고, 이들 중 각 하나는 "메모리 모듈"의 특징을 가질 수 있다. 따라서, 이런 메모리 디바이스들이 더 높은 레벨의 메모리 모듈에 있더라도, 쓰기 동작을 수행하기 위한 메모리 디바이스의 순차적 동작이 실행된다.
본 명세서에서의 설명들은 주로 예로서 5개 메모리 모듈들을 이용하며, 상기 메모리 모듈들 중 4개는 데이터를 저장하고 제 5 메모리 모듈은 패리티를 저장한다. 하지만, 데이터 스토리지용으로 4개 메모리 모듈보다 많거나 적게 이용될 수 있고, 하나 이상의 메모로 모듈이 다른 메모리 모듈들과 연결된 패리티 데이터에 대한 스토리지로서 사용될 수 있다. 메모리 모듈이 데이터를 포함하든 아니든, 패리티 데이터 또는 이 둘의 조합이 구속조건인 것으로 의도되지 않는다.
데이터의 쓰기는 가령, 이전에 미사용된 메모리 시스템에서 데이터의 초기 모집단에서 우선순위일 수 있고, 데이터는 동시에 스트라이프에 있는 복수의 메모리 모듈들에 쓰여질 수 있고, 데이터의 읽기는 상술한 바와 같이 지연될 수 있으나, 이는 대형 어레이들을 초기화하거나 데이터의 블록들을 이동할 때 허용될 수 있다. 본 예에서, 데이터 쓰기 속도는 5개 메모리 모듈 각각이 순차적으로 쓰여짐에 따른 최대 쓰기 속도의 약 20 퍼센트인 반면, 읽기 속도는 5개 메모리 모듈들 중 4개가 연속 읽기에 응답할 필요가 있기 때문에 단일 모듈에 대해 대략 예상된 읽기 속도보다 더 길지 않다. 쓰기 봉쇄는 쓰기 부하가 증가함에 따라 관리될 수 있다.
또 다른 예에서, 메모리 어레이의 구성은 앞선 예에서처럼 행렬 매트릭스와 다를 수 있다. 상술한 데이터의 행렬 표시는 가령 논리 어드레스 및 물리 어드레스로 맵핑된 논리 어드레스로서 이해될 수 있다. 도 4의 메모리 구조에서, 메모리 모듈은 발명의 명칭이 "Interconnection System"인 2006년 4월 17일자로 출원된 미국특허출원 11/405,083에서 본 발명자에 의해 교시된 트리로 구성되며, 이는 본 명세서에 참조로 합체되어 있다. 본 예의 배열에서, 트리형 구조들은 상호연결될 수 있고 하나 이상의 메모리 컨트롤러들에 외부 연결을 가질 수 있다. 도 4a에 도시된 바와 같은 트리 시스템의 속성은 설령 메모리 모듈들 중 하나가 완전히 고장나거나, 물리적 링크들 중 어느 하나가 파열되었거나, 메모리 컨트롤러들 중 어느 하나가 고장난 경우, (정사각형 박스로 도시된) 메모리 모듈들 중 어느 하나가 메모리 컨트롤러들 중 적어도 하나에 의해 접속될 수 있다는 것이다. 이와 같이, 개개의 메모리 모듈들(M)이 시스템내 메모리 모듈의 물리적 위치에 대한 세부내용에 상관없이 데이터 어레이(A)에 할당될 수 있다. (이 예에서, 메모리 모듈 표시(M)는 간단히 하기 위해 관련된 데이터 어레이 표시(A)로 대체된다). 트리 구조는 매우 많은 메모리 모듈들을 포함하도록 형성될 수 있고, 각 모듈은 유사한 개수의 메모리 모듈들과 메모리 컨트롤러들을 갖는 선형 구조와 비교할 경우 신호가 이동되어야 할 수 있는 거리의 관점에서 상대적으로 루트 부근에 있을 수 있다.
예로서, 데어터 어레이(A)가 도 4a의 메모리 시스템의 물리적 모듈로의 할당의 일예로 도시되어 있고, 이는 매우 많은 가능한 할당들 중 하나임을 알게 된다. 데이터 어레이를 메모리 모듈로의 할당은 지연시간 또는 다른 성능측정에 상당한 영향을 주지않고 하나 이상의 메모리 모듈들의 고장을 고려해 변경될 수 있다. 중복 상호연결 구조를 갖는 트리 메모리 시스템의 속성은 메모리 시스템이 동작 중에 있으면서 개별 메모리 모듈들이 대체될 수 있다는 것이다. 이를 "핫 스와핑(hot swapping)"이라 할 수 있다.
도 4b는 데이터 어레이(A1, A2, A3, 및 Ap)를 도 4a의 메모리 구조내 다른 물리적 메모리 모듈로의 또 다른 가능한 할당을 도시한 것이다. 여기서, 모듈들은 메모리 모듈들과 메모리 컨트롤러들 중 하나 사이의 동일한 데이터 경로 또는 데이터 경로 중 일부를 이용해 서로 가깝게 선택된다. 메모리 컨트롤러 또는 메모리 모듈들 중 하나가 고장나면, (그 중 일부가 대시 선으로 도시된) 다른 경로들이 메모리 모듈을 원래 컨트롤러 또는 다른 컨트롤러에 연결하는데 사용될 수 있다. 이와 같이, 물리적 모듈과 함께 데이터 어레이(A)의 논리적 표현의 결합은 융통성이 있다. 메모리 시스템에서 위치에 대한 데이터 어레이(A) 중 어느 한 부분을 재지정하는 것은 논리 주소에서 물리 주소로의 맵핑(logical-to-physical mapping) 및 데이터 라우팅에 대한 변경이며, 메모리 시스템에서 메모리 모듈의 위치에 의해서가 아니라 주로 물리적 메모리 모듈의 유효성에 의해서만 제한된다.
메모리 모듈이 고장나 결국 교체될 필요가 있을 경우, 단일 고장시간 주기 동안 제 2 고장이 발생할 수 있는 가능성이 있다. 메모리 모듈의 고장 방식은 마모 방식과 종래 전자회로 방식으로 나누어질 수 있다. 전자회로 방식은 총 동작시간에 따르며, 마모 방식은 메모리 모듈의 사용에 따른다. 마모 고장은 내부 고장로서 정정가능한 단일 비트 고장와 함께 점진적이다. 이런 경우, 제 1 모듈이 교체되면서 제 2 모듈 고장 가능성은 고장 메모리를 교체하는데 필요한 시간 수만큼 나눈 메모리 시스템의 MTBF의 역 차수가 되게 평가될 수 있다. 마찬가지로, 원인이 전기인 경우, 마모 고장은 고장 메모리 모듈을 교체하는데 걸리는 짧은 시간 동안 고장을 야기할 것 같지 않으며, 제 2 고장 가능성도 마찬가지로 적다. 상술한 시스템이 RAID 4이기 때문에, 데이터 및 패리티 어레이를 포함한 5개 메모리 모듈 중 시간 중첩 고장의 2개 메모리 모듈은 RAID 스트라이프의 수리 또는 수정하기 전에 발생한다면, 데이터 손실이 발생한다.
플래시 메모리의 오류 방식으로 마모 현상이 발생되어, 오류 상태가 된다. 마모방식은 다양한 타입의 플래시 메모리들과 개개의 제조업체들에 사요된 제조 기술들 사이에서 다를 수 있다. 그러나, 플래시 메모리의 마모로 장비가 고장나고 시한적으로 시스템이 다운되며, 데이터 무결성이 상실될 수 있기 때문에, 플래시 메모리의 마모를 관리하기 위한 다양한 전략들이 개발되었다. 데이터의 각 블록의 쓰기 또는 소거 사이클 수가 종종 기록되고, 쓰기 사이클 회수가 늘어남에 따라, 데이터는 메모리 모듈의 수명을 늘리도록 고사용 영역에서 저사용 영역으로 옮겨질 수 있다. 마모로 인한 플래시 메모리 모듈의 특정 고장모드는 단일 비트가 오류상태에 있게 되는 것이다. 상기 비트는 제 2 비트가 또한 오류를 나타낼 때까지 반복된 읽기 동작시 오류로서 남아 있는 경향이 있다. 사용될 수 있는 오류정정코드(ECC)는 단일 오류를 검출하고 정정하는 능력 및 검출하나 정정할 수 없는 능력, 가령, 이중 오류를 갖기 때문에, 메모리 모듈은 2개 비트 오류가 발생할 때까지 계속 사용될 수 있다. 2개 비트 오류가 조우되면, 중복 패리티 데이터는 소정 데이터를 재구성하도록 요구된다. 따라서, 다른 시스템 관리 정책들이 사용될 수 있다.
제 1 정책으로, 메모리 모듈은 단일비트 오류와 마주칠 때 불사용으로 표시될 수 있다. 단일비트 오류는 메모리 모듈과 관련된 ECC에 의해 정정되기 때문에, 스트라이프와 관련된 중복 데이터(가령 패리티 데이터)가 사용될 필요가 없다. 이전 예의 5개 모듈들 중 단 4개만 소정 데이터를 나타내는데 충분할 수 있기 때문에, 읽기 동작은 쓰기 동작을 마치길 기다림으로써는 지연되지 않는다. 대안으로, 메모리 모듈은 제 2 비트 오류가 메모리 모듈의 데이터 어레이에 검출될 때까지 계속 사용될 수 있다. 이 상황에서, 중복(패리티) 데이터는 중복 데이터를 포함한 메모리 모듈과는 다른 메모리 모듈에 오류가 발생된 경우 데이터를 재구성하는데 사용될 수 있다.
여러 디스크들을 이용하는 디스크 시스템에 비해, 고체상태 메모리 시스템은 읽기 및 쓰기 또는 소거 동작 간에 또는 동일한 타입의 여러 동작들 간에 실질적으로 간섭을 덜하며 복수의 메모리 모듈들에 저장된 데이터 어레이에 접속할 수 있다.
도 5에 도시된 또 다른 예에서, 2차원 데이터 어레이의 관리가 도시되어 있다. 5개 메모리 모듈(A1-Ap) 중 단 하나만 임의의 시간에 쓰기 모드로 있게 허용되도록 RAID-4 시스템이 동작된 경우, 메모리 모듈 중 나머지 4개는 읽기 동작 동안 지연이 20 퍼센트 이하의 쓰기 부하로 손상되지 않도록 즉시 데이터를 반환한다. 이 상황은 쓰기 동작의 순서에 대한 이 구속조건을 갖지 않는 시스템과 대조되며, 읽기 및 쓰기 동작 간의 간섭이 매우 낮은 쓰기 부하로 시작된다.
그러나, 쓰기 부하가 시간 라인의 20 퍼센트보다 큰 것이 바람직한 상황들이 있을 수 있으나, 읽기 지연은 이 상황에 맞게 가능한 작아지는 것이 여전히 바람직하다. 이는 스트라이프 그룹들에 대한 쓰기 동작의 관리에 의해 수용될 수 있다.
이 및 다른 예들의 동작을 설명하는데 있어, 메모리 모듈 및 시스템의 로딩 및 응답시간은 동작 원리를 설명하기 위해 변한다. 편의상, 읽기 및 쓰기 요청 시간 분산은 시간상 균일한 것으로 가정되고, 평균속도로 읽기 또는 쓰기 부하와 일치한다. 또한, 심지어 짧은 시간주기에 걸쳐, 로딩은 설명을 간략히 하기 위해 정상상태 값으로 간주된다. 일반적으로 메모리 모듈의 지연 및 응답 시간이 버스 수송 시간과 관련된 지연에 비해 꽤 길기 때문에 버스 대역폭 등의 한계들도 또한 무시된다. 더욱이, 메모리 시스템에서 다양한 데이터 영역들은 다른 요인들 중에서 저장된 데이터 타입, 데이터에 접속하는 응용 프로그램, 가상화 등으로 인해 다른 읽기 및 쓰기 부하를 겪을 수 있기 때문에, 로딩은 메모리 시스템에 있는 다른 스트라이프들에서 변할 수 있고, 상술한 상황들은 글로벌 로딩값이라기보다는 로컬 로딩값을 나타내는 것으로 여겨질 수 있다. 이와 같이, 메모리 관리 적용은 글로벌 베이스라기보다는 로컬 베이스에 대한 것일 수 있다. 필요한 경우, 동작조정은 글로벌 또는 로컬 타이밍 알고리즘, 토큰의 패싱(passing), 폴링(polling), 시그널링 등 또는 컴퓨터나 메모리 시스템내 일시적 동작을 조정하는 다른 방법들에 의해 달성될 수 있다.
도 5의 데이터는 스트라이프들로 구성된 것으로 도시되어 있고, 0번째 스트라이프(410)는 열(A,B,C,D 및 P)에 각가 배열된 메모리 모듈(310)(또는 예컨대 칩)(A0,B0,C0,D0 및 P0)을 구비한다. 시스템의 나머지 스트라이프들(2-9)은 50 모듈의 메모리 시스템을 형성하기 위해 유사하다.
설명을 위해, 각 메모리 모듈에 대한 타이밍 회로는 다른 메모리 회로에 동시에 초기화되는 것으로 간주될 수 있고, 예컨대, 1msec의 간격으로 시간을 표시하며, 이는 적어도 하나의 쓰기 또는 소거 동작을 마치는데 충분한 시간에 해당할 수 있다. 이런 쓰기 또는 소거 동작은 연이은 시간 간격들에서 한번에 한 컬럼 수행된다. 도 6a는 연속 시간간격(t1,t2,…,t10)에서 쓰기 동작을 위해 인에이블될 수 있는 메모리 모듈의 컬럼(514)을 도시한 것이며, 이는 모듈로(modulo) 10을 반복한다. 스트라이프 0의 시간 히스토리가 도시되어 있는 도 6b에 도시된 바와 같이, 단일 메모리 모듈은 임의의 시간 주기에서 쓰기 동작을 위해 인에이블되는 것이 보여질 수 있다. 이는 스트라이프에 있는 5개 메모리 모듈 중 4개가 임의의 시간에서 읽기 동작을 위해 가용해지는 기준을 만족한다. 이는 쓰기 부하의 영향이 전혀 없이 읽기 지연에만 따를 수 있는 지연이 된다.
쓰기 부하가 20 퍼센트를 초과하면, 이 전략은 쓰여지도록 요망되는 데이터량 또는 소거 요건을 따라갈 수 없다. 추가 쓰기 주기들이 할당될 필요가 있을 수 있다. 필요에 따라 이들이 할당되는 정도까지, 스트라이프의 하나 이상의 메모리 모듈이 읽기 요청시 쓰기 상태에 있을 수 있다. 이와 같이, 5개 메모리 모듈들 중 4개는 읽기 요청에 즉시 응답할 수 없고, 읽기 지연은 매우 작은 값에서 쓰기 또는 소거 상태 기간에 해당하는 적어도 약 1msec까지 늘어난다.
균일한 요청 도착속도와 함께 지연을 논의할 경우, 실제 평균 지연은 쓰기 상태로 인한 봉쇄 기간의 절반이다(간략히 하기 위해, 일반적으로 "쓰기 상태"라는 용어와 "소거 상태"라는 용어는 읽기 동작이 봉쇄되는 시간 주기를 나타내는 것으로 이해해야 하며 두 용어들은 논의를 간략히 하기 위해 조합해 반복적으로 사용되지 않는다). 일반적으로, 쓰기 상태의 기간이 이용되고, 이는 최대 지연에 해당하게 된다.
쓰기 부하가 증가함에 따라, 임의의 시간에서 쓰기 상태에 있는 스트라이프의 메모리 모듈들의 개수가 증가할 수 있으며, 지연은 스트라이프의 쓰기 상태와 관련된 지연의 합까지 대략 약 4msec로 상승할 수 있다.
그러나, 스트라이프(410)에서 메모리 모듈 모두가 동시에 쓰기 상태에 있도록 야기된 경우 큰 쓰기 부하하에서 쓰기 상태의 최대 값은 1msec로 제한될 수 있다. 예컨대, 이 예에서 쓰기 부하가 20%를 초과하나 28% 미만이면, 각 스트라이프는 또한 매 10회 간격마다 쓰기 동작을 위해 인에이블될 수 있다. 이와 같이, 컬럼이외에(가량 도 5에서 p), 스트라이프(410)(스트라이프 0)는 제 1 시간 간격의 기간동안 인에이블될 수 있다. 이 전략에서, 모든 스트라이프들은 동시에 쓰여지므로, 총 쓰기 시간 봉쇄는 1msec로 제한된다. 쓰기 부하가 증가함에 따라, 추가 시간간격이 스트라이프 쓰기에 대해 할당될 수 있다. 특히, 상기 전략은 시간적으로 가능한 한 멀리 스트라이프 쓰기에 사이를 둘 수 있다. 즉, 다음 증분(increment)은 모듈로 10 반복의 제 1 및 제 5 시간 간격 모두를 이용할 수 있다.
스트라이프에서 메모리 모듈에 대한 쓰기 부하는 적어도 페이지들이 쓰여진다면 한 메모리 모듈에 대한 쓰기로 스트라이프내 모든 메모리 모듈들에 쓰여질 수 있기 때문에 임의의 순간 동안 대략 동일할 것으로 예상될 수 있다. 그럼에도 불구하고, 쓰기 부하에 차이가 있게 되는데, 이는 한 페이지 미만의 쓰기 또는 (배드 블록들 등으로 인한) 특정 메모리 칩에 따른 하우스키핑 활동에 기인한 것일 수 있다.
도 7에 도시된 바와 같이 메모리 모듈(310)은 가령 플래시 메모리일 수 있는 지속성 메모리(320), 가령 DRAM일 수 있는 버퍼 메모리(330), 및 미국특허출원 No. 11/405,083에 기술된 바와 같은 구성가능한 스위칭 소자(CSE)일 수 있는 컨트롤러/버스 인터페이스(340) 또는 다른 버스 인터페이스를 포함할 수 있다. 메모리 모듈은 입렬 및 출력 데이터와 명령을 버퍼링할 수 있어, 메모리 모듈이 계류중인 동작의 큐를 유지할 수 있다.
낮은 지연 읽기 동작과 충돌되는 동작들은 쓰기 동작을 위해 지정된 시간 간격들에 제한될 수 있다. 메모리 모듈 타이밍 슬롯이 쓰기 동작을 허용할 경우, 슬롯 시간 기간에 수행될 수 있는 많은 쓰기 또는 소거 동작들이 컨트롤러(340) 또는 그 밖에 유지된 큐로부터 디큐(de-queue)되어 수행될 수 있다. 그러나, 전혀 계류중인 쓰기 또는 소거 동작들이 없다면, 계류중인 읽기 동작은 컨트롤러(340) 또는 가령 모듈에 있는 큐로부터 디큐되어 수행될 수 있다.
대안으로, 쓰기 또는 소거 동작이 남아 있을 수 있다. 프로그램된 동작 정책에 따라 추가 쓰기 동작이 남아 있을 때 이는 쓰기 부하가 20%를 초과하고 추가 쓰기 주기가 할당될 필요가 있는 표시로서 해석된다. 메인 메모리 컨트롤러는 스트라이프에 쓰기 동작을 막도록 통지될 수 있거나, 큐가 공칭레벨로 감소될 때까지 추가 타임 슬롯들이 쓰기 동작에 할당될 수 있어, 계류중인 동작 수가 0이거나 적어질 수 있다. 글로벌 할당 기반으로, 쓰기 동작들은 높은 쓰기 부하를 현재 갖지 않는 메모리 모듈로 지향될 수 있다. 쓰기 프로세스로 타임 슬롯을 할당할 경우, 타임 슬롯들은 기술된 예에 대하 패턴의 모듈로-10 반복 동안 이격된다. 쓰기 부하가 늘고 더 많은 쓰기 슬롯들이 요구됨에 따라, 이들은 함께 더 가까이 떨어져 있게 되나, 슬롯은 가능한 한 연이은 쓰기들 사이에 있게 된다. 이런 식으로, 읽기 요청에 대한 임의의 쓰기 봉쇄의 총 길이는 쓰기 부하가 늘어남에 따라 최소화되고 50% 쓰기 부하 미만에 대해, 최대 봉쇄는 단 하나의 쓰기 주기가 될 수 있다. 읽기에 이용가능한 타임 라인도 이에 따라 감소된다; 그러나, 동일한 스트라이프에 대한 높은 읽기 부하와 높은 쓰기 부하는 자연히 일시적이고 전체 시스템 응답시간에 작은 영향을 미칠 수 있다.
로컬 큐에 따라 추가 쓰기시간 블록을 할당하는 정책은 시스템의 다이나믹 동작에 의해 부과된 읽기 및 쓰기에 대해 각 스트립의 동작의 적응을 허용한다.
또 다른 태양으로, 스트라이프에서 개개의 모듈들이 가령 토큰 패싱 구성을 이용해 서로 소통할 때, 토큰은 쓰기 간격을 수행하기 위한 허락을 나타낼 수 있다. 토큰은 순차적으로 스트라이프(가령, 스트라이프 1)의 메모리 모듈(A-P)들 사이에 통과될 수 있다. 토큰이 A1에 의해 보유되면, 이 예에서 한 쓰기 간격이 1msec인 쓰기 간격이 허용된다. 큐에 쓰기 동작이 있는 경우, 상기 간격내에 마쳐질 수 있는 이들 쓰기 동작들이 실행된다. 그런 후, 토큰은 처리가 반복되는 B1으로 보내진다; 토큰이 연속적으로 보내지고, PI가 A1으로 통과된 토큰을 가지면, 라운드 로빈(round robin)이 수행된다.
쓰기 간격의 완료 후에 쓰기 동작이 보류 중에 있는 경우, 이는 현재 쓰기 부하가 읽기 지연이 쓰기에 투명한 20% 값을 초과한 표시이다. 쓰기 부하를 제한하는 다른 수단들이 없다면, 보류된 쓰기들은 버퍼 메모리(330)의 오버플로우를 방지하기 위해 가까운 장래에 실행되어야 할 수 있다. 이런 상황에서, 또 다른 쓰기 동작은 토큰이 통과된 후에 수행되며, 이는 쓰기 간격들 간에 적어도 한 시간간격을 허용할 수 있다. 따라서, 임의의 라운드 로빈 동안 사용된 쓰기 간격의 개수는 쓰기 부하에 따라 변할 수 있으나, 연속 쓰기 간격의 수는 쓰기 부하가 매우 높아질 때까지 유일할 수 있다.
메모리 모듈들이 소거 또는 프로그램(쓰기) 동작을 수행할 수 있는 시간 주기의 할당은 임의의 방식들, 가령, 모듈들이 글로벌 컨트롤러로부터 컨트롤 메시지의 전송에 의해, 모듈 대 모듈로의 토큰 패싱에 의해, 모듈들 간에 공통버스 또는 와이어 등에 의한 시간주기의 로컬 결정에 따라 동작하도록 글로벌 기준시간에 대한 시간주기 할당으로 행해질 수 있다. 접근 조합들이 사용될 수 있다; 가령, 소정의 프로그래밍 데이터 속도가 한번에 RAID 그룹 수행 프로그래밍의 단일 컬럼을 가짐으로써 만족될 수 있는 것보다 더 크고 여러 RAID 그룹들이 있을 때, 일부 또는 여러 RAID 그룹들 중 한 모듈은 RAID 그룹들 중 몇몇에 대해 동시에 하나 이상 또는 모든 모듈들이 도 5에 도시된 바와 같이 프로그래밍하거나 소거되는 동시에 프로그래밍 또는 소거될 수 있다. 이런 시스템에서, 가령, 소거 또는 프로그램을 수행할 수 있는 컬럼은 시간 주기의 고정된 할당에 의해 결정될 수 있는 한편, 전체 행 또는 RAID 그룹은 소거 또는 프로그램 동작을 수행할 수 있을 때의 결정은 다음 RAID 그룹이 토큰 패싱의 형태를 시작할 수 있음을 나타내는 다음 RAID 그룹으로 명령을 전송하는 RAID 그룹내 모듈들 중 하나에 의해 결정될 수 있고, 모듈은 RAID 그룹내 모든 모듈들이 제 2 토큰패싱 방식, 행해질 때까지 모든 모듈들이 보유되는 '풀다운(pull down)' 와이어, 행해진 것을 나타내기 위한 다른 모듈들이 사용되는 공통버스, 또는 유사한 방법 또는 구성의 이용에 의해 그들의 프로그램 또는 소거 동작을 마친 것으로 판단할 수 있다.
모든 시간주기들이 겹치지 않을 경우, 소기 또는 프로그램 동작의 지연효과가 완전히 가려질 수 있다; 시간 주기들이 다만 실질적으로 겹치지 않을 경우, 소기 또는 프로그램 동작의 지연은 중첩 시간 주기까기 관찰될 수 있다. 시간 중첩량이 100% 미만인 한, 상기 기기 및 방법으로 여전히 완전히 겹친 소거 및 프로그램 동작에 비해 접속시간 지연이 줄어들 수 있다.
도 5에 도시된 바와 같이, 몇몇 RAID 그룹은 하나 이상의 모듈들에 또는 그룹내 모든 모듈들에 걸쳐 프로그램 또는 소거 동작을 수행하는 경우, 비중첩 시간은 RAID 그룹내 한 모듈로부터 다음 모듈로라기보다는 다음 RAID 그룹에 대한 한 RAID 그룹의 비중첩 시간이다.
본 명세서에서 지연 향상은 단일 읽기 접속의 향상이 아니라, 가령, 모든 RAID 그룹에 행해지는 읽기 접속이 있다면, 하나 이상의 모듈이 프로그램되거나 소거되는 RAID 그룹에 대한 이들 접속들만 지연이 증가되는 반면, 한 모듈만을 프로그램하거나 소거하는 이들 RAID 그룹에 대한 접속은 그와 같은 증가를 겪지 않게 된다. 그 결과, 모든 읽기접속에 대한 평균 지연이 향상될 수 있다.
착탈가능하거나 고정될 수 있는 다른 구성의 플래시 메모리에 대한 접근이 적용될 수 있다. 본 명세서에 상술한 접근은 모듈이 충분한 개수의 플래시 디바이스들을 갖는다면 모듈 자체내에 행해질 수 있다. 따라서, 상기 접근은 메모리 구조내 여러 수준들에 가령, SATA, SCSI, 파이버 채널, 또는 다른 형태의 요인들과 같은 디스크 접속 프로토콜 또는 공지되거나 개발될 수 있는 접속 프로토콜에 의해 상호연결된 현재 사용되는 표준 하드 드라이브의 폼팩터로 고체상태 디스크(SSD)에 무관하게 사용될 수 있다. RAID 그룹 및 모듈들 간의 일치로 RAID 그룹의 모듈 및 "컬럼"의 일대일 대응이 될 수 없게 된다. 예컨대, RAID 그룹의 "컬럼"이 하나 이상의 모듈에 걸쳐 퍼질 수 있거나, RAID 재구성으로 인해, 모듈상의 데이터가 교체 모듈로 이동되는 과정에 있을 수 있고 어떤 시간주기 동안, 하나 이상의 모듈은 RAID 그룹의 "컬럼"을 포함할 수 있다.
또 다른 태양으로, RAID-6 구성은 또 다른 패리티 계산이 데이터 어레이의 컬럼에 행해지는 RAID-4/5에 중첩될 수 있다. 대안으로, 추가 패리티 계산이 물리적 구성으로 여겨지는 데이터 어레이의 컬럼에 이루어진다. 즉, 메모리 모듈을 스트라이프에 할당하는 것에 상관없이, 모듈들의 선형 어레이의 컬럼에 있는 데이터는 패리티 데이터를 계산하기 위해 XOR될 수 있다. 이는 또한 도 4a 또는 도 4b에 도시된 바와 같은 이진수 트리의 경우에 행해질 수 있다. 예컨대, 제 1 패리티 데이터를 만들기 위해 트리에 있는 2개 메모리 모듈로부터의 데이터가 XOR될 수 있다. 마찬가지로 이 패리티 블록은 새로운 패리티 블록을 만들기 위해 수신 모듈에 있는 데이터와 XOR될 수 있다. 이는 이진수 트리이기 때문에, 2개의 새 패리티 블록들이 각각의 노드로부터 XOR의 처리가 다시 수행될 수 있는 트리내 다음 높은 물리적 노드로 그리하여 트리의 루트까지 전송될 수 있거나 몇몇 다른 상위 레벨 노드에 도달된다. 이 패리티 데이터는 마찬가지로 RAID-6 시스템의 컬럼 패리티와 유사하게 이용될 수 있어 하나 이상의 모듈이 고장난 경우 추가 패리티 데이터를 제공한다. XOR 패리티 데이터의 전파는 트리의 임의의 레벨에서 데이터 블록 자체에 대해 요구되는 데이터량에 제한되고 상당한 버스 부하없이 실질적으로 균일하게 메모리 모듈에 걸쳐 분포된 XOR 패리티의 계산과 관련된 계산으로 수행될 수 있다.
메모리 모듈이라는 용어가 사용된 경우, 메모리 모듈은 예컨대 복수의 메모리 회로들을 갖는 플러그식 회로카드일 수 있거나, 메모리 모듈이 회로 카드상의 메모리 회로들 또는 고체상태 디스크(SSD)로 알려진 것 중 각 하나 또는 한 그룹일 수 있다; SSD는 개개의 카드들로부터 대신하도록 될 수 있는 현재 표준화 기계 디스크 드라이브의 크기 및 형태에 맞을 수 있는 패키지들로 많은 폼팩터들로 된다. 메모리 모듈 또는 스토리지 위치와 관련될 수 있는 논리 어드레스 범위의 스케일 크기는 본 명세서에서의 설명에 국한되도록 되어 있지 않으며 따라서 메모리 모듈은 더 크거나 더 작은 스토리지 디바이스 또는 데이터 구조 모두를 포함할 수 있다.
예로서, 도 8은 각 모듈이 하나 이상의 RAID 그룹에 속할 뿐만 아니라 RAID 그룹들은 모듈들에 걸쳐 여러가지 방식으로 스트립되는 모듈 그룹을 도시한 것이다. 예컨대, RAID 그룹(A,B,C,D)은 수평으로 스트립되며, 각 스트립은 X 어드레스를 포함며, 스트립 A는 어드레스 0에서 X-1, B는 X에서 2X-1 등을 갖는 반면, E, F, G, H, I는 대각선으로 스트립되고, 각 그룹은 또한 X 어드레스를 포함한다. 도 9는 그룹내 어드레스 개수가 연속이거나 다른 그룹과 동일할 필요가 없음을 나타낸다. 이 예에서, 그룹 I에서 마지막 어드레스 다음, 어드레싱은 0에서 X-1 및 9X에서 10X-1 어드레스를 갖는 그룹(A)로 시작하도록 걸친다.
도 8 및 도 9는 균일하고 규칙적인 레이아웃을 도시한 한편, RAID 스트라이프들은 규칙적이거나 균일할 필요가 전혀 없으며, 예로서, ZFS 파일 시스템은 모든 데이터 피스가 본 명세서에 기술된 스토리지 시스템에 있는 임의의 모듈 세트에 배치될 수 있는 자신의 RAID 스트라이프에 작성되게 한다.
일태양으로, RAID 스트라이프의 데이터는 복수의 데이터 그룹들로 분할될 수 있다. 패리티 패턴은 복수의 데이터 그룹들의 배타적 OR(XOR)로 계산된다. 데이터 및 패리티 그룹들은 RAID 스트라이프로 작성된다. 패리티 데이터는 RAID 스트라이프의 메모리 모듈들 사이에 분포될 수 있거나 상기 데이터와 별개의 RAID 스트라이프의 메모리 모듈에 작성될 수 있다. RAID 스트라이프가 읽어지고 RAID 스트라이프가 M 메모리 모듈을 가지면, 메모리 컨트롤러에 의해 수신되는 첫번째 M-1 메모리 모듈로부터의 데이터가 읽어진 RAID 스트라이프에 저장된 데이터를 판단하는데 사용될 수 있다. 쓰기 또는 소거 동작이 한번에 모듈들 중 단 하나에만 수행될 수 있도록 RAID 스트라이프의 메모리 모듈들이 관리되면, 저장된 데이터를 복구하는데 충분한 읽기 동작이 임의의 쓰기 또는 소거 동작의 완료를 기다리지 않고도 수행될 수 있다.
또 다른 태양으로, 메모리 시스템에서 스트라이프의 배열은 지연, 읽기 또는 쓰기 속도, 고장 허용오차 등과 같은 시스템의 성능의 하나 이상의 태양을 최적화하는 정책에 따라 선택될 수 있다. 다음 예들은 복수의 다른 스트라이프 특성들을 만들기 위해 물리적 메모리 모듈에 대한 논리 어드레스 범위의 할당 면에서 기술되어 있다. 메모리 모듈에서 물리적 어드레스에 논리 어드레스의 할당은 가비지 컬렉션, 오류정정 등과 같은 시스템 성능의 다른 특징들을 강조한 정책에 의해 수행될 수 있다. 그러나, 이들 정책 확립시, 메모리 회로의 구성은 유사한 목적을 달성하기 위해 시스템의 상위 메모리 모듈의 구성을 흉내낼 수 있다. 다시, 논리 대 물리적 어드레싱 변환이 발생하는 계층의 레벨은 이 논의에 국한되지 않는다.
논리 어드레스 어레이에서 스트라이프의 출현으로 논리 어드레스 범위에 스트라이프의 할당은 도 10에 도시된 바와 같이 행렬 접근으로 지시될 수 있다. 이런 배열은 설명을 할 목적으로 편리할 수 있으나 국한하려는 의도는 아니다. 다양한 할당 알고리즘들이 사용될 수 있다. 위치를 기술하는데 사용된 변환은 (행,열)이다. 몇몇 예에서, 행 또는 열은 상술한 쓰기/소거 주기 및 (적어도 쓰기 대역폭의 몇몇 레벨까지) 쓰기 또는 소거 동작과 관련된 지연 없이 데이터를 복구하기 위해 스트라이프에 대한 패리티와 결부하여 스트라이프로부터 모든 데이터 미만의 사용과 관련될 수 있다. 어드레스 범위의 행렬 포맷으로의 배열은 많은 가능한 배열들 중 단 하나이며 행렬 표현은 복수의 예들을 설명할 때 가장 쉽게 이해되는 것으로 예에서 이용을 위해 선택된 것임을 알아야 한다.
"소거 숨기기"라는 용어는 상술한 개념들을 일반적으로 설명하는데 사용될 수 있으며, 메모리에 쓰거나 메모리를 소거하는 효과가 메모리로부터 데이터를 읽는 과정에 영향을 끼치게 나타나지 않도록 스트라이프에 있는 모든 데이터보다 더 적게 스트라이프의 데이터를 복구하는데 사용될 수 있다. "소거 숨기기"는 소정 시스템 부하 하에서 완전히 효과적이거나 시스템 부하가 계속 증가할 때 부분적으로 효과적일 수 있다.
가상 시스템에서 동작하는 프로그램과 같은 특별한 적용을 위해 메모리에서 데이터의 위치는 예컨대 지연의 최소화, 전달 대역폭, 데이터 복구 속도, 데이터 손실 확률 등을 강조하도록 선택될 수 있다. 이런 시스템에서 데이터의 스토리지를 이해하기 위해, 논리 어레이 공간 및 물리적 메모리 공간의 개념이 설명을 간단히 하기 위해 이용된다. 논리 어레이 공간을 물리적 메모리로의 맵핑은 소거 숨기기에 의해 부과된 요건에 의해 몇몇 경우 제한될 수 있다. 데이터는 데이터 스트라이프을 이용해 논리 어드레스 공간에 퍼뜨려질 수 있다. 데이터 스트라이프는 관련된 패리티 데이터를 가질 수 있다. 단일 패리티, 듀얼 패리티 또는 몇몇 다른 오류정정 기술이 스트라이프의 데이터에 적용될 수 있고, 행렬 패리티가 사용될 때와 같이 스트라이프에 저장되거나 그 밖의 다른 곳에 저장될 수 있다.
어드레스 공간의 어레이에서, 도 10은 가령 어레이의 3행에서 스트라이프 "0"을 나타낸다. 스트라이프는 5개 길이를 가지며, 어드레스 범위들 모두는 데이터와 관련될 수 있다. 대안으로, 어드레스 범위들 중 하나 이상이 나머지 데이터에 대해 계산된 패리티와 관련될 수 있다. 제한으로, 어드레스 범위는 사용되는 특정 스토리지 매체에 기록될 수 있는 가장 작은 어드레스 범위일 수 있다. 이는 페이지, 섹터 등일 수 있다. 한 페이지 이상이 스트라이프 "0"의 각 스토리지 영역과 관련될 수 있다. 이 예에서, 길이 L=5의 스트라이프 "0"의 논리 어드레스 범위는 0.1 내지 0.5로 지정된다.
스트라이프들은 논리 어레이의 컬럼 중 일부 또는 모두를 가로지르도록 배열될 수 있다. 스트라이프의 어드레스 범위는 도 11에 도시된 바와 같이 각 컬럼에 대한 논리 어레이의 다른 행들을 차지할 수 있다. 여기서, 길이 5의 제 2 스트라이프 "1"이 도시되어 있고, 매 컬럼 증분에 대한 1씩 행 번호가 줄어든다. 도 12에서, 또 다른 스트라이프, 가령 스트라이프 "2"는 스트라이프 "1"과 유사할 수 있으나, 행 수가 열 증분마다 1씩 증가하도록 배열될 수 있다.
행 수의 증가 값은 1보다 클 수 있으며, 이는 도 13에 도시된 바와 같이 행 수가 모든 열 증분에 대해 2씩 증가한다. 이 도면에서 어레이의 크기는 간단하게 스트라이프를 나타내도록 5×5에서 5×9까지 확장되었다. 도 14는 2개의 행 감소를 갖는 것을 도시하고 있다. 스트라이프는 또한 수직으로 배열될 수 있어, 도 15에서 스트라이프 "5"에 대해 도시된 바와 같이 열을 차지한다. 컬럼에 해당하는 스트라이프 "5"는 소거 숨기기가 이용되는 메모리 적용에서 사용하는데 부적합할 수 있고, 소거 숨기기는 공통 시간주기 동안 컬럼에 해당하는 물리적 메모리 모듈들에 대해 소거가 수행되도록 구성된다. 이런 상황으로 물리적 메모리 응답이 사용자 데이터 요청과 충돌하는 소거 주기에 의해 손상될 때 스트라이프를 재구성하기에는 데이터가 불충분해질 수 있다. 그러나, 소거 주기가 행 기반상에 구성된다면, 스트라이프 "0"은 소거 숨기기 봉쇄와 조우될 수 있는 한편, 스트라이프 "5"는 소거 숨기기를 방지할 수 있다. 표현을 간단히 하기 위해, 일반적으로 열은 공통 소거 주기동안 소거되는 것으로 여겨진다. 그러나, 행들도 마찬가지로 취급될 수 있고 이들 동작들과 관련된 물리적 메모리 모듈의 위치들은 메모리 어레이의 물리적 속성들에 따르는 할당 테이블에 의해 제어될 수 있고, 행렬 구성으로 나타나지 않을 수 있음이 당업자에 명백하다. 이는 예컨대 도 4에서 명백할 수 있다. 개개의 모듈들은 소거시간 그룹으로 구성될 수 있고 각 소거시간 그룹은 논리 행에 대응할 수 있다.
대안으로, 물리적 모듈들은 별개의 어드레스가능한 "짝수" 및 "홀수" 메모리 위치들을 갖도록 구성될 수 있고 짝수 및 홀수 메모리 위치들은 다른 소거 숨기기 주기에 할당될 수 있으며, 이는 논리적 행렬 식으로 별개로 수행될 수 있다. 이런 구성은 메모리 모듈의 내부 대역폭이 데이터 전송속도에 대한 제한인 경우 유용할 수 있다.
행 또는 열에서 스트라이프의 범위가 논리 어레이의 경계를 초과하면, 스트라이프는 도 16에 도시된 바와 같이 모듈로 산술 기반으로 랩 어라운드될 수 있고, 이는 5×5 매트릭스에 사용될 때 도 14의 스트라이프에 해당한다. 도 16의 어레이는 스트라이프가 양 컬럼 1 및 5에서 랩 어라운드되게 하는 크기이나, 대형 어레이에서 랩 어라운드는 특별한 방향으로 어레이의 경계를 지나 뻗어 있는 스트라이프의 이룹에 대해 발생할 수 있다. 도 17은 도 13의 스트라이프 방향에 대해 유사한 상황을 도시한 것이다.
개략적으로, 이 예의 스트라이프들의 방향들은 기울기를 갖는 라인들이 0, ±1, 및 ±2 행/렬 기울기를 갖는 라인들로 일반화됨에 따라 가시화될 수 있다. 더 큰 단계 크기들도 또한 이용될 수 있다.
특정 스트라이프를 포함한 논리 어드레스 범위는 스트라이프마다 다를 수 있다. 도 18에 도시된 바와 같이, 복수의 스트라이프들의 일부가 동일한 행렬에 저장될 수 있다. 여기서, 도 10, 11, 12, 16 및 17에서 앞서 도시된 스트라이프 방향들은 각 스트라이프의 논리 어드레스 범위(3)가 논리 어레이의 (3,3)에서 발견되도록 중첩된다. 도 15의 수직 스트라이프가 또한 도 19에 도시된 바와 같이 사용될 수 있다. 모든 스트라이프들은 중심 어레이 위치(3,3)에서 발견되고, 각 스트라이프도 또한 별개의 어레이 위치에서 발견된다.
이 스트라이프 패턴은 스트라이프 클러스터라 할 수 있고, 메모리 시스템의 성능을 제어하기 위해 여러가지 방법으로 이용될 수 있는 데이터 분산 효과를 갖는다. 대형 어레이 및 대형 스트라이프 길이(L)에서, ±3, ±4 등과 같이 스트라이프 클러스터의 일부로서 다른 스트라이프 기울기 및 패턴들이 이용될 수 있다.
도 18에서, 각 스트라이프는 동일한 데이터 량을 갖도록 나타날 수 있다. 즉, 도시된 바와 같이, 각 어드레스 범위 그룹의 스토리지 능력을 특징하는 표시가 전혀 없다. 각 스트라이프는 폭 Ws을 갖는다고 할 수 있다. 물리적 메모리 모듈에 할당된 스트라이프내 총 메모리양은 모듈의 총 물리적 메모리 및 가비지 컬렉션, 최대 소정의 타임라인 로딩 등과 같이 하우스키핑 요건들을 고려해 사용자에 이용가능한 메모리 모듈내 총 물리적 메모리의 퍼센트를 고려함으로써 결정된 최대량까지일 수 있다. 본 예에서, 하우스키핑 기능은 무시되고 물리적 메모리는 완전히 스트라이프에 할당될 수 있다. 모듈에 할당된 스트라이프들에 대한 Ws의 합은 총 물리적 메모리와 같을 수 있다.
도 18에서 위치(3,3)가 물리적 메모리 모듈에 해당하는 경우, 스트라이프의 폭(W)의 합이 이용가능한 물리적 메모리와 같거나 더 적다면 스트라이프 클러스터의 모든 스트라이프들이 상기 모듈에 수용될 수 있다. 도 20은 스트라이프들이 다른 폭을 가질 수 있는 어레이의 도면이다. 이 예에서, -3 기울기의 스트라이프가 있는 스트라이프 "20"은 스트라이프 21 내지 23으로 복제되는 한편, -1의 기울기인 스트라이프(10)는 복제되지 않는다. 그러므로, 각각의 스트라이프 어드레스 범위(X.3)가 메모리(M)양을 나타낼 경우, 스트라이프 -3은 3M 메모리 공간을 포함하는 것으로 보여질 수 있는 한편, 스트라이프 방향 -1은 M의 메모리 공간을 포함하는 것으로 보여질 수 있다. 다른 배열들도 또한 가능하며, 스트라이프의 메모리 공간은 특별한 적용 프로그램 또는 복수의 할당 프로그램에 할당될 수 있다.
예컨대, 제한이 아니라, 스트라이프들 각각이 4개의 데이터 요소들과 스트라이프의 데이터 요소로부터 계산된 하나의 패리티를 포함하면, 임의의 성능 열하 없이 (3,3)에서 자원 충돌이 있더라도 또 다른 하나가 접속되는 동안 스트라이프들 중 어느 하나가 접속될 수 있다. 이는 하드웨어 충돌 또는 제한을 인해 읽기에 있어 지연이 될 수 있는 스트라이프의 임의의 어드레스 범위를 대신하도록 패리티의 사용에 따른다. 도 18에 도시된 바와 같은 배열 또는 유사한 배열이 가령 더 큰 메모리 시스템의 각 메모리 모듈내 물리적 메모리에 데이터의 할당시 사용될 수 있다. 도 21 및 도 22는 다른 크기의 어레이에서 모듈 랩핑을 도시한 것이다.
발생 스트라이프 패턴들은 예컨대, 마이크로소프트 엑셀로 실행하는 다음의 매크로스를 참조로 이해될 수 있는 정책 또는 방법을 이용할 수 있고, 상기 동작은 당업자에 이해될 수 있다:
//도 23에 대한 코드
For i = 0 To 4
Call make_stripe(5, 5, 5, 0, i, 5 * i + 0, 0, 2)
Call make_stripe(5, 5, 5, 0, i, 5 * i + 1, 1, 2)
Call make_stripe(5, 5, 5, 0, i, 5 * i + 2, 2, 2)
Call make_stripe(5, 5, 5, 0, i, 5 * i + 3, 3, 2)
Call make_stripe(5, 5, 5, 0, i, 5 * i + 4, 4, 2)
Next i
//도 34에 대한 코드
For i = 0 To 9
Call make_stripe(7, 7, 5, (i * 5), 0, i, 6, 0)
Next i
For i = 10 To 19
Call make_stripe(7, 7, 5, (i * 10), 0, i, 7, 0)
Next i
For i = 20 To 29
Call make_stripe(7, 7, 5, (i * 15), 0, i, 8, 0)
Next i
For i = 30 To 39
Call make_stripe(7, 7, 5, (i * 20), 0, i, 9, 0)
Next i
For i = 40 To 49
Call make_stripe(7, 7, 5, (i * 25), 0, i, 10, 0)
Next i
// helper functions
Sub make_stripe(width As Integer, height As Integer, ssize As Integer, x As Integer, y As Integer, addr As Integer, stype As Integer, pivot As Integer)
Dim i As Integer
Dim j As Integer
Dim 1 As Integer
For 1 = 0 To (ssize - 1)
j = stripe_x(ssize, stype, pivot, 1)
i = stripe_y(addr, stype, pivot, 1, j + x, width)
j = ((j + x + width) Mod width) + 1) * 2
i = (((i + y + height) Mod height) + 1) * 2
Cells(i, j).Value = Cells(i, j).Value & " " & addr & "." & (1 + 1)
Cells(i, j).Select
Call make_border
Next l
End Sub
Function stripe_x(ssize As Integer, stype As Integer, pivot As Integer, pos As Integer)
Select Case stype
Case -1
stripe_x = 0
Case 7
stripe_x = pos * 2
Case 8
stripe_x = pos * 3
Case 9
stripe_x = pos * 4
Case 10
stripe_x = pos * 5
Case Else
stripe_x = pos
End Select
End Function
Function stripe_y(n As Integer, stype As Integer, pivot As Integer, pos As Integer, x As Integer, w As Integer)
Dim q As Integer
Dim p As Integer
Select Case stype
Case -1
stripe_y = pos
Case O
'horizontal line
stripe_y = 0
Case 1
'forward slash
stripe_y = pivot - pos
Case 2
'backward slash
stripe_y = pos - pivot
Case 3
stripe_y = 2 * (pivot - pos)
Case 4
stripe_y = 2 * (pos - pivot)
Case 5
q = (pos + (n \ pivot)) Mod 8
' q = pos
p = n + pos
Select Case q
Case O
stripe_y = p * 101
Case 1
stripe_y = p * 79
Case 2
stripe_y = p * 41
Case 3
stripe_y = p * 223
Case 4
stripe_y = p * 467
Case 5
stripe_y = p * 373
Case 6
stripe_y = p * 157
Case 7
stripe_y = p * 191
End Select
Case 6
stripe_y = 0 + (x \ w)
Case 7
stripe_y = 0 + (x \ w)
Case 8
stripe_y = 0 + (x \ w)
Case 9
stripe_y = 0 + (x \ w)
Case 10
stripe_y = 0 + (x \ w)
Case Else
stripe y = 0
End Select
유사한 알고리즘이 예들을 설명하는데 사용된 다른 도면들을 발생하도록 사용된다. 더욱이, 이 알고리즘 또는 유사물이 실제 시스템에서 위치들과 어드레스 범위들의 할당을 계산하도록 사용될 수 있으며, 상기 알고리즘은 컴퓨터 소프트웨어 제품의 일부이다. 그러므로, 선택은 필요에 따라 연관 계산, 사전계산된 룩업테이블, 또는 상기 기술들의 조합 간에 선택이 이루어질 수 있다.
여태까지, 예들은 단일 메모리 모듈에 집중된 스트라이프 클러스터를 도시하였다. 그러나, 상기로부터, 랩핑이 요구되는 적절한 모듈로 산술로 스트라이프 클러스터가 가령 도 23에 도시된 바와 같이 어레이 컬럼에 각각의 메모리 모듈에 집중될 수 있다. 여기서, 길이 5 및 기울기 0, ±1, 및 ±2의 스트라이프들이 발생함수로서 사용될 수 있다. 발생함수는 가령 먼저 (3,1)에서 스트라이프 0 내지 4를 발생하고 그런 후 (3,2)에서 스트라이프 5 내지 9를 발생하고 등등해서 (3,5)까지 내려가 스트라이프 20 내지 24를 발생하는데 사용될 수 있다. 여기서, 각 모듈에서 5개 스트라이프들은 관련된 물리적 메모리 모듈의 총 메모리 공간을 차지하는 예시용으로 가정하였다.
스트라이프의 중앙 교차점이 위치된 곳에 무관하게, 도 24에서처럼, 스트라이프의 나머지 데이터가 (1,3)에서 교차된 스트라이프들 중 단 하나만이 다른 모듈들 중 어느 하나를 지나도록 분산된 것을 관찰할 수 있다. 이런 배열은 모듈 고장으로 인한 회복을 용이하게 하는데 유용할 수 있다. (1,3)에 해당하는 모듈이 고장나면, 피복구될 데이터가 있는 스트라이프에 있는 나머지 데이터는 고장 모듈에 있는 데이터를 복구하는데 사용될 필요할 수 있다. 이렇게 함으로써, 나머지 데이터를 읽는 것과 관련된 시스템의 부하가 분산 데이터를 갖는 모듈에 걸쳐 폭넓게 분산되므로, 도 5의 배열의 환경일 수 있는 각각의 모듈은 덜 영향받게 되며, 스트라이프들은 모두 기울기가 0이다. 도 5의 배열에서, 고장 모듈의 데이터를 복구하는데 필요한 모든 데이터들은 4 모듈에 위치해 있는 한편, 도 23 및 도 24로 표현된 상황에서 데이터는 20 모듈들에 걸쳐 퍼질 수 있다. 또 다른 유사한 예가 도 25 및 도 26에 도시되어 있다.
예에서 도시된 것보다 상당히 더 클 수 있는 메모리 어레이의 성질들은 발생함수로서 한 스트라이프 클러스터를 고려함으로써 이해될 수 있다. 각 스트라이프에 대해 다를 수 있는 스트라이프들 각각이 폭(W)을 가질 수 있으나, 각 스트립이 최소 허용된 쓰기 범위와 같은 폭(W) 가령, 페이지를 갖는다면 상황을 가시화하기가 더 쉬워진다. 실제로, 메모리 회로들이 단일 디바이스 패키지에 대한 MB 또는 GB로 측정된 용량을 가지면, 각각의 스트라이프들에 대한 폭(W)은 페이지보다 상당히 더 클 수 있다. 일태양으로, 폭(W)은 128KB 또는 256KB일 수 있는 블록으로 또는 복수의 다이들이 메모리 회로에 포함된 다수의 블록들을 갖는 다이로 측정될 수 있다.
길이(L)가 다르고 스트라이프 기울기가 다른 하나 이상의 스트라이프 클러스트 타입이 정의될 수 있다. 예컨대, 상술한 길이 5의 스트라이프처럼 또한 길이 7의 스트라이프가 사용될 수 있다. 길이 7의 스트라이프는 다른 개수의 데이터 및 패리티 유닛들을 가질 수 있다. 예컨대, 5페이지의 데이터 및 2 페이지의 패리티가 있을 수 있다. 이는 적용 요건에 따라 다양한 개수의 데이터 및 패리티 페이지들을 갖는 다른 길이(L)를 나타낼 수 있다. 어레이의 메모리 모듈들이 제 1 스트라이프 클러스터 패턴으로 채워지지 않았다면, 제 2 스트라이프 클러스터 패턴이 2개 패턴들로부터 데이터를 인터리브하도록 발생함수로서 또한 사용될 수 있다.
시각화 시스템에서 제 1 프로그램과 시각화 시스템에서 제 2 프로그램이 지연, 입출력 동작, 전달 대역폭, 회복 속도, 회복불가능한 데이터 손실 확률 등과 같은 다른 최적화 요건들을 갖기 때문에, (패리티를 포함한) 스트립핑 패턴이 기준을 가장 잘 충족하도록 선택될 수 있다.
각 스트라이프가 복수의 페이지들로 작성되면, 패리티는 작성된 스트라이프에 대해 계산될 수 있고, 데이터와 동일한 시기에 메모리 작성된다. 이런 식으로, 메모리로부터 데이터 읽기는 패리티의 계산에 필요하지 않다. 상기 데이터는 이전 시간에 읽어졌고 현재 변경된 데이터로 기록되거나 상기 데이터는 이전에 저장되지 않은 새 데이터이다.
도 27은 물리적 메모리 모듈이 폭 1의 25개 스트라이프 폭들과 같은 용량을 갖는 메모리 시스템의 예를 도시한 것이다. 이 예에 대한 스트라이핑 패턴은 발생 패턴이 각각의 논리 어드레스 범위의 행렬에 집중되는 것을 제외하고는 도 25의 패턴과 유사하게 발생된다. 발생된 패턴은 광범위하게 분산되며 "핫 스팟"의 발생을 줄이기 위해 복수의 애플리케이션들의 쓰기 및 읽기 부하를 분산하는 특성을 가질 수 있다. 사용자 애플리케이션 프로그램 또는 시각화 공간이 반복해서 메모리 모듈에 맵핑되는 논리 어드레스 범위를 참조할 때 핫 스팟들이 발생한다. 이로 인해 지연 증가, 빠른 메모리 마모 등과 같이 성능에 문제가 발생할 수 있다.
그런 후, 어드레스 범위(1,3)가 고장이 발생한 메모리 모듈에 해당하는 상황을 고려하자. 그러면, 각각의 스트립들에 있는 5개의 요소들 중 4개를 이용해 데이터를 재구성하는 것이 바람직하다. 이렇게 하기 위해, 패리티가 고장 모듈로 인해 잃어버린 데이터인 경우 스트립의 4개 페이지들이 패리티를 재구성하는데 사용될 수 있다; 또는 데이터 페이지가 고장 모듈로 인해 잃어버린 데이터이고 동작가능한 메모리 위치에 저장된 (복구된 패리티 데이터를 포함할 수 있는) 복구된 데이터인 경우 상실 데이터 페이지를 재구성하는데 4개의 데이터 페이지 중 3개 및 패리티 페이지가 사용될 수 있다.
데이터가 복구된 경우, 복구된 데이터는 이용가능한 저장 공간을 갖는 동작가능 메모리 모듈에 저장된다. 이 데이터 스토리지의 위치 선택은 다른 곳에서 논의된다. 일태양으로, 시스템내 소거 숨기기를 보존하기 위해, 복구된 데이터는 고장 메모리 모듈과 같은 소거 숨기기 간격과 관련된 메모리 모듈에 저장될 수 있다. 스페어 메모리 모듈이 고장 메모리 모듈의 소거 숨기기 간격과 동기될 수 있고, 복구된 데이터는 스페어 메모리 모듈에 직접 또는 중간 스토리지 동작 후에 저장된다. 개개의 복구된 데이터 블록들은 고장 모듈을 지나지 않는 임의의 스트라이프에 기록될 수 있다. 각각의 복구된 페이지가 스트라이프에 기록됨에 따라, 스트라이프의 패리티는 XOR 계산에 의해 업데이트될 수 있어 복구된 데이터는 복구되어짐에 따라 연이은 고장에 대해 보호되어 진다. 대안으로, 복구된 데이터는 관련된 패리티를 갖는 스트라이프에 어셈블리되고 이와 같이 기록된다.
일태양으로, 스페어 모듈은 복구된 데이터를 수신하는데 사용될 수 있다. 도 4a 및 도 4b의 메모리 구조는 메모리 모듈에 대해 복구된 데이터의 핫 스페어링(hot sparing)과 호환될 수 있다. 스페어 메모리 모듈은 고장모듈의 소거 주기 및 상기 스페어 모듈에 기록된 복구된 데이터와 동기될 수 있다. 스페어 모듈의 메모리 용량은 고장 모듈과 동일할 수 있기 때문에, 데이터는 스페어 모듈에 완전히 복구될 수 있다.
그러나, 복구 중인 스트라이프에 있는 데이터의 읽기 요청에 대한 메모리 시스템의 응답시간이 손상되지 않도록 데이터의 쓰기를 열(列)의 소거 간격주기로 제한하는 것이 바람직할 수 있기 때문에, 스페어 모듈로의 데이터의 쓰기 속도는 데이터가 저장될 수 있는 속도에 한계가 있을 수 있다. 일태양으로, 스페어 모듈로 복구된 데이터의 쓰기는 최대 대역폭 미만으로 제한될 수 있다. 스페어 모듈은 복구된 데이터로 채워지기 때문에, 타임라인 로딩상태는 고장나기 전 이 데이터를 가진 모듈의 상태에 점점 더 가까워진다. 즉, 모듈에 접속하는 사용자 프로그램으로 인해 그리고 가비지 컬렉션 및 마모 평준화(wear leveling)와 같은 하우스키핑 활동으로 인해 모듈에 대한 읽기 및 쓰기 부하가 증가된다. 스페어 모듈에 복구된 데이터의 쓰기 속도가 알맞지 않으면 사용자 요청에 대한 스페어 모듈의 응답시간이 손상될 수 있다.
중간 복구단계가 도입될 수 있다. 예컨대, 복구된 데이터가 스페어 공간을 가진 동작가능 메모리 모듈에 작성될 수 있다. 이런 스페어 공간은 특히 복구된 데이터에 대해 보존될 수 있거나, 가비지 컬렉션 전략의 결과일 수 있다. 예컨대, 2009년 6월 12일자로 출원되고 본 명세서에 참조로 합체된 미국 가출원 61/186,626에 기술된 지속적 가비지 컬렉션 전략으로 일시적 기반으로 사용될 수 있는 각 모듈내에 스페어 공간이 일부 있을 수 있다.
정상 동작 동안, 가비지 컬렉션을 수행하는 행위는 사용 증가시 총 메모리 공간의 양으로서 모듈의 평균 쓰기 대역폭을 줄이며 오버헤드로서 이용가능한 읽기 및 쓰기 대역폭의 몇몇 부분을 소비한다. 사용중인 모듈 및/또는 하나 이상의 스페어 모듈에 충분한 여유 메모리 공간이 있으면, 데이터의 재건 동안 가비지 컬렉션의 처리를 변경, 삭감 또는 중단함으로써 더 많은 대역폭이 고장 모듈의 재건 데이터에 대한 읽기뿐만 아니라 재건 데이터를 저장하기 위한 쓰기 동작 모두에 이용가능해지게 허용될 수 있다.
재건 동안 일시적으로 메모리 모듈에 기록되고 있는 복구된 데이터가 가령 특별한 명령 옵션, 데이터에 대한 태그의 사용, 특별 어드레스 범위 또는 어드레스나 몇몇 다른 메타데이터를 바탕으로 한 로컬 판단에 의해 식별되면, 일시적 데이터를 저장하는데 사용된 블록들을 가비지 수집하는 데 대한 필요성을 줄이거나 없애도록 일시적으로 저장된 데이터의 위치가 선택될 수 있다.
일예로, 복수의 메모리 모듈의 이용가능한 공간에 대한 일시적 재건이 수행될 수 있다. 메모리 공간이 이용가능한 한 루틴 가비지 컬렉션 처리가 느려지거나 정지될 수 있다. 재건된 데이터를 포함한 블록들은 일반적으로 메모리 모듈에 일시적으로 저장되지 않은 데이터의 몇몇 기설정된 비율에 지나지 않을 수 있다. 주로 또는 전체적으로 일시적 데이터를 포함한 데이터 블록들에 대해 거의 또는 전혀 가비지 컬렉션이 수행되지 않을 수 있다.
재구성된(복구된) 데이터를 나타내는 일시적 데이터가 교체 메모리 모듈로 전달되면, 주로 또는 전체적으로 이런 데이터의 저장을 위해 사용된 블록들은 아마도 소거되는 것만 필요하며 효율적으로 가비지 컬렉션될 수 있다. 일시적으로 재구성 데이터를 저장하기 위해 특정 모듈으로부터 필요할 수 있는 공간, 사용자 데이터의 평균 또는 최대 쓰기 대역폭, 이용가능한 스페어 메모리 공간, 및 재구성을 수행하는 시간뿐만 아니라 재구성된 데이터를 교체 모듈에 복제하는 시간을 고려함으로써, 고장 이벤트를 수용하도록 가비지 컬렉션 처리가 느려지거나, 변경되거나, 중단될 수 있다. 따라서, 고장 이벤트는 메모리 시스템의 루틴 동작에 대한 예외적인 경우로 간주될 수 있고, 고장으로 인한 회복 효과가 물리적으로 그리고 일시적으로 모두 시스템에 걸쳐 확산될 수 있어, 대부분의 사용자들에 대한 영향을 완화한다.
또 다른 태양으로, 가비지 컬렉션 처리가 느려지거나, 변경되거나 중단될 수 있는 정도는 재구성을 수행하기 위한 시간에 영향을 줄 수 있어, 대답을 수렴하기 위해 계산이 한번 이상 수행될 필요가 있을 수 있다. 메모리가 여유있고 작성에 이용가능한지 혹은 여유있으나 사용될 수 있기 전에 가비지 컬렉션되어야 할 지에 대해, 여유 메모리 공간이 모듈에 위치된 경우 주어진 모듈에 대한 여유 메모리 공간량을 기초로, 모듈에 할당된 일시적 재구성 데이터량 또는 특성이 변경될 수 있다.
예컨대, 여유 공간을 가진 모듈에 여유 메모리가 이용가능해지도록 여유 공간이 없는 또는 상당한 가비지 컬렉션 노력을 필요로 하는 여유 공간이 있는 또 다른 모듈보다 더 많은 임시 데이터가 할당될 수 있다. 상당한 여유 메모리 공간을 가지나 이용가능해지도록 거의 없거나 적절한 가비지 컬렉션이 요구되는 모듈에 재구성 처리시 나중에 복구되어 다시 여유 메모리 공간이 된 어드레스로부터가 아니라 상당한 양의 임시 재구성 데이터가 할당될 수 있다.
재구성 동안 사용된 가비지 컬렉션 정책 및/또는 파라미터는 시스템내 각 모듈에 대해 같을 필요가 없으며 정상동작 조건하에서 바람직하지 못한 것으로 간주되는 정책 및/또는 파라미터들일 수 있다. 그러나, 선택된 특정 정책은 복구 동작이 더 이상 특정 모듈을 포함하지 않으면 복구 주기 동안 사용을 위한 것이며 루틴 동작으로 돌아갈 수 있다.
이런 스페어 메모리 공간이 있는 경우, 복구된 데이터는 고장 모듈과 같은 열에 있는 모듈들에 작성될 수 있다. 이 데이터는 즉시 소거 숨기기 방식에 있게 된다. 그러나, 복구된 데이터를 더 광범위하게 분산시키는 것이 바람직할 수 있다. 효과적으로, 복구된 스트라이프를 포함하는 모듈들을 제외하고 모든 나머지 모듈들이 사용될 수 있다. 복구된 데이터는 상기 보국된 데이터의 스트라이프를 포함하는 행을 갖는 열에 있을 수 있고, 스트라이프 페이지가 소거 간격에 있을 수 있다. 한 데이터 읽기라기보다 2개 데이터 읽기가 요구될 수 있기 때문에 지연의 증가가 발생할 수 있다. 이는 고장 모듈, 동일한 데이터 또는 데이터의 패리티의 열과 같지 않은 열로의 작성 데이터가 또한 또 다른 열의 여유 영역에 쓰여질 때 방지될 수 있다. 이는 복구된 데이터를 미러링하는 것으로 간주될 수 있다. 이는 임시로 더 많은 공간을 이용하는 한편, 데이터는 이 분포에 의해 그리고 임의의 성능 열하를 줄임으로써 메모리에 걸쳐 더 광범위하게 확산된다. 이와 같은 임시 열에 저자된 데이터가 읽어지면, 스토리지 위치들 모두가 읽어지고, 2개의 동일한 데이터 페이지들 중 첫번째 데이터가 사용되거나, 타이밍을 고려해, 소거 간격에 있지 않은 2개의 메모리 모듈 중 하나로부터 데이터가 읽어진다.
늦어도, 모든 데이터가 지속성 메모리에 복구된 후, 복구된 데이터는 현재 스페어 모듈로 옮겨질 수 있어 미러 데이터가 더 이상 필요하지 않게 된다. 스페어 모듈은 고장 모듈의 대체가 되며 그 위치는 논리 어드레스 공간에 대해 이와 같이 맵핑된다.
복구를 위해 사용된 데이터는 도시된 예에서 25개 메모리 모듈들 중 20개에 걸쳐 분산될 수 있기 때문에, 이 데이터의 읽기는 기본적으로 나란히 진행될 수 있다. 메모리 시스템의 정상동작에 대한 재구성을 위해 데이터의 읽기 효과가 전체 메모리 시스템에 걸쳐 확산된다. 마찬가지로, 요구되는 데이터의 읽기 메모리 시스템의 정상 동작의 효과는 더 균일하게 확산될 수 있다.
이는 행 "0"과 열 A 내지 D에 데이터를 저장하기 위해 스트라이프 "0"에 데이터가 작성되는 도 5에서의 배열과 비교될 수 있다. 여기서, 고장 메모리 모듈로부터 데이터를 복구하는데 사용되는 모든 데이터와 패리티가 스트라이프의 나머지 4개 메모리 모듈들에만 저장된다. 그러므로, 고장 모듈(A,0)을 재구성하기 위한 데이터 읽기를 달성하기 위해, 가령 데이터는 모듈(B, 0), (C, 0), (D, 0) 및 (P, 0)으로부터 읽어진다. 도 20의 배열과 같은 시간 주기에 데이터를 저장하기 위해, 데이터는 데이터 속도의 약 4배로 도 5에서의 메모리 모듈들로부터 읽어져야 한다. 마찬가지로, 동작가능 메모리 모듈에 복구된 데이터를 쓰는 것이 동일한 스트립핑 전략에 따라 수행되면, 모듈로의 복구된 데이터의 쓰기 속도는 다시 도 20의 예에서처럼 약 4배나 빨라진다.
도 10 내지 도 27의 배열의 설명 및 모듈의 고장 후 데이터의 복구는 물리적 메모리에서 데이터의 위치에 대한 제한을 둘 수 있는 소거 숨기기 및 메모리 모듈 고장의 경우에 재구성된 데이터의 주제를 특별히 언급하지 않았다.
일예로, 도 24에 도시된 바와 같이 (1,3)의 어드레스 범위를 포함한 모듈에 고장이 있는 도 25의 5×5 어드레스 범위를 고려하자. 도 25의 배열의 어드레스 범위는 가령 도 4a 및 도 4b에서 상술한 것과 유사하게 물리적 메모리 시스템의 메모리 모듈과 연관될 수 있다. 소거 숨기기가 시스템 구조의 특별한 레벨에서의 설계 목적인 경우, 모듈이 모듈, 서브모듈 등일 수 있는 각 물리적 메모리 모듈에 대한 각각 소거(및 쓰기) 간격의 타이밍으로 인해 스트라이프와 관련된 모듈들 중 단 하나만이 특별한 간격 동안 쓰기 또는 소거가 수행될 수 있다. 간격들이 단지 부분적으로 중첩되는 정도로는, 소거 숨기기 태양은 덜 효과적일 수 있다.
메모리 모듈이 복수의 메모리 회로들로 구성되는 경우, 각각의 메모리 회로들이 메모리 모듈에 있는 별도의 다른 메모리 회로들에 쓰여지거나 소거될 수 있다. 플래시 메모리에 대해, 이 속성은 각 메모리 회로에 복수의 다이가 있는 다이 레벨에 있을 수 있다. 현재, 이런 메모리 회로들은 메모리 회로가 메모리 모듈에 어셈블리될 수 있도록 핀 또는 볼 격자 어레이 또는 다른 인터페이스를 갖는 패키지 디바이스와 관련될 수 있다. 그러나, 메모리 회로들 및 패키징 기술이 연속적으로 개발되고 있고 본 명세서에서 설명한 용어는 제한이라기보다는 개념적인 것으로 이해해야 한다.
메모리 모듈이 복수의 메모리 회로들로 구성되는 경우, 모든 메모리 회로들은 소거 간격이 메모리 모듈에 대해 발생할 때 계류중인 소거를 갖는 것은 아니다. 계류중인 소거를 갖지 않는 이들 메모리 회로들은 계류중인 쓰기 동작 또는 소거 간격동안 도착한 쓰기 동작을 실행할 수 있다. 소거도 쓰기도 메모리 모듈의 메모리 회로에 수행되지 않는 정도로도, 계류중인 읽기 동작이 수행될 수 있다. 따라서, 심지어 모듈에 대한 소거 간격 동안에, 메모리 모듈의 메모리 회로들 중 일부에 대해 읽기 동작들이 수행될 수 있다. 소거 간격동안 이용가능한 타임라인을 바탕으로 실행되도록 하는 읽기 및 쓰기 요청은 특정 사용자, 서비스 등으로부터의 요청에 우선선위를 줄 수 있는 정책을 바탕으로 한 실행을 위해 디큐될 수 있다.
그러나, 소거 동작이 진행중인 메모리 회로에 대해 읽기 동작이 수신되면, 본 명세서에 기술된 소거 숨기기 메카니즘은 소거 간격의 완료와 관련된 지연을 방지한다. 이는 더 긴 쓰기 및 읽기 시간에 대해 트렌드인 것으로 보이는 멀티레벨 플래시(MLC)와 같은 상황에서 크게 중요해질 수 있다.
여기서, 열 1에 있는 행들 모두가 동시에 소거 간격에 있도록 도 17의 어드레스 범위 열 1-5를 메모리 모듈에 할당되게 순차적으로 허용함으로써 비중첩 속성이 얻어질 수 있는 도 17의 경우 및 5개의 스트라이프 길이를 고려하자. 열 1에 대한 소거 간격의 완료 후, 열 2에 대한 소거 간격이 이하 등등 발생할 수 있다.
스트라이프 "0"과 같이 스트라이프의 개개의 어드레스들이 어떤 행이 고려되는 지에 무관하게 모든 열들에 걸쳐 분포되고 열에 있는 모든 행들이 동일한 소거 간격과 관련된 메모리 모듈들에 할당되기 때문에, 전처럼, 요소 페이지들일 수 있는 5개 어드레스 윈도우 중 4개가 항상 즉시 읽기에 이용될 수 있게 된다. 그래서, 도 17의 배열은 데이터를 물리적 메모리 위에 광범위하게 분포하면서 소거 숨기기 구조와 호환될 수 있다. 스트라이프 중 단 하나의 어드레스 범위만이 각 소거 시간과 연관된다.
사용자들에 대한 데이터 손실의 할당은 메모리 모듈들에 스트라이프들의 맵핑을 고려해 스트라이프들을 사용자에 할당할 때의 정책을 통해 관리될 수 있다. 이는 논리 어드레스 공간에서 가시화될 수 있으며, 각각의 행/열 지정은 복수의 스트라이프들과 관련된다. 간단히 하기 위해, 도 30은 2개의 스트라이프 폭에 대해 충분한 공간을 갖는 행/렬 논리 어드레스 범위들을 갖는 이 개념을 도시한 것이다. 스트라이프들(0,1,2)은 사용자 A에 할당되고, 스트라이프들(10,11,12)은 사용자 B에 할당되며, 스트라이프들(20,21,22)은 사용자 C에 할당되고, 스트라이프들(30,31,32)은 사용자 D에 할당되며, 스트라이프들(40,41,42)은 사용자 E에 할당되고, 스트라이프들(50,51,52)은 사용자 F에 할당된다고 가정하자. 다시, 간단히 하기 위해, 도시된 스트라이프들은 스트라이프 기울기 0에 대한 것이다.
제 1 행은 사용자 A 및 D에 대한 데이터를 포함하고, 제 2 행은 사용자 A 및 E에 대한 데이터를 포함하며, 제 3 행은 사용자 A 및 E에 대한 데이터를 포함하고, 제 9 행이 사용자 C 및 D를 포함할 때까지 등등 이처럼 된다.
데이터 손실 패턴에 대한 모듈들의 여러 고장 영향은 가령 메모리 시스템에 있는 저장된 데이터의 무결성에 대한 메모리 시스템에서 2개의 고장 모듈들의 영향을 고려함으로써 이해될 수 있다. 즉, 제 2 모듈은 제 1 고장 모듈과 관련된 데이터의 복구를 마치기 전에 고장날 수 있다. 단일 패리티가 사용되면, 제 2 고장이 제 1 고장과 같은 행에서 발생하면 데이터가 손실된다. 가령, (1,2)가 고장나고 (3,2)가 고장나면, 2행에 있는 데이터가 손실된다. 이는 사용자 A 및 E엥 영향을 준다. 제 2 고장이 임의의 다른 행에서 발생되면, 사용자 각각은 단일 고장만을 갖게 되고 데이터가 복구될 수 있다. 그러므로, 데이터가 스트라이프에 의해 분산되면, 제 2 고장은 복구불가능한 데이터 손실을 야기할 확률이 단지 작아진다. 이는 예컨대 패리티가 이중 고장에 대한 보호로서 열에 대해 계산되는 열 패리티가 사용될 수 있음을 제안한다. 열 패리티를 사용한 데이터의 복구가 단일 패리티의 사용보다 더 느리더라도, 특정 모듈의 고장 조합들의 낮은 확률로 인해 이것은 유용한 전략이 된다.
각 스트라이프가 이중 패리티에 의해 보호되는 경우, 제 3 모듈이 고장 모듈로부터 데이터의 복구 전에 고장난다면, 동일한 일반적 고려가 적용될 수 있다.
스트라이프의 길이와 컬럼 개수들이 딱 맞지 않는 논리 어레이에 있는 데이터의 스트라이핑을 나타내기 위해 스트라이핑의 많은 예시적 패턴들이 표현되어 있다. 결과적으로 발생한 배열들 중 일부는 특히 작은 개수의 스트라이프들에 대해 최적인 것으로 보이지 않을 수 있다. 그러나, 차는 매우 많은 스트라이프들에 대해 덜 중요해지고, 어레이 폭, 스트라이프 길이, 스프라이프 스텝핑 등의 선택을 허용하여 다른 시스템 목적을 달성하게 된다.
도 31은 스트라이프 길이가 5인 7×7 치수의 논리 어레이를 도시한 것이다. 다른 예에서와 같이, 스트라이프에 있는 데이터 어드레스의 개수와 패리티 데이터 어드레스의 개수는 시스템 성능 요건을 기초로 선택될 수 있다. 예컨대, 길이 5개의 스트라이프는 4개의 어드레스 범위와 하나의 패리티 어드레스 범위 또는 3개의 데이터 어드레스 범위와 2개의 패리티 어드레스 범위를 가질 수 있다. 제 1 스트라이프(0,0)은 어레이 위치(1-5)를 차지하고, 제 2 스트라이프는 임의의 위치(6,1) 내지 (3,2)를 차지한다. 즉, 스트라이프는 한 행의 증분에 따라 우측 어레이 경계를 랩 어라운드한다. 디스크 어레이에서, 이는 때로 좌측 대각선 스트라이핑이라 한다. 일반적인 디스크 시스템에서, 디스크들의 행이 구성되고 랩 어라운드가 본 예의 0 행에 해당하는 디스크 그룹들에 계속된다. 본 예에서, 스트라이프들의 어드레스 범위들은 차례로 메모리 모듈에 맵핑될 수 있는 논리 어레이 위치들에 할당될 수 있고, 차례로, 메모리 모듈에 맵핑될 수 있다. "좌측 대각선"이라는 용어는 어드레스 범위들의 그룹을 지나는 라인은 랩 어라운드를 고려해 우상단에서 좌하단으로 경사진 각 스트라이프에서 제 1 요소(가령 0.1, 1.1, 2.1, 3.1, ...)를 고려함으로써 이해될 수 있다.
어레이 위치(6,6) 내지 (7,7)이 점선으로 도시되어 있다. 이들은 8개 스트라이프 및 9개 스트라이프 중 일부에 의해 채워질 수 있는 어드레스 범위들을 나타내며, 9번째 스트라이프들 중 나머지는 제 1 행으로 랩 어라운드된다. 대안으로, 어레이는 아마도 다른 개수의 메모리 모듈들을 갖는 시스템 및 어레이 위치(7,5) 다음에 발생할 수 있는 행으로 랩핑에 따라 채워지지 않을 수 있다.
7×7 논리 어레이에 대해 도 32에 도시된 또 다른 배열에서, 길이 5의 제 1 스트라이프(스트라이프 "10")가 (3,1)에서 시작될 수 있고, 다음 논리 어드레스 범위가 (5,1)에 위치되고 등등 2씩 증가되어 (4,2)까지 계속된다. 다음 스트라이프(스트라이프 "11")는 (6,2)에서 시작해 어드레스 범위(14.4)가 (7,7)에 위치될 때까지 계속되고, 스트라이프는 14.5가 (2,1)에 위치되도록 어레이의 시작에 대해 랩 어라운드된다. 도시된 가장 높은 번호의 스트라이프는 스트라이프 "17"이다. 그러나, 어레이가 아직 채워지지 않고 추가 스트라이프 "18" 및 "19"가 처음으로 어레이를 채우고 랩 어라운드를 시작하는 것이 명백하다.
도 33은 스트라이프에 있는 어드레스 범위들 간에 열 증분이 3씩 증분되는 것을 제외하고 도 32의 배열과 유사한 배열을 도시한 것이다.
도 34는 도 31 내지 도 33의 스트립핑 패턴 및 고차 어드레스간 범위 단계 패턴들이 사슬처럼 연결되어 총 47개 스트라이프들이 논리 어드레스 범위에 할당되는 도 31의 스트립핑 패턴을 도시한 것이다. 어레이의 스트라이프 및 폭의 불균등(non-commensurate) 길이의 영향은 어드레스 공간을 채우는 균일성에 거의 영향을 주지 않는다. 수백에서 수 만개 이상의 스트립들이 있을 수 있는 대형 메모리 시스템에서, 분포의 비최적성(non-optimality)은 일반적으로 고려가 되지 않는다.
도 35는 도 34의 어레이 패턴에 대해 (1,4)에서 교차하는 스트라이프들의 분포를 도시한 것이다. 5개의 스트라이프들이 모듈에서 교차하고 스트라이프들과 관련된 데이터가 어레이 전체에 분산되어, 스트라이프들의 다른 데이터가 (17개 메모리 모듈에 해당할 수 있는) 17개 어레이 위치들에서 발견된다. 그래서, (1,4)와 관련된 메모리 모듈에서 고장이 있는 경우, 데이터는 17개 모듈로부터 복구된다. 스트라이프내 열 증분, 스트라이프의 길이, 및 스트라이프의 총 개수에 따라, 데이터는 고장 모듈의 재구성을 위해 비고장 모듈 각각에 대한 읽기 및 쓰기 부하가 상대적으로 시스템에 걸쳐 균일하게 분포되도록 비고장 모듈들 위에 광범위하게 분포된다.
도 36은 48회 반복된 발생 패턴으로서 도 31의 배열을 이용한 할당 패턴이다. 도 36의 결과에 대해, 도 37은 고장 모듈을 나타내는 (1,1)을 지나는 스트라이프들의 관계를 도시한 것이다. 스트라이프들은 8개 모듈들 위에 분포되며 상기 모듈들 중 일부는 이들을 지나는 4개 스트라이프들을 갖는다. 이는 도 35의 상황보다 덜 최적이나 선택된 스트라이핑 패턴에 따라 메모리 모듈의 데이터가 메모리 시스템 위로 다소 광범위하게 분포될 수 있는 것을 도시한 것이다.
도 38 및 도 39는 도 36 및 도 37의 상황과 유사한 상황을 도시하나, 스트립핑 패턴으로 스트라이프의 순차적 어드레스 범위는 열 방향으로 5씩 증가하게 된다. 이로써 고장 모듈의 데이터가 복구될 수 있는 데이터를 저장하는 메모리 모듈의 세트가 달라진다.
다른 많은 스트립핑 패턴들이 어레이를 채우도록 조합되면, 데이터는 도 40에 나타내질 수 있는 바와 같이 매우 많은 메모리 모듈들에 걸쳐 확산된다. 여기서, 데이터는 균일하지는 않으나 26개 모듈들 위에 퍼져 있다.
다른 패리티 접근들에 대해 데이터의 복구시 메모리 모듈의 고장 영향은 도 41을 참조로 더 잘 이해될 수 있다. 스트라이프들은 길이 6이고, 매트릭스는 6×10 논리 어레이이다. 여기서, 스트라이프 "0" 내지 "9"는 기울기 "0"으로 작성되고, 스트라이프 "10" 내지 "19"는 좌측 대각선 패턴으로 작성되며, 스트라이프 "20" 내지 "29"는 우측 대각선 패턴으로 작성된다. 29개 스트라이프 패턴들이 있다. 물론 추가 스트라이프 패턴들이 작성될 수 있으나, 상기 예는 도면에서 리더기가 뒤따르도록 간략화되어 있다. 알고리즘에 의해 패턴들이 발생되고, 스트라이프 어드레스 범위들과 행렬의 연관이 실제로 산술 계산 또는 룩업테이블에 의해 결정될 수 있다.
(1,1)과 관련된 모듈이 고장났다고 가정하자. 즉, 어드레스 범위(0.1, 18.1 및 22.1)들이 손실되고 복구될 것이 필요하다. 스트라이프 "1"도 또한 (1, 2), (3, 1), (4, 1), (5, 1) 및 (6, 1)에서 발견된다. 스트라이프 "18"도 또한 (2, 10), (3, 9), (4, 8), (5, 7) 및 (6, 6)에서 발견된다. 스트라이프 "22"도 또한 (2, 2), (3, 3), (4, 4), (5, 5) 및 (6, 6)에서 발견된다. 이 예에서 각각의 스트라이프들은 길이 L=6이며, 5개의 데이터 어드레스 범위와 1개의 패리티 어드레스 범위를 갖는다. 그러므로, 어레이 위치(1,1)의 데이터는 결국 어레이 위치(1,1)에 할당될 수 있는 스페어 모듈에 상술한 바와 같이 복구되며, 복구 과정을 마친다.
그러나, 메모리 시스템에 있는 제 2 모듈이 스트라이프들이 완전히 복구되기 전에 실패할 수 있는 우려가 항상 있다. 영향받는 스트라이프들의 개수, 데이터 손실 확률 및 데이터 손실 패턴에 모두 관해서 데이터 손실의 특징들이 흥미 있다.
5개의 데이터 논리 어드레스 범위와 하나의 패리티 어드레스 범위가 있는 스트라이프의 사용을 고려하자. 예를 위해, 패리티가 어드레스 범위(X,6), 즉, 제 6 열에 있다고 가정하자. 복구될 데이터는 메모리 시스템의 60개 모듈들 중 14개에서 발견된다.
간략히 하기 위해, 제 1 고장 바로 후에 제 2 모듈이 고장나는 시나리오를 고려하자. 이 상황은 기술자가 고장 모듈이라 생각하는 부정확한 모듈을 불가피하게 제거할 수 있기 때문에 실제가 아닌 통계적 기반으로 있을 것 같지 않은 것으로 여겨질 수 있거나, 몇몇 다른 동작에 의해 고장을 유발할 수 있다. 제 2 고장은 제 1 고장과 같은 행에 있는 경우, (1,1)에 있는 어드레스 범위를 갖는 스트라이프가 열(1,Y)에 있는 임의의 다른 모듈들에 있는 어드레스 범위를 갖지 않도록 어레이가 구성되기 때문에 데이터의 손실이 전혀 없으며, 여기서 Y는 행 번호이다. 열 1에서 9개 모듈들 중 어느 하나가 데이터 손실 없이 고장날 수 있다. 즉, 나머지 50개 중 나머지 모듈들 중 9개가 아무 영향 없이 고장날 수 있다. 이들은 상술한 바와 같이 복구될 수 있다. 다른 모듈들 중에, 14개가 제 1 고장 모듈의 스트라이프들을 복구하는데 사용된 것을 알게 된다. 임의의 다른 36개 모듈들에서 한 개의 고장으로 제 1 고장 모듈의 스트라이프들을 재구성하는데 필요한 데이터가 손실되지 않게 된다. 요약해서, 60개 모듈들 중 45개 중 어느 하나가 단일 패리티를 이용해 검색될 수 없는 데이터 손실을 일으키지 않고도 고장날 수 있다.
2개의 어드레스 범위들의 손실을 야기하는 복구시 이용된 14개 모듈들 중 하나에서의 제 2 고장의 영향은 단일 패리티 경우에 한 스트라이프에 대한 복구불가능한 데이터의 손실을 야기하도록 될 수 있다. 다른 스트라이프들 모두가 복구될 수 있다. 특정 모듈의 고장은 예에서 사용된 특정 스트리핑 배열로 스트라이프 "18" 및 "22"로부터의 데이터를 갖는 논리 어레이 위치(6,6)의 경우를 고려함으로써 알 수 있듯이 데이터 무결성에 더 많은 손상일 수 있다. 그러므로, 2개 스트라이프들에 대한 데이터는 고장난 제 2 모듈이 모듈(6,6)인 경우 상실될 수 있다. 이는 49개의 이중 고장 중에서 약 한 개로 발생할 수 있다. 이 확률이 있음을 알면, 하나 이상의 고장 스트라이프에 대해 데이터가 복구될 필요가 있는 모듈로부터 데이터의 복구에 우선순위를 줄 수 있다.
또 다른 관점으로부터, 복구 그룹의 나머지 13개 모듈들 중 어느 하나의 고장으로 단일 스트라이프에서 데이터가 손실될 수 있다. 스트라이프의 폭 (즉, 논리 어드레스 범위에 있는 데이터량)에 따라, 데이터 손실은 일반적으로 데이터 스토리지의 한 스트라이프에 제한될 수 있고, 스트라이프들이 애플리케이션들 또는 가상 사용자들과 관련되면, 데이터 손실은 복수의 사용자들 중 단 하나에 제한될 수 있다.
소정의 성능에 따라, 한 사용자에 한 스트라이프 또는 복수의 스트라이프들이 할당될 수 있어, 사용자를 위한 데이터 손실 패턴이 관리될 수 있다. 일예로, (논리 행렬에서) 각 논리 어드레스 범위가 작으면, 사용자에 연쇄형 스트링으로 있을 수 있는 복수의 스트라이프들이 할당되고, 데이터 손실이 발생하면 광범위하게 퍼진다. 대안으로, 스트라이프 폭이 넓어질 수 있고 데이터 손실이 발생하면, 데이터는 사용자에 대한 데이터의 연속 블록일 수 있다. 선택은 데이터의 특성 및 사용된 저장 구조 백업 타입에 따를 수 있다.
패리티가 (X,6)에 있다고 가정될 경우, 패리티는 스트라이프에 있는 논리 어드레스 범위들 중 어느 하나에 있을 수 있다. 즉, 손실된 "데이터"는 패리티 데이터 또는 패리티가 계산된 데이터일 수 있다.
길이 L=6의 스트라이프가 또한 듀얼 패리티로 구성될 수 있어, 데이터가 패리티를 이용해 복구될 수 없기 전에 스트라이프의 데이터를 포함하는 2개의 모듈들이 고장날 수 있다. 데이터 손실은 데이터가 복구되었기 전에 고장난 특별한 3개 모듈들을 필요로 할 수 있다. 다시 복구될 하나 이상의 데이터 스트라이프가 위치되는 모듈들을 확인할 수 있고 제 3 고장으로 인한 데이터 손실 가능성이 줄어들 수 있도록 이들 스트라이프들을 먼저 복구할 수 있다.
일반적으로 상술한 예들은 단일 어드레스 위치일 수 있거나 물리적 또는 논리적 위치 범위에 걸쳐 분산될 수 있는 물리적 메모리 회로, 또는 논리적 또는 물리적 어드레스 범위를 나타내기 위해 모듈이라는 용어를 사용한다. 물리적 메모리 모듈에 대한 메모리 회로들은 다른 RAID 스트라이프들의 일부이도록 그룹화될 수 있고, 읽기 및 쓰기 및 소거가 발생할 수 있는 동안의 다른 시간 주기를 갖는다. 이와 같이, 모듈이라는 용어의 사용은 편의상 문제이며 특정 배열을 제안하거나 필요로 하도록 의도되어 있지 않다. 마찬가지로, 부차 최적 스루풋 구성들이 다른 이유로 선택될 수 있음이 이해되며, 바람직한 경우 본 명세서에 기술된 구성들과 섞일 수 있다. 메모리 모듈들은 순전히 메모리 기반의 스토리지, 하이브리드 플래시/디스크 스토리지, DRAM/플래시, SLC 플래시/MLC 플래시, MEMS, 위상변화 메모리 등과 같은 혼합된 메모리 구성일 수 있다.
표현의 간명함을 위해, 메모리 모듈은 컨트롤러, 임시 데이터 저장장치 및 비휘발성 스토리지 장치를 갖도록 고려된다. 그러나, 이들 태양들 모두가 특정 물리적 목적으로 구현되어 발견될 수 없다. 대안으로, 하나 이상의 메모리 모듈의 능력은 특정 물리적 목적에서 발견될 수 있다. 구현의 선택은 애플리케이션 종속적이며, 더 조밀하고 더 많은 기능 회로들이 설계 및 생산되면서 시간에 따라 진화할 수 있다.
메모리 모듈 고장이라는 용어는 메모리 모듈의 함수 또는 임의의 메모리 회로가 특정 시스템 기준이 주어지면 데이터를 재건하기 위해 복구 동작이 수행되는 지점에서 열화되는 환경을 나타내는데 사용된다. 그러나, 고장 특성이 허용되면 데이터의 이런 재건은 메모리 모듈의 교체없이 수행될 수 있다. 예컨대, 설치된 복수의 반도체 메모리 패키지들을 갖는 메모리 모듈을 고려하자. 설치된 복수의 반도체 메모리 패키지들 중 하나 이상이 상기 모듈의 나머지의 동작에 무관한 고장을 받을 수 있다. 나머지 스페어 메모리 공간량에 따라, 고장 패키지의 데이터가 복구되고 모듈에 있는 다른 곳에 저장될 수 있다. 따라서, 전체 과정은 필요한 신뢰도, 복구 속도 또는 다른 시스템 성능 기준에 따라 하나 이상의 시스템 구조 레벨들로 수행될 수 있다.
또 다른 태양으로, 모듈에 대한 메모리의 사용 효율은 모듈 레벨 소거 숨기기 구성과 연계해 또는 무관하게 동작하는 정책에 의해 향상될 수 있다. 이들 전략은 다수의 회로 패키지들을 포함하는 모듈내 소거 숨기기 구성을 이용하는 것을 배제하지 않을 수 있다. 패키지 자체가 복수의 다이를 포함할 수 있다. 현재, 시스템의 소정 레벨, 메모리 영역에서, 다이는 소거 또는 쓰기(프로그램) 동작이 수행될 때 읽기 동작이 수행될 수 없도록 제한된다고 가정하자. 상기 구조의 레벨에서, 적어도, 메모리 시스템의 전체 성능을 향상시키는데 다른 정책들이 이용될 수 있다. 이런 구조의 레벨에서 정책을 기술함으로써, 하드웨어 또는 소프트웨어 설계가 정책들을 이용함으로써 추진될 수 있을 경우 메모리 시스템 구조의 상위 레벨에 상기 정책들이 부과될 수 없다고 추정하지 않아야 한다.
특정 시기에 동작을 동기화하지 않고 또는 읽기 동작의 소거 봉쇄를 배제하도록 순차적으로 스트라이프내 동작을 수행하는 다른 수단들 없이 복수의 칩들의 소거 또는 쓰기 동작들이 수행되면, 칩에 대한 소거 동작들 간의 시간은 나타나는 상당한 요청들의 큐 없이 소거 동작을 수행하기에 충분한 평균 속도로 예정될 수 있다. 그러나, 소거 동작들 간의 시간은 유계 랜덤 변수(bounded random variable)로 선택될 수 있다. 이 정책은 RAID 그룹에서 주기적 읽기 봉쇄를 방지하는 경향이 있다.
또 다른 정책은 가비지 컬렉션 속도를 변경하는데 사용될 수 있다. 칩에 대한 쓰기 동작의 회수가 모니터될 수 있고, 성능 속도 또는 가비지 컬렉션의 초기화가 보조맞출 수 있어 기설정된 회수의 쓰기 동작들이 소거 동작들 사이에 수행될 수 있다. 예컨대, 칩상의 소거 블록 크기에 비례하거나 동일한 많은 쓰기 동작이 수행된 후, 소거 동작이 디큐될 수 있다. 다시, 동기 패턴 발현을 방지하기 위해, 이 과정을 위한 임계치로 사용된 실제 쓰기 동작 회수는 유계 랜덤수로 선택될 수 있다. 마찬가지로, 칩에 대한 쓰기 회수에 대한 유사한 임계치를 바탕으로 가비지 컬렉션 과정이 초기화될 수 있다. 이는 여유 블록들의 평균량이 설계 한계내에 유지되도록 하는 경향이 있다.
또 다른 태양으로, 일부 사용자들은 연속 데이터의 큰 블록들을 읽을 수 있다. 비제한적인 예는 이미지 처리 시스템, 비디오 서버 등 일 수 있다. 이런 상황에서, 칩 또는 패키지로부터 읽어질 수 있는 전체 데이터량은 로컬 버스 대역폭으로 제한될 수 있다. 로컬 RAM 버퍼 메모리를 갖는 패키지의 메모리 모듈은 비록 이들이 상기 속도로 전송될 수 없으나 읽기가 최대 속도로 수행될 수 있도록 데이터를 임시로 버퍼시킬 수 있다. 버퍼 메모리에 남은 데이터가 소거 동작 또는 쓰기 동작과 같은 시간 간격으로 최대 버스 대역폭에서 버퍼 메모리로부터 전송될 수 있는 데이터 량을 초과하면, 쓰기 동작의 소거 동작이 읽기 지연을 손상시키지 않고도 소거 또는 쓰기 동작을 위한 계류 요청의 큐로부터 디큐될 수 있다. 이런 식으로, 읽기 버스 대역폭이 완전히 차지될 때의 시간에서 쓰기 또는 소거 동작의 성능을 포함함으로써, 쓰기 또는 소거 동작의 전체 회수가 증가될 수 있다.
쓰기 요청 및 데이터는 읽기 데이터가 모듈로부터 검색되는 동안 모듈에 전달될 수 있기 때문에, 이는 소거 숨기기 기술의 전체 성능이 더 이상 불가능해질 수 있는 임계치를 쓰기 부하가 초과하기 전에 수용될 수 있는 쓰기 부하를 증가시킨다. 이런 측정은 상위레벨 컨트롤 구조로부터 기본적으로 자동으로 동작된다.
상위 레벨 비트들이 하위 레벨 비트들과는 다른 속도로 읽거나 쓰여질 수 있는 MLC 플래시 메모리 또는 다른 메모리 기술이 사용될 때 다른 측정들이 사용될 수 있다. 예컨대, 각 요청은 칩 및 어드레스(하이, 로우)에 의해 저장될 수 있고 각 칩에 대해 큐가 형성될 수 있다. 패키지 및 각 칩에 대한 총 응답시간은 예상된 읽기 시간을 바탕으로 계산될 수 있고, 패키지에 대한 총 응답시간이 각 칩에 대해 계산될 수 있다. 소거 또는 쓰기 동작을 포함한 칩에 대한 응답시간이 특정 읽기 지연보다 길지 않다면, 적절하다면 쓰기 또는 소거 동작이 디큐되어 수행될 수 있다.
상술한 하위 레벨 기술들 중 몇몇은 현저한 쓰기 및 소거 큐들의 추적을 유지함으로써 특징될 수 있고, 적어도 하나의 쓰기 또는 소거 동작을 수행할 때에도 특정 읽기 지연이 달성될 수 있도록 읽기 동작이 충분한 데이터를 버퍼하면, 계류중인 쓰기 또는 소거동작이 수행될 수 있다.
몇몇 데이터베이스 시스템에서, "다시하기(re-do)"가 유지되며, 로그는 기본적으로 각각 및 모든 명령어 및 메모리에 전송된 데이터 요소의 순차적 열거이다. 주기적으로 이 로그는 당업자에 알려진 바와 같이 장기 데이터 보안을 위해 제공되도록 백업 스토리지 디바이스에 대해 체크-포인트된다. 고장이 데이터베이스에 발생하면, 다시하기 로그가 백업 스토리지로부터 검색될 수 있는 상기 데이터베이스의 마지막 유효 이미지로부터 데이터베이스를 재구성하도록 처리될 수 있다. 데이터베이스의 무결성은 유효 다시하기 로그를 갖는 것에 달려 있기 때문에, 스토리지 모듈 고장으로 인한 모듈의 손상은 허용될 수 없다.
종종, 다시하기 로그의 복제가 추가 보안을 위해 유지된다. 다시하기 로그 및 그 복제가 저장되는 스트라이프의 어드레스 공간의 적절한 할당에 의해, 데이터 손실 전에 발생할 수 있는 디바이스 고장 회수가 늘어날 수 있고, 고장 후에 다시하기 로그의 데이터를 복구 및 백업이 촉진될 수 있다. 이렇게 함으로써, 패턴들 중 하나가 소거 숨기기 속성을 유지하도록 계속된다.
상술한 바와 같이, 복수의 스트라이프들이 논리 공간내 모듈에 집중된 스트라이프 클러스터를 바탕으로 구성될 수 있다. 스트라이프 패턴들로 하나 이상의 스트라이프들이 모듈에 중첩될 수 있다. 스트라이프에서 모듈의 개수가 N이고, 패리티 중복 차수가 M이며, 메모리의 L 모듈들이 2개의 스트라이프로부터의 데이터를 포함하면, 고장으로 인한 데이터 손실 확률은 P = (L-M)/(N-M)으로 표현될 수 있다. 즉, 패리티의 순서가 중첩 데이터를 갖는 모듈들 이상이면, 모듈 고장으로 데이터가 손실되지 않게 된다. 일예로, 단일 패리티가 이용되면, 데이터내 한 모듈을 전혀 겹치지 않는 한 구성으로 제 1 고장은 데이터 손실을 유발하지 않는다. 스트라이프들의 데이터가 저장되는 모듈들의 그룹내 2개 모듈 고장이 요구될 수 있다. 2개 모듈들의 중첩이 있다면, 길이 5의 스트라이프와 패리티 1의 순서에 대해, 또 다른 모듈 고장이 복구될 수 없는 데이터 손실을 야기할 수 있는 (2-1)/(6-2)=1/4로 한 번의 기회가 있게 된다.
그런 후 일반적으로, 매우 신뢰할 수 있는 기본 데이터의 스토리지가 요망되는 경우, 이런 듀얼 데이터 손실이 발생하지 않도록 모듈내 패리티의 순서 및 스트라이프의 중첩이 관리되어야 한다. 모듈 고장이 발생하면, 데이터의 복구에 적용될 수 있는 많은 스토리지들(정채들)이 있다. 손실 데이터는 상술한 바와 같이 이용가능한 데이터 영역으로 복구될 수 있다. 대안으로, 복제 스트라이프가 손실 데이터 위치에 대해 읽혀질 수 있고 원래 스트라이프에 있는 손실 데이터를 대신해 삽입될 수 있다. 혹은, 복제 스트라이프로부터의 데이터가 제 1 로그 스트라이프의 패리티로부터 복구된 데이터를 검증하는데 사용될 수 있다. 또 다른 태양으로, 복제 데이터 로그가 제 1 데이터 로그에서의 고장시 스토리지를 백업하도록 체크포인트될 수 있어, 데이터를 보존한다. 상기 방법들의 다양한 조합들이 고려될 수 있고, 한 가지 고려는 메모리 시스템의 다른 동작들의 성능에 최소한의 영향으로 또는 가장 빠른 가능한 시간내에 손실 데이터를 복구할 목적으로 데이터를 복구하거나 2개 로그의 조합으로부터 데이터의 손실 확률을 최소화는 것 중 하나일 수 있다. 가령, 정책은 적어도 하나의 로그에 대한 소거 숨기기를 보유하는 정책일 수 있다. 정책의 선택 또는 정책들의 조합은 사용자 예상에 따라 달라질 수 있고, 사용자는 메모리 시스템의 복수의 사용자들 중 하나일 수 있다.
다양한 정책들의 선택 및 실행을 관리하기 위해, 하나 이상의 사용자들, 데이터, 데이터 충실도, 데이터 신뢰도, 데이터 암호화, 또는 다른 특성이 공통 속성들을 가질 수 있는 RAID 스트라이프들 또는 스트라이프 클러스터들의 선택을 포함한 "스트라이프 그룹"이 정의될 수 있다. 이런 속성들은 또한 응답시간, 읽기지연, 쓰기 대역폭, 블록 크기, 초당 입/출력 동작 등을 포함할 수 있다. 특별한 예는 로직유닛넘버(LUN), 파티션, 또는 데이터의 임의의 다른 관리 또는 성능 그룹핑일 수 있으나, 스트라이프 그룹은 통상적으로 LUN인 것으로 이해되는 구성에 국한되는 것으로 의도되어 있지 않다. 그러나, 스트라이프 그룹은 저장하거나 그렇지 않고 데이터를 조작하는데 사용된 물리적 메모리 영역들로 맵핑할 수 있는 사전정의되거나 확장될 수 있는 (논리 또는 물리) 메모리 영역을 포함할 수 있다.
하나 이상의 사용자가 이 스트라이프 그룹을 공유할 수 있거나, 스트라이프 그룹이 개개의 사용자들에 할당될 수 있으며, 사용자는 메모리 시스템 운영자의 고객, 한 벌의 소프트웨어에 있는 운영 프로그램 등일 수 있다. 모듈 고장의 경우, 어드레스 범위들은 특정 스트라이프 그룹 및 관련된 속성들과 결합될 수 있다. 상기 속성들을 바탕으로, 소정 속성에 따른 스트라이프 그룹의 성능을 유지하기 위해 또는 고장 이전 상태로 성능을 복구하기 위한 정책이 선택될 수 있다. 이 정책은 스트라이프 그룹마다 다를 수 있고 다른 스트라이프 그룹들의 요건을 수용하도록 변경될 수 있다.
본 발명은 상술한 예들로써 설명하였으나, 본 발명은 상기 예에 국한되지 않고 오히려 본 발명의 기술사상으로부터 벗어남이 없이 다양한 변형 또는 변경들이 가능함이 당업자들은 알아야 한다. 따라서, 모든 균등물을 포함한 하기의 특허청구범위는 본 발명의 기술사상과 범위를 정의하도록 되어 있게 의도되어 있다.
Claims (17)
- 데이터 쓰기 및 읽기 능력을 각각 갖는 복수의 메모리 모듈들을 구비하고,
상기 복수의 모듈들로 된 한 모듈 그룹은 사용자 데이터와 상기 사용자 데이터용 패리티 데이터를 저장하며,
모듈 그룹의 쓰기 또는 소거 동작은 읽기 요청시 모든 사용자 데이터, 또는 읽기 요청시 모든 사용자 데이터보다 적은 사용자 데이터와 패리티 데이터가 요청된 사용자 데이터를 제공하도록 구성되고, 요청된 사용자 데이터를 제공하기 위한 시간 지연은 모듈 그룹 중 한 모듈이 소거 상태에 있는 시간 간격 미만인 메모리 시스템. - 제 1 항에 있어서,
모듈 그룹의 모듈들에 읽기 명령을 내리도록 구성된 컨트롤러를 더 구비하고, 쓰기 또는 소거 상태에 있는 한 모듈에 의해 수신된 읽기 명령은 지연시간 이후 또는 읽기 명령을 취소하도록 연이은 명령의 수신 후 모듈에 의해 취소되는 메모리 시스템. - 제 1 항에 있어서,
읽기 명령이 모듈에 계류중인 경우, 읽기 명령을 받은 데이터는 읽기 명령이 수행되거나 취소될 때까지 소거로부터 보호되는 메모리 시스템. - 삭제
- 제 1 항에 있어서,
모듈 그룹으로의 데이터 할당은 논리 어드레스 공간에서의 생성 패턴에 따라 RAID 스트라이프의 메모리 모듈로 사용자 데이터 어드레스와 패리티 데이터 어드레스의 그룹들을 할당하는 것을 포함하는 메모리 시스템. - 제 5 항에 있어서,
복수의 RAID 스트라이프들 중 2개의 스트라이프들이 단 하나의 메모리 모듈을 공유하는 메모리 시스템. - 제 5 항에 있어서,
복수의 RAID 스트라이프들 중 2개의 스트라이프들은 해당 RAID 스트라이프들에 대한 패리티 순서 이하의 많은 메모리 모듈들을 공유하는 메모리 시스템. - 데이터를 쓰고 읽기 위한 능력을 각각 갖는 복수의 메모리 모듈들을 제공하는 단계와;
상기 복수의 메모리 모듈들의 한 모듈 그룹에 데이터와 상기 데이터용 패리티 데이터를 저장하는 단계와;
읽기 요청시 모든 사용자 데이터를 읽거나, 읽기 요청시 모든 사용자 데이터보다 적은 사용자 데이터와 사용자 데이터용 패리티 데이터를 읽는 것 중 하나에 의해, 읽기 요청에 응답하여 사용자 데이터가 제공되도록 모듈 그룹의 소거 동작을 구성하는 단계를 포함하며,
모든 사용자 데이터, 또는 모든 사용자 데이터보다 적은 사용자 데이터와 사용자 데이터용 패리티 데이터는 모듈 그룹 중 한 모듈이 소거 상태에 있는 시간 간격 미만인 시간 구간 내에 읽혀지는, 메모리 시스템에서 데이터 저장 방법. - 제 8 항에 있어서,
모듈 그룹의 모듈들에게 제어장치로부터의 읽기 명령을 내리는 단계; 및
지연시간 이후 또는 읽기 명령을 취소하도록 연이은 명령의 수신 후, 소거 상태에 있는 한 모듈에 의해 수신된 읽기 명령을 취소하는 단계를 더 포함하는, 메모리 시스템에서 데이터 저장 방법. - 제 8 항에 있어서,
읽기 명령이 수행되거나 취소될 때까지 읽기 명령을 받은 데이터를 소거로부터 보호하는 단계를 더 포함하는, 메모리 시스템에서 데이터 저장 방법. - 제 8 항에 있어서,
사용자 데이터와 패리티 데이터를 저장하는 단계는:
논리 어드레스 공간에서의 생성 패턴에 따라 RAID 스트라이프의 메모리 모듈로 사용자 데이터 어드레스와 패리티 데이터 어드레스의 그룹들을 할당하는 단계를 더 포함하는, 메모리 시스템에서 데이터 저장 방법. - 제 11 항에 있어서,
복수의 RAID 스트라이프들 중 2개의 스트라이프들이 단 하나의 메모리 모듈을 공유하는, 메모리 시스템에서 데이터 저장 방법. - 제 11 항에 있어서,
복수의 RAID 스트라이프들 중 2개의 스트라이프들은 해당 RAID 스트라이프들에 대한 패리티 순서 이하의 많은 메모리 모듈들을 공유하는, 메모리 시스템에서 데이터 저장 방법. - 삭제
- 삭제
- 삭제
- 삭제
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US25021609P | 2009-10-09 | 2009-10-09 | |
US61/250,216 | 2009-10-09 | ||
PCT/US2010/052074 WO2011044515A2 (en) | 2009-10-09 | 2010-10-08 | Memory system with multiple striping of raid groups and method for performing the same |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020127009026A Division KR101307953B1 (ko) | 2009-10-09 | 2010-10-08 | Raid 그룹의 여러 스트라이핑을 갖는 메모리 및 그 수행방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20130041314A KR20130041314A (ko) | 2013-04-24 |
KR101411566B1 true KR101411566B1 (ko) | 2014-06-25 |
Family
ID=43857420
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020127009026A KR101307953B1 (ko) | 2009-10-09 | 2010-10-08 | Raid 그룹의 여러 스트라이핑을 갖는 메모리 및 그 수행방법 |
KR1020137005934A KR101411566B1 (ko) | 2009-10-09 | 2010-10-08 | Raid 그룹의 여러 스트라이핑을 갖는 메모리 및 그 수행방법 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020127009026A KR101307953B1 (ko) | 2009-10-09 | 2010-10-08 | Raid 그룹의 여러 스트라이핑을 갖는 메모리 및 그 수행방법 |
Country Status (5)
Country | Link |
---|---|
EP (3) | EP4361815A3 (ko) |
KR (2) | KR101307953B1 (ko) |
CN (1) | CN102667738B (ko) |
ES (1) | ES2972102T3 (ko) |
WO (1) | WO2011044515A2 (ko) |
Families Citing this family (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3438839A1 (en) | 2011-09-30 | 2019-02-06 | Intel Corporation | Presentation of direct accessed storage under a logical drive model |
CN102662608B (zh) | 2012-03-30 | 2015-11-25 | 华为技术有限公司 | 一种降低读延时的方法及装置 |
WO2014008261A1 (en) | 2012-07-03 | 2014-01-09 | Violin Memory, Inc. | Synchronization of a dispersed raid group |
CN103034458B (zh) * | 2012-12-25 | 2015-11-25 | 华为技术有限公司 | 固态硬盘中实现独立磁盘冗余阵列的方法及装置 |
US8554997B1 (en) * | 2013-01-18 | 2013-10-08 | DSSD, Inc. | Method and system for mirrored multi-dimensional raid |
KR102072829B1 (ko) | 2013-06-14 | 2020-02-03 | 삼성전자주식회사 | 저장 장치 및 그것을 포함하는 데이터 저장 시스템의 글로벌 가비지 컬렉션 방법 |
CN104347122B (zh) * | 2013-07-31 | 2017-08-04 | 华为技术有限公司 | 一种消息式内存模组的访存方法和装置 |
CN103902465B (zh) * | 2014-03-19 | 2017-02-08 | 华为技术有限公司 | 一种固态硬盘垃圾回收的方法、系统和固态硬盘控制器 |
US10466913B2 (en) * | 2015-04-29 | 2019-11-05 | EMC IP Holding Company LLC | Method and system for replicating and using grid level metadata in a storage system |
KR102435873B1 (ko) * | 2015-12-18 | 2022-08-25 | 삼성전자주식회사 | 스토리지 장치 및 그것의 리드 리클레임 방법 |
CN106027638B (zh) * | 2016-05-18 | 2019-04-12 | 华中科技大学 | 一种基于混合编码的hadoop数据分发方法 |
CN107666701B (zh) * | 2016-07-31 | 2020-07-31 | 上海朗帛通信技术有限公司 | 一种无线传输的ue和基站中的方法和装置 |
CN106375404B (zh) * | 2016-08-30 | 2019-10-25 | 华为技术有限公司 | 数据存储控制方法、数据存储方法、数据获取方法及装置 |
CN106775481B (zh) * | 2016-12-23 | 2019-11-05 | 华为技术有限公司 | 数据读取方法及设备 |
CN107450852B (zh) * | 2017-07-31 | 2020-03-31 | 郑州云海信息技术有限公司 | 一种存储空间处理方法、装置和设备 |
US10585749B2 (en) * | 2017-08-10 | 2020-03-10 | Samsung Electronics Co., Ltd. | System and method for distributed erasure coding |
CN108519926B (zh) * | 2018-03-31 | 2020-12-29 | 深圳忆联信息系统有限公司 | 一种自适应的raid分组计算方法和装置 |
CN110399310B (zh) * | 2018-04-18 | 2021-08-31 | 杭州宏杉科技股份有限公司 | 一种存储空间的回收方法及装置 |
CN109445681B (zh) | 2018-08-27 | 2021-05-11 | 华为技术有限公司 | 数据的存储方法、装置和存储系统 |
CN115576867A (zh) * | 2018-08-28 | 2023-01-06 | 上海忆芯实业有限公司 | 存储设备的扩展地址空间 |
US11106578B2 (en) * | 2018-09-05 | 2021-08-31 | SK Hynix Inc. | Memory controller, memory system and operating method of memory device |
CN111949558B (zh) * | 2019-05-16 | 2023-11-21 | 兆易创新科技集团股份有限公司 | 一种垃圾数据回收方法、装置和存储设备 |
CN113760186A (zh) * | 2019-07-30 | 2021-12-07 | 华为技术有限公司 | 数据存储方法、装置、计算设备、存储系统及存储介质 |
CN110570898A (zh) * | 2019-08-13 | 2019-12-13 | 深圳市金泰克半导体有限公司 | 检测存储器数据处理速度的方法及装置 |
CN112748858B (zh) * | 2019-10-30 | 2024-04-19 | 伊姆西Ip控股有限责任公司 | 用于管理盘阵列的方法、电子设备和计算机程序产品 |
US11334434B2 (en) * | 2020-02-19 | 2022-05-17 | Seagate Technology Llc | Multi-level erasure system with cooperative optimization |
KR20220007206A (ko) | 2020-07-10 | 2022-01-18 | 에스케이하이닉스 주식회사 | 데이터 저장 장치 및 그 동작 방법 |
CN112306417B (zh) * | 2020-11-09 | 2022-09-20 | 苏州浪潮智能科技有限公司 | 一种ssd缩短上电恢复时间的方法 |
CN112540799A (zh) * | 2020-12-02 | 2021-03-23 | 深圳市硅格半导体有限公司 | 启动数据的管理方法、系统、终端设备及存储介质 |
CN113626248B (zh) * | 2021-06-30 | 2023-07-18 | 苏州浪潮智能科技有限公司 | 一种raid中条带数据不一致的修复方法和系统 |
CN116382576B (zh) * | 2023-03-17 | 2024-02-27 | 平头哥(上海)半导体技术有限公司 | 存储控制芯片、固态硬盘和相关方法 |
CN117873378A (zh) * | 2023-12-14 | 2024-04-12 | 天翼云科技有限公司 | 一种基于纠删码的分布式存储系统读优化方案 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6425052B1 (en) * | 1999-10-28 | 2002-07-23 | Sun Microsystems, Inc. | Load balancing configuration for storage arrays employing mirroring and striping |
US20020103966A1 (en) | 2000-12-04 | 2002-08-01 | Wu Chia Y. | System and method for efficient data mirroring in a pair of storage devices |
US20070089045A1 (en) | 2001-12-28 | 2007-04-19 | Corbett Peter F | Triple parity technique for enabling efficient recovery from triple failures in a storage array |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
ATE222384T1 (de) * | 1993-06-03 | 2002-08-15 | Network Appliance Inc | Verfahren und dateisystem zur zuordnung von datei-blöcken zu speicherplatz in einem raid- plattensystem |
US8281022B1 (en) * | 2000-06-30 | 2012-10-02 | Emc Corporation | Method and apparatus for implementing high-performance, scaleable data processing and storage systems |
US6760807B2 (en) * | 2001-11-14 | 2004-07-06 | International Business Machines Corporation | System, apparatus and method providing adaptive write policy for disk array controllers |
JP4646539B2 (ja) | 2004-03-29 | 2011-03-09 | エーユー オプトロニクス コーポレイション | 液晶表示装置とその製造方法 |
US8200887B2 (en) * | 2007-03-29 | 2012-06-12 | Violin Memory, Inc. | Memory management system and method |
US7822921B2 (en) * | 2006-10-31 | 2010-10-26 | Netapp, Inc. | System and method for optimizing write operations in storage systems |
US8095763B2 (en) | 2007-10-18 | 2012-01-10 | Datadirect Networks, Inc. | Method for reducing latency in a raid memory system while maintaining data integrity |
US20090172335A1 (en) * | 2007-12-31 | 2009-07-02 | Anand Krishnamurthi Kulkarni | Flash devices with raid |
KR101638764B1 (ko) | 2008-12-19 | 2016-07-22 | 휴렛 팩커드 엔터프라이즈 디벨롭먼트 엘피 | 균일한 판독 대기시간을 위한 중복 데이터 저장 |
-
2010
- 2010-10-08 EP EP23214266.1A patent/EP4361815A3/en active Pending
- 2010-10-08 ES ES20168297T patent/ES2972102T3/es active Active
- 2010-10-08 EP EP10822795.0A patent/EP2467783B1/en active Active
- 2010-10-08 EP EP20168297.8A patent/EP3696676B1/en active Active
- 2010-10-08 CN CN201080045465.9A patent/CN102667738B/zh active Active
- 2010-10-08 KR KR1020127009026A patent/KR101307953B1/ko active IP Right Grant
- 2010-10-08 KR KR1020137005934A patent/KR101411566B1/ko active IP Right Grant
- 2010-10-08 WO PCT/US2010/052074 patent/WO2011044515A2/en active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6425052B1 (en) * | 1999-10-28 | 2002-07-23 | Sun Microsystems, Inc. | Load balancing configuration for storage arrays employing mirroring and striping |
US20020103966A1 (en) | 2000-12-04 | 2002-08-01 | Wu Chia Y. | System and method for efficient data mirroring in a pair of storage devices |
US20070089045A1 (en) | 2001-12-28 | 2007-04-19 | Corbett Peter F | Triple parity technique for enabling efficient recovery from triple failures in a storage array |
Also Published As
Publication number | Publication date |
---|---|
KR20120086695A (ko) | 2012-08-03 |
CN102667738B (zh) | 2018-07-17 |
EP2467783B1 (en) | 2020-05-27 |
EP3696676A1 (en) | 2020-08-19 |
CN102667738A (zh) | 2012-09-12 |
EP4361815A2 (en) | 2024-05-01 |
KR101307953B1 (ko) | 2013-09-12 |
WO2011044515A2 (en) | 2011-04-14 |
EP3696676B1 (en) | 2023-12-06 |
WO2011044515A3 (en) | 2011-10-27 |
EP2467783A2 (en) | 2012-06-27 |
EP2467783A4 (en) | 2013-05-29 |
KR20130041314A (ko) | 2013-04-24 |
ES2972102T3 (es) | 2024-06-11 |
EP4361815A3 (en) | 2024-06-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101411566B1 (ko) | Raid 그룹의 여러 스트라이핑을 갖는 메모리 및 그 수행방법 | |
US10372366B2 (en) | Memory system with multiple striping of RAID groups and method for performing the same | |
US10761766B2 (en) | Memory management system and method | |
US11960743B2 (en) | Memory system with multiple striping of RAID groups and method for performing the same | |
US8839028B1 (en) | Managing data availability in storage systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A107 | Divisional application of patent | ||
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20170330 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20180329 Year of fee payment: 5 |
|
FPAY | Annual fee payment |
Payment date: 20190418 Year of fee payment: 6 |