KR102133316B1 - 메모리 시스템 관리 - Google Patents

메모리 시스템 관리 Download PDF

Info

Publication number
KR102133316B1
KR102133316B1 KR1020157000375A KR20157000375A KR102133316B1 KR 102133316 B1 KR102133316 B1 KR 102133316B1 KR 1020157000375 A KR1020157000375 A KR 1020157000375A KR 20157000375 A KR20157000375 A KR 20157000375A KR 102133316 B1 KR102133316 B1 KR 102133316B1
Authority
KR
South Korea
Prior art keywords
memory
data
controller
gsn
controllers
Prior art date
Application number
KR1020157000375A
Other languages
English (en)
Other versions
KR20150036018A (ko
Inventor
존 씨 알 베넷
다니엘 씨 비더만
다비드 엠 스미스
Original Assignee
바이올린 메모리 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 바이올린 메모리 인코포레이티드 filed Critical 바이올린 메모리 인코포레이티드
Publication of KR20150036018A publication Critical patent/KR20150036018A/ko
Application granted granted Critical
Publication of KR102133316B1 publication Critical patent/KR102133316B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • G06F11/1092Rebuilding, e.g. when physically replacing a failing disk

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

메모리 시스템 및 상기 시스템을 관리하는 방법이 기술되어 있다. 시스템은 RAID 컨트롤러일 수 있는 복수의 시스템 컨트롤러들이 외부 환경으로부터 요청을 수신하고 데이터가 메모리 모듈에 저장될 수 있도록 상기 요청을 복수의 메모리 모듈로 분배하도록 구성된다. 글러벌 시퀀스 넘버가 데이터 스트립의 데이터에 할당되어 데이터 스트립과 관련된 동작들이 순서대로 수행되어 데이터가 일치하게 남아 있다. 복수의 시스템 컨트롤러들은 도메인과 복수의 메모리 컨트롤러들을 포함하고, 복수의 도메인들은 적어도 하나의 공통 메모리 모듈을 포함할 수 있다. 복수의 컨트롤러 그룹들은 글로벌 시퀀스 넘버의 할당을 조정하기 위해 스위치 또는 대표 컨트롤러와 통신할 수 있다.

Description

메모리 시스템 관리{MEMORY SYSTEM MANAGEMENT}
본 출원은 디지털 데이터 메모리 시스템의 아키텍쳐 및 관리에 관한 것이다.
현대 메모리 시스템 아키텍쳐는 비용, 성능 및, 가령, 시스템의 총 메모리 용량 업그레이드 능력 간에 상쇄를 검증할 수 있다. 메모리 용량은 통상 커넥터/소켓 인터페이스를 갖는 메모리 모듈이나 카드를 통해 업그레이드된다. 종종 이들 메모리 모듈들은 후면에 배치된 버스나 인터커넥팅 와이어링에 연결되어 시스템 자원을 효율적으로 이용한다. 업그레이드 능력 이외에, 이들 현대 메모리 시스템들 대부분은 또한 그래픽과 같은 대역폭 집중 애플리케이션이나 데이터 센터 메모리를 위해 높은 스루풋을 필요로 한다.
고체상태 메모리 시스템의 설계시 고려될 수 있는 시스템 자원들은 가령 집적회로 다이 영역, 패키지 핀, 신호라인 트레이스, 커넥터, 후면 보드영역 및 전력과 응답속도를 포함한다.
컴퓨팅 및 통신 시스템들에 사용되는 메모리들은 모든 타입의 RAM(가령, S-RAM, D-RAM); PROM; EPROM; 플래시 메모리(FLASH), MRAM(Magnetoresistive Random Access Memory), 강유전성 RAM(FRAM 또는 FeRAM) 뿐만 아니라 NRAM(Nanotube-based/ Nonvolatile RAM) 및 PRAM(Phase-change memory)을 포함한 온갖 종류의 자기 메모리, 및 자기 디스크 저장매체를 포함하나 이에 국한되지 않는다. 장래에 사용하기 적절해질 수 있는 다른 메모리들로 양자 디바이스 등을 포함한다.
복수의 메모리 컨트롤러들과 통신하는 복수의 시스템 컨트롤러들을 포함한 메모리 시스템이 개시되어 있다. 메모리 컨트롤러들은 복수의 메모리 모듈들과 통신한다.
복수의 시스템 컨트롤러들 중 한 시스템 컨트롤러로부터의 동일한 명령은 복수의 데이터 패킷들 중 한 데이터 패킷과 연관되고 복수의 메모리 컨트롤러들 중 적어도 하나로 발송될 수 있다. 명령과 임의의 관련된 데이터가 의도된 수신 메모리 컨트롤러들 모두에 의해 수신되고 시스템 컨트롤러에 확인응답되면, 동일한 고유 글로벌 시퀀스 넘버(Global Sequence Number,GSN)가 메모리 컨트롤러들 각각의 동일한 명령에 할당된다.
몇몇 예에서, 동일한 명령은 하나 이상의 메모리 컨트롤러로 전송된 복수의 READ 명령들일 수 있고, 각각의 READ 명령들과 관련된 어드레스에 따라 메모리 모듈들로 보내질 수 있다. 이는 RAID 그룹의 스트라이프의 스트립들을 수신하는데 이용될 수 있다.
다른 예에서, 동일한 명령은 하나 이상의 메모리 컨트롤러에 보내지고 각각의 WRTIE 명령과 관련된 어드레스에 따라 메모리 모듈로 보내진 복수의 WIRTE 명령일 수 있다. 각각의 WRITE 명령은 RAID 그룹의 스트라이프 중 한 스트라이프일 수 있는 관련된 데이터 페이로드를 가질 수 있다. 이는 RAID 그룹의 스트라이프의 스트립들을 쓰기 위해 사용될 수 있다.
다른 예로, 메모리 컨트롤러에 전송된 각각의 READ 또는 WRITE 명령은 목적지 메모리 모듈에서 동작들의 시퀀싱을 제어하기 위해 장소 마커들로서 동작하는 것을 포함한 다른 속성들을 가질 수 있다.
또한, 다른 타입들의 명령 그룹은 동일한 명령으로 처리될 수 있고, 상기 명령은 다른 타입들의 명령들이 전체 메모리 환경에 대해 일치하고 조정되는 식으로 메모리 상에 실행될 필요가 있는 동작의 일부이다. 이 일치는 동일한 GSN 또는 순차 GSN과 동일한 명령을 포함한 명령 그룹을 할당함으로써 달성될 수 있다.
글로벌 시퀀스 넘버는 시스템 컨트롤러의 도메인에 대해 로컬적으로 고유하고 우선순위와 같은 특징 그룹에 대해 로컬적으로 고유할 수 있다. 각 메모리 컨트롤러에서, 명령 및 임의의 관련된 데이터는 증가하는 GSN 순으로 할당되는 메모리 모듈로 전송된다.
메모리 모듈에서, GSN은 논리 블록 어드레스에 대해 수행된 동작들의 차례를 지시하는데 사용될 수 있어, 메모리 시스템으로 입력시 데이터의 시간 화살표가 쓰거나 읽혀지는 데이터에 대해 보유된다. 데이터 판독시, 데이터가 시스템 컨트롤러에 신뢰할 수 있게 수신되었다면, 시스템 컨트롤러는 데이터가 이용될 수 있 때 데이터를 출력할 수 있다.
또 다른 태양으로, GSN은 명령을 메모리 컨트롤러로 전송하기 전에 동일한 명령에 할당될 수 있다.
외부 소스로부터 요청을 수신하는 단계; 상기 요청을 메모리 시스템의 복수의 메모리 컨트롤러들 중 한 메모리 컨트롤러의 동작에 대한 적어도 하나의 명령으로 변환하는 단계; 상기 명령을 메모리 컨트롤러들 중 적어도 하나로 전송하는 단계; 명령이 전송된 메모리 컨트롤러 모두들로부터 명령 수신의 확인응답을 수신하는 단계; 글로벌 시퀀스 넘버(GSN)를 명령에 할당하는 단계; GSN을 메모리 컨트롤러의 명령과 연관시키는 단계; 및 메모리 컨트롤러와 통신하는 각 메모리 모듈에 대해, 최하위 GSN을 갖고 메모리 모듈로 어드레스된 상기 명령을 메모리 모듈로 전송하는 단계를 포함하는 메모리 시스템 동작 방법이 개시되어 있다.
또 다른 태양으로, 메모리 시스템은 복수의 컨트롤러들; 복수의 컨트롤러들 중 적어도 하나와 통신하는 복수의 메모리 채널 컨트롤러들; 및 복수의 메모리 모듈들을 구비한다. 메모리 모듈 그룹은 복수의 메모리 채널 컨트롤러들 중 한 메모리 채널 컨트롤러과 연관되고, RAID된 데이터 블록의 스트립의 개개의 스트라이프들과 패리티 스트립은 메모리 채널 컨트롤러들 중 적어도 하나로 보내진다. 스트라이프들이 메모리 컨트롤러에 의해 수신된 후 동일한 글로벌 시퀀스 넘버(GSN)가 각각의 스트라이프들에 할당된다.
또 다른 태양으로, 메모리 시스템은 복수의 전자 섀시를 구비하고, 각 섀시는 복수의 컨트롤러들을 더 포함한다. 복수의 메모리 채널 컨트롤러들은 복수의 컨트롤러들 중 적어도 일부 및 복수의 메모리 모듈들과 통신하고, 메모리 모듈 그룹은 복수의 메모리 채널 컨트롤러들 중 적어도 하나의 메모리 채널 컨트롤러들과 연관된다; RAID된 데이터 블록의 스트라이프의 개개의 스트립과 데이터 블록에 대한 패리티 스트립은 메모리 채널 컨트롤러들 중 적어도 하나로 보내지고, 스트립이 메모리 컨트롤러에 의해 수신된 후 동일한 글로벌 시퀀스 넘버(GSN)가 각각의 스트립에 할당된다. GSN은 적어도 메모리 시스템에 고유하다.
메모리 시스템은 RAID된 데이터 블록의 스트립이 보내지는 제 1 메모리 컨트롤러가 복수의 전자 섀시 중 제 1 전자 섀시에 있고, RAID된 데이터 블록의 스트립이 보내지는 제 2 메모리 컨트롤러는 복수의 전자 섀시 중 제 2 전자 섀시에 있도록 동작가능하게 구성될 수 있다.
또 다른 태양으로, 복수의 컨트롤러들; 복수의 메모리 모듈들; 및 복수의 메모리 모듈들 중 적어도 일부와 통신하는 복수의 메모리 컨트롤러들을 포함하는 메모리 시스템이 기술되어 있다. 데이터 블록의 개개의 스트라이프들은 복수의 컨트롤러들 중 한 컨트롤러에 의해 수신된다. 데이터 블록의 개개의 스트립들은 메모리 컨트롤러를 통해 복수의 메모리 모듈 그룹으로 보내질 수 있고, 스트립들이 메모리 컨트롤러에 의해 수신된 후 동일한 글로벌 시퀀스 넘버(GSN)가 데이터 블록의 각각의 스트립들에 할당된다. GSN은 단조 증가하는 값일 수 있고 적어도 메모리 시스템의 도메인에 고유할 수 있다.
메모리 모듈은 그룹으로 할당될 수 있고, 제 1 메모리 모듈 그룹은 제 1 RAID 그룹을 포함하고, 제 2 메모리 모듈 그룹은 제 2 RAID 그룹을 포함한다. 제 1 및 제 2 그룹은 메모리 모듈을 공유할 수 있다. 제 1 컨트롤러는 제 1 RAID 스트라이프의 데이터 스트립을 제 1 메모리 모듈 그룹으로 그리고 제 2 RAID 스트라이프의 데이터 스트립을 제 2 메모리 모듈 그룹으로 전송할 수 있다. 제 2 컨트롤러는 제 1 RAID 스트라이프의 데이터 스트립을 제 1 메모리 모듈 그룹으로 그리고 제 2 RAID 스트라이프의 데이터 스트립을 제 2 메모리 모듈 그룹으로 전송할 수 있다. RAID 스트라이프의 데이터 스트립은 계산된 중복 값을 갖는 스트립을 포함할 수 있다.
컨트롤러에 의해 요청된 읽기 및 쓰기 동작들은 각각의 메모리 컨트롤러 또는 메모리 모듈에서 GSN 순서대로 메모리 모듈들에 의해 수행된다. GSN은 프로토콜에 따라 할당될 수 있다. 이런 프로토콜은 제 1 컨트롤러를 이용해 데이터 블록의 데이터를 메모리 컨트롤러의 그룹으로 전송하도록 동작할 수 있고, 메모리 컨트롤러 그룹은 데이터 블록의 수신을 확인응답하도록 동작할 수 있다. 제 1 컨트롤러는 데이터 블록의 데이터 스트립을 메모리 컨트롤러 그룹으로 전송하도록 동작할 수 있고, 메모리 컨트롤러 그룹은 데이터 블록의 스트립들의 수신을 확인응답하도록 동작할 수 있다. GSN의 할당 및 배정은 주기 동안 확인응답된 전송을 위해 각각의 컨트롤러에 의해 요구된 GSN 값들의 번호가 결정되는 주기적 기반으로 수행될 수 있다. 프로토콜은 상기 주기동안 각 컨트롤러에 할당된 GSN 값들의 번호를 조정하고, GSN 값들은 시간 순서로 메모리 컨트롤러에 의해 이전에 확인응답된 데이터 스트립들과 순차적으로 연관된다.
컨트롤러는 전용 통신채널을 이용해 또는 컨트롤러와 클라이언트 간에 또는 컨트롤러와 메모리 컨트롤러 간에 연결 패브릭을 이용해 라운드-로빈(round-robin) 방식으로 서로 통신할 수 있다. 연결 패브릭은 PCIe 버스일 수 있다.
대안으로, 전용 통신 네트워크는 컨트롤러와 메모리 컨트롤러 사이에 배치될 수 있어 GSN 할당 프로토콜을 실행되도록 메모리 컨트롤러 및 컨트롤러에 의해 데이터의 수신에 대한 확인응답을 용이하게 한다. 통신은 주기적으로 실행되도록 제한될 수 있다.
복수의 컨트롤러들은 서버, 컴퓨터 시스템일 수 있는 복수의 클라이언트들과 통신될 수 있다. 클라이언트는 메모리 시스템의 하나 이상의 컨트롤러 또는 네트워크 인터페이스를 통해 데이터 및 동작 요청의 다른 소스들과 통신될 수 있다. 네트워크 인터페이스는 인터넷과 같은 LAN, WAN일 수 있다.
메모리 컨트롤러는 GSN을 이용해 캐시에 있는 데이터의 블록 어드레스에 대한 데이터를 이용해 데이터의 블록 어드레스에 대한 현저한 쓰기 요청보다 더 낮은 GSN을 갖는 데이터의 블록 어드레스에 대한 읽기 응답을 최적화할 수 있다. 동일한 데이터의 어드레스 블록에 대한 또 다른 쓰기 요청보다 더 낮은 GSN을 가지나 데이터 블록의 어드레스에 대한 인터리빙 읽기 요청을 갖지 않는 쓰기 요청은 확인응답되고 폐기될 수 있다. 이는 논리 메모리 위치에 단지 겹쳐쓰는 복수의 쓰기 요청들을 방지한다.
제 1 컨트롤러 그룹, 상기 제 1 컨트롤러 그룹과 소통하는 제 1 메모리 컨트롤러 그룹, 및 제 1 메모리 컨트롤러 그룹 중 적어도 하나와 소통하는 제 1 메모리 모듈 그룹을 갖는 메모리 시스템의 또 다른 구성이 기술되어 있다. 메모리 시스템은 제 2 컨트롤러 그룹, 상기 제 1 컨트롤러 그룹과 소통하는 제 2 메모리 컨트롤러 그룹, 및 제 2 메모리 컨트롤러 그룹 중 적어도 하나와 소통하는 제 2 메모리 모듈 그룹을 더 가질 수 있다.
데이터 블록의 개개의 스트립들은 복수의 메모리 모듈 그룹으로 보내지고, 메모리 컨트롤러에 의해 스트립들이 수신된 후 동일한 글로벌 시퀀스 넘버(GSN)가 데이터 블록의 각각의 스트립들에 할당된다. 데이터 블록의 스트립들은 데이터 블록의 패리티 스트립을 포함하고 복수의 메모리 모듈 그룹은 RAID 그룹이다.
메모리 시스템은 각각의 컨트롤러 및 제 1 및 제 2 컨트롤러 및 메모리 컨트롤러 그룹의 각각의 메모리 컨트롤러들과 통신하는 스위치를 더 포함하고, 상기 스위치는 메모리 컨트롤러에 의해 수신된 데이터 블록의 스트립들의 보고를 수신하도록 구성되며, 데이터 블록의 스트립들 모두의 성공적인 수신이 메모리 컨트롤러들에 의해 스위치에 확인응답 되고나면 데이터 블록의 각각의 스트립들에 동일한 GSN을 할당하도록 구성된다.
제 1 컨트롤러 그룹 및 제 2 컨트롤러 그룹은 GSN을 할당하도록 동작될 수 있고, 제 1 및 제 2 컨트롤러 그룹은 라운드 로빈 방식으로 동작을 수행한다.
또 다른 태양으로, 각각의 제 1 및 제 2 컨트롤러 그룹들 중 한 컨트롤러와 통신하는 스위치는 메모리 컨트롤러에 의해 수신된 데이터 블록의 스트립에 해당하는 일련의 GSN의 할당을 위한 요청을 수신하도록 구성될 수 있다. 할당된 GSN의 동일한 GSN이 데이터 블록의 스트립들에 할당된다.
또 다른 태양으로, 각각의 제 1 또는 제 2 컨트롤러 그룹들 중 한 컨트롤러 및 한 메모리 컨트롤러와 통신하는 스위치는 제 1 또는 제 2 컨트롤러 그룹의 한 컨트롤러로부터 메모리 모듈로 데이터 블록의 스트립들의 전송 보고를 수신하도록 구성될 수 있고, 제 1 또는 제 2 메모리 모듈 그룹 중 한 메모리 모듈은 데이터 블록의 데이터 스트립들의 수신을 보고할 수 있다. 스위치는 GSN을 할당하도록 구성될 수 있고, 동일한 GSN이 데이터 블록의 스트립들에 할당된다.
복수의 컨트롤러, 복수의 메모리 컨트롤러, 및 복수의 메모리 모듈을 포함한 메모리 시스템 동작 방법이 개시되어 있다. 메모리 시스템은 컨트롤러로부터 메모리 컨트롤러 그룹으로 스트립을 포함한 데이터 스트립을 전송하는 단계; 메모리 컨트롤러 그룹의 각 메모리 컨트롤러에 의해 스트라이프의 스트립의 수신을 컨트롤러에 확인응답하는 단계; 각각의 복수의 컨트롤러들에 의해 전송된 많은 확인응답된 스트라이프들을 주기적으로 판단하고, 일련의 글로벌 시퀀스 넘버(GSN)를 확인응답된 스트라이프 넘버에 해당하는 각 컨트롤러에 할당하는 단계; 및 동일한 GSN을 메모리 컨트롤러 그룹에서 스트라이프의 각각의 스트립들과 연관시키는 단계로 동작할 수 있고, 메모리 컨트롤러 그룹의 각 메모리 컨트롤러는 메모리 모듈 그룹과 통신한다.
메모리 컨트롤러에 수신된 스트립들은 전송이 GSN 값의 순서이도록 메모리 모듈 그룹으로 전송된다. 컨트롤러들은 할당된 GSN 값의 넘버가 아직 GSN을 할당하지 않은 확인응답된 스트라이프들의 넘버와 같도록 각 컨트롤러에 일련의 GSN 값을 할당하기 위해 라운드-로빈 방식으로 서로 통신할 수 있고, GSN의 시작은 이전 컨트롤러에서 GSN의 값에서 단조 증가한다. 할당을 수행한 후, 시스템은 라운드 로빈의 컨트롤을 다음 컨트롤러로 바이패스시킴으로써 동작한다.
데이터 스트립은 사용자 데이터에 대한 중복 데이터를 포함한 RAID 스트라이프이고, 메모리 모듈 그룹은 RAID 그룹이다.
컨트롤러 그룹 중 한 컨트롤러는 컨트롤러 그룹 중 각각의 다른 컨트롤러들과 그리고 메모리 컨트롤러 그룹들과 통신하고, 모든 컨트롤러 그룹의 확인응답된 스트라이프들의 넘버를 주기적으로 판단하며, 프로토콜에 따라 컨트롤러의 확인응답된 스트라이프들에 일련의 GSN 값들을 할당하고, GSN 값을 메모리 컨트롤러 그룹으로 전송함으로써 동작된다.
또 다른 태양으로, 복수의 컨트롤러들, 복수의 메모리 컨트롤러들, 복수의 메모리 모듈들, 및 공통 스위치를 포함한 메모리 시스템 동작방법은 컨트롤러로부터 적어도 하나의 메모리 컨트롤러로 스트라이프를 포함한 데이터 스트립을 전송하는 단계; 스트라이프의 스트립들의 수신을 공통 스위치에 확인응답하는 단계; 및 스트라이프의 스트립들에 고유 GSN을 할당하는 단계를 포함한다. GSN의 수치는 단조 증가할 수 있다.
본 발명의 내용에 포함됨.
도 1은 서버와 메모리 시스템을 포함한 컴퓨팅 시스템의 블록도를 도시한 것이다.
도 2는 RAID 컨트롤러와 복수의 메모리 모듈들을 포함한 저장 메모리를 갖는 대표적인 메모리 시스템의 블록도를 도시한 것이다.
도 3은 메모리 모듈이 멀티루트 트리를 통해 메모리 컨트롤러에 연결된 예시적인 저장 메모리를 도시한 것이다.
도 4는 메모리 모듈이 선형 버스를 통해 메모리 컨트롤러에 연결된 예시적인 저장 메모리를 도시한 것이다.
도 5는 복수의 RAID 컨트롤러들이 통신 매체를 통해 복수의 저장 메모리 유닛들과 통신하는 예시적인 저장 시스템을 도시한 것이다.
도 6은 데이터가 패리티 스트립을 포함한 스트립들에 형성되고 로컬 시퀀스 넘버(LSN)를 할당한 RAID 컨트롤러의 버퍼 영역의 도면으로, 수신 메모리 모듈에 의해 스트립들의 확인응답 상태가 도시되어 있다.
도 7은 다른 데이터 칭크가 또 다른 RAID 컨트롤러에 LSN 로컬을 할당한 또 다른 RAID 컨트롤러의 버퍼영역의 도면이다.
도 8은 목적지 메모리 컨트롤러들 모두에 확인응답된 데이터 중 일부는 GSN을 할당한 반면, 다른 데이터는 GSN의 할당을 대기하는, 복수의 RAID 컨트롤러들로부터 수신된 데이터를 도시한 메모리 컨트롤러의 버퍼영역의 도면이다.
도 9는 메모리 컨트롤러에 의해 확인응답된 데이터에 GSN의 할당을 위한 라운드-로빈 방식의 RAID 컨트롤러의 배열을 도시한 것이다.
도 10은 메모리 컨트롤러에 의해 확인응답된 데이터에 GSN의 할당을 위한 스타 형상(순서화 평면)의 RAID 컨트롤러의 배열을 도시한 것이다.
도 11은 타임슬롯식 프로토콜이 순서화 평면에 사용되는 메모리 컨트롤러들과 RAID 컨트롤로 간의 통신을 도시한 타이밍 도면이다.
도 12는 대표적인 메모리 모듈의 블록도이다.
도 13은 메모리 모듈에서 GSN에 의도된 갭들을 식별하기 위해 메모리 컨트롤러(MC)에 의해 할당된 메모리 모듈 일련번호(MMSN)가 사용되는, 특정 시기에 대표적인 메모리 모듈 데이터 버퍼의 컨텐츠를 도시한 것이다.
도 14는 도 13의 MMSN 시퀀스가 GSN 시퀀스에서 국제적 갭을 식별하는데 사용되고 시퀀스가 또한 GSN(3016 및 3017)의 고장난 수신을 수용하도록 재정렬된. 특정 시기에 대표적인 메모리 모듈 데이터 버퍼의 컨텐츠를 도시한 것이다.
도 15는 입력 스위치 또는 네트워크가 RAID 컨트롤러의 중복 동작을 제공하는데 사용되는 메모리 시스템의 일예를 도시한 것이다.
도 16은 다양한 동작들은 FLASH 메모리에 액세스하지 않고도 재순서화되거나 수행되는 메모리 모듈 데이터 버퍼의 컨텐츠를 도시한 것이다.
도 17은 공통 GSN 할당 프로토콜을 관리하기 위한 복수의 메모리 시스템들 간에 라운드-로빈 통신 프로세스의 흐름도이다.
도 18은 복수의 메모리 시스템들의 메모리 채널 컨트롤러들과 각각의 RAID 컨트롤러들이 공통 GSN 시퀀스를 메모리 시스템의 앙상블에 할당하는데 사용된 스위치와 통신하는 배열을 도시한 것이다.
도 19는 메모리 시스템들 각각의 메모리 채널 컨트롤러와 RAID 컨트롤러가 공통 GSN 시퀀스를 메모리 시스템의 앙상블에 할당하는데 사용된 스위치와 통신하는 배열을 도시한 것이다.
예시적인 실시예들은 도면을 참조로 더 잘 이해될 수 있으나, 이들 실시예들은 제한적인 특성이 되게 의도되어 있지 않다. 동일하거나 다른 도면에서 동일한 번호의 요소들은 등가의 기능을 수행한다. 요소들은 숫자로 또는 두문자로, 또는 둘 다로 표시되며, 표현 간의 선택은 단지 명확히 하기 위한 것이므로, 숫자로 표시된 요소와 두문자 또는 문자숫자 표시자로 표시된 동일한 요소는 이를 기초로 구별되지 않아야 한다.
실제 예를 설명할 때, 예제는 특별한 특징, 구조 또는 특성을 포함할 수 있으나, 모든 예가 반드시 특별한 특징, 구조 또는 특성을 포함할 필요는 없다. 2 이상의 예들의 특징, 구조 또는 특성 또는 예들의 태양들은, 이런 조합이 명백히 배제되는 경우를 제외하고, 조합되지 않아야 하거나 조합될 수 없는 제안 또는 의미로 해석되지 않아야 한다. 특별한 특징, 구조 또는 특성은 예와 연계해 설명될 경우, 당업자는 명백히 본 명세서에 나타내 바와 같든 아니든 다른 예들과 연계해 이런 특징, 구조 또는 특성을 실시할 수 있다.
기술된 방법 및 도면에 도시된 장치는 기계 실행가능한 명령어들; 가령, 소프트웨어, 하드웨어, 또는 이 둘의 조합으로 구성되거나 구현될 수 있음을 알 것이다. 명령어는 명령어들로 프로그램되는 범용 컴퓨터, DSP 또는 어레이 프로세서와 같은 특수용 프로세서, ASIC, FPGA 등이 기술된 동작을 수행하게 하는데 사용될 수 있다. 대안으로, 동작은 기술된 동작을 수행하기 위한 하드웨어 로직 또는 펌웨어 명령어를 포함한 특정한 하드웨어 구성요소들에 의해 수행될 수 있거나, 그렇게 하도록 구성될 수 있거나, 프로그램된 컴퓨터 구성요소들 및 아날로그 회로를 포함할 수 있는 고객 하드웨어 구성요소의 임의의 조합에 의해 수행될 수 있다.
상기 방법은, 적어도 부분적으로, 상기 방법을 수행하기 위해 컴퓨터(또는 기타 전자 디바이스들) 또는 FPGA 등을 프로그램하는데 사용될 수 있는 명령어를 저장한 기계 판독가능한 매체를 포함할 수 있는 컴퓨터 프로그램 제품으로서 제공될 수 있다. 이 명세서의 목적을 위해, "기계판독가능한 매체"라는 용어는 컴퓨터 장치 또는 특수용 하드웨어에 의해 실행하기 위한 일련의 명령어 또는 데이터를 저장하거나 인코딩할 수 있고 기계 또는 특수용 하드웨어가 본 발명의 방법 또는 기능 중 어느 하나를 수행하게 하는 임의의 매체를 포함하는 것으로 해석되어야 한다. 따라서, "기계판독가능한 매체"라는 용어는 고체상태 메모리, 광학 디스크 및 자기 디스크, 자기 메모리, 광학 메모리, 또는 다른 기능적 등가물을 포함하나 이에 국한되지 않는 것으로 해석되어야 한다. 소프트웨어 프로그램 제품이 한 매체에 저장되거나 분포될 수 있고 사용을 위해 또 다른 매체에 전송 및 재저장될 수 있다.
예컨대, 하지만 비제한적으로, 기계판독가능한 매체는 ROM; 모든 타입의 RAM(가령, S-RAM, D-RAM); PROM; EPROM; 자기 랜덤 액세스 메모리' 자기 디스크 저장 매체; FLASH; 또는 알려지거나 개발될 것이며, 광범위하게 동일한 기능적 특징들을 갖는 기타 메모리 타입을 포함할 수 있다.
더욱이, 해당기술분야에서 통상적으로, 동작을 취하거나 결과를 야기하는 것으로서 한가지 형태 또는 또 다른 형태(가령, 프로그램, 절차, 프로세스, 애플리케이션, 모듈, 알고리즘, 또는 로직)의 소프트웨어를 말한다. 이런 표현들은 말하는 데 있어, 당업자에 잘 알려진 바와 같이, 컴퓨터 또는 등가의 디바이스에 의한 소프트웨어의 실행으로 컴퓨터 또는 등가의 디바이스의 프로세서가 동작을 수행하거나 결과를 만들어내게 하는 단지 편의적인 방법이다.
메모리 시스템은 수많은 기능적 요소들로 구성될 수 있고, 용어는 독자들이 본 명세서에 개시된 개념을 더 잘 이해하도록 돕게 여기 소개될 수 있다. 그러나, 시스템의 태양에 대한 특수 명칭의 사용은 시스템의 명칭된 태양에 의해 수행되는 기능들에 대한 제한을 표현하려는 것이 아니다. 본 명세서에 특별히 언급한 것을 제외하고, 시스템의 특수 하드웨어 또는 소프트웨어 태양들에 대한 기능들의 할당은 논의상 편의를 위한 것인데, 이는 당업자가 실제 물리적 측면들과 시스템의 컴퓨터 측면들이 다양한 등가의 방식으로 배열될 수 있음을 이해할 것이기 때문이다. 특히, 이런 시스템에 사용될 수 있는 전자 기술의 발전이 진보함에 따라, 개개의 구성요소들의 크기는 시스템의 특정 하드웨어 요소에 더 많은 기능들이 수행되범위로 감소될 수 있다, 시스템 개념의 확장성을 이용하기 위해 복수의 시스템 모듈들을 포함하도록 시스템의 스케일 크기가 증가될 수 있다. 이들 모든 진화들은 특허청구범위에 상술함으로써 포함되는 것으로 되어 있다.
메모리 시스템은 가령 RAID 컨트롤러, 데이터 스위치 패브릭, 순서화 평면 (ordering plane) 패브릭, 메모리 컨트롤러 및 메모리 모듈을 포함할 수 있다. 데이터의 신뢰할 수 있는 저장이 요망되는 대형 메모리 시스템에서, 하드웨어 요소의 고장, 미식별 소프트웨어 결함, 또는 전력 장애로 데이터의 회복할 수 없는 손실이 초래될 수 있다. 그 결과, 데이터 저장 시스템은 아카이벌 기억장치용 디스크 또는 테이프 시스템에 데이터의 주기적 백업을 제공할 수 있다. 이는 메모리 시스템 장애로 손실된 데이터의 재구성을 가능하게 하나, 메모리 시스템의 예상 응답시간에 비해 응답시간이 길고, 이런 "복구"는 방지하는 것이 바람직하다.
따라서, 메모리 시스템은 하드웨어와 소프트웨어 중복 모두로 설계될 수 있다. 메모리 시스템에 중복 형태로 데이터를 저장하는 통상적인 기술 중 하나가 RAID이다. RAID(Redundant Arrays of Independent (또는 Inexpensive) Disks)의 개념은 적어도 1988년, David Patterson, Garth Gibson 및 Randy H. Katz 가 작성한 논문에까지 거슬러 올라간다. RAID는 디스크 메모리 시스템이 중복을 추가함으로써 시스템이 포함한 데이터의 손실에 대해 보호하도록 배열되게 한다. 적절히 구성된 RAID 아키텍쳐에서, 가령, 어느 한 디스크의 손실은 저장된 데이터에 액세스하거나 재구성할 능력과 충돌하지 않을 것이다. RAID가 없는 디스크 어레이의 MTBF(Mean Time Between Failure)는 임의의 디스크의 손실로 인해 데이터가 손실되기 때문에 어레이에 있는 드라이브들의 개수로 나눈 개개의 디바이스의 MTBF와 같아질 것이다. 이로 인해, 디스크 드라이브 어레이의 MTBF는 많은 애플리케이션 요건들에 대해 너무 낮아질 수 있다. 그러나, 디스크 어레이는 다양한 방식으로 정보를 중복 저장함으로써 고장이 허용될 수 있다.
중복 설계의 다른 영역은 데이터를 메모리 저장모듈, 전원, 팬, 등으로 보내기 위한 하드웨어를 포함한다. 또한, 이들 구성요소들이 메모리 시스템의 동작과 충돌하지 않고도 교체되는 것이 바람직할 수 있다.
"버스" 또는 "링크"는 하나의 신호라인 또는 복수의 신호라인들을 의미하며, 각각은 "트랜시빙"(즉, 송신, 수신 또는 둘 다)을 위해 하나 이상의 연결점 또는 노드를 갖는다. 각 연결점은 트랜시버(즉, 송신기-수신기) 또는 송신기나 수신기 회로 중 하나에 연결 또는 결합될 수 있다. 연결 또는 결합은 양자 얽힘 또는 그 등가물에 의해 전기적으로, 광학적으로, 자기적으로 제공된다. 동일하거나 유사한 수단들에 의한 다른 전기 연결들은 전력, 접지, 보조 시그널링 및 컨트롤, 등과 같이 이런 추가 시스템 요건들의 만족을 제공하는데 사용된다. 이런 추가 연결들은 설명을 명확히 하기 위해 가끔 기술되어 있으나, 이런 추가 연결들은 당업자에 잘 알려져 있고, 어떤 예에서 이들 연결에 대한 설명 부족이 이들의 포함을 배제하는 것으로 해석되지 않아야 한다.
링크는 신호라인들에 신호를 보낸다. 신호들은 일반적으로 클록신호 및 제어신호, 어드레스 신호, 명령신호, 및 데이터 신호를 포함한 여러 카테고리 중 어느 하나에 있을 수 있다. 데이터 신호는 메모리 디바이스 또는 인터페이스에 저장되거나 이로부터 검색될 수 있는 데이터를 전달한다. 어드레스 신호는 데이터가 읽어지거나 작성되는 메모리 디바이스 또는 시스템내 위치 또는 위치 범위들을 특정하거나, 복수의 메모리 디바이스들 또는 인터페이스들 중 하나가 액세스되는 어떤 것을 선택할 수 있다. 명령신호는 어떤 타입의 동작, 가령, 읽기, 쓰기, 새로고침이 수행될지에 대해 그리고 가능하게는 (버스트(burst) 또는 방송모드와 같이) 여러 액세스 모드들 중 어떤 것이 데이터 전송에 사용되어야 할지에 대해 메모리 디바이스 또는 인터페이스를 명령한다. 클록 및 제어신호는 컨트롤러 및 메모리 디바이스 간에 전송되는 다른 신호들을 동기화하도록 동작할 수 있다. 링크가 각 신호에 대해 별개의 신호라인(가령, 한 클록 싸이클에 32비트폭 어드레스를 전송하기 위한 32 어드레스 라인 및 한 클록 싸이클에 32비트폭 데이터 워드를 전송하기 위한 32 데이터 라인)을 이용할 수 있으나, 명령신호, 제어신호, 어드레스 신호, 또는 데이터 신호용의 하나 이상의 신호라인들을 사용하는 것과 같이 다른 신호기능용의 하나 이상의 신호라인을 재사용하기 위한 다양한 방식들이 또한 있다.
메모리 시스템은 하나 이상의 관련된 서버(컴퓨터)와 동작하도록 구성될 수 있고, 이런 메모리 시스템을 "DAS(Directly Attached Storage)"라 할 수 있다. 이런 시스템의 일예는 가령 하나 이상의 채널들을 갖는 PCIe(PCI express) 버스를 이용한 서버와 인터페이스할 수 있는 (캘리포니아, 마운틴 뷰의 Violin Memory, Inc에서 구매할 수 있는) Violin Memory 3200 FLASH 메모리 시스템이다. 대안으로, 동일한 메모리 시스템은 SAN(Storage Area Network)에서 네트워크 환경과 인터페이스하거나, 프로토콜 컨버터, 브릿지 또는 다른 기술이나 디바이스를 이용한 NAS(Network Attached Storage)로서 인터페이스할 수 있다. 사용자, 서버 및 메모리 스토리지 간의 연결은 월드와이드웹(WWW, 인터넷), 이더넷, WAN 또는 LAN, 광네트워크, 무선 네트워크 등을 포함한 데이터 전송의 공지되거나 뒤이어 개발된 형태들 중 어느 하나일 수 있다. 전용 인터커넥션들도 또한 이용될 수 있다.
대형 메모리 시스템은 복수의 개별 이용 애플리케이션들을 서비스할 수 있고, 이런 애플리케이션들은 가상 시스템에서처럼 서로 별개이다. 대안으로, 복수의 애플리케이션들은 데이터가 중복제거된 곳과 같은 공통 메모리 영역에 액세스하고 동작할 수 있고 복수의 사용자들에 의해 액세스된다. 따라서, 메모리 시스템은 가령 구성가능한 액세스 기준을 따르는 개인(배타적) 메모리 영역 또는 공유 메모리 영역, 또는 이들의 임의의 조합 또는 변형, 메모리 위치, 또는 그 범위로 분할될 수 있다. 애플리케이션의 특정 요구에 따라, 메모리 영역은 다른 신뢰도, 액세스 시간, 대역폭 및 기타 특징들을 갖도록 구성될 수 있다. 이들 특징들은 가령 이용되는 RAID 타입, (가령, 넓거나 좁은) 데이터의 스트립핑 및 서버가 메모리 시스템에 액세스하는 포트의 대역폭과 같이 기타 선택가능한 시스템 속성들의 선택으로 표현될 수 있다. 이들 속성들은 하드웨어에 들어 있거나 알고리즘, 데이터 테이블 등으로 구성될 수 있다.
메모리 시스템의 어드레스 크기가 커짐에 따라, 액세스 포인트들의 개수 또는 대역폭을 늘리는 게 필요할 수 있고, 액세스 시간(지연), 다양한 엔티티들(가령, 서버, 데이터 버스, 메모리 모듈) 간의 로드 밸런싱, 및 복수의 요청하는 사용자들에 의해 공유될 수 있는 메모리 위치에 대한 액세스 조정에 관한 읽기 및 쓰기 로딩의 영향도 고려될 수 있다. 또한, 임의의 대형 전자 시스템에서, 하드웨어 고장이 발생하고, 이런 시스템들의 속성은 가장 적은 수의 사용자들에 영향을 주도록 고장을 격리시키거나, 메모리 시스템 또는 그 일부의 동작을 유지하면서 관련된 데이터의 복구를 포함한 고장의 수리를 허용할 수 있다.
도 1에 도시된 예시적인 컴퓨팅 시스템(1)은 메모리 시스템(100)에 동작을 수행하도록 서버(5), 또는 상술한 바와 같이 다른 요청 소스를 포함할 수 있다. 수행되는 가장 통상적인 동작은 서버(5)로 반환을 위해 메모리 시스템(100)에 있는 어드레스로부터 데이터의 읽기 또는 메모리 시스템(100)에 있는 어드레스에 서버(5)에 의해 제공된 데이터의 쓰기이다. 읽어지거나 쓰여질 데이터는 가령 하나의 에드레스 위치 또는 어드레스 블록을 포함할 수 있고, 가령 논리블록 어드레스(LBA) 및 블록 크기로 기술될 수 있다.
시스템의 동작을 설명하는 데 있어, 본 명세서에 기술된 에러 조건 또는 코너 케이스들만이 가끔 있다. 이는 본 명세서에 기술된 시스템 및 방법의 전체 개념을 불명료하게 하진 않도록 논의를 간략히 하게 행해진다. 시스템이 상술한 기능들을 수행하게 할 수 있는 컴퓨터 프로그램 제품의 시스템 설계 및 개발 과정 동안, 당업자는 이런 가능성 있는 동작의 비정상 상태를 식별하도록 기대할 것이며, 비정상의 영향을 검출, 보고 및 완화하기 위해 알고리즘 또는 아키텍쳐 특징을 고안할 것이다. 이런 비정상은 하드웨어 고장, 프로그램 버그, 전력 손실, 부적절한 관리 등으로 인해 일어날 수 있다.
메모리 시스템(100) 외부의 글로벌 환경을 나타내는 서버(5)와 메모리 시스템(100) 간의 인터페이스는 상술한 인터페이스 타입들 중 어느 하나일 수 있거나, 유사한 기능들을 수행하도록 개발될 수 있다. 일예로, 서버(5)와 메모리 시스템(100) 간의 인터페이스(50)는 하나 이상의 양방향 채널을 갖는 PCIe 버스일 수 있다.
데이터의 논리 어드레스는 메모리 시스템(100)의 아키텍쳐 및 서버(5)의 동작 시스템의 특징에 따라 다양한 방식으로 명시될 수 있다. 논리 메모리 어드레스 공간은 가령 서버(5)에 이용될 수 있는 메모리 위치들의 최대 개수와 같은 최대값을 갖는 플랫 메모리 공간일 수 있거나, 메모리 시스템(100)의 디바이스를 이용한 기타일 수 있다. 메모리 시스템(100)에 사용하기 위해 추가 메모리 위치들이 예비될 수 있다. 논리유닛번호(LUN)의 할당과 LUN내 어드레스를 포함할 수 있는 다른 어드레싱 방식들이 이용될 수 있다. 이런 LUN 어드레싱 방식은 결국 전체 메모리 시스템(100) 어드레스 공간내 특정 논리어드레스 LBA로 바뀔 수 있다. 어드레스 방안은 서버(5)에 있거나 혹은 다른 곳에 있는 메모리 시스템(100) 내에 수행될 수 있다. 간략히 하기 위해, 본 명세서에서 설명은 LUN 및 LUN내 어드레스가 메모리 시스템(100)의 플랫 메모리 공간 내에서 논리 어드레스로 바뀐 것으로 가정한다.
컴퓨팅 시스템은 예컨대 16 엑사바이트(exabyte)(16×260)의 이론상 바이트-어드레스가능한 메모리 공간이 되는 64 비트 이진 어드레스 워드를 이용할 수 있다. 리거시 컴퓨팅 시스템은 32 비트 이진 어드레스 공간을 이용할 수 있고 여전히 사용중에 있다. 64비트 어드레스 공간은 현재 요구에 대해 적절한 것으로 생각되나, 더 적거나 더 큰 크기의 어드레스 워드들이 사용됨에 따라 제한이라기보다는 예시적인 목적인 것으로 간주되어야 한다. 몇몇 경우, 어드레스 워드의 크기는 어드레스의 일부가 추론될 수 있거나 표현된 추가 속성들일 수 있는 시스템의 어떤 수준에서 편의상 바뀔 수 있다.
논리 어드레스 값 LBA는 10진, 2진, 8진, 16진, 또는 다른 표기로 표현될 수 있다. 본 명세서에 행한 표현의 선택은 어느 식으로든 제한되는 것을 뜻하지 않으며, 프로세싱, 저장 등의 목적으로 어드레스의 내부 표현을 규정하는 것을 뜻하지 않는다.
메모리 시스템(100)의 RAID 컨트롤러(10)(RC)에 수용될 수 있는 요청 개수를 기초로 인터페이스(50)를 통해 서버(5)로부터 명령 및 데이터가 메모리 시스템(100)(도 2)에 의해 수신 또는 요청될 수 있다. RAID 컨트롤러(RC)는 메모리 시스템(100)에 의해 실행되는 복수의 명령들과 데이터를 큐할 수 있는 입력 버퍼(11)를 가질 수 있다. RAID 엔진(12)은 입력 버퍼(11) 및 데이터가 저장될 수 있거나 저장되는 위치의 논리 블록 어드레스(LBA)로부터 명령(가령, READ, WRITE) 및 임의의 관련된 데이터를 디큐(de-queue)할 수 있다. RC(10)는 논리블록 어드레스 및 데이터 블록을 복수의 논리 어드레스로 분해할 수 있고, 데이터의 원래 블록의 각 부분의 논리 어드레스는 다른 저장 모듈과 관련있어, 이에 따라 생성된 복수의 서브-블록들 각각에 대한 저장 위치들은 데이터를 물리적 저장 메모리(200) 위로 분포시켜 하드웨어 요소의 고장으로 인해 사용된 RAID 접근법에 의해 교정될 수 있는 데이터의 서브 블록들의 손실이 더 많아지지 않을 수 있다. 디스크 어레이를 이용한 고전적인 간단한 예로, 이는 서브블록 데이터 블록들 각각(때로 "스트립"이라 함)과 패리티 데이터 스트립이 다른 디스크에 있을 수 있음을 의미할 수 있다.
RC 엔진(12)은 전체 데이터 블록에 걸쳐 패리티를 계산하고 패리티 서브 블록을 선택된 저장 모듈에 저장해 상기 저장모듈의 고장이 저장되어 있는 데이터 블록의 데이터를 손상시키지 않게 된다. 이런 식으로, 패리티 데이터가 고장난 디스크의 데이터를 재구성하는데 사용될 수 있다. 즉, 나머지 서브-블록들(스트립들)과 패리티 데이터가 손실한 서브-블록의 데이터를 복구하는데 사용될 수 있다. 대안으로, 패리티 데이터가 없어진 디스크가 있더라도, 데이터 블록의 모든 서브 블록들은 여전히 패리티 서브 블록을 재구성하는데 이용될 수 있다. 데이터 블록의 서브 블록들을 또한 "청크" 또는 "스트립"이라 할 수 있다. 디스크가 이 예에 사용되었으나, 당업자는 다양한 타입의 메모리 이론들 및 하드웨어 구성에 이것이 이용되는 것을 인식할 것이다.
일예로, 도 2에 도시된 바와 같이, 4개 모듈들이 블록 어드레스(LBA)와 크기(B)를 갖는 데이터 블록의 서브 블록을 저장하도록 할당될 수 있는 5개 메모리 모듈들이 있을 수 있다. 5번째 모듈은 데이터의 각 블록에 대한 패리티 데이터를 저장하며, 이는 RAID 라고 하는 그룹 또는 또 다른 그룹의 패리티 데이터를 포함할 수 있다. 서브 블록들의 개수와 RAID 그룹에서 메모리 모듈(MM)의 개수는 변할 수 있고, 물리적 저장 메모리 시스템으로부터 다양한 RAID 그룹들이 구성될 수 있으며, 이런 복수의 다른 구성들이 동시에 존재할 수 있다. 본 명세서에 특정한 예가 편의상 그리고 설명을 명확히 하기 위해 사용된다.
RAID 그룹은 가령 US 특허출원 12/901,224, "Memory System with Multiple Striping"에 기술된 바와 같이 대형 메모리 어레이에 걸쳐 폭넓게 스트립될 수 있으며, 상기 참조문헌은 공동으로 양도되고 본 명세서에 참조로 합체되어 있다. 다른 RAID 스트리핑 양식들이 메모리 어드레스 공간에 인터리브될 수 있다.
RAID 컨트롤러는 논리 어드레스 블록(LBA) 또는 명령(READ, WRITE)을 RAID 그룹이 되게 구성된 메모리 모듈 그룹을 포함한 특정한 RAID 그룹(가령, RG1)에 할당하기 위한 몇몇 다른 변수를 이용할 수 있다. RAID 그룹의 특정한 구성은 특정 사용자를 위한 메모리 시스템의 성능 측면들을 최적화하는데 사용될 수 있다.
일예로, 논리 블록 어드레스는 총 4K 바이트 경계에 정렬될 수 있고, 블록 어드레스의 증분은 4K일 수 있으며 데이터는 RAID 그룹에 저장될 수 있다. 16개 RAID 그룹(0-Fh)까지 있는 예를 고려해 보자. 간단한 알고리즘에 의해 논리 블록 어드레스를 RAID 그룹으로 맵핑하는 것이 달성된다. 논리 블록 어드레스는 O× 0000000000013000일 수 있다. 16진 어드레스의 4번째 최하위 니블(nibble)(3)은 (RAID 그룹 1-16과 같은 0-F 범위로부터) RAID 그룹을 식별하는데 사용될 수 있다. 어드레스 워드의 최상위 자릿수(이 경우 0×000000000001)는 RAID 그룹에 있는 데이터의 논리 어드레스의 일부(RAID 그룹에서 한 모듈에 대한 데이터의 논리 어드레스의 위쪽 최상위 값들)로 해석될 수 있다; 그리고, 마지막 3개 니블들(이 경우 0×000)은 RAID 그룹에 저장된 데이터의 논리 어드레스의 최하위 값들(RG3)일 수 있다. RG3에서 데이터에 대한 완전한 논리 어드레스 블록 어드레스는 데이터(및 패리티 데이터)가 저장된 RAID 그룹에 있는 모든 MM에 대해 (RAID 그룹을 나타내는 자릿수가 어드레스 워드로부터 삭제된 상황에서) O× 000000000001000일 것이다.
명령 및 (패리티 데이터를 포함한) 데이터를 메모리 시스템(100)의 MM으로 보내는 것은 메모리 시스템의 아키텍쳐에 따른다. 2가지 예의 아키텍쳐들이 도시되어 있다. 도 3은 3가지 타입의 아키텍쳐를 도시한 것이고 도 4는 복수의 선형 버스들을 도시한 것이다.
도 3에 도시된 메모리 시스템은 "포리스트(forest)"를 형성하도록 메모리 컨트롤러에 의해 제공되는 더블-엔디드 이진 트리 및 보조 루트에 연결된 84개의 개별 메모리 모듈을 포함한다. 메모리 모듈(MM0 및 MM83)은 한 쌍의 더블-엔디드 이진 트리들에 대한 루트 모듈로 간주될 수 있다. 메모리 모듈(MM1, MM2, MM81 및 MM82)은 메모리에 개별 트리들의 루트 메모리 모듈이라 여겨질 수 있다. MC 및 메모리 모듈(MM22, MM23, MM47 및 MM48)은 메모리 시스템 트리의 부분들에 대한 루트 모듈로서 작동할 수 있어 메모리 모듈이 고장날 경우 또는 로드 밸런싱을 위해 한층 더한 연결을 제공한다.
메모리 컨트롤러(MC)는 하나 이상의 PCIe 채널들에 의해 메모리 시스템(100)의 나머지들에 연결될 수 있다. 더욱이, 메모리 컨트롤러 그자체는 중복 목적을 위해 복수의 메모리 컨트롤러들로 구성될 수 있다.
개별 메모리 모듈(MM) 또는 그 일부는 다른 RAID 그룹(RG)에 할당될 수 있다.
RAID 그룹 C0 C1 C2 C3 P
0
1
2
3 MM23 MM1 MM16 MM17 MM20
4
.
.
.
15
간략히 하기 위해, 한 RAID 그룹(RG3)에 현재 할당된 메모리 모듈들만이 표 1에 나타나 있다. 이 예에서 5MM와 각각 관련된 16개 RAID 그룹들이 있으므로, 총 80 MMs가 현재 구성된 RAID 그룹과 관련있게 된다. 도 3의 트리는 84MM을 수용할 수 있기 때문에, 이는 한 MM이 고장나면 즉시 이용될 수 있는 스페어 모듈로서 4MM까지 할당되게 허용될 수 있다.
표 1은 선택된 RG에 있는 어드레스에 저장되도록 메모리 컨트롤러(MC)의 (도 3에서 A-F로 표시된) 임의의 특정 포트와 데이터 블록의 서브블록에 대한 목적지 모듈(MM), 또는 그 패리티 간에 라우팅 표시자, 또는 다른 라우팅 동작이 확립될 수 있도록 라우팅 테이블의 구성을 위한 기본을 제공한다.
이 라우팅 표시자는 가령 MC에서 개개의 MM까지 경로를 결정하는데 이용될 수 있다. 라우팅은 가령 메모리 컨트롤러(MC)에서 결정될 수 있고, 라운팅은 11/405,083, "Interconnection System," 에 기술된 바와 같은 경로를 따라 MM에 있는 스위치들에 의해 실행되며, 상기 참조문헌은 공동으로 양도되고 본 명세서에 참조로 합체되어 있다. 명령 및 데이터가 MC로부터 적절한 MMs으로 포워딩되게 하기 위해 다른 접근들도 또한 이용될 수 있다.
각 메모리 모듈(MM)은 논리블록 어드레스에 관한 물리적 어드레스에 데이터를 저장할 수 있다. 논리블록 어드레스(LBA)와 물리적 어드레스 간의 관계는 가령 사용된 물리적 메모리의 타입, 및 메모리 시스템의 아키텍쳐 및 메모리 모듈과 같은 서브시스템에 따른다. 관계는 알고리즘으로 또는 메타데이터에 의해 표현될 수 있다. 메모리 타입이 가령 NAND FLASH이면, 논리 어드레스와 물리적 어드레스 간의 관계는 플래시 변환계층(FTL)에 의해 중재될 수 있다. FTL은 데이터 논리 블록 어드레스(LBA)와 데이터가 저장된 FLASH 칩내 실제 물리적 어드레스(PA) 간에 일치를 제공한다. FTL은 가령 이런 배드 블록으로서 FLASH 메모리에서 이런 아티팩트들과 가비지 컬렉션 및 웨어 레벨링(were leveling)과 같은 하우스키핑 동작과 관련된 저장된 데이터의 물리적 어드레스 변경을 설명하고, 이들은 메모리 시스템이 동작하는 중에 적용되는 것이 바람직하다.
메모리 시스템 동작의 예에서, 4K 바이트 데이터 블록은 4개의 1K 청크들로 분리되고, 패리티(P)는 4개 청크들에 대해 계산된다. 패리티(P)는 RAID 재구성을 위해 사용될 수 있거나 2012년 6월 12일자로 간행된 발명의 명칭이 "Memory Management System and Method"인 미국특허 8,200,887에 기술된 바와 같은 FLASH 메모리 시스템에서 "소거 숨기기"를 실행하는데 사용될 수 있으며, 상기 참조문헌은 공동으로 양도되고 본 명세서에 참조로 합체되어 있다.
데이터가 목적지 MM에 수신되면, 논리 블록 어드레스(LBA)는 물리적 메모리로부터 데이터를 저장 또는 검색하도록 해석된다. RG의 MM에 저장된 청크들은 이들이 한 구성요소인 데이터 블록에 명령된 어드레스 관계를 갖기 때문에, MM에 청크의 저장은 데이터 블록의 논리 블록 어드레스에 의해 적절히 기술될 수 있다.
도 1 및 도 2로 돌아가, 서버(5)로부터 인터페이스(50)을 통해 수신된 데이터 쓰기 또는 읽기 명령에 대한 경로를 고려하자. RAID 컨트롤러(RC)(10)는 액세스될 메모리(200)의 적절한 RG를 결정하고, 명령(및 임의의 관련된 데이터 페이로드)를 메모리(200)로 라우팅한다. 라우팅은 스위치 패브릭을 통해 네트워크 저장환경에 또는 직접적으로 메모리(100)에 행해질 수 있다. 명령이 일관되게 서버(5)로부터 메모리로 라우팅되면, 명령은 메모리(200)에 의해 순서대로 수신될 것이다. 마찬가지로, 명령이 가령 도 3의 메모리에 사용된 라우팅 테이블(표 1)에 의해 메모리(200)내 다양한 저장 위치들로 일관되게 라우팅되면, 명령은 각 MM에서 순서대로 수신될 것이다. 각 메모리 모듈에서, 명령들은 큐에 넣어지고 순서대로 실행될 수 있다. 이런 예에서, 특정 쓰기 어드레스에 대한 초기의 계류중인 쓰기 명령은 동일한 어드레스에 대한 나중 읽기 명령 이전에 실행될 수 있고, 읽기 명령에 의해 읽어질 수 있는 데이터는 메모리 위치에서 가장 최신의 데이터를 나타낸다.
그러나, MM에 수행된 동작 속도는 각 MM에 대한 전체 읽기 또는 쓰기 스루풋, FLASH 메모리에서 가능한 쓰기 또는 읽기 시간 봉쇄, 또는 종래 디스크 시스템에서 디스크 액세스 지연과 같은 요인들에 따른다. 별개로 고려되는 각 MM에서 동작의 시퀀스는 순서화되는 반면에, RAID 그룹에서처럼 그리고 메모리 시스템(100)이 하나 이상의 입력 포트를 갖는 복수의 MM들이 고려될 경우 이 상황은 발생하지 않을 수 있다. 이는 모든 서브-블록들이 최신이 아닌 RG의 데이터를 읽게 할 수 있다. 즉, 읽어지는 데이터의 서브 블록들 중 하나가 최신 데이터 블록의 일부가 아닐 수 있다. 이는 특히 최신 데이터의 캐시가 MM에 유지되고 어드레스에 대한 모든 이전의 계류중인 쓰기들이 실행될 때까지 읽기용 어드레스를 락킹하기 위한 규정이 전혀 없을 수 있다면 문제다.
RAID 시스템은 통상적으로 하드웨어 모듈 중 하나가 고장날 때만 데이터를 재구성하도록 되어 있기 때문에, 에러 메시지 없이 리턴된 데이터 서브블록들 각각은 유효한 것으로 취급될 것이다. 그러나, 서브 블록들 중 일부는 하나 이상의 MM에 대해 최근에 수행된 동작들에 따라 구식일 수 있다. 이 상황은 통상적으로 LBA에 계류중인 쓰기들이 순서대로 수행되고, LBA에 대한 이전의 모든 쓰기들이 수행된 후에 LBA에 계류중인 읽기가 수행되도록 시스템의 한 위치에 요청 큐를 유지함으로써 극복된다. 이와 같은 상황은 메모리 시스템의 동작 과정 동안 산발적으로 발생하나, LBA가 쓰기 명령에 의해 자주 어드레스되면 자주 발생할 수 있다. 이는 병적 행동인 것으로 간주될 수 있으나, 결과는 상황이 간과될 수 없을 정도로 충분히 심각하다. 하지만, 이런 큐를 유지하는 것은 시스템에 보틀넥(bottleneck)을 구성할 수 있다.
복수의 RAID 컨트롤러(RC)(10)와 메모리 어레이(30)가 상호연결된 도 5에 도시된 바와 같은 메모리 시스템을 고려하자. 각각의 메모리 어레이는 가령 도 3 또는 도 5에 도시된 메모리일 수 있다. 이 아키텍쳐는 데이터 저장의 중복을 높이고, 데이터 검색 지연, 로드 레벨링 등을 줄이는 것을 포함한 수많은 목적으로 사용될 수 있다. RAID 컨트롤러(10)는 PCIe 스위치의 어레이, 이더넷, 광섬유 채널, 또는 이런 연결을 제공하기 위한 임의의 다른 기존 또는 개발된 기술과 같이 임의의 적절한 기술일 수 있는 복수의 일대일 버스링크, 또는 스위치 패브릭(20)을 통해 각각의 메모리 모듈(MM)(30)과 통신할 수 있다. 대표적으로, 연결은 각각의 RC와 메모리 시스템(100)의 각각의 M 간의 중복 연결을 제공하도록 설계 및 구성될 수 있다.
메모리 시스템(1)은 서버, 또 다른 네트워크, 또는 이런 소스와 읽기 요청 또는 쓰기 요청 또는 다른 기능적 명령에 응답하도록 스위치, 브릿지 또는 다른 설비 및 기술을 이용한 데이터의 목적지의 조합과 인터페이스할 수 있으며, 쓰기 요청은 저장될 데이터의 페이로드를 포함할 수 있다.
외부 인터페이스(50)를 통해 명령을 수신하는 RC1과 같은 RAID 컨트롤러는 어드레스를 데이터 블록 요청의 데이터 청크와 메모리 시스템(가령, MM)에서 목적지의 연결로 변환하도록 요청의 논리 블록 어드레스(LBA)에 대해 동작할 수 있다. 블록이 4개의 동일한 크기의 청크들로 나누어지고 제 5 청크를 제공하도록 상기 블록에 대해 계산되는 예를 들면, 개개의 청크들은 정책에 따라 메모리 어레이(100) 중 어느 하나에 있는 메모리 모듈에 할당될 수 있다. 데이터가 RAID된 데이터이면, 정책은 메모리의 동일한 모듈에 있는 데이터 블록 또는 패리티 데이터 중 임의의 2개 청크들을 저장하지 않는 것을 포함할 수 있다. 메모리의 모듈인 것으로 여겨지는 물리적 메모리 데이터 영역의 확장은 메모리의 구성, 예상되는 고장 방식, 특정 사용자에 필요한 데이터 신뢰도 수준, 또는 기타 성능 속성들에 따를 수 있다. 대형 메모리 시스템에서, 복수의 사용자 태스크를 서비스하면, 각각의 사용자 태스크에 대해 기준이 다를 수 있다. 따라서, 모듈의 정의는 다이로부터 패키지, 현장 대체가능한 디바이스, 메모리 어레이, 메모리 어레이의 그룹, 등에 범위에 이를 수 있다.
따라서, "모듈"이라는 용어의 사용은 문맥에 따라 의미를 가진다. 본 명세서에서 의미는 "모듈"이 고장날 경우 시스템을 파티션하는 수준이 요망에 의해 선택된 RAID 접근에 의해 보정될 수 있듯이 특정 하드웨어에 데이터 블록의 데이터의 다수의 서브 블록들(청크들)로서 저장되도록 결정되는 것일 수 있다. 동일한 메모리 시스템 내에 있을 수 있는 다른 상황으로, 모듈은 다른 의미를 가질 수 있다. 가령, "소거 숨기기"의 개념이 사용될 경우, 모듈은 쓰기 또는 동작의 소거 주기에 대해 스케줄되는 메모리의 일부를 나타낼 수 있다. RAID용으로 정의된 모듈에서는 하나 이상의 "소거 숨기기"가 있을 수 있다. 이것이 합리적인 것은 가령 도 3에 사용된 바와 같이 메모리 모듈은 각 모듈에 스위치, 프로세서, 및 캐시 메모리 뿐만 아니라 버스 인터페이스를 가질 수 있고, 이들 중 하나 이상의 고장이 메모리 모듈을 동작불능이게 할 수 있음을 고려함으로써 이해될 수 있다. 그러나, 쓰기 또는 소거 시간 윈도우의 관리를 위해, 메모리 모듈 상의 메모리 칩은 더 작은 그룹으로 제어될 수 있다.
RC1과 같은 RAID 컨트롤러가 메모리 시스템(100)의 메모리 어레이(가령, M1) 중 하나에 지정된 LBA를 갖는 데이터 블록의 서브블록들 모두를 저장하도록 구성된 상황에서, RAID 그룹과 패리티 데이터가 계산된 후, 메모리 어레이(M1)에 요청이 발송될 수 있다.
도 6은 주어진 순간에서 RC1에 있는 버퍼 메모리를 도시한 것이다. 4개 데이터 블록들 각각(4-7)은 다른 4개 청크들을 통해 패리티(P)를 나타내는 제 5 청크와 함께 청크로 변환되었다. 각 데이터 블록은 인터페이스(50)에 명령이 수신되거나 서버(5)의 버퍼 메모리(11)로부터 디큐되는 순서대로 로컬 시퀀스 넘버(LSN)를 할당하였다. 관련된 데이터 페이로드를 포함할 수 있는 명령은, 메모리 어레이(M1)의 메모리 컨트롤러가 데이터를 수용할 능력을 갖는 한, 스위치 패브릭(20)을 통해 메모리 어레이(M1)로 전송될 수 있다. 데이터 전송 프로토콜은 메모리 어레이(M1)에 의해 데이터 패킷들의 안전한 수신의 확인응답을 포함할 수 있다. 도시된 바와 같이, 4-6의 LSN을 갖는 데이터 블록의 데이터는 목적지 메모리 어레이(M1)에 의해 이미 확인응답되었다. LSN(7)의 청크들 중 단 2개만이 M1에 의해 확인응답되었다.
RAID 컨트롤러(가령, RC2)의 또 다른 것은 인터페이스(50)를 통해 데이터를 수신할 수 있고, 데이터는 다른 RAID 프로토콜을 받을 수 있다. 가령, 데이터 블록과 관련된 데이터 청크들이 부분적으로 M1에 그리고 부분적으로 M2에 저장될 수 있다. RC2에 의해 처리된 이들 데이터 청크들은 M1에 의해 RC1으로부터 수신된 최신 데이터의 LSN과 일반적으로 다른 RC2에 의해 할당된 LSN을 갖게 되고, 각 RC에 의해 처리된 데이터량은 외부 환경으로부터 수신된 특정 명령을 따르게 된다. RC2에 의해 할당된 LSN는 RC1에 의해 할당된 LSN과 더 크거나, 더 작거나 같을 수 있다. M1의 MC의 입력 데이터 버퍼를 의미하는 태스크는 이들 다른 LSN에 의해 복잡해지나, 실행하자마자 RC에 의한 명령의 처리에 의해 발생된 청크들의 그룹을 보내어 RC의 입력 또는 출력 버퍼에 저장된 데이터량을 최소화하는 이점이 있다. 이는 또한 시스템 지연에 기여할 수 있는 입력으로부터 데이터를 RC로 보내는데 있어 시간 지연에 영향을 준다.
글로벌 시퀀스 넘버(GSN)는 단조적으로 증분된 값이며, 따라서 GSN은 관련된 명령 또는 데이터 객체의 고유 식별자이다. GSN의 워드 크기는 값의 롤오버(roll-over)가 적어도 미실행 명령의 유효기간 내에서 발생하지 않을 정도로 충분하도록 선택된다. 간략히 하기 위해, GSN의 크기는 64 비트 이진 워드가 되도록 고려될 수 있다. 몇몇 상황에서, GSN의 하위 차수의 비트들이 압축성을 위해 사용될 수 있다.
RC3의 출력 데이터 버퍼가 나타나 있는 도 8에 도시된 상황을 고려하자. 단 하나의 명령만이 있고, 모든 청크들이 확인응답되었다. 이는 MCI에서 데이터 청크들에 대해 도 8에 도시된 상황을 야기한다. RC3에서 로컬 일련번호(LSN)(27)를 갖는 데이터 블록의 청크들 모두는 이들 각각이 발송된 메모리 어레이(M)의 어느 쪽에 의해서든지 확인응답되었다.
이때, GSN이 데이터 블록과 패리티를 포함한 완전히 확인응답된 청크들의 각 그룹에 할당될 수 있다. 이는 청크들이 현재 남아 있는 어디에나 고유 GSN(이 경우 2001 및 2003)이 블록의 청크들과 관련되도록 터플(RC#,LSN#,GSN#)을 각각의 메모리 어레이(M1-M4)로 보냄으로써 메모리 어레이(M) 모두에 보내질 수 있다. 이때, RC1의 로컬 시퀀스 넘버(LSN7)는 서브 블록들 모두가 아직 확인응답되지 않았듯이 GSN과 관련되는데 아직 적절하지 않다. 명백히, M1에 저장되도록 되어 있는 GSN(2002)와 관련된 데이터 청크들이 전혀 없다.
도 8에 도시된 시기 바로 전에, 서브블록들(1 및 2)이 LSN(5)를 갖는 서브블록과 LSN(27)를 갖는 서브블록(5)을 RC1으로부터 수신되는 상황이 있다; 7의 LSN을 갖는 서브-블록(3 및 4)도 또한 RC1으로부터 수신되었다. 이들 서브블록들은 논리블록 어드레스가 다르고 겉보기에 RAID 그룹 처리가 다른 본래 다른 블록들로부터의 데이터를 나타낸다. 데이터 블록들 중 일부는 글로벌 시퀀스 넘버(GSN)를 이미 할당받은 데이터 서브블록들이 도시되었다. 이 예에서, RC1으로부터 수신된 로컬 시퀀스 넘버(5)는 GSN(2001)으로 할당되었고, 서브블록(1 및 2)에 해당한다. RC3으로부터 수신된 로컬 시퀀스 넘버(27)는 GSN(2003)으로 할당되었고, 서브블록(5)에 해당한다. GSN이 할당되도록, (RC1,LSN5)의 모든 서브블록들은 전송된 어느 메모리(M)에 무관하게 RC1에 확인응답되도록 해야 할 것이다. LSN5의 나머지 서브-블록들(3-5)이 MC1에 있지 않기 때문에, 이들은 다른 M들 중 하나에 있었고 적절한 메모리 컨트롤러(MC)에 의해 RC1에 또한 확인응답되었는게 필요할 것이다. 할당된 GSN이 있는 것은 적절한 메모리 컨트롤러(MC)에 로드되었고 전송(RC)에 확인응답된 상황을 나타낸다. 동일한 결론이 (RC3,27)에 적용된다. 이 블록의 나머지 서브-블록들(1-4)은 명백히 다른 메모리(M)에 다운로드되었고 RC3에 의해 확인응답되었다.
그러므로 MC에서 서브블록과 관련된 GSN이 있는 것은 블록의 나머지가 적어도 하나의 다른 MC에 있고 동일한 GSN도 또한 데이터 블록의 나머지 서브블록들과 관련되었다는 것을 나타낸다. 따라서, 서브블록들이 메모리 시스템(200)을 가로질러 흩어져 있더라도, 외부 환경으로부터 RC에 의해 수신된 본래 데이터 블록과 함께 데이터의 서브블록들의 식별이 유지된다. 더욱이, GSN의 할당 프로세스는 특정 입력 데이터 블록에 대해 MC에 할당된 서브브록들 모두가 수신되었을 때, 그리고 메모리 시스템(200)의 다른 메모리들(M)과 별개로 장래 처리가 진행될 수 있다면 메모리(M)의 저장 메모리에 서브블록 데이터를 해제하는 방식이다.
반대로, LSN(7)을 갖는 RC1으로부터 수신된 서브블록(3 및 4)은 아직 GSN을 할당받지 못했다. 이는 보내진 또 다른 MC(가령, MC2)로부터 나머지 서브블록들의 수신에 대한 확인응답을 수신하지 않은 RC1의 결과일 수 있다. LSN7의 더 많은 서브블록들은 MCI로 보내지도록 되어 있으나, 아직 도달되지 않은 것일 수 있다. 대안으로, 서브블록들은 다른 MC로 모두 보내질 수 있으나, 아직 RC1에 확인응답되지 않았을 수 있다.
그러므로, GSN이 MC에 있는 데이터에 할당되었다면, 이는 또한 MC에 의해 처리될 본래 데이터 블록과 관련된 서브블록 데이터 모두가 MC에 의해 수신된 것을 나타낸다. GSN이 프로토콜에 따라 할당되므로, 블록의 서브블록들 모두가 확인응답되었으나, GSN이 MC에 의해 아직 할당되거나 수신되지 못한 짧은 시간간격이 있을 수 있으며, GSN이 프로토콜에 따라 할당되는 일예가 연이어 설명될 것이다.
도 8에 도시된 서브브록의 상태에 따라, GSN(2001)을 갖는 서브블록(1 및 2)은 M1의 메모리 트리(1 및 3)에 관련된 명령을 전송함으로써 실행될 수 있다. MCI에서 다음 최하위의 GSN은 트리(5)에 전송될 수 있는 서브블록(5)과 관련된 GSN(2003)이다. 그러나, RC1의 LSN(7)과 관련된 서브블록(3 및 4)은 관련된 GSN을 갖지 않으며 MC1의 출력 큐에 보유된다. 장래의 시기에, (RC1, LSN7)과 관련된 더 많은 서브블록들 중 어느 하나가 MC1나 다른 MC에 의해 수신되었고 서브블록들 모두가 MC에 의해 RC1에 확인응답했다면, GSN이 할당될 것이고, 할당된 경우, 그리고 그런 후 MC 큐에 최하위 GSN라면, 데이터는 지정된 트리(이 경우 트리 1)로 전송될 수 있다. 서브블록들이 가령 MC1의 입력 버퍼에 있는 간격 동안, 서브블록의 LBA와 RAID 그룹에 있는 서브블록의 위치는 라우팅 표시자를 찾거나 계산하거나 다른 하우스키핑 동작을 수행하도록 상술한 바와 같이 이용될 수 있어, 이런 동작들은 GSN을 할당하기 위한 프로세스에 포함될 수 있다.
이 예에서, 서브-블록들은 RAID 그룹번호와 타입을 결정하기 위해 LBA에 작동하는 알고리즘을 이용해 각각의 RC에 의해 메모리(M)에 할당될 수 있고, RAID된 데이터 블록의 청크들은 스트리핑 정책을 기초로 메모리 어레이에 할당된다. 일단 데이터의 청크들이 M의 MC에 의해 수신되면, LBA 및 RAID 그룹번호는 표 1에 기술된 바와 유사하게 저장 메모리 모듈(MM)에 라우팅을 결정하는데 사용될 수 있다.
GSN은 수신된 외부 연결에 상관없이 메모리 시스템(100)에 의해 수신된 각 데이터 블록의 고유 직렬화를 제공하도록 다양한 접근을 이용해 할당될 수 있다.
도 9에 도시된 GSN을 할당하는 첫번째 접근으로, 토큰 패싱 접근이 사용된다. 즉, 메시지(토큰)이 링 또는 라운드-로빈 경로를 실행하도록 순차적으로 한 RC에서 또 다른 RC로 전송된다. 이런 식으로, 라운드-로빈 시간 동안, 각각의 RC는 토큰이 RC에 의해 소유되었던 마지막 시간 이후로 상기 RC로부터 메모리 어레이(M)로 발송되었고 발송된 RC에 완전히 확인응답한 데이터 블록의 개수에 해당하는 GSN의 양을 획득할 기회를 가질 수 있다. 토큰은 스위치 패브릭(20)을 이용해 또는 가령, 요망된 지연에 따라 이더넷 또는 일대일 링크일 수 있는 또 다른 통신경로를 이용해 전달될 수 있다.
현재 최대 GSN 값이 토근이 수신되는 때에 22인 RC1에서 시작하고 RC1은 2개의 블록을 메모리 어레이로 완전히 발송한 이 예에서, GSN(23 및 24)이 할당되고 토큰값이 적절히 24로 증가되어 RC2로 전송된다. RC2에서, 3개의 완전한 데이터 브록들이 있다. 3개의 GSN이 필요하며 할당되고 토큰값은 27로 증가된다. RC3에서, 토큰의 초기 값은 27이나, 여기서는 RC3에 계류중인 GSN 요건이 전혀 없으므로, 토큰 값은 불변이고 RC4로 전달된다. RC4에서, 요구되는 6개의 GSN이 있고 GSN(28-33)이 할당되고 토큰값은 33으로 증가된다. 이때, 토큰은 RC1으로 전달되어 토큰 값 33으로 새 프로세스를 시작한다. 따라서, 각각의 RC에 의해 처리되는 데이터량에 따라, 토큰값은 완전한 데이터 블록들의 개수에 적절한 GSN의 변화를 반영하도록 증가된다.
일단 GSN이 완전한 데이터 블록에 할당되면, (RC#, LSN#, GSN#)을 포함해 터플이 형성될 수 있고 메모리 어레이(M)로 전송될 수 있다. 데이터 블록의 서브블록들(간략히 하기 위해, 패리티 서브블록은 동일한 프로세스를 받는 것으로 가정함)이 다른 메모리(M1-M4)로 발송될 수 있도록 시스템이 구성되면 터플이 모든 메모리 어레이(M)로 전송될 수 있고, 터플과 이미 있는 서브데이터 블록들의 연관으로 존재한 메모리(M)에 무관하게 서브데이터 블록들에 GSN이 할당된다. 터플이 각각의 메모리 어레이로 전송되면, 어떤 특별한 GSN의 할당이 적절한 M의 입력 버퍼에 서브블록들이 있는지 여부에 무관하게, 글로벌 시퀀스 넘버는 연속이다. 그러므로, 어떤 지터들이나 GSN 터플의 수신시 지연이 있다면, 상황은 GSN 시퀀스에 있는 갭으로서 명백해질 것이다. 이런 갭은 (이는 고장모드가 아닌 것을 가정하면) 매우 길지 않을 수 있고, 잃어버린 GSN이 곧 수신될 것이다. GSN의 연속 시퀀스가 있다면, GSN은 상술한 바와 같이 서브블록과 연관될 수 있고 서브블록은 개개의 메모리 어레이(M)에 의해 처리될 수 있다. 메모리 어레이(M) 모두가 저장되어 있는 RAID 그룹의 데이터 청크들이 없을 수 있으나, 이로 인해 RAID된 데이터의 데이터 청크들이 각 메모리 어레이(M)에서 동일한 시퀀스에 있는 각 메모리 어레이의 메모리 모듈에 보내지게 된다.
RAID된 데이터 블록의 데이터의 하나 이상의 청크가 (RC1, MC1에서 LSN7과 같은) 어레이(M)의 메모리 모듈(MM)에 저장될 수 있도록 메모리 어레이(M)가 구성 또는 컨트롤될 수 있기 때문에, 데이터 블록의 청크들 모두가 메모리 그룹 중 하나의 MM으로 발송되는 상황들이 있을 수 있다. 마찬가지로, 적어도 (패리티 청크를 포함한) RAID 그룹에 청크들이 있는 것만큼 많은 메모리들(M)이 있다면, 각 청크가 다른 M으로 발송한 상황들이 발생할 수 있다. 또 다른 태양으로, 데이터 블록의 청크들 중 어느 것도 특정 메모리(M)에 저장되지 않는 상황들이 있을 수 있다. 이들 상황들은 가령 LUN의 소정의 특징들에 따라 동시에 또는 일제히 있을 수 있다.
메모리 속도 요건들이 계속 높아짐에 따라, 토큰의 전파와 관련된 지연이 설계 요건 대해 초과한 대기시간을 도입할 수 있다. 더욱이, M의 각 MC에 완전한 그리고 확인응답된 서브블록 전송된 데이터는 일시적으로 저장될 필요가 있을 수 있으며, 이는 추가적인 고속 메모리 회로에 대한 필요성을 제기할 수 있다. 몇몇 설계의 목적은 가능한 한 데이터 경로만큼이나 메모리 시스템(100)에 들어오는 데이터의 라인 속도로 데이터의 처리 속도를 유지하는 것일 수 있다. 이는 병렬처리에 의해 어느 정도 달성될 수 있고, 아키텍쳐에서 버퍼링 및 HOL(Head-Of-the-Line) 봉쇄를 방지할 수 있다.
GSN의 할당을 수행하기 위한 또 다른 접근은 메모리 어레이(M)로부터 RAID 컨트롤러(RC)로 확인응답에 대한 별도의 통신 경로 및 GSN-LSN 할당 터플들을 메모리 어레이로 전송하기 위한 유사한 별도의 경로를 이용하는 것일 수 있다.
스위치 패브릭(20)에 의해 제공된 디바이스들 간의 연결 이외에, 또 다른 통신 네트워크가 사용될 수 있다. 이는 "순서화 평면(ordering plane)(70)"일 수 있다. 이 "순서화 평면"은 스위치 패브릭(20)과 유사한 스위치 패브릭으로 구현될 수 있고, 시스템의 모듈들 간에 데이터를 라우팅하기 위한 공지되거나 연이어 개발된 하드웨어 및 기술들 중 어느 하나 일 수 있다. 별개의 PCIe 스위치 네트워크가 이용될 수 있어, 허용가능한 대기시간을 달성할 수 있다. 대안으로, 도 10에 도시된 바와 같이, RC와 MM이 서로 통신할 수 있도록 복수의 고속 일대일 데이터 링크들이 제공될 수 있다. 직렬 링크들은 현재 알려져 있거나 나중에 개발될 수 있는 LVDS(Low Voltage Differential Signaling) SERDES(Serializer/Deserializer), 광링크 등일 수 있다.
모듈들 간의 통신은 가령, 상술하였거나 시간동기화 방식처럼 토큰이 전송되는 라운드 로빈의 형태일 수 있고, 토큰 전송은 내포되어 있으며 개개의 RC 및 MM은 소정의 기능들을 효과적으로 나란히 수행할 수 있다. GSN을 할당하기 위한 라운드 로빈 접근에 관해, RC에 의해 하나 이상의 메모리 모듈들(M)로 전송된 청크들은 전송 RC에 대해 확인응답된다. 확인응답은 시간 간격 동안 전송된 하나의 청크 또는 복수의 청크들에 대한 것일 수 있다. 즉, 청크들은 버스트로 M에 전송되고 한 번의 수신의 확인응답이 행해질 수 있다.
RC와 메모리 모듈(M) 간의 통신은 많은 방식으로 순서화될 수 있거나 충돌 방향 또는 다른 프로토콜에 의해 관리될 수 있다. 일예로, RC는 초기화 시기를 참조한 전송시간인 주기적인 비율로, 순서화 평면(70)을 통해 그들의 메시지를 전송하도록 구성되거나 공통 클록에 의해 제어될 수 있다. 도 11은 각각의 RC가 시작 시기에 대해 주기적으로 GSN의 할당에 대한 어떤 메시지를 전송하도록 구성된 배열을 개략적으로 도시한 것이다. 각각의 RC는 각각의 다른 RC에 메시지를 전송하고, 메시지의 내용들이 동일할 수 있기 때문에, 메시지는 복수의 일대일 메시지들로 또는 멀티캐스트 메시지로 전송될 수 있다.
각 RC는 다른 RC들 모두로부터 메시지를 수신하고 모든 예상된 메시지들이 수신되거나, 타임아웃이 발생하면, RC는 기설정된 프로토콜, 알고리즘 등에 따른 메시지의 컨텐츠들에 무관하게 실행되므로, 각 RC가 개개의 메모리 모듈(M)에 이미 전송된 데이터에 GSN을 자동으로 할당한다. 표 2에 도시된 예에서, 각각의 RC는 라운드 로빈의 가상 장소에 할당된다. 각각의 RC는 방송 메시지일 수 있는 메시지를 도메인에 있는 다른 RC들 모두에 보내고, 상기 메시지는 메모리 어레이(M)의 MC에 저장되었고 RC에 확인응답된 청크로서 저장된 데이터 블록들 각각에 GSN을 할당하기에 충분한 GSN들에 대한 요청을 포함한다.
[표 2]
0.... 1.... 2.... 3 가상 시퀀스 넘버(VSN)
RC1 RC2 RC3 RC4 RAID 컨트롤러 번호
0 2 3 1 요청된 GSN 번호
27 101 5000 40 현재 로컬 시퀀스 넘버(LSN)
N N+2 N+5 N+6 등가의 토큰번호
청크는 가령 전송된 메모리 어레이(M)내 논리 어드레스에 작성될 수 있는 관련된 데이터 페이로드를 갖는 쓰기 명령이나, 관리 페이로드, LBA, 또는 페이로드 없음을 가질 수 있는 읽기 명령 중 어느 하나를 나타낼 수 있다. 읽기 명령의 경우, 데이터 페이로드가 필요없을 수 있다. 오히려, 메모리 어레이에 의해 데이터를 위치시키고 제공된 논리 블록 어드레스(LBA)와 관련된 데이터를 읽으며, 요청 RC로 데이터를 반환하도록 명령이 해석된다.
그러므로, 개개의 RC들 각각은 메모리 어레이(M)에 의해 또는 GSN 할당 요청 메시지가 전송된 마지막 시간 이후로 확인응답되거나 발송된 읽기 명령 또는 쓰기 명령의 다른 번호를 가질 수 있다.
4개의 RC와 복수의 메모리 어레이(M)의 구성을 고려하자. 이들은 할당된 GSN의 검증 영역을 나타내도록 고려될 수 있다. GSN 할당 요청 메시지가 다른 RC에서 각각의 RC로부터 수신되었다면, 각각의 RC에서 확인응답 상태가 표 2에 나타나 있다. 각각의 RC는 다른 RC에 의해 요청된 GSN의 번호를 인식한다. 가령, 가상 시퀀스 넘버를 논리 라운드 로빈 구성에서 가상의 위치로서 작동하는 각각의 RC에 할당하자. 이 예에서, RC1은 0 GSN을 요청하고, RC2는 2 GSN을 요청하며, RC3는 3 GSN을 요청하고 RC4는 1 GSN을 요청한다. 그러므로, GSN의 할당을 거치면서, RC1에서 GSN 범위는 불변인 반면, RC2의 GSN 범위는 N+1 및 N+2를 포함할 것이고, RC3에서 GSN 범위는 N+3, N+4 및 N+5를 포함할 것이고, RC4에서 GSN 범위는 N+6를 포함할 것이다. 그러므로, 알고리즘의 실행 초기에 N이 GSN이였다면, GSN의 글로벌 값은 이제 N+6이 되고 이 값은 GSN을 계산하는데 필요한 데이터 모두가 각각의 RC에 있었기 때문에 RC들 중 어느 하나에 의해 계산될 수 있다. 다음 GSN 할당 요청 메시지가 RC에 의해 전송될 때, GSN의 시작 값은 N+6가 된다.
각각의 RC는 또한 로컬 시퀀스 넘버 카운트(LSN)를 가질 수 있고, LSN 카운터는 상술한 터플을 형성하는데 사용될 수 있다. 그러므로, 새로 할당된 GSN 각각은 RC에서 LSN과 관련될 수 있고, 터플이 각 메모리 어레이(M)에 수신되면, GSN은 적절한 청크와 연결될 수 있다.
GSN 할당 요청을 전송하는 주기는 시스템 설계의 주제이며 특정 시스템 요건을 기초로 선택 및 구성될 수 있다. 일예로, 2㎲의 주기가 선택될 수 있으나, 폭넓은 간격 범위들이 이용될 수 있다. 각각의 RC는 우선순위 간격에 대해 계산된 터플들을 포함한 메모리(M) 중 일부 또는 모두에 GSN 할당 메시지를 발송할 수 있다. 이들 터플들이 메모리 어레이에 수신되었다면, 이들은 RC에 확인응답될 수 있다. RC는 모든 메시지들이 확인응답되었다면, 실행명령이 적절한 메모리(M)로 전송될 수 있어 현재 GSN과 관련되고 메모리(M)에 있는 청크들은 지시된 기능들을 수행하도록 처리될 수 있다. 이 실행 메시지는 차례로 터플 메시지로 전송될 수 있어, 메모리(M)가 실질적으로 동시에 실행 명령을 수신하게 된다. 그러나, 시스템 설계에 따라, 실행 메시지는 비동기식으로 발송될 수 있다.
명령들에 대한 GSN의 할당의 몇가지 예들이 제공되었으나, 당업자는 설계의 전반적 목적에 따라 이런 할당에 대한 다른 접근들도 유용할 수 있음을 인식할 것이다. GSN은 시스템의 또 다른 레벨에 할당될 수 있고 시퀀스에서 불연속적일 수 있으며, GSN이 언제 할당되고 부여될지 결정하기 위한 다른 기준을 이용할 수 있다.
도 11은 GSN 할당 터플들이 버스트로 메모리에 전송되고 확인응답이 반환되는 타이밍 다이어그램을 도시한 것이다. 마스터로서 RC들 중 하나 또는 마스터로서 별도의 디바이스를 이용하는 것을 포함해 GSN을 할당하기 위한 다른 방식들이 이용될 수 있다.
도 11에 도시된 동작의 완료 후, 청크의 상태는 앞서 도 8에 도시된 상태와 유사할 수 있다. 본래 입력 데이터의 시퀀싱 관점에서, 입력 데이터 블록은 복수의 청크들로 변환되었고, 각 청크는 복수의 RAID된 메모리(M)내 다른 메모리 위치로 향하게 된다. 메모리(M)에 분포된 후, 청크는 모든 메모리 어레이(M)에 걸쳐 일관된 GSN이 주어질 수 있고, 입력 데이터 블록의 논리 블록 어드레스(LBA)와 관련된 위치에 있는 메모리(M)에 저장을 위해 큐에 배치될 수 있다. 도시된 바와 같이, 청크는 모두 동일한 메모리(M)에 있을 수 없고, 메모리 각각은 복수의 서버, 사용자, 등을 위해 처리되는 명령 및 데이터에 따라 다른 동작 로딩을 체험하거나 하우스키핑 동작을 하면서 동작될 수 있어, 글로벌 메모리의 전반적 동작이 정확히 동기화될 수 없다. 그러나, 이때, 각각의 메모리(M)에서 다음 동작은 GSN의 할당 주기에 대해 그 내에서 그리고 적절한 시퀀스로 동일한 GSN을 갖는 명령 또는 데이터에 대해 실행되며, 동일한 LBA를 갖는 메모리 어레이(M)의 메모리 컨트롤러에 있는 데이터 블록들 모두가 또한 동일한 GSN을 갖는다.
메모리 계층에서 특정 레벨로서 이 상태를 볼 수 있다. 가령, 메모리 어레이가 Intel FBDIMM 메모리의 일부인 DRAM 모듈인 상황에서, 데이터는 메모리 어레이(M)의 메모리 컨트롤러(MC)의 루트에 부착된 메모리의 어드레스 범위에 작성될 것이며, 이 경우 M은 M1-M4이다.
그러나, 메모리 어레이는 더 복잡한 아키텍쳐를 가질 수 있고, 메모리 기술은 디스크, FLASH, 또는 개발되고 있고, 간접 어드레싱 방식 및 다른 동작 제한을 가질 수 있는 다른 메모리들일 수 있다.
도 8에 도시된 바와 같이, 청크들이 개개의 메모리(M)에서 여러 개의 복수의 메모리 버스 루트들에 대해 큐된다. 이 할당은 논리 블록 어드레스(LBA)를 메모리 어레이내 메모리 모듈(MM) 또는 메모리 영역과 연관시키는 표 2와 같은 구성표에 따라 행해진다. 메모리 버스 루트는 선형 버스, 원형 버스, 이진 버스 등을 종료시킬 수 있다.
각 메모리 모듈(MM)은 서버와 같은 하나 이상의 사용 엔티티로부터 데이터에 대한 목적일 수 있고, 각 서버는 프로그램 또는 프로그램들의 다수의 인스턴스를 지지할 수 있고, 각 프로그램은 메모리 모듈상의 어드레스 범위로부터 데이터를 쓰거나 읽을 수 있다. 그러므로, 복수의 RC로부터의 데이터는 임의의 개개의 메모리 모듈에 작성되거나 읽어질 수 있게 된다. 또한, Violin Memory Model 3200의 이진 트리 버스와 같은 몇몇 버스 시스템에서, 메모리(M)의 메모리 컨트롤러(MC)와 목적지 메모리 모듈(MM) 간의 복수의 데이터 경로들이 있을 수 있다.
시간 순으로 발송된 데이터는 시간 순서를 벗어나 도착될 수 있다. 또한, 데이터가 복수의 메모리 모듈(MM)에 저장되기 때문에, 임의의 한 MM에 수신된 끊김없는 일련의 GSN들이 없을 수 있다. MM에서 버퍼에 수신된 데이터가 메모리 모듈(MM)에 보내진 일련의 GSN 시퀀스를 나타내는지 여부를 판단하는 것이 바람직할 수 있다. 즉, MM에 수신된 GSN 시퀀스에 갭들이 있거나, 송신되었으나 아직 수신되지 않은 GSN 시퀀스 넘버의 갭에 데이터가 있으며, 데이터의 결과는 목적지 메모리 모듈과는 다른 MM에 보내진다. 이런 결정은 메모리 모듈(MM)의 많은 기능들을 수행하는데 유용할 수 있다.
따라서, 일태양으로, 로컬 시퀀스 넘버(MMLSN)는 MC에 의해 각 MM으로 보내진 청크들의 연속 직렬화가 유지되도록 메모리 어레이(MM)의 MC에 유지된다. MM에 수신될 경우, MMLSN은 MM으로 향한 데이터만이 MM에 실행되기 때문에 MM에 고유하다. 목적지로서 다른 MM으로 의도된 데이터는 타겟(MM)을 지날 수 있으나, 데이터는 실행되거나 저장될 수 없다.
도 12는 MM에 로컬인 메모리 위치들로부터 데이터를 수신, 처리, 저장 및 검색하는 MM의 일부인 블록 다이어그램을 도시한 것이다. 다른 메모리 모듈로 명령 및 데이터의 라우팅, 소거 숨기기, 및 하우스키핑 동작과 관련될 수 있는 MM의 다른 기능들은 어떤 특정 태양들을 제외하고 어드레스되지 않았다. 이런 세부사항들은 실행 종속적이며 당업자에 의해 제품 개발에 고려될 것이다.
일반적으로, MM은 가령, SRAM, DRAM 또는 유사한 특징들을 갖는 또 다른 메모리 타입일 수 있는 휘발성 고속 버퍼 메모리(210)를 가질 수 있다. 버퍼 메모리(210)는 MC에 의해 MM으로 라우팅된 명령 및 데이터를 수신하고 처리하는데 사용될 수 있다. 명령 및 데이터는 버퍼 메모리(210)에 임시로 저장될 수 있고 저장 메모리(220)에 저장하기 전에 로컬 프로세서(230)에 의해 더 처리될 수 있다. 저장 메모리(220)는 상술한 메모리 타입들 중 어느 하나일 수 있다. 그러나, 본 예에서, 저장 메모리(220)는 FLASH 메모리일 수 있다. 현재 이용가능한 FLASH 메모리의 특징들은 당업자에 잘 알려져 있다. 이들 특징 및 그 시스템 관련에 대한 어떤 정보가 2012년 6월12일자로 출원된 발명의 명칭이 "Memory Management System and Method"인 미국특허 8,200,887과, 발명의 명칭이 "Memory System Having Persistent Garbage Collection", 미국출원 12/796,836에서 찾을 수 있고, 상기 참조문헌은 본 명세서에 참조로 합체되어 있다.
NAND FLASH 메모리는 현재 SLC(Single Level Cell) 및 MLC(Multi-Level Cell)의 2가지 구성으로 가능하다. 기능적 차이는 특정 어드레스가능한 메모리 위치에 저장될 수 있는 데이터의 비트 수에 의해 주로 특징된다고 할 수 있다. SLC는 셀당 하나의 비트를 저장하는 반면, MLC는 셀당 2 비트를 저장한다. 셀당 2비트 이상을 저장할 수 있는 셀들이 개발중에 있고, 충분한 동작 수명을 가지며 상용으로 이용가능한 때 사용될 수 있다.
FLASH 메모리의 특징은 데이터가 저장될 수 있는 속도보다 저장된 데이터를 읽는 속도가 더 크다는 것이다. 읽기 및 쓰기 시간의 이 비대칭뿐만 아니라 블록에 있는 메모리 셀이 다시 쓰여질 수 있기 전에 메모리 셀의 블록이 소거되어야 하는 특징은 메모리 시스템 디자인에 큰 영향을 끼친다. 설계는 RAID된 동작을 수행하는데 있어 쓰기 또는 소거 시간을 마스크하도록 되어 있고, 비교적 연속적인 형태로 하우스키핑 동작을 수행해 메모리 회로의 비대칭 쓰기/읽기 특징들을 완화한다.
당업자는 메모리 셀 블록 및 데이터 블록은 반드시 대칭일 필요가 없을 이해할 것이다. 현재 이용가능한 것처럼 NAND FLASH 메모리는 페이지들로 서브분할된 블록들로 구성된 반도체 칩들로 구성되고, 페이지들은 섹터들로 서브분할될 수 있다. 일반적으로, 메모리 블록은 메모리 섹터의 최소 쓰기가능한 어드레스 범위를 가지며 순차적으로 쓰여지며 일반적으로 섹터는 메모리 페이지의 전체 블록이 소거되지 않는 한 (변경된 데이터로) 변경되지 않을 것이다. 그러나, 데이터 블록은 데이터 구조의 한 측면이고 논리 구성으로서 더 적절한 생각이다.
데이터 요소의 논리 어드레스는 일반적으로 간단히 해당 데이터를 찾을 수 잇는 메모리내 물리적 어드레스와 일치하지 않는 상황을 수용하기 위해, 일반적으로 FTL(Flash Translation Layer)이라고 하는 중간 프로토콜이 실행될 수 있어, 논리 데이터 어드레스를 물리적 데이터 어드레스로의 맵핑을 위해 메타데이터가 제공되는 한편, 또한 필요한 하우스키핑 동작을 수행한다.
MM의 저장 메모리(220) 중 일부 또는 모두는 메모리 칩이 소거 또는 쓰기 동작을 수행될 수 있기 때문에 READ 요청에 응답해 데이터 읽기로부터 차단될 수 있다. 매우 많은 READ 또는 WRITE 요청들이 MM에 계류중인 경우, 정체가 발생할 수 있다.
MM은 메모리 어레이 트리의 하나 이상의 루트들로부터 명령 또는 데이터를 수신하고, 각각의 명령은 GSN을 가질 수 있다. MM에 수신된 GSN의 시퀀스는 끊기지 않을 수 있고, 정확한 순서대로 수신되지 않을 수 있다. 연속 명령(READ 또는 WRITE)가 메모리(M)의 MC에 의해 다른 MM들로 전송될 경우 끊긴 시퀀스가 발생할 수 있다. 이는 데이터의 저장을 위해 다른 메모리 모듈(MM)을 이용하는 것이 반드시 필요하다. 순서가 엉망인 도착도 또한 다른 물리적 경로들을 통해 MC로부터 MM으로 전송되는 데이터로부터 발생할 수 있다. 버스나 MC에서 로드 레벨링을 하거나, 트리에 있는 고장난 메모리 모듈(MM) 주위로 라운팅하기 위해 다른 경로들이 사용될 수 있다.
소정의 동작들은 순서가 엉망인 수신이 MM에 의해 수행되도록 동작의 큐에서 탐지되고 수용될 수 있으며, 큐에서 동작들이 (갭의 인식을 포함한) 변화없는 GSN 순서에 있도록 GSN 숫자 순서의 단절이 식별될 수 있다면 MM에서 용이해질 수 있다.
일태양으로, 각 어드레스가능한 MM에 대한 MMLSN 카운터가 MC에 유지될 수 있다. 각 명령(및 암시적으로 임의의 페이로드 데이터)이 MC에 의해 연속 숫자 순서인 고유 MMLSN에 (MM에) 할당될 수 있다. MC가 버스 아키텍쳐에 의해 연결될 수 있는 메모리 어레이에 어드레스가능한 MM만큼이나 MC에 많은 유지된 MMLSN들이 많다. MM에 액세스하는데 사용된 트리 루트 또는 라우팅에 무관하게 MM과 관련된 MMLSN은 특정 MM에 목적지를 갖는 데이터에 할당된다.
일태양으로, 적어도 명령의 GSN과 MM의 가장 최신의 MMLSN을 갖는 터플이 형성된다. 이 명령 및 관련된 터플은 다음 데이터 패키지가 MC에 의해 MM으로 전송되게 한다.
도 13은 메모리 모듈(MM)의 버퍼 메모리(210)에서의 개념적 상황을 도시한 것이다. (쓰기 명령인 이들 중 일부는 데이터 페이로드와 관련된) 복수의 명령들이도시되어 있다. 명령과 관련된 터플들은 MMLSN과 GSN의 예상된 단조 증가 값을 특징으로 한다. GSN 시퀀스는 상술한 바와 같이 불연속 시퀀스일 수 있다. 즉, 시퀀스는 갭이 있을 수 있다. 그러나, MMLSN 시퀀스는 앞서 상술했던 MC에 MMLSN을 할당하기 위한 규칙에 따라 연속이다.
특히, 이 예에서, GSN(3102)은 상실인 것으로 나타나고, MMSLN(23 및 24)은 순서가 엉망인 것이 주목된다. 상기 연결된 규칙들을 고려하면, 버퍼 메모리(210)에서 명령의 순서화는 조정되며,도 14에 결과가 도시되어 있다. GSN(3102)은 목적지 메모리 모듈(MM)에 의한 실행을 의도하지 않은 것이 인식된다(그리고 MMLSN(19)의 수신만큼이나 빨리 인식될 수 있다). 게다가, GSN(3206 및 3107)의 순서 엉망인 수신이 인식되었고, 시퀀싱이 교정되었다.
도 13에 도시된 수신된 데이터 시퀀스에 따른 메모리 모듈(MM)을 작동시킴으로써 순서 엉망인 명령이 실행될 수 있고, 가능하게는 부정확한 데이터가 반환될 수 있는 한편, GSN에서 명백한 갭들을 분석하기 위해 대기함으로써 MM에 정체가 야기될 수 있다. 예는 GSN에서의 작은 갭들만을 도시한 것이다; 그러나, 특정 MM이 아주 활성화되지 않은 대형 메모리 어레이에서, 연속 명령들의 수신 간의 시간은 MM의 데이터 처리 능력과 크게 비교될 수 있다. GSN에 그리고 명령의 적절한 순서대로 갭이 있는 것을 확실히 읽는 것은 갭을 확인하지 않고도 동작들이 MM에서 수행되게 할뿐만 아니라 구 데이터 에러를 방지하게 할 수 있다.
이 예에서, MMLSN의 최하위 수치값이 먼저 실행된다. 즉, 리스트는 위에서 언로드되고 아래에서 채워진다. 가령, 도 14의 리스트가 실행될 경우, GSN(3101 및 3103)의 실행 간에 대기할 필요가 없고, MMLSN은 수신된 데이터의 실제 데이터 시퀀스에 갭이 전혀 없는 것을 나타낸다. 따라서, MM은 GSN의 중간 값과 관련된 지연 명령을 대기하지 않는다. GSN(3106 및 3117)은 정확한 순서대로 실행된다. LBA3에 쓰기 전에 LBA3로부터 읽기가 수행된다. 이들 동작들이 역순으로(즉, 도 14에서 수신된 것처럼) 수행되었다면, 쓰기 동작은 읽기 동작 전에 수행됐었을 것이며, 이는 순서가 엉망이고, LBA(3)에 작성된 데이터에 의해 겹쳐 쓰여졌을 것이므로, 본래 있었던 데이터는 더 이상 정확하지 않게 된다. 본 명세서에서 "겹쳐쓰기"라는 용어의 사용은 LBA3에서 데이터가 쓰기 동작에 의해 변경되었을 것이란 비유적인 의미이다. 일반적으로, NAND FLASH에서, 이는 메모리에서 새로운 물리적 어드레스에 데이터를 쓰고 FTL의 메타데이터를 업로딩함으로써 달성되었을 것이다. 그러나, 결과는 순서를 벗어난 데이터 읽기가 부정확해질 것이란 것이다.
도 14에 도시된 상황에서, 3106과 3117 간의 GSN에서 갭이 있는 것으로 나타나며, 이는 갭이 아니라 순서가 엉망인 데이터의 수신이 있는 것을 식별하기 위한 MMLSN을 이용하지 않고도, 상황을 판단하는 다른 수단들이 필요했을 것이다. 이는 포스팅되지 않은 거래와 유사하게 MC에 대한 응답에 의해 GSN의 수신의 확인응답에 의해 수행되었을 수 있다. 그러나, 이는 수신된 GSN 모두 또는 GSN에 있는 모든 갭들에 대해 전반적으로 행해져야 할 것이다. 지연 주기 동안 데이터는 버퍼 메모리(210)에 보유되고는 것이 필요하고 시퀀스 갭이 분석될 때까지 로컬 데이터 처리 중 적어도 일부가 지연될 것이다.
(갭의 인식을 포함한) 일치하는 GSN들을 갖는, 순서대로 있는 것으로 알려진 명령들은 즉시 실행될 수 있거나 더 처리될 수 있어 MM의 자원의 사용을 최적화한다.
상술한 MM에 수신된 명령을 처리하는 방법은 특정 시스템 설계에 따라 소정의 효율과 최적화가 달성되게 한다; 그러나 다른 방법들도 이용될 수 있다.
예컨대, 매우 많은 쓰기 명령들이 특정 LBA로 발송되는 상황이 발생할 수 있다. 직접적인 접근으로, 개개의 쓰기 명령들이 순차적으로 실행될 수 있어, 각 연속 쓰기 명령은 저장 메모리(220)에 데이터 페이로드를 명령할 것이다. 이 메모리가 FLASH 메모리인 경우, 각 쓰기 동작은 이전에 소거된 메모리 블록의 순차적 섹터 또는 페이지에 대한 것일 수 있으므로, 사용된 페이지의 번호는 특정 LBA가 작성된 회수와 같아질 것이다.
그런, 데이터가 도 14에 도시된 방식대로 실행을 위해 순서화되었고 다음 수신된 명령이 터플(24,3119) WRITE, LBA3+ 데이터에 의해 특징되었다면, GSN에서 갭이 중요하지 않을 수 있기 때문에, 이런 명령은 리스트에서 여전히 최하위의 MMLSN이었다면 즉시 처리될 수 있다. 리스트에서 나머지 명령들은 도 16에 도시된 바와 같이 있고 GSN(3117)이 아직 처리되지 않은 상황이라면, GSN(3117)과 관련된 동작은 이벤트에 의해 추월당했음이 확인될 수 있다. 즉, LBA3에서의 데이터는 GSN(3119)과 관련된 새 데이터에 의해 겹쳐 쓰여질 것이고, LBA3에 대해 계류중인 READ 동작을 전혀 인터리빙하지 않는다. GSN(3117)과 관련된 LBA3에 데이터를 저장한 후 바로 새 데이터로 "겹쳐쓰기"하는 것은 시스템 자원의 낭비일 수 있다.
또 다른 태양으로, (25,3277) READ, LBA3에 의해 특징된 명령의 연속 수신을 고려하자. 이제, 이전 MMLSN이 24였기 때문에 3117 및 3277 간에 예상된 GSN이 전혀 없고, MMLSN은 또한 요청이 순차적인 것을 나타낸다. 결론적으로, 리스트에서 계류중인 명령들은 READ 명령이 즉시 실행될 수 없는 (소거 또는 칩에 쓰기와 같은 다른 구속조건들을 받는) 어떤 이유가 있는지 알기 위해 조사될 수 있다.
하위 GSN을 갖는 LBA3로부터 데이터를 읽기 위한 요청이 없고, LBA에 계류중인 쓰기 요청이 없다면, 현재 LBA3에 있는 데이터는 이 요청에 대해 시기적절한 데이터이다. 명령은 더 처리될 수 있고, 결과들은 메모리 컨트롤러(MC)로 반환된다. 읽기가 완료될 때까지 플레이스 마커가 두어지므로, 연이은 쓰기 명령이 너무 일찍 실행되지 않는다.
다른 효율들이 가능해질 수 있다. 예컨대, 동일한 LBA(이 경우 LBA3)에 대한 또 다른 읽기 명령이 수신될 경우 실행중인 읽기 명령은 여전히 리스트에 있고 쓰기 명령을 더 이상 인터리빙하지 않는다면, 제 1 읽기 명령을 받는 데이터는 제 2 읽기 명령에 대해 시기적절히 유지되며, 제 1 읽기명령이 완료되자마자 MC로 반환될 수 있다. 제 1 읽기 명령에 따라 읽어진 데이터는 또한 버퍼 메모리(210)에 있는 캐시에 있을 수 있고, 동일한 규칙을 받는다면, 데이터는 저장 메모리(220)에 읽기 동작을 실제로 수행하는 대신에 이용될 수 있다.
MM의 LBA에 대한 읽기 동작의 결과들은 시스템 버스를 통해 신속히 MC에 반환된다. 각 읽기 결과는 MM 및 GSN과 관련되기 때문에, RAID된 데이터 블록의 청크들 모두에 대한 GSN은 같고, 데이터 청크들이 본래 발생 RC로 반환될 경우, 데이터 블록은 다시 어셈블리될 수 있다. "소거 숨기기"가 이용되는지 여부에 따라, 수신된 N 청크의 첫번째 N-1(여기서 하개의 패리티 청크가 있음)은 데이터 블록에 재구성될 수 있거나, 시스템은 수신된 N-1 청크가 패리티 청크를 포함하지 않은 청크일 때까지 대기할 수 있다. 재구성된 데이터는 그런 후 해당기술분야에 공지된 바와 같이 요청 엔티티로 반환된다.
하기의 수치 예는 특정 값을 이용함으로써 논의를 간략히 하기 위한 것이다. 그러나, 당업자는 실제 스루풋과 다른 수치 파라미터들도 시스템 정책, 클라이언트 수, 및 현재 예들 및 설명을 유추해 평가될 수 있는 다른 요인들을 포함한 시스템 아키텍쳐의 세부 내용, 특정 동작조건, 등에 따르는 것을 인식할 것이다.
상술한 개념의 적어도 일부를 이용한 시스템의 스루풋을 고려하자. 시스템의 다양한 태양들에 대한 로딩을 가시화하기 위해 분석이 간략화된다.
DAS(Direct Attached Storage) 시나리오에 대해, 메모리 시스템(200)은 사용 서버(5)의 요구를 들어주게 수행되도록 요청받을 수 있다. 초당 1백만 동작을 포함한 조합된 입력 요구가 있고, 읽기 동작 및 쓰기 동작 간을 대략 구분하며, 각 쓰기 동작은 4K 바이트 페이로드를 포함한다고 가정하자. 간략히 하기 위해, 각 요청(읽기 또는 쓰기)은 약 50 바이트의 정보(소스 어드레스, 목적지 어드레스 등) 를 포함한다고 가정하자.
그러므로, 명령은 약 25 MB/s의 입력 데이터 유량을 나타내고, 작성되는 데이터는 약 2.5 GB/s의 입력 데이터 유량을 포함한다. 스케일링 목적으로, DAS 시나리오에 대해, 3 GB/s의 복합 대역폭을 갖는 PCIe×12 인터페이스에 의해 2.525 GB/s 데이터 입력속도가 이론상 지원될 수 있다. 그러나, 도 5의 예와 호환될 수 있도록, 서버는 PCIe×4 인터페이스에 의해 시스템(100)에 부착되는고, 4 GB/s의 복합 대역폭을 가지며 4개의 RAID 컨트롤러(RC)와 통신하는 것을 고려하자.
각 RC는 초당 평균 250K 요청을 처리하고, 요청이 읽기 요청이거나 쓰기 요청인지 간에 각각의 요청에 대해 GSN을 할당한다. 4개 RC로 구성되고 GSN의 할당 간에 2㎲ 주기를 갖는 메모리 어레이(M) 시스템에 대해, GSN 할당 주기 동안 각 RC에 의한 할당을 위해 대략 0.5 GSN이 요구될 수 있다. 각각의 RC는 상술한 바와 같이 4K 데이터 블록을 4개의 1K 블록들로 분해하고, 블록들에 대해 패리티(P)를 계산한다. 이는 5개 데이터 청크들을 생성한다. 알 수 있는 바와 같이, 3개의 메모리 어레이들(M)은 한 개의 청크를 수신하고 4번째 메모리 어레이는 2개의 청크들을 수신하도록 청크를 분포하는 것이 적절하다. 청크들이 메모리 어레이들 사이에 균일하게 분포되도록 시스템(1)을 구성함으로써, 메모리(M)에 데이터 처리 부하는 할당 주기동안 대략 0.5 청크이다.
각각의 메모리 어레이는 스위치 패브릭(20), 순서화 평면(70) 및 관련된 메모리 버스의 루트들과 통신하는 메모리 컨트롤러(MC)를 갖는다. 본 명세서에 기술된 상황에서는 6개 루트들이 있다(도 3).
각각의 MC가 RC와 소통하고 각 RC로부터 순서화 주기당 데이터의 약 0.5 청크를 수신하기 때문에, 순서화 주기당 MC에 의해 수신된 데이터의 총 청크 개수는 약 2이다. 그러나, RAID된 데이터 블록의 청크들 모두가 발행 RC에 확인응답될 때마다, GSN에 할당되고 MC로 보내지므로 청크들은 MC에 의해 메모리(M)의 메모리 모듈(MM)로 발송될 수 있다.
그런 후 대략, 청크들의 RAID 그룹의 같은 값이 약 4㎲ 마다 메모리(M)로 분포되었다. 메모리(M)은 버스를 통해 MC와 소통하는 복수의 MM으로 구성될 수 있다. 다시, 평가 목적을 위해, 요청들이 메모리(M)의 MM을 통해 동일하게 분포되었고 MC에 의해 서비스되는 각각의 6개 루트들과 관련된 약 14MM들이 있다고 가정하자. 데이터의 4개 또는 5개 청크들은 매 4㎲마다 MC에 의해 발송되고 있다. 그러나, 각 루트는 청크들 중 단 하나만을 전송하고, 상기 청크는 루트에 의해 서비스되는 10개 모듈들 중 하나에 예정된다. 그러므로, 각 MM은 평균 40㎲당 한 개의 데이터 요청을 수신할 수 있다. 이는 초당 약 25,000개 동작들의 복합 읽기/쓰기 속도와 같다.
시스템 계층에서 이 시점까지, 데이터 처리 및 통신은 적어도 약 평균 라인속도로 처리될 수 있고, 데이터 버퍼핑 방식에 있어 조금도 요구되지 않을 수 있다. 명령 및 데이터가 MM에 수신되면, 정체가 발생할 수 있고, 이런 동작 속도를 수용하기 위한 MM의 능력이 시스템(1)의 전체 스루풋에 대해 결정적일 수 있다.
MM에서, 메모리 기술이 FLASH이면, 소거 시간은 10ms 크기일 수 있고, 쓰기 시간은 수 밀리세컨드의 크기일 수 있다. 이들 시간들 각각은 제조업자들이 데이터를 셀에 프로그램하거나 쓰기 위한 시간에 대한 셀당 비트수를 거래할 수 있기 때문에 줄어들기보다는 오히려 장래에 늘어날 수 있다. 읽기 동작은 쓰기/소거 동작에 비해 상대적으로 빠르고 오늘날 상용으로 구매가능한 구성부품들에 대해 데이터의 페이지에 대해 아마 250㎲이다. 액세스 버스 아키텍쳐에서의 향상으로 읽기 시간이 더 줄어들 수 있다. MM에 대한 메모리 칩의 구성 및 MM의 동작에 따라, 개개으 메모리 칩의 성능과 MM의 소정의 수행 간의 갭이 완화될 수 있다. 특히, 앞서 상술한 소거/쓰기 숨기기 기술은 메모리 어레이로서 MM을 고려해 MM 레벨에서 사용될 수 있다. 여기서, 데이터는 쓰기/소거 숨기기를 위해 더 RAID될 수 있다. 이런 기술들은 본 명세서에 상술한 바와 같이 중복 읽기 또는 쓰기를 제거하는 방법 이외에 사용될 수 있다.
본 명세서에 기술된 시스템 및 방법은 소프트웨어 프로그램 제품에 의해 제어 및 동작될 수 있고, 제품은 비휘발성 기계판독가능한 매체에 저장된다. 소프트웨어 제품은 RC, MC, MM 및 그 밖에 있도록 분할될 수 있어, 상술한 기능들 모두 또는 일부를 협력해 실행한다. 컴퓨팅 디바이스는 프로그램 및 데이터 저장을 위한 내부 또는 외부 메모리와 다양한 처리 디바이스들의 조합일 수 있고, 알려져 있거나 개발될 수 있는 ASCIs, FPGAs, 마이크로컨트롤러, 마이크로프로세서, CPU 등을 포함할 수 있다. 이런 컴퓨팅 요소들은 병렬 프로세서, 하드웨이기반의 인코더, 프로토콜 컨버터 및 시스템의 기타 기능적 요소들로 구성될 수 있다.
앞선 설명은 예시를 위해 4KB의 데이터 블록을 사용한다. 데이터 처리 시스템의 많은 새로운 설계들이 이런 블록의 크기를 이용하는 것을 나타내고 있으나, 더 큰 불록 및 더 작은 블록 크기들 모두가 사용될 수 있다. 4KB 데이터 블록들에 대해 최적화된 시스템은 가령 캐시 라인의 크기 순서일 수 있는 128 바이트의 블록 크기를 이용한 레거시 시스템과 동작하도록 구성된다. 256, 512, 1024, 및 2048 바이트의 페이지 크기들이 또한 사용될 수 있고, 가령 디스크 시스템에 이전에 사용된 것처럼 인식될 것이다. 현재 구매가능한 대량 마켓 FLASH의 가장 작은 쓰기 가능한 페이지 크기는 512 바이트이고, 512 바이트 미만의 쓰기는 일정한 값이 덧붙여지거나 다른 작은 데이터 블록들로 공유될 수 있다. 데이터 블록이 읽어지면, 더 큰 데이터 블록이 FLASH로부터 읽어지더라도, 소정의 데이터가 디바이스의 출력 버퍼로부터 추출될 수 있다. 서브-최적화 블록 크기들을 서비스할 때, 읽기 및 쓰기 동작의 개수는 상술한 예에 대해 증가될 수 있다.
본 명세서에 기술된 다양한 방법들을 수행하는 시퀀스 및 시스템의 수준은 특정 설계의 성능 요건에 따라 변경될 수 있고 특정한 예시적인 실시예들의 설명에 의해 제한되도록 되어 있지 않다.
반드시, 복잡한 시스템의 사용기간 동안, 이전에 저장되었던 데이터의 복구, 재구성, 또는 재배치를 포함할 수 있는 고장 및 이상이 발생할 수 있다. 가령 페이지, 블록, 다이, 메모리 패키지, 또는 메모리 어레이의 고장으로 인한 데이터의 손실을 극복하도록 동작이 수행되면, 상기 프로세스를 RAID 재구성이라 할 수 있다. 고장 또는 RAID 재구성을 위한 기타 필요의 원인으로서 하드웨어 요소의 특정한 식별은 본 명세서에서 논의를 간략히 하는 데 있어 단지 편의를 위한 것이다.
상술한 바와 같이, RAID된 데이터 블록과 관련된 데이터와 패리티 정보를 나타내는 복수의 데이터 블록들은 복수의 저장 모듈들에 배포될 수 있고, 데이터 블록들이 저장 모듈에 의해 수신된 것을 확인한 후 각각의 복수의 데이터 블록들에 동일한 GSN이 할당될 수 있다. 또한, 조정된 GSN의 할당을 수행하면서 복수의 RAID 컨트롤러들이 동시에 또는 같이 저장 모듈에 액세스한다. 공통 GSN이 데이터 블록들(여기서 데이터 블록은 계산된 패리티 블록과 스토리지 모듈에 저장될 수 있는 블록들에 대한 임의의 다른 정보를 포함함)에 할당된 후, 개개의 저장 모듈들은 다른 저장 모듈들에 무관하게 저장을 위해 데이터 블록들을 처리할 수 있다.
데이터 블록들을 저장하기 위한 동작은 페이로드로서 데이터 블록에 의해 수반된 WRITE 명령으로 개념화될 수 있기 때문에, READ 명령과 같은 RAID 그룹의 블록들에 대한 임의의 유사한 명령은 동일한 방식으로 전체적으로 조정될 수 있다. 읽어지는 데이터가 요청 RAID 컨트롤러로 반환되면, GSN은 더 처리를 위해 또는 데이터를 요청 엔티티로 반환하기 위해 별개의 저장 모듈로부터 읽어진 데이터 블록들을 RAID 그룹에 어셈블리하는데 사용될 수 있다.
복수의 저장 모듈들에 의해 RAID 그룹의 데이터 블록들에 동작을 위한 데이터 블록들 또는 명령이 수신된 후 GSN을 할당하는 개념과 관련된 동작의 전체 순서는 메모리 고장 후 RAID 그룹의 재생성을 용이하게 하거나 기존의 모듈로부터 새 모듈 또는 스페어 모듈로 데이터의 이동에 이용될 수 있다.
도 15는 RAID 재생성 또는 데이터 이동과 관련된 프로세스를 이해하는데 도움이될 수 있는 중복 RAID 시스템의 간략한 블록도이다.
외부 환경과 복수의 RAID 컨트롤러(RC) 간에 중복 스위치(55)가 배치될 수 있어, 하나의 RC의 고장으로 시스템(300)이 고장나지 않게 된다. RC 중 하나가 가장날 수 있으나, 다른 RC는 요청을 나머지 RC로 보냄으로써 계속 외부 환경을 서비스할 수 있다. "핫 스와핑(hot swapping)"을 위한 하드웨어가 설계되고 구성된다면, 고장난 RC는 교체될 수 있고 전체 시스템 동작이 회복될 수 있다. 단 2개의 RC만이 있는 본 예에서, 시스템이 과하게 로드된다면, 시스템 스루풋의 감소를 겪을 수 있다. 그러나, 복수의 RC들을 갖는 시스템들은 동작 부하가 분산될 수 있는 RC 개수의 역(逆)과 대략 같은 성능 저하를 갖게 된다. 마찬가지로, 메모리(M)의 고장 효과는 이 예에 도시된 것보다 더 많은 메모리들(M)을 갖는 메모리 시스템에서 마찬가지로 완화될 수 있다.
메모리(M)의 고장은 메모리 회로의 구성요소, 관련된 메모리 컨트롤러, 또는 중복 메모리 패브릭(20)의 스위치를 포함한 어떤 다른 보조 구성부품 중 어느 하나의 고장으로 인한 것일 수 있다. 간략히 하기 위해, 이 예에 대해 전체 저장 메모리(가령, M1)가 고장난 것을 가정하자. 이 상황에서, M1으로부터 예상된 데이터는 수신되지 않을 것이며, 고장을 보고하는 진단 메시지가 있을 수 있다. 고장난 저장 메모리(M)를 식별하기 위한 다양한 기술들이 있고, 이들은 통상적으로 시스템 기술 및 구성에 따를 것이다. 고장이 식별되는 어떤 수단들에 의해서든지,정확한 동작이 취해질 필요가 있을 것이다
짧은 기간에, 데이터(M2)와 저장모듈(M3)로부터의 패리티 데이터를 갖는 나머지 저장 메모리는 M1으로부터 손실 데이터를 재구성하는데 이용될 수 있다. 이는 메모리 시스템(300)이 기본적으로 전체 능력으로 계속 동작하게 한다. 그러나, M2나 M3 중 어느 하나의 연속 고장으로 데이터의 손실이 반복될 것이므로, 이런 부분적 고장이 불명확하게 계속되는 것은 허용되지 않아야 한다. (물론, 많은 시스템들은 이런 데이터 손실을 최소화하거나 없애기 위한 기록보관 프로세스를 가지나, 복구 프로세스는 통상 오파인 프로세스이며 시간 소모적이다.)
여기서 M4로 도시된 스페어 저장모듈(S)이 있다면, RAID된 데이터는 스페어 모듈(S)에 복원되고 작성될 수 있다. 실제로, M1으로 맵핑된 LBA는 지금 M4로 맵핑된다. M2 및 M3(데이터 블록 및 패리티)의 해당 LBA에 대한 데이터는 M1의 고장에 의해 손실된 데이터를 재구성하는데 이용되고, 복구된 데이터는 M4의 LBA에 작성된다.
그러나, RAID 스트립에 저장된 데이터는 프로세스 동안 코히어런스를 상실할 수 있는 가능성이 있다. 메모리 시스템(300)의 다수의 사용자들이 있고, 한 명 이상의 사용자가 재생성된 LBA에 액세스할 수 있는 상황을 고려하자. 이는, 가령, 메모리가 웹 페이지, 또는 복수의 사용 프로그램들 또는 엔티티들에 의해 공통으로 사용되는 이미지, 데이터 베이스 테이블 등을 포함한 다른 데이터를 이용하는데 사용되는 경우에 발생할 수 있다.
유효 데이터가 M2 및 M3로부터 읽어진 후 그리고 재구성된 데이터가 M4에 작성되기 전의 시간 주기 동안, 사용자들 중 한 명은 WRITE 명령을 보냈을 수 있다. 이 예에서, WRITE 명령이 데이터 복구 동작의 완료 이전에 실행되면, 데이터는 M2, M3, M4의 RAID 스트립에 작성될 수 있다. 이는 재구성된 데이터보다 더 최신의 데이터로 간주될 수 있다. 그러나, 재구성된 데이터는 뒤이어 M4에 작성될 수 있다. 이 데이터는 스테일 데이터(stale data)를 나타내므로, M4에 저장되고 있는 재구성된 데이터는 M2에 있는 데이터 및 M3에 있는 패리티 정보와 일치하지 않게 된다. "소거 숨기기"를 행하는 데 있어 패리티 데이터의 사용 또는 연속 고장으로 데이터가 손상될 것이다.
원자적 연산으로서 재생성 동작이 수행되는 것을 보장하기 위해 이 동작 동안 쓰기를 방지하도록 LBA를 락킹(locking)하는 것과 같은 동작을 수행할 수 있다. 이는 RAID 컨트롤러(RC)에서 수행될 것이다. 그러나, 도 15에 도시된 바와 같이, 복수의 RAID 컨트롤러들이 있다면, 재생성된 RAID 스트립에 액세스할 능력을 갖는 각각의 RC는 인터리빙 동작이 전혀 없는 것을 보장하도록 상기 LBA에 대해 락될 필요가 있다.
또한, 별개의 프로세서가 RAID 그룹을 재건하는데 전용될 수 있고, LBA 또는 재생성된 LBA 범위의 락킹은 RC들 모두와 조정을 필요로 할 수 있다.
LBA를 재생성하기 위해, RAID 스트립에 있는 나머지 LBA로부터의 데이터가 읽어지고 RAID 스트립의 손실 블록과 관련된 데이터를 재구성하는데 사용된다. 손실 블록은 데이터 블록이거나 패리티 블록일 수 있다. 다시, 이는 개념이 더 잘 이해될 수 있도록 하는 간단한 예인 것을 알아야 한다. RAID 스트립의 데이터의 하나 이상의 세그먼트의 손실 또는 매우 많은 모듈들에 대한 RAID 그룹의 데이터의 스트립핑을 설명할 수 있는 에러정정방식을 포함한 더 복잡한 RAID 배열들도 이들 개념들과 함께 사용될 수 있다.
RAID 그룹의 나머지 데이터가 RAID 그룹의 손실부를 재구성하도록 읽어지면, 동작들은 효과적으로 원자적일 필요가 있다. 상술한 바와 같이, 손실된 RAID 그룹 일원의 LBA는 이제 스페어 저장 모듈에 할당된다. 이것이 행해지면, 스페어 저장모듈에 아직 어떠한 데이터도 저장되지 않게 되며, LBA에 대한 READ 요청은 무효한 정보를 반환할 것이다. 그러므로, 스페어 저장 모듈상의 LBA에 대한 메타데이터는 LBA의 새 위치가 재생성되고 있는 RAID 스트립과 관련있거나 전혀 데이터가 반환되지 않은 것을 나타내는 플래그로 초기화될 수 있다. 그런 후, RAID 컨트롤러는 이에 따라 동작하고, 그 밖의 다른 곳에 기술된 바와 같은 RAID된 데이터를 재생성하도록 구성될 것이다. RAID된 그룹이 재생성되고 손실 데이터가 스페어 메모리 모듈에 복구된 그때, 이런 읽기 명령이 달리 차단되지 않는 한, 메타데이터는 READ 명령에 따라 데이터가 읽어지게 하도록 변경될 수 있다.
복구된 데이터가 저장된 장소는 스페어 저장 모듈로 기술되었다. 그러나, 위치는 데이터의 쓰기에 이용될 수 있는 임의의 메모리 위치일 수 있다. 복구된 데이터용 저장 위치의 선택은 전체 시스템 설계, 스페어 또는 확장 메모리의 제공, 및 사용자 데이터에 할당된 메모리의 퍼센트에 따른다. 이들 구성은 고장, 처리 부하 등을 수용하기 위해 메모리 시스템의 동작 동안 변경될 수 있다.
LBA는 개별적으로 또는 그룹으로 재구성될 수 있다. 그룹의 크기 및 LBA 그룹이 연속이거나 소정의 어드레스 패턴을 구성하는지 여부는 시스템의 세부적인 설계에 따라 고려될 수 있다.
LBA가 재구성되면, 재생성을 제어하는 시스템 구성요소에 의해 특수 READ 명령이 발행될 수 있다. 이는 RC 또는 특수 전용 시스템 요소일 수 있다. READ 명령(READ-reconstruct)이 상술한 바와 같이 GSN에 발생되므로, READ 재구성 명령들 모두가 원자적 형태로 각각의 저장 모듈의 LBA에 실행되는 것을 보장한다. 즉, 어드레스된 저장 모듈들 중 어느 하나의 LBA에 대해 실행된 인터리빙 READ 또는 WRITE 명령들이 전혀 없다.
일태양으로, 가령, NAND FLASH 저장 어레이에 재구성이 수행되면, LBA와 물리적 저장 위치 간의 실제 관계는 FTL(Flash Translation Layer)에 의해 중재된다. 그러나, 간략히 표현하기 위해, 논리 및 물리적 어드레스의 일대일 맵핑은 당업자에 의해 이해된 것으로 가정한다.
재생성되는 LBA의 RAID 스트립에 대해 현재 맵핑된 모듈에 READ 재생성 명령이 수신된다. 도 16으로 돌아가, 고장 메모리가 M1이고, M1에 대한 본래 RAID 스트립의 블록이 M4로 다시 맵핑되지 않은 것을 가정하자. 그러므로, READ 재구성 명령은 상술한 바와 같이 RC에 의해 GSN을 배정받고, M2, M3, M4로 발송된다. 유효 데이터가 M2 및 M3에 대해 있으나, M4는 손실된 RAID 스트립의 블록의 재구성 데이터에 대해 저장 위치가 될 것이다.
READ 재구성 명령으로 M2 및 M3상의 해당 LBA에서 데이터를 읽고 상기 데이터를 요청 RC로 반환한다. 데이터가 유효하지 않은 표시를 M4가 반환하는지 여부는 특정 시스템 설계에 따른다. READ 재구성 명령은 각각의 메모리(M2 및 M3)에서 특정 LBA에 대한 동작을 위한 큐의 헤드로부터 제거되지 않는다. 이와 같은 READ 재구성 명령은 쓰기 목적을 위해 LBA에 다른 액세스를 차단할 수 있다. LBA에 대한 연속 WRITE 명령은 나중 실행을 위해 큐될 수 있다. 인터리빙 WRITE 명령이 없다면, 연속적인 종래 READ 명령들이 캐시된 데이터에 또는 실제 LBA를 기초로 실행될 수 있다. 소정의 상황 하에서 캐시된 계류중인 WRITE 동작에 대해 READ 명령이 실행될 수 있다. 원자성(atomicity)을 보존하기 위해 허용가능한 캐시 동작들이 구성된다.
따라서, LBA에 대한 유효 데이터를 갖는 저장 모듈에 의해 또는 LBA의 재구성 데이터에 대한 목적지 저장모듈에 의해 READ 재구성 명령이 수신되면, 각각의 저장 모듈에 대한 특정 LBA는 READ 재구성 명령이 해제되는 그런 시간까지 작성되지 못하게 된다. READ 재구성 명령은 상기 READ 재구성 명령과 동일한 글로벌 시퀀스 넘버(GSN)를 가지며 WRITE 재구성 명령 또는 유사한 명령에 의해 해제된다. 이 목적을 수행하기 위해 플래그를 설정하고 플래그를 해제하는 것을 포함한 다른 유사한 명령 시스템들도 또한 적합할 수 있다.
초기 READ 재구성 명령이 각각의 저장 모듈에 수신되면, LBA 어드레스에서 (있다면) 데이터가 읽어지고 RC 또는 RAID 재구성 컨트롤러로 반환되며, 데이터는 고장으로 인해 손실된 데이터를 재구성하는데 이용된다. GSN이 WRITE 재구성 명령에 할당되면, READ 재구성 명령에 사용된 것과 동일한 GSN을 이용하는 것이 편리할 수 있다. 이와 같이, WRITE 재구성 명령의 GSN은 재구성되는 LBA에 어드레스된 임의의 종래 WRITE 명령의 GSN보다 더 낮게 된다.
개개의 저장 모듈에서, WRITE 재구성 명령은 READ 재구성 명령의 실행과 LBA에 WRITE 재구성 명령의 수신 간의 사이에 수신된 임의의 다른 WRITE 명령 전에 실행하도록 모듈상의 LBA에 대해 실행된 다음 WRITE 명령이 될 것이다.
임의의 큐된 WRITE 명령을 차단하는 READ 재구성 명령이 해제될 수 있고, 임의의 계류중인 쓰기 동작들이 순차적으로 수행될 수 있다. 논의되는 바와 같이, 계류중인 READ 및 WRITE 명령의 시퀀스에 따라, 명령들 중 일부는 중복인 것으로 굳어지거나 거부될 수 있다. 첫번째 계류중인 WRITE 명령은 큐된 명령의 최하위 GSN이다. 이와 같이, 재구성된 데이터는 각 저장 모듈의 LBA에 작성된 첫번째 데이터이다. 저장모듈의 LBA에 대한 메타데이터는 LBA가 유효한 데이터를 포함하는 것을 나타내면, WRITE 명령은 수행될 필요가 없다. 재구성 데이터가 저장되는 저장 모듈만이 실제로 작성될 필요가 있다.
이 동작 시퀀스의 완료시, 재구성된 데이터는 LBA M4에 작성된 반면, 유효한 채로 있는 메모리(M2 및 M3)상에 동일한 LBA(그러나, RAID 그트립의 다른 구성요소)에 대한 데이터는 적소에 남겨질 수 있다. RAID 스트립이 재구성되었고 고장 전에 있었던 것처럼 사용될 수 있다.
기술된 동작 시퀀스 또는 유사한 접근은 재구성 프로세스 동안 저장 모듈과 RC 간에 요구된 조정을 간략히 하면서 데이터 스트립의 무결성을 유지한다. 시스템 설계의 세부 내용에 따라, 고장난 하드웨어의 일부 또는 모두에 해당하는 LBA 그룹이 읽어질 수 있고 배치 프로세스로서 재구성될 수 있다.
도 16은 RAID 스트립을 재구성하기 위한 LBA 데이터의 읽기와 상기 동작의 완료간의 시간 주기 동안, 및 명령을 실행, 해지, 공고히 함으로써 큐가 해제되기 전의 주기 동안 저장 모듈상의 LBA에 대해 개발될 수 있는 명령 큐를 도시한 것이다.
각 명령은 큐에 저장되며, 이는 통상 컴퓨터 운영 기술 중 어느 하나에 의해 유지될 수 있다. 여기서, 큐는 개념상 사일로(silo)에 수신되고 스택되는 것으로서 개개의 명령으로 도시되어 있다. 명령들이 대략 시간 순으로 수신될 수 있기 때문에, 대부분의, 그러나 전부가 아닌 명령들은 GSN의 오름 순서로 발견되는 경향이 있다. READ-r 명령은 실로의 하단에 도시되어 있고, 해제되는 그런 시간까지 LBA에 어떤 읽기 또는 쓰기를 차단한다. 도시된 바와 같이, 이전의 READ-r 명령과 같은 GSN을 갖는 WRITE-r 명령이 수신될 때의 상황이다. 이 GSN은 다른 계류중인 명령들 중 어느 하나보다 반드시 더 낮아야 하고, 수신될 때에 무관하게 먼저 실행될 것이다. WRITE-r 명령의 데이터 페이로드가 메모리에 작성되는게 필요할지 또는 기존 유효 데이터의 복사인 것으로 해지해야 하는게 필요할지 여부를 판단하기 위해 저장모듈에 LBA에 대한 메타데이터를 검사한 후, READ-r 명령이 해제되므로, 계류중인 동작들이 발생할 수 있다. 계류중인 동작들(GSN 223, 260, 272, 315, 450 및 511)은 이제 순서대로 수행될 수 있어, 저장되거나 읽어지는 데이터는 RAID 스트라이프용 데이터를 갖는 저장 모듈들 모두에 걸쳐 일치한다.
또한, READ-r 블록이 제거되는 때에 큐를 처리할 수 있다. 일반적으로, 쓰기 명령의 데이터 페이로드는 가령, DRAM일 수 있는 로컬 메모리에 보유될 것이다. 223의 GSN을 갖는 READ 명령은 260의 GSN을 갖는 READ 명령을 수행하기 전에 LBA 메모리에 수행될 것이므로 223의 GSN을 갖는 WIRTE 명령의 데이터 페이로드에 의해 만족될 수 있고, 반환될 데이터는 WRITE-223과 관련된다. 마찬가지로, READ-270은 또한 동일한 데이터를 반환할 것이므로, 계류중인 READ 명령들 모두가 실제 물리적 FLASH 메모리에 무관하게 실행될 수 있다. 이들은 요청 RC에 대한 해당 GSN과 함께 유효 데이터를 반환할 것이므로, READ 명령이 만족될 것이며 명령은 큐로부터 제거될 수 있다.
2개의 쓰기 명령들은 임의의 READ 명령과 인터리브되지 않는다면 프로세스는 단순화될 수 있다. 그러나, READ-450이 WRITE 511 및 WRITE 315 사이에 배치되고, 양 명령들이 수행되는 게 필요할 것이다. 대안으로, READ-450은 READ 명령을 만족하도록 WRITE 315의 데이터를 반환할 수 있다. 손실 명령이 식별되도록 RAID 컨트롤러로부터 큐로 명령을 전송하기 위한 프로토콜이 구성되는 한, 손실 인터리빙 명령들이 전혀 없다면, 이에 따라 간략화가 가능해진다.
예를 들어, WRITE-315는 연이은 READ 명령(이 경우, READ-450) 의 실행 전에 WRITE-223 위에 겹쳐 쓸 것이다. 그러므로, WRITE-223은 데이터가 읽어지기 전에 스테일 되었을 것이므로 수행된 것으로 보고될 수 있고 큐로부터 삭제될 수 있다. READ-450은 적절한 때에 WRITE-315의 데이터를 읽을 것이므로, DRAM으로부터 지금 데이터를 읽는 것이 정확한 데이터를 반환할 것이다. 따라서, READ 명령은 물리적 FLASH 메모리에 대한 실제 액세스가 RAID 재구성 동안 차단될 수 있더라도 실행될 수 있다.
재구성되는 LBA로 보내진 계류중인 READ 및 WRITE 동작을 적절히 처리함으로써 계류중인 동작들의 큐를 분석하고 이용가능한 임의의 동적 버퍼 메모리를 이용하는 것을 기초로 재구성 주기 내에 계류중인 동작들을 포함함으로써 재구성 동작과 관련된 시스템 오버헤드가 줄어들 수 있다.
만기시, 저장모듈은 마모로 인해 교체되거나 저장용량, 속도, 또는 시스템의 기타 속성을 업그레이드시킬 필요가 있을 수 있음이 예상된다. 이렇게 하기 위해, (메모리 모듈, 저장 어레이 등일 수 있는) 저장 모듈상의 데이터는 벌크로 새 또는 스페어 저장 디바이스로 옮길 필요가 있을 수 있으므로, 전체 메모리 모듈이 탈착될 수 있다. 하기의 논의에서, 시스템은 사용자에 의해 어드레스가능하지 않는(즉, 임의의 사용자 LBA 스페이스에 있지 않는) 보조 데이터를 가질 수 있음을 알아야 한다. 그러나, 이 데이터는 어떤 형태로 어드레스될 수 있고, 데이터가 옮겨지는게 필요하다면, 상기 방법은 본 명세서에 기술된 바와 유사할 것이다. 가령, 메모리 모듈 상에 FTL과 관련된 메타데이터는 옮겨질 필요가 없을 수 있다. 데이터가 또 다른 메모리 모듈로 옮겨졌다면, 데이터를 새 모듈로의 이동 과정 동안 위치 맵핑 및 FTL 또는 다른 메타데이터에 의해 보유된 기타 히스트로가 생성될 것이고, 그 자체로 옮겨져야 할 필요가 없는 새 모듈에 있게 된다.
도 15를 다시 참조하면, 저장모듈들(M1-M4) 모두가 기능하고 있으나, M4는 저장된 사용자 데이터를 전혀 갖지 않는 모듈이며, 이 논의를 위해, 모듈(M2)에 사용자 데이터 모두를 받아들일 수 있다고 고려하자.
새 저장 모듈에 데이터의 이동을 수행하도록 RAID 스트라이프 재구성을 위해 사용된 절차와 유사한 절차가 사용될 수 있다. 여기서, 수행될 데이터 복구가 전혀 없다면, 상술한 데이터 재구성 기술이 수행될 필요가 없다. 그러나, RAID 스트라이프에 대한 이동 동작의 자동성은 유지될 필요가 있다. 즉, M2에서 M4로 데이터의 이동 동안, 쓰기 동작이 이동된 LBA에 수행되었다면, 데이터 코히런스의 상실이 발생할 수 있다. 예컨대, WRITE 동작이 M2에서 해당 LBA에 대한 데이터가 M4로 옮겨진 그 시간 동안 M1 및 M3의 해당 LBA에 수행되었다면, M2에서 M4로 옮겨진 나중에 도착한 데이터는 쓰기 동작에 의해 M4에 바로 작성된 데이터 위에 겹쳐 쓰여질 것이다. 이 상황에서, M4상의 LBA에 쓰여진 마지막 데이터는 스테일될 것이고, LPA의 RAID 스트라이프에 있는 데이터의 나머지와 일치하지 않을 것이다. 이 구식 데이터가 데이터인지는 패리티 데이터인지 여부에 따라, 소거 숨기기 구성의 일부로 사용된 데이터 또는 패리티 데이터가 부정확할 경우 또는 패리티 데이터가 부정확하고, 재구성된 데이터 또한 부정확한 고장 이후 재구성 동작 동안 에러가 바로 다음 읽기 동작에 발생할 수 있다.
이 상황은 RAID 재구성에 사용된 접근과 유사한 접근에 의해 방지될 수 있다. READ-migrate 명령은 RAID 그룹의 LBA들 모두에 어드레스될 수 있다. READ-migrate 명령은 상술한 바와 같이 GSN이 할당될 수 있다. 이 예에서, READ-migrate 명령은 M4에 작성될 LBA를 포함해, M1, M2, 및 M3상의 LBA에 보내질 수 있다. 명령은 데이터가 실제로 전송되는 모듈만이 데이터를 이동 컨트롤러로 반환하도록 구성될 수 있다. 그러나, READ-migrate 명령은 스트라이프의 모든 저장모듈상의 LBA 및 옮겨진 데이터의 새 위치(M1-M4)에 대한 (WRITE-migrate 동작을 제외하고) 임의의 연속 WRITE 동작을 차단한다. READ-migrate 명령이 발행될 때, 목적지 저장 모듈(이 경우 M4)이 맵핑되도록 RAID 스트라이프의 맵핑이 변경되고, 소스 저장모듈(이 경우 M2)은 맵핑되지 않는다. 그러므로, 임의의 다른 읽기 또는 쓰기 동작들은 데이터가 옮겨지는 저장 모듈로 보내질 것이다.
M2상의 LBA로부터 읽어진 데이터가 실제로 목적지 저장 모듈(M4)에 작성될 때까지, 상기 LBA에 대한 연속 읽기 및 쓰기 동작들은 맵핑된 저장 모듈들 모두에 대한 READ-migrate 명령에 의해 차단될 수 있다. 옮겨진 데이터는 M4상의 LBA로 보내지고 해당 LBA에 작성된다. 이때에, 데이터 스트라이프의 LBA에 대한 쓰기 및 읽기의 차단이 해제될 수 있다. 이는 READ-migrate 명령과 동일한 GSN을 가진 WRITE-migrate 명령을 발행함으로써 수행될 수 있다. 새 LBA로 보내진 WRITE-migrate 명령은 페이로드로서 이동된 데이터를 가질 수 있다. 데이터가 옮겨지지 않은 RIAD 그트립의 저장 모듈에 대해, WRITE-migrate 명령은 관련된 데이터 페이로드를 가질 수 없으나, READ-migrate 명령을 취소하는 효과가 있으므로 옮겨진 일부를 가졌던 RAID 스트라이프의 LBA에 대해 메모리 시스템의 계속된 동작을 허용한다.
READ-migrate 명령의 효과는 READ-reconstruct 명령의 효과와 유사하기 때문에, 옮겨진 LBA에 대해 큐된 읽기 및 쓰기 명령은 RAID 재구성 동작에 대해 상술한 바와 유사한 방식으로 처리될 수 있다.
READ-migrate 명령은 관련된 파라미터를 가질 수 있어, 옮겨진 데이터가 목적지 모듈(이 예에서 M4)로 직접 보내질 수 있거나, RC나 이동 특정 컨트롤러를 통해 보내질 수 있다.
재구성되는 LBA 세그먼트를 향해 보내진 WRITE 명령을 차단하는 동작은 다양한 기술에 의해 달성될 수 있다. 예컨대, RAID 스트라이프의 LBA와 관련된 각 저장 모듈상의 메타데이터는 물리적 메모리 위치의 값과는 다른 값을 반환하도록 변경될 수 있어, 메타데이터는 쓰기 명령이 일시적으로 차단될 필요가 있음을 나타내기 위한 플래그로서 동작한다. WRITE-reconstruct 또는 WRITE-migrate 명령의 도착은 LBA에 대한 메타데이터를 변경하는데 이용될 수 있어 READ-reconstruct 또는 READ-migrate 명령의 영향이 없어진다. WRITE-reconstruct 또는 WRITE-modify 명령이 데이터 페이로드에 의해 수행되면, 데이터는 보유를 위해 저장 메모리에 작성될 것이다. 동반한 데이터가 전혀 없다면, 이전 데이터는 변경되지 않으나, 데이터를 읽거나 쓰는데 연속 READ 또는 WRITE 명령이 실행될 수 있다. 물론, 데이터가 캐시에 이용될 수 있다면, 상기 데이터가 사용될 수 있다.
RAID 재생성 및 데이터 이동에 대한 설명은 간략히 하기 위해 특히 간략화된 시스템 배열에 대해 설명되었으나, 도 3 및 도 4의 시스템 아키텍쳐뿐만 아니라 다른 시스템 아키텍쳐들도 본 명세서에 설명된 기술들과 호환될 수 있음이 명백하다. DRAM 캐시는 가령, 도 3의 MC에, 도 14의 데이터 버퍼(210)에, 또는 그 밖의 다른 곳에 위치될 수 있다.
LBA의 범위는 그룹으로 옮겨질 수 있다. 이런 LBA 그룹들은 LUN의 전부 또는 일부를 포함할 수 있다. 즉, 외부 애플리케이션은 사용을 위해 LBA 블록을 할당받았을 수 있다. 이 LBA 블록은 메모리 시스템(300)에 의해 인식된 LBA 서브세트를 포함할 수 있다. 외부 관점에서 사용중인 애플리케이션은 LUN 및 LBA를 어드레스하도록 보일 수 있으나, 맴핑은 사용자에 의해 인식된 LUN-LBA와 메모리 시스템의 LBA 사이에 수행될 수 있다. 이런 맵핑은 각 LUN이 다른 속성을 가질 수 있기 때문에 RC의 동작으로 수행될 수 있다. 예컨대, 다른 LUN들은 다른 RAID 스트라이프 특성들 또는 다른 서비스 관련 속성들을 가질 수 있다. 그러므로, LUN의 LBA를 메모리 시스템(300)의 LBA 공간으로의 맵핑은 사용자 요건들에 대해 메모리 시스템에 의해 수행된 서비스들을 특징으로 하도록 이용될 수 있다.
기본적인 메모리 시스템(300)은 큰 그리고 가능하게는 확장가능한 메모리를 갖는 플랫 어드레스 공간으로 동작할 수 있는 한편, 서비스로서 메모리 시스템의 개별 사용자들은 크기별로 가능한 메모리를 필요로 하지 않을 수 있다. 더욱이, 개별 사용자들은 다른 데이터 보호, 데이터 신뢰도, 시스템 이용가능성, 지연, 또는 사용자 애플리케이션의 사용자에 한정된 기타 서비스 파라미터들을 가질 수 있다. 사용자는 또한 메모리 시스템(300)에 의해 서비스되는 복수의 다른 애플리케이션 프로그램들을 가질 수 있다. 메모리 시스템의 이런 사용은 종종 가상화(virtualization)로서 설명된다. 기본적으로 메모리 영역의 일부는 논리 유닛 및 소정의 논리유닛넘버(LUN)로 정의될 수 있다. 사용자 애플리케이션은 이들을 저장하고, LUN과 관련되나 그 자체로 메모리 시스템과 관련없는, LBA를 갖는 메모리 영역으로부터 데이터를 검색할 수 있다. LUN 및 LBA가 메모리 시스템(300)의 전체 LBA 공간으로 맵핑되도록 맵핑이 수행될 수 있다. 메모리 시스템(300)의 LBA 공간은 사용자에 투명한 방식으로 특정 서비스 특징들을 제공하도록 관리될 수 있다.
일태양으로, 메모리 시스템(300)의 사용자 액세스가능한 메모리 공간을 포함한 복수의 메모리 영역들(MA)은 복수의 메모리 영역들(MA) 각각이 LBA의 연속 범위및 특정한 성능 특징들을 갖도록 정의될 수 있다. 성능 특징들은 특정한 사용자 요건을 서비스하기 위해 기설정된 토대를 기초로 확립될 수 있다. MA들 중 하나 이상이 사용자에 알려져 있고 액세스가능한 LUN을 형성하도록 그룹화될 수 있으며, 이는 LUN이며 사용자가 데이터를 읽고 쓰기 위해 어드레스하는 LUN내 논리 어드레스이다.
애플리케이션 프로그램은 LUN 및 관련된 LBA를 제공할 경우, 메모리 시스템(300)은 LUN 및 LBA를 하나 이상의 MA 및 메모리 시스템(300) 어드레스 공간내 논리 어드레스와 연관시킨다. LBA 어드레스 워드는 (가령, 64 비트인) 물리적 메모리보다 더 클 수 있기 때문에, 어드레스 공간은 연속이거나 불연속적일 수 있고, 메모리 시스템(300)의 크기를 확장하기 위해 추가 물리적 메모리가 추가될 수 있다. 이는 네트워킹, 다른 메모리 어레이(300)들을 스위치 패브릭(20)에 추가 등을 포함한 다양한 기술들에 의해 행해질 수 있다.
이런 배열은 초기에 잘 이용될 수 있으나, 사용자들은 서비스를 중단하건, 서비스 요망 기간을 변경하건, 총 메모리 요건을 증감하거나, 등을 할 수 있다. 그러므로, 시간에 걸쳐, 다양한 LUN이 할당해제될 수 있고, 다른 사용자들을 위해 이용될 수 있게 된다. 그러나, 관련된 MA의 서비스 특징들은 새 사용자에 적절하지 않을 수 있다. 기존 MA의 LBA를 또 다른 스토리지 모듈 또는 메모리 시스템(300)의 스토리지 모듈들로 옮김으로써 기존 MA로부터 새 MA들이 구성될 수 있다. 마찬가지로, 추가 메모리 시스템(300)이 어드레스가능한 공간 내에 추가되면, 변경된 성능 특징들을 갖는 더 큰 LUN 또는 LUN들이 생성될 수 있고, 기존 LUN으로부터의 데이터가 새 LUN으로 옮겨질 수 있다.
또 다른 태양으로, 복수의 메모리 시스템들(가령, 300)은 하나의 메모리 시스템 동작될 수 있고 복수의 외부 데이터 소스들, 데이터 요청 등과 통신할 수 있다. 이런 시스템은 또한 사용자 또는 다른 소프트웨어를 실행할 수 있는 복수의 서버들(5)을 포함할 수 있고, 데이터 스토리지에 대한 컴퓨팅 디바이스 접근을 이용할 수 있다. 복수의 서버들은 가령 도 15의 스위치에 연결될 수 있고, 네트워크를 통해 사용자로부터 수신된 요청들을 기초로 가령 데이터 베이스 동작을 실행할 수 있다. 이들 동작들을 수행하기 위해 읽거나 쓰여질 데이터가 메모리 시스템(300)들 중 어느 하나에 위치될 수 있다. 그러나, 각각의 메모리 시스템(300)은 별도의 GSN을 가질 것이며, 특히, 가령, 메모리 어레이 또는 그 일부가 RAID 또는 전체적으로 RAID 그룹의 스트라이프에 할당될 수 있거나, 또는 메모리 시스템에 데이터를 저장하는 프로세스 및 메모리 시스템으로부터 데이터를 읽는 프로세스는 동일한 프로세스가 아니며 긴밀하게 연결되지 않는다면, 데이터 일치를 보장하기 위해 분포된 섀시(chassis)의 동작을 조정하는 몇몇 방법이 요구된다.
메모리 시스템은 조정되는 식으로 동작하는 복수의 메모리 시스템들(300)로 구성될 수 있다. 각 메모리 시스템(300)은 동작이 상술한 바와 같이 조정된 복수의 RAID 컨트롤러(RC)를 가질 수 있다. 복수의 별개의 메모리 시스템(300)이 사용되면, 조정 방법은 구성요소들 간에 증가된 거리, 일관성 있고 시기적절하게 복수의 메모리 시스템(300)과 통신할 필요성, 중복, 및 신뢰도 및 기타 사업 및 디자인 고려사항들에 맞출 필요가 있을 수 있다. 시기적절함, 일치 등에 대한 동일한 기준이 섀시의 랙 또는 복수의 이런 랙들을 포함할 수 있는 다른 더 큰 메모리 확장 크기에 적용될 수 있다.
각각의 RC와 각각의 메모리 컨트롤러(TC)가 서로 통신하는 도 10의 아키텍쳐를 간단히 확장하는 것으로는 적어도 상호연결 관점에서 인터페이스가 바로 비효율적이 될 수 있다.
메모리 시스템(300)의 그룹에 대해 GSN 할당을 수행하는 한가지 접근은 복수의 메모리 시스템들(300)이 링 배열로 서로 통신하도록 배열될 수 있는 도 17에 도시되어 있다. 하드웨어 프로토콜은 도 9에 사용된 것과 같거나 유사할 수 있고, 멀티 섀시 경우로 상술한 프로토콜의 확장이 직접적이다. 그러나, 이런 배열에서, 전체 섀시 그룹에 GSN의 할당과 관련된 지연들은 GSN을 각각의 섀시에 할당하기 위한 시간의 연속을 포함할 수 있다. 이는 각 메모리에 대해 평가된 버퍼 메모리 요건들을 높이고 명령에 응답하기 위한 지연을 증가시킬 수 있다.
개개의 섀시(300)는 글러벌 어드레스에 따라 다양한 메모리 시스템들(300) 간에 데이터를 보내기 위해 내부 스위치 패브릭(20) 또는 입력 스위치(55)의 확장을 가질 수 있다. 내부 스위치 패브릭을 외부 환경으로 확장하는 것은 데이터가 복수의 메모리 시스템들(300)을 통해 보내져야 할 수 있도록 메모리 시스템을 데이지 체인함으로써 또는 내부 스위치 패브릭(20 또는 55)의 동작과 일치하는 외부 스위치 패브릭으로 데이터를 보냄으로써 될 수 있다.
또 다른 태양으로, 메모리 모듈 모두에 있는 각 RC 및 각 TC는 도 18에 도시된 바와 같이 메모리 시스템(300) 외부에 위치된 별도의 스위치(500)와 통신할 수 있다. 스위치는 TC로부터 성공 보고를 수신하고 각 할당 간격의 마지막의 상태를 기초로 요구된 GSN을 할당하는 기능을 수행할 수 있다. 도 10의 구조와 다소 유사한 것을 고려할 수 있는데, 이 경우, 하나의 시스템 구성요소인 스위치(500)가 GSN의 할당을 중재한다. 구성요소(500)는 스위치로 기술되어 있으나, 컴퓨팅 자원들, 전용 로직 등을 이용해 실행이 행해질 수 있다. 더욱이, 시스템이 확장됨에 따라, 스위치는 복수의 스위치들이 될 수 있고, 예컨대 외부 전용 스위치 패브릭을 형성할 수 있다. 대안으로, 스위치(500)는 서로 또는 공유된 통신 패브릭을 통해 메모리 회로와 통신할 수 있다.
도 10의 내부 순서화면은 GSN을 할당할 목적으로 도 18의 통신 경로에 의해 대체될 수 있고, 개개의 섀시(300)는 글로벌 어드레스에 따라 다양한 메모리 시스템들(300) 간에 데이터를 보내기 위해 입력 스위치(55) 또는 내부 스위치 패브릭(20)의 확장을 가질 수 있다. 내부 스위치 패브릭을 외부 환경으로의 확장은 데이터가 복수의 메모리 시스템들(300)을 통해 보내져야 할 수 있도록 메모리 시스템을 데이지 체인함으로써 또는 내부 스위치 패브릭(20 또는 55)의 동작과 일치하는 외부 스위치 패브릭으로 데이터를 보냄으로써 될 수 있다. 이 접근은 도 17의 지연보다 지연이 덜하나, 할당을 수행하는 시간은 하나의 메모리 시스템(300)의 시간과 유사하므로, 스위치(500)과 같은 추가 시스템 모듈들 및 상호연결을 위한 복수의 케이블들이 있다.
도 19에 또 다른 접근이 도시되어 있으며, 도 19에서는 도 10의 내부 순서화 평면이 줄어들거나 삭제될 수 있고, 메모리 시스템(300)의 RC 및 TC는 메모리 시스템(300)에 대한 GSN 할당을 나타내는 데이터를 공고히 하고, 가령, 각 메모리 시스템(300)의 TC 또는 RC 중 하나는 공고히 된 데이터를 스위치(500)로 전송하므로, GSN이 TC에서 계류중인 동작에 할당될 수 있게 된다. 선택된 TC 및 RC는 처리 부하가 더 잘 분배될 수 있도록 순환될 수 있다. 대안으로, 각각의 메모리 시스템(300)내의 특정 모듈은 요청의 통합 및 GSN의 연속 조정 할당을 수행할 수 있다. 이들 기능들은 시스템의 고도로 이용가능한 측면들을 보존하기 위해 중복되거나 다른 백업 수단을 가질 수 있다.
또 다른 예로, 메모리 시스템(300) 내에서 지연이 낮은 도 9의 순서화 평면의 특징들은 메모리 시스템(300) 간에 간단한 인터페이스를 초래할 수 있는 도 17의 데이지 체인 접근과 조합될 수 있다. 인터페이스는 가령 PCIe, 이더넷, Infiniband, SERDES 링크, 또는 기타 특수용 인터페이스일 수 있는 임의의 저지연 인터페이스일 수 있다. 성능 요건에 따라, 순서화 평면은 상술한 바와 같이 내부 스위치 패브릭(20)과 조합될 수 있다. 단일 메모리 시스템의 스루풋 및 지연 특징들의 다소 악화를 초래할 수 있는 이런 접근은 더 작은 개수의 인터커넥션들을 갖고, 외부 스위치(500)가 있거나 없이 구성될 수 있다. 메모리 시스템들(300) 간의 연결이 적어도 중복되는 경우, 사용자들에 서비스를 가로막지 않고도 전체 메모리 시스템(300)이 큰 동작 메모리 시스템에 추가 또는 제거될 수 있다.
복수의 메모리 시스템들(300)의 GSN의 조정에 관한 설명이 메모리들 모두가 동일한 GSN 영역에서 동작하는 상황을 말하나, 이는 제한이 아니다. 메모리 시스템(300) 그룹은 다른 메모리 시스템(300) 그룹과 더 느슨하게 결합될 수 있어, 별도의 GSN 시퀀스가 사용된다. 이는 시스템들 간에 데이터의 상호통신이 드물고 명령에 응답하는데 있어 추가 지연이 허용될 수 있거나, 시스템이 미러되거나 크로스미러되는 상황을 수용할 수 있다. 즉, 주 시스템은 모든 데이터를 동일한 데이터 저장 또는 기타 동작들을 자동으로 수행하는 보조 시스템으로 미러되도록 보낼 수 있다. 또 다른 태양으로, 시스템은 동작의 실시간 연속을 제공하도록 동시에 사용자 프로그램들을 실행할 수 있다. 다른 이런 시나리오도 당업자에 이해될 수 있다.
로드 밸런싱, 웨어 라벨링 등으로서 다른 이와 같은 시스템 목적을 이행하기 위해 LBA의 데이터가 메모리 시스템(300)의 일부 또는 모두에 걸쳐 분포될 수 있는 것이 또한 이해될 것이다. 즉, RAID 그룹의 폭넓은 스트립핑은 가령 하나 이상의 메모리 시스템들(300)에 걸쳐 확장될 수 있다.
본 발명은 상술한 예로써 설명되었으나, 본 발명은 상기 예들에 국한되지 않고 오히려 다양한 변경 및 변형들이 본 발명의 기술사상으로부터 벗어남이 없이 가능한 것을 당업자는 알아야 한다.

Claims (42)

  1. 복수의 컨트롤러들;
    복수의 컨트롤러들 중 적어도 일부의 컨트롤러와 통신하는 복수의 메모리 채널 컨트롤러들; 및
    적어도 하나의 메모리 모듈을 포함하는 하나 이상의 그룹으로 배열된 복수의 메모리 모듈들을 구비하고,
    복수의 컨트롤러들 중 각 컨트롤러는 데이터 블록을 수신하고 데이터 블록에 대한 패리티를 계산하고 스트라이프의 스트립들을 포함하는 RAID된 데이터 블록을 형성하도록 동작하고,
    메모리 모듈의 각 그룹은 복수의 메모리 채널 컨트롤러들 중 한 메모리 채널 컨트롤러와 연관되며,
    복수의 컨트롤러들 중 각 컨트롤러는 복수의 메모리 모듈들 중 하나 이상의 메모리 모듈에서 읽거나 쓰여질 RAID된 데이터 블록의 스트라이프의 개개의 스트립들을 복수의 메모리 채널 컨트롤러들 중 적어도 하나의 메모리 채널 컨트롤러로 송신하도록 동작하고, 스트립들이 메모리 채널 컨트롤러에 의해 수신된 후 동일한 글로벌 시퀀스 넘버(GSN)가 스트라이프의 스트립들 중 각각에 할당되는 메모리 시스템.
  2. 복수의 전자 섀시를 구비하고, 각 섀시는:
    복수의 컨트롤러들;
    복수의 컨트롤러들 중 적어도 일부의 컨트롤러와 통신하는 복수의 메모리 채널 컨트롤러들; 및
    복수의 메모리 모듈들을 구비하고,
    복수의 컨트롤러들 중 각 컨트롤러는 데이터 블록을 수신하고 데이터 블록에 대한 패리티를 계산하고 스트라이프의 스트립들을 포함하는 RAID된 데이터 블록을 형성하도록 동작하고,
    복수의 메모리 모듈들 중 메모리 모듈의 그룹은 복수의 메모리 채널 컨트롤러들 중 한 메모리 채널 컨트롤러와 연관되며,
    복수의 컨트롤러들 중 각 컨트롤러는 복수의 메모리 채널 컨트롤러들 중 적어도 하나의 메모리 채널 컨트롤러로 보내지는 RAID된 데이터 블록의 스트라이프의 개개의 스트립들을 송신하도록 동작하고, 개개의 스트립들은 복수의 메모리 모듈 중 하나 이상의 메모리 모듈에 쓰여지거나 하나 이상의 메모리 모듈로부터 읽어지고, 스트립들이 메모리 채널 컨트롤러에 의해 수신된 후 동일한 글로벌 시퀀스 넘버(GSN)가 스트라이프의 스트립들 중 각각에 할당되는 메모리 시스템.
  3. 제 2 항에 있어서,
    RAID된 데이터 블록의 스트립이 보내지는 제 1 메모리 채널 컨트롤러는 복수의 메모리 인클로저의 제 1 전자 섀시에 있고, RAID된 데이터 블록의 스트립이 보내지는 제 2 메모리 채널 컨트롤러는 복수의 메모리 인클로저의 제 2 전자 섀시에 있는 메모리 시스템.
  4. 복수의 컨트롤러들;
    복수의 메모리 모듈들; 및
    복수의 메모리 모듈들 중 적어도 일부의 메모리 모듈과 통신하는 복수의 메모리 채널 컨트롤러들을 포함하고,
    복수의 컨트롤러들 중 각 컨트롤러는 데이터 블록을 수신하고 데이터 블록에 대한 패리티를 계산하고 스트라이프의 스트립들을 포함하는 RAID된 데이터 블록을 형성하도록 동작하고,
    복수의 메모리 모듈들은 하나 이상의 메모리 모듈 그룹으로 배열되고 각 그룹은 복수의 메모리 채널 컨트롤러 중 각 메모리 채널 컨트롤러와 연관되고,
    복수의 컨트롤러 중 각 컨트롤러는 그룹의 메모리 모듈에 읽어지거나 그룹의 메모리 모듈로부터 쓰여질 RAID된 데이터 블록의 개개의 스트립들을 메모리 모듈 그룹으로 송신하도록 동작하고, 스트립들이 복수의 메모리 채널 컨트롤러 중 적어도 하나의 메모리 채널 컨트롤러에 의해 수신된 후 동일한 글로벌 시퀀스 넘버(GSN)가 RAID된 데이터 블록의 각각의 스트립들에 할당되는 메모리 시스템.
  5. 제 1 항 내지 제 4 항 중 어느 하나의 항에 있어서,
    GSN가 단조 증가하는 메모리 시스템.
  6. 제 1 항 내지 제 4 항 중 어느 하나의 항에 있어서,
    제 1 메모리 모듈 그룹은 제 1 RAID 그룹을 포함하는 메모리 시스템.
  7. 제 6 항에 있어서,
    제 2 메모리 모듈 그룹은 제 2 RAID 그룹을 포함하는 메모리 시스템.
  8. 제 7 항에 있어서,
    복수의 컨트롤러 중 제 1 컨트롤러는 제 1 RAID 스트라이프의 데이터 스트립을 제 1 메모리 모듈 그룹으로 그리고 제 2 RAID 스트라이프의 데이터 스트립을 제 2 메모리 모듈 그룹으로 전송하기 위한 것인 메모리 시스템.
  9. 제 8 항에 있어서,
    제 1 RAID 그룹의 메모리 모듈들 중 적어도 일부는 제 2 RAID 그룹의 메모리 모듈들과 동일한 메모리 모듈들인 메모리 시스템.
  10. 제 9 항에 있어서,
    제 1 컨트롤러에 의해 요청된 읽기 및 쓰기 동작들은 GSN 순서로 메모리 모듈들에 의해 수행되는 메모리 시스템.
  11. 제 7 항에 있어서,
    복수의 컨트롤러 중 제 1 컨트롤러는 제 1 RAID 스트라이프의 데이터 스트립을 제 1 메모리 모듈 그룹으로 전송하고, 복수의 컨트롤러 중 제 2 컨트롤러는 제 2 RAID 스트라이프의 데이터 스트립을 제 2 메모리 모듈 그룹으로 전송하는 메모리 시스템.
  12. 제 11 항에 있어서,
    제 1 컨트롤러 및 제 2 컨트롤러에 의해 요청된 읽기 및 쓰기 동작들은 GSN 순서로 수행되는 메모리 시스템.
  13. 제 1 항 내지 제 4 항 중 어느 하나의 항에 있어서,
    복수의 컨트롤러들이 클라이언트와 통신하는 메모리 시스템.
  14. 제 13 항에 있어서,
    클라이언트는 서버인 메모리 시스템.
  15. 제 14 항에 있어서,
    클라이언트는 복수의 서버들이고, 복수의 서버들은 복수의 컨트롤러들의 그룹과 통신하는 메모리 시스템.
  16. 제 13 항에 있어서,
    클라이언트는 네트워크 인터페이스인 메모리 시스템.
  17. 제 1 항 내지 제 4 항 중 어느 하나의 항에 있어서,
    GSN는 프로토콜에 따라 할당되는 서버인 메모리 시스템.
  18. 제 17 항에 있어서,
    프로토콜은 데이터 블록의 데이터를 복수의 메모리 채널 컨트롤러 중 메모리 채널 컨트롤러 그룹으로 전송하도록 동작할 수 있는 제 1 컨트롤러를 포함하고, 상기 메모리 채널 컨트롤러 그룹은 데이터 블록의 수신을 확인응답하도록 동작하는 서버인 메모리 시스템.
  19. 제 18 항에 있어서,
    GSN은 확인응답된 데이터 블록에 할당되고 GSN은 적어도 메모리 채널 컨트롤러 그룹으로 전송되는 클라이언트는 서버인 메모리 시스템.
  20. 제 19 항에 있어서,
    GSN의 할당은 각각의 컨트롤러에 의해 요구된 GSN 값들의 번호의 조정에 의해 주기적으로 행해지는 클라이언트는 서버인 메모리 시스템.
  21. 제 20 항에 있어서,
    복수의 컨트롤러들은 라운드-로빈 방식으로 서로 통신하는 메모리 시스템.
  22. 제 20 항에 있어서,
    복수의 컨트롤러들이 주기적 기반으로 서로 통신하는 메모리 시스템.
  23. 제 1 항 내지 제 4 항 중 어느 하나의 항에 있어서,
    복수의 컨트롤러 및 복수의 메모리 채널 컨트롤러들은 스위치 패브릭을 이용해 통신하는 메모리 시스템.
  24. 제 23 항에 있어서,
    스위치 패브릭은 PCIe 네트워크인 메모리 시스템.
  25. 제 1 항 내지 제 4 항 중 어느 하나의 항에 있어서,
    컨트롤러들은 스위치 패브릭을 이용해 복수의 클라이언트들과 통신하는 메모리 시스템.
  26. 제 25 항에 있어서,
    스위치 패브릭은 PCIe 버스인 메모리 시스템.
  27. 제 1 항 내지 제 4 항 중 어느 하나의 항에 있어서,
    캐시에 있는 데이터의 블록 어드레스에 대한 데이터를 이용해 데이터의 블록 어드레스에 대한 현저한 쓰기 요청보다 더 낮은 GSN을 갖는 데이터의 블록 어드레스에 대한 읽기 요청에 응답하도록 동작하는 메모리 시스템.
  28. 제 1 항 내지 제 4 항 중 어느 하나의 항에 있어서,
    데이터의 동일한 어드레스 블록에 대한 현저한 쓰기 요청보다 더 낮은 GSN을 가지나 데이터 블록의 어드레스에 대한 인터리빙 읽기 요청을 갖지 않는 쓰기 요청이 확인응답되고 폐기되는 메모리 시스템.
  29. 제 1 항 내지 제 4 항 중 어느 하나의 항에 있어서,
    데이터 블록의 스트립의 스트립들은 데이터와 계산된 패리티를 포함하는 메모리 시스템.
  30. 제 1 컨트롤러 그룹;
    제 1 컨트롤러 그룹과 통신하는 제 1 메모리 채널 컨트롤러 그룹;
    제 1 메모리 채널 컨트롤러 그룹 중 적어도 하나의 제 1 메모리 채널 컨트롤러와 통신하는 제 1 메모리 모듈 그룹;
    제 2 컨트롤러 그룹;
    제 2 컨트롤러 그룹과 통신하는 제 2 메모리 채널 컨트롤러 그룹; 및
    제 2 메모리 채널 컨트롤러 그룹 중 적어도 하나의 제 2 메모리 채널 컨트롤러와 통신하는 제 2 메모리 모듈 그룹을 포함하고,
    제 1 컨트롤러 그룹 중 각 컨트롤러는 데이터 블록을 수신하고 데이터 블록에 대한 패리티를 계산하고 스트라이프의 스트립들을 포함하는 RAID된 데이터 블록을 형성하도록 동작하고,
    제 2 컨트롤러 그룹 중 각 컨트롤러는 데이터 블록을 수신하고 데이터 블록에 대한 패리티를 계산하고 스트라이프의 스트립들을 포함하는 RAID된 데이터 블록을 형성하도록 동작하고,
    제 1 또는 제 2 컨트롤러 그룹 중 개개의 컨트롤러는 RAID된 데이터 블록의 개개의 스트립들은 제 1 또는 제 2 메모리 모듈 그룹으로 송신하도록 동작하고, 제 1 또는 제 2 메모리 채널 컨트롤러 그룹에 의해 스트립들이 수신된 후 동일한 글로벌 시퀀스 넘버(GSN)가 스트라이프의 각각의 스트립들에 할당되는 메모리 시스템.
  31. 제 30 항에 있어서,
    데이터 블록의 스트립들은 데이터 블록에 대한 패리티 스트립을 포함하고, 복수의 메모리 모듈 그룹은 RAID 그룹인 메모리 시스템.
  32. 제 31 항에 있어서,
    각각의 컨트롤러 및 제 1 및 제 2 메모리 채널 그룹의 각각의 메모리 채널 컨트롤러들과 통신하는 스위치를 더 포함하고, 상기 스위치는 메모리 채널 컨트롤러에 의해 수신된 데이터 블록의 스트립들의 보고를 수신하도록 구성되며, 데이터 블록의 스트립들 모두의 성공적인 수신이 메모리 채널 컨트롤러들에 의해 스위치에 확인응답 되고나면 데이터 블록의 각각의 스트립들에 동일한 GSN을 할당하도록 구성되는 메모리 시스템.
  33. 제 30 항에 있어서,
    제 1 컨트롤러 그룹 및 제 2 컨트롤러 그룹은 GSN을 할당하도록 동작하고, 제 1 및 제 2 컨트롤러 그룹은 라운드-로빈 방식으로 동작을 수행하는 메모리 시스템.
  34. 제 31 항에 있어서,
    각각의 제 1 및 제 2 컨트롤러 그룹들 중 한 컨트롤러와 통신하는 스위치를 더 포함하고, 상기 스위치는 메모리 채널 컨트롤러에 의해 수신된 데이터 블록의 스트립에 해당하는 일련의 GSN의 할당을 위한 요청을 수신하도록 구성되며, 할당된 GSN의 동일한 GSN이 데이터 블록의 스트립들에 할당되는 메모리 시스템.
  35. 제 31 항에 있어서,
    각각의 제 1 및 제 2 컨트롤러 그룹들 중 한 컨트롤러 및 한 메모리 채널 컨트롤러와 통신하는 스위치를 더 포함하고, 제 1 또는 제 2 컨트롤러 그룹의 한 컨트롤러는 메모리 모듈로 데이터 블록의 스트립들의 전송을 보고하고, 제 1 또는 제 2 메모리 모듈 그룹 중 한 메모리 모듈은 데이터 블록의 데이터 스트립들의 수신을 보고하며, 스위치는 GSN을 할당하도록 구성되고, 동일한 GSN이 데이터 블록의 스트립들에 할당되는 메모리 시스템.
  36. 복수의 컨트롤러, 복수의 메모리 채널 컨트롤러, 및 복수의 메모리 모듈을 포함한 메모리 시스템 동작 방법으로서,
    컨트롤러로부터 메모리 채널 컨트롤러 그룹으로 스트립을 포함한 데이터 스트라이프를 전송하는 단계;
    메모리 채널 컨트롤러 그룹의 각 메모리 채널 컨트롤러에 의해, 스트라이프의 스트립의 수신을 컨트롤러에 확인응답하는 단계;
    각각의 복수의 컨트롤러들에 의해 전송된 확인응답된 스트라이프 넘버를 주기적으로 판단하고, 일련의 글로벌 시퀀스 넘버(GSN)를 확인응답된 스트라이프 넘버에 해당하는 각 컨트롤러에 할당하는 단계;
    동일한 GSN을 메모리 채널 컨트롤러 그룹에서 스트라이프의 각각의 스트립들과 연관시키는 단계를 포함하고,
    메모리 채널 컨트롤러 그룹의 각 메모리 채널 컨트롤러는 메모리 모듈 그룹과 통신하는, 메모리 시스템 동작 방법.
  37. 제 36 항에 있어서,
    메모리 채널 컨트롤러에 수신된 스트립들은 전송이 GSN 값의 순서이도록 메모리 모듈 그룹으로 전송되는 메모리 시스템 동작 방법.
  38. 제 36 항에 있어서,
    컨트롤러는:
    라운드-로빈 방식으로 서로 통신하고,
    할당된 GSN 값의 넘버가 아직 GSN을 할당하지 않은 확인응답된 스트라이프들의 넘버와 같도록 각 컨트롤러에 일련의 GSN 값을 할당하고, GSN의 시작은 이전 컨트롤러에서 GSN의 값에서 단조 증가하며,
    라운드 로빈의 컨트롤을 다음 컨트롤러로 전달하는 메모리 시스템 동작 방법.
  39. 제 36 항에 있어서,
    데이터 스트립은 사용자 데이터에 대한 중복 데이터를 포함한 RAID 스트라이프이고, 메모리 모듈 그룹은 RAID 그룹인 메모리 시스템 동작 방법.
  40. 제 36 항에 있어서,
    컨트롤러 그룹 중 한 컨트롤러는
    컨트롤러 그룹 중 각각의 다른 컨트롤러들과 그리고 각각의 메모리 채널 컨트롤러 그룹들과 통신하고,
    모든 컨트롤러 그룹의 확인응답된 스트라이프들의 넘버를 주기적으로 판단하며,
    프로토콜에 따라 컨트롤러의 확인응답된 스트라이프들에 일련의 GSN 값들을 할당하고,
    메모리 채널 컨트롤러 그룹에 GSN 값을 전송함으로써 동작하는 메모리 시스템 동작 방법.
  41. 복수의 컨트롤러들, 복수의 메모리 채널 컨트롤러들, 복수의 메모리 모듈들, 및 공통 스위치를 포함한 메모리 시스템 동작방법으로서,
    컨트롤러로부터 적어도 하나의 메모리 채널 컨트롤러로 RAID된 데이터 블록의 스트라이프를 포함한 데이터 스트립을 전송하는 단계;
    스트라이프의 스트립들의 수신을 공통 스위치에 확인응답하는 단계; 및
    복수의 메모리 채널 컨트롤러들에서 스트라이프의 스트립들에 동일한 고유의 글로벌 시퀀스 넘버(GSN)를 할당하는 단계를 포함하는 메모리 시스템 동작 방법.
  42. 제 41 항에 있어서,
    GSN의 수치가 단조 증가하는 메모리 시스템 동작 방법.
KR1020157000375A 2012-06-07 2013-06-06 메모리 시스템 관리 KR102133316B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201261656575P 2012-06-07 2012-06-07
US61/656,575 2012-06-07
PCT/US2013/044527 WO2013184923A1 (en) 2012-06-07 2013-06-06 Memory system management

Publications (2)

Publication Number Publication Date
KR20150036018A KR20150036018A (ko) 2015-04-07
KR102133316B1 true KR102133316B1 (ko) 2020-07-21

Family

ID=49712632

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157000375A KR102133316B1 (ko) 2012-06-07 2013-06-06 메모리 시스템 관리

Country Status (3)

Country Link
EP (2) EP2859553B1 (ko)
KR (1) KR102133316B1 (ko)
WO (1) WO2013184923A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11157200B2 (en) 2014-10-29 2021-10-26 Hewlett-Packard Development Company, L.P. Communicating over portions of a communication medium
US10162786B2 (en) 2014-12-01 2018-12-25 SK Hynix Inc. Storage node based on PCI express interface
KR102277728B1 (ko) * 2017-07-31 2021-07-14 삼성전자주식회사 데이터 저장 시스템, 데이터 저장 시스템의 데이터 저장 방법, 및 솔리드 스테이트 드라이브의 제조 방법
CN111949434B (zh) * 2019-05-17 2022-06-14 华为技术有限公司 磁盘冗余阵列raid管理方法、raid控制器和系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003099210A (ja) * 2001-09-25 2003-04-04 Toshiba Corp 仮想的なraid装置を有するクラスタシステム及び同システム用のコンピュータ
US20030188035A1 (en) * 2002-03-26 2003-10-02 Clark Lubbers Data transfer protocol for data replication between multiple pairs of storage controllers on a san fabric

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6175891B1 (en) * 1997-04-23 2001-01-16 Micron Technology, Inc. System and method for assigning addresses to memory devices
EP1731998A1 (en) * 2004-03-29 2006-12-13 Kyoto University Data processing device, data processing program, and recording medium containing the data processing program
WO2006050455A2 (en) * 2004-11-05 2006-05-11 Trusted Data Corporation Dynamically expandable and contractible fault-tolerant storage system with virtual hot spare
US8356126B2 (en) * 2005-02-07 2013-01-15 Dot Hill Systems Corporation Command-coalescing RAID controller
US8200887B2 (en) 2007-03-29 2012-06-12 Violin Memory, Inc. Memory management system and method
US20070147115A1 (en) * 2005-12-28 2007-06-28 Fong-Long Lin Unified memory and controller
CN101715575A (zh) * 2006-12-06 2010-05-26 弗森多系统公司(dba弗森-艾奥) 采用数据管道管理数据的装置、系统和方法
KR20080112863A (ko) * 2007-06-22 2008-12-26 삼성전자주식회사 플래시 메모리 쓰기 방법 및 플래시 메모리 장치 드라이버
US8239612B2 (en) * 2007-09-27 2012-08-07 Tdk Corporation Memory controller, flash memory system with memory controller, and control method of flash memory
KR20100069067A (ko) * 2008-12-16 2010-06-24 (주)인디링스 독립적으로 파일 시스템을 관리하는 레이드 컨트롤러

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003099210A (ja) * 2001-09-25 2003-04-04 Toshiba Corp 仮想的なraid装置を有するクラスタシステム及び同システム用のコンピュータ
US20030188035A1 (en) * 2002-03-26 2003-10-02 Clark Lubbers Data transfer protocol for data replication between multiple pairs of storage controllers on a san fabric

Also Published As

Publication number Publication date
EP4328751A3 (en) 2024-05-08
EP2859553A4 (en) 2016-01-27
EP4328751A2 (en) 2024-02-28
EP2859553A1 (en) 2015-04-15
KR20150036018A (ko) 2015-04-07
EP2859553B1 (en) 2023-09-27
WO2013184923A1 (en) 2013-12-12

Similar Documents

Publication Publication Date Title
US9753674B2 (en) RAIDed memory system
US9417823B2 (en) Memory system management
US11175984B1 (en) Erasure coding techniques for flash memory
US11281601B2 (en) Multi-device storage system with hosted services on peer storage devices
US10409511B1 (en) Multi-device storage system with distributed read/write processing
US11340794B2 (en) Multiprocessor system with independent direct access to bulk solid state memory resources
US20200159425A1 (en) Apparatus, System, and Method for Data Block Usage Information Synchronization for a Non-Volatile Storage Volume
US9495110B2 (en) LUN management with distributed RAID controllers
CN106462510B (zh) 具有独立直接接入大量固态存储资源的多处理器系统
US9176810B2 (en) Bit error reduction through varied data positioning
US8706968B2 (en) Apparatus, system, and method for redundant write caching
US10649843B2 (en) Storage systems with peer data scrub
US9092336B2 (en) Write admittance policy for a memory cache
US20130060989A1 (en) Apparatus, system, and method for referencing data block usage information by way of an interface
US10678470B2 (en) Computer system,control method for physical storage device,and recording medium
KR102133316B1 (ko) 메모리 시스템 관리
US12019917B2 (en) Peer RAID control among peer data storage devices

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant