KR20130026517A - 저장부 할당 장치, 시스템, 및 방법 - Google Patents

저장부 할당 장치, 시스템, 및 방법 Download PDF

Info

Publication number
KR20130026517A
KR20130026517A KR1020127009023A KR20127009023A KR20130026517A KR 20130026517 A KR20130026517 A KR 20130026517A KR 1020127009023 A KR1020127009023 A KR 1020127009023A KR 20127009023 A KR20127009023 A KR 20127009023A KR 20130026517 A KR20130026517 A KR 20130026517A
Authority
KR
South Korea
Prior art keywords
storage
data
physical
capacity
logical
Prior art date
Application number
KR1020127009023A
Other languages
English (en)
Other versions
KR101769883B1 (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 KR20130026517A publication Critical patent/KR20130026517A/ko
Application granted granted Critical
Publication of KR101769883B1 publication Critical patent/KR101769883B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0626Reducing size or complexity of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7204Capacity control, e.g. partitioning, end-of-life degradation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

비휘발성 저장부의 할당 장치, 시스템, 방법이 개시된다. 저장 디바이스는 이 디바이스의 물리적 저장 용량을 초과할 수 있는 논리적 어드레스를 제공할 수 있다. 저장 디바이스는 논리적 어드레스 공간 내의 논리적 용량을 할당할 수 있다. 요청을 충족시키기에 충분한 미배정 및/또는 미할당 논리적 용량이 존재할 때 할당 요청이 허용될 수 있다. 물리적 저장 용량을 요청함으로써 비휘발성 저장 디바이스에 데이터가 저장될 수 있다. 요청을 충족시키기에 충분한 가용 물리적 저장 용량이 존재할 때, 저장 요청 또는 물리적 저장 확보와 같은 물리적 저장 요청이 행해진다. 본 디바이스는 논리적 어드레스 공간 내의 논리 식별자(LID)를 저장 디바이스의 저장 위치와 결부시키는 인덱스를 유지할 수 있다. 이 인덱스는 논리적 용량 할당을 행하는데 및/또는 물리적 저장 공간을 관리하는데 사용될 수 있다.

Description

저장부 할당 장치, 시스템, 및 방법{APPARATUS, SYSTEM, AND METHOD FOR ALLOCATING STORAGE}
본 발명은 데이터 저장부의 할당에 관한 것으로, 보다 구체적으로는 솔리드 스테이트 저장 디바이스와 같은 비휘발성 저장 디바이스에서의 데이터 저장부의 할당에 관한 것이다.
전형적인 데이터 저장 디바이스는 LBA(logical block address: 논리적 블록 어드레스)와 PBA(physical block address: 물리적 블록 어드레스)의 사이에 거의 일대일 매핑이 이루어지는 블록 저장 디바이스이다. 보통 LBA와 PBA 사이의 일대일 매핑에 대한 유일한 예외적인 경우는, 데이터 저장 디바이스가 불량(bad)으로 판정된 블록에 재매핑될 수 있는 여분의 블록을 소량만 보유하고 있는 경우이다. LBA와 PBA 사이의 이러한 일대일 매핑에 기초하여, 파일 서버 또는 파일 시스템에는 LBA와 오브젝트명(object name), 파일명, 및 다른 논리 식별자(logical identifier) 사이의 상위 레벨 매핑(higher level mapping)이 행해진다. 특히, LBA와 PBA 사이의 이러한 일대일 매핑이 사용되는 데이터 저장 디바이스는 랜덤 액세스 저장 디바이스(random access storage device)이다. 파일 서버 또는 파일 시스템은 특정 LBA에 배정된 데이터의 블록을 데이터 저장 디바이스에 전송하기 위해 "SCSI(Small Computer System Interface)" 명령어를 사용할 수 있다. 전형적인 저장 디바이스의 경우에, 데이터 저장 디바이스가 초기화될 때 LBA가 할당된다. 이 경우에, LBA의 할당은 데이터 저장 디바이스 상의 이용 가능한 LBA의 목록 또는 범위를 데이터 저장 디바이스에 접속된 파일 시스템 또는 파일 서버에 접속된 컴퓨터 또는 클라이언트에 배정하는 것이다.
서버 또는 다른 컴퓨터가 2개 이상의 데이터 저장 디바이스에 액세스할 수 있는 시스템에서, 이들 데이터 저장 디바이스가 랜덤 액세스 디바이스이면, 전형적으로 파일 서버 또는 파일 시스템은 액세스되고 있는 특정 데이터 저장 디바이스를 식별할 수 있도록 각 LBA에 대해 추가적인 식별자를 포함한다. 이 식별자는 드라이브명, 저장 디바이스의 제조업자에 의해 배정된 고유 식별자, 논리명(logical name), 또는 시스템 내의 액세스 가능한 다양한 데이터 저장 디바이스들을 구별하는데 사용될 수 있는 다른 식별자일 수 있다. 이러한 시스템에서, 클라이언트는 하나 이상의 서버를 통해서 데이터 저장 디바이스에 액세스할 수 있다. 각 클라이언트는 할당된 저장 공간일 수 있다. 할당된 저장 공간은 저장 디바이스 전체일 수도 있고, 저장 디바이스의 일부일 수도 있고, 혹은 2개 이상의 저장 디바이스의 전체 혹은 일부일 수도 있다. 전형적으로, 2개 이상의 저장 디바이스가 시스템 내의 서버 또는 클라이언트에 의해 액세스 가능한 시스템의 경우에, 이들 저장 디바이스에 접속된 파일 시스템 또는 파일 서버에서 저장 공간 및 해당 어드레스의 할당이 이루어지게 된다. 전형적으로, 파일 시스템은 배정 및 미배정 LBA(assigned and unassigned LBAs)를 관리한다. 미배정 LBA는 프리 LBA 풀(free LBA pool)에 배치된다. 새로운 파일이 생성되면, 프리 LBA 풀로부터 LBA가 선택 이동되어 파일과 결부되어진다. 파일이 삭제되면, LBA는 프리 LBA 풀로 복귀된다.
순차 저장 디바이스(sequential storage device) 또는 로그 구조 저장 디바이스(log structured storage device)와 같이 LBA와 PBA 사이에 일대일 대응이 이루어지지 않는 데이터 저장 디바이스에는, 랜덤 액세스 저장 디바이스에 접속된 파일 서버 또는 파일 시스템에 존재하는 논리적-논리적 매핑(logical-logical mapping)과 유사한 다른 레벨의 논리적-물리적 매핑(logical-phsical mapping)이 전형적으로 존재한다. 이들 디바이스는 디바이스에 액세스하는 파일 시스템과 중복되게 그 자체의 LBA 사용을 관리한다. 이러한 중복성(duplication)은, 디바이스가 유사하게 기능할 수 있도록 파일 시스템이 하나의 LBA를 프리 LBA 풀로 이동하고 있음을 그 디바이스에 암시하도록 파일 시스템이 "트림 명령(trim command)"을 이행하는 것을 유익하게 한다. 씬 프로비져닝 층(thin provisioning layer)의 지원과 같은 다른 중간 변환(intermediate transformation)을 지원하기 위해 추가적인 논리적-논리적 매핑이 존재할 수 있다. 순차 저장 디바이스, 로그 구조 파일 시스템, 또는 다른 유사한 디바이스에서, 파일 시스템/파일 서버에서의 논리적-논리적 매핑 및 추가적인 논리적-논리적 매핑 및/또는 논리적-물리적 매핑은 비효율적이고, 복잡도를 더하며, 어떤 경우에는 중복된다.
비휘발성 저장 디바이스는 클라이언트에 논리적 어드레스 공간(logical address space)을 제공할 수 있다. 논리적 어드레스 공간은 복수의 논리 식별자(LID)를 포함할 수 있으며, 이러한 논리 식별자는 저장 디바이스의 물리적 저장 위치(즉 일반적으로 "저장 위치")에 독립적일 수 있다. 따라서, 논리적 어드레스 공간과 특정 저장 위치 사이에 미리 규정된 매핑 및/또는 미리 설정된 매핑이 존재하지 않을 수 있다. 디바이스{또는 다른 개체(entity)}는 논리적 어드레스 공간의 LID를 저장 디바이스의 각각의 저장 위치와 결부시키는 인덱스를 유지할 수 있다. LID와 저장 위치 사이의 결부는 임의적일 수 있다. LID와 저장 위치 사이의 결부는 이용 가능한 논리적 용량(logical capacity) 및/또는 이용 가능한 물리적 저장 용량을 결정하는데 사용될 수 있다.
클라이언트 요청은 논리적 어드레스 공간 내의 논리적 용량에 대한 요청을 포함할 수 있다. 논리적 어드레스 공간 내에 충분한 논리적 용량이 있으면 요청은 충족될 수 있다. 논리적 어드레스 공간의 논리적 용량은 할당된, 미할당된, 배정된, 및/또는 미배정된 식별용 LID를 포함할 수 있다.
본 명세서에서 사용되는 할당된 LID는 특정 클라이언트에 할당된 논리적 어드레스 공간의 LID를 지칭할 수 있다. 이러한 할당은 클라이언트에 의해 사용될 수 있는 LID, LID의 범위, 순차 LID의 집합, 인접 LID의 집합, 인접 및 비인접 LID의 집합, 및/또는 논리적 어드레스 공간의 논리적 용량을 확보하는 것을 포함한다. 할당된 LID는 저장 디바이스 상의 물리적 저장 용량에 대응될 수도 있고 대응되지 않을 수도 있다. 미할당 LID는 클라이언트에 할당되지 않은 및/또는 비휘발성 저장 디바이스에 저장된 데이터와 결부되지 않은 논리적 어드레스 공간의 LID를 지칭할 수 있다.
본 명세서에서 사용되는 배정된 LID는 비휘발성 저장 디바이스에 저장된 데이터와 결부되는 할당된 LID를 지칭할 수 있다. 따라서, 배정된 LID는 저장 디바이스의 하나 이상의 저장 위치와 결부된 LID를 지칭할 수 있다. 미배정 LID는 비휘발성 저장 디바이스에 저장된 데이터와 결부되지 않은 LID를 지칭할 수 있다. 위에서 논의된 바와 같이, 할당된 LID는 미배정될 수 있다. 마찬가지로, 미할당 LID도 미배정될 수 있다.
데이터 저장 공간을 할당하는 장치는 할당 요청을 수신하는 필수 단계와, 데이터 저장 디바이스의 논리 공간이 충분한 미배정 및/또는 미할당 논리 공간을 갖고 있는 지를 판단하는 필수 단계를 기능적으로 실행하고, 답신(reply)을 제공하도록 구성될 수 있다.
할당 요청 모듈은 논리적 어드레스 공간에 논리 용량을 할당하는 할당 요청을 요청 디바이스로부터 수신할 수 있다. 할당 요청은 데이터 저장 디바이스에 수신된다. 논리적 용량은 데이터 저장 디바이스에 데이터를 저장하기 위한 것이다. 논리적 용량 모듈은 할당 요청을 충족할 수 있도록 논리적 어드레스 공간이 충분한 미배정 및/또는 미할당 논리적 공간을 포함하는지를 판단한다. 이러한 판단은, 배정된 LID에 대응하는 데이터가 데이터 저장 디바이스에 저장되는 하나 이상의 물리적 위치에 매핑된 논리적 공간의 배정된 LID(논리 식별자)를 포함하는 논리적-물리적 맵(logical-to-physical map)과 같은, 논리적 용량 할당을 유지하는 인덱스의 검색을 포함할 수 있다. 하지만, 다른 데이터 구조, 인덱스, 및/또는 맵이 사용될 수도 있다. 할당 답신 모듈(allocation reply module)은 논리적 용량 모듈이 논리적 공간이 충분한 논리적 공간을 갖고 있는 지를 판단하는 것에 응답하여 요청 디바이스에 답신을 제공할 수 있다. 이러한 답신은 할당 요청이 충족될 수 있는지를 나타내는 표시(indication)를 포함할 수 있다.
본 명세서에서 사용되는 LID(논리 식별자)는 하나 이상의 논리적 블록 어드레스(LBA), LBA의 범위, 비인접 LBA의 집합, 인덱스, 파일명, 아이노드(inode), 또는 다른 논리 식별자를 지칭할 수 있다. LID는 오브젝트 식별자(object identifier)가 아닌 논리 식별자를 지칭할 수 있다.
몇몇 실시예에서, 데이터 저장 디바이스는 저장 디바이스와 저장 컨트롤러 및/또는 드라이버를 포함하며, 저장 컨트롤러 및/또는 드라이버는 저장 디바이스 내의 물리적 어드레스(물리적 주소)를 포함하는 논리적-물리적 맴을 포함한다. 일 실시예에서, 논리적 공간(논리적 저장 용량)에 대응하는 저장 용량은 데이터 저장 디바이스의 물리적 저장 용량보다 훨씬 더 크다. 논리적 공간 용량은 할당된 논리적 공간과 결합된 미배정 및/또는 미할당 논리적 공간을 포함한다.
몇몇 실시예에서, 본 발명의 장치는 물리적 용량 요청 모듈, 물리적 용량 할당 모듈, 및 물리적 용량 답신 모듈을 포함한다. 물리적 용량 요청 모듈은 요청 디바이스로부터 물리적 용량 요청을 수신하며, 물리적 용량 요청은 데이터 저장 디바이스에 수신된다. 물리적 용량 요청은 데이터 저장 디바이스 내의 가용 물리적 저장 용량의 양에 대한 요청을 포함한다. 물리적 용량 할당 모듈은 데이터 저장 디바이스 상의 가용 물리적 저장 용량의 양을 결정한다. 가용 물리적 저장 용량의 양은 데이터 저장 디바이스 내의 미배정 저장 위치의 물리적 저장 용량을 포함한다. 다른 실시예에서, 물리적 용량 할당 모듈은 배정된 물리적 어드레스, 미배정 물리적 어드레스, 할당된 물리적 어드레스 용량, 및/또는 미할당 물리적 어드레스 용량을 추적한다.
다른 실시예에서, 할당 요청을 수신하는 단계는 논리적 할당 요청을 수신하는 단계 또는 데이터의 저장 요청을 수신하는 단계를 포함한다. 다른 실시예에서, 논리적 공간이 할당 요청을 충족시킬 수 있는 충분한 미할당 논리적 공간을 포함하는지를 판단하는 단계는 할당하기 위한 요청 LID의 리스트를 수신하는 단계와, 이들 LID가 할당에 이용 가능하다는 것을 검증하는 단계, 또는 요청과 관련하여 수신된 기준을 만족하는 미할당 LID를 식별하는 단계를 포함한다.
일 실시예에서, 본 발명의 장치는 논리적 용량 모듈이 논리적 공간이 할당 요청을 충족시킬 수 있는 충분한 논리적 공간을 포함하고 있다고 판단하는 것에 응답하여 할당 요청을 충족시키기에 충분한 미할당 논리적 공간을 요청 디바이스에 할당하는 할당 모듈을 포함한다. 다른 실시예에서, 할당 모듈은 데이터의 저장 요청과 관련하여 하나 이상의 LID를 할당하고 데이터의 저장 요청과 결부된 데이터의 저장과 관련하여 하나 이상의 LID를 할당한다.
일 실시예에서, 요청 디바이스에 답신을 전송하는 단계는 할당된 LID를 요청 디바이스에 전송하는 단계를 포함하며, 할당된 LID는 할당 요청을 충족한다. 다른 실시예에서, 요청 디바이스에 답신을 전송하는 단계는 데이터 저장 디바이스가 할당 요청을 충족시킬 수 있는 충분한 미배정 논리적 공간을 포함하고 있음을 나타내는 답신을 요청 디바이스에 전송하는 단계를 포함한다. 다른 실시예에서, 요청 디바이스에 답신을 전송하는 단계는 데이터 저장 디바이스가 할당 요청을 충족시키기에는 불충분한 미할당 논리적 공간을 갖고 있음을 나타내는 답신을 요청 디바이스에 전송하는 단계를 포함한다. 다른 실시예에서, 요청 디바이스에 답신을 전송하는 단계는 요청된 LID가 할당되었다는 확인통지(acknowledgement)를 요청 디바이스에 전송하는 단계를 포함하며, 할당 요청은 LID의 할당 요청을 포함한다.
일 실시예에서, 본 발명의 장치는 할당 질의 요청 모듈과, 할당 질의 결정 모듈, 및 할당 질의 답신 모듈을 포함한다. 할당 질의 요청 모듈은 데이터 저장 디바이스에 할당 질의(allocation query)를 수신한다. 할당 질의 결정 모듈은 할당 질의에 특정된 기준을 만족하는 하나 이상의 LID를 식별한다. 식별된 LID는 배정되고 할당된 LID, 미배정되고 할당된 LID, 및/또는 미할당 LID를 포함한다. 할당 질의 답신 모듈은 할당 질의의 결과를 전송하며, 할당 질의의 결과는 식별된 LID의 리스트, 기준을 만족하는 LID가 발견되었다는 확인통지, 및/또는 할당 질의의 기준을 만족하는 LID가 발견되지 않았다는 확인통지를 포함한다.
다른 실시예에서, 본 발명의 장치는 데이터 저장 디바이스 내의 데이터 저장 디바이스의 논리적 공간을 관리하는 논리적 공간 관리 모듈을 포함한다. 논리적 공간을 관리하는 단계는 하나 이상의 할당된 LID를 미할당 상태로 복귀시키는 할당해제(deallocation) 요청을 요청 디바이스로부터 수신하는 단계와 성공적인 할당해제를 요청 디바이스에 전송하는 단계를 포함할 수 있다.
논리적 공간을 관리하는 단계는 요청 디바이스로부터 LID 그룹 명령 요청을 수신하는 단계와, LID 그룹 명령 요청에 대한 응답을 나타내는 답신을 요청 디바이스에 전송하는 단계를 포함한다. LID 그룹 명령 요청은 2개 이상의 LID(LDI 그룹), LID 그룹과 결부된 메타데이터, 및/또는 LID 그룹과 결부된 데이터에 취해지는 동작을 포함한다. 상기 동작은 메타데이터의 수정과, 데이터의 백업, 메타데이터의 백업, 제어 매개변수의 변경, 액세스 매개변수의 변경, 데이터의 삭제, 데이터의 복사, 데이터의 암호화(encryption), 데이터의 중복제거(deduplication), 데이터의 압축, 및/또는 데이터의 압축해제를 포함한다.
일 실시예에서, 본 발명의 장치는 물리적 공간 확보 요청 모듈과, 물리적 공간 확보 모듈, 및 물리적 공간 확보 회신 모듈을 포함한다. 물리적 공간 확보 요청 모듈은 데이터 저장 디바이스 상의 가용 물리적 저장 용량을 확보하는 요청(물리적 공간 확보 요청)을 요청 디바이스로부터 수신한다. 물리적 공간 확보 요청은 데이터 저장 디바이스에 수신되며, 요청된 물리적 저장 용량의 양을 나타내는 표시를 포함한다.
물리적 공간 확보 모듈은 데이터 저장 디바이스가 물리적 저장 공간 요청을 충족시킬 수 있는 가용 물리적 저장 용량의 양을 갖고 있는지를 판단하고, 가용 물리적 저장 용량의 양이 물리적 공간 확보 요청을 충족시키기에 충분하다는 판단에 응답하여 물리적 저장 공간 요청을 충족시킬 수 있는 데이터 저장 디바이스 상의 가용 물리적 저장 용량의 양을 확보한다(확보된 물리적 용량). 물리적 공간 확보 회신 모듈은 물리적 공간 확보 모듈이 데이터 저장 디바이스가 물리적 공간 확보 요청을 충족하는 가용 물리적 저장 공간의 양을 갖고 있는 지를 판단하는 것에 응답하여, 요청된 물리적 저장 용량의 양의 이용 가능(availability) 또는 이용 불가능(unavailability)의 표시를 요청 디바이스에 전송한다.
물리적 공간 확보 요청은 일 실시예에서 논리적 공간의 양을 포함하며, 요청된 물리적 저장 용량의 양의 표시는 요청된 논리적 공간으로부터 도출된다. 물리적 공간 확보 요청은 다른 실시예에서 하나 이상의 LID를 포함하며, 요청된 물리적 저장 용량의 양의 표시는 LID와 결부된 데이터의 양으로부터 도출된다. LID와 결부된 데이터는 LID에 배정된 데이터 및/또는 각 LID에 할당된 데이터 용량을 포함한다. 물리적 공간 확보 요청은 다른 실시예에서 데이터의 저장 요청을 포함하며, 요청된 물리적 저장 용량의 양의 표시는 데이터 및/또는 데이터와 결부된 메타데이터로부터 도출된다.
다른 실시예에서, 물리적 공간 확보 요청은 데이터의 저장 요청과 결부된 물리적 공간 확보 요청을 포함하며, 요청된 물리적 저장 용량의 양의 표시는 물리적 공간 확보 요청에 표시되며 데이터의 저장 요청과 관련된 데이터와 상관(相關) 지어진다. 물리적 공간 확보 요청은 다른 실시예에서 물리적 저장 용량의 양을 확보하기 위한 요청을 포함한다. 물리적 공간 확보 요청은 다른 실시예에서 물리적 저장 용량의 양을 확보하고 그 확보된 물리적 저장 용량을 논리적 개체(logical entity)에 할당하는 요청을 포함한다.
일 실시예에서, 본 발명의 장치는 취소 유발 사건(cancellation triggering event)에 응답하여 확보된 물리적 저장 공간 전체 또는 일부를 취소하는(무효화하는) 물리적 공간 확보 취소 모듈을 포함한다. 취소 유발 사건은 데이터 저장 디바이스에 기록되며 물리적 공간 확보 모듈에 의해 확보된 가용 공간과 결부된 데이터가 저장 시스템에 이전에 저장되었음을 판단하는 단계를 포함한다. 취소 유발 사건은 타임아웃을 포함할 수 있다. 취소 유발 사건은 확보된 저장 공간과 결부된 데이터를 데이터 저장 디바이스에 기록하는 단계를 포함할 수 있으며, 기록된 데이터는 그 확보된 물리적 용량 미만으로 저장된다.
다른 실시예에서, 물리적 공간 확보 모듈은 물리적 공간 확보 요청과 결부된 기록 요청(write request)을 수신하고 기록 요청에 응답하여 데이터 저장 디바이스에 데이터를 기록하는 것, 이전에 수신된 물리적 공간 확보 요청의 물리적 저장 용량의 전체 또는 일부의 확보를 취소하는 요청을 수신하는 것, 및/또는 추가적인 물리적 저장 용량의 배정 요청을 수신하는 것에 응답하여 확보된 가용 물리적 저장 용량을 변경하며, 추가적인 물리적 저장 용량은 물리적 공간 확보 요청의 물리적 저장 용량과 결부된다.
일 실시예에서, 하나 이상의 LID의 하나 이상의 물리적 어드레스로의 매핑은, 하나 이상의 물리적 어드레스에 저장된 데이터가 하나 이상의 다른 물리적 어드레스로 이동될 때, 하나 이상의 물리적 어드레스에 저장된 데이터가 제1의 위치에 저장되면서 제2의 위치에 저장된 데이터와 동일하고 하나 이상의 LID의 매핑이 제2의 위치에 대응되도록 변경될 때, 및/또는 하나 이상의 LID들(제1의 LID들)에 매핑된 하나 이상의 물리적 위치가 하나 이상의 다른 LID들(제2의 LID들)에 재매핑될 때 변경된다.
데이터 저장 공간을 할당하는 다른 장치는 저장 디바이스 드라이버를 포함한다. 저장 디바이스 드라이버는 저장 인터페이스를 통해서 파일 시스템 또는 파일 서버에 결합되며, 저장 인터페이스는 파일 시스템/파일 서버로부터 데이터 저장 디바이스의 논리적 용량을 할당하기 위한 할당 요청을 전송하고 파일 시스템/파일 서버에 할당 답신을 전송하도록 동작 가능한 명령 인터페이스(command interface)를 포함하고, 논리적 용량은 데이터 저장 디바이스에 데이터를 저장하기 위한 것이다.
저장 디바이스 드라이버 및/또는 데이터 저장 디바이스는 논리적 공간이 할당 요청을 충족시키기에 충분한 미할당 논리적 공간을 포함하고 있는지를 판단하며, 이러한 판단은 논리적-물리적 맵의 검색을 포함한다. 논리적-물리적 맵은 하나 이상의 물리적 위치에 매핑된 논리적 공간의 배정된 LID를 포함하고, 배정된 LID에 대응하는 데이터는 데이터 저장 디바이스에 저장되며, 배정된 LID는 그 배정된 LID에 매핑된 하나 이상의 물리적 어드레스와 다르다. 할당 답신은 할당 요청에 응답하여 이루어지며 논리적 공간이 할당 요청을 충족시키기에 충분한 논리적 공간을 포함하는지를 나타내는 표시를 포함한다.
일 실시예에서, 본 발명의 장치는 논리적 공간이 할당 요청을 충족시키기에 충분한 논리적 공간을 포함하는지를 판단하는데 데이터 저장 디바이스가 저장 디바이스 드라이버와 함께 기능하도록 하는데 충분하게 저장 디바이스 드라이버를 데이터 저장 디바이스에 결합하도록 동작 가능한 저장 디바이스 인터페이스를 포함한다. 다른 실시예에서, 저장 디바이스 인터페이스는 하나 이상의 PCI 익스프레스(peripheral component interconnect express, 또는 PCIe), 직렬 ATA(serial Advanced Technology Attachment) 버스, 병렬 ATA 버스, SCSI(small computer system interface), 파이어와이어(FireWire), 파이버 채널(Fibre Channel), USB(Universal Serial Bus), 및 PCIe-AS(PCIe Advanced Switching)를 포함한다. 다른 실시예에서, 명령 인터페이스는 새로운 입력-출력 제어(IO-CTL) 명령어 또는 기존 IO-CTL 명령어의 확장으로 구현된다.
저장 공간을 할당하는 본 발명의 시스템이 또한 제안되어 있다. 본 시스템은 비휘발성 저장부를 구비한 저장 디바이스, 할당 요청 모듈, 논리적 용량 모듈, 및 할당 답신 모듈로 구현된다. 할당 요청 모듈은 요청 디바이스로부터 논리적 용량의 할당을 위한 할당 요청을 수신한다. 할당 요청은 데이터 저장 디바이스에 수신되며, 논리적 용량은 데이터 저장 디바이스에 데이터를 저장하기 위한 것이다.
논리적 용량 모듈은 논리적 공간이 할당 요청을 충족시키기에 충분한 미할당 논리적 공간을 갖고 있는 지를 판단하며, 이러한 판단은 논리적-물리적 맵의 검색을 포함한다. 논리적-물리적 맵은 하나 이상의 물리적 위치에 매핑된 논리적 공간의 배정된 논리 식별자(LID)를 포함하고, 배정된 LID에 대응하는 데이터는 데이터 저장 디바이스에 저장되며, 배정된 LID는 이 배정된 LID에 매핑된 하나 이상의 물리적 어드레스와 다르다. 할당 답신 모듈은 논리적 용량 모듈이 논리적 공간이 충분한 논리적 공간을 갖고 있는 지를 판단하는 것에 응답하여 요청 디바이스에 답신을 전송하며, 이 답신은 논리적 공간이 할당 요청을 충족시키기에 충분한 논리적 공간을 포함하는지를 나타내는 표시를 포함한다.
저장 공간을 할당하는 본 발명의 방법이 또한 제안되어 있다. 실시예에 개시된 방법은 전술한 장치 및 시스템의 작동과 관련하여 제공된 기능들을 실행하는데 필요한 단계들을 실질적으로 포함한다. 일 실시예에서, 본 방법은 요청 디바이스로부터 논리적 용량을 할당하기 위한 할당 요청을 수신하는 단계를 포함하며, 할당 요청은 데이터 저장 디바이스에 수신된다. 논리적 용량은 데이터 저장 디바이스에 데이터를 저장하기 위한 것이다.
본 방법은 논리적 공간이 할당 요청을 충족시키기에 충분한 미할당 논리적 공간을 포함하는지를 판단하는 단계를 또한 포함하며, 이러한 판단은 논리적-물리적 맵의 검색을 포함한다. 논리적-물리적 맵은 하나 이상의 물리적 위치에 매핑된 논리적 공간의 배정된 논리 식별자(LID)를 포함하고, 배정된 LID에 대응하는 데이터는 데이터 저장 디바이스에 저장되며, 배정된 LID는 이 배정된 LID에 매핑된 하나 이상의 물리적 어드레스와 다르다. 본 방법은 논리적 공간이 충분한 논리적 공간을 갖고 있는지를 판단하는 것에 응답하여 요청 디바이스에 답신을 전송하는 단계를 포함하며, 이 답신은 논리적 공간이 할당 요청을 충족시키기에 충분한 논리적 공간을 포함하는지를 나타내는 표시를 포함한다.
본 명세서 전체에 걸쳐서 특징, 이점, 또는 유사한 표현에 대한 참조는 본 발명에 의해 구현될 수 있는 특징 및 이점 모두가 본 발명의 단일 실시예에 포함되어야 하거나 포함됨을 의미하지 않는다. 대신에, 특징 및 이점에 대한 표현은 실시예와 연관되어 기재된 구체적인 특징, 이점, 또는 특성이 본 발명의 적어도 하나의 실시예에 포함됨을 의미하는 것으로 이해되어야 한다. 따라서, 본 명세서 전체에 걸쳐서 특징과 이점 및 유사한 표현에 대한 논의는 동일 실시예를 지칭할 수 있으나, 반드시 그러하지는 않다.
또한, 본 발명의 기재된 특징, 이점, 및 특성은 하나 이상의 실시예에 임의의 적절한 방식으로 결합될 수 있다. 당해 업자는 본 발명이 특정 실시예의 하나 이상의 구체적인 특징 또는 이점 없이도 실시될 수 있음을 이해할 것이다. 다른 경우에는, 본 발명의 모든 실시예에 반드시 존재하지는 않을 수 있는 추가적인 특징 및 이점이 소정의 실시예에서 식별될 수 있다.
본 발명의 이러한 특징 및 이점은 이하의 상세한 설명 및 첨부된 특허청구범위로부터 보다 온전히 드러날 수 있고, 이하에 기재된 본 발명의 실시에 의해 습득될 수 있다.
본 발명의 이점이 용이하게 이해될 수 있도록, 첨부된 도면에 예시된 구체적인 실시예를 참고하여 위에 개략적으로 기술된 본 발명의 보다 구체적인 설명이 이루어질 것이다. 이들 도면은 본 발명의 전형적인 실시예를 예시할 뿐이며 따라서 본 발명의 범위를 한정하는 것으로 여겨져서는 안 됨을 이해할 것이며, 본 발명은 첨부된 도면을 사용하여 보다 구체적이며 상세하게 기술 및 설명될 것이다.
상술한 바와 같이, 본 발명의 시스템은 전형적인 저장 시스템보다 더 효율적인 저장 용량의 관리를 가능케 하고, 저장 디바이스에 접속된 표준 씬 프로비져닝 시스템(standard thin provisioning system)의 복잡도를 저감시키며, 솔리드 스테이트 저장부의 보다 균일한 사용을 용이하게 하고, 솔리드 스테이트 저장 디바이스 컨트롤러가 저장 핫 스폿(hot spot)을 감시하고 솔리드 스테이트 저장부 내의 다양한 논리적 페이지의 균등한 사용을 가능케 하는 등의 효과를 갖는다.
도 1a는 본 발명에 따른 데이터 저장 공간을 할당하는 시스템의 일 실시예를 예시하는 개략적인 블록도.
도 1b는 본 발명에 따른 데이터 저장 공간을 할당하는 시스템의 다른 실시예를 예시하는 개략적인 블록도.
도 1c는 본 발명에 따른 데이터 저장 공간을 할당하는 시스템의 또 다른 실시예를 예시하는 개략적인 블록도.
도 2는 본 발명에 따른 데이터 저장 공간을 할당하는 장치를 포함할 수 있는 솔리드-스테이트 저장 디바이스의 특정 실시예를 예시하는 개략적인 블록도.
도 3은 본 발명에 따른 데이터 저장 공간을 할당하는 장치를 포함할 수 있는 솔리드-스테이트 저장 디바이스의 데이터 기록 파이프라인(write data pipeline) 및 데이터 판독 파이프라인을 예시하는 개략적인 블록도.
도 4는 본 발명에 따른 데이터 저장 공간을 할당하는 장치의 일 실시예를 예시하는 개략적인 블록도.
도 5는 본 발명에 따른 데이터 저장 공간을 할당하는 장치의 다른 실시예를 예시하는 개략적인 블록도.
도 6은 본 발명에 따른 데이터 저장 공간을 할당하는 방법의 일 실시예를 예시하는 개략적인 순서도(플로차트).
도 7은 본 발명에 따른 저장 디바이스에서 물리적 용량 요청을 서비스하는 방법의 일 실시예를 예시하는 개략적인 순서도.
도 8은 본 발명에 따른 물리적 저장 공간을 확보하는 방법의 일 실시예를 예시하는 개략적인 순서도.
도 9는 본 발명에 따른 데이터 저장 디바이스에서 할당된 논리 식별자를 배정하는 방법의 일 실시예를 예시하는 개략적인 순서도.
도 10은 본 발명에 따른 데이터 저장 디바이스에서 할당된 논리 식별자를 배정하는 방법의 다른 실시예를 예시하는 개략적인 순서도.
도 11은 본 발명에 따른 저장 디바이스에서 할당 질의를 서비스하는 방법의 일 실시예를 예시하는 개략적인 순서도.
도 12는 논리 식별자를 비휘발성 저장 디바이스의 저장 위치와 결부시키는 인덱스의 예시적인 실시예의 개략도.
도 13은 논리 식별자를 비휘발성 저장 디바이스의 저장 위치와 결부시키는 인덱스의 예시적인 실시예의 개략도.
도 14는 미할당 논리적 용량을 유지하는 인덱스의 일례를 도시하는 도면.
도 15는 비휘발성 저장 디바이스를 할당하는 방법의 일 실시예의 순서도.
도 16은 비휘발성 저장 디바이스를 할당하는 방법의 일 실시예의 순서도.
그 구현상의 독립성을 보다 구체적으로 강조하기 위해, 본 명세서에 기재된 많은 기능 단위(functional unit)는 모듈로 명명되어 있다. 예를 들면, 모듈은 주문형 VLSI 회로 또는 게이트 어레이(gate array), 로직 칩, 트랜지스터 등과 같은 기성(off-the-shelf) 반도체, 또는 다른 개별 구성요소를 포함하는 하드웨어 회로로 구현될 수 있다. 모듈은 또한 필드 프로그램 가능 게이트 어레이, 프로그램 가능 어레이 로직, 프로그램 가능 로직 디바이스 등과 같은 프로그램 가능한 하드웨어 장치에 구현될 수도 있다.
모듈은 또한 다양한 유형의 프로세서에 의해 실행되는 소프트웨어에 구현될 수도 있다. 예를 들면, 실행가능 코드의 식별 모듈은 예를 들면 오브젝트, 절차 또는 기능으로 조직화될 수 있는 컴퓨터 명령어들의 하나 이상의 물리적 또는 논리적 블록을 포함할 수 있다. 하지만, 식별 모듈의 실행 가능 물(executable)은 물리적으로 함께 배치될 필요 없이, 상이한 위치에 저장된 이질 명령어(disparate instructions)를 포함할 수 있고, 이들 이질 명령어는 서로 논리적으로 결합될 때 모듈을 포함하며 이 모듈에 대해 규정된 목적을 달성한다.
실제로, 실행가능 코드의 모듈은 단일 명령어 또는 다수의 명령어일 수 있으며, 몇 가지 다른 코드 세그먼트에 걸쳐서, 상이한 프로그램들 사이에, 및 몇 개의 메모리 디바이스에 걸쳐서 분산될 수도 있다. 유사하게, 운영 데이터(operational data)가 식별되고 본 명세서에서 모듈 내에 예시될 수 있으며, 임의의 적절한 형태로 구현될 수 있고 임의의 적절한 유형의 데이터 구조 내에 조직화될 수 있다. 운영 데이터는 단일 데이터 집합으로 수집될 수도 있고, 또는 상이한 저장 디바이스에 걸쳐서 분산되는 것을 포함하여 상이한 위치에 걸쳐서 분산될 수 있으며, 적어도 부분적으로 시스템 또는 네트워크 상에 단지 전자 신호로 존재할 수도 있다. 모듈 또는 모듈의 일부가 소프트웨어에 구현되는 경우에, 그 소프트웨어 부분은 하나 이상의 컴퓨터 판독 가능 매체에 저장된다.
본 명세서 전체에 걸쳐서 "일 실시예(one embodiment 또는 an embodiment)" 또는 유사한 표현에 대한 참조는 그 실시예와 관련하여 기재된 구체적인 특징, 구조 또는 특성이 본 발명의 적어도 하나의 실시예에 포함됨을 의미한다. 따라서, 본 명세서 전체에 걸쳐서 "일 실시예에서" 또는 유사한 표현의 등장은 모두 동일 실시예를 지칭할 수 있으나 반드시 그러한 것은 아니다.
컴퓨터 판독가능 매체는 디지털 처리장치에 기계-판독가능 명령을 저장할 수 있는 임의의 형태를 취할 수 있다. 컴퓨터 판독가능 매체는 전송 선로, 컴팩트 디스크(CD), 디지털-비디오 디스크(DVD), 마그네틱 테이프, 베르누이 드라이브(Bernoulli drive), 마그네틱 디스크, 펀치카드(punch card: 천공카드), 플래쉬 메모리, 집적회로, 또는 다른 디지털 처리장치 메모리 디바이스로 구현될 수 있다.
또한, 기재된 본 발명의 특징, 구조, 또는 특성은 하나 이상의 실시예에 임의의 적절한 방식으로 통합될 수 있다. 이하의 상세한 설명에서는 본 발명의 실시예를 온전히 이해할 수 있도록, 프로그래밍, 소프트웨어 모듈, 사용자 선택, 네트워크 트랜섹션(network transaction), 데이터베이스 질의, 데이터베이스 구조, 하드웨어 모듈, 하드웨어 회로, 하드웨어 칩 등의 예와 같은 다양한 구체적인 상세사항이 제공되어 있다. 하지만, 당업자는 본 발명이 하나 이상의 이러한 구체적인 상세사항 없이도 실시될 수 있거나, 또는 다른 방법, 구성요소, 재료 등에 의해서도 실시될 수 있음을 인지할 것이다. 다른 예에서는, 본 발명의 특징을 불분명하게 하는 것을 회피하기 위해, 잘 알려진 구조, 재료 또는 동작은 도시되거나 상세하게 설명되지 않는다.
본 명세서에 포함된 개략적인 순서도는 대체로 논리적인 순서도로 기술되어 있다. 그래서, 예시된 순서 및 명명된 단계는 제시된 방법의 일 실시예를 나타낸다. 기능, 로직, 또는 효과에 있어서 예시된 방법의 하나 이상의 단계, 또는 그 일부와 동등한 다른 단계 및 방법도 착안될 수 있다. 게다가, 사용된 포맷(형식)과 부호는 본 방법의 논리적 단계들을 설명하기 위해 제공된 것으로 본 방법의 범위를 제한하지 않는 것으로 이해되어야 한다. 순서도에는 다양한 화살표 유형 및 선(line) 유형이 사용될 수 있으나, 해당 방법의 범위를 제한하지 않는 것으로 이해되어야 한다. 실제로, 몇몇 화살표 또는 다른 연결자는 단지 본 방법의 논리적 흐름을 나타내기 위해 사용될 수 있다. 예를 들면, 화살표는 예시된 방법의 번호 부여된 단계들 사이에서 불특정 시간 동안의 대기 또는 감시 기간을 나타낼 수 있다. 게다가, 특정 방법이 이루어지는 순서는 도시된 해당 단계들의 순서에 전적으로 일치될 수도 있고 일치되지 않을 수도 있다.
도 1a는 본 발명에 따른 데이터 저장 공간을 할당하는 시스템(100)의 일 실시예를 예시하는 개략적인 블록도이다. 본 시스템(100)은 저장 컨트롤러(storage controller: 104)와 저장 디바이스(106a 내지 106n) 및 저장 디바이스 드라이버(storage device driver: 118){이하에서는 "저장 디바이스 드라이버(118)"가 "드라이버(118)"와 상호교환적으로 사용될 것이다.}를 구비한 저장 시스템(102)을 포함한다. 본 시스템(100)은 컴퓨터 네트워크(112)를 통해서 하나 이상의 클라이언트(110)에 접속된 서버(108)를 포함한다. 서버(108)도 하나 이상의 클라이언트(110)를 포함할 수 있다. 서버(108)는 저장 인터페이스(116)를 통해서 저장 시스템(102)의 드라이버(118)에 접속된 파일 서버(114)를 포함한다. 본 시스템(100)의 구성요소들은 아래에 보다 상세하게 기술된다.
본 시스템(100)은 저장 시스템(102)을 포함한다. 저장 시스템(102)은 단일 데이터 저장 디바이스일 수도 있고, SAN(storage area network), JBOD(just a bunch of disks/drives), NAS(network attached storage), 또는 당업자에 알려진 다른 저장 시스템일 수도 있다. 도 1a에 예시된 시스템(100)의 실시예에 있어서의 저장 시스템(102)은 파일 시스템을 포함하는 파일 서버(114)에 접속되며, 서버(108)에 위치된 드라이버(118)를 포함한다. 이하에서는 파일 서버와 파일 시스템이 상호교환적으로 사용될 것이다. 일 실시예에서, 파일 서버(114)는 파일 시스템을 포함한다. 다른 실시예에서, 하나 이상의 클라이언트(110), 파일 서버(114)와 하나 이상의 클라이언트(110)의 조합, 또는 다른 구성요소 혹은 시스템은 오브젝트, 파일, 논리적 블록 등과 같은 데이터 단위(data units)를 취급하고, 데이터 단위를 저장 디바이스(106)에 저장하며, 저장 인터페이스(116)를 통해서 데이터 저장 디바이스와 접속된다.
바람직한 실시예에서, 저장 디바이스(106)와 저장 디바이스(106)를 제어하는 저장 컨트롤러(104)는 데이터 저장 디바이스를 포함한다. 데이터 저장 디바이스는 저장 컨트롤러(104)에 결합된 드라이버(118)를 또한 포함할 수 있다. 드라이버(118)는 복수의 저장 컨트롤러(104) 사이에 공유될 수 있으며, 저장 컨트롤러(104)는 복수의 저장 디바이스(106a 내지 106n)에 의해 공유될 수 있다. 저장 시스템(102)은 저장 디바이스(106)를 각각 포함하는 복수의 데이터 저장 디바이스를 포함할 수 있다. 하지만, 복수의 데이터 저장 디바이스는 공유된 저장 컨트롤러(104) 및/또는 드라이버(118)를 구비할 수도 있다. 복수의 데이터 저장 디바이스 중 일부는 개별 저장 컨트롤러(104) 및/또는 개별 드라이버(118)를 구비할 수 있다. 할당과 관련되는 데이터 저장 디바이스는 도 4의 장치(400)와 연계하여 아래에 보다 상세하게 논의된다.
다른 실시예에서는, 저장 시스템(102)이 특정 드라이버(118)를 요하지 않고, 대신에 파일 서버(114)에 직접 접속될 수도 있으며, 파일 서버(114)는 저장 시스템(102)의 저장 컨트롤러(104)에 직접 통신을 행할 수 있다. 예시된 실시예에서는 드라이버(118)가 서버(108)에 위치되어 있으나, 다른 실시예에서는 드라이버(118)가 부분적으로 또는 전체적으로 서버(108)의 외부에 위치할 수 있다. 본 발명에 있어서, 논리적 어드레스의 할당 및 논리적 어드레스의 관리는 저장 시스템(102)에서 이루어지며, 이는 아래에 더욱 상세히 설명될 것이다.
저장 컨트롤러(104)는 하나 이상의 저장 디바이스(106a 내지 106n)에 접속되며, 저장 디바이스(106)에서의 데이터 저장부를 제어한다. 저장 컨트롤러(104)는 하나 이상의 파일 서버(114)/파일 시스템과 통신을 행하며, 전형적으로는 드라이버(118)를 통해서 파일 서버(114)/파일 시스템과 통신을 행한다. 일 실시예에서, 드라이버(118)는 저장 컨트롤러(104)의 연장부일 수 있다. 하나의 특정 실시예서, 저장 컨트롤러(104)는 도 2의 장치(201)에서 보다 상세히 설명되는 바와 같이 솔리드 스테이트 저장 디바이스 컨트롤러(202)이다. 전형적으로, 저장 컨트롤러(104)는 논리 식별자를 저장 디바이스(106)의 물리적 어드레스에 매핑하며, 아래에 보다 상세히 설명되는 바와 같이 논리 식별자를 할당하고 관리할 수 있다. 논리 식별자의 할당 및 관리의 전체 또는 일부는 저장 컨트롤러(104) 및 드라이버(118)에 포함될 수 있다. 하지만, 논리적 어드레스의 전역 할당(global allocation)은 저장 시스템(102)의 외부에서 이루어질 수 있으며, 이는 도 1c의 시스템(103)에 대한 설명에서 보다 상세히 기술될 것이다.
일 실시예에서, 드라이버(118), 또는 그 대신에 저장 인터페이스(116)는 API(application program interface: 응용 프로그램 인터페이스)이며, 명령 및 다른 데이터를 저장 컨트롤러(104)에 전송하는데 적합한 형태로 번역하는 기능을 한다. 다른 실시예에서, 드라이버(118)는 저장 컨트롤러(104)의 하나 이상의 기능을 포함한다. 예를 들면, 드라이버(118)는 아래에 설명되는 모듈들 전부 또는 일부를 포함할 수 있으며, 저장 디바이스(106)에 대한 하나 이상의 인덱스 또는 맵을 포함할 수 있다. 저장 시스템(102)에 포함된 드라이버(118), 하나 이상의 저장 컨트롤러(104), 및 하나 이상의 저장 디바이스(106)는 파일 시스템/파일 서버에 접속된 저장 인터페이스(116)를 구비하며, 종래에 파일 시스템/파일 서버에서 행해지던 할당이 바람직하게 저장 시스템(102)에 이관된다(즉, 로드가 경감된다).
본 특허출원에서 사용되는 논리 식별자는 데이터 단위의 데이터가 저장되는 물리적 어드레스와 다른 데이터 단위의 식별자이다. 본 특허출원에서 사용되는 데이터 단위는 함께 논리적으로 그룹화되는 임의의 데이터의 집합이다. 데이터 단위는 파일, 오브젝트, RAID(redundant array of inexpensive/independent disks/drives) 데이터 스트립의 데이터 세그먼트, 또는 데이터 저장에 사용되는 다른 데이터일 수 있다. 데이터 단위는 실행가능 코드, 데이터, 메타데이터, 디렉토리, 인덱스, 메모리 디바이스에 저장될 수 있는 임의의 다른 유형의 데이터, 또는 이들의 조합일 수 있다. 데이터 단위는 이름, 논리적 어드레스, 물리적 어드레스, 어드레스 범위, 또는 데이터 단위를 식별하는 다른 규칙에 의해 식별될 수 있다. 논리 식별자(LID)는 파일명, 오브젝트 식별자, 아이노드, UUID(Universally Unique Identifier), GUID(Globally Unique Identifier), 또는 다른 데이터 단위 레이블과 같은 데이터 단위 식별자를 포함하며, 논리적 블록 어드레스(logical block address: LBA), 실린더/헤드/섹터(CHS), 또는 다른 하위 레벨 논리 식별자를 또한 포함할 수 있다. 논리 식별자는 물리적 위치에 매핑될 수 있는 임의의 논리적 레이블(logical label)을 일반적으로 포함한다.
예시된 저장 시스템(102)은 하나의 저장 컨트롤러(104)를 포함하나, 다른 저장 컨트롤러(104)도 또한 포함할 수 있다. 일 실시예에서는, 2개 이상의 저장 컨트롤러(104)가 저장 디바이스(예를 들면, 106a)에 접속될 수 있고, 저장 디바이스(106a)에 데이터를 저장하기 위해 서로 통신을 행할 수 있다. 예를 들면, 하나의 저장 컨트롤러(104)는 마스터(master)가 되고 다른 저장 컨트롤러(104)는 슬레이브가 될 수 있다. 당업자는 2개 이상의 저장 컨트롤러(104)가 저장 시스템(102)에서 2개 이상의 저장 디바이스(106)를 제어할 수 있는 다른 방법도 인지할 것이다.
저장 시스템(102)은 하나 이상의 저장 디바이스(106a 내지 106n)를 포함한다. 저장 디바이스(106)는 저장 컨트롤러(104)의 통제에 의해 데이터 단위의 데이터를 저장한다. 일 실시예에서, 저장 디바이스(106)는 적어도 일부의 데이터를 순차적으로, 로그 구조로, 또는 다른 유사한 방식으로 저장한다. 전형적으로, 이러한 저장 디바이스(106)에서는, 데이터가 랜덤 액세스 디바이스에서와 같이 저장되지 않는다. 예를 들면, 데이터 단위가 수정될 때, 데이터 단위의 데이터는 하나의 위치로부터 판독되어, 수정되고, 그리고 나서는 다른 위치에 기록된다. 데이터 저장 디바이스(106)에 데이터를 기록하는 순서 및 시퀀스(sequence)는 로그(log)화되며, 이러한 시퀀스를 재연함으로써 인덱스가 형성되거나 재형성될 수 있다.
수정된 데이터는 데이터가 현재 순차적으로 저장되고 있는 곳에 저장될 수 있다. 데이터 저장 디바이스(106)는 순차적으로 저장된 데이터를 저장할 다음 위치를 나타내는 하나 이상의 첨부 지점(append point)을 포함할 수 있다. 이러한 데이터 저장 디바이스(106)에서는, 논리 식별자가 하나 이상의 물리적 어드레스에 매핑된다. 예를 들면, 논리 식별자는 현재 데이터뿐만 아니라 동일 데이터의 구버전(old version)에도 또한 매핑될 수 있다. 순차 저장 및 논리적-물리적 매핑은 아래에 더욱 상세히 설명된다.
일 실시예에서, 저장 디바이스(106)는 솔리드 스테이트 저장 디바이스, 또는 플래쉬 메모리, 나노 RAM 또는 NRAM(nano random access memory), MRAM(magneto-resistive RAM), DRAM(dynamic RAM), PRAM(phase change RAM) 등과 같은 저장 클래스 메모리(storage class memory)일 수 있다. 다른 실시예에서, 저장 디바이스는 데이터를 저장할 수 있도록 데이터가 순차적으로 저장되는 로그 구조 파일 시스템으로 구성되는 하드디스크 드라이브, 옵티컬 드라이브(optical drive), 테이프 저장부(tape storage) 등일 수 있다.
다른 실시예에서, 저장 디바이스(106)는 하드디스크 드라이브와 같은 저성능(lower performance) 장기(長期) 저장 디바이스를 위한 캐쉬(cache)로 동작하는 플래쉬 메모리와 같은 고성능 저장 디바이스를 포함한다. 고용량 비휘발성 저장 디바이스를 위한 캐쉬로서 동작하는 솔리드 스테이트 저장부의 일례는, 2007년 12월 6일자로 출원되고 본 명세서에 참고로 병합된 데이비드 플린(David Flynn) 외의 "고용량 비휘발성 저장부를 위한 캐쉬로서의 솔리드 스테이트 저장 장치, 시스템, 및 방법"이라는 명칭의 미국 특허출원 번호 제11/952,123호에 기재되어 있다.
또 다른 실시예에서, 저장 디바이스(106)는 저장 컨트롤러(104)와 함께 서버내 SAN(storage area network)의 일부일 수 있으며, 저장 디바이스(106)와 저장 컨트롤러(104)가 상주하는 서버(108)의 외부에 위치된 하나 이상의 클라이언트(110), 저장 컨트롤러(104), 또는 서버(108)와 통신을 행할 수 있다. 서버내 SAN의 일례는 2007년 12월 6일자로 출원되고 본 명세서에 참고로 병합된 데이비드 플린 외의 "서버내 SAN 장치, 시스템, 및 방법"이라는 명칭의 미국 특허출원 제11/952,106호에 기재되어 있다. 당업자는 저장 시스템(102)에서 논리 식별자를 할당하고 관리하는 것이 유익한 다른 저장 디바이스(106)도 인지할 수 있을 것이다.
본 시스템(100)은 서버(108)를 포함한다. 서버(108)는 워크스테이션, 메인프레임 컴퓨터, PC(개인용 컴퓨터), 랩탑 컴퓨터, 또는 저장 디바이스(106)에 액세스할 수 있는 다른 컴퓨팅 장치와 같은 컴퓨터로 구현될 수 있다. 서버(108)는 일 실시예에서 컴퓨터 내의 하나의 파티션(partition)이다. 서버(108)는 물리적인 인클로저(enclosure)를 포함할 수 있다. 저장 시스템(102)은 예를 들면, 서버(108)의 마더보드에 끼워진 PCI 익스프레스 또는 PCI-e(peripheral component interconnect express) 카드로 서버(108)의 물리적인 인클로저 내에 위치될 수 있다. 저장 시스템(102)은 부분적으로 서버(108)의 물리적인 인클로저 내에 위치될 수 있다. 예를 들면, 저장 시스템이 서버(108)를 구동하는 프로세서에서 실행되는 드라이버(118)을 갖는 경우, 저장 컨트롤러 및/또는 저장 디바이스(106)는 컴퓨터에 끼워지거나 또는 케이블을 통해 접속된 인클로저 내에 위치될 수 있다. 당업자는 저장 시스템(102)이 서버(108)에 접속되거나 또는 서버(108)와 결부된 컴퓨터의 일부일 수 있는 많은 방법들을 인지할 수 있을 것이다.
예시된 실시예에서, 서버(108)는 저장 인터페이스(116)를 통해서 저장 시스템(102)에 접속된 파일 서버(114)/파일 시스템을 포함한다. 일 실시예에서 파일 시스템은 하나 이상의 클라이언트(110)에 의해 액세스되는 파일 서버(114)의 구성요소이다. 클라이언트(110) 및/또는 파일 시스템/파일 서버(114)는 저장 인터페이스(116)를 통해서 저장 시스템(102)에 액세스한다.
전형적으로, 파일 시스템/파일 서버(114)는 저장 시스템(102)의 드라이버(118)에 접속되며, 드라이버(118)는 저장 디바이스 인터페이스(120)를 통해서 저장 컨트롤러(104) 및 하나 이상의 저장 디바이스(106)에 인터페이스 접속된다. 저장 디바이스 인터페이스(116)는 PCI-e 버스, 직렬 ATA 버스, 병렬 ATA 등일 수 있다. 다른 실시예에서, 저장 디바이스 인터페이스(116)는 SCSI(small computer system interface), 파이어와이어(FireWire), 파이버 채널(Fibre Channel), USB(Universal Serial Bus), 및 PCIe-AS(PCIe Advanced Switching) 등과 같은 외부 버스(exernal bus)이다. 파일 서버(114)/파일 시스템은 전형적으로 저장 시스템(102)에 액세스하는 하나 이상의 클라이언트(110)의 파일을 관리한다. 일 실시예에서는, 드라이버(118)가 존재하지 않으며 파일 서버(114)/파일 시스템은 저장 디바이스 인터페이스(120)를 통해서 저장 컨트롤러(104)와 직접 통신을 행한다. 예를 들면, 저장 컨트롤러(104)는 드라이버(118)가 로딩되는 동안 일시적으로 또는 보다 오랜 시간 동안 파일 서버(114)/파일 시스템에 직접 접속될 수 있는 장치로 대리 기능할 수 있다.
본 시스템(100)은 하나 이상의 클라이언트(110)를 포함한다. 일 실시예에서, 하나 이상의 클라이언트(110)는 하나 이상의 컴퓨터 네트워크(112)를 통해서 서버(108) 및 파일 서버(114)와 통신을 행한다. 다른 실시예에서는, 서버(108)가 하나 이상의 클라이언트(110)를 포함한다. 클라이언트(110)는 서버(108) 또는 다른 컴퓨터에서 구동되는 애플리케이션(응용 프로그램)일 수 있다. 저장 시스템(102)의 관점에서는, 파일 서버(114)도 클라이언트(110)일 수 있으며 이하에서 "클라이언트(110)"는 파일 서버(114)도 포함할 수 있다. 컴퓨터 네트워크(12)는 인터넷, WAN(wide area network), MAN(metropolitan area network), LAN(local area network), 토큰 링(token ring), 무선 네트워크, 파이버 채널 네트워크(Fibre Channel network), SAN, NAS(network attached atorage), ESCON 등, 또는 네트워크의 조합을 포함할 수 있다. 컴퓨터 네트워크(112)는 이더넷(Ethernet), 토큰 링, WiFi(와이파이), WiMax(와이맥스) 등과 같은 IEEE 802 계열의 네트워크 기술의 네트워크를 또한 포함할 수 있으며 통신을 용이하게 하기 위한 케이블 및 구성요소를 포함한다.
클라이언트(110)는 호스트(host), 서버, SAN의 저장 컨트롤러, 워크스테이션, PC, 랩탑 컴퓨터, 핸드헬드 컴퓨터(hand-held computer), 슈퍼컴퓨터, 컴퓨터 클러스터, 네트워크 스위치, 라우터, 기기(appliance), 데이터베이스 또는 저장 기기(storage appliance), 데이터 취득 또는 데이터 획득 시스템, 진단 시스템(diagnostic system), 테스트 시스템, 로봇, 휴대용 전자장치, 무선 장치, 파일 서버(114) 등일 수 있다. 클라이언트(110)는 컴퓨터 네트워크(112)를 통해서 서버(114)와 통신 상태로 컴퓨터 또는 서버에서 구동될 수 있다. 클라이언트(110)는 파일 시스템이 저장 시스템(102)에 저장된 파일, 오브젝트, 논리적 블록, 또는 다른 데이터 단위를 판독, 기록, 삭제, 수정 등을 행하도록 지시할 수 있다. 당업자는 "오브젝트"가 매우 넓은 의미를 가질 수 있음을 인지할 것이다. "오브젝트"라는 용어가 항상 모든 데이터 단위를 포함하는 것은 아닐 수 있으나, 본 명세서에서 "오브젝트"는 넓은 의미로 해석되어야 하며 파일 또는 다른 데이터 구조를 포함할 수 있다.
파일 서버(114)/파일 시스템은 그리고 나서, 데이터 단위의 논리명과 파일 서버(114)/파일 시스템이 데이터 단위와 결부된 논리 식별자 사이의 매핑을 이용하여 데이터 유닛에 액세스할 수 있다. 전형적인 실시예에서, 파일 서버(114)/파일 시스템은 데이터 단위의 데이터를 논리적 블록으로 구성하고, 논리적 블록 어드레스를 각각의 논리적 블록에 결부시킨다. 논리적 블록 어드레스는 파일 서버(114)/파일 시스템이 논리적 블록을 저장 시스템(102)에 저장하고자 하는 위치일 수 있다. 그리고 나서 파일 서버(114)/파일 시스템은 SCSI 명령 판독 요청, 기록 요청 등을 통해서 저장 시스템(102)에 지시할 수 있다.
본 발명에 있어서, 논리적 블록 어드레스와 같은 논리 식별자의 관리 및 할당은 아래에 보다 상세히 논의되는 바와 같이 저장 시스템(102)에서 이루어진다. 일 실시예에서, 파일 서버(114)/파일 시스템은 저장 시스템(102)이 랜덤 액세스가 아닌 경우에도 저장 시스템(102)에서의 저장부를 랜덤 액세스 디바이스로 취급한다. 전형적인 랜덤 액세스 디바이스에서는, 논리 식별자가 랜덤 액세스 디바이스의 물리적 어드레스에 거의 일대일 대응을 갖는다.
전형적인 랜덤 액세스 디바이스에서의 {불량 블록 매핑(bad block mapping)을 위해 확보된 랜덤 액세스 디바이스 상의 적은 개수의 물리적 어드레스를 제외한} 이러한 일대일 매핑은 논리 식별자와 결부된 저장 용량과 물리적 어드레스와 결부된 물리적 용량 사이의 거의 일대일 관계를 또한 형성한다. 예를 들면, 논리 식별자가 LBA(logical block address)이며, LBA와 결부된 각 논리적 블록은 고정 사이즈를 갖는다. 랜덤 액세스 디바이스 상의 대응하는 물리적 블록은 전형적으로 논리적 블록과 동일한 사이즈이다. 이는 전형적인 파일 서버(114)/파일 시스템이 LBA와 같은 논리 식별자를 관리함으로써 랜덤 액세스 디바이스의 물리적 용량을 관리할 수 있게 한다. LBA와 PBA간 매핑의 이러한 연속성은 데이터 저장 디바이스에 저장된 데이터를 디프래그먼트(defragment)하는 파일 시스템에 일반적으로 의존하며 이 파일 시스템에 의해 이용된다. 유사하게, 어떤 시스템은 성능을 향상시키기 위해 특정 물리적 트랙(physical tracks)상의 데이터의 위치를 파악하기 위해 이러한 연속성을 사용할 수 있으며, 이는 디스크 드라이브의 "쇼트 스트로킹(short stroking)"이라고 불리는 기술의 경우이다. 논리적 어드레스 공간의 직접적인 관리를 통해서 물리적 어드레스 공간에서의 데이터의 저장을 간접적으로 관리하기 위해 소정 애플리케이션에서는 매우 예측 가능한 LBA와 PBA간 매핑이 필수적이다.
하지만, 저장 시스템(102)은 LBA와 PBA간 매핑을 결정하기 위한 "고정(fixed)" 관계 또는 로그(logarithm)가 존재하지 않도록 로그 구조 파일 시스템일 수 있거나, 또는 다른 실시예에서는 각 클라이언트(110) 또는 파일 서버(114)/파일 시스템에 할당된 논리 식별자가 전형적인 시스템의 논리-물리 식별자의 일대일 관계보다 훨씬 더 큰 저장 용량을 나타내도록 랜덤 액세스이지만 둘 이상의 클라이언트(110) 또는 파일 서버(114)/파일 시스템에 의해 액세스될 수 있다. 저장 시스템(102)은 하나 이상의 클라이언트(110) 각각이 저장 시스템(102)의 저장 디바이스(106)의 저장 공간보다 훨씬 더 큰 할당된 논리적 어드레스 범위를 갖도록 씬 프로비져닝(thin provisioining)될 수도 있다. 본 시스템(100)에서, 저장 시스템(102)은 논리 식별자와 물리 식별자 사이에 일대일 또는 거의 일대일 관계가 존재하지 않도록 논리 식별자를 관리 및 할당한다.
본 시스템(100)은 전형적인 저장 시스템보다 더 효율적인 저장 용량의 관리를 가능케 하기 때문에 이점을 갖는다. 예를 들면, 다수의 클라이언트(110)가 액세스할 수 있는 전형적인 랜덤 액세스 디바이스의 경우에, 각 클라이언트에 소정량의 저장 공간이 할당되면, 이 저장 공간은 전형적으로 존재하며 실제 저장 공간의 양이 훨썬 적게 차지하는 경우에도 할당에 있어서 묶이게(tied up) 된다. 본 시스템(100)은 저장 디바이스(106)에 접속된 표준 씬 프로비져닝 시스템(standard thin provisioning system)의 복잡도를 저감시키기 때문에 또한 이점을 갖는다. 표준 씬 프로비져닝 시스템은 데이터가 순차 저장되는 솔리드 스테이트 저장부 또는 로그 구조 파일 시스템과 같이 저장 디바이스(106)의 논리적-물리적 매핑에 더하여 논리적-논리적 매핑을 갖는 씬 프로비져닝 층을 구비한다. 본 시스템(100)은 복수의 매핑 층이 제거되고 최하위 레벨(lowest level)에서 씬 프로비져닝(논리적-물리적 매핑)이 행해지기 때문에 보다 효율적이다.
도 1b는 본 발명에 따른 데이터 저장 공간을 할당하는 시스템(101)의 다른 실시예를 예시하는 개략적인 블록도이다. 도 1b에 예시된 시스템(101)은 도 1a에 예시된 시스템(100)의 변형형태이다. 본 시스템(101)은 저장 인터페이스(116)를 통해서 드라이버(118)에 접속된 저장 시스템(102)과, 저장 디바이스 인터페이스(120)를 통해서 각각의 저장 컨트롤러(104)에 접속된 드라이버(118), 및 도 1a의 시스템(100)과 관련하여 위에서 설명된 저장 디바이스(106a 내지 106n)와 실질적으로 유사한 저장 디바이스(106a 내지 106n)를 포함한다. 본 시스템(101)은 컴퓨터 네트워크(112)에 연결된 하나 이상의 클라이언트(110)를 또한 포함하며, 클라이언트(110)도 마찬가지로 도 1a의 시스템(100)과 관련하여 위에서 설명된 클라이언트(110)와 실적으로 유사하다.
도 1b의 시스템(101)에서, 클라이언트(110)는 각각 파일 서버(114)/파일 시스템을 가지며 저장 기기(122)를 통해서 저장 시스템(102)에 액세스한다. 파일 서버(114)/파일 시스템은 IBM의 GPFS 또는 Lustre 클러스터링 파일 시스템(Lustre Clustering File System)과 같은 분산 파일 서버/파일 시스템일 수 있다. 저장 기기(122)는 SAN 컨트롤러, RAID 컨트롤러 등일 수 있으며, 각각의 파일 서버(114)/파일 시스템은 저장 시스템(102)의 저장 디바이스(106)에 독립적으로 접속될 수 있다. 저장 기기(122)는 저장 시스템(102)에게는 클라이언트(110)일 수 있다. 이 경우에, 본 시스템(101)은 일 실시예에서 각 파일 서버(114)/파일 시스템이 표준 SCSI 프로토콜 또는 표준 SCSI 프로토콜 확장을 이용하여 저장 시스템(102)의 첨부 저장부를 SCSI 디바이스로서 취급할 수 있기 때문에 이점을 갖는다. 각 클라이언트(110) 및 그 파일 서버(114)/파일 시스템은 저장 시스템(102)의 실제 저장 공간이 다양한 클라이언트(110)에 할당된 저장 공간보다 훨씬 작은 경우에도 저장 시스템(102)에 의해 클라이언트(110)에 할당된 저장 공간에 대해 전적인 액세스(full access)를 갖고 있는 것처럼 동작할 수 있다.
저장 시스템(102)은 파일 서버(114)/파일 시스템이 저장 시스템(102)에 접속할 수 있도록 표준 프로토콜를 사용할 수 있게 하면서 클라이언트(110)에 대해 논리 식별자를 효율적으로 관리 및 할당할 수 있다. 다른 실시예에서, 저장 시스템(102)은 VMware와 같은 가상화 운영체계 상의 가상 서버 또는 게스트 내의 클라이언트(110)를 위한 논리 식별자를 관리 및 할당한다. 다른 실시예에서, 파일 서버(114)/파일 시스템은 저장 시스템(102)에 할당 관리를 이관하도록 구성되고, 할당 요청, 할당 질의 등에 의해 저장 디바이스 드라이버(118)와 통신을 행하며 요청에 대한 답신을 수신하는데, 이는 아래에 더욱 상세하게 설명될 것이다.
저장 디바이스(106)는 저장 기기(122) 내에 있을 수도 있고 저장 기기(122) 외부에 있을 수도 있다. 일 실시예에서는, 하나 이상의 저장 디바이스(106)가 저장 기기(122) 내에 배치되고 하나 이상의 저장 디바이스(106)가 저장 기기(122)의 외부에 배치된다. 저장 디바이스(106)는 저장 기기(122)와 함께 배치될 수도 있고 저장 기기(122)로부터 멀리 떨어져 있을 수도 있다. 당업자는 다른 저장 기기(122) 및 저장 기기(122)와 저장 장치(106)의 다른 배치도 또한 인지할 수 있을 것이다.
일 실시예에서, 하나 이상의 클라이언트(110)는 저장 시스템(102)에 도시된 드라이버(118) 외에 (도시되지 않은) 드라이버(118)를 포함한다. 다른 실시예에서는, 저장 시스템(102)이 드라이버(118)를 포함하지 않지만, 각 클라이언트(110)는 드라이버(118)를 포함한다. 드라이버(118)는 저장 시스템(102)과 파일 서버(114)/파일 시스템 또는 저장 기기(122) 사이의 명령 또는 다른 통신을 번역하도록 전형적으로 기능한다. 일 실시예에서, 저장 시스템(102)은 드라이버(118)가 로딩될 때까지 표준 저장 디바이스의 대리 기능을 한다(emulates). 그리고 드라이버(118)는 이 드라이버(118) 없이는 이용 가능하지 않은 추가적인 특징 및 명령을 가능케 할 수 있다.
도 1c는 본 발명에 따른 데이터 저장 공간을 할당하는 시스템(103)의 또 다른 실시예를 예시하는 개략적인 블록도이다. 본 시스템(103)은 저장 디바이스(106a 내지 106n)를 구비한 2개 이상의 저장 시스템(102a 내지 102n)을 포함하며, 각 저장 디바이스는 하나 이상의 컴퓨터 네트워크(112)를 통해서 클라이언트(110)에 접속된 서버(108a 내지 108n) 내에 있다. 본 시스템(103)은 각 서버(108)와 통신을 행하며 클라이언트(110)와 통신을 행할 수 있는 마스터 할당 매니저(master allocation manager: 124)를 또한 포함한다. 저장 디바이스(106), 저장 시스템(102), 서버(108), 클라이언트(110), 및 컴퓨터 네트워크(112)는 도 1a와 도 1b의 시스템(100 및 101)과 관련하여 위에서 설명된 것들과 실질적으로 유사하다. 게다가, 본 시스템(103)은 저장 컨트롤러(104), 저장 인터페이스(116), 파일 서버(114)/파일 시스템를 포함하며, 드라이버(118)와 위에서 설명된 다른 구성요소 및 특징을 포함할 수 있다. 도 1c의 시스템(103)에 예시된 실시예는 저장 시스템(102)을 구비한 서버(108)의 개수는 제한되지 않으며 2개 이상의 저장 시스템(103)을 포함할 수 있음을 나타내기 위한 것이다.
본 시스템(103)은 일 실시예에서 마스터 할당 매니저(124)를 포함한다. 일 실시예에서, 마스터 할당 매니저(124)는 상위 레벨에서의 저장 공간 할당을 관리한다. 예를 들면, 마스터 할당 매니저(124)는 각 클라이언트(110)에 저장 용량을 할당할 수 있다. 그 다음에 마스터 할당 매니저(124)는 클라이언트(110) 각각에 대해 논리 식별자를 할당 및 관리하기 위해 각 저장 시스템(102a 내지 102n)과 조화될 수 있다. 일 실시예에서, 마스터 할당 매니저(124)는 상위 레벨에서의 저장 공간을 관리하고, 저장 용량을 할당하고, 저장 용량에 한도를 부여하며, 저장 시스템(102) 또는 저장 디바이스(106)를 클라이언트(110)에 배정하는 등의 기능을 하는 한편, 저장 시스템(102)은 논리 식별자를 추적 및 할당하고 논리 식별자를 물리적 위치에 매핑함으로써 하위 레벨에서 관리 및 할당한다. 마스터 할당 매니저(124)는 저장 시스템(102a 내지 102n)에 할당 요청, 물리적 용량 요청, 할당 질의 등을 전송하고, 마스터 할당 매니저(124)가 논리적 공간을 관리할 수 있게 하는 답신을 수신한다. 당업자는 마스터 할당 매니저(124)가 논리 식별자를 할당 및 관리하는 저장 시스템(102)과 통합되는 다른 방법도 인지할 수 있을 것이다.
일 실시예에서, 마스터 할당 매니저(124)는, 논리적 및/또는 물리적 할당을 또한 관리하는 씬 프로비져닝 층과 달리, 논리적-물리적 재매핑을 행할 필요가 없다. 마스터 할당 매니저(124)는 씬 프로비져닝 시스템에 일반적인 다른 할당 기능을 행할 수 있으나, 1차 할당(primary allocation)(논리적-물리적)을 저장 시스템(102)에 이관한다.
솔리드 스테이트 저장 디바이스
도 2는 본 발명에 따른 데이터 저장 공간을 할당하는 장치를 포함할 수 있는 솔리드 스테이트 저장 디바이스 컨트롤러(202)의 특정 실시예(200)를 예시하는 개략적인 블록도이다. 솔리드 스테이트 저장 디바이스(206)는, 도 3과 관련된 논의에서 더욱 상세하게 아래에 기술되는 데이터 기록 파이프라인(301)과 데이터 판독 파이프라인(303)을 포함한다. 솔리드 스테이트 저장 디바이스 컨트롤러(202)는, 각각 솔리드 스테이트 저장부(207)를 제어하는 다수의 솔리드 스테이트 저장 컨트롤러(0 내지 N)(204a 내지 204n)를 포함할 수 있다. 예시된 실시예에서는, 2개의 솔리드 스테이트 컨트롤러, 즉 솔리드 스테이트 컨트롤러 0(204a)와 솔리드 스테이트 컨트롤러 N(204n)이 도시되어 있으며; 각각의 컨트롤러는 솔리드 스테이트 저장부(207a 내지 207n)를 제어한다.
예시된 실시예에서, 솔리드 스테이트 저장 컨트롤러 0(204a)는 부착된 솔리드 스테이트 저장부(207a)가 데이터를 저장하도록 데이터 채널을 제어한다. 솔리드 스테이트 저장 컨트롤러 N(204n)은 저장된 데이터와 결부된 인덱스 메타데이터 채널을 제어하고, 결부된 솔리드 스테이트 저장부(207n)는 인덱스 메타데이터를 저장한다. 다른 실시예에서, 솔리드 스테이트 저장 디바이스 컨트롤러(202)는 단일 솔리드 스테이트 저장부(207a)를 구비한 단일 솔리드 스테이트 컨트롤러(204a)를 포함한다. 다른 실시예에서는, 복수의 솔리드 스테이트 저장 컨트롤러(204a 내지 204n) 및 결부된 솔리드 스테이트 저장부(207a 내지 207n)가 존재한다. 일 실시예에서, 그 결부된 솔리드 스테이트 저장부(207a 내지 207n-1)에 결합된 하나 이상의 솔리드 스테이트 저장 컨트롤러(204a 내지 204n-1)는 데이터를 제어하는 한편, 그 결부된 솔리드 스테이트 저장부(207n)에 결합된 적어도 하나의 솔리드 스테이트 저장 컨트롤러(204n)는 인덱스 메타데이터를 제어한다.
일 실시예에서, 적어도 하나의 솔리드 스테이트 컨트롤러(204)는 FPGA(field programmable gate array)이고, 컨트롤러 기능이 FPGA에 프로그램된다. 구체적인 실시예에서, FPGA는 Xilinx? FPGA이다. 다른 실시예에서, 솔리드 스테이트 저장 컨트롤러(204)는 ASIC(application-specific integrated circuit) 또는 주문형 로직 솔루션(custom logic solution)과 같이 특별히 솔리드 스테이트 저장 컨트롤러(204)로 설계된 구성요소를 포함한다. 다른 실시예에서, 적어도 하나의 솔리드 스테이트 저장 컨트롤러(204)는 FPGA, ASIC, 및 주문형 로직 컴포넌트의 조합으로 이루어진다.
솔리드 스테이트 저장부
솔리드 스테이트 저장부(206)는 뱅크(bank: 214)에 배치된 비휘발성 솔리드 스테이트 저장 엘리먼트(216, 218, 220)의 배열이며, 양방향 저장 I/O(input/output) 버스(210)를 통해서 병렬 접속된다. 저장 I/O 버스(210)는 일 실시예에서 어느 때라도 단일방향 통신을 행할 수 있다. 예를 들면, 솔리드 스테이트 저장부(207)에 데이터가 기록되고 있을 때, 솔리드 스테이트 저장부(207)로부터 데이터는 읽혀질 수 없다(판독될 수 없다). 다른 실시예에서는, 데이터가 동시에 양방향으로 흐를 수 있다. 하지만, 데이터 버스와 관련하여 본 명세서에서 사용되는, 양방향은 한번에 한 방향으로만 데이터 흐름이 이루어질 수 있는 데이터 경로(data pathway)를 나타내지만, 양방향 데이터 버스의 한 방향으로 흐르는 데이터가 멈추면, 데이터는 양방향 데이터 버스의 반대 방향으로 흐를 수 있다. 제어 버스(control bus: 212) 내의 제어 라인 및 어드레스 라인이 표명됨에 따라 저장 I/O 버스(210)를 통해서 비트 레벨로 데이터가 기록 및 판독된다.
솔리드 스테이트 저장 엘리먼트{예를 들면, SSS 0.0(216a)}는 전형적으로 회로 기판 상에 칩(하나 이상의 다이의 패키지) 또는 다이로 구성된다. 예시된 바와 같이, 이들 여러 개의 솔리드 스테이트 저장 엘리먼트들이 칩 패키지, 칩 패키지의 스택(적층), 또는 다른 패키지 요소로 함께 패키지화되는 경우에도 솔리드 스테이트 저장 엘리먼트(예를 들면, 216a)는 다른 솔리드 스테이트 저장 엘리먼트(예를 들면, 218a)에 독립적으로 또는 준독립적으로 동작한다. 예시된 바와 같이, 솔리드 스테이트 저장 엘리먼트(216, 218, 220)의 열(column)이 뱅크(214)로 명명된다. 예시된 바와 같이, 솔리드 스테이트 저장부(207)의 n×m 솔리드 스테이트 저장 엘리먼트(216, 218, 220)의 배열에는 "n"개의 뱅크(214a 내지 214n)와 뱅크마다 "m"개의 솔리드 스테이트 저장 엘리먼트(216a-m, 218a-m, 220a-m)가 존재할 수 있다. 일 실시예에서, 솔리드 스테이트 저장부(207a)는 8개의 뱅크(214)에 뱅크(214)마다 20개의 솔리드 스테이트 저장 엘리먼트(216, 218, 220)를 포함하고, 솔리드 스테이트 저장부(207n)는 1개의 뱅크(214)에 뱅크(214)마다 2개의 솔리드 스테이트 저장 엘리먼트(216, 218)를 포함한다. 일 실시예에서, 각 솔리드 스테이트 저장 엘리먼트(216, 218, 220)는 SLC(single-level cell) 디바이스로 구성된다. 다른 실시예에서는, 각 솔리드 스테이트 저장 엘리먼트(216, 218, 220)가 MLC(multi-level cell) 디바이스로 구성된다.
일 실시예에서, 공통의 저장 I/O 버스 행(row)(예를 들면, 216b, 218b, 220b)을 공유하는 복수의 뱅크를 위한 솔리드 스테이트 저장 엘리먼트는 함께 패키지화된다. 다른 실시예에서, 솔리드 스테이트 저장 엘리먼트(216, 218, 220)는 수직으로 적층된 하나 이상의 칩에 각 칩마다 하나 이상의 다이를 구비할 수 있으며, 각 다이는 독립적으로 액세스될 수 있다. 다른 실시예에서, 솔리드 스테이트 저장 엘리먼트{예를 들면, SSS 0.0(216a)}는 다이마다 하나 이상의 가상 다이(virtual die)와 칩마다 하나 이상의 다이 및 수직으로 적층된 하나 이상의 칩을 구비할 수 있으며, 각 가상 다이는 독립적으로 액세스될 수 있다. 다른 실시예에서, 솔리드 스테이트 저장 엘리먼트 SSS 0.0(216a)은 다이마다 하나 이상의 가상 다이와 칩마다 하나 이상의 다이 및 하나 이상의 다이 전부 또는 일부가 수직으로 적층되어 구비되며, 각 가상 다이는 독립적으로 액세스될 수 있다.
일 실시예에서, 그룹마다 4개의 스택(stack)에 2개의 다이가 수직으로 적층되어 8개의 저장 엘리먼트{예를 들면, SSS 0.0 내지 SSS 0.8(216a 내지 220a)}를 형성하며, 각 저장 엘리먼트는 개별 뱅크(214a 내지 214n)에 배치된다. 다른 실시예에서, 8개의 가상 뱅크 각각이 20개의 저장 엘리먼트{예를 들면, SSS 0.0 내지 SSS 20.8(216, 218, 220)}를 구비하도록 20개의 저장 엘리먼트{예를 들면, SSS 0.0 내지 SSS 20.0(216)}는 가상 뱅크(214a)(또는 논리적 뱅크)를 형성한다. 저장 I/O 버스(210)를 통해서 솔리드 스테이트 저장부(207)에 데이터가 전송되어, 특정 그룹의 저장 엘리먼트(SSS 0.0 내지 SSS 0.8)(216a, 218a, 220a)의 모든 저장 엘리먼트에 전송된다. 모든 뱅크(214)에 접속된 저장 I/O 버스(210)를 통해서 수신된 데이터가 선택된 뱅크(214a)에만 기록되도록, 특정 뱅크{예를 들면, 뱅크-0(214a)}를 선택하는데 저장 제어 버스(212a)가 사용된다.
바람직한 실시예에서, 저장 I/O 버스(210)는 하나 이상의 독립적인 I/O 버스(210a.a-m, 210n.a-m을 포함하는 "IIOBa-m")로 구성되고, 각 행 내의 솔리드 스테이트 저장 엘리먼트는 독립적인 I/O 버스들 중 하나를 공유하며, 저장 I/O 버스(210)는 모든 뱅크(214)가 동시에 액세스되도록 각 솔리드 스테이트 저장 엘리먼트(216, 218, 220)에 병렬로 액세스한다. 예를 들면, 저장 I/O 버스(210)의 하나의 채널은 각 뱅크(214a 내지 214n)의 첫 번째 솔리드 스테이트 저장 엘리먼트(216a, 218a, 220a)에 동시에 액세스할 수 있다. 저장 I/O 버스(210)의 두 번째 채널은 각 뱅크(214a 내지 214n)의 두 번째 솔리드 스테이트 저장 엘리먼트(216b, 218b, 220b)에 동시에 액세스할 수 있다. 솔리드 스테이트 저장 엘리먼트(216, 218, 220)의 각 행은 동시에 액세스된다.
솔리드 스테이트 저장 엘리먼트(216, 218, 220)가 다중 레벨인(물리적으로 적층된) 일 실시예에서, 솔리드 스테이트 저장 엘리먼트(216, 218, 220)의 모든 물리적인 레벨은 동시에 액세스된다. 본 명세서에서 사용되는 "동시에"라는 표현은 스위칭 잡음(switching noise)을 회피하기 위해 디바이스들이 약간 다른 간격으로 액세스되는 거의 동시적인 액세스도 또한 포함한다. "동시에"라는 표현은 명령 및/또는 데이터가 하나씩 차례로 개별적으로 전송되는 순차 또는 직렬 액세스와 구별하기 위해서 본 명세서에 사용되고 있다.
전형적으로, 뱅크(214a 내지 214n)는 저장 제어 버스(212)를 사용하여 독립적으로 선택된다. 일 실시예에서, 뱅크(214)는 칩 인에이블(chip enable) 또는 칩 선택(chip select)을 사용하여 선택된다. 칩 선택 및 칩 인에이블 모두가 이용 가능하면, 저장 제어 버스(212)는 다중 레벨의 솔리드 스테이트 저장 엘리먼트(216, 218, 220) 중 하나의 레벨을 선택할 수 있다. 다른 실시예에서는, 다중 레벨의 솔리드 스테이트 저장 엘리먼트(216, 218, 220) 중 하나의 레벨을 개별적으로 선택하기 위해 저장 제어 버스(212)에 의해 다른 명령이 사용된다. 솔리드 스테이트 저장 엘리먼트(216, 218, 220)는 저장 I/O 버스(210)와 저장 제어 버스(212)에 전송된 제어 및 어드레스 정보의 조합을 통해서도 또한 선택될 수 있다.
일 실시예에서, 각 솔리드 스테이트 저장 엘리먼트(216, 218, 220)는 삭제 블록(erase block)으로 구획되며, 각 삭제 블록은 페이지(page)로 구획된다. 전형적인 페이지는 2000 바이트(2kB)이다. 일례에서, 솔리드 스테이트 저장 엘리먼트(예를 들면, SSS 0.0)는 두 개의 레지스터를 포함하며, 두-레지스터 솔리드 스테이트 저장 엘리먼트(216, 218, 220)는 4kB의 용량을 갖는다. 그러면 20개의 솔리드 스테이트 저장 엘리먼트(216, 218, 220)의 하나의 뱅크(214)는 저장 I/O 버스(210)의 채널로 나가는 동일 어드레스로 액세스되는 페이지의 80kB의 용량을 갖는다.
80kB의 솔리드 스테이트 저장 엘리먼트(216, 218, 220)의 뱅크(214)에 있는 이 그룹의 페이지는 가상 또는 논리적 페이지라 지칭될 수 있다. 유사하게, 뱅크(214a)의 각 저장 엘리먼트(216a 내지 216m)의 삭제 블록은 가상 또는 논리적 삭제 블록을 형성하도록 그룹화될 수 있다. 바람직한 실시예에서, 솔리드 스테이트 저장 엘리먼트(216, 218, 220) 내의 페이지의 삭제 블록은 솔리드 스테이트 저장 엘리먼트(216, 218, 220) 내에 삭제 명령이 수신될 때 삭제된다. 솔리드 스테이트 저장 엘리먼트(216, 218, 220) 내의 삭제 블록, 페이지, 평면, 또는 다른 논리적 및 물리적 분할의 사이즈와 개수는 기술의 진보에 따라 시간이 경과함에 따라 변할 것으로 예측되는 한편, 새로운 구성에 부합되는 많은 실시예가 가능하며 본 명세서의 전체적인 기재와도 부합할 것으로 예측된다.
전형적으로, 특정 뱅크의 특정 요소의 특정 삭제 블록에 특정되는 특정 페이지 내의 위치에 기록하고자 하는 패킷이 솔리드 스테이트 저장 엘리먼트(216, 218, 220) 내의 특정 위치에 기록될 때, 물리적 어드레스가 저장 I/O 버스(210)에 전송되고 패킷이 뒤따른다. 물리적 어드레스는 패킷을 페이지 내의 지정 위치로 안내할 수 있도록 솔리드 스테이트 저장 엘리먼트(216, 218, 220)를 위한 충분한 정보를 포함한다. 적정한 페이지에 이르고 저장 엘리먼트{SSS 0.0 내지 SSS 0.N(216a, 218a, 220a)}의 열(列) 내의 유사한 어드레스를 갖는 페이지에 데이터 패킷을 기록하는 것을 회피하기 위해, 저장 I/O 버스(210a.a) 내의 적절한 버스에 의해 하나의 열의 저장 엘리먼트{예를 들면, SSS 0.0 내지 SSS 0.N(216a, 218a, 220a)}의 모든 저장 엘리먼트가 동시에 액세스되므로, 데이터 패킷이 기록될 올바른 페이지를 갖는 솔리드 스테이트 저장 엘리먼트를 포함하는 뱅크(214a)가 저장 제어 버스(212)에 의해 동시에 선택된다.
유사하게, 저장 I/O 버스(212)로 전송되는 판독 명령은 저장 제어 버스(212) 상의 동시 명령이 단일 뱅크(214a)와 그 뱅크(214a) 내의 적절한 페이지를 선택할 것을 요한다. 바람직한 실시예에서, 판독 명령은 전체 페이지를 판독하며, 뱅크(214)에는 병렬의 복수의 솔리드 스테이트 저장 엘리먼트(216, 218, 220)가 있기 때문에, 논리적 페이지 전체가 판독 명령에 의해 판독된다. 하지만, 판독 명령은 부명령(subcommands)으로 세분화될 수 있으며, 이는 아래에서 뱅크의 인터리브(interleave)와 관련하여 설명될 것이다. 논리적 페이지는 기록 작업으로 액세스될 수도 있다.
특정 삭제 블록을 삭제하도록 특정 삭제 블록 어드레스를 갖는 저장 I/O 버스(210)를 통해서 삭제 블록을 삭제하도록 삭제 블록 삭제 명령이 전송될 수 있다. 전형적으로, 논리적 삭제 블록을 삭제하기 위해 저장 I/O 버스(210)의 병렬 경로를 통해서 삭제 블록 삭제 명령이 전송될 수 있으며, 각 논리적 삭제 블록은 특정 삭제 블록을 삭제할 수 있도록 특정 삭제 블록 어드레스를 갖는다. 동시에 모든 뱅크{뱅크 1 내지 N(214b 내지 214n)} 내의 유사한 어드레스를 갖는 삭제 블록의 삭제를 방지하기 위해 저장 제어 버스(212)를 통해 특정 뱅크{예를 들면, 뱅크-0(214a)}가 선택된다. 저장 I/O 버스(210)와 저장 제어 버스(212)의 조합을 사용하여 특정 위치에 다른 명령도 또한 전송될 수 있다. 당업자는 양방향 저장 I/O 버스(210)와 저장 제어 버스(212)를 사용하여 특정 저장 위치를 선택하는 다른 방법도 인지할 수 있을 것이다.
일 실시예에서, 데이터 패킷은 솔리드 스테이트 저장부(207)에 순차 기록된다. 예를 들면, 데이터 패킷은 저장 엘리먼트(216)의 뱅크(214a)의 저장 기록 버퍼에 스트리밍이 이루어지며, 버퍼가 가득 차게 되면, 데이터 패킷은 지정된 논리적 페이지에 프로그램된다. 그리고 나서 데이터 패킷은 저장 기록 버퍼를 다시 채우게 되며, 가득 차게 되면, 공간이 존재하는 경우 패킷은 동일한 논리적 페이지에 기록되며 그렇지 않으면 후속 논리적 페이지에 기록된다. 후속 논리적 페이지는 동일한 뱅크(214a)에 있을 수도 있고 아니면 다른 뱅크(예를 들면, 214b)에 있을 수도 있다. 전형적으로 논리적 삭제 블록이 채워질 때까지, 논리적 페이지 마다 이러한 과정이 계속된다. 다른 실시예에서, 스트리밍은 논리적 삭제 블록 경계를 너머서 계속될 수 있으며, 이 과정은 논리적 삭제 블록마다 지속된다.
일 실시예에서, 논리적 페이지(예를 들면, 216a 내지 216n)의 각 솔리드 스테이트 저장 엘리먼트는 하나 이상의 첨부 지점을 포함한다. 첨부 지점은 기록 버퍼로부터의 데이터가 다음에 기록될 곳에 위치될 수 있다. 데이터가 첨부 지점에 기록되고 나면, 첨부 지점은 데이터의 말단으로 이동한다. 이 과정은 전형적으로 논리적 삭제 블록이 가득찰 때까지 지속된다. 첨부 지점은 그리고 나서 다른 논리적 삭제 블록으로 이동된다. 논리적 어드레스와 물리적 어드레스 사이의 매핑을 포함하는 인덱스가 오류를 일으키거나 손실되는 경우, 인덱스를 재건할 수 있게 데이터를 저장하는 시퀀스가 재연될 수 있도록 논리적 삭제 블록에 기록하는 시퀀스가 유지된다.
이러한 유형의 순차 저장부는 로그 구조 어레이(log structured array)로 지칭될 수 있으며, 이러한 유형의 순차 저장부를 갖는 저장 시스템(102)은 로그 구조 시스템의 한 유형일 수 있다. 이러한 순차 저장 시스템 또는 로그 구조 파일 시스템에서, 판독-수정-기록 동작으로 데이터가 수정될 때, 데이터가 하나의 위치로부터 판독되고, 수정되어서는, 데이터가 판독된 위치의 최상부 대신에 첨부 지점에 기록된다. 인덱스는 데이터와 결부된 논리 식별자를 논리 식별자에 대응하는 데이터가 저장된 각 위치에 매핑한다. 무효한 데이터가 필요치 않게 되면, 데이터는 가비지 컬렉션 작업(garbage collection operation)으로 삭제될 수 있으며, 인덱스는 무효한 데이터가 존재하지 않음을 반영하도록 업데이트된다. 각 버전을 추적하기 위해 구 버전의 데이터도 인덱스에서 추적될 수 있다. 인덱스에 오류가 발생하면, 인덱스를 재건하도록 시퀀스가 재연되며, 특정 논리 식별자에 대한 데이터를 발견할 때마다 인덱스가 업데이트된다. 전체 시퀀스가 재연되고 나면, 특정 논리 식별자의 가장 최근 버전의 데이터가 전형적으로 논리 식별자에 매핑된다.
일 실시예에서, 각 솔리드 스테이트 저장 엘리먼트(216, 218, 220)는 2개 이상의 첨부 지점을 포함한다. 예를 들면, 핫 데이터(hot data), 예컨대 새로운 데이터 또는 자주 사용되는 데이터가 하나의 논리적 삭제 블록에서 첨부 지점에 순차 저장될 수 있는 반면, 콜드 데이터(cold data), 예컨대 자주 사용되지 않는 데이터는 다른 논리적 삭제 블록에서 다른 첨부 지점에 저장될 수 있다. 다양한 실시예에서, 솔리드 스테이트 저장 엘리먼트(216, 218, 220)는 3개 이상의 첨부 지점을 가질 수 있다.
판독, 수정, 기록 동작에서, 데이터 단위와 결부된 데이터 패킷이 위치 파악되고 판독 동작으로 판독된다. 수정된 데이터 단위의 데이터 세그먼트(data segment)는 그 판독된 위치에 기록되지 않는다. 대신에, 수정된 데이터 세그먼트는 다시 데이터 패킷으로 변환되고, 그리고 나서 현재 기록되고 있는 논리적 페이지 내의 후속 가용 위치(next available location)에 기록된다. 각 데이터 패킷의 인덱스 엔트리(index entry)는 수정된 데이터 세그먼트를 포함하는 패킷을 가리키도록 수정된다. 수정되지 않은 동일 데이터 단위와 결부된 데이터 패킷의 인덱스의 엔트리는 수정되지 않은 데이터 패킷의 원래 위치에 대한 포인터(pointer)를 포함하게 된다. 따라서, 예를 들면 이전 버전의 데이터 단위를 유지하기 위해 최초의 데이터 단위가 유지되면, 최초의 데이터 단위는 최초 기록된 모든 데이터 패킷을 가리키는 포인터를 인덱스에 포함하게 된다. 새로운 데이터 단위는 최초의 데이터 패킷 중 일부를 가리키는 포인터를 인덱스에 포함하고 현재 기록되고 있는 논리적 페이지의 수정된 데이터 패킷을 가리키는 포인터를 구비하게 된다.
복사 동작시에, 인덱스는 솔리드 스테이트 저장부(207)에 저장된 다수의 패킷에 매핑된 최초의 데이터 단위에 대한 엔트리를 포함한다. 복사본이 만들어지면, 일 실시예에서는 새로운 데이터 단위가 생성되고, 새로운 데이터 단위를 최초의 패킷에 매핑하는 인덱스에 새로운 엔트리가 생성된다. 새로운 데이터 단위도 또한 솔리드 스테이트 저장부(207)에 기록되며, 그 위치는 인덱스 내의 새로운 엔트리에 매핑된다. 최초의 데이터 단위에 변경이 이루어졌지만 복사본에는 아직 전파되지 않았고 인덱스가 손실되거나 오류가 발생한 경우에, 참조된 최초의 데이터 단위 내의 패킷을 식별하는데 새로운 데이터 단위 패킷이 사용될 수 있다.
전형적으로 순차 저장부의 경우에, 데이터가 기록되는 물리적 어드레스는 데이터가 저장 디바이스(106)에 저장되기 전에는 알려지지 않지만 데이터의 기록 시점에 결정된다. 전형적으로, LID에 대응하는 데이터가 데이터 저장 디바이스에 저장될 때까지 또는 적어도 데이터가 저장되는 첨부 지점의 위치가 결정될 때까지, 데이터 저장 디바이스 내의 가용 물리적 저장 용량은 LID에 매핑되지 않는다.
유익하게는, 패킷의 순차 기록은 솔리드 스테이트 저장부(207)의 보다 균일한 사용을 용이하게 하며, 솔리드 스테이트 저장 디바이스 컨트롤러(202)가 저장 핫 스폿을 감시할 수 있게 하고 솔리드 스테이트 저장부(207) 내의 다양한 논리적 페이지의 균등한 사용을 가능케 한다. 패킷의 순차 기록은 또한 강력하면서 효율적인 가비지 컬렉션 시스템을 용이하게 하는데, 이는 아래에 상세히 설명되어 있다. 당업자는 데이터 패킷의 순차 저장과 관련된 다른 이점도 인지할 수 있을 것이다.
솔리드 스테이트 저장 디바이스 컨트롤러
다앙한 실시예에서, 솔리드 스테이트 저장 디바이스 컨트롤러(202)는 또한 데이터 버스(205), 로컬 버스(209), 버퍼 컨트롤러(208), 버퍼 0 내지 N(222a 내지 222n), 마스터 컨트롤러(224), DMA(direct memory access) 컨트롤러(226), 메모리 컨트롤러(228), 동적 메모리 어레이(230), 정적 랜덤 메모리 어레이(232), 관리 컨트롤러(234), 관리 버스(236), 시스템 버스(240)에 대한 브릿지(bridge: 238), 및 기타 로직(242)을 포함하며, 이는 아래에 설명된다. 다른 실시예에서, 시스템 버스(240)는 하나 이상의 NIC(network interface cards: 244)에 결합되고, NIC(244) 중 일부는 원격 DMA(RDMA: remote DMA) 컨트롤러(246), 하나 이상의 CPU(248), 하나 이상의 외부 메모리 컨트롤러(250) 및 결부된 외부 메모리 어레이(252), 하나 이상의 저장 컨트롤러(254), 피어(peer) 컨트롤러(256), 및 ASP(application specific processor: 258)를 포함할 수 있으며, 이는 아래에 설명된다. 시스템 버스(240)에 접속된 구성요소들(244 내지 258)은 서버(108) 내에 위치될 수도 있고 다른 장치에 위치될 수도 있다.
전형적으로, 솔리드 스테이트 저장 컨트롤러(204)는 저장 I/O 버스(210)를 통해서 솔리드 스테이트 저장부(207)에 데이터를 전송한다. 솔리드 스테이트 저장부가 뱅크(214)에 배열되고 각 뱅크(214)가 병렬로 액세스되는 다수의 저장 엘리먼트(216, 218, 220)를 포함하는 전형적인 실시예에서, 저장 I/O 버스(210)는 뱅크(214)에 걸쳐있는 저장 엘리먼트(216, 218, 220)의 각 행에 대해 하나씩 있는 버스의 배열이다. 본 명세서에서 사용되는 "저장 I/O 버스"라는 용어는 하나의 저장 I/O 버스(210) 또는 데이터에 독립적인 버스의 배열(도시하지 않음)을 지칭할 수 있다. 바람직한 실시예에서, 하나의 행의 저장 엘리먼트(예를 들면, 216a, 218a, 220a)에 액세스하는 각 저장 I/O 버스(210)는 하나의 행의 저장 엘리먼트(216a, 218a, 220a)에서 액세스되는 저장 구획(예를 들면, 삭제 블록)을 위한 논리적-물리적 매핑을 포함할 수 있다. 이러한 매핑은 또한 첫 번째 저장 구획(storage division)이 실패하거나, 부분적으로 실패하거나, 액세스 가능하지 않거나, 또는 다른 문제를 갖고 있는 경우에, 저장 구획의 물리적 어드레스에 매핑된 논리적 어드레스가 다른 저장 구획에 재매핑될 수 있게 한다.
시스템 버스(240), 브릿지(238), 로컬 버스(209), 버퍼(222), 및 마지막으로 데이터 버스(205)를 통해서, 클라이언트(110) 또는 파일 서버(114)/파일 시스템과 같은 요청 디바이스로부터 솔리드 스테이트 저장 디바이스 컨트롤러(204)에 데이터가 또한 전송될 수 있다. 데이터 버스(205)는 전형적으로 버퍼 컨트롤러(208)에 의해 제어되는 하나 이상의 버퍼(222a 내지 222n)에 접속된다. 버퍼 컨트롤러(208)는 전형적으로 로컬 버스(209)로부터 버퍼(222)로 그리고 데이터 버스(205)를 통해서 파이프라인 입력 버퍼(306) 및 출력 버퍼(330)로의 데이터의 전송을 제어한다(도 3 참조). 버퍼 컨트롤러(208)는 데이터 충돌 등을 방지하기 위해 상이한 클럭 도메인(clock domain)을 처리할 수 있도록, 전형적으로 요청 디바이스로부터 도착하는 데이터가 어떻게 버퍼(222)에 일시적으로 저장될 수 있고 그리고 나서 데이터 버스(205)에 전송될 수 있는지 또는 그 반대를 제어한다. 버퍼 컨트롤러(208)는 전형적으로 데이터 흐름을 조정하기 위해 마스터 컨트롤러(224)와 연계되어 동작한다. 데이터가 도착함에 따라, 데이터는 시스템 버스(240)에 도달하고, 브릿지(238)를 통해서 로컬 버스(209)에 이송된다.
전형적으로 데이터는 마스터 컨트롤러(224)와 버퍼 컨트롤러(208)에 의한 통제에 의해 로컬 버스(209)로부터 하나 이상의 데이터 버퍼(222)로 이송된다. 그리고 나서 데이터는 솔리드 스테이트 컨트롤러(204)를 통해서 버퍼(222)로부터 데이터 버스(205)로 및 NAND 플래쉬 또는 다른 저장 매체와 같은 솔리드 스테이트 저장부(207)로 흐르게 된다. 바람직한 실시예에서, 데이터 및 데이터와 함께 도달하는 결부된 대역 외 메타데이터(out-of-band metadata)("데이터 단위 메타데이터")는 하나 이상의 솔리드 스테이트 저장 컨트롤러(204a 내지 204n-1) 및 결부된 솔리드 스테이트 저장부(207a 내지 207n-1)를 포함하는 하나 이상의 데이터 채널을 사용하여 전송되는 한편, 적어도 하나의 채널{솔리드 스테이트 저장 컨트롤러(204n), 솔리드 스테이트 저장부(207n)}이 인덱스 정보 및 솔리드 스테이트 저장 디바이스(206)의 내부에서 생성된 다른 메타데이터와 같은 동일 대역(in-band) 메타데이터에 전용으로 배정된다.
로컬 버스(209)는 전형적으로 솔리드 스테이트 저장 디바이스 컨트롤러(202) 내부의 장치들 사이에서 및 솔리드 스테이트 저장 디바이스(206) 내부의 장치들과 시스템 버스(204)에 접속된 장치들(244 내지 258) 사이에서 데이터 및 명령의 전송을 가능케 하는 양방향 버스 또는 버스의 집합이다. 브릿지(238)는 로컬 버스(209)와 시스템 버스(204) 사이에서의 통신을 용이하게 한다. 당업자는 고리 구조(ring structure) 또는 스위칭식 스타 구조(switched star configuration) 또는 버스(240, 209, 205, 210)와 브릿지(238)의 기능과 같은 다른 실시예도 인지할 수 있을 것이다.
시스템 버스(240)는 전형적으로 컴퓨터, 서버(108), 또는 솔리드 스테이트 저장 디바이스(206)가 설치되거나 접속된 다른 장치의 버스이다. 일 실시예에서, 시스템 버스(240)는 PCI-e 버스, 직렬 ATA 버스, 병렬 ATA 등일 수 있다. 다른 실시예에서, 시스템 버스(240)는 SCSI(small computer system interface), FireWire(파이어와이어), 파이버 채널, USB, PCIe-AS 등과 같은 내부 버스이다. 솔리드 스테이트 저장 디바이스(206)는 장치의 내부에 끼워 맞춰질 수 있도록 또는 외부 접속 장치로서 패키지화될 수 있다.
솔리드 스테이트 저장 디바이스 컨트롤러(202)는 솔리드 스테이트 저장 디바이스(206) 내의 상위 레벨 기능을 제어하는 마스터 컨트롤러(224)를 포함한다. 마스터 컨트롤러(224)는 다양한 실시예에서 저장 요청 및 다른 요청을 번역함으로써 데이터 흐름을 제어하고, 데이터와 결부된 식별자를 결부된 데이터의 물리적 위치에 매핑하기 위한 인덱스의 생성을 관리하고, DMA 요청을 조정하는 등을 행한다. 본 명세서에 기재된 기능의 다수는 그 전체가 또는 일부가 마스터 컨트롤러(224)에 의해 제어된다.
일 실시예에서, 마스터 컨트롤러(224)는 임베디드 컨트롤러(embedded controller)를 사용한다. 다른 실시예에서, 마스터 컨트롤러(224)는 동적 메모리 어레이(dynamic memory array: 230)(DRAM), 정적 메모리 어레이(static memory array: 323)(SRAM) 등과 같은 로컬 메모리를 사용한다. 일 실시예에서, 로컬 메모리는 마스터 컨트롤러(224)를 이용하여 제어된다. 다른 실시예에서, 마스터 컨트롤러는 메모리 컨트롤러(228)를 통해서 로컬 메모리에 액세스한다. 다른 실시예에서, 마스터 컨트롤러는 리눅스 서버(Linux server)를 구동하며, WWW(World Wide Web), HTML(hyper-text makrup language) 등과 같은 다양한 일반적인 서버 인터페이스를 지원할 수 있다. 다른 실시예에서, 마스터 컨트롤러(224)는 나노-프로세서(nano-processor)를 사용한다. 마스터 컨트롤러(224)는 프로그램 가능 또는 표준 로직, 혹은 위에 열거된 컨트롤러 유형의 임의의 조합을 이용하여 구성될 수 있다. 당업자는 마스터 컨트롤러(224)의 많은 실시예를 인지할 수 있을 것이다.
저장 컨트롤러(104)/솔리드 스테이트 저장 디바이스 컨트롤러(202)가 복수의 데이터 저장 디바이스(106)/솔리드 스테이트 저장부(207a 내지 207n)를 관리하는 하는 일 실시예에서, 마스터 컨트롤러(224)는 솔리드 스테이트 저장 컨트롤러(204a 내지 204n)와 같은 내부 컨트롤러들 사이에 작업 로드를 분할한다. 예를 들면, 마스터 컨트롤러(224)는 데이터의 일부분이 각각의 부착된 데이터 저장 디바이스(106)/솔리드 스테이트 저장부(207)에 저장되도록 기록될 데이터를 데이터 저장 디바이스들{예를 들면, 솔리드 스테이트 저장부(207a 내지 207n)}에 분할한다. 이러한 특징은 성능 향상을 이룸으로써, 데이터의 보다 신속한 저장 및 액세스를 가능케 한다. 일 실시예에서, 마스터 컨트롤러(224)는 FPGA를 이용하여 구현된다. 솔리드 스테이트 저장 디바이스 컨트롤러(202)도 FPGA를 이용하여 구현될 수 있다. 다른 실시예에서, 마스터 컨트롤러(224) 내의 펌웨어(firmware)는 관리 버스(236), NIC(network interface card: 244)에 접속된 네트워크를 통한 시스템 버스(240), 또는 시스템 버스(240)에 접속된 다른 디바이스를 통해 업데이트될 수 있다.
일 실시예에서, 오브젝트, 파일, 다른 데이터 단위를 관리하는 마스터 컨트롤러(224)는 컴퓨터 또는 서버(108) 혹은 저장 디바이스(106)/솔리드 스테이트 저장 디바이스(206)에 접속된 다른 디바이스가 저장 디바이스(106)/솔리드 스테이트 저장 디바이스(206)를 블록 저장 디바이스로 보고 논리적 블록으로 분할된 데이터를 저장 디바이스(106)/솔리드 스테이트 저장 디바이스(206)에 있는 특정 논리적 블록 어드레스로 전송하도록 블록 저장부의 대리 기능을 한다. 마스터 컨트롤러(224)는 그리고 나서 논리적 블록을 분할하며, 오브젝트와 같은 데이터 단위가 아닌 상태로 논리적 블록으로부터의 데이터를 저장한다. 다음에 마스터 컨트롤러(224)는 논리적 블록 및 논리적 블록과 함께 전송된 논리적 블록 어드레스를 데이터가 저장되는 실제 물리적 위치에 매핑한다. 이러한 매핑이 인덱스에 저장된다. 전형적으로, 논리적 블록 대행의 경우에, 저장 디바이스(106)/솔리드 스테이트 저장 디바이스(206)를 블록 저장 디바이스로 사용하고자 하는 의도로, 서버(108), 클라이언트(110) 또는 다른 디바이스에 있는 드라이버(118)에는 블록 디바이스 API(application program interface)가 제공된다.
다른 실시예에서, 마스터 컨트롤러(224)는 데이터 및 명령의 집합의 적시(JIT; just-in-time) RDMA 전송을 제공할 수 있도록 NIC 컨트롤러(224) 및 임베디드 RDMA 컨트롤러(246)와 조정이 이루어진다. NIC 컨트롤러(224)는 주문형 드라이버(custom driver)의 사용이 가능하도록 불투명 포트(non-transparent port)의 뒤에 숨겨질 수 있다. 또한, 클라이언트(110) 상의 드라이버는, 표준 스택 API를 사용하고 NIC(244)와 연계되어 동작하는 I/O 메모리 드라이버를 통해 컴퓨터 네트워크(118)에 액세스할 수 있다.
일 실시예에서, 마스터 컨트롤러(224)는 또한 RAID 컨트롤러이다. 데이터 저장 디바이스/솔리드 스테이트 저장 디바이스(206)가 하나 이상의 데이터 저장 디바이스(106)/솔리드 스테이트 저장 디바이스(206)와 네트워크화되는 경우, 마스터 컨트롤러(224)는 단일 티어(single tier) RAID, 다중 티어 RAID, 프로그레시브 RAID 등을 위한 RAID 컨트롤러일 수 있다. 마스터 컨트롤러(224)는 또한 일부 오브젝트가 RAID 어레이에 저장될 수 있게 하고 다른 오브젝트는 RAID 없이 저장될 수 있게 한다. 다른 실시예에서, 마스터 컨트롤러(224)는 분산 RAID 컨트롤러 엘리먼트일 수 있다. 다른 실시예에서, 마스터 컨트롤러(224)는 다수의 RAID, 분산 RAID, 및 다른 곳에 기재된 기타의 기능을 포함할 수 있다.
일 실시예에서, 마스터 컨트롤러(224)는 라우팅(routing)을 설정하고, 대역폭 활용, 장애극복(failover) 등의 균형을 잡을 수 있도록 단일 또는 중복 네트워크 매니저(예를 들면, 스위치)와 조화가 이루어진다. 다른 실시예에서, 마스터 컨트롤러(224)는 {로컬 버스(209)를 통해서} 집적식 주문형 로직(integrated application specific logic) 및 결부된 드라이버 소프트웨어와 조화가 이루어진다. 다른 실시예에서, 마스터 컨트롤러(224)는 부착된 주문형 프로세서(application specific processor: 258) 또는 {외부 시스템 버스(240)를 통해서} 로직 및 결부된 드라이버 소프트웨어와 조화가 이루어진다. 다른 실시예에서, 마스터 컨트롤러(224)는 {컴퓨터 네트워크(118)를 통해서} 원격의 주문형 로직 및 결부된 드라이버 소프트웨어와 조화가 이루어진다. 다른 실시예에서, 마스터 컨트롤러(224)는 로컬 버스(209) 또는 HDD(하드 디스크 드라이브) 저장 컨트롤러에 부착된 외부 버스와 조화가 이루어진다. 컨트롤러(202)는 저장 컨트롤러(254)가 클라이언트에게 보이지 않게 할 수 있다.
일 실시예에서, 마스터 컨트롤러(224)는 하나 이상의 저장 컨트롤러(254)와 통신을 행하며, 저장 디바이스(106)/솔리드 스테이트 저장 디바이스(206)는 SCSI 버스, iSCSI(인터넷 SCSI), 파이버 채널 등을 통해 접속된 저장 디바이스로 보일 수 있다. 저장 디바이스(106)/솔리드 스테이트 저장 디바이스(206)는 오브젝트, 파일 및 다른 데이터 단위를 자율적으로 관리할 수 있는 한편, 오브젝트 파일 시스템, 분산 오브젝트 파일 시스템, 파일 시스템 등으로 보일 수 있다. 마스터 컨트롤러(224)는 피어 컨트롤러(256) 및/또는 주문형 프로세서(258)에 의해서도 또한 액세스될 수 있다.
다른 실시예에서, 마스터 컨트롤러(224)는 규칙적으로 FPGA 코드 및/또는 컨트롤러 소프트웨어를 검증하고, 구동중(리셋시) FPGA 코드를 검증하고 및/또는 파워 온(리셋)시에 컨트롤러 소프트웨어를 검증하고, 외부 리셋 요청을 지원하며, 와치도그(watchdog) 타임아웃에 따른 리셋 요청을 지원하고, 전압, 전류, 전력, 온도 및 다른 임계치 인터럽트(threshold interrupt)의 환경 측정 및 설정을 지원하도록 자율적인 집적식 관리 컨트롤러와 조화를 이룬다. 다른 실시예에서, 마스터 컨트롤러(224)는 재사용을 위한 삭제 블록을 해제하기 위해 가비지 컬렉션을 관리한다. 다른 실시예에서, 마스터 컨트롤러(224)는 마모도(wear leveling), 저장 셀의 리프레쉬 등을 관리한다.
다른 실시예에서, 마스터 컨트롤러(224)는 데이터 저장 디바이스/솔리드 스테이트 저장 디바이스(206)가 다수의 가상 디바이스로 구획될 수 있게 하고, 파티션에 기반한 매체 암호화(media encryption)를 가능케 한다. 또 다른 실시예에서, 마스터 컨트롤러(224)는 어드밴스드 멀티 비트(multi-bit) ECC 정정 기능을 갖는 솔리드 스테이트 저장 컨트롤러(204)를 지원한다. 당업자는 저장 컨트롤러(104)에서, 또는 보다 구체적으로는 솔리드 스테이트 저장 디바이스(206)에서의 마스터 컨트롤러(224)의 다른 특징 및 기능을 인지할 수 있을 것이다.
일 실시예에서, 솔리드 스테이트 저장 디바이스 컨트롤러(202)는 동적 랜덤 메모리 어레이(230) 및/또는 정적 랜덤 메모리 어레이(232)를 제어하는 메모리 컨트롤러(228)를 포함한다. 위에서 언급한 바와 같이, 메모리 컨트롤러(228)는 독립적일 수 있고 또는 마스터 컨트롤러(224)에 통합될 수도 있다. 메모리 컨트롤러(228)는 전형적으로 DRAM{동적 랜덤 메모리 어레이(230)} 및 SRAM{정적 랜덤 메모리 어레이(232)}와 같은 소정 유형의 비휘발성 메모리를 제어한다. 다른 실시예에서, 메모리 컨트롤러(228)는 EEPROM(electrically erasable programmable read only memory) 등과 같은 유형의 다른 메모리도 또한 제어한다. 다른 실시예에서, 메모리 컨트롤러(228)는 2개 이상의 메모리 유형을 제어하고 메모리 컨트롤러(228)는 2개 이상의 컨트롤러를 포함할 수 있다. 전형적으로, 메모리 컨트롤러(228)는 가능한 한 최대로 SRAM(232)을 제어하고 SRAM(232)을 보완하기 위해 DRAM(230)에 의해 제어한다.
일 실시예에서, 인덱스는 메모리(230, 232)에 저장되며, 그리고 나서 규칙적으로 솔리드 스테이트 저장부(207n) 또는 다른 비휘발성 메모리의 채널로 이관된다. 당업자는 메모리 컨트롤러(228), 동적 메모리 어레이(230), 및 정적 메모리 어레이(232)의 다른 용도 및 구성도 인지할 수 있을 것이다.
일 실시예에서, 솔리스 스테이트 저장 디바이스 컨트롤러(202)는, 저장 디바이스/솔리드 스테이트 저장 디바이스(206)와 하나 이상의 외부 메모리 컨트롤러(250) 및 결부된 외부 메모리 어레이(252)와 CPU(248) 사이의 DMA 동작을 제어하는 DMA 컨트롤러(226)를 포함한다. 외부 메모리 컨트롤러(250)와 외부 메모리 어레이(252)는 저장 디바이스/솔리드 스테이트 저장 디바이스(206)의 외부에 있기 때문에 외부라고 지칭됨을 주의할 필요가 있다. DMA 컨트롤러(226)는 NIC(244) 및 결부된 RDMA 컨트롤러(246)를 통해서 요청 디바이스에 의해 RDMA 동작을 또한 제어할 수 있다. DMA와 RDMA는 아래에 보다 구체적으로 설명된다.
일 실시예에서, 솔리드 스테이트 저장 디바이스 컨트롤러(202)는 관리 버스(236)에 접속된 관리 컨트롤러(234)를 포함한다. 전형적으로 관리 컨트롤러(234)는 저장 디바이스/솔리드 스테이트 저장 디바이스(206)의 환경적 규준 및 상태를 관리한다. 관리 컨트롤러(234)는 관리 버스(236)를 통해서 디바이스의 온도, 팬 속도, 전원 설정, 등을 감시할 수 있다. 관리 컨트롤러는 FPGA 코드 및 컨트롤러 소프트웨어의 저장을 위해 EEPROM의 판독 및 프로그래밍을 지원할 수 있다.
전형적으로 관리 버스(236)는 저장 디바이스/솔리드 스테이트 저장 디바이스(206) 내의 다양한 구성요소에 접속된다. 관리 컨트롤러(234)는 로컬 버스(209)를 통해서 경보(alert), 인터럽트(interrupt) 등을 전송할 수 있거나 또는 시스템 버스(240) 또는 다른 버스와의 개별 접속을 포함할 수 있다. 일 실시예에서, 관리 버스(236)는 I2C(Inter-Integrated Circuit) 버스이다. 당업자는 관리 버스(236)에 의해 저장 디바이스/솔리드 스테이트 저장 디바이스(206)의 구성요소에 접속된 관리 컨트롤러(234)의 기타 관련 기능 및 용도를 인지할 수 있을 것이다.
일 실시예에서, 솔리드 스테이트 저장 디바이스 컨트롤러(202)는 특정 적용의 경우에 주문제작될 수 있는 기타 로직(242)을 포함한다. 전형적으로 솔리드 스테이트 디바이스 컨트롤러(202) 또는 마스터 컨트롤러(224)가 FPGA 또는 다른 구성가능 컨트롤러로 구성되는 경우에, 특정 적용, 고객 요구조건, 저장 요구조건 등에 기초하여 커스톰 로직이 포함될 수 있다.
데이터 파이프라인
도 3은 본 발명에 따른 솔리드 스테이트 저장 디바이스(206)에 데이터 기록 파이프라인(301)과 데이터 판독 파이프라인(303)을 구비한 솔리드 스테이트 저장 컨트롤러(204)의 일 실시예(300)를 예시하는 개략적인 블록도이다. 본 실시예(300)는 도 2의 솔리드 스테이트 저장 디바이스 컨트롤러(202)와 관련하여 설명된 것과 상당히 유사한, 데이터 버스(205), 로컬 버스(209), 및 버퍼 컨트롤러(208)를 포함한다. 데이터 기록 파이프라인은 패킷화 장치(packetizer: 302)와 ECC(error-correcting code) 생성기(304)를 포함한다. 다른 실시예에서, 데이터 기록 파이프라인은 입력 버퍼(306), 기록 동기화 버퍼(308), 프로그램 기록 모듈(310), 압축 모듈(312), 암호화 모듈(314), 가비지 컬렉터 바이패스(316)(일부는 데이터 판독 파이프라인 내에 있음), 매체 암호화 모듈(318), 및 기록 버퍼(320)를 포함한다.
데이터 판독 파이프라인(303)은 판독 동기화 버퍼(328), ECC 정정 모듈(322), 역패킷화 장치(depacketizer: 324), 정렬 모듈(326), 및 출력 버퍼(330)를 포함한다. 다른 실시예에서, 데이터 판독 파이프라인(303)은 매체 암호 해독(decryption) 모듈(332), 가비지 컬렉터 바이패스(316)의 일부, 암호 해독 모듈(334), 압축해제 모듈(336), 및 프로그램 판독 모듈(338)을 포함할 수 있다. 솔리드 스테이트 저장 컨트롤러(204)는 제어 및 상태 레지스터(340) 및 컨트롤 큐(control queue: 342), 뱅크 인터리브(bank inerleave) 컨트롤러(344), 동기화 버퍼(346), 저장 버스 컨트롤러(348), 및 멀티플렉서(MUX: 350)를 또한 포함할 수 있다. 솔리드 스테이트 컨트롤러(204)의 구성요소 및 결부된 데이터 기록 파이프라인(301)과 데이터 판독 파이프라인(303)은 아래에 설명된다. 다른 실시예에서는, 동기화된 솔리드 스테이트 저장부(207)가 사용될 수 있고, 동기화 버퍼(308, 328)가 제거될 수 있다.
데이터 기록 파이프라인
데이터 기록 파이프라인(301)은, 직접 또는 다른 데이터 기록 파이프라인(301) 단계를 통해서 간접적으로 솔리드 스테이트 저장부에 기록될 데이터 또는 메타데이터 세그먼트를 수신하여 솔리드 스테이트 저장부(207)에 적합한 크기의 하나 이상의 패킷을 생성하는 패킷화 장치(302)를 포함한다. 데이터 또는 메타데이터 세그먼트는 전형적으로 오브젝트, 파일, 아이노드, 또는 다른 데이터 단위의 일부일 수 있으나, 오브젝트, 파일, 아이노드 등의 전체를 포함할 수도 있다. 다른 실시예에서, 데이터 세그먼트는 데이터의 논리적 블록의 일부일 수 있으나, 논리적 블록 전체를 포함할 수도 있다. 전형적으로, 데이터 단위 또는 데이터 단위의 일부는 서버(108), 클라이언트(110), 또는 다른 컴퓨터 또는 디바이스로부터 수신되어, 솔리드 스테이트 저장 디바이스(206) 또는 서버(108)로 스트리밍되는 데이터 세그먼트로 솔리드 스테이트 저장 디바이스(206)에 전송된다. 데이터 세그먼트는 고정 길이 또는 가변 길이를 가질 수 있고 데이터 파슬(data parcel)과 같은 다른 이름으로도 알려져 있으나, 본 명세서에서 언급되는 바와 같이 파일, 오브젝트, 논리적 블록 등과 같은 데이터 단위의 일부 또는 전체를 포함한다.
각 데이터 단위는 하나 이상의 패킷으로 저장된다. 각 데이터 단위는 하나 이상의 컨테이너 패킷(container packer)을 가질 수 있다. 각 패킷은 헤더(heaer)를 포함한다. 헤더는 헤드 타입 필드(header type field)를 포함할 수 있다. 타입 필드는 데이터, 오브젝트 특성과 같은 특성, 메타데이터, 데이터 세그먼트 디리미터(delimiter)(멀티-패킷), 오브젝트 또는 다른 구조, 링크 등을 포함할 수 있다. 헤더는 패킷에 포함된 데이터의 바이트 수와 같은 패킷 사이즈와 관련된 정보를 또한 포함할 수 있다. 패킷의 길이는 패킷 타입에 의해 설정될 수 있다. 헤더는 논리 식별자와 같이 데이터 단위에 대한 패킷의 관계를 설정하는 정보를 포함할 수 있다. 일례로는 데이터 단위 내에서의 데이터 세그먼트의 위치를 식별하기 위한 데이터 패킷 헤더에서의 오프셋(offset)의 사용 및 논리적 블록 어드레스를 들 수 있다. 당업자는 패킷화 장치(302)에 의해 데이터에 추가된 헤더에 포함될 수 있는 다른 정보 및 데이터 패킷에 추가될 수 있는 다른 정보도 인지할 수 있을 것이다.
각 패킷은 헤더 및 가능하게는 데이터 또는 메타데이터 세그먼트로부터의 데이터를 포함한다. 각 패킷의 헤더는 패킷을 이 패킷이 속하는 데이터 단위에 연관시키는 관련 정보를 포함한다. 예를 들면, 헤더는 데이터 세그먼트, 오브젝트, 논리적 블록, 또는 데이터 패킷이 형성된 다른 데이터 단위를 나타내는 오브젝트 식별자 및 오프셋을 포함할 수 있다. 헤더는 패킷을 저장하기 위해 저장 버스 컨트롤러(348)에 의해 사용되는 논리적 식별자도 또한 포함할 수 있다. 헤더는 패킷에 포함된 바이트의 수와 같은 패킷의 사이즈에 관한 정보도 또한 포함할 수 있다. 헤더는 데이터 세그먼트 또는 데이터 단위를 재구성할 때 데이터 단위 내의 다른 패킷과 관련하여 데이터 세그먼트가 어디에 속하는지를 식별하는 시퀀스 번호(일련번호)도 또한 포함할 수 있다. 헤더는 헤더 타입 필드를 포함할 수 있다. 타입 필드는 데이터, 오브젝트 특성, 메타데이터, 데이터 세그먼트 디리미터(멀티 패킷), 오브젝트 구조, 오브젝트 링크 등을 포함할 수 있다. 당업자는 패킷화 장치(302)에 의해 데이터 또는 메타데이터에 추가된 헤더에 포함될 수 있는 다른 정보 및 패킷에 추가될 수 있는 다른 정보도 인지할 수 있을 것이다.
데이터 기록 파이프라인(301)은 패킷화 장치(302)로부터 수신된 하나 이상의 패킷을 위한 하나 이상의 ECC(error-correcting code: 에러 정정 코드)를 생성하는 ECC 생성기(304)를 포함한다. ECC 생성기(304)는 전형적으로 데이터 패킷과 함께 저장된 ECC를 생성하기 위해 에러 정정 알고리즘(error correcging algorithm)을 이용한다. 패킷과 함께 저장된 ECC는 전송 및 저장을 통해서 데이터에 도입된 에러를 탐지 및 정정하는데 전형적으로 사용된다. 일 실시예에서는, 패킷은 길이 N의 인코딩되지 않은 블록(ECC 블록)으로서 ECC 생성기(304)에 스트리밍된다. ECC 블록은 전형적으로 여러 개의 패킷을 가지나, 단일 패킷일 수도 있다. 하나의 패킷이 복수 개의 ECC 블록에 걸쳐 있을 수 있다. ECC 블록은 전형적으로 하나의 논리적 페이지보다 작으나, 다른 실시예에서는 단일 논리적 페이지보다 더 클 수 있다. ECC 블록, 패킷, 논리적 페이지, 논리적 삭제 블록 등은 정렬될 수도 있고, 정렬되지 않을 수도 있다.
길이 S의 신드롬(syndrome)이 ECC 블록에 대해 계산되고, 첨부되어서는 길이 S+N의 인코딩된 ECC 청크(chunk)로 출력된다. 바람직한 실시예에서, 신드롬(S)은 하나 이상의 ECC 블록이 하나의 논리적 페이지에 저장되도록 복수의 물리적 페이지에 걸쳐 있는 ECC 블록을 위한 것이다. N과 S의 값은 특정 성능, 효율 및 강인성 규준(robustness metrics)을 달성하도록 선택되는 알코리즘의 특성에 의존한다. 바람직한 실시예에서는, ECC 블록과 패킷 사이에 고정된 관계가 없고; 패킷은 2개 이상의 ECC 블록을 포함할 수 있으며; ECC 블록은 2개 이상의 패킷을 포함할 수 있고; 첫 번째 패킷은 ECC 블록 내에서 임의의 위치에서 종료될 수 있으며 두 번째 패킷은 동일 ECC 블록 내에서 첫 번째 패킷의 말단부 뒤에서 시작될 수 있다. 바람직한 실시예에서, ECC 알고리즘은 동적으로 수정되지 않는다. 바람직한 실시예에서, 데이터 패킷과 함께 저장된 ECC는 2 비트 이상의 에러를 정정하기에 충분할 만큼 강인하다.
바람직하게는, 강인한 ECC 알고리즘을 사용함으로써 단일 비트 이상의 정정을 가능케 하고, 또는 더블 비트(double bit)의 정정은 솔리드 스테이트 저장부(207)의 수명을 연장할 수 있게 한다. 예를 들어, 플래쉬 메모리가 솔리드 스테이트 저장부(207)에서 저장매체로 사용되면, 플래쉬 메모리는 삭제 사이클당 에러(error per erase cycle) 없이 약 100,000회 기록될 수 있다. 이러한 사용 한도는 강인한 ECC 알고리즘을 사용하여 연장될 수 있다. 솔리드 스테이트 저장 디바이스(206)에 ECC 생성기(304) 및 대응하는 ECC 정정 모듈(322)를 내장함으로써, 솔리드 스테이트 저장 디바이스(206)는 내부적으로 에러를 정정할 수 있으며, 단일 비트 정정(single bit correction)과 같은 덜 강인한 ECC 알고리즘이 사용되는 경우보다 더 긴 사용 수명을 갖는다. 저장 디바이스(106)에서의 마모를 저감시키기 위해 저장 엘리먼트에 걸쳐서 분산된 ECC 청크를 사용하는 예는 2009년 5월 18일 출원된 조나단 대처(Jonathan Thatcher) 외의 "중복 저장 시스템에서 데이터의 무결성을 증대시키는 장치, 시스템, 및 방법(Apparatus, System, and Method to Increase Data Integrity in a Redundant Storage System)"이라는 명칭의 미국 특허출원 제 12/468,041호 및 2009년 5월 18일 출원된 조나단 대처 외의 "더 적은 개수의 저장 엘리먼트로 동작하도록 어레이를 재구성하는 장치, 시스템, 및 방법(Apparatus, System, and Method for Reconfiguring an Array to Operate with Less Storage Elements)"이라는 명칭의 미국 특허출원 제 12/468,040호에 보다 상세히 기재되어 있다. 상기 특허출원은 에러를 효과적으로 검출하고 저장 엘리먼트에 에러가 있는 것으로 확인된 경우 어레이를 재구성하기 위해 ECC 보호 및 패리티 정보(ECC protectin and parity information)를 사용하는 것을 기재하고 있다.
하지만, 다른 실시예에서는 ECC 생성기(304)가 덜 강인한 알고리즘을 사용할 수도 있고 단일 비트 또는 디비트 에러를 정정할 수도 있다. 다른 실시예에서, 솔리드 스테이트 저장 디바이스(206)는 용량을 증대시키기 위해 MLC(multi-level cell) 플래쉬와 같이 덜 신뢰적인 저장부를 포함할 수 있으며, 이 저장부는 더 강인한 ECC 알고리즘 없이는 충분히 신뢰적이지 않을 수 있다.
일 실시예에서, 데이터 기록 파이프라인(301)은, 솔리드 스테이트 저장부(207)에 기록될 데이터 세그먼트를 수신하고 데이터 기록 파이프라인(301)의 다음 단계가 될 때까지, 예컨대 패킷화 장치(302){또는 보다 복잡한 데이터 기록 파이프라인(301)을 위한 다른 단계}가 후속 데이터 세그먼트를 처리할 준비가 될 때까지 들어오는 데이터 세그먼트를 저장하는 입력 버퍼(306)를 포함한다. 입력 버퍼(306)는 적절한 크기의 데이터 버퍼를 이용하여 전형적으로 데이터 세그먼트가 수신되는 양과 데이터 기록 파이프라인(301)에 의해 처리되는 양 사이에 차이가 존재할 수 있게 한다. 입력 버퍼(306)는 또한 데이터 버스(205)의 동작 효율을 향상시킬 수 있도록 데이터 기록 파이프라인(301)에 의해 유지될 수 있는 양보다 더 많은 양으로 데이터 버스(205)가 데이터 기록 파이프라인(301)에 데이터를 전송할 수 있게 한다. 전형적으로, 데이터 기록 파이프라인(301)이 입력 버퍼(306)를 포함하지 않을 때, 버퍼링 기능은 NIC(network interface card) 내에서 또는 예를 들면 RDMA(remote direct memory access)를 사용할 때와 같이 다른 디바이스에서와 같이, 데이터 기록 파이프라인(301)의 외부이지만 서버(108) 내의 솔리드 스테이트 저장 디바이스(206)에서와 같이 다른 곳에서 행해진다.
데이터는 하나 이상의 클라이언트(110) 또는 파일 서버(114)/파일 시스템으로부터 입력 버퍼(306)로 스트리밍될 수 있다. 전형적으로 데이터는 클라이언트(110) 및/또는 파일 서버(114)/파일 시스템으로부터의 도착 순서대로 입력 버퍼(306)에 입력된다. 그리고 나서 데이터는 클라이언트(110) 또는 파일 서버(114)/파일 시스템에 의해 분리된 방식이 아니라 도착 순서대로 순차 저장될 수 있다. 순차 저장 디바이스에서, 데이터의 출처를 추적하는데 인덱스와 메타데이터가 사용될 수 있기 때문에 다양한 출처로부터의 데이터는 개재(介在)되어 배치될 수 있다.
다른 실시예에서, 데이터 기록 파이프라인(301)은 패킷을 솔리드 스테이트 저장부(207)에 기록하기 전에 ECC 생성기(304)로부터 수신된 패킷을 버퍼링하는 기록 동기화 버퍼(308)를 또한 포함한다. 기록 동기화 버퍼(308)는 로컬 클럭 도메인(local clock domain)과 솔리드 스테이트 저장부 클럭 도메인 사이의 경계에 위치되어 클럭 도메인 차를 해소하는 버퍼링을 제공한다. 다른 실시예에서는, 동기화된 솔리드 스테이트 저장부(207)가 사용될 수 있으며, 동기화 버퍼(308, 328)는 제거될 수 있다.
일 실시예에서, 데이터 기록 파이프라인(301)은, 직접 또는 간접적으로 패킷화 장치(302)로부터 하나 이상의 패킷을 수신하고 패킷을 ECC 생성기(304)에 전송하기 전에 솔리드 스테이트 저장 디바이스(206)에 고유한 암호화 키를 사용하여 하나 이상의 패킷을 암호화하는 매체 암호화 모듈(318)을 또한 포함한다. 전형적으로는, 전체 패킷이 암호화되고, 헤더를 포함하게 된다. 다른 실시예에서, 헤더는 암호화되지 않는다. 본 명세서에서, 암호화 키는 솔리드 스테이트 저장부(207)를 포함하고 암호화 보호를 요하는 실시예의 외부에서 관리되는 비밀 암호화 키를 의미하는 것으로 이해되어야 한다.
매체 암호화 모듈(318) 및 대응하는 매체 암호 해독 모듈(332)은 솔리드 스테이트 저장부(207)에 저장된 데이터에 대한 소정 레벨의 보안을 제공한다. 예를 들면, 데이터가 매체 암호화 모듈(318)에 의해 암호화되는 경우, 솔리드 스테이트 저장부(207)가 다른 솔리드 스테이트 저장 컨트롤러(318), 솔리드 스테이트 저장 디바이스(206), 또는 서버(108)에 접속되면, 상당한 노력 없이는 데이터를 솔리드 스테이트 저장부(207)에 기록하는 동안에 사용된 동일한 암호화 키를 사용하지 않고는 솔리드 스테이트 저장부(207)의 콘텐트(내용물)는 전형적으로 판독될 수 없다.
전형적인 실시예에서, 솔리드 스테이트 저장 디바이스(206)는 비휘발성 저장부에 암호화 키를 저장하지 않으며, 암호화 키에 대한 외부 액세스도 허용하지 않는다. 암호화 키는 초기화시에 솔리드 스테이트 저장 컨트롤러(204)에 제공된다. 솔리드 스테이트 저장 디바이스(206)는 암호화 키와 연계되어 사용되는 비기밀성 암호화 논스(non-secret cryptographic nonce)를 사용하고 저장할 수 있다. 상이한 논스가 각 패킷과 함께 저장될 수 있다. 암호화 알고리즘에 의한 보호를 증진시키기 위한 목적으로 데이터 세그먼트는 고유한 논스를 갖는 복수의 패킷으로 분할될 수 있다.
솔리드 스테이트 저장 컨트롤러(204)에 의해 사용될 수 있도록 암호화 키를 관리하는 클라이언트(110), 서버(108), 키 매니저, 또는 다른 디바이스로부터 암호화 키가 수신될 수 있다. 다른 실시예에서, 솔리드 스테이트 저장부(207)는 2개 이상의 파티션을 가질 수 있고, 솔리트 스테이트 컨트롤러(204)는 자신이 마치 2개 이상의 솔리드 스테이트 저장 컨트롤러(204)인 것처럼 거동할 수 있으며, 각 컨트롤러는 솔리드 스테이트 저장부(207) 내의 단일 파티션에서 동작한다. 본 실시예에서는, 고유한 매체 암호화 키가 각 파티션에 사용될 수 있다.
다른 실시예에서, 데이터 기록 파이프라인(301)은 데이터 세그먼트를 패킷화 장치(302)에 전송하기 전에 직접 또는 간접적으로 입력 버퍼(306)로부터 수신된 데이터 또는 메타데이터 세그먼트를 암호화하는 암호화 모듈(314)을 또한 포함하고, 데이터 세그먼트는 데이터 세그먼트와 연계되어 수신된 암호화 키를 이용하여 암호화된다. 데이터를 암호화하기 위해 암호화 모듈(318)에 의해 사용되는 암호화 키는 솔리드 스테이트 저장 디바이스(206) 내에 저장된 모든 데이터에 공통적이지 않고 데이터 단위마다 다를 수 있으며 아래에 설명되는 바와 같이 수신되는 데이터 세그먼트와 연계되어 수신된다는 점에서 암호화 모듈(314)은 매체 암호화 모듈(318)과 다르다.
예를 들면, 암호화 모듈(318)에 의해 암호화되는 데이터 세그먼트에 대한 암호화 키는 데이터 세그먼트와 함께 수신되거나 또는 데이터 세그먼트가 속하는 데이터 단위를 기록하는 명령의 일부로서 수신될 수 있다. 솔리드 스테이트 저장 디바이스(206)는 암호화 키와 연계되어 사용되는 비기밀성 암호화 논스를 사용하고 각 데이터 패킷에 저장할 수 있다. 상이한 논스가 각 패킷과 함께 저장될 수 있다. 암호화 알고리즘에 의한 보호를 증진시키기 위한 목적으로 데이터 세그먼트는 고유한 논스를 갖는 복수의 패킷으로 분할될 수 있다. 일 실시예에서, 매체 암호화 모듈(318)에 의해 사용되는 논스는 암호화 모듈(314)에 의해 사용되는 것과 동일하다.
데이터 세그먼트를 암호화하는데 사용되는 암호화 키를 보유하는 클라이언트(110), 서버(108), 키 매니저, 또는 다른 디바이스로부터 암호화 키가 수신될 수 있다. 일 실시예에서, 암호화 키는 솔리드 스테이트 저장 디바이스(206), 서버(108), 클라이언트(110), 또는 개인 및 공용 키를 안전하게 전송 및 보호할 수 있는 업계 표준 방식을 실행할 수 있는 능력을 가진 다른 외부 기기 중 어느 하나로부터 솔리드 스테이트 저장 컨트롤러(204)에 전송된다.
일 실시예에서, 암호화 모듈(318)은 첫 번째 패킷을 이 패킷과 연계되어 수신된 첫 번째 암호화 키로 암호화하고, 두 번째 패킷을 이 두 번째 패킷과 연계되어 수신된 두 번째 암호화 키로 암호화한다. 다른 실시예에서는, 암호화 모듈(318)이 첫 번째 패킷을 이 패킷과 연계되어 수신된 첫 번째 암호화 키로 암호화하고 두 번째 데이터 패킷은 암호화 없이 다음 단계로 넘긴다. 바람직하게는, 솔리드 스테이트 저장 디바이스(206)의 데이터 기록 파이프라인(301)에 포함된 암호화 모듈(318)은 단일 파일 서버(114)/파일 시스템 또는 다른 외부 시스템이 해당 데이터 단위 또는 데이터 세그먼트를 저장하는데 사용되는 다른 암호화 키들을 지속적으로 추적할 필요없이 데이터 단위로 또는 세그먼트 단위로 데이터의 암호화를 가능케 한다. 각 요청 디바이스(155) 또는 관련 키 매니저는 요청 디바이스(155)에 의해 전송된 데이터 단위 또는 데이터 세그먼트만을 암호화하는데 사용되는 암호화 키를 독립적으로 관리한다.
다른 실시예에서, 데이터 기록 파이프라인(301)은 데이터 세그먼트를 패킷화 장치(302)에 전송하기 전에 메타데이터 세그먼트에 대한 데이터를 압축하는 압축 모듈(312)을 포함한다. 압축 모듈(312)은 전형적으로 세그먼트의 저장 사이즈를 줄이기 위해 당업자에게 알려진 압축 루틴(compression routine)을 이용하여 데이터 또는 메타데이터를 압축한다. 예를 들면, 데이터 세그먼트가 512개의 0(zero)의 스트링을 포함하면, 압축 모듈(312)은 512개의 0을 이 512개의 0을 나타내는 코드 또는 토큰으로 대체할 수 있으며, 이 코드는 512개의 0이 차지하는 공간보다 훨씬 작다.
일 실시예에서, 압축 모듈(312)은 첫 번째 세그먼트를 첫 번째 압축 루틴으로 압축하고 두 번째 세그먼트를 압축 없이 전달한다. 다른 실시예에서는, 압축 모듈(312)이 첫 번째 세그먼트를 첫 번째 압축 루틴으로 압축하고, 두 번째 세그먼트를 두 번째 압축 루틴으로 압축한다. 솔리드 스테이트 저장 디바이스(206) 내에 이러한 유연성을 갖는 것은 솔리드 스테이트 저장 디바이스(206)에 데이터를 기록하는 클라이언트(110) 또는 다른 디바이스가 각각 압축 루틴을 특정할 수 있고 또는 어느 하나는 압축 루틴을 특정하고 다른 하나는 압축을 특정하지 않을 수 있어서 유익하다. 데이터 단위의 유형 또는 데이터 단위의 등급에 기반한 디폴트 설정(default setting)에 따라 압축 루틴의 선택이 또한 이루어질 수 있다. 예를 들면, 특정 데이터 단위의 첫 번째 데이터 단위는 디폴트 압축 루틴 설정을 오버라이드(override)할 수 있고, 동일 데이터 단위 등급 및 데이터 단위 유형의 두 번째 데이터 단위는 디폴트 압축 루틴을 이용할 수 있으며, 동일 데이터 단위 등급 및 데이터 단위 유형의 세 번째 데이터 단위는 압축을 행하지 않을 수 있다.
일 실시예에서, 데이터 기록 파이프라인(301)은 가비지 컬렉션 시스템에 데이터 바이패스의 일부로서 데이터 판독 파이프라인(303)으로부터의 데이터 세그먼트를 수신하는 가비지 컬렉터 바이패스(316)를 포함한다. 가비지 컬렉션 시스템은 특히 패킷이 삭제를 위해 표시되거나 또는 수정되면 수정된 데이터는 다른 위치에 저장되기 때문에 더 이상 유효하지 않은 패킷에 전형적으로 표시를 한다. 어느 시점에, 가비지 컬렉션 시스템은 논리적 삭제 블록과 같이 저장부의 특정 섹션이 복구될 것인지를 결정한다. 이러한 결정은 가용 저장 용량의 부족, 유효하지 않은 것으로 표시된 데이터의 비율이 한계치에 이름, 유효한 데이터의 통합, 저장부의 그 섹션의 에러 검출 비율이 한계치에 이름, 데이터 분산에 기반한 성능의 향상 등에 기인한다. 저장부의 섹션이 언제 복구될 지를 결정함에 있어서 다양한 요인들이 가비지 컬렉션 알고리즘에 의해 고려된다.
저장부의 섹션의 복구 대상으로 표시되면, 그 섹션에 있는 유효한 패킷은 전형적으로 재배치되어야 한다. 가비지 컬렉터 바이패스(316)는 패킷이 데이터 판독 파이프라인(303)에 판독되도록 하며 그리고 나서 솔리드 스테이트 저장 컨트롤러(204)로부터 경로를 재설정함이 없이 곧바로 데이터 기록 파이프라인(301)에 전송될 수 있게 한다. 바람직한 실시예에서, 가비지 컬렉터 바이패스(316)는 솔리드 스테이트 저장 디바이스(206) 내에서 동작하는 자율적인 가비지 컬렉터 시스템의 일부이다. 이는 성능 및 데이터 신뢰성을 향상시키고, 솔리드 스테이트 저장부(207)의 어느 한 위치 또는 영역의 과용(overuse) 또는 저사용(underuse)을 회피하고, 솔리드 스테이트 저장부(207)의 사용 수명을 연장할 수 있게 데이터가 솔리드 스테이트 저장부(207) 전체에 걸쳐서 체계적으로 분산되도록 솔리드 스테이트 저장 디바이스(206)가 데이터를 관리하는 것을 가능케 한다.
가비지 컬렉터 바이패스(316)는 데이터 기록 파이프라인(301)에의 세그먼트의 삽입을 조정하며, 다른 세그먼트는 하나 이상의 클라이언트(110) 또는 다른 디바이스에 의해 기록된다. 예시된 실시예에서, 가비지 컬렉터 바이패스(316)는 데이터 기록 파이프라인(301)에서는 패킷화 장치(302)의 앞에 있고 데이터 판독 파이프라인(303)에서는 패킷화 장치(324)의 뒤에 있으나, 데이터 판독 및 기록 파이프라인(303, 301)에서 다른 곳에 배치될 수도 있다. 솔리드 스테이트 저장부(207) 내에서의 저장 효율을 향상시키고 그에 따라 가비지 컬렉션 회수를 저감시키기 위해 논리적 페이지의 잔여분을 채우기 위한 데이터 기록 파이프라인(301)의 플러시(flush) 동안에 가비지 컬렉터 바이패스(316)가 사용될 수 있다.
일 실시예에서, 데이터 기록 파이프라인(301)은 효율적인 기록 작업을 위해 데이터를 버퍼링하는 기록 버퍼(320)를 포함한다. 전형적으로, 기록 버퍼(320)는 솔리드 스테이트 저장부(207)의 적어도 하나의 논리적 페이지를 채우기 위한 패킷을 위한 충분한 용량을 포함한다. 이는 기록 작업이 데이터의 하나의 페이지 전체를 중단 없이 솔리드 스테이트 저장부(207)에 전송하는 것을 가능케 한다. 논리적 페이지는 2개 이상의 ECC 청크를 포함할 수 있다. 데이터 기록 파이프라인(301)의 기록 버퍼(320)와 데이터 판독 파이프라인(303) 내의 버퍼의 사이즈를 솔리드 스테이트 저장부(207) 내의 저장부 기록 버퍼와 동일한 용량 또는 더 큰 용량이 되도록 설정함으로써, 복수의 명령 대신에 단일의 기록 명령이 데이터의 하나의 논리적 페이지 전체를 솔리드 스테이트 저장부(207)에 전송할 수 있게 되므로 데이터의 기록 및 판독이 보다 효율적이게 된다. 다른 실시예에서는, 하나의 논리적 페이지 미만의 기록 버퍼(302)의 콘텐츠(내용물)가 솔리드 스테이트 저장부(207)에 기록된다.
기록 버퍼(320)가 채워지는 동안에, 솔리드 스테이트 저장부(207)는 다른 판독 작업에 사용될 수 있다. 이는 데이터가 저장부 기록 버퍼에 기록되고 저장부 기록 버퍼에 흘러들어오는 데이터가 정체될 때 더 작은 기록 버퍼 또는 기록 버퍼를 갖지 않는 다른 솔리드 스테이트 디바이스는 솔리드 스테이트 저장부를 묶여있게 할 수 있기 때문에 이점을 갖는다. 저장부 기록 버퍼 전체가 채워지고 프로그램될 때까지 판독 작업이 차단되게 된다. 기록 버퍼를 갖지 않는 또는 작은 기록 버퍼를 갖는 시스템에 대한 다른 방안은 판독이 가능하도록 하기 위해 완전히 채워지지 않은 저장부 기록 버퍼를 플러시하는 것이다. 다시 말하지만 페이지를 채우기 위해서는 복수의 기록/프로그램 사이클이 요구되기 때문에 이는 비효율적이다.
논리적 페이지보다 더 큰 크기의 기록 버퍼(320)를 갖는 예시된 실시예의 경우에, 다수의 부명령(subcommands)을 포함하는 단일 기록 명령은 그 다음에 각 솔리드 스테이트 저장 엘리먼트(216, 218, 220)의 저장부 기록 버퍼로부터 데이터 페이지를 각 솔리드 스테이트 저장 엘리먼트(216, 218, 220) 내의 지정된 페이지로 전송하는 단일 프로그램 명령이 뒤따를 수 있다. 이러한 기법은 부분적인 페이지 프로그래밍을 없애주는 이점을 갖는데, 이러한 프로그래밍은 데이터 신뢰성 및 내구성을 떨어뜨리고 버퍼가 채워지는 동안에 판독 및 다른 명령을 위한 목적지 뱅크를 넓히는 것으로 알려져 있다.
일 실시예에서, 기록 버퍼(320)는 핑퐁(ping-pong) 버퍼로서, 버퍼의 일측이 채워지고 그리고 나서 적절한 시점에 전송을 위해 지정되면 핑퐁 버퍼의 타측이 채워진다. 다른 실시예에서, 기록 버퍼(320)는 데이터 세그먼트의 논리적 페이지보다 더 큰 용량을 갖는 FIFO(first-in first-out) 레지스터를 포함한다. 당업자는 솔리드 스테이트 저장부(207)에 데이터를 기록하기 전에 데이터의 논리적 페이지가 저장될 수 있게 하는 다른 기록 버퍼(320)의 구성도 인지할 수 있을 것이다.
다른 실시예에서, 한 페이지 미만의 정보가 솔리드 스테이트 저장부(207)의 저장부 기록 버퍼에 기록될 수 있도록 기록 버퍼(320)는 논리적 페이지보다 더 작은 크기를 갖는다. 실시예에서, 데이터 기록 파이프라인(301)에서의 정체가 기록 작업을 방해하는 것을 방지하기 위해, 가비지 컬렉션 과정의 일부로서 하나의 위치로부터 다른 위치로 이동될 필요가 있는 데이터가 가비지 컬렉션 시스템을 이용하여 큐잉(queuing)된다. 데이터 기록 파이프라인(301)에 데이터 정체가 발생하는 경우에, 데이터를 프로그래밍하기 전에 논리적 페이지의 페이지들을 채울 수 있도록 데이터는 가비지 컬렉터 바이패스(316)를 통해 기록 버퍼(320)로 이송되고, 그리고 나서 솔리드 스테이트 저장부(207)에 있는 저장부 기록 버퍼에 이송될 수 있다. 이와 같은 방식으로 데이터 기록 파이프라인(301)에서의 데이터 정체는 솔리드 스테이트 저장 디바이스(206)로부터 판독하는 것을 정체시키지 않는다.
다른 실시예에서, 데이터 기록 파이프라인(301)은 이 데이터 기록 파이프라인(301) 내에 하나 이상의 사용자 정의형(user definable) 기능을 갖는 프로그램 기록 모듈(310)을 포함한다. 프로그램 기록 모듈(310)은 사용자가 데이터 기록 파이프라인(301)을 자체 변경할 수 있게 한다. 사용자는 특정 데이터 요구조건 또는 적용에 기초하여 데이터 기록 파이프라인(301)을 자체 변경할 수 있다. 솔리드 스테이트 저장 컨트롤러(204)가 FPGA인 경우, 사용자는 변경가능 명령(custom command) 및 기능을 이용하여 비교적 쉽게 데이터 기록 파이프라인(301)을 프로그램할 수 있다. 사용자는 ASIC를 갖는 변경가능 기능(custom function)을 포함하도록 프로그램 기록 모듈(310)을 또한 사용할 수 있으나, ASIC를 자체 변경하는(customizing) 것은 FPGA를 구비하는 것보다 어려울 수 있다. 프로그램 기록 모듈(310)은 첫 번째 데이터 세그먼트가 프로그램 기록 모듈(310)에서 실행되는 동안 두 번째 데이터 세그먼트는 데이터 기록 파이프라인(301)을 통하여 진행할 수 있도록 버퍼 및 바이패스 메커니즘을 포함할 수 있다. 다른 실시예에서, 프로그램 기록 모듈(310)은 소프트웨어를 통해서 프로그램될 수 있는 프로세서 코어를 포함할 수 있다.
프로그램 기록 모듈(310)은 입력 버퍼(306)와 압축 모듈(312) 사이에 도시되어 있으나, 프로그램 기록 모듈(310)은 데이터 기록 파이프라인(301) 내의 임의의 위치에 배치될 수 있고 다양한 단계들(302 - 320)에 걸쳐서 분산될 수도 있음을 주의할 필요가 있다. 또한, 독립적으로 프로그램되고 동작할 수 있는 복수의 프로그램 기록 모듈(310)이 다양한 단계들(302 - 320)에 걸쳐서 분산될 수도 있다. 게다가, 단계들(302 - 320)의 순서가 변경될 수도 있다. 당업자는 특정 사용자 요구조건에 따라 단계들(302 - 320)의 순서에 대한 실현 가능한 변경을 인지할 수 있을 것이다.
데이터 판독 파이프라인
데이터 판독 파이프라인(303)은 ECC 블록에 데이터 에러가 존재하는지를 판단하는 ECC 정정 모듈(322)을 포함하며, 요청 패킷의 각 ECC 블록과 함께 저장된 ECC를 사용하여 솔리드 스테이트 저장부(207)로부터 요청 패킷이 수신된다. ECC 정정 모듈(322)은 에러가 존재하고 그 에러가 ECC를 사용하여 정정될 수 있으면 요청 패킷에 있는 에러를 정정하게 된다. 예를 들면, ECC가 6 비트의 에러를 검출할 수 있으나 3 비트의 에러만 정정할 수 있으면, ECC 정정 모듈(322)은 최대 3 비트까지의 에러를 갖는 요청 패킷의 ECC 블록을 정정한다. 요청된 데이터 패킷이 그 패킷이 솔리드 스테이트 저장부(207)에 기록되었을 때 및 그 패킷에 대해 ECC가 생성되었을 때와 동일하게 되도록, ECC 정정 모듈(322)은 에러의 비트를 그 올바른 0 또는 1 상태로 변경함으로써 에러의 비트를 정정한다.
ECC 정정 모듈(322)이 요청 패킷이 ECC가 정정할 수 있는 것보다 더 많은 비트의 에러를 포함하고 있는 것으로 판단하면, ECC 정정 모듈(322)은 요청 패킷의 오류인 ECC 블록에 있는 에러를 정정할 수 없고 인터럽트(interrupt)를 전송한다. 일 실시예에서, ECC 정정 모듈(322)은 요청 패킷이 에러 상태임을 나타내는 메시지를 갖는 인터럽트를 전송한다. 메시지는 ECC 정정 모듈(322)이 에러를 정정할 수 없다는 또는 ECC 정정 모듈(322)이 에러를 정정할 수 없음을 암시하는 정보를 포함할 수 있다. 다른 실시예에서, ECC 정정 모듈(322)은 인터럽트 및/또는 메시지와 함께 요청 패킷의 오류인 ECC 블록을 전송한다.
바람직한 실시예에서는, ECC 정정 모듈(322)에 의해 정정될 수 없는 요청 패킷의 오류인 ECC 블록 또는 오류인 ECC 블록의 일부가 마스터 컨트롤러(224)에 의해 판독되고, 정정되어, 데이터 판독 파이프라인(303)에 의한 추가적인 처리를 위해 ECC 정정 모듈(322)로 돌려 보내진다. 일 실시예에서, 요청 패킷의 오류인 ECC 블록 또는 오류인 ECC 블록의 일부는 데이터를 요청하는 디바이스에 전송된다. 요청 디바이스(155)는 ECC 블록을 정정할 수도 있고 또는 백업 혹은 거울 복사(mirror copy)와 같은 다른 사본을 사용하여 데이터를 교체할 수도 있으며, 그리고 나서 요청된 데이터 패킷의 교체 데이터를 사용하거나 또는 데이터 판독 파이프라인(303)으로 돌려보낼 수 있다. 요청 디바이스(155)는 오류인 요청 패킷을 교체하는데 또는 패킷이 속하는 데이터 단위를 교체하는데 요구되는 데이터를 식별하기 위해 에러인 요청 패킷의 헤더 정보를 사용할 수 있다.
다른 바람직한 실시예에서, 솔리드 스테이트 저장 컨트롤러(204)는 소정 유형의 RAID를 사용하여 데이터를 저장하며 오류인 데이터를 복구할 수 있다. 다른 실시예에서, ECC 정정 모듈(322)은 인터럽트 및/또는 메시지를 전송하고, 수신하는 디바이스는 요청된 데이터 패킷과 결부된 판독 작업을 못하게 된다. 당업자는 ECC 정정 모듈(322)이 요청 패킷의 하나 이상의 ECC 블록이 오류이며 재시도 작업 이후에도 ECC 정정 모듈(322)이 에러를 정정할 수 없다고 판단함에 따라 취해질 수 있는 다른 옵션 및 조치도 인지할 수 있을 것이다.
데이터 판독 파이프라인(303)은 직접 또는 간접적으로 ECC 정정 모듈(322)로부터 요청 패킷의 ECC 블록을 수신하여 하나 이상의 패킷 헤더를 체크하고 제거하는 역패킷화 장치(depacketizer: 324)를 포함한다. 역패킷화 장치(324)는 헤더 내의 패킷 식별자, 데이터 길이, 데이터 위치 등을 체크함으로써 패킷 헤더를 검증할 수 있다. 일 실시예에서, 헤더는 데이터 판독 파이프라인(303)에 전달된 패킷이 요청 패킷임을 검증하는데 사용될 수 있는 해시 코드(hash code)를 포함한다. 역패킷화 장치(324)는 패킷화 장치(302)에 의해 추가된 요청 패킷으로부터의 헤더를 또한 제거할 수 있다. 역패킷화 장치(324)는 어떤 패킷에는 작업을 행하지 않고 수정 없이 앞으로 전달하도록 될 수도 있다. 일례로는 재건 과정 중에 요청되는 컨테이너 레이블(container label)이 있을 수 있는데, 그 헤더 정보는 인덱스를 재건하는데 필요하다. 다른 예로는 솔리드 스테이트 저장 디바이스(206) 내에 사용하기 위한 다양한 유형의 패킷의 전송이 포함된다. 다른 실시예에서, 역패킷화 장치(324)의 동작은 패킷 유형에 의존할 수 있다.
데이터 판독 파이프라인(303)은 역패킷화 장치(324)로부터 데이터를 수신하여 원치않는 데이터를 제거하는 정렬 모듈(326)을 포함한다. 일 실시예에서는, 솔리드 스테이트 저장부(207)에 전송된 판독 명령이 데이터의 패킷을 검색한다. 데이터를 요청하는 디바이스는 검색된 패킷 내의 모든 데이터를 필요로 하지 않을 수 있으며, 정렬 모듈(326)은 원치 않는 데이터를 제거한다. 검색된 페이지 내의 모든 데이터가 요청된 데이터이면, 정렬 모듈(326)은 어떠한 데이터도 제거하지 않는다.
정렬 모듈(326)은 데이터 세그먼트를 다음 단계로 전달하기 전에 데이터 세그먼트를 요청한 디바이스와 양립할 수 있는 형태의 데이터 단위의 데이터 세그먼트로 데이터를 재포맷한다. 전형적으로, 데이터 판독 파이프라인(303)에 의해 데이터가 처리됨에 따라, 데이터 세그먼트 또는 패킷의 사이즈는 다양한 단계에서 변경된다. 정렬 모듈(326)은 요청 디바이스(155)에 전송되어 응답을 형성하도록 결합되는데 적합한 데이터 세그먼트로 데이터를 포맷하는데 수신된 데이터를 사용한다. 예를 들면, 첫 번째 데이터 패킷의 일부로부터의 데이터가 두 번째 데이터 패킷의 일부로부터의 데이터와 결합될 수 있다. 데이터 세그먼트가 요청 디바이스에 의해 요청된 데이터보다 더 크면, 정렬 모듈(326)은 원치않는 데이터를 폐기할 수 있다.
일 실시예에서, 데이터 판독 파이프라인(303)은 이 데이터 판독 파이프라인(303)에 의한 처리 이전에 솔리드 스테이트 저장부(207)로부터 판독된 하나 이상의 요청 패킷을 버퍼링하는 판독 동기화 버퍼(328)를 포함한다. 판독 동기화 버퍼(328)는 솔리드 스테이트 저장부 클럭 도메인과 로컬 버스 클럭 도메인 사이의 경계에 위치하여 클럭 도메인 차이를 해소하기 위한 버퍼링을 제공한다.
다른 실시예에서, 데이터 판독 파이프라인(303)은 정렬 모듈(326)로부터 요청 패킷을 수신하여 요청 디바이스에 전송하기 전에 패킷을 저장하는 출력 버퍼(330)를 포함한다. 출력 버퍼(330)는 데이터 판독 파이프라인(303)의 단계들로부터 데이터 세그먼트가 수신될 때와 솔리드 스테이트 저장 컨트롤러(204)의 다른 부분 또는 요청 디바이스, 클라이언트(110), 서버(114) 등에 데이터 세그먼트가 전송될 때 사이의 차이를 해소한다. 출력 버퍼(330)는 또한 데이터 버스(205)의 동작 효율을 향상시킬 수 있도록 데이터 버스(205)가 데이터 판독 파이프라인(303)에 의해 유지될 수 있는 양보다 더 많은 양으로 데이터 판독 파이프라인(303)으로부터 데이터를 수신할 수 있게 한다.
일 실시예에서, 데이터 판독 파이프라인(303)은, ECC 정정 모듈(322)로부터 하나 이상의 암호화된 요청 패킷을 수신하고 하나 이상의 요청 패킷을 역패킷화 장치(324)에 전송하기 전에 솔리드 스테이트 저장 디바이스(206)에 고유한 암호화 키를 사용하여 하나 이상의 요청 패킷을 암호 해독하는 매체 암호 해독 모듈(332)을 포함한다. 전형적으로, 매체 암호 해독 모듈(332)에 의해 데이터를 암호 해독하는데 사용되는 암호화 키는 매체 암호화 모듈(318)에 의해 사용되는 암호화 키와 동일하다. 다른 실시예에서, 솔리드 스테이트 저장부(207)는 2개 이상의 파티션을 가질 수 있으며, 솔리드 스테이트 저장 컨트롤러(204)는 자신이 마치 2개 이상의 솔리드 스테이트 저장 컨트롤러(204)인 것처럼 거동할 수 있으며, 각 컨트롤러는 솔리드 스테이트 저장부(207) 내의 단일 파티션에서 동작한다. 본 실시예에서는, 각 파티션에 고유한 매체 암호화 키가 사용될 수 있다.
다른 실시예에서, 데이터 판독 파이프라인(303)은 데이터 세그먼트를 출력 버퍼(303)에 전송하기 전에 역패킷화 장치(324)에 의해 포맷된 데이터 세그먼트를 암호 해독하는 암호 해독 모듈(334)을 포함한다. 판독 요청과 연계되어 수신된 암호화 키를 사용하여 암호 해독된 데이터 세그먼트는 판독 동기화 버퍼(328)에 의해 수신된 요청 패킷의 검색을 개시한다. 암호 해독 모듈(334)은 첫 번째 패킷에 대한 판독 요청과 연계되어 수신된 암호화 키를 이용하여 첫 번째 패킷을 암호 해독할 수 있고, 그리고 나서 다른 암호화 키를 이용하여 두 번째 패킷을 암호 해독하거나 또는 암호 해독 없이 두 번째 패킷을 데이터 판독 파이프라인(303)의 다음 단계로 전달할 수 있다. 전형적으로, 암호 해독 모듈(334)은 매체 암호 해독 모듈(332)이 요청 패킷을 암호 해독하는데 사용하는 암호화 키와는 다른 암호화 키를 사용하여 데이터 세그먼트를 암호 해독한다. 패킷이 비기밀성의 암호화 논스와 함께 저장되었으면, 데이터 패킷을 암호 해독하기 위해서는 이 논스가 암호화 키와 연계되어 사용된다. 암호화 키는 솔리드 스테이트 저장 컨트롤러(204)에 의해 사용되는 암호화 키를 관리하는 클라이언트(110), 서버(108), 키 매니저, 또는 다른 디바이스로부터 수신될 수 있다.
다른 실시예에서, 데이터 판독 파이프라인(303)은 역패킷화 장치(324)에 의해 포맷된 데이터 세그먼트를 압축해제하는 압축해제 모듈(336)을 포함한다. 바람직한 실시예에서, 압축해제 모듈(336)은 압축 모듈(312)에 의해 데이터를 압축하는데 사용된 루틴에 상보적인 루틴을 선택할 수 있도록 패킷 헤더와 컨테이너 레이블의 어느 하나 또는 둘 모두에 저장된 압축 정보를 이용한다. 다른 실시예에서, 압축해제 모듈(336)에 의해 사용되는 압축해제 루틴은 압축 해제되는 데이터 세그먼트를 요청한 디바이스에 의해 규정된다. 다른 실시예에서, 압축해제 모듈(336)은 데이터 단위 유형 또는 데이터 단위의 등급에 기반한 디폴트 설정에 따라 압축해제 루틴을 선택한다. 첫 번째 데이터 단위의 첫 번째 패킷은 디폴트 압축해제 루틴을 오버라이드(override)할 수 있고, 동일 데이터 단위 등급 및 데이터 단위 유형의 두 번째 데이터 단위의 두 번째 패킷은 디폴트 압축해제 루틴을 이용할 수 있으며, 동일 데이터 단위 등급 및 데이터 단위 유형의 세 번째 데이터 단위의 세 번째 패킷은 압축해제를 행하지 않을 수 있다.
다른 실시예에서, 데이터 판독 파이프라인(303)은 데이터 판독 파이프라인(303) 내에 하나 이상의 사용자 정의형 기능을 포함하는 프로그램 판독 모듈(338)을 포함한다. 프로그램 판독 모듈(338)은 프로그램 기록 모듈(310)과 유사한 특징을 가지며, 사용자가 데이터 판독 파이프라인(303)에 변경가능 기능을 제공할 수 있게 한다. 프로그램 판독 모듈(303)은 도 3에 도시된 바와 같이 배치될 수도 있고, 데이터 판독 파이프라인(303)의 다른 위치에 배치될 수고 있고, 또는 데이터 판독 파이프라인(303) 내에 복수의 위치에 복수의 부분을 포함할 수도 있다. 게다가, 독립적으로 동작하는 복수의 프로그램 판독 모듈(338)이 데이터 판독 파이프라인(303) 내의 복수의 위치에 존재할 수도 있다. 당업자는 데이터 판독 파이프라인(303) 내의 프로그램 판독 모듈(338)의 다른 형태도 인지할 수 있을 것이다. 데이터 기록 파이프라인(301)과 마찬가지로, 데이터 판독 파이프라인(303)의 단계들은 재배열될 수 있으며, 당업자는 데이터 판독 파이프라인(303) 내의 단계들의 다른 순서도 인지할 수 있을 것이다.
솔리드 스테이트 저장 컨트롤러(204)는 제어 및 상태 레지스터(340) 및 대응하는 컨트롤 큐(control queue: 342)를 포함한다. 제어 및 상태 레지스터(340) 및 컨트롤 큐(342)는 데이터 기록 및 판독 파이프라인(301, 303)에서 처리되는 데이터와 결부된 제어 및 시퀀싱 커맨드(sequencing command) 및 부명령을 용이하게 한다. 예를 들면, 패킷화 장치(302)의 데이터 세그먼트는 ECC 생성기(304)와 결부된 컨트롤 큐(342)에 하나 이상의 대응하는 제어 명령 또는 명령어를 가질 수 있다. 데이터 세그먼트가 패킷화됨에 따라, 명령 또는 명령어들 중 일부가 패킷화 장치(302) 내에서 실행될 수 있다. 데이터 세그먼트로부터 생성된 새로이 형성된 데이터 패킷이 다음 단계로 전달됨에 따라, 다른 명령 또는 명령어는 제어 및 상태 레지스터(340)를 통해서 후속 컨트롤 큐(342)로 전달될 수 있다.
데이터 기록 파이프라인(301)에 전달되는 패킷에 대해 명령 및 명령어는 동시에 컨트롤 큐(342)에 로딩될 수 있으며, 각각의 패킷이 각 단계에 의해 실행됨에 따라 그 파이프라인 단계는 적절한 명령 또는 명령어를 끄집어낸다. 유사하게, 데이터 판독 파이프라인(303)으로부터 요청되는 패킷에 대해 명령 및 명령어는 동시에 컨트롤 큐(342)에 로딩될 수 있으며, 각각의 패킷이 각 단계에 의해 실행됨에 따라 그 파이프라인 단계는 적절한 명령 또는 명령어를 끄집어낸다. 당업자는 제어 및 상태 레지스터(340) 및 컨트롤 큐(342)의 다른 특징 및 기능도 인지할 수 있을 것이다.
솔리드 스테이트 저장 컨트롤러(204) 및/또는 솔리드 스테이트 저장 디바이스(206)는 뱅크 인터리브 컨트롤러(bank interleave controller: 344)를 또한 포함할 수 있다. 뱅크 인터리브 컨트롤러(344)는 뱅크들 사이의 기록, 판독, 삭제 등을 조정한다. 전형적으로 논리적 삭제 블록을 삭제하는 것이 논리적 페이지를 기록하는 것보다 시간이 더 오래 걸리며, 논리적 페이지를 기록하는 것보다 판독하는 것이 시간이 더 적게 걸린다. 뱅크들 사이의 명령을 조정함으로써, 뱅크 인터리브 컨트롤러(344)는 솔리드 스테이트 저장 디바이스(202)의 효율을 증대시킨다. 뱅크 인터리브 컨트롤러(344)에 대한 보다 상세한 기재는 2007년 12월 6일자로 출원된 데이비드 플린 외의 "뱅크 인터리브를 사용하여 솔리드 스테이트 저장부의 명령을 관리하는 장치, 시스템, 및 방법" 이라는 명칭의 미국 특허출원 제 11/952,095호에 기재되어 있다.
솔리드 스테이트 저장 컨트롤러(204)는 솔리드 스테이트 저장부(207)에/로부터 송수신되는 명령 및 상태 메시지를 버퍼링하는 동기화 버퍼(346)를 포함한다. 동기화 버퍼(346)는 솔리드 스테이트 저장부 클럭 도메인과 로컬 버스 클러 도메인 사이의 경계에 위치되어 클러 도메인 차이를 해소하는 버퍼링을 제공한다. 동기화 버퍼(346), 기록 동기화 버퍼(308), 및 판독 동기화 버퍼(328)는 독립적일 수도 있고 또는 데이터, 명령, 상태 메시지 등을 버퍼링하기 위해 함께 동작할 수도 있다. 바람직한 실시예에서, 동기화 버퍼(346)는 클럭 도메인을 건너는 신호의 수가 가장 적은 곳에 위치된다. 설계상의 구현의 몇몇 측면을 최적화하기 위해 클럭 도메인 사이의 동기화가 솔리드 스테이트 저장 디바이스(206) 내의 다른 위치로 임의적으로 이동될 수 있음을 당업자는 인지할 수 있을 것이다.
솔리드 스테이트 저장 컨트롤러(204)는 솔리드 스테이트 저장부(207)의 유형에 기초하여 솔리드 스테이트 저장부(110)에 전송되고 또한 이로부터 판독되는 데이터에 대한 명령 및 솔리드 스테이트 저장부(207)로부터 수신되는 상태 메시지를 번역 및 해석하는 저장 버스 컨트롤러(348)를 포함한다. 예를 들면, 저장 버스 컨트롤러(348)는 상이한 유형의 저장부, 상이한 성능 특성을 갖는 저장부, 상이한 제조업체로부터의 저장부 등에 대해 다른 타이밍 요건(timing requirement)을 갖는다. 저장 버스 컨트롤러(348)는 저장 컨트롤 버스(212)에 제어 명령을 또한 전송한다.
바람직한 실시예에서, 솔리드 스테이트 저장 컨트롤러(204)는 멀티플렉서(350a 내지 350n)의 어레이를 포함하는 MUX(350)를 포함하며, 각 멀티플렉서는 솔리드 스테이트 저장부(207) 어레이의 하나의 행에 지정된다. 예를 들면, 멀티플렉서(350a)는 솔리드 스테이트 저장 엘리먼트(216a, 218a, 220a)와 결부된다. MUX(350)는 데이터 기록 파이프라인(301)으로부터의 데이터 및 저장 버스 컨트롤러(348)로부터의 명령을 저장 I/O 버스(210)를 거쳐서 솔리드 스테이트 저장부(207)로 경로 설정하고, 저장 버스 컨트롤러(348), 동기화 버퍼(346) 및 뱅크 인터리브 컨트롤러(344)를 통하여, 솔리드 스테이트 저장부(207)로부터의 데이터 및 상태 메시지를 저장 I/O 버스(210)를 거쳐서 데이터 판독 파이프라인(303) 및 제어 및 상태 레지스터(340)로 경로 설정한다.
바람직한 실시예에서, 솔리드 스테이트 저장 컨트롤러(204)는 솔리드 스테이트 저장 엘리먼트의 각 행{예를 들면, SSS 0.1(216a), SSS 0.2(218a, SSS 0.N(220a)}에 대해 MUX(350)를 포함한다. MUX(350)는 데이터 기록 파이프라인(301)으로부터의 데이터와 저장 I/O 버스(210)를 거쳐서 솔리드 스테이트 저장부(207)에 전송된 명령을 통합하며, 데이터 판독 파이프라인(303)에 의해 처리될 데이터를 명령으로부터 분리한다. 기록 버퍼(320)에 저장된 패킷은 기록 버퍼(320)로부터의 버스 상에서 솔리드 스테이트 저장 엘리먼트의 각 행{SSS x.0 내지 SSS x.N(216, 218, 220)}에 대한 기록 동기화 버퍼(308)를 통하여 솔리드 스테이트 저장 엘리먼트의 각 행{SSS x.0 내지 SSS x.N(216, 218, 220)}에 대한 MUX(350)로 안내된다. 명령 및 판독 데이터가 저장 I/O 버스(210)로부터 MUX(350)에 수신된다. MUX(350)는 또한 상태 메시지를 저장 버스 컨트롤러(348)로 안내한다.
할당 장치
도 4는 본 발명에 따른 데이터 저장 공간을 할당하는 장치(400)의 일 실시예를 예시하는 개략 블록도이다. 본 장치(400)는 이하에 설명되는 할당 요청 모듈(402), 논리적 용량 모듈(404), 및 할당 답신 모듈(406)을 포함한다. 할당 요청 모듈(402), 논리적 용량 모듈(404), 및 할당 답신 모듈(406)은 저장 시스템(102)에 일반적으로 예시되어 있으나, 할당 요청 모듈(402), 논리적 용량 모듈(404), 및 할당 답신 모듈(406) 모두 또는 일부가 저장 컨트롤러(104) 또는 드라이버(118)에, 혹은 저장 시스템(1020의 다른 위치에 배치될 수도 있다.
본 장치(400)는 논리적 용량을 할당하기 위한 할당 요청을 요청 디바이스로부터 수신하는 할당 요청 모듈(402)을 포함한다. 요청 디바이스는 파일 서버(114)/파일 시스템, 클라이언트(110), 마스터 할당 매니저(124), 또는 할당 요청을 전송할 수 있는 임의의 다른 디바이스 또는 구성요소일 수 있다. 할당 요청은 데이터 저장 디바이스에 수신된다. 일 실시예에서, 데이터 저장 디바이스는 도시된 바와 같은 저장 디바이스(106)와 이 저장 디바이스(106)를 제어하는 적어도 하나의 저장 컨트롤러(104)를 포함하고, 저장 컨트롤러(104)에 결합된 드라이버(118)를 포함할 수 있다. 할당 요청과 결부된 논리적 용량은 특히 할당 요청의 목적지인 데이터 저장 디바이스에 데이터를 저장하기 위한 것이다.
할당 요청은 논리적 할당 요청을 포함할 수도 있고, 데이터의 저장 요청을 포함할 수도 있다. 논리적 할당 요청의 경우에, 요청은 전형적으로 클라이언트(110)에 할당되는 LID에 대한 요청이다. 데이터의 저장 요청의 경우, 하나 이상의 LID가 클라이언트(110) 또는 파일 서버(114)/파일 시스템에 할당되고 배정되며, 이는 LID를 데이터를 포함하는 저장부 위치에 결부시키는 것을 포함한다. 일 실시예에서, LID는 할당시에 데이터에 배정된다(예를 들면, 할당 요청은 데이터의 저장 요청을 포함할 수 있다). 할당 요청이 데이터의 저장 요청과 별개인 일 실시예에서, 데이터에 LID를 할당하는 것은 데이터에 LID를 배정하는 것과는 다른 별개의 단계일 수 있다. 소정 실시예에서, 요청은 복수의 클라이언트로부터 나오며, 그 결과 요청에는 클라이언트 식별자가 결부될 수 있고, 본 방치(400)는 그 클라이언트에 대한 할당과 관련하여 및/또는 클라이언트에 할당하는데 이용 가능한 LID와 관련하여 액세스 제어를 이행할 수 있는 클라이언트 식별자를 사용할 수 있다. 게다가, 클라이언트 식별자는 얼마나 큰 물리적 용량이 특정 클라이언트 또는 클라이언트 집단에 할당되는지를 관리하는데 사용될 수 있다.
본 장치(400)는 데이터 저장 디바이스의 논리적 공간이 할당 요청을 충족시킬 수 있는 충분한 미할당 논리적 공간을 포함하는지를 판단하는 논리적 용량 모듈(404)을 포함한다. 논리적 용량 모듈(404)은 LID 배정 및/또는 할당을 유지하는 인덱스(또는 다른 데이터구조)를 이용하여 논리적 공간이 충분한 미배정 및/또는 미할당 논리적 용량을 갖고 있는 지를 판단할 수 있다. 몇몇 실시예에서, 논리적 용량 모듈(404)은 비휘발성 저장 디바이스에 유지된 논리적-물리적 맵 또는 인덱스를 검색할 수 있다. 논리적-물리적 맵은 논리적 공간의 배정된 논리 식별자(LID)와 결부된 LID에 대응하는 데이터를 포함하는 저장 위치(예를 들면, 물리적 위치) 사이의 결부관계(associations)를 포함한다. 논리적 용량을 결정하는 다른 데이터구조 및/또는 기술도 본 개시의 가르침에 따라 이용될 수 있다. 따라서, 본 개시는 이와 관련하여 한정하는 것으로 해석되어서는 안 된다. 가용 논리적 용량(예를 들면, 미할당 및/또는 미배정 논리적 용량) 및/또는 가용 물리적 저장 용량을 결정하는 다른 예들이 도 11 및 도 12와 연계되어 아래에 개시되어 있다.
위에서 논의된 바와 같이, 미배정 LID는 비휘발성 저장 디바이스에 저장된 데이터에 대응되지 않는(예를 들면, 논리적-물리적 맵에 있지 않은) LID를 지칭할 수 있다. 미배정 LID는 클라이언트(110)에 할당될 수도 있고 미할당될 수도 있다. 몇몇 실시예에서, 논리적-물리적 맵은 이 맵 내의 LID와 LID에 결부된 물리적 어드레스 사이에 다른 논리적-논리적 매핑이 존재하지 않도록 구성된다.
데이터 저장 디바이스에서 관리되는 논리적-물리적 맵 내의 LID는 LBA, 인덱스, 파일명, 아이노드와 같은 임의의 유형의 논리적 어드레스를 포함할 수 있으며, 오브젝트를 포함할 수도 있다. 구체적으로, 논리적-물리적 맵은 오브젝트 또는 특정 논리적 어드레스 유형에 국한되지 않고, 오브젝트뿐만 아니라 파일명, LBA 등도 포함할 수 있다. 다른 실시예에서, LID는 오브젝트 식별자가 아닌 논리적 식별자를 포함하며, 오브젝트는 데이터 저장 디바이스에 의해 직접 관리되지는 않는다. 데이터 저장 디바이스의 논리적-물리적 맵뿐만 아니라 본 장치(400)의 모듈(402 - 406)도 오브젝트에 국한되지 않고 LID가 LBA 및 다른 데이터 단위 레이블도 또한 될 수 있으며, 이는 본 장치(400)의 범위와 유연성을 확장시키기 때문에, 본 장치(400)는 이점을 갖는다.
몇몇 실시예에서, 논리적 용량 모듈(404)은 배정된 LID를 식별하기 위해 논리적-물리적 맵을 검색하고, 데이터 저장 디바이스의 논리적 공간을 알게 됨으로써, 논리적 용량 모듈(404)은 미배정 논리적 공간을 결정한다. 예를 들면, 논리적 공간이 0000 내지 FFFF의 논리적 어드레스 범위를 포함하고 논리적-물리적 맵이 논리적 어드레스 0000 내지 F0000가 배정되었음을 나타내면, 논리적 용량 모듈(400)은 미할당 논리적 공간이 어드레스 F001 내지 FFFF를 포함할 수 있음을 결정할 수 있다. 논리적 어드레스 F001 내지 FFFF가 다른 클라이언트(110)에 할당되지 않으면, 이들은 할당 요청을 충족시킬 수 있는 할당에 이용 가능할 수 있다
몇몇 실시예에서, 비휘발성 저장 디바이스는 각각의 다른 클라이언트에 대해 개별적인 논리적 저장 공간을 유지할 수 있다. 따라서, 각 클라이언트는 그 자체의 개별적인 논리적 저장 공간을 운영한다. 따라서, 비휘발성 저장 디바이스는 각 클라이언트에 대해 개별적인 메타데이터(예를 들면, 인덱스, 용량 표시자, 등)을 유지할 수 있다. 클라이언트는 어드레스(예를 들면, 네트워크 어드레스), 크리덴셜(credential), 또는 다른 식별자에 의해 구분될 수 있다. 식별자는 클라이언트 요청에 제공될 수도 있고 및/또는 비휘발성 저장 디바이스에 액세스하기 위해 클라이언트에 의해 사용되는 통신 채널 또는 프로토콜과 결부될 수도 있다.
몇몇 실시예에서, 논리적-물리적 맵(또는 다른 데이터 구조)은 아직 배정되지 않은 논리적 용량 할당을 추적하도록 구성된 할당 인덱스 또는 할당 엔트리(allocation entry)를 포함할 수 있다. 예를 들면, LID(또는 논리적 용량의 다른 부분)가 클라이언트에 할당될 수 있으나, 저장 디바이스(106)에 저장된 데이터와 결부되지 않을 수 있다. 따라서, 논리적 용량은 할당될 수 있으나 "미배정(unassigned)"될 수 있으며, 그에 따라 논리적-물리적 맵에 포함되지 않을 수 있다. 따라서, 미할당 논리적 공간을 결정할 때, 논리적 용량 모듈(404)은 다른 인덱싱 정보(예를 들면, 논리적-물리적 맵)외에 추가적인 데이터 구조(예를 들면, 할당 인덱스 또는 할당 엔트리)를 참조할 수 있다.
이와 달리 또는 부가적으로, 비휘발성 저장 디바이스는 미할당된 LID(또는 논리적 용량의 다른 부분)를 식별할 수 있는 "미할당 인덱스(unallocated index)"를 유지할 수 있다. 인덱스의 가용성(이용 가능성)의 실례는 도 12와 연계하여 아래에 기재되어 있다.
예를 들어, 할당 요청이 소정 개수의 LID에 대한 요청을 포함하면, 논리적 용량 모듈(404)은 가용 논리적 공간(예를 들면, 미배정 및/또는 미할당 논리적 공간)이 요청된 논리적 어드레스의 양을 충족하기에 충분하거나 또는 초과하는지를 결정할 수 있다. 다른 예에서, 할당 요청이 LID의 목록 또는 범위를 포함하면, 논리적 용량 모듈(404)은 요청된 LID 모두 또는 일부에 대한 LID가 미할당되거나 또는 미배정되었는지를 결정할 수 있다.
전형적인 랜덤 액세스 디바이스에서, LID는 전형적으로 LBA이며 LBA는 미리 설정된 매핑에 따라 PBA(physical block address)에 매치된다. 이와 대조적으로, 순차 저장 디바이스, 로그 구조 디바이스 등에서, 배정된 LID는 이 배정된 LID에 매핑된 하나 이상의 물리적 어드레스와 다르다(LID로부터 저장 위치로의 미리 설정되거나 미리 정해진 매핑이 존재하지 않을 수 있다). 이러한 데이터 저장 디바이스에서는, 데이터가 가비지 컬렉션 과정 또는 다른 공간 복구 과정에 의해 이동될 수 있으며, 데이터는 논리적-물리적 맵에서 추적된다. 전형적으로, 순차 또는 로그 저장 디바이스에서 배정된 LID는 인덱스(예를 들면, 논리적-물리적 매핑)에 의해서만 매핑된 물리적 어드레스에 연관된다.
순차 저장 디바이스, 로그 구조 디바이스 등의 경우에, 논리적-물리적 매핑은 다양한 이유로 변경될 수 있다. 일 실시예에서, 하나 이상의 물리적 어드레스에 대한 하나 이상의 LID의 매핑은 하나 이상의 물리적 어드레스에 저장된 데이터가 하나 이상의 다른 물리적 어드레스로 이동될 때 변경된다. 다른 실시예에서, 하나 이상의 물리적 어드레스에 대한 하나 이상의 LID의 매핑은 중복 제거(deduplication) 과정에서 변경된다. 예를 들면, 하나 이상의 물리적 어드레스에 저장된 데이터가 제1의 물리적 위치에 저장되고 제2의 물리적 위치에 저장된 데이터와 동일하면, 하나 이상의 LID의 매핑은 제2의 물리적 위치에 대응되도록 변경된다.
다른 실시예에서, 하나 이상의 물리적 어드레스에 대한 하나 이상의 LID의 매핑은 하나 이상의 LID(제1의 LID)에 매핑된 하나 이상의 물리적 위치가 하나 이상의 다른 LID(제2의 LID)에 재매핑될 때 변경된다. 이는 예를 들면 파일명 또는 오브젝트명이 바뀌면 발생할 수 있다. LID와 물리적 저장 위치 사이에 미리 정해진 및/또는 미리 설정된 결부관계가 존재하지 않고 및/또는 데이터가 이동될 수 있고 LID와 물리적 저장 위치 사이의 결부관계가 변경될 수 있는 저장 디바이스에서는, 논리적-물리적 인덱싱이 이용될 수 있다. 저장 디바이스는 이 저장 디바이스에 이미 논리적 어드레스와 저장 위치 사이의 결부관계를 유지하고 있으므로, 클라이언트 어드레스 번역이 불필요할 수 있으며, 클라이언트가 개별적인 중복 매핑 세트를 유지할 필요가 없다. 따라서 클라이언트와 저장 디바이스 사이에 하나 이상의 매핑 및/또는 어드레스 번역 층이 제거될 수 있어서, 클라이언트의 처리 로드(processing load)를 경감한다.
본 장치(400)는 논리적 용량 모듈(404)이 논리적 공간이 충분한 논리적 공간을 갖고 있는 지를 판단하는 것에 응답하여 요청 디바이스에 답신을 전송하는 할당 답신 모듈(406)을 포함한다. 답신은 논리적 공간이 할당 요청을 충족시키기에 충분한 논리적 공간을 갖고 있는 지를 나타내는 표시를 포함한다. 예를 들어, 논리적 용량 모듈(404)이 미할당 논리적 공간이 할당 요청을 충족시키기에 충분하지 않다고 판단하면, 할당 답신 모듈(406)은 답신에 할당 요청이 실패했다는 것을 포함할 수 있다.
예들 들어, 논리적 용량 모듈(404)이 미할당 논리적 공간이 할당 요청을 충족시키기에 충분하다고 판단하면, 할당 답신 모듈(406)은 할당 요청의 성질에 따라 긍정 응답(affirmative response), LID의 목록, LID의 범위 등을 답신에 포함할 수 있다. 예를 들어, 논리적 용량 모듈(404)이 미할당 논리적 공간이 할당 요청을 충족시키기에 충분하다고 판단하고 할당 요청이 특정 LID의 할당 요청을 포함하면, 할당 답신 모듈(406)은 요청된 LID가 할당되었다는 확인통지를 요청 디바이스에 전송할 수 있다. 할당 요청이 LID에 대한 요청을 포함하면, 할당 답신 모듈(406)은 요청된 LID를 전송할 수 있다. 할당 요청이 기준을 만족하는 LID에 대한 요청을 포함하면, 할당 답신 모듈(406)은 그 기준을 만족하는 LID를 전송할 수 있다.
일 실시예에서, 할당 요청은 특정 그룹의 LID에 대한 것이며, 할당 답신 모듈(406)은 요청된 LID로 답신할 수 있다. 다른 실시예에서는, 할당 요청이 기록 요청의 일부이다. 일례의 경우에, 기록 요청은 특정 LID를 포함하고 할당 답신 모듈(406)은 요청된 LID로 답신할 수 있다. 다른 경우에, 기록 요청은 데이터 또는 데이터의 양을 나타내는 표시만을 포함하고, 할당 답신 모듈(406)은 기록 요청에 충분한 LID를 할당하고 그 할당된 LID를 회신함으로써 답신할 수 있다. 이와 달리, 데이터의 양을 나타내는 표시가 제공되면, 답신은 할당되지 않은 LID를 포함할 수 있다. 할당 답신 모듈(406)은 데이터가 기록되기 전에 또는 기록된 후에 답신할 수 있다. 할당 답신 모듈(406)이 데이터가 기록되고 난 후에 답신을 전송하면, 답신은 데이터의 기록에 대한 확인의 일부일 수 있다. 당업자는 논리적 용량 모듈(404)이 데이터 저장 디바이스의 논리적 공간이 할당 요청을 충족시키기에 충분한 미할당 논리적 공간을 갖고 있는 지를 판단하는 것에 응답하여 할당 답신 모듈(406)이 답신할 수 있는 다른 방법도 인지할 수 있을 것이다.
일 실시예에서, 논리적 공간(논리적 공간 용량)에 대응하는 저장 용량은 데이터 저장 디바이스의 물리적 저장 용량보다 훨씬 더 크다. 논리적 공간 용량은 할당된 논리적 공간과 결합된 미할당 논리적 공간을 포함한다. 할당된 논리적 공간은 이 할당된 논리적 공간 내에 배정된 LID 및 미배정 LID를 포함한다. 즉, 데이터 저장 디바이스 및 결부된 논리적-물리적 매핑은 씬 프로비져닝(thin provisioning)을 지원한다. 논리 식별자가 LBA인 경우, 각 LBA는 전형적으로 규정된 데이터 사이즈를 갖는다. 소정 실시예에서는, LBA가 논리적 블록에 배정되고, 종종 논리적 블록은 저장 디바이스(106) 상의 물리적 블록과 동일한 사이즈를 갖는다.
일 실시예에서, 데이터 저장 디바이스의 논리적 공간의 LID의 부분 집합(subset)은 데이터 저장 디바이스 내의 물리적 블록에 대해 일대일 대응을 갖는다. 예를 들어, 논리적 공간의 일부가 클라이언트(110)에 할당되고 클라이언트(110)가 논리적 블록을 저장하면, 클라이언트(110)에게 LID는 LBA이며, 각 LBA는 PBA(물리적 블록 어드레스)에 동등한 물리적 어드레스에 대응될 수 있다. 데이터 저장 디바이스에 이용 가능한 논리적 공간은 여전히 다른 클라이언트(110)에 대한 할당을 수용할 수 있으며 여전히 씬 프로비져닝이 될 수 있다.
논리 식별자가 논리적 블록 어드레스(LBA)인 것이 일반적이긴 하나, 도 4의 장치(400)에서 논리 식별자는 그 이상일 수 있다. 논리 식별자는 논리적 어드레스(LA), 논리적 블록 어드레스(LBA), 파일명, 오브젝트 식별자, 아이노드, 인덱스 등이 될 수 있다. 저장 시스템(102), 서버(108) 등이 LID를 나타내기 위해 64 또는 128 비트의 어드레스를 사용하는 경우, 이러한 논리적 공간(즉, 논리적 공간)에 어드레스를 부여하기 위한 가능한 논리 식별자는 방대해진다. 어드레스의 소정량의 비트는 논리적 공간에 지정될 수 있고 어드레스의 다른 비트는 클라이언트의 식별, 에러 정정 정보, 우선 순위, 데이터 유형, 무결성(integrety) 요건과 같은 데이터 요청에 관한 특성 등과 같은 다른 정보를 포함할 수 있다. 어드레스의 비트의 일부만을 사용하면, 예들 들면 32 비트만을 사용하면 매우 큰 어드레스 공간을 제공하게 된다. 일 실시예에서는, 메타데이터 힌트(예를 들면, 파일 유형, 데이터 등급 등)가 클라이언트(예를 들면, FS)로부터 저장 디바이스에 전달된다. 이들 메타데이터 힌트는 코딩되어 어드레스 비트를 통해 전달될 수 있으며, 메타 정보에 따라 논리적 어드레스 공간을 구성하는 부수 효과를 갖는다. 예를 들면, 모든 시스템 파일은 어드레스의 최상위 비트(highest order bit)가 1로 설정될 수 있으며, 그에 따라 모두 논리적 어드레스 공간의 상위 절반부(top half)에 위치될 수 있다.
논리적 어드레스 공간은 저장 시스템(102)의 저장 디바이스(106)의 물리적 저장 용량을 초과할 수 있다. 데이터가 식별 가능한 단위로 전송되도록 저장 디바이스(106) 또는 저장 시스템(102)에 전송된 데이터는 최소 사이즈를 갖는 것이 일반적이다. 예를 들면, 저장 시스템(102)에 전송된 데이터는 청크(chunk)로 분할될 수 있다. 말단의 데이터는 최소 사이즈의 청크와 일치되지 않을 수 있으며, 최말단 데이터 외에 데이터 청크의 나머지 부분도 널 문자(null character), 0, 1 등이 될 수 있다.
소정의 최소 청크의 데이터가 저장 시스템(102)에 전송되고 모든 가능한 논리 식별자 각각이 청크에 대응한다고 가정하면, 논리 식별자의 개수는 방대하며 청크와 결부된 논리적 저장 용량은 저장 시스템(102)의 저장 디바이스(106)의 물리적 저장 용량보다 훨씬 더 크다. 데이터 저장 디바이스의 가용 물리적 저장 용량은 가용 LID에 상호 연관되지 않는다. 다시 말하지만, 이는 가용 논리적 블록 어드레스가 저장 디바이스(106)의 물리적 블록 어드레스와 거의 일대일 대응을 갖는 전형적인 랜덤 액세스 디바이스와 대비된다.
특정 실시예에서, 저장 디바이스 드라이버(118)는 저장 인터페이스(116)를 통하여 파일 서버(114)/파일 시스템에 결합되며, 저장 인터페이스(116)는 파일 서버(114)/파일 시스템이 저장 인터페이스(116)와 상호작용할 수 있게 하는 인터페이스를 포함한다. 이러한 인터페이스는 API(Application Program Interface), 블록 저장 인터페이스, 개량형 블록 저장 인터페이스, 명령 인터페이스 등을 포함할 수 있다. 일 실시예에 따른 명령 인터페이스는 할당이 기록과 연계되어 행해져야 함을 나타내기 위해 기록 명령(write command)(예를 들면, 클라이언트 요청)에 1 비트를 포함할 수 있다. 기록 명령의 제2의 비트는 요청된 LBA 매개변수가 널(null)이거나 클라이언트의 ID를 포함하고 따라서 본 장치(400)가 하나 이상의 LBA를 할당해야 함을 나타낼 수 있다. 또는, 클라이언트 요청은 선택적인 타이머(timer) 등과 함께 특정 물리적 할당 요청(파일의 길이)을 포함한다. 그 결과, 인터페이스는 많은 다른 특징 및 기능을 가능케 한다.
인터페이스는 파일 서버(114)/파일 시스템으로부터의 데이터 저장 디바이스의 논리적 용량을 할당하기 위한 할당 요청을 전송하고 파일 서버(114)/파일 시스템에 할당 답신을 전송하도록 동작할 수 있다. 할당 답신은 할당 요청에 응답하여 이루어지며 논리적 공간이 할당 요청을 충족시키기에 충분한 논리적 공간을 갖고 있는지를 나타내는 표시를 포함한다. 명령 인터페이스는 새로운 IO-CTL(input-output control) 명령 또는 기존 IO-CTL 명령의 확장으로 구현될 수 있다. 명령 인터페이스는 새로운 프로토콜을 구현하거나 기존 프로토콜을 확장할 수 있다.
논리적 용량은 데이터 저장 디바이스에 데이터를 저장하기 위한 것이다. 저장 디바이스 드라이버(118) 및/또는 데이터 저장 디바이스는 논리적 공간이 할당 요청을 충족시키기에 충분한 미할당 논리적 공간을 포함하고 있는지를 판단하며, 이러한 판단은 논리적-물리적 맵의 검색을 포함한다. 저장 디바이스 드라이버(118)는 데이터 저장 디바이스의 일부일 수 있다. 하지만, 충분한 미할당 논리적 공간에 대한 판단은 파일 서버(114)/파일 시스템에서 이루어지지 않는다. 대신에, 파일 서버(114)/파일 시스템이 할당 요청을 송신하고, 데이터 저장 디바이스/드라이버(118)가 데이터 저장 시스템(102)의 일부인 저장 디바이스(106)에 대응하는 논리적-물리적 맵을 검색한 후에 할당 요청에 답신한다.
일 실시예에서 저장 디바이스 인터페이스(120)는, 논리적 공간이 할당 요청을 충족시키기에 충분한 논리적 용량을 포함하는지를 판단하는데 데이터 저장 디바이스가 저장 디바이스 드라이버(118)와 함께 기능하도록 하는데 충분하게 저장 디바이스 드라이버(118)를 데이터 저장 디바이스에 결합하도록 동작할 수 있다. 저장 디바이스 드라이버(118)는 위에서 언급한 바와 같이 PCI 익스프레스, 직렬 ATA 버스, 병렬 ATA 버스, SCSI, 파이어와이어, 파이버 채널, USB, PCIe-AS 등일 수 있다.
인터페이스(116)는 비휘발성 저장 디바이스 상의 저장 위치에 대해 논리적 어드레스 공간의 LID를 결부시키는 인덱스를 직접 클라이언트에 노출시킬 수 있다. 클라이언트는 가용 할당 공간, 물리적 용량, 저장 매체의 건강도, 어느 LID가 할당되었는지, 어느 LID가 배정되었는지 등을 식별하기 위해 인터페이스의 소정 기능을 호출할 수 있다. 요약하면, 인터페이스는 본 장치(400)의 특징 및 기능의 모두 또는 부분집합을 클라이언트에 직접 노출시킬 수 있으며, 그러면 클라이언트는 그 정보를 희망하는 바에 따라 사용할 수 있다.
도 5는 본 발명에 따른 데이터 저장 공간을 할당하는 장치(500)의 다른 실시예를 예시하는 개략적인 블록도이다. 본 장치(500)는 도 4의 장치(400)와 관련하여 위에서 설명된 것들과 상당히 유사한, 할당 요청 모듈(402), 논리적 용량 모듈(404), 및 할당 답신 모듈(406)을 포함한다. 또한, 본 장치(500)는 물리적 용량 요청 모듈(502), 물리적 용량 할당 모듈(504), 물리적 용량 답신 모듈(506), 할당 모듈(508), 할당 질의 요청 모듈(510), 할당 질의 결정 모듈(512), 할당 질의 답신 모듈(514), 논리적 공간 관리 모듈(516), 매핑 모듈(518), 물리적 공간 확보 요청 모듈(520), 물리적 공간 확보 모듈(522), 물리적 공간 확보 회신 모듈(524), 물리적 공간 확보 취소 모듈(526), LID 배정 모듈(528), DMA 모듈(530), 및 삭제 모듈(532)을 포함하며, 이들은 아래에 설명된다. 도 5의 장치(500)의 모듈(402 내지 406 및 502 내지 532)은 저장 시스템(102) 내에 예시되고, 모두 또는 일부는 드라이버(118), 저장 컨트롤러(104) 또는 당업자에게 알려진 임의의 다른 적절한 위치에 포함될 수 있다.
본 장치(500)는 일 실시예에서 물리적 용량 요청 모듈(502), 물리적 용량 할당 모듈(504), 및 물리적 용량 답신 모듈(506)을 포함한다. 물리적 용량 요청 모듈(502)은 요청 디바이스로부터 물리적 용량 요청을 수신한다. 물리적 용량 요청은 데이터 저장 디바이스에 수신되며, 데이터 저장 디바이스의 가용 물리적 저장 용량(및/또는 요청 디바이스에 할당된 물리적 저장 용량)의 양에 대한 요청을 포함한다. 물리적 용량 요청은 물리적 용량의 양을 포함할 수 있거나 또는 예를 들면 저장될 데이터 단위의 크기를 나타냄으로써 물리적 저장 용량을 간접적으로 요청할 수 있다. 다른 간접적인 물리적 저장 용량 요청은 데이터 사이즈에 상관(相關)될 수 있는 저장될 데이터의 논리적 어드레스를 포함할 수 있다. 당업자는 다른 형태의 물리적 용량 요청도 인지할 수 있을 것이다.
물리적 용량 할당 모듈(504)은 데이터 저장 디바이스 상의 가용 물리적 저장 용량의 양을 결정한다. 가용 물리적 저장 용량의 양은 데이터 저장 디바이스 내의 미배정 저장 위치의 물리적 저장 용량을 포함한다. 몇몇 실시예에서, 가용 물리적 저장 용량의 양은 "경제적(budgeted)"이 될 수 있는데, 예를 들면 저장 디바이스의 물리적 저장 용량의 일부만이 요청 디바이스에 이용될 수 있다. 몇몇 실시예에서, 가용 물리적 저장 용량의 양은 각 클라이언트 또는 클라이언트 그룹과 결부된 할당량(quota)에 기초하여 "경제적"이 될 수 있다. 본 장치(500)는 이러한 할당량을 시행할 수 있다. 가용 물리적 저장 디바이스의 할당은 구성 매개변수(configuration parameters)에 의해 결정될 수 있거나, 또는 성능 및/또는 서비스 정책의 질 등에 따라 동적으로 조정될 수 있다.
물리적 용량 할당 모듈(504)은 위에서 논의된 논리적-물리적 맵과 같은 인덱스(또는 다른 데이터 구조)를 사용하여 가용 물리적 저장 용량의 양을 결정할 수 있다. 논리적-물리적 맵은 유효 데이터를 포함하는 저장 위치(예를 들면, 유효 데이터를 포함하는 저장 위치)를 나타낼 수 있다. 논리적-물리적 맵은 배정된 저장 위치를 식별하기 위해 참조될 수 있다. 가용 저장 용량은 전체(또는 경제적) 물리적 용량에서 배정된 용량을 뺀 것일 수 있다. 이와 달리 또는 부가적으로, 할당 인덱스(또는 다른 데이터 구조)가 가용 물리적 저장 용량의 표시자(indicator)를 유지할 수 있다. 이 표시자는 이하의 것들을 포함하나 이에 국한되지 않는 저장 디바이스 상에서 행해지는 저장 작업에 응답하여 업데이트될 수 있다: 가비지 컬렉션 작업, 그루밍 작업(grooming operation), 할당 해제(deallocation)(예를 들면, 트림), 추가적인 데이터의 기록, 물리적 저장 용량 확보, 물리적 저장 용량 확보 취소 등. 따라서, 가용 물리적 저장 용량의 "누계(running total)"는 요청시에 이용 가능할 수 있다.
물리적 용량 답신 모듈(506)은 물리적 용량 할당 모듈(504)이 데이터 저장 디바이스 상의 가용 물리적 저장 용량의 양을 결정하는 것에 응답하여 요청 디바이스에 답신을 전송한다.
물리적 용량 할당 모듈(504)은 일 실시예에서 배정된 물리적 어드레스, 미배정 물리적 어드레스, 확보된 물리적 어드레스 용량, 미확보 물리적 어드레스 용량 등을 추적한다. 물리적 용량 할당 모듈(504)은 논리적-물리적 맵, 유효성 맵(validity map), 프리 물리적 어드레스 풀(free physical address pool), 사용된 물리적 어드레스 풀, 물리적-논리적 맵, 또는 당업자에게 알려진 다른 수단을 사용하여 이들 매개변수를 추적할 수 있다.
답신은 다양한 형태를 취할 수 있다. 물리적 용량 요청이 가용 물리적 용량에 대한 요청을 포함하는 일 실시예에서, 답신은 가용 물리적 저장 용량의 양을 포함할 수 있다. 물리적 용량 요청이 물리적 용량의 특정량을 포함하는 다른 실시예에서, 답신은 데이터 저장 디바이스가 요청된 가용 물리적 저장 용량을 가지고 있다는 확인통지를 포함할 수 있다. 당업자는 물리적 용량 요청에 대응한 다른 형태의 답신도 인지할 수 있을 것이다.
물리적 용량 요청 모듈(502), 물리적 용량 할당 모듈(504), 및 물리적 용량 답신 모듈(506)을 구비한 본 장치(500)는, 논리적-물리적 매핑이 일대일 매핑이 아닌 저장 디바이스(106)에서 이점을 갖는다. 판독 및 기록 요청이 하나 이상의 LBA를 포함하는 전형적인 랜덤 액세스 디바이스에서는, 파일 서버(114)/파일 시스템이 배정된 LBA를 알게 됨으로써 저장 디바이스(106)의 물리적 저장 용량을 추적할 수 있다.
복수의 물리적 어드레스(및 그에 따른 복수의 저장 위치)가 단일 논리 식별자에 매핑(즉, 하나의 논리 식별자에 매핑된 복수의 버전의 데이터)될 수 있는 로그 구조 파일 시스템 또는 유사한 시스템의 경우에, 논리 식별자의 추적은 물리적 저장 용량을 나타내는 어떠한 표시도 제공하지 않을 수 있다. 저장 위치와 LID 사이의 이러한 다대일(many to one) 관계는 스냅 숏(snap shotting) 및/또는 백업을 지원하는데 사용될 수 있다. 본 장치(500)는 가용 물리적 저장 공간을 지속적으로 추적하며, 가용 물리적 저장 공간의 양을 서버(108) 또는 다른 디바이스에 전송할 수 있다. 본 장치(500)는 파일 서버(114)/파일 시스템이 물리적 저장 용량을 질의할 수 있게 하기 때문에 이점을 갖는다. 할당 관리 및 물리적 용량 관리를 데이터 저장 디바이스에 이관하는 것은 데이터를 순차 저장할 수 있는 저장 디바이스(106), 로그 구조 저장 디바이스 등에 있어서 효율적이다.
배정된 물리적 어드레스는 대응하는 배정된 LID에 매핑된다. 기록 요청에 응답하여 데이터가 저장될 때, 데이터에 배정된 LID는 데이터가 저장되는 실제 위치에 매핑된다. 데이터가 순차 저장되는 로그 구조 파일 시스템의 경우, 데이터가 저장되는 위치는 논리 식별자가 LBA인 경우에도 논리 식별자로부터 분명하게 드러나지 않는다. 대신에, 데이터는 첨부 지점(append point)에 저장되고 데어터가 저장되는 어드레스가 논리 식별자에 매핑된다. 만약 데이터가 이전에 저장된 데이터의 수정본이면, LID는 현재의 데이터뿐만 아니라 구 데이터(old data)가 저장된 위치에도 매핑될 수 있다. 동일 LID에는 여러 개의 버전의 데이터가 매핑될 수 있다.
본 장치(500)는 일 실시예에서 요청 디바이스의 할당 요청을 충족시키기에 충분한 미할당 논리적 공간을 할당하는 할당 모듈(508)을 포함한다. 할당 모듈(508)은 논리적 용량 모듈(404)이 논리적 공간이 할당 요청을 충족시키기에 충분한 미할당 논리적 공간을 갖고 있다고 판단하는 것에 응답하여 미할당 논리적 공간을 할당할 수 있다.
일 실시예에서, 할당 요청은 논리적 공간이 특정 데이터 저장 요청과 결부되지 않는 사전 할당(pre-allocation)의 일부이다. 예를 들면, 클라이언트(110)는 할당 요청을 이용하여 논리적 공간을 요청할 수 있고, 그리고 나서 시간의 경과에 따라 데이터를 할당된 논리적 공간에 저장하도록 진행할 수 있다. 할당 모듈(508)은 할당 요청 및 논리적 용량 모듈(404)이 논리적 공간이 할당 요청을 충족시키기에 충분한 미할당 논리적 공간을 갖고 있다고 판단하는 것에 응답하여 클라이언트(110)에 LID를 할당한다.
다양한 실시예에서, 할당 모듈(508)은 논리적 공간의 부분집합(subset)을 할당할 수 있고, 요청된 논리적 공간에 대한 소정의 기준을 포함하는 할당 요청 등에 기초하여 논리적 공간을 할당할 수 있다. 예를 들어, 할당 요청이 사용자에게 LID를 할당하는 요청을 포함하면, LID는 클라이언트(110)에 이미 할당되어 있을 수 있고, 클라이언트(110)와 결부된 그룹에 할당된 LID와 같이 사용자에게 할당된 부분집합의 일부일 수도 있다. 할당 모듈(508)은 할당 요청에서 식별된 LID를 클라이언트(110) 및 그룹에 결부시킬 수 있다.
할당 모듈(508)은 특정 저장 요청과 결부된 할당 요청에 기초하여 LID를 또한 할당할 수 있다. 예를 들어, 저장 요청이 특정 LID를 포함하고 논리적 용량 모듈(404)이 LID가 이용 가능하다고 판단하면, 할당 모듈(508)은 저장 요청의 데이터를 저장하는 것과 연계하여 LID를 할당할 수 있다. 다른 예로서, 저장 요청이 LID를 포함하지 않고 논리적 용량 모듈(404)이 저장 요청에 충분한 LID가 있다고 판단하면, 할당 모듈(508)은 데이터에 대해 LID를 선택하고 할당할 수 있으며, 할당 답신 모듈(406)은 할당된 LID를 전송할 수 있다.
할당 모듈(508)은 전형적으로 할당을 위한 미할당 LID의 위치를 파악한다. 할당 모듈(508)이 하나 이상의 미할당 LID를 식별할 수 있는 여러 가지 방법이 있다. 예를 들면, 할당 모듈(508)은 클라이언트(101)로부터 위치 파악하기 위해 요청된 LID의 목록을 수신함으로써 미할당 LID를 식별할 수 있고 이들 LID가 할당에 이용 가능하다는 것을 입증할 수 있다. 다른 예에서, 할당 모듈(508)은 요청과 연계되어 수신된 기준을 만족하는 미할당 LID를 검색함으로써 미할당 LID를 식별할 수 있다. 이 기준은 특정 저장 디바이스(106)와 결부된, RAID에서 이용 가능한, 또는 소정의 배정된 메타데이터 특징을 갖는 등의 LID일 수 있다.
다른 예에서, 할당 모듈(508)은 이용 가능한 LID의 풀(pool)에서 식별된 요청과 연계되어 수신된 기준을 만족하는 LID의 부분집합을 생성함으로써 미할당 LID를 식별할 수 있다. 일례로서, LID는 클라이언트(110)에 이미 할당된 LID의 부분집합일 수 있다. 예를 들어, LID의 그룹 또는 집합이 특정 사용자, 그룹, 고용주 등에게 할당되면, LID의 부분집합이 할당될 수 있다. 구체적인 예로는, LID의 집합이 조직체에 할당되면, 할당된 LID의 부분집합이 그 조직체 내의 특정 사용자에게 구체적으로 할당된다. 당업자는 할당 모듈(508)이 하나 이상의 미할당 LID를 식별할 수 있는 다른 방법도 인지할 수 있을 것이다.
할당 모듈(508)은 일 실시예에서 클라이언트(110)에 이미 할당된 LID에 더하여 클라이언트(110)에 LID를 할당함으로써 클라이언트(110)에 할당된 LID를 확대시킬 수 있다. 게다가, 클라이언트(110)에 할당된 LID는 미할당 LID의 풀(pool)로 복귀하도록 소정의 LID를 할당해제함으로써 저감될 수 있다. 다른 실시예에서, 할당된 LID의 부분집합은 할당, 할당해제, 증대, 저감 등이 이루어질 수 있다. 예를 들면, 조직체의 사용자에게 할당된 LID는 그 사용자에게 할당된 LID가 여전히 그 조직체에 할당되지만 그 사용자에게는 할당되지 않도록 할당해제될 수 있다.
본 장치(500)는 일 실시예에서 할당 질의 요청 모듈(510), 할당 질의 결정 모듈(512), 및 할당 질의 답신 모듈(514)을 포함한다. 할당 질의 요청 모듈(510)은 데이터 저장 디바이스의 할당 질의를 수신한다. 할당 질의 요청 모듈(510)은 클라이언트(110), 파일 서버(114)/파일 시스템, 마스터 할당 매니저(124) 등과 같은 소정의 요청 디바이스로부터 할당 질의를 수신한다. 할당 질의는 논리적 공간의 할당에 관한 정보 또는 관련된 할당된 논리적 공간의 관리에 대한 정보를 포함할 수 있다. 예를 들면, 할당 질의는 할당된 LID의 식별, 배정된 LID의 식별, 배정되지 않고 할당된 LID, 미할당 LID 또는 LID의 범위 등의 식별에 대한 요청일 수 있다.
할당 질의는 논리적 할당, 논리적 용량, 물리적 용량에 대한 정보, 또는 할당 질의의 기준을 만족하는 다른 정보를 포함할 수 있다. 이러한 정보는 메타데이터, 상태, 논리적 결부관계, 사용 이력, 플래그(flag), 제어 등을 포함할 수 있다. 당업자는 다른 할당 질의 및 할당 질의에 응답하여 회신된 정보의 유형을 인지할 수 있을 것이다.
할당 질의는 할당 질의 결정 모듈(512)이 할당 요청을 서비스하는 것을 가능케 하는 소정 유형의 기준을 포함한다. 할당 질의 결정 모듈(512)은 일 실시예에서 할당 질의에 특정된 기준을 만족하는 하나 이상의 LID를 식별한다. 식별된 LID는 배정되고 할당된 LID, 미배정되고 할당된 LID, 미할당 LID 등을 포함한다.
할당 질의 답신 모듈(514)은 질의의 결과를 클라이언트(110), 요청 디바이스, 또는 할당 질의에 지시된 다른 디바이스에 전송한다. 할당 질의의 결과는 식별된 LID의 목록, 기준을 만족하는 LID가 발견되었다는 확인통지, 할당 질의의 기준을 만족하는 LID가 발견되지 않았다는 확인통지, LID의 배정/미배정 상태, 논리적 저장 용량 등을 포함할 수 있다. 전형적으로 할당 질의 답신 모듈(514)은 상태 정보를 회신하며 회신된 정보는 당업자에게 알려진 LID의 관리 및 할당과 관련된 임의의 정보를 포함할 수 있다.
본 장치(500)는 다른 실시예에서 데이터 저장 디바이스 내부로부터 데이터 저장 디바이스의 논리적 공간을 관리하는 논리적 공간 관리 모듈(516)을 포함한다. 예를 들면, 논리적 공간 관리 모듈(516)은 데이터 저장 디바이스의 저장 디바이스(106)와 결부된 저장 컨트롤러(104) 또는 드라이버(118)로부터 논리적 공간을 관리할 수 있다. 논리적 공간 관리 모듈(516)은 예를 들면 논리적-물리적 맵에서, 인덱스에서, 또는 다른 데이터 구조에서 배정된 LID 및 미배정 LID를 추적할 수 있다. 배정된 LID는 하나 이상의 배정된 LID에 대응하는 하나 이상의 데이터 패킷으로부터의 데이터가 저장 디바이스(106)에 저장되는 하나 이상의 물리적 어드레스에 매핑된 LID이다.
다양한 실시예에서, 논리적 공간 관리 모듈(516)은 위에서 설명된 바와 같이 할당 요청과 할당 질의, 및 할당과 관련된 다른 기능을 서비스할 수 있다. 논리적 공간 관리 모듈(516)은 요청 디바이스로부터 할당해제 요청을 수신하는 것을 또한 포함할 수 있다. 할당해제 요청은 전형적으로 하나 이상의 할당된 LID를 미할당 상태로 복귀시키고 그리고 나서 요청 디바이스 또는 다른 지정된 디바이스에 성공적인 할당해제를 통보하는 요청을 포함한다. 할당해제 요청은 결부된 LID를 할당 상태로 유지시키는 하나 이상의 저장 위치를 복귀시키고 그리고 나서 요청 디바이스 또는 다른 지정된 디바이스에 성공적인 할당해제를 통보하는 요청을 포함할 수 있다. 이는 자명해 보이나, 할당해제 요청이 논리적/물리적 할당해제는 요청을 수반해야 한다는 표시를 포함하도록 확장되는 것이 필수적일 수 있다. 할당해제 요청은 그루머(groomer)에 동기화되고 결속될 수 있다. 따라서, 할당해제 요청은 완료될 때까지 (시간상) 가상적일 수 있다. (논리적 및 물리적) 할당의 관리는 임의의 시점의 실제 가용 공간으로부터 발산될 수 있다. 관리 모듈(516)은 이러한 차이를 처리하도록 구성된다.
논리적 공간 관리 모듈(516)은 요청 디바이스로부터 LID 그룹 명령 요청을 또한 수신할 수 있고, LID 그룹 명령 요청에 대한 응답을 나타내는 답신을 요청 디바이스에 전송할 수 있다. LID 그룹 명령 요청은 예를 들면, 2개 이상의 LID(LDI 그룹), LID 그룹과 결부된 메타데이터, LID 그룹과 결부된 데이터 등에 취해지는 동작을 포함할 수 있다. 예를 들어, 여러 명의 사용자에게 각각 LID가 할당되고 이들 사용자가 하나의 그룹의 일부이면, LID 그룹 명령은 여러 명의 사용자에 대해 LID를 할당해제하고, 추가적인 LID를 각 사용자에게 할당하고, 각 사용자에 대한 사용 정보를 회신하는 등일 수 있다. LID 그룹 명령에 응답하여 취해지는 동작은 메타데이터의 수정과, 데이터의 백업, 메타데이터의 백업, 제어 매개변수의 변경, 액세스 매개변수의 변경, 데이터의 삭제, 데이터의 복사, 데이터의 암호화, 데이터의 중복제거(deduplication), 데이터의 압축, 데이터의 압축해제 등을 또한 포함할 수 있다. 당업자는 논리적 공간 관리 모듈(516)이 또한 수행할 수 있는 다른 논리적 공간 관리 기능도 인지할 수 있을 것이다.
본 장치(500)는 일 실시예에서 논리적-물리적 맵에, 배정된 LID를 배정된 물리적 어드레스에 매핑하는 매핑 모듈(518)을 포함한다. 논리적 용량 모듈(404)은 매핑 모듈(518)에 의해 매핑된 논리적-물리적 맵을 이용하여 논리적 공간이 충분한 미할당 논리적 공간을 갖고 있는지를 판단한다. 논리적-물리적 맵은 배정된 LID, 미배정 LID, 할당된 LID, 미할당 LID, 할당된 LID의 용량, 미할당 LID의 용량 등의 할당을 추적하는데 사용될 수 있다. 일 실시예에서, 매핑 모듈(518)은 배정된 LID와 대응하는 배정된 물리적 어드레스를 복수의 맵에 매핑한다.
예를 들면, 소정 LID에 대해 배정된 물리적 어드레스를 신속히 식별하는데 포워드 맵(forward map)이 사용될 수 있다. 포워드 맵은 B-트리(B-tree), CAM(content addressable memory), 이진 트리(binary tree), 해시 테이블(hash table) 등, 또는 성기게 배치된 공간 또는 범위를 신속하게 검색하는 것을 용이하게 하는 다른 데이터 구조를 포함할 수 있다. 성기게 배치된 가상 또는 논리적 명칭 공간(namespace)을 신속하게 검색하는 포워드 맵을 사용함으로써, 매핑 모듈(518)은 논리 식별자로부터 하나 이상의 물리적 어드레스를 결정하는 효율적인 방식을 제공한다.
게다가, 물리적 어드레스에 관련된 정보를 신속하게 액세스하고 그 물리적 어드레스와 결부된 논리 식별자에 링크하는데 리버스 맵(reverse map)이 사용될 수 있다. 리버스 맵은 물리적 어드레스로부터 LID를 식별하는데 사용될 수 있다. 리버스 맵의 일부가 저장 공간 복구 작업 중에 함께 삭제되는 데이터 저장 디바이스(106)의 삭제 구역에 걸쳐 있도록, 데이터 저장 디바이스(106)의 어드레스를 삭제 블록과 같은 삭제 구역에 매핑하는데 리버스 맵이 사용될 수 있다. 삭제 구역에 의해 리버스 맵을 구성하는 것은 저장 복구 작업 중에 유용한 정보를 추적하는 것을 용이하게 한다. 예를 들면, 리버스 맵은 삭제 구역의 어느 물리적 어드레스가 유효 데이터를 갖고 어는 물리적 어드레스가 무효 데이터를 갖는지를 포함할 수 있다. 유효 데이터가 삭제 구역으로부터 복사되고 삭제 구역이 삭제되면, 리버스 맵은 삭제 구역이 데이터를 포함하지 않으며 데이터의 순차 저장 준비가 되었음을 나타내도록 쉽게 변경될 수 있다.
포워드 및 리버스 매핑에 대한 보다 상세한 논의는 2008년 4월 8일자로 출원되고 본 명세서에 참고로 병합되어 있는 데이비드 플린 외의 "가상 및 물리적 어드레스의 효율적인 매핑을 위한 장치, 시스템, 및 방법"이라는 명칭의 미국 특허출원 제 12/098,434호에 포함되어 있다. 저장 시스템(102) 내에 및 저장 디바이스(106) 내에도 LID 및 대응하는 물리적 어드레스의 강력한 매핑을 포함함으로써, 본 매핑은 종래에 상위 레벨에서 행해지던 씬 프로비져닝, 할당 기능 등과 같은 기능들을 효율적으로 통합한다. 매핑 모듈(518)은 종래의 시스템에서 사용되는 매핑 층을 제거하는 효율적인 방식을 제공한다.
씬 프로비져닝 저장 시스템에서, 한가지 잠재적인 문제점은 서버/파일 시스템 또는 클라이언트가 저장 디바이스에 데이터의 기록을 시도할 수 있으나 저장 디바이스가 가용 디스크 공간이 바닥났기 때문에 기록 요청 실패만을 갖게 된다는 것이다. 파일 서버/파일 시스템이 LBA와 PBA의 일대일 매핑에 의존하여 가용 물리적 저장 용량을 추적하는 랜덤 액세스 디바이스의 경우, 저장 디바이스가 저장 공간이 바닥날 가능성은 매우 낮다. 하지만, 저장 디바이스가 실제로 씬 프로비져닝 시스템, 로그 구조 파일 시스템 등일 경우에 파일 서버/파일 시스템은 저장 디바이스가 랜덤 액세스라고 생각할 수 있다. 이러한 상황의 경우, 기록 요청이 실패하지 않도록 기록 요청 이전에 또는 기록 요청과 연계하여 물리적 공간을 확보하는 것이 바람직하다. 파일 서버/파일 시스템 또는 클라이언트가 물리적 저장 공간의 확보를 원할 수 있는 다른 상황도 존재한다.
본 장치(500)는 클라이언트(110) 또는 파일 서버(114)/파일 시스템으로부터 데이터 저장 디바이스{즉, 데이터 저장 디바이스의 일부인 저장 디바이스(106)} 상의 가용 물리적 저장 용량의 확보 요청(이하, "물리적 공간 확보 요청")을 수신하는, 저장 시스템(102)에 배치된 물리적 공간 확보 요청 모듈(520)을 포함한다. 일 실시예에서, 물리적 공간 확보 요청은 클라이언트(110) 또는 파일 서버(114)/파일 시스템에 의해 요청된 물리적 저장 용량의 양을 나타내는 표시를 포함한다.
요청된 물리적 저장 용량의 양을 나타내는 표시는 저장 디바이스(106)의 물리적 용량 또는 저장 디바이스(106)의 용량의 다른 직접적인 측정치로 표현될 수 있다. 물리적 저장 용량 확보 요청은 확보된 물리적 저장 용량을 논리적 개체(logical entity)에 할당하는 요청을 또한 포함할 수 있다. 물리적 저장 용량의 양의 표시는 간접적으로도 표시될 수 있다. 예를 들어, 파일 서버(114)/파일 시스템은 논리적 블록의 개수를 나타낼 수 있고, 데이터 저장 디바이스는 각 논리적 블록에 대한 구체적인 고정 사이즈를 결정할 수 있으며 그리고 나서 논리적 블록의 개수를 물리적 저장 용량으로 변환할 수 있다. 당업자는 물리적 공간 확보 요청에 있어서의 물리적 저장 용량의 양을 나타내는 다른 표시도 인지할 수 있을 것이다.
물리적 공간 확보 요청은 일 실시예에서 기록 요청과 결부된다. 일 실시예에서, 기록 요청은 2단계 과정이며, 물리적 공간 확보 요청과 기록 요청은 별개이다. 다른 실시예에서는, 물리적 공간 확보 요청이 기록 요청의 일부이거나 또는 기록 요청이 묵시적인 물리적 공간 확보 요청을 갖는 것으로 인지된다. 다른 실시예에서는, 물리적 공간 확보 요청이 특정 기록 요청과 결부되지 않고, 대신에 저장 공간의 단순 할당만으로는 충분치 않은 계획된 저장, 중요 작업을 위한 저장 공간의 확보 등과 결부될 수 있다.
소정 실시예에서, 데이터는 원자 데이터 단위(atomic data unit)로 구성될 수 있다. 예를 들면, 원자 데이터 단위는 패킷, 페이지, 논리적 페이지, 논리적 패킷, 블록, 논리적 블록, 하나 이상의 논리적 블록 어드레스(논리적 블록 어드레스는 인접 또는 비인접일 수 있다)와 결부된 데이터의 집합, 파일, 문서, 또는 다른 관련 데이터의 그룹일 수 있다.
일 실시예에서, 원자 데이터 단위는 복수의 비인접 및/또는 비정렬(out of order) 논리적 블록 어드레스 또는 데이터 기록 파이프라인이 단일 원자 데이터 단위로 취급하는 다른 식별자와 결부된다. 본 명세서에서는, 비인접 및/또는 비정렬 논리적 블록을 단일 기록 작업으로 기록하는 것이 원자 기록(atomic write)으로 지칭된다. 일 실시예에서, 하드웨어 컨트롤러는 수신된 순서로 작업을 처리하며, 데이터 기록 파이프라인이 원자 기록 작업을 정상적으로 처리할 수 있도록 클라이언트의 소프트웨어 드라이버는 함께 단일 원자 기록을 위해 하드웨어 컨트롤러에 작업을 송신한다. 하드웨어는 작업을 순서대로 처리하기 때문에, 이는 소정의 원자 기록에 대해 상이한 논리적 블록 어드레스 또는 다른 식별자가 함께 데이터 기록 파이프라인을 통하여 비휘발성 메모리로 이동하는 것을 보장한다. 클라이언트는 일 실시예에서 유보(back out), 재처리, 또는 전원이 복원되었을 때 복구시에 실패한 원자 기록의 처리 및/또는 다른 실패한 또는 종료된 작업을 처리할 수 있다.
일 실시예에서, 장치(500)는 특정 블록이 원자 기록의 일부인지를 나타내는 메타데이터 플래그(metadata flag)로 원자 기록의 블록을 마킹(marking)할 수 있다. 일례의 메타데이터 마킹은 메타데이터 플래그 등과 함께 비휘발성 메모리의 로그 기록/첨부 전용 프로토콜(log write/append only protocol)에 의존한다. 데이터의 저장 및 인터리브 블록(interleaving block)의 방지를 위한 첨부 전용 로그(append only log)의 사용은 원자 기록 멤버쉽 메타데이터가 단일 비트가 될 수 있게 한다. 일 실시예에서, 블록이 원자 기록의 일원이 아니면 플래그 비트는 0이 될 수 있고 그리고 나서 비트는 1이 될 수 있고, 또는 그 반대가 될 수 있다. 블록이 원자 기록의 일원이고 원자 기록의 마지막 블록이면, 일 실시예에서, 그 블록이 원자 기록의 마지막 블록임을 나타낼 수 있도록 메타데이터 플래그가 0이 될 수 있다. 다른 실시예에서는, 원자 기록의 첫 번째 블록, 원자 기록의 중간 블록들, 원자 기록의 말단 등과 같이 원자 기록의 상이한 헤더를 마킹할 수 있도록 상이한 하드웨어 명령이 전송될 수 있다.
전력 손실 또는 클라이언트 또는 다른 저장 디바이스의 고장으로부터의 복구시에, 일 실시예에서 본 장치(500)는 결정성 방향(deterministic direction)으로 비휘발성 메모리 상의 로그를 스캔한다(예를 들어, 일 실시예에서는 로그의 시작점이 말단부이고 로그의 말단부가 헤드이며 데이터는 항상 헤드에 추가된다). 일 실시예에서는, 전력 관리 장치가 로그의 헤드로부터 로그의 말단부 쪽으로 스캔할 수 있다. 원자 기록 복구의 경우, 일 실시예에서 헤드로부터 말단부로 스캔할 때 메타데이터 플래그 비트가 0이면, 그 블록은 단일 블록 원자 기록 또는 비원자 기록 블록이다. 일 실시예에서, 메타데이터 플래그 비트가 0으로부터 1로 변하면, 스캔된 이전 블록 및 가능하게는 스캔된 현재의 블록이 원자 기록의 일원이다. 전력 관리 장치는 일 실시예에서 메타데이트 플래그가 0으로 다시 변할 때까지 로그의 스캔을 지속하며, (0으로 변하는) 로그의 그 지점에서, 스캔된 이전 블록이 원자 기록의 마지막 일원이 되고 원자 기록을 위해 저장된 첫 번째 블록이 된다.
일 실시예에서, 비휘발성 메모리는 새로운 기록이 로그의 앞쪽(즉, 로그의 헤드)에서 진행되는 로그 기반의, 첨부 전용 기록 구조의 기록 시스템(log-based, append only write structured writing system)을 사용한다. 다른 실시예에서, 저장 컨트롤러는 가비지 컬렉션 시스템, 그루머(groomer), 클리너 에이전트(cleaner agent) 등을 사용하여 로그의 삭제된, 오래된, 및/또는 무효한 블록을 회수한다. 저장 컨트롤러는 다른 실시예에서 첨부 전용 기록 구조 및 가비지 컬렉션의 이용을 용이하게 하기 위해 논리적 블록 어드레스를 물리적 어드레스에 매핑하는데 포워드 맵을 사용한다.
본 장치(500)는 일 실시예에서 데이터 저장 디바이스{즉, 저장 디바이스(106)}가 물리적 저장 공간 요청을 충족시킬 수 있는 가용 물리적 저장 용량의 양을 갖고 있는지를 판단하는 물리적 공간 확보 모듈(522)을 포함한다. 물리적 공간 확보 모듈(522)이 가용 물리적 저장 용량의 양이 물리적 공간 확보 요청을 충족시키기에 충분하다고 판단하면, 물리적 공간 확보 모듈(522)은 물리적 저장 공간 요청을 충족시킬 수 있도록 저장 디바이스(106) 상의 가용 물리적 저장 용량의 양을 확보한다. 물리적 저장 공간 요청을 충족시키기 위해 확보된 가용 물리적 저장 용량의 양은 확보된 물리적 용량이다.
확보된 물리적 용량의 양은 물리적 공간 확보 요청으로 요청된 저장 공간의 양과 동일할 수도 있고 동일하지 않을 수도 있다. 예를 들면, 저장 시스템(102)은 메타데이터, 인덱스 정보, 에러 정정 코드 등과 같이, 저장 디바이스(106)에 기록된 데이터와 함께 추가적인 정보를 저장할 필요가 있을 수도 있다. 또한, 저장 시스템(102)은 데이터를 암호화할 수도 있으며, 이는 저장 사이즈에 영향을 미칠 수 있다. 저장 시스템(102)은 데이터를 압축할 수도 있는데, 이는 물리적 공간 확보 요청으로 요청된 양을 충족시키는데 요구되는 물리적 저장 용량의 양을 저감시킬 수 있다.
일 실시예에서, 물리적 공간 확보 요청은 논리적 공간의 양을 포함하며, 요청된 물리적 저장 용량의 양의 표시는 요청된 논리적 공간으로부터 도출된다. 다른 실시예에서, 물리적 공간 확보 요청은 하나 이상의 LID를 포함하고, 요청된 물리적 저장 용량의 양의 표시는 LID와 결부된 데이터의 양으로부터 도출된다. 일례에서, LID와 결부된 데이터는 기록 요청에서와 같이 LID에 배정된 데이터이다. 다른 예에서, LID와 결부된 데이터는 각 LID에 할당된 데이터 용량이며, 이는 LID가 LBA이면 요청된 물리적 저장 용량의 양을 도출하는데 논리적 블록 사이즈가 사용될 수 있는 것과 같은 경우일 수 있다.
다른 실시예에서, 물리적 공간 확보 요청은 데이터의 저장 요청이다. 본 실시예에서는, 물리적 공간 확보 요청이 암시될 수 있으며, 요청된 물리적 저장 용량의 양의 표시는 데이터 및/또는 데이터와 결부된 메타데이터로부터 도출될 수 있다. 다른 실시예에서, 물리적 공간 확보 요청은 데이터의 저장 요청과 결부된다. 이 실시예에서, 요청된 물리적 저장 용량의 양은 물리적 공간 확보 요청에 표시될 수 있고, 데이터의 저장 요청과 관련된 데이터와 상관(相關) 지어질 수 있다.
물리적 공간 확보 모듈(522)은 그리고 나서 물리적 공간 확보 요청을 충족시키는데 필요한 물리적 용량의 양을 결정하기 위해 메타데이터, 압축, 암호화 등을 인자(factor)화할 수 있다. 물리적 공간 확보 요청을 충족시키는데 필요한 물리적 용량의 양은 물리적 공간 확보 요청에 표시된 양과 동일할 수도 있고, 더 크거나 더 작을 수도 있다.
물리적 공간 확보 모듈(522)이 물리적 공간 확보 요청을 충족시키는데 필요한 물리적 용량의 양을 결정하면, 물리적 공간 확보 모듈(522)은 저장 시스템(102)의 하나 이상의 저장 디바이스(106a 내지 106n)가 개별적으로 또는 통합하여 물리적 공간 확보 요청을 충족시키기에 충분한 가용 물리적 저장 용량을 갖고 있는지를 판단한다. 이러한 요청은 특정 저장 디바이스(예를 들면, 106a)상의 공간, 저장 디바이스(106)의 일부가 RAID인 경우일 수 있는 저장 디바이스(106)의 조합의 공간, 또는 저장 시스템(102)에 있어서의 전체적인 가용 공간에 대한 것일 수 있다. 물리적 공간 확보 모듈(522)은 물리적 공간 확보 요청의 구체적 사항에 대한 가용 용량의 결정을 적합화할 수 있다.
물리적 공간 확보 요청이 2개 이상의 저장 디바이스 상의 공간에 대한 것이면, 물리적 공간 확보 모듈(522)은 전형적으로 각 저장 디바이스(106)의 각 논리적-물리적 맵으로부터 또는 저장 디바이스(106)의 그룹의 통합 논리적-물리적 맵으로부터 가용 물리적 저장 용량 정보를 검색하게 된다. 물리적 공간 확보 모듈(522)은 전형적으로 배정된 물리적 어드레스를 조사한다. LID와 물리적 어드레스 사이에는 전형적으로 일대일 관계가 존재하지 않기 때문에 물리적 공간 확보 모듈(522)은 배정된 LID를 살펴봄으로써 가용 물리적 용량을 결정하기 위한 충분한 정보를 갖지 못할 수 있다는 것을 주의할 필요가 있다.
물리적 공간 확보 모듈(522)은 일 실시예에서 물리적 공간 확보 요청에 요청된 용량의 양을 충족시키는데 충분한 가용 저장 용량을 유지함으로써 물리적 저장 용량을 확보한다. 전형적으로, 로그 구조 파일 시스템 또는 다른 순차 저장 디바이스에서, 물리적 공간 확보 모듈(522)은 저장 디바이스(206)의 특정 물리적 구역 또는 물리적 어드레스 범위를 확보하는 대신에 물리적 저장 용량을 확보할 수 있다.
예를 들면, 저장 디바이스(106)는 500GB(500 기가바이트)의 가용 물리적 저장 용량을 가질 수 있다. 저장 디바이스(106)는 데이터를 수신하고 그 데이터를 하나 이상의 첨부 지점(append point)에 저장할 수 있으며, 그에 따라 저장 용량을 저감시킬 수 있다. 한편, 가비지 컬렉션 또는 저장 공간 복구 작업이 이면(background)에서 실행되고 있을 수 있으며, 이는 회수된 삭제 블록을 저장 풀(storage pool)로 복귀시켜서 저장 공간을 증대시킬 수 있다. 데이터가 저장되고 데이터가 해제되는 위치가 지속적으로 바뀜으로써, 물리적 공간 확보 모듈(522)은 일 실시예에서 고정된 물리적 저장 위치를 확보할 필요없이 저장 용량을 감시한다.
물리적 공간 확보 모듈(522)은 다양한 방식으로 저장 공간을 확보할 수 있다. 예를 들면, 물리적 공간 확보 모듈(522)은 저장 디바이스(106) 상의 가용 물리적 저장 용량이 확보된 저장 용량으로 줄어들었으면 새로운 데이터의 저장을 중지할 수 있으며, 저장 디바이스(106) 상의 물리적 저장 용량이 확보된 물리적 저장 용량보다 많은 소정 레벨까지 줄어들었으면 경보(alert)를 전송할 수 있고, 또는 확보된 물리적 저장 용량보다 많은 가용 저장 용량을 유지할 수 있는 다른 조치 또는 조치의 조합을 취할 수 있다.
다른 실시예에서, 물리적 공간 확보 모듈(522)은 데이터 저장 디바이스 상의 물리적 구역, 물리적 어드레스의 범위 등을 확보한다. 예를 들면, 물리적 공간 확보 모듈(522)이 소정량의 삭제 블록을 확보하였으면, 물리적 공간 확보 요청과 결부된 데이터는 확보된 구역 또는 어드레스 범위에 저장될 수 있다. 데이터는 확보된 저장 구역 또는 범위에 순차 저장될 수 있다. 예를 들면, 어떤 데이터는 특정 위치에 저장하는 것이 바람직할 수 있다. 당업자는 물리적 공간 확보 요청에 응답하여 특정 구역, 어드레스 범위 등을 확보하는 이유를 인지할 수 있을 것이다.
일 실시예에서, 본 장치(500)는 물리적 공간 확보 모듈(522)이 데이터 저장 디바이스가 물리적 공간 확보 요청을 충족시키는 가용 물리적 저장 공간의 양을 갖고 있는지를 판단하는 것에 응답하여, 요청된 물리적 저장 용량의 양의 이용 가능(availability) 또는 이용 불가능(unavailability)을 나타내는 표시를 클라이언트(110) 또는 파일 서버(114)/파일시스템에 전송하는 물리적 공간 확보 회신 모듈(524)을 포함한다. 예를 들어, 물리적 공간 확보 모듈(522)이 가용 물리적 공간이 물리적 공간 확보 요청을 충족시키기에 충분하다고 판단하면, 물리적 공간 확보 회신 모듈(524)은 물리적 공간 확보 모듈(522)이 요청된 저장 용량을 확보했다는 통지 또는 다른 적절한 통지를 전송할 수 있다.
다른 한편, 물리적 공간 확보 모듈(522)이 저장 디바이스(106) 또는 저장 시스템(102)이 물리적 공간 확보 요청을 충족시키기에 충분한 가용 물리적 저장 용량을 갖고 있지 않다고 판단하면, 물리적 공간 확보 회신 모듈(524)은 실패 통지 또는 요청된 물리적 저장 공간이 확보되지 않았다는 다른 표시자를 전송할 수 있다. 요청된 저장 공간의 이용 가능 또는 이용 불가능의 표시는 예를 들면 기록 작업의 실패 가능성을 줄이기 위해 데이터를 기록하기 전에 사용될 수 있다.
본 장치(500)는 다른 실시예에서 취소 유발 사건(cancellation triggering event)에 응답하여 확보된 물리적 저장 공간 전체 또는 일부를 취소하는 물리적 공간 확보 취소 모듈(526)을 포함한다. 취소 유발 사건은 많은 다양한 형태가 될 수 있다. 예를 들면, 취소 유발 사건은 저장 디바이스(106) 또는 저장 시스템(102)에 기록되며 물리적 공간 확보 모듈(522)에 의해 확보된 가용 공간과 결부된 데이터가 저장 시스템(102)에 이전에 기록되었다고 판단하는 것을 포함할 수 있다.
예를 들어, 중복제거(deduplication) 과정이 그 데이터가 이미 저장 시스템(102)에 존재한다고 판단하면, 이전에 저장된 데이터가 2개 이상의 LID에 매핑될 수 있기 때문에 그 데이터는 다시 저장될 필요가 없을 수 있다. 보다 기본적인 예에서, 확보된 물리적 저장 공간이 기록 요청과 결부되어 있고 기록 요청이 실행되면, 취소 유발 사건은 기록 요청의 데이터 저장의 완료가 될 수 있다. 이 예에서, 물리적 공간 확보 취소 모듈(516)은 확보된 물리적 저장 용량을 줄이거나 취소할 수 있다.
기록된 데이터가 확보된 공간 미만이면, 물리적 공간 확보 취소 모듈(526)은 단지 확보된 양을 줄일 수 있고, 또는 그 기록 요청과 결부된 확보된 물리적 저장 용량을 전부 취소할 수 있다. 확보된 물리적 공간 미만으로 기록하는 것은 요청의 기초(basis)인 데이터 단위의 일부를 기록하는 것에 기인하며, 물리적 공간 확보 요청과 결부된 데이터는 증분식으로(incrementally) 기록된다. 일 실시예에서, 물리적 저장 공간은 요청에 대응하고 그리고 나서 압축 또는 유사한 절차로 인해 물리적 저장 공간 확보 모듈(522)에 의해 확보되며, 저장된 데이터의 저장 공간은 그 확보된 물리적 저장 용량보다 작다.
다른 실시예에서, 취소 유발 사건은 타임아웃(timeout)일 수 있다. 예를 들어, 물리적 공간 확보 요청이 기록 요청과 결부되고 물리적 공간 확보 모듈(522)이 물리적 저장 용량을 확보하면, 기록 요청과 결부된 데이터는 물리적 공간 확보 취소 모듈(526)이 물리적 저장 공간의 확보를 취소할 수 있는 소정량의 시간의 종료 이전에는 기록되지 않는다. 당업자는 확보된 물리적 용량의 전체 또는 일부를 취소하는 다른 이유를 인지할 수 있을 것이다.
물리적 공간 확보 모듈(522)은 일 실시예서 확보된 물리적 저장 용량의 양을 증가시키거나 또는 달리 변경할 수 있다. 예를 들면, 물리적 공간 확보 요청 모듈(520)이 다른 물리적 공간 확보 요청을 수신할 수 있으며, 이는 다른 물리적 공간 확보 요청과 결부될 수도 있고 결부되지 않을 수도 있다. 물리적 공간 확보 요청이 이전에 확보된 물리적 저장 용량과 결부되어 있는 경우, 물리적 공간 확보 모듈은 확보된 물리적 저장 용량을 증가시킬 수 있다. 물리적 공간 확보 요청이 이전에 확보된 물리적 저장 용량과 결부되어 있지 않은 경우, 물리적 공간 확보 모듈(522)은 별도로 물리적 저장 용량을 확보하고 추가적인 저장 용량을 개별적으로 추적할 수 있다. 당업자는 가용 물리적 저장 용량을 요청하고 확보하는 다른 방식 및 확보된 용량을 변경 또는 취소하는 다른 방식도 인지할 수 있을 것이다. 표준 관리는 물리적 저장 용량을 관리하고 사용자에게 조치가 취해져야 한다는 표시자를 제공할 수 있도록, 소정의 한계치(threshold), 트리거(trigger), 경고(alarm) 등을 포함해야 한다. 전형적으로 이는 관리 시스템에서 행해질 수 있다. 하지만, 관리 시스템이 디바이스들을 관리하에 두어야 하거나 또는 기준이 만족될 때 상기 디바이스들이 매니저를 인터럽트하도록 구성/프로그램되어야 한다(선호됨).
본 장치(500)는 다른 실시예에서 클라이언트(110) 또는 파일 서버(114)/파일 시스템으로부터 데이터의 기록 요청에 응답하여, 데이터에 하나 이상의 미배정 LID를 배정하고 배정된 LID를 클라이언트(110) 또는 파일 서버(114)/파일 시스템에 전송하는 LID 배정 모듈(528)을 포함한다. LID 배정 모듈(528)은 일 실시예에서 LID의 온 더 플라이(on-the-fly) 할당 및 배정을 가능케 한다. 데이터의 기록 요청은 다른 실시예에서 2단계 과정일 수 있다. LID 배정 모듈(528)은 기록하고자 하는 데이터에 대해 제1단계에서 LID를 할당할 수 있고 그리고 나서 제2단계에서 데이터가 할당된 LID와 함께 기록될 수 있다.
일 실시예에서, LID 할당 모듈(402)은 인접 범위의 LID를 할당한다. LID 할당 모듈(402)은 연속 범위의 LID도 또한 할당할 수 있다. 논리적 공간이 큰 경우에, LID 할당 모듈(402)은 할당된 LID를 프래그먼트(fragment)화할 필요 없이 연속적인 LID의 범위를 선택할 수 있다. 다른 실시예에서, LID 할당 모듈(402)은 인접하지 않을 수 있지만 다른 할당된 논리적 공간들과 산재(散在)된 논리적 공간을 이용할 수 있는 LID를 배정한다.
본 장치(500)는 다른 실시예에서 DMA(direct momory access) 및/또는 RDMA(remote DMA) 동작으로 클라이언트(110)로부터 데이터를 인출(pull)하는 DMA 모듈(530)을 포함한다. 이 데이터는 LID 할당 모듈(402)에 의해 배정된 LID와 결부되어 있다. 데이터는 먼저 기록 요청과 같은 데이터 저장 요청에서 식별되며, 그리고 나서 저장 컨트롤러(104)가 DMA 및/또는 RDMA를 실행하여 클라이언트(110)로부터 저장 시스템(102)의 저장 디바이스(106)로 데이터를 인출한다. 다른 실시예에서, 기록 요청은 DMA 또는 RDMA를 이용하지 않는 대신에 기록 요청은 데이터를 포함한다. 다시 말하지만, 데이터는 LID 할당 모듈(402)에 의해 배정된 LID와 결부된다.
일 실시예에서, 본 장치(500)는 삭제 모듈(532)을 포함한다. 데이터 저장 디바이스로부터 데이터를 삭제하는 요청에 응답하여, 일 실시예에서, 삭제 모듈(532)은 삭제되는 데이터가 저장된 저장 공간과 그 대응하는 LID 사이의 매핑을 제거한다. 삭제 모듈(532)은 또한 삭제된 데이터의 하나 이상의 물리적 어드레스를 배정 해제할 수도 있고 또한 삭제된 데이터의 하나 이상의 물리적 어드레스를 할당 해제할 수도 있다.
순서도
도 6은 본 발명에 따른 데이터 저장 공간을 할당하는 방법(600)의 일 실시예를 예시하는 개략적인 순서도이다. 본 방법(600)이 개시되면, 할당 요청 모듈(402)이 논리적 공간을 할당하는 할당 요청을 클라이언트(110), 파일 서버(114)/파일 시스템, 마스터 할당 매니저(124) 등과 같은 요청 디바이스로부터 수신한다(602). 할당 요청은 데이터 저장 디바이스에 수신된다. 논리적 공간은 데이터 저장 디바이스에 데이터를 저장하기 위한 것이다.
논리적 용량 모듈(404)은 데이터 저장 디바이스의 논리적 공간이 할당 요청을 충족시키기에 충분한 미할당 논리적 공간을 포함하는지를 판단하며(604), 이러한 판단은 논리적-물리적 맵의 검색을 포함한다. 논리적-물리적 맵은 배정된 LID에 대응하는 데이터가 데이터 저장 디바이스에 저장되는 하나 이상의 물리적 위치에 매핑된 논리적 공간의 배정된 LID를 포함하고, 배정된 LID는 이 배정된 LID에 매핑된 하나 이상의 물리적 어드레스와 다르다. 할당 답신 모듈(406)이 요청 디바이스에 답신을 전송함으로써, 본 방법(600)이 종료된다.
도 7은 본 발명에 따른 데이터 저장 공간을 할당하는 방법(700)의 일 실시예를 예시하는 개략적인 순서도이다. 본 방법(700)이 개시되면, 물리적 용량 요청 모듈(502)은 요청 디바이스로부터 물리적 용량 요청을 수신한다(702). 물리적 용량 요청은 데이터 저장 디바이스에 수신된다. 물리적 용량 요청은 데이터 저장 디비이스 내의 가용 물리적 저장 용량의 양에 대한 요청을 포함한다. 물리적 용량 요청은 예를 들면, 구체적인 물리적 용량의 양일 수도 있고, 데이터 저장 요청으로부터 도출될 수도 있고, 기타일 수도 있다.
물리적 용량 할당 모듈(504)은 데이터 저장 디바이스 상의 가용 물리적 저장 용량의 양을 결정하며(704), 가용 물리적 자장 용량의 양은 데이터 저장 디바이스 내의 미배정 저장 위치의 물리적 저장 용량을 포함한다. 물리적 용량 답신 모듈(506)은 물리적 용량 할당 모듈(504)이 데이터 저장 디바이스 상의 가용 물리적 저장 용량의 양을 결정하는 것에 응답하여 요청 디바이스에 답신을 전송하며(706), 본 방법(700)이 종료된다.
도 8은 본 발명에 따른 물리적 저장 공간을 확보하는 방법(800)의 일 실시예를 예시하는 개략적인 순서도이다. 본 방법(800)이 개시되면, 물리적 공간 확보 요청 모듈(520)이 가용 물리적 저장 공간을 확보하기 위한 물리적 공간 확보 요청을 수신한다(802). 물리적 공간 확보 요청은 요청된 물리적 저장 용량의 양을 나타내는 표시를 포함한다. 물리적 저장 용량의 양의 표시는 바이트의 수 또는 논리적 블록의 개수, 특정 데이터의 저장 요청, 또는 다른 간접적인 표시와 같이 다양한 형태를 취할 수 있으며, 물리적 저장 용량의 양의 표시는 요청으로부터 도출된다.
물리적 공간 확보 모듈(522)은 데이터 저장 디바이스가 물리적 저장 공간 요청을 충족시킬 수 있는 가용 물리적 저장 용량을 갖고 있는 지를 판단한다(804). 물리적 공간 확보 모듈(522)이 데이터 저장 디바이스가 물리적 저장 공간 요청을 충족시킬 수 있는 가용 물리적 저장 용량을 갖고 있다고 판단하면, 물리적 공간 확보 모듈(522)은 물리적 공간 확보 요청을 충족시키기에 충분한 물리적 저장 용량을 확보하고(806), 물리적 공간 확보 회신 모듈(524)은 요청 클라이언트(110) 또는 파일 서버(114)/파일 서버에 요청된 물리적 저장 공간이 확보되었다는 표시를 전송한다(808).
물리적 할당 모듈(404)은 이러한 확보가 이 확보와 결부된 데이터의 저장에 사용될 때까지 또는 확보가 취소될 때까지 물리적 저장 용량의 확보를 유지하기 위해 충분한 가용 물리적 저장 용량을 유지하며(810), 본 방법(800)이 종료된다. 물리적 공간 확보 모듈(522)이 데이터 저장 디바이스가 물리적 저장 공간 요청을 충족시킬 수 있는 가용 물리적 저장 용량을 갖고 있지 않다고 판단하면, 물리적 공간 확보 회신 모듈(524)은 요청 클라이언트(110) 또는 파일 서버(114)/파일 시스템에 요청된 물리적 저장 공간이 확보되지 않았다는 표시 또는 불충분한 용량에 대한 표시를 전송하고(812), 본 방법(800)이 종료된다.
도 9는 본 발명에 따른 데이터 저장 디바이스에서 할당된 논리 식별자를 배정하는 방법(900)의 일 실시예를 예시하는 개략적인 순서도이다. 본 방법(900)이 시작되면, LID 배정 모듈(528)이 클라이언트(110)로부터 기록 요청을 수신한다(901). 다른 실시예에서는, 이러한 요청이 파일 서버(114)/파일 시스템 또는 시스템(100, 101, 102)의 다른 구성요소로부터 유래된다. 기록 요청은 저장 시스템(102)의 하나 이상의 저장 디바이스(106)에 데이터를 기록하기 위한 요청이며, 데이터는 어떠한 논리 식별자에도 배정되지 않았거나 또는 논리 식별자가 데이터에 할당되지 않았다. 요청은 저장 시스템(102) 및 저장 컨트롤러(104)에 수신될 수 있고, 또는 기록 요청의 데이터에는 LID가 배정되지 않았고 LID 배정 모듈(528)로 요청이 전달되는 것을 다른 구성요소가 인지할 수 있다.
LID 배정 모듈(528)은 하나 이상의 미배정 LID를 데이터에 배정한다(904). 저장 컨트롤러(104)는 데이터를 저장 디바이스(106)에 저장하고, 매핑 모듈(518)은 데이터가 저장된 하나 이상의 물리적 어드레스를 배정된 LID에 매핑한다(908). 데이터가 저장 디바이스(106)에 순차 저장되는 경우, 데이터가 저장되는 물리적 어드레스는 기록 요청 이전에는 전형적으로 알려지지 않으나, 데이터를 저장한 후에 또는 저장 바로 전에 결정된다. LID 배정 모듈(528)은 배정된 LID를 클라이언트(110)에 전송하고(910), 본 방법(900)이 종료된다. 이러한 전송은 데이터가 성공적으로 저장되었다는 확인의 일부일 수 있다.
도 10은 본 발명에 따른 데이터 저장 디바이스(106)에서 할당된 논리 식별자를 배정하는 방법(1000)의 다른 실시예를 예시하는 개략적인 순서도이다. 본 방법(1000)이 개시되면, LID 배정 모듈(528)이 데이터에 LID를 배정하기 위한 요청을 수신하며(1002), 이 LID는 요청을 하는 클라이언트(110)에 할당된다. 일 실시예에서, 상기 요청은 파일 서버(114)/파일 시스템 또는 본 시스템(100, 101, 103) 내의 다른 디바이스로부터 나온다. LID 배정 모듈(528)은 요청을 한 클라이언트(110)에 할당되는 LID를 데이터에 배정한다(1004). LID 배정 모듈(528)은 배정된 LID를 클라이언트(110)에 전송한다(1006).
저장 시스템(102)은 이 저장 시스템(102)의 저장 디바이스(106)에 데이터를 기록하기 위한 기록 요청을 수신하며(1006), 데이터는 이 데이터와 결부된 할당된 LID를 갖는다. 다른 실시예에서는, 기록 요청이 저장 시스템(103)의 2개 이상의 저장 디바이스에 데이터를 저장하기 위한 것으로, 저장 디바이스(106)가 RAID가 되거나 또는 데이터가 1차 저장 디바이스(106) 및 대칭 저장 디바이스(106)에 기록되는 경우가 될 수 있다. 저장 컨트롤러(104)는 데이터를 저장 디바이스(106)에 저장하고(1010), 매핑 모듈(518)은 데이터가 저장되는 하나 이상의 물리적 어드레스를 배정된 LID에 매핑한다(1012). 저장 컨트롤러(104) 또는 저장 시스템(102)의 다른 구성요소가 요청 클라이언트(110)에 기록 확인을 전송하고(1014), 본 방법이 종료된다.
도 11은 본 발명에 따른 저장 디바이스에서 할당 질의를 서비스하는 방법(1100)의 일 실시예를 예시하는 개략적인 순서도이다. 할당 질의 요청 모듈(510)이 데이터 저장 디바이스에 할당 질의를 수신한다(1102). 할당 질의 결정 모듈(512)은 할당 질의에 특정된 기준을 만족하는 하나 이상의 LID를 식별한다(1104). 식별된 LID는 배정되고 할당된 LID, 미배정되고 할당된 LID, 및/또는 미할당 LID를 포함한다. 할당 질의 답신 모듈(514)은 요청 디바이스 또는 다른 지정 디바이스에 할당 질의의 결과를 전송하고(1106), 본 방법(1100)이 종료된다. 이 결과는 식별된 LID의 목록, 기준을 만족하는 LID가 발견되었다는 확인통지, 할당 질의의 기준을 만족하는 LID가 발견되지 않았다는 확인통지 등을 포함할 수 있다.
도 12는 LID를 비휘발성 저장 디바이스{예를 들면, 저장 디바이스(106)}의 저장 위치와 결부시키는 예시적인 데이터 구조의 개략적인 블록도이다. 인덱스(1204)는 복수의 저장 엔트리{예를 들면, 엔트리(1208, 1214, 1216) 등}를 포함하는 트리(tree)(또는 다른 데이터 구조)를 포함할 수 있다. 인덱스(1204)의 각 저장 엔트리는 LID(또는 LID 범위 또는 집합)를 비휘발성 저장 디바이스(106) 상의 하나 이상의 저장 위치와 결부시킬 수 있다. 저장 위치는 LID(1217){예를 들면, 엔트리(1214)에 예시된 바와 같이}, LID의 범위, 집합 등에 의해 식별 및/또는 인덱싱될 수 있다. 인덱스(1204)의 저장 엔트리는 단일 저장 엔트리{예를 들면, 엔트리(1214)}가 LID의 집합, LID의 범위 등을 참조하도록 가변 사이즈 또는 길이를 가질 수 있다. 저장 엔트리의 LID는 인접할 수 있다(예를 들면, 072-083). 1218과 같은 다른 엔트리는 LID의 비인접 집합{예를 들면, LID(454-477 및 535-598)}을 포함할 수 있다. 따라서, 가변 사이즈의 저장 엔트리를 나타내는데 인덱스(1204)가 사용될 수 있다{예를 들면, LID의 임의의 집합 또는 범위의 데이터를 포함하는 비휘발성 저장 디바이스(106)의 하나 이상의 저장 위치에 대응하는 저장 엔트리}.
도 12에 도시된 바와 같이, 저장 엔트리는 {라인(1210)과 같은 라인을 사용하여} LID에 의해 인덱싱될 수 있으며, 이는 신속하면서 효율적인 저장 엔트리 참조(lookup)를 가능케 한다. LID "182"를 포함하는 저장 엔트리에 대한 예시적인 검색은 다음과 같이 진행될 수 있다. 도 12의 예에서는 저장 엔트리(1208)인 루트 저장 엔트리(root storage entry)에서 검색이 시작될 수 있다. 루트 저장 엔트리(1208)와 같이 특정 저장 엔트리에 단일 LID(또는 어드레스 범위)가 포함되는 경우, 검색되는 LID(182)가 저장 엔트리(1208)의 LID보다 낮으면, 저장 엔트리(1208)의 좌측으로 지시 라인(1210)을 따라 검색이 지속될 수 있다. 검색되는 LID(182)가 현재의 저장 엔트리(1208)와 매치되면{예를 들면, 저장 엔트리(1208)의 범위 내에 위치하면}, 검색은 성공적으로 종료되고 현재의 저장 엔트리(1208)가 식별된다. 검색되는 LID(1206)가 현재의 엔트리(1208)의 범위보다 더 크면, 현재의 저장 엔트리(1208)의 우측으로 지시 라인(1212)을 따라 검색이 지속된다. 저장 엔트리가 2개의 LID 또는 어드레스 범위{엔트리(1218)에 도시된 바와 같은 비인접 집합}를 포함하고 검색되는 LID(182)가 열거된 가상 어드레스들 사이에 있는 경우, 현재의 엔트리(1208)의 2개의 LID 사이에 있는 LID를 갖는 엔트리로 중앙의 지시 라인(도시하지 않음)을 따라 검색이 지속된다. 저장 엔트리가 식별될 때까지 또는 리프 저장 엔트리(leaf storage entry)에 이르러서 검색이 실패할 때까지 인덱스(1204)의 아래쪽으로 검색이 지속된다. 도 12의 예에서는, 매치되는 저장 엔트리(1216)에서 검색이 성공적으로 종료된다{예를 들면, 저장 엔트리(1216)는 검색된 LID(182)를 포함한다}.
도 12의 예에서는 LID에 의해 인덱싱되는 B-트리 데이터구조를 이용하여 인덱스(1204)가 구현되었으나, 다른 실시예에서는 인덱스(1204)가 CAM(content addressable memory), 2진 트리, 해시 테이블, 당해 업계에 알려진 다른 데이터 구조를 이용하여 구현될 수도 있고, 사이즈 인덱싱, 저장 위치 인덱싱{예를 들면, 아래에 설명된 리버스 맵(1222)에서와 같이} 등과 같은 다른 유형의 인덱싱을 포함할 수도 있다.
인덱스(1204)의 각 저장 엔트리는 하나 이상의 LID를 비휘발성 저장 디바이스(106)의 각각의 저장 위치와 결부시킬 수 있다. 예를 들면, 엔트리(1214)는 LID 범위(072-083)를 저장 위치(95-106)와 결부시킬 수 있다. 몇몇 실시예에서, 저장 위치는 물리적 어드레스에 의해 식별될 수 있다. 당업자는 저장 위치의 물리적 어드레스가 인덱스(1204)에 저장될 수 있거나 또는 솔리드 스테이트 저장 매체의 하나 이상의 저장 구조로 오프셋될 수 있음을 인지할 수 있을 것이다. 위에서 논의된 바와 같이, 저장 엔트리(1214)의 저장 위치는 (예를 들면, 수정, 복구 작업 등에 기인한) 기저 데이터(underlying data)에 대한 수정으로 인해 변경될 수 있다.
저장 엔트리는 메타데이터(1219)를 더 포함하고 및/또는 참조할 수 있으며, 이는 연령(age), 사이즈, LID 특성(예를 들면, 클라이언트 식별자, 데이터 식별자, 파일명, 그룹 식별자) 등과 같이 LID에 관련된 메타데이터를 포함할 수 있다. 메타데이터(1219)는 LID{예를 들면, 어드레스(1215)}에 의해 인덱싱되는 저장 엔트리와 결부되기 때문에, 메타데이터(1219)는 비휘발성 저장 디바이스(106)의 기저 저장 위치의 위치에 대한 변경{예를 들면, 저장 위치(1217)에 대한 변경}과 무관하게 저장 엔트리(1214)와 결부된 상태로 유지될 수 있다.
인덱스(1204)는 비휘발성 저장 디바이스(106)가 클라이언트 요청에서 참조된 저장 엔트리를 포함하는 지를 효율적으로 결정하는데 및/또는 디바이스(106) 상의 데이터의 저장 위치를 식별하는데 사용될 수 있다. 예를 들면, 비휘발성 저장 디바이스(106)는 특정 LID를 할당하기 위한 클라이언트 요청(1202)을 수신할 수 있다. 이 요청(1202)은 특정 LID, LID 및 길이 또는 오프셋{예를 들면, LID(074)로부터 시작하여 3개의 데이터 단위를 요청}, LID의 집합 등을 특정할 수 있다. 이와 달리 또는 부가적으로, 클라이언트 요청(1202)은 LID의 집합, LID 범위(인접 또는 비인접) 등을 포함할 수 있다.
비휘발성 저장 디바이스(106)는 위에서 설명된 검색 작업을 이용하여 요청된 LID에 대응하는 저장 엔트리가 인덱스(1204)에 존재하는지를 결정할 수 있다. 요청된 LID를 포함하는 저장 엔트리가 인덱스(1204) 내에서 발견되면, 요청(1202)과 결부된 LID는 할당 및 배정되었다고 식별될 수 있다. 따라서, LID에 대응하는 데이터가 비휘발성 저장 디바이스(106)에 저장될 수 있다. 인덱스(1204) 내에서 LID가 발견되지 않으면, LID는 미배정된 것으로(할당되었을 수는 있음) 식별될 수 있다. 저장 엔트리가 LID의 집합 및/또는 LID 범위를 나타낼 수 있기 때문에, 클라이언트 요청은 부분 할당을 초래할 수 있다. 예를 들면, 068-073을 할당하기 위한 요청이 068-071의 LID는 성공적으로 할당할 수 있으나, 072와 073은 저장 엔트리(1214)에 포함되어 있기 때문에 072와 073은 할당을 실패할 수 있다. 부분 할당이 발생하는 경우, 전체 할당 요청이 실패할 수도 있고, 이용 가능한 LID는 할당되고 실패한 LID에 대해서는 다른 LID가 대체할 수 있는 등이 이루어질 수 있다.
도 12에 도시된 예에서는, 저장 요청(1202)에 대응하는 저장 엔트리가 인덱스(1204) 내에 존재하며{저장 엔트리(1214)}, 그에 따라 요청(1202)과 결부된 LID가 할당되고 및 배정된 것으로 식별된다. 그래서, 클라이언트 요청(1202)이 특정된 LID에 있는 데이터를 판독하고자 하면, 저장 엔트리(1214) 내에서 식별된 저장 위치(1217)로부터 데이터가 판독될 수 있고 발신자 또는 요청자에게 회신될 수 있다. 클라이언트 요청(1202)이 식별된 LID를 할당하고자 하면, 할당 요청이 실패할 수 있다(및/또는 위에 기재된 바와 같이 대체 LID가 할당될 수 있다).
인덱스(1204)에 새로운 저장 엔트리가 추가되면, 병합 작업(merge operation)이 이루어질 수 있다. 병합 작업에서는, 기존 저장 엔트리가 하나 이상의 저장 엔트리와 "병합"될 수 있다. 예를 들면, LID(084-088)에 대한 새로운 저장 엔트리가 엔트리(1214)와 병합될 수 있다. 병합은 새로운 어드레스(예를 들면, 072-088)를 포함하기 위해 및/또는 데이터가 저장된 저장 위치를 포함하도록 저장 위치(1217)를 참조하기 위해 저장 엔트리의 LID(1215)를 수정하는 것을 포함할 수 있다.
인덱스(1204) 내의 저장 엔트리는 저장 위치{예를 들면, 어드레스(1217)}에 대한 참조를 포함하는 것으로 도시되어 있으나, 본 개시는 이에 국한되지 않는다. 다른 실시예에서는, 저장 엔트리가 저장 위치에 대한 참조 또는 간접적인 링크를 포함한다. 예를 들면, 저장 엔트리는 저장 위치 식별자{또는 리버스 맵(1222)에 대한 참조}를 포함할 수 있다.
도 12는 리버스 맵(1222)을 포함하는 인덱스의 다른 예도 예시하며, 리버스 맵(1222)은 비휘발성 저장 디바이스(106)의 저장 위치를 논리적 어드레스 공간의 LID와 결부시킬 수 있다. 리버스 맵(1222)은 저장 위치를 유효성 표시자(validity indicator: 1230)와 같은 메타데이터 및/또는 다른 메타데이터(1236)(아래에 설명됨)와 또한 결부시킬 수 있다. 몇몇 실시예에서는, 저장 위치 어드레스(1226) 및/또는 데이터 길이(1228)가 리버스 맵(1222) 내에 명시적으로 포함될 수 있다. 이와 달리, 리버스 맵(1222) 내의 엔트리의 위치 및/또는 배치로부터 저장 위치 어드레스(1226) 및/또는 데이터 길이(1228)가 추정될 수 있으며, 그에 따라 주소(1226) 및/또는 데이터 길이(1228)가 생략될 수 있다. 몇몇 실시예에서, 리버스 맵(1222)은 LID(1234)에 대한 참조를 포함할 수 있다.
위에서 논의된 바와 같이, 리버스 맵(1222)은 메타데이터(1236)를 포함할 수 있으며, 이 메타데이터는 데이터가 저장된 시퀀스(예를 들면, 저장 지점의 "연령" 등도)를 나타내기 위한 시퀀스 표시자(sequence indicator)(예를 들면, 타임스탬프)와 같이, 저장 위치에서 행해진 순차적인 저장 작업과 연관된 메타데이터를 포함할 수 있다. 메타데이터(1236)는 마모도, 신뢰도, 에러율, 방해 상태(disturb status) 등과 같이 저장 매체와 관련된 메타데이터를 더 포함할 수 있다. 메타데이터(1236)는 비휘발성 저장 디바이스(106)의 물리적 저장 용량을 저감시킬 수 있는 신뢰할 수 없는 및/또는 사용할 수 없는 저장 위치를 식별하는데 사용될 수 있다.
리버스 맵(1222)은 비휘발성 저장 디바이스(106)의 저장 구획(예를 들면, 삭제 블록)에 따라 구성될 수 있다. 본 예에서는, 저장 엔트리(1218)에 대응하는 엔트리(1220)가 삭제 블록 n(1238)에 위치된다. 삭제 블록 n(1238) 앞에는 삭제 블록 n-1(1240)이 배치되고, 뒤에는 삭제 블록 n+1(1242)가 배치된다(삭제 블록 n과 n+1의 콘텐츠는 알려지지 않음). 삭제 블록은 미리 정해진 개수의 저장 위치를 포함할 수 있다. 삭제 블록은 저장 복구 작업으로 함께 삭제되는 비휘발성 저장 디바이스(106)의 영역을 지칭할 수 있다.
비휘발성 저장 디바이스(106)의 가용 물리적 저장 용량을 결정하는데 유효성 메타데이터(1230)가 사용될 수 있다{예를 들면, 물리적 용량(또는 경제적 용량)과 유효 데이터를 포함하는 저장 위치 사이의 차이}. 리버스 맵(1222)은 (그루밍 작업을 행하고, 물리적 저장 용량을 결정하는 등을 행하기 위해) 물리적 저장 공간의 효율적인 이동이 가능하도록 저장 구획(예를 들면, 삭제 블록) 또는 삭제 구역에 따라 배열될 수 있다. 따라서, 몇몇 실시예에서, 가용 물리적 저장 용량(및/또는 유효 데이터를 저장하는데 사용되고 있는)을 식별하기 위해 리버스 맵(1222) 내의 저장 위치 및/또는 삭제 블록을 이동함으로써 가용 물리적 용량이 결정될 수 있다.
이와 달리 또는 부가적으로, 리버스 맵(1222)(또는 다른 데이터 구조)은 비휘발성 저장 디바이스(106)의 가용 물리적 용량을 추적하기 위한 표시자(1238)를 포함할 수 있다. 가용 물리적 용량 표시자(1238)는 저장 디바이스(106)의 물리적 저장 용량(또는 경제적 용량)으로 초기화될 수 있으며, 저장 작업이 행해짐에 따라 업데이트될 수 있다. 가용 물리적 저장 용량 표시자(1238)에 업데이트를 유발하는 저장 작업은 이하의 것들을 포함하나 이에 국한되지 않는다: 저장 디바이스(106)에의 데이터의 저장, 저장 디바이스(106) 상의 물리적 용량의 확보, 물리적 용량 확보의 취소, 저장되는 데이터의 사이즈가 확보된 것과 다른 (저장 용량의) 확보와 결부된 데이터의 저장, 신뢰할 수 없는 및/또는 사용할 수 없는 저장 위치 및/또는 사용 구역의 검출(예를 들면, 저장 위치를 더 이상 서비스하지 않음) 등.
도 13은 비휘발성 저장 디바이스의 저장 할당을 관리하는 인덱스(1304)의 다른 예를 도시한다. 도 13의 예에서, 인덱스(1304)는 하나 이상의 할당 엔트리{예를 들면, 할당 엔트리(1314)}를 포함하도록 수정될 수 있다. 할당 엔트리는 클라이언트에 할당되었으나 아직 배정되지는 않은{예를 들면, 비휘발성 저장 디바이스(106)에 저장된 데이터와 결부되지 않은} LID를 추적하는데 사용될 수 있다. 따라서, 저장 엔트리{예를 들면, 엔트리(1308, 1316 및 1318)}와 달리, 할당 엔트리(1314)는 저장 위치(1317)에 대한 참조를 포함하지 않을 수 있으며, 이들 참조는 "미결부", "널(NULL)"로 설정되거나 생략될 수 있다. 유사하게, 할당 엔트리(1314)와 결부된 메타데이터(1319)는 엔트리가 배정되지 않았다는 것 및/또는 데이터와 결부되지 않았다는 것을 나타낼 수 있다.
인덱스(1304)는 {예를 들면, 인덱스(1304)를 이동함으로써} 논리적 어드레스 공간의 가용 논리적 용량을 결정하는데 사용될 수 있다. 가용 논리적 용량은 (저장 엔트리를 사용하여) 배정된 LID뿐만 아니라 (1314와 같은 할당 엔트리를 사용하여) 할당되었으나 아직 배정되지 않은 LID도 고려할 수 있다.
도 13에 도시된 바와 같이, 몇몇 실시예에서 할당 엔트리(1314)는 저장 엔트리에 의해 인덱스(1304) 내에 유지될 수 있다. 이와 달리, 할당 엔트리는 별개의 인덱스(또는 다른 데이터 구조)로 유지될 수도 있다. 할당 엔트리가 비휘발성 저장 디바이스(106) 상의 데이터와 결부되어지면(예를 들면, 저장 위치와 결부되어짐), 할당 엔트리는 수정 및/또는 저장 엔트리로 교체될 수 있다.
몇몇 실시예에서, 인덱스(1304){또는 인덱스(1204)}는 논리적 어드레스 공간의 가용 논리적 용량을 추적하는 표시자(1330)를 포함할 수 있다. 가용 논리적 용량은 저장 디바이스(106)에 의해 제공된 논리적 어드레스 공간에 따라 초기화될 수 있다. 인덱스(1304)의 변경은 가용 논리적 용량 표시자(1330)를 업데이트시킬 수 있다. 이러한 변경은 이하의 것들을 포함하나 이에 국한되지 않는다: 새로운 할당 엔트리의 추가, 할당 엔트리의 제거, 저장 엔트리의 추가, 할당 엔트리의 제거 등.
도 14는 비휘발성 저장 디바이스에서 저장부를 할당하는데 사용될 수 있는 미할당 인덱스(1444)의 예를 도시한다. 인덱스(1444)는 엔트리(1450)를 포함할 수 있으며, 이 엔트리(1450)는 위에서 설명된 LID 인덱스(1204 및/또는 1304)에 있는 "홀(hole)"에 대응될 수 있다. 따라서, 가용 인덱스(1444)에 있는 엔트리(1450)는 이용 가능한(예를 들면, 할당되지도 배정되지도 않은) LID(및/또는 LID 범위, 집합 등)에 대응될 수 있다. 인덱스(1444)는 논리적 저장 공간의 논리적 저장 용량을 신속히 결정하는데 및/또는 클라이언트 요청에 응답하여 할당할 LID를 식별하는데 사용될 수 있다. 도 14의 예에서, 인덱스(1444)의 엔트리는 LID에 의해 인덱싱되는 것으로 도시되어 있다. 하지만, 몇몇 실시예에서는 인덱스(1444)가 다른(추가적인) 방식으로 인덱싱될 수 있다. 예를 들면, 미할당 인덱스(1444)는 LID뿐만 아니라 LID 범위(예를 들면, LID 범위의 사이즈)에 의해서도 인덱싱될 수 있다. 이러한 인덱싱은 (예를 들면, 논리적 어드레스 공간의 "홀"을 효율적으로 채움으로써) 클라이언트 요청에 따른 크기의 미할당 LID를 식별하는데 사용될 수 있다.
도 15는 저장부를 할당하는 방법(1500)의 일 실시예의 순서도이다. 위에서 설명한 바와 같이, 본 방법(1500)의 단계는 특정 장치 구성요소에 결부될 수 있으며 및/또는 비일시성(non-transitory) 기계판독 가능 저장 매체에 저장된 기계판독 가능 명령을 이용하여 구현될 수 있다.
단계(1510)에서, 비휘발성 저장 디바이스가 사용될 수 있도록 초기화된다. 초기화는 통신 인터페이스(예를 들면, 버스, 네트워크 등)와 같이 비휘발성 저장 디바이스{예를 들면, 솔리드 스테이트 저장 디바이스(106)}를 위한 자원(resoures)의 할당, 휘발성 메모리의 할당, 솔리드 스테이트 저장 매체의 액세스 등을 포함할 수 있다. 초기화는 논리적 어드레스 공간의 제공, 하나 이상의 인덱스(예를 들면, 도 12 내지 도 14와 연계되어 위에서 설명된 인덱스들)의 초기화 등을 더 포함할 수 있다.
단계(1520)에서, 비휘발성 저장 디바이스는 하나 이상의 클라이언트에 논리적 공간을 제공할 수 있다. 단계(1520)는 하나 이상의 클라이언트 등이 액세스할 수 있는 인터페이스(예를 들면, API)를 구현 및/또는 제공하는 것을 포함할 수 있다.
단계(1530)에서, 비휘발성 저장 디바이스는 본 방법(1500)에 의해 행해지는 논리적 할당 작업과 관련된 메타데이터를 유지할 수 있다. 논리적 할당 작업은 단계(1520)에서 제공된 논리적 어드레스 공간에서의 작업과 관련될 수 있으며,논리적 용량의 할당, 저장 위치에 논리적 용량의 배정 등을 포함할 수 있으나 이에 국한되지 않는다. 메타데이터는 이하의 것들을 포함하나 이에 국한되지 않는다: 논리적 어드레스 공간의 LID를 비휘발성 저장 디바이스의 저장 위치와 결부시키는 인덱스; 저장 공간을 LID와 결부시키는 인덱스{예를 들면, 도 12의 인덱스(1204)}; 결부된 저장 위치를 갖지 않는 할당된 LID를 나타내는 할당 엔트리{예를 들면, 도 13의 인덱스(1304)}; 미할당 인덱스{예를 들면, 도 14의 인덱스(1444)}, 미할당 논리적 어드레스 공간의 표시자{예를 들면, 도 13의 표시자(1330)}를 유지하는 것 등.
단계(1540)에서, 논리적 어드레스 공간의 LID와 관련된 클라이언트 요청이 수신될 수 있다. 클라이언트 요청은 특정 LID 및/또는 논리적 용량이 할당될 수 있는지를 결정하기 위한 질의, LID 및/또는 논리적 용량의 할당 요청, 비휘발성 저장 디바이스에의 데이터의 저장 요청 등을 포함할 수 있다.
단계(1550)에서는, 단계(1530)에서 유지된 메타데이터가 클라이언트 요청이 충족될 수 있는지를 판단하기 위해 참조될 수 있다. 단계(1550)는 논리적 어드레스 공간의 가용 논리적 용량을 결정하고 및/또는 위에서 설명한 바와 같이 가용 LID(또는 LID 범위)를 식별하기 위해 단계(1530)에서 유지된 메타데이터(예를 들면, 인덱스 및/또는 표시자)를 참조하는 것을 포함할 수 있다.
단계(1560)에서, 본 방법(1500)은 클라이언트 요청에 대한 응답을 제공할 수 있으며, 이는 요청이 충족될 수 없으면 그렇다는 것을 나타내는 응답을 제공하는 것을 포함할 수 있다. 클라이언트 요청이 충족될 수 있으면, 응답을 제공하는 것은 이하의 것들 중 하나 이상을 포함할 수 있다: 할당이 충족될 수 있다는 표시자, 요청을 충족하는 LID의 할당, 요청을 충족하는 할당된 LID의 제공, 하나 이상의 요청된 LID 및/또는 하나 이상의 추가적인 LID의 제공(예를 들면, 요청된 LID 집합의 일부가 할당될 수 있으면) 등.
단계(1560)에 이어서, 단계(1530)로 되돌아 갈 수 있으며, 이곳에서 본 방법(1500)은 단계(1560)에서 행해진 할당 작업(존재하는 경우)에 따라 메타데이터(예를 들면, 인덱스, 표시자 등)를 업데이트할 수 있다.
도 16은 저장부를 할당하는 방법(1600)의 일 실시예를 예시하는 순서도이다. 위에서 설명된 바와 같이, 본 방법(1600)의 단계는 특정 장치 구성요소에 결부될 수 있으며 및/또는 비일시성 기계판독 가능 저장 매체에 저장된 기계판독 가능 명령을 이용하여 구현될 수 있다.
단계(1610), 단계(1620), 및 단계(1630)에서, 본 방법(1600)은 초기화되고, 하나 이상의 클라이언트에 논리적 저장 공간을 제공하고, 및/또는 본 방법(1600)에 의해 행해지는 논리적 작업과 관련된 메타데이터를 유지할 수 있다.
단계(1632)에서 본 방법(1600)은 본 방법(1600)에 의해 행해지는 물리적 저장 작업과 관련된 메타데이터를 유지할 수 있다. 이 저장 작업은 이하의 것들을 포함하나 이에 국한되지 않는다: 물리적 저장 용량의 확보, 물리적 저장 용량 확보의 취소, 비휘발성 저장 디바이스에의 데이터의 저장, 물리적 저장 용량의 할당 해제, 그루밍 작업(예를 들면, 가비지 컬렉션, 에러 취급 등), 물리적 저장 공간 경제화 등. 위에서 논의된 바와 같이, 단계(1632)에서 유지되는 메타데이터는 이하의 것들을 포함하나 이에 국한되지 않는다: 논리적 어드레스 공간의 LID를 비휘발성 저장 디바이스의 저장 위치와 결부시키는 인덱스; 저장 공간을 LID와 결부시키는 인덱스{예를 들면, 도 12의 인덱스(1204)}; 결부된 저장 위치를 갖지 않는 할당된 LID를 나타내는 할당 엔트리{예를 들면, 도 13의 인덱스(1304)}; 미할당 인덱스{예를 들면, 도 14의 인덱스(1444)}, 미할당 논리적 어드레스 공간의 표시자{예를 들면, 도 13의 표시자(1330)}를 유지하는 것 등.
단계(1642)에서, 비휘발성 저장 디바이스의 물리적 저장 용량과 관련된 클라이언트 요청이 수신될 수 있다. 클라이언트 요청은 물리적 저장 용량이 이용 가능한지를 결정하기 위한 질의, 물리적 저장 용량의 확보 요청, 데이터의 저장 요청, 데이터의 할당 해제 요청(예를 들면, 트림) 등을 포함할 수 있다.
단계(1650)에서, 단계(1630) 및/또는 단계(1632)에서 유지되는 메타데이터는 클라이언트 요청이 충족될 수 있는지를 판단하기 위해 참조될 수 있다. 단계(1650)는 비휘발성 저장 디바이스의 가용 물리적 저장 용량을 결정하고 및/또는 위에서 설명한 바와 같이 특정 LID(예를 들면, 할당 해제 요청 또는 트림)와 결부된 저장 위치를 식별하기 위해 단계(1630) 및/또는 단계(1632)에서 유지되는 메타데이터를 참조하는 것을 포함할 수 있다.
단계(1660)에서, 본 방법(1600)은 클라이언트 요청에 대한 응답을 제공할 수 있으며, 이는 요청이 충족될 수 없으면 그렇다는 것을 나타내는 응답을 제공하는 것을 포함할 수 있다. 클라이언트 요청이 충족될 수 있으면, 응답을 제공하는 것은 이하의 것들 중 하나 이상을 포함할 수 있다: 클라이언트 요청이 충족될 수 있다는 것/충족되었다는 것을 나타내는 것, 클라이언트를 위한 물리적 저장 용량의 확보, 물리적 저장 용량 확보의 취소, 비휘발성 저장 디바이스에의 데이터의 기록, 물리적 저장 용량의 할당 해제 등.
본 발명은 그 사상 및 본질적인 특징으로부터 벗어남이 없이 다른 구체적인 형태로 실시될 수 있다. 기재된 실시예는 모든 측면에서 단지 예시를 위한 것일 뿐 한정하지 않은 것으로 간주된다. 따라서, 본 발명의 범위는 위의 상세한 설명이 아니라 첨부된 특허청구범위에 의해 규정된다. 특허청구범위의 의미 및 동등 범위 내의 모든 변경은 그 범위 내에 있는 것으로 여겨진다.
100, 101, 103: 데이터 저장 공간을 할당하는 시스템
102: 저장 시스템 104: 저장 컨트롤러
106a - 106n: 저장 디바이스 108: 서버
110: 클라이언트 112: 컴퓨터 네트워크
114: 파일 서버 116: 저장 인터페이스
118: 저장 디바이스 드라이버
120: 저장 디바이스 인터페이스
122: 저장 기기 124: 마스터 할당 매니저
202: 솔리드 스테이트 저장 디바이스 컨트롤러
204: 솔리드 스테이트 저장 컨트롤러
204a - 204n: 솔리드 스테이트 저장 컨트롤러(0 내지 N)
206: 솔리드 스테이트 저장 디바이스
207: 솔리드 스테이트 저장부
207a - 207n: 솔리드 스테이트 저장부
210: 저장 I/O 버스 301: 데이터 기록 파이프라인
303: 데이터 판독 파이프라인 402: 할당 요청 모듈
404: 논리적 용량 모듈 406: 할당 답신 모듈

Claims (28)

  1. 비휘발성 데이터 저장부를 할당하는 방법으로서,
    복수의 논리 식별자(LID: logical identifier)를 포함하는 논리적 어드레스 공간을 저장 클라이언트에 제공하는 단계와,
    상기 논리적 어드레스 공간 내의 LID를 비휘발성 저장 디바이스(storage device) 상의 각각의 저장 위치와 결부시키는 인덱스를 유지하는 단계와,
    상기 논리적 어드레스 공간 내의 논리적 용량을 할당하는 클라이언트 요청이 충족될 수 있는지를 판단하는 인덱스를 참조하는 단계, 및
    상기 클라이언트 요청이 충족될 수 있는지를 나타내는 응답을 제공하는 단계를
    포함하는, 비휘발성 데이터 저장부의 할당 방법.
  2. 제1항에 있어서, 상기 클라이언트 요청은 상기 논리적 어드레스 공간 내의 LID의 집합을 식별하며,
    상기 클라이언트 요청이 충족될 수 있는지를 판단하는 단계는, 식별된 LID의 집합의 하나 이상의 LID가 상기 인덱스 내에 있는지를 판단하는 단계를 포함하는, 비휘발성 데이터 저장부의 할당 방법.
  3. 제1항에 있어서, 상기 클라이언트 요청은 상기 논리적 어드레스 공간 내의 정렬된 LID의 집합(ordered set of LID)을 식별하며,
    상기 클라이언트 요청이 충족될 수 있는지를 판단하는 단계는, 식별된, 정렬된 LID의 집합의 하나 이상의 LID가 상기 인덱스 내에 있는지를 판단하는 단계를 포함하는, 비휘발성 데이터 저장부의 할당 방법.
  4. 제1항에 있어서, 상기 클라이언트 요청이 충족될 수 있는지를 판단하는 단계는
    상기 논리적 어드레스 공간의 미배정 논리적 용량을 결정하는 단계와,
    상기 미배정 논리적 용량을 요청된 논리적 용량과 비교하는 단계를
    포함하는, 비휘발성 데이터 저장부의 할당 방법.
  5. 제1항에 있어서, 결부된 저장 위치를 갖고 있지 않는 LID의 할당을 나타내는 할당 엔트리(allocation entry)을 유지하는 단계와,
    할당 인덱스를 사용하여 미할당 논리적 용량을 결정하는 단계를
    더 포함하며,
    상기 클라이언트 요청이 충족될 수 있는지를 판단하는 단계는 요청된 논리적 용량과 상기 미할당 논리적 용량을 비교하는 단계를 포함하는,
    비휘발성 데이터 저장부의 할당 방법.
  6. 제5항에 있어서, 상기 할당 엔트리는 상기 인덱스 내에 유지되는, 비휘발성 데이터 저장부의 할당 방법.
  7. 제1항에 있어서, 상기 논리적 어드레스 공간 내의 미할당 LID를 포함하는 미할당 인덱스를 유지하는 단계를
    더 포함하며,
    상기 판단하는 단계는 상기 미할당 인덱스 내의 LID를 식별하는 단계를 포함하는, 비휘발성 데이터 저장부의 할당 방법.
  8. 제1항에 있어서, 상기 응답을 제공하는 단계는:
    상기 클라이언트 요청을 충족하는 할당된 LID를 제공하는 단계와,
    상기 요청이 충족될 수 있음을 나타내는 단계와,
    상기 요청이 충족될 수 없음을 나타내는 단계, 및
    상기 클라이언트 요청을 충족하는 LID가 할당되었음을 나타내는 단계
    중 하나를 포함하는, 비휘발성 데이터 저장부의 할당 방법.
  9. 제1항에 있어서, 상기 클라이언트 요청은 할당을 위한 제1의 LID를 포함하고,
    상기 응답을 제공하는 단계는 상기 제1의 LID가 할당되는 것에 응답하여 제2의, 다른 LID을 제공하는 단계를 포함하는,
    비휘발성 데이터 저장부의 할당 방법.
  10. 제1항에 있어서, 상기 클라이언트 요청은 상기 비휘발성 저장 디바이스에 저장될 데이터와 관련되며,
    상기 클라이언트 요청과 관련된 데이터를 상기 비휘발성 저장 디바이스의 저장 위치에 저장하는 단계와,
    상기 저장 위치를 상기 인덱스 내의 LID와 결부시키는 단계를
    더 포함하는, 비휘발성 데이터 저장부의 할당 방법.
  11. 제1항에 있어서, 상기 인덱스는:
    상기 비휘발성 저장 디바이스의 복수의 저장 위치와 결부된 LID와,
    복수의 LID와 결부된 저장 위치
    중 하나를 포함하는, 비휘발성 데이터 저장부의 할당 방법.
  12. 제1항에 있어서, 상기 논리적 어드레스 공간은 상기 비휘발성 저장 디바이스의 물리적 저장 용량을 초과하는, 비휘발성 데이터 저장부의 할당 방법.
  13. 제12항에 있어서,
    상기 비휘발성 저장 디바이스의 저장 위치에 배정되지 않은 할당된 LID에 물리적 저장 용량을 할당하는 요청을 수신하는 단계와,
    상기 비휘발성 저장 디바이스의 가용(可用) 물리적 저장 용량을 결정하는 단계, 및
    상기 가용 물리적 저장 용량이 상기 요청을 충족하는지를 나타내는 응답을 제공하는 단계를
    더 포함하는, 비휘발성 데이터 저장부의 할당 방법.
  14. 제13항에 있어서, 상기 요청을 충족시키는 것에 응답하여,
    상기 비휘발성 저장 디바이스의 저장 위치에 데이터를 저장하고,
    상기 저장 위치에 대한 물리적 어드레스를 상기 인덱스 내의 상기 요청의 LID에 배정하는,
    비휘발성 데이터 저장부의 할당 방법.
  15. 비휘발성 저장부에서의 물리적 용량의 관리 방법으로서,
    비휘발성 저장 디바이스에 의해, 복수의 LID를 포함하는 논리적 어드레스 공간을 제공하는 단계로서, 상기 논리적 어드레스 공간은 상기 비휘발성 저장 디바이스의 물리적 저장 용량을 초과하는, 논리적 어드레스 공간을 제공하는 단계와,
    상기 논리적 어드레스 공간 내의 LID를 상기 비휘발성 저장 디바이스의 저장 공간과 결부시키는 인덱스를 유지하는 단계, 및
    비휘발성 저장 디바이스의 가용 물리적 저장 용량을 결정하기 위해 상기 인덱스를 참조하여 물리적 저장 용량에 대한 클라이언트 요청에 응답하는 단계를
    포함하는, 비휘발성 저장부에서의 물리적 용량의 관리 방법.
  16. 제15항에 있어서, 가용 물리적 저장 용량을 결정하는 것은 상기 논리적 어드레스 공간 내의 LID에 배정되지 않은 상기 비휘발성 저장 디바이스의 저장 위치를 식별하는 단계를 포함하는,
    비휘발성 저장부에서의 물리적 용량의 관리 방법.
  17. 제15항에 있어서, 상기 비휘발성 저장 디바이스에 저장 작업을 행하는 것에 응답하여 상기 비휘발성 저장 디바이스의 가용 물리적 저장 용량의 표시자(indicator)를 유지하는 단계를
    더 포함하는, 비휘발성 저장부에서의 물리적 용량의 관리 방법.
  18. 제17항에 있어서,
    물리적 저장 용량 확보와 결부된 데이터를 저장하는 저장 작업으로서, 상기 저장은 결부된 물리적 저장 용량 확보의 일부를 필요로 하지 않는, 저장 작업과,
    물리적 저장 용량 확보를 취소하는 저장 작업, 및
    물리적 저장 용량 확보의 일부를 취소하는 저장 작업
    중 하나를 포함하는 저장 작업에 응답하여, 상기 비휘발성 저장 디바이스의 상기 가용 물리적 저장 용량의 표시자를 업데이트하는 단계를
    더 포함하는, 비휘발성 저장부에서의 물리적 용량의 관리 방법.
  19. 제15항에 있어서,
    상기 저장 위치에 저장된 데이터를 상기 비휘발성 저장 디바이스의 다른 저장 위치로 이동하는 것과,
    상기 저장 위치에 저장된 데이터는 제2의 저장 위치에 저장된 데이터와 동일하며, 업데이트는 LID를 상기 제2의 저장 위치와 결부시키는 것을 포함하는 것, 및
    하나 이상의 LID와 결부된 하나 이상의 저장 위치는 하나 이상의 다른 LID에 재매핑되는 것
    중 하나에 응답하여, LID와 상기 비휘발성 저장 디바이스 상의 저장 위치 사이의 결부관계(association)를 업데이트하는 단계를
    더 포함하는, 비휘발성 저장부에서의 물리적 용량의 관리 방법.
  20. 제15항에 있어서, 물리적 저장 용량에 대한 확보를 유지하는 단계를 더 포함하고,
    가용 물리적 저장 용량을 결정하는 것은 상기 확보에 액세스하는 단계를 더 포함하는, 비휘발성 저장부에서의 물리적 용량의 관리 방법.
  21. 제15항에 있어서, 상기 클라이언트 요청을 충족시키는 것에 응답하여 물리적 저장 용량을 확보하는 단계, 및
    상기 확보를 충족시키기 위해 상기 비휘발성 저장 디바이스 상의 충분한 물리적 저장 용량을 유지하는 단계를
    더 포함하는, 비휘발성 저장부에서의 물리적 용량의 관리 방법.
  22. 제15항에 있어서, 상기 클라이언트 요청은 상기 비휘발성 저장 디바이스에 저장될 데이터와 관련되고,
    클라이언트 요청을 충족하는 것에 응답하여, 상기 요청에 참조된 데이터를 상기 비휘발성 저장 디바이스에 저장하고, 상기 저장 위치를 상기 인덱스 내의 LID와 결부시키는, 저장 및 결부 단계와
    상기 요청이 충족될 수 없을 때 상기 클라이언트에 통지하는 단계를
    더 포함하는, 비휘발성 저장부에서의 물리적 용량의 관리 방법.
  23. 제15항에 있어서, 상기 클라이언트 요청은:
    상기 요청된 물리적 저장 용량을 도출하는데 사용되는 상기 논리적 어드레스 공간 내의 논리적 용량의 양과,
    상기 요청된 물리적 저장 용량을 도출하는데 사용되는 상기 논리적 어드레스 공간 내의 하나 이상의 LID와,
    상기 요청된 물리적 저장 용량의 도출이 이루어지는 데이터의 저장 요청과,
    물리적 저장 용량의 확보 요청, 및
    물리적 저장 용량을 확보하고 상기 논리적 어드레스 공간 내의 대응하는 논리적 용량을 할당하는 요청
    중 하나를 포함하는, 비휘발성 저장부에서의 물리적 용량의 관리 방법.
  24. 비휘발성 저장부의 할당 방법으로서,
    비휘발성 저장 디바이스에 의해, 복수의 LID를 포함하는 논리적 어드레스 공간을 클라이언트에 제공하는 단계로서, 상기 LID는 상기 비휘발성 저장 디바이스의 저장 위치에 독립적이며 상기 비휘발성 저장 디바이스의 물리적 저장 용량을 초과하는, 논리적 어드레스 공간을 클라이언트에 제공하는 단계와,
    상기 클라이언트로부터 저장 용량에 대한 요청을 수신하는 단계와,
    상기 요청에 응답하여 상기 클라이언트에 할당하기 위한 상기 논리적 어드레스 공간 내의 LID를 선택하는 단계와,
    상기 할당된 LID를 위해 상기 비휘발성 저장 디바이스 상의 물리적 저장 용량을 확보하는 단계, 및
    상기 클라이언트에 상기 LID를 제공하는 단계를
    포함하는, 비휘발성 저장부의 할당 방법.
  25. 기계(machine)가 비휘발성 저장부의 할당 방법을 수행하도록 구성된 기계 판독 가능(machine-readable) 명령을 포함하는 비일시성(non-transitory) 저장 매체로서,
    상기 방법은,
    비휘발성 저장 디바이스에 의해, 복수의 LID를 포함하는 논리적 어드레스 공간을 클라이언트에 제공하는 단계로서, 상기 LID는 상기 비휘발성 저장 디바이스의 저장 위치에 독립적이며 상기 비휘발성 저장 디바이스의 물리적 저장 용량을 초과하는, 논리적 어드레스 공간을 클라이언트에 제공하는 단계와,
    상기 클라이언트로부터 상기 비휘발성 저장부에의 데이터의 저장 요청을 수신하는 단계와,
    상기 요청에 응답하여 상기 클라이언트에 할당하기 위한 상기 논리적 어드레스 공간 내의 LID를 선택하는 단계와,
    상기 요청의 데이터를 상기 비휘발성 저장 디바이스의 저장 위치에 저장하는 단계, 및
    상기 클라이언트에 할당된 상기 LID를 상기 요청의 데이터를 포함하는 상기 저장 위치와 결부시키는 단계를
    포함하는, 비일시성 저장 매체.
  26. 비휘발성 솔리드 스테이트 저장 디바이스의 할당 방법으로서,
    솔리드 스테이트 저장 디바이스 상에서 행해지는 할당 작업과 상기 솔리드 스테이트 저장 디바이스의 저장 작업에 관련된 인덱스를 유지하는 단계와,
    상기 솔리드 스테이트 저장 디바이스의 저장 작업을 관리하기 위해 상기 인덱스에 액세스하는 단계, 및
    상기 솔리드 스테이트 저장 디바이스에 의해 지원되는 할당된 논리적 용량을 관리하기 위해 상기 인덱스에 액세스하는 단계
    를 포함하는, 비휘발성 솔리드 스테이트 저장 디바이스의 할당 방법.
  27. 제26항에 있어서, 상기 할당 작업과 관련된 메타데이터 및 상기 저장 작업과 관련된 메타데이터는 공유된 데이터 구조(shared datastructure)에 저장되는, 비휘발성 솔리드 스테이트 저장 디바이스의 할당 방법.
  28. 제26항에 있어서, 할당 메타데이터는 할당된 논리적 용량의 LID를 식별하는 할당 표시자(allocation indicator)을 포함하고,
    할당 질의(allocation query)에 응답하기 위해 상기 할당 표시자를 사용하는 단계를 더 포함하는, 비휘발성 솔리드 스테이트 저장 디바이스의 할당 방법.
KR1020127009023A 2009-09-09 2010-09-09 저장부 할당 장치, 시스템, 및 방법 KR101769883B1 (ko)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US24096609P 2009-09-09 2009-09-09
US61/240,966 2009-09-09
US36856410P 2010-07-28 2010-07-28
US61/368,564 2010-07-28
US37327110P 2010-08-12 2010-08-12
US61/373,271 2010-08-12
PCT/US2010/048325 WO2011031903A2 (en) 2009-09-09 2010-09-09 Apparatus, system, and method for allocating storage

Publications (2)

Publication Number Publication Date
KR20130026517A true KR20130026517A (ko) 2013-03-13
KR101769883B1 KR101769883B1 (ko) 2017-08-21

Family

ID=43648554

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020127009023A KR101769883B1 (ko) 2009-09-09 2010-09-09 저장부 할당 장치, 시스템, 및 방법

Country Status (6)

Country Link
US (3) US8578127B2 (ko)
EP (1) EP2476079A4 (ko)
JP (1) JP5518197B2 (ko)
KR (1) KR101769883B1 (ko)
CN (1) CN102598019B (ko)
WO (1) WO2011031903A2 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200008653A (ko) * 2017-07-06 2020-01-28 마이크론 테크놀로지, 인크. 인터페이스 구성 요소
WO2022097973A1 (ko) * 2020-11-04 2022-05-12 삼성전자 주식회사 전자 장치 및 이를 이용한 스토리지 관리 방법

Families Citing this family (253)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8527749B2 (en) * 2009-11-11 2013-09-03 International Business Machines Corporation User device, computer program product and computer system for system for secure network storage
US20110167049A1 (en) * 2010-01-05 2011-07-07 Apple Inc. File system management techniques for computing environments and systems
US11301592B2 (en) * 2010-01-28 2022-04-12 Pure Storage, Inc. Distributed storage with data obfuscation and method for use therewith
US20120102561A1 (en) * 2010-10-26 2012-04-26 International Business Machines Corporation Token-based reservations for scsi architectures
US9336139B2 (en) * 2010-11-29 2016-05-10 Cleversafe, Inc. Selecting a memory for storage of an encoded data slice in a dispersed storage network
WO2012129191A2 (en) 2011-03-18 2012-09-27 Fusion-Io, Inc. Logical interfaces for contextual storage
WO2012141687A1 (en) 2011-04-12 2012-10-18 Empire Technology Development, Llc A service associated with persistent storage
US20120311271A1 (en) * 2011-06-06 2012-12-06 Sanrad, Ltd. Read Cache Device and Methods Thereof for Accelerating Access to Data in a Storage Area Network
US20120317377A1 (en) * 2011-06-09 2012-12-13 Alexander Palay Dual flash translation layer
US9116634B2 (en) 2011-06-10 2015-08-25 International Business Machines Corporation Configure storage class memory command
US9323668B2 (en) 2011-06-10 2016-04-26 International Business Machines Corporation Deconfigure storage class memory command
US9021226B2 (en) 2011-06-10 2015-04-28 International Business Machines Corporation Moving blocks of data between main memory and storage class memory
US9116789B2 (en) 2011-06-10 2015-08-25 International Business Machines Corporation Chaining move specification blocks
US9058243B2 (en) 2011-06-10 2015-06-16 International Business Machines Corporation Releasing blocks of storage class memory
US9021180B2 (en) 2011-06-10 2015-04-28 International Business Machines Corporation Clearing blocks of storage class memory
US9116788B2 (en) 2011-06-10 2015-08-25 International Business Machines Corporation Using extended asynchronous data mover indirect data address words
US9021179B2 (en) 2011-06-10 2015-04-28 International Business Machines Corporation Store storage class memory information command
US9058275B2 (en) 2011-06-10 2015-06-16 International Business Machines Corporation Data returned responsive to executing a start subchannel instruction
US20120324143A1 (en) 2011-06-15 2012-12-20 Data Design Corporation Methods and apparatus for data access by a reprogrammable circuit module
US9417894B1 (en) 2011-06-15 2016-08-16 Ryft Systems, Inc. Methods and apparatus for a tablet computer system incorporating a reprogrammable circuit module
US8935455B2 (en) 2011-06-20 2015-01-13 International Business Machines Corporation Storage allocation based on data set size
JP5733124B2 (ja) * 2011-09-12 2015-06-10 富士通株式会社 データ管理装置、データ管理システム、データ管理方法、及びプログラム
US8856440B2 (en) 2011-09-12 2014-10-07 Microsoft Corporation Volatile memory representation of nonvolatile storage device set
US8793463B2 (en) * 2011-09-12 2014-07-29 Microsoft Corporation Allocation strategies for storage device sets
US9690694B2 (en) * 2011-09-27 2017-06-27 Sandisk Technologies, Llc Apparatus, system, and method for an address translation layer
US9342452B2 (en) * 2011-10-07 2016-05-17 Hewlett Packard Enterprise Development Lp Mapping processor address ranges to persistent storage
US8966172B2 (en) 2011-11-15 2015-02-24 Pavilion Data Systems, Inc. Processor agnostic data storage in a PCIE based shared storage enviroment
US9652182B2 (en) 2012-01-31 2017-05-16 Pavilion Data Systems, Inc. Shareable virtual non-volatile storage device for a server
WO2013128582A1 (ja) * 2012-02-28 2013-09-06 株式会社 日立製作所 ストレージシステム及びストレージシステムの制御方法
JP5849794B2 (ja) * 2012-03-16 2016-02-03 富士通株式会社 ストレージ制御装置、ストレージ制御方法、及びストレージ制御プログラム
US9558198B2 (en) * 2012-03-28 2017-01-31 Google Inc. File map compression using run length encoding for active blocks
US10095616B2 (en) 2012-03-28 2018-10-09 Quantum Corporation Garbage collection for virtual environments
US20130282676A1 (en) * 2012-03-28 2013-10-24 Quantum Corporation Garbage collection-driven block thinning
US8935203B1 (en) 2012-03-29 2015-01-13 Amazon Technologies, Inc. Environment-sensitive distributed data management
US8930364B1 (en) 2012-03-29 2015-01-06 Amazon Technologies, Inc. Intelligent data integration
US8832234B1 (en) 2012-03-29 2014-09-09 Amazon Technologies, Inc. Distributed data storage controller
US8719320B1 (en) 2012-03-29 2014-05-06 Amazon Technologies, Inc. Server-side, variable drive health determination
US9037921B1 (en) 2012-03-29 2015-05-19 Amazon Technologies, Inc. Variable drive health determination and data placement
US8918392B1 (en) * 2012-03-29 2014-12-23 Amazon Technologies, Inc. Data storage mapping and management
US9628438B2 (en) * 2012-04-06 2017-04-18 Exablox Consistent ring namespaces facilitating data storage and organization in network infrastructures
US9507524B1 (en) 2012-06-15 2016-11-29 Qlogic, Corporation In-band management using an intelligent adapter and methods thereof
US9189495B1 (en) * 2012-06-28 2015-11-17 Emc Corporation Replication and restoration
US9223799B1 (en) * 2012-06-29 2015-12-29 Emc Corporation Lightweight metadata sharing protocol for location transparent file access
CN104641419A (zh) * 2012-07-13 2015-05-20 三星电子株式会社 固态驱动器控制器、固态驱动器、固态驱动器的数据处理方法、多通道固态驱动器、raid控制器以及其中记录有用于向固态驱动器提供顺序信息的计算机程序的计算机可读记录介质
US9086819B2 (en) * 2012-07-25 2015-07-21 Anoosmar Technologies Private Limited System and method for combining deduplication and encryption of data
US9195578B2 (en) 2012-08-24 2015-11-24 International Business Machines Corporation Systems, methods and computer program products memory space management for storage class memory
CN103020201B (zh) * 2012-12-06 2016-09-07 浪潮电子信息产业股份有限公司 一种存储系统自动精简配置存储池及组织管理的方法
US9448941B1 (en) 2012-12-31 2016-09-20 Emc Corporation System and method for cache management
US9495288B2 (en) 2013-01-22 2016-11-15 Seagate Technology Llc Variable-size flash translation layer
US8862847B2 (en) 2013-02-08 2014-10-14 Huawei Technologies Co., Ltd. Distributed storage method, apparatus, and system for reducing a data loss that may result from a single-point failure
CN103984607A (zh) * 2013-02-08 2014-08-13 华为技术有限公司 分布式存储的方法、装置和系统
US9804960B2 (en) * 2013-03-14 2017-10-31 Western Digital Technologies, Inc. Overprovision capacity in a data storage device
US20150095555A1 (en) * 2013-09-27 2015-04-02 Avalanche Technology, Inc. Method of thin provisioning in a solid state disk array
US9218279B2 (en) * 2013-03-15 2015-12-22 Western Digital Technologies, Inc. Atomic write command support in a solid state drive
JP6155769B2 (ja) * 2013-03-29 2017-07-05 富士通株式会社 ストレージ制御装置、制御プログラム及び制御方法
US9606909B1 (en) 2013-04-05 2017-03-28 Amazon Technologies, Inc. Deallocating portions of provisioned data storage based on defined bit patterns indicative of invalid data
US9639296B1 (en) 2013-04-05 2017-05-02 Amazon Technologies, Inc. Deallocating portions of data storage based on notifications of invalid data
CN103257902B (zh) * 2013-04-10 2017-02-08 深圳市硅格半导体有限公司 Nvram控制方法及系统
US9047189B1 (en) 2013-05-28 2015-06-02 Amazon Technologies, Inc. Self-describing data blocks of a minimum atomic write size for a data store
US10127236B1 (en) * 2013-06-27 2018-11-13 EMC IP Holding Company Filesystem storing file data in larger units than used for metadata
US20150006478A1 (en) * 2013-06-28 2015-01-01 Silicon Graphics International Corp. Replicated database using one sided rdma
US9519577B2 (en) 2013-09-03 2016-12-13 Sandisk Technologies Llc Method and system for migrating data between flash memory devices
US9442670B2 (en) 2013-09-03 2016-09-13 Sandisk Technologies Llc Method and system for rebalancing data stored in flash memory devices
US20150067281A1 (en) * 2013-09-05 2015-03-05 International Business Machines Corporation Reservation of storage space for a thin provisioned volume
US9304709B2 (en) 2013-09-06 2016-04-05 Western Digital Technologies, Inc. High performance system providing selective merging of dataframe segments in hardware
CN103488727B (zh) * 2013-09-16 2017-05-03 河海大学 基于周期对数的二维时序数据存储和查询方法
US9535628B2 (en) 2013-10-10 2017-01-03 Apple Inc. Memory system with shared file system
US10019352B2 (en) * 2013-10-18 2018-07-10 Sandisk Technologies Llc Systems and methods for adaptive reserve storage
US9338057B2 (en) * 2013-10-30 2016-05-10 Netapp, Inc. Techniques for searching data associated with devices in a heterogeneous data center
US9612973B2 (en) * 2013-11-09 2017-04-04 Microsoft Technology Licensing, Llc Using shared virtual memory resources for performing memory-mapping
CN103634379B (zh) * 2013-11-13 2017-02-01 华为技术有限公司 一种分布式存储空间的管理方法和分布式存储系统
US20160253114A1 (en) * 2013-11-14 2016-09-01 Hitachi, Ltd. Method and apparatus for optimizing data storage in heterogeneous environment
US9985829B2 (en) 2013-12-12 2018-05-29 Exablox Corporation Management and provisioning of cloud connected devices
US9262268B2 (en) 2013-12-20 2016-02-16 Seagate Technology Llc Method to distribute user data and error correction data over different page types by leveraging error rate variations
CN103729300B (zh) * 2013-12-25 2017-11-28 华为技术有限公司 非易失内存的管理方法和相关装置
CN103731484B (zh) * 2013-12-25 2016-10-05 华中科技大学 一种面向移动云计算的节能传输方法及中间件系统
US20150186257A1 (en) * 2013-12-26 2015-07-02 Anand S. Ramalingam Managing a transfer buffer for a non-volatile memory
US9170928B1 (en) * 2013-12-31 2015-10-27 Symantec Corporation I/O scheduling and load balancing across the multiple nodes of a clustered environment
US9529552B2 (en) * 2014-01-14 2016-12-27 International Business Machines Corporation Storage resource pack management
US9454305B1 (en) 2014-01-27 2016-09-27 Qlogic, Corporation Method and system for managing storage reservation
US9933980B2 (en) 2014-02-24 2018-04-03 Toshiba Memory Corporation NAND raid controller for connection between an SSD controller and multiple non-volatile storage units
US10133488B2 (en) 2014-03-17 2018-11-20 Primaryio, Inc. Apparatus and method for cache provisioning, configuration for optimal application performance
US10146437B2 (en) * 2014-03-17 2018-12-04 Primaryio, Inc. Tier aware caching solution to increase application performance
US9348526B2 (en) * 2014-03-28 2016-05-24 Scale Computing, Inc. Placement engine for a block device
KR102318478B1 (ko) 2014-04-21 2021-10-27 삼성전자주식회사 스토리지 컨트롤러, 스토리지 시스템 및 상기 스토리지 컨트롤러의 동작 방법
US20150324281A1 (en) * 2014-05-07 2015-11-12 Diablo Technologies Inc. System and method of implementing an object storage device on a computer main memory system
US9703619B2 (en) * 2014-05-28 2017-07-11 International Business Machines Corporation Determining an availability score based on available resources of different resource types in a storage system to determine whether to perform a failure operation for the storage system
US9411698B2 (en) 2014-05-28 2016-08-09 International Business Machines Corporation Determining an availability score based on available resources of different resource types in a distributed computing environment of storage servers to determine whether to perform a failure operation for one of the storage servers
US8891303B1 (en) 2014-05-30 2014-11-18 Sandisk Technologies Inc. Method and system for dynamic word line based configuration of a three-dimensional memory device
US9645749B2 (en) 2014-05-30 2017-05-09 Sandisk Technologies Llc Method and system for recharacterizing the storage density of a memory device or a portion thereof
US9423980B1 (en) 2014-06-12 2016-08-23 Qlogic, Corporation Methods and systems for automatically adding intelligent storage adapters to a cluster
US9436654B1 (en) 2014-06-23 2016-09-06 Qlogic, Corporation Methods and systems for processing task management functions in a cluster having an intelligent storage adapter
CN105279095B (zh) * 2014-06-26 2019-09-13 南京中兴新软件有限责任公司 创建jbod文件系统的方法及装置
US9477424B1 (en) 2014-07-23 2016-10-25 Qlogic, Corporation Methods and systems for using an intelligent storage adapter for replication in a clustered environment
US9112890B1 (en) 2014-08-20 2015-08-18 E8 Storage Systems Ltd. Distributed storage over shared multi-queued storage device
US9582203B2 (en) 2014-09-02 2017-02-28 Sandisk Technologies Llc Process and apparatus to reduce declared capacity of a storage device by reducing a range of logical addresses
US9582202B2 (en) 2014-09-02 2017-02-28 Sandisk Technologies Llc Process and apparatus to reduce declared capacity of a storage device by moving data
US9519427B2 (en) 2014-09-02 2016-12-13 Sandisk Technologies Llc Triggering, at a host system, a process to reduce declared capacity of a storage device
US9158681B1 (en) 2014-09-02 2015-10-13 Sandisk Technologies Inc. Process and apparatus to reduce declared capacity of a storage device by conditionally trimming
US9665311B2 (en) 2014-09-02 2017-05-30 Sandisk Technologies Llc Process and apparatus to reduce declared capacity of a storage device by making specific logical addresses unavailable
US9582193B2 (en) 2014-09-02 2017-02-28 Sandisk Technologies Llc Triggering a process to reduce declared capacity of a storage device in a multi-storage-device storage system
US9563362B2 (en) 2014-09-02 2017-02-07 Sandisk Technologies Llc Host system and process to reduce declared capacity of a storage device by trimming
US9563370B2 (en) 2014-09-02 2017-02-07 Sandisk Technologies Llc Triggering a process to reduce declared capacity of a storage device
US9582220B2 (en) 2014-09-02 2017-02-28 Sandisk Technologies Llc Notification of trigger condition to reduce declared capacity of a storage device in a multi-storage-device storage system
US9652153B2 (en) 2014-09-02 2017-05-16 Sandisk Technologies Llc Process and apparatus to reduce declared capacity of a storage device by reducing a count of logical addresses
US9524112B2 (en) 2014-09-02 2016-12-20 Sandisk Technologies Llc Process and apparatus to reduce declared capacity of a storage device by trimming
US9524105B2 (en) 2014-09-02 2016-12-20 Sandisk Technologies Llc Process and apparatus to reduce declared capacity of a storage device by altering an encoding format
US9552166B2 (en) 2014-09-02 2017-01-24 Sandisk Technologies Llc. Process and apparatus to reduce declared capacity of a storage device by deleting data
US9582212B2 (en) 2014-09-02 2017-02-28 Sandisk Technologies Llc Notification of trigger condition to reduce declared capacity of a storage device
US9274720B1 (en) 2014-09-15 2016-03-01 E8 Storage Systems Ltd. Distributed RAID over shared multi-queued storage devices
US20160092117A1 (en) * 2014-09-26 2016-03-31 Intel Corporation Reduction of performance impact of uneven channel loading in solid state drives
US9460017B1 (en) 2014-09-26 2016-10-04 Qlogic, Corporation Methods and systems for efficient cache mirroring
CN104317833B (zh) * 2014-10-10 2019-03-26 深圳市锐明技术股份有限公司 一种恢复系统文件索引的方法及装置
US9565269B2 (en) 2014-11-04 2017-02-07 Pavilion Data Systems, Inc. Non-volatile memory express over ethernet
US9712619B2 (en) 2014-11-04 2017-07-18 Pavilion Data Systems, Inc. Virtual non-volatile memory express drive
CN107111627B (zh) 2014-11-10 2021-04-09 慧与发展有限责任合伙企业 在线文件系统检查
US9569114B2 (en) * 2014-11-14 2017-02-14 Sk Hynix Memory Solutions Inc. Deduplication using a master and a slave
US9519666B2 (en) * 2014-11-27 2016-12-13 E8 Storage Systems Ltd. Snapshots and thin-provisioning in distributed storage over shared storage devices
US9720613B2 (en) * 2014-12-30 2017-08-01 Teradata Us, Inc. Method and system for preventing reuse of cylinder ID indexes in a computer system with missing storage drives
US9483207B1 (en) 2015-01-09 2016-11-01 Qlogic, Corporation Methods and systems for efficient caching using an intelligent storage adapter
US10067882B2 (en) * 2015-01-13 2018-09-04 Hitachi, Ltd. Storage system and storage control method
US9678665B2 (en) * 2015-03-06 2017-06-13 Western Digital Technologies, Inc. Methods and systems for memory page allocation
US9525737B2 (en) 2015-04-14 2016-12-20 E8 Storage Systems Ltd. Lockless distributed redundant storage and NVRAM cache in a highly-distributed shared topology with direct memory access capable interconnect
US9529542B2 (en) 2015-04-14 2016-12-27 E8 Storage Systems Ltd. Lockless distributed redundant storage and NVRAM caching of compressed data in a highly-distributed shared topology with direct memory access capable interconnect
US10338827B2 (en) * 2015-04-17 2019-07-02 Johann George Digitally lending content without reproduction
US9639282B2 (en) 2015-05-20 2017-05-02 Sandisk Technologies Llc Variable bit encoding per NAND flash cell to improve device endurance and extend life of flash-based storage devices
US9606737B2 (en) 2015-05-20 2017-03-28 Sandisk Technologies Llc Variable bit encoding per NAND flash cell to extend life of flash-based storage devices and preserve over-provisioning
JP6398102B2 (ja) * 2015-05-29 2018-10-03 東芝メモリ株式会社 メモリシステム
US9792248B2 (en) * 2015-06-02 2017-10-17 Microsoft Technology Licensing, Llc Fast read/write between networked computers via RDMA-based RPC requests
US10496626B2 (en) 2015-06-11 2019-12-03 EB Storage Systems Ltd. Deduplication in a highly-distributed shared topology with direct-memory-access capable interconnect
US10241689B1 (en) 2015-06-23 2019-03-26 Amazon Technologies, Inc. Surface-based logical storage units in multi-platter disks
US10055420B1 (en) 2015-06-30 2018-08-21 EMC IP Holding Company LLC Method to optimize random IOS of a storage device for multiple versions of backups using incremental metadata
US10061539B2 (en) * 2015-06-30 2018-08-28 International Business Machines Corporation Inaccessibility status indicator
US10310854B2 (en) 2015-06-30 2019-06-04 International Business Machines Corporation Non-faulting compute instructions
US9996426B1 (en) * 2015-06-30 2018-06-12 EMC IP Holding Company LLC Sparse segment trees for high metadata churn workloads
US9886194B2 (en) * 2015-07-13 2018-02-06 Samsung Electronics Co., Ltd. NVDIMM adaptive access mode and smart partition mechanism
US9946594B2 (en) 2015-08-19 2018-04-17 International Business Machines Corporation Validation bits and offsets to represent logical pages split between data containers
US10725963B2 (en) 2015-09-12 2020-07-28 Microsoft Technology Licensing, Llc Distributed lock-free RDMA-based memory allocation and de-allocation
US10713210B2 (en) 2015-10-13 2020-07-14 Microsoft Technology Licensing, Llc Distributed self-directed lock-free RDMA-based B-tree key-value manager
US10375167B2 (en) 2015-11-20 2019-08-06 Microsoft Technology Licensing, Llc Low latency RDMA-based distributed storage
US9946483B2 (en) 2015-12-03 2018-04-17 Sandisk Technologies Llc Efficiently managing unmapped blocks to extend life of solid state drive with low over-provisioning
US9946473B2 (en) 2015-12-03 2018-04-17 Sandisk Technologies Llc Efficiently managing unmapped blocks to extend life of solid state drive
CN106850710B (zh) * 2015-12-03 2020-02-28 杭州海康威视数字技术股份有限公司 一种数据云存储系统、客户终端、存储服务器及应用方法
US20170185354A1 (en) * 2015-12-23 2017-06-29 Intel Corporation Techniques for a Write Transaction at a Storage Device
US10114551B2 (en) 2016-01-18 2018-10-30 International Business Machines Corporation Space reclamation in asynchronously mirrored space-efficient secondary volumes
US10146683B2 (en) 2016-01-18 2018-12-04 International Business Machines Corporation Space reclamation in space-efficient secondary volumes
US11455097B2 (en) 2016-01-28 2022-09-27 Weka.IO Ltd. Resource monitoring in a distributed storage system
US20170228191A1 (en) * 2016-02-08 2017-08-10 Western Digital Technologies, Inc. Systems and methods for suppressing latency in non-volatile solid state devices
US10949098B2 (en) * 2016-02-10 2021-03-16 R-Stor Inc. Method and apparatus for providing increased storage capacity
US10275376B2 (en) * 2016-03-02 2019-04-30 Western Digital Technologies, Inc. Efficient cross device redundancy implementation on high performance direct attached non-volatile storage with data reduction
US10474636B2 (en) 2016-03-25 2019-11-12 Amazon Technologies, Inc. Block allocation for low latency file systems
US9842084B2 (en) 2016-04-05 2017-12-12 E8 Storage Systems Ltd. Write cache and write-hole recovery in distributed raid over shared multi-queue storage devices
US10120583B2 (en) * 2016-06-07 2018-11-06 Facebook, Inc. Performance penalty avoidance for solid state drive
US10229047B2 (en) 2016-08-06 2019-03-12 Wolley Inc. Apparatus and method of wear leveling for storage class memory using cache filtering
KR20180019419A (ko) * 2016-08-16 2018-02-26 삼성전자주식회사 메모리 컨트롤러, 메모리 시스템 및 그 동작방법
KR102318477B1 (ko) * 2016-08-29 2021-10-27 삼성전자주식회사 Ssd 어레이 관리를 위한 스트림 식별자 기반 스토리지 시스템
US10642497B2 (en) * 2016-08-31 2020-05-05 International Business Machines Corporation System, method and computer program product for instantiating blocks of a solid-state disk to include different flash characteristics
US11416528B2 (en) 2016-09-26 2022-08-16 Splunk Inc. Query acceleration data store
US11567993B1 (en) 2016-09-26 2023-01-31 Splunk Inc. Copying buckets from a remote shared storage system to memory associated with a search node for query execution
US11126632B2 (en) 2016-09-26 2021-09-21 Splunk Inc. Subquery generation based on search configuration data from an external data system
US11243963B2 (en) 2016-09-26 2022-02-08 Splunk Inc. Distributing partial results to worker nodes from an external data system
US10977260B2 (en) 2016-09-26 2021-04-13 Splunk Inc. Task distribution in an execution node of a distributed execution environment
US11586627B2 (en) 2016-09-26 2023-02-21 Splunk Inc. Partitioning and reducing records at ingest of a worker node
US11222066B1 (en) 2016-09-26 2022-01-11 Splunk Inc. Processing data using containerized state-free indexing nodes in a containerized scalable environment
US11874691B1 (en) 2016-09-26 2024-01-16 Splunk Inc. Managing efficient query execution including mapping of buckets to search nodes
US11663227B2 (en) 2016-09-26 2023-05-30 Splunk Inc. Generating a subquery for a distinct data intake and query system
US11580107B2 (en) 2016-09-26 2023-02-14 Splunk Inc. Bucket data distribution for exporting data to worker nodes
US20180089324A1 (en) 2016-09-26 2018-03-29 Splunk Inc. Dynamic resource allocation for real-time search
US10956415B2 (en) 2016-09-26 2021-03-23 Splunk Inc. Generating a subquery for an external data system using a configuration file
US11294941B1 (en) 2016-09-26 2022-04-05 Splunk Inc. Message-based data ingestion to a data intake and query system
US11461334B2 (en) 2016-09-26 2022-10-04 Splunk Inc. Data conditioning for dataset destination
US11269939B1 (en) 2016-09-26 2022-03-08 Splunk Inc. Iterative message-based data processing including streaming analytics
US11106734B1 (en) 2016-09-26 2021-08-31 Splunk Inc. Query execution using containerized state-free search nodes in a containerized scalable environment
US11281706B2 (en) 2016-09-26 2022-03-22 Splunk Inc. Multi-layer partition allocation for query execution
US10984044B1 (en) 2016-09-26 2021-04-20 Splunk Inc. Identifying buckets for query execution using a catalog of buckets stored in a remote shared storage system
US11599541B2 (en) 2016-09-26 2023-03-07 Splunk Inc. Determining records generated by a processing task of a query
US11250056B1 (en) 2016-09-26 2022-02-15 Splunk Inc. Updating a location marker of an ingestion buffer based on storing buckets in a shared storage system
US10353965B2 (en) 2016-09-26 2019-07-16 Splunk Inc. Data fabric service system architecture
US11163758B2 (en) 2016-09-26 2021-11-02 Splunk Inc. External dataset capability compensation
US11562023B1 (en) * 2016-09-26 2023-01-24 Splunk Inc. Merging buckets in a data intake and query system
US11314753B2 (en) 2016-09-26 2022-04-26 Splunk Inc. Execution of a query received from a data intake and query system
US11003714B1 (en) 2016-09-26 2021-05-11 Splunk Inc. Search node and bucket identification using a search node catalog and a data store catalog
US11321321B2 (en) 2016-09-26 2022-05-03 Splunk Inc. Record expansion and reduction based on a processing task in a data intake and query system
US11593377B2 (en) 2016-09-26 2023-02-28 Splunk Inc. Assigning processing tasks in a data intake and query system
US11604795B2 (en) 2016-09-26 2023-03-14 Splunk Inc. Distributing partial results from an external data system between worker nodes
US11615104B2 (en) 2016-09-26 2023-03-28 Splunk Inc. Subquery generation based on a data ingest estimate of an external data system
US11232100B2 (en) 2016-09-26 2022-01-25 Splunk Inc. Resource allocation for multiple datasets
US11023463B2 (en) 2016-09-26 2021-06-01 Splunk Inc. Converting and modifying a subquery for an external data system
US11550847B1 (en) 2016-09-26 2023-01-10 Splunk Inc. Hashing bucket identifiers to identify search nodes for efficient query execution
US11860940B1 (en) 2016-09-26 2024-01-02 Splunk Inc. Identifying buckets for query execution using a catalog of buckets
US11620336B1 (en) 2016-09-26 2023-04-04 Splunk Inc. Managing and storing buckets to a remote shared storage system based on a collective bucket size
US11442935B2 (en) 2016-09-26 2022-09-13 Splunk Inc. Determining a record generation estimate of a processing task
US10331550B2 (en) * 2016-09-30 2019-06-25 Intel Corporation Symmetric addressing
US10474362B2 (en) 2016-10-14 2019-11-12 Smart Modular Technologies, Inc. Flash-based block storage system with trimmed space management and method of operation thereof
US10191854B1 (en) * 2016-12-06 2019-01-29 Levyx, Inc. Embedded resilient distributed dataset systems and methods
US10282097B2 (en) * 2017-01-05 2019-05-07 Western Digital Technologies, Inc. Storage system and method for thin provisioning
US10031872B1 (en) 2017-01-23 2018-07-24 E8 Storage Systems Ltd. Storage in multi-queue storage devices using queue multiplexing and access control
CN108628762B (zh) * 2017-03-22 2021-05-28 北京忆恒创源科技有限公司 一种固态存储设备及其处理io命令的方法
CN108733311B (zh) 2017-04-17 2021-09-10 伊姆西Ip控股有限责任公司 用于管理存储系统的方法和设备
US10261708B1 (en) * 2017-04-26 2019-04-16 EMC IP Holding Company LLC Host data replication allocating single memory buffers to store multiple buffers of received host data and to internally process the received host data
US11449468B1 (en) * 2017-04-27 2022-09-20 EMC IP Holding Company LLC Enforcing minimum space guarantees in thinly-provisioned file systems
US10275361B2 (en) * 2017-05-31 2019-04-30 Seagate Technology Llc Managing multiple namespaces in a non-volatile memory (NVM)
US10691340B2 (en) * 2017-06-20 2020-06-23 Samsung Electronics Co., Ltd. Deduplication of objects by fundamental data identification
US10547683B2 (en) * 2017-06-26 2020-01-28 Christopher Squires Object based storage systems that utilize direct memory access
US10642797B2 (en) * 2017-07-28 2020-05-05 Chicago Mercantile Exchange Inc. Concurrent write operations for use with multi-threaded file logging
US11921672B2 (en) 2017-07-31 2024-03-05 Splunk Inc. Query execution at a remote heterogeneous data store of a data fabric service
US11989194B2 (en) 2017-07-31 2024-05-21 Splunk Inc. Addressing memory limits for partition tracking among worker nodes
US10685010B2 (en) 2017-09-11 2020-06-16 Amazon Technologies, Inc. Shared volumes in distributed RAID over shared multi-queue storage devices
US10896182B2 (en) 2017-09-25 2021-01-19 Splunk Inc. Multi-partitioning determination for combination operations
US11151137B2 (en) 2017-09-25 2021-10-19 Splunk Inc. Multi-partition operation in combination operations
US11347662B2 (en) 2017-09-30 2022-05-31 Intel Corporation Method, apparatus, system for early page granular hints from a PCIe device
US10725970B2 (en) * 2017-10-05 2020-07-28 Spectra Logic Corporation Block storage device with optional deduplication
US10437476B2 (en) 2017-10-23 2019-10-08 Micron Technology, Inc. Namespaces allocation in non-volatile memory devices
JP7074454B2 (ja) * 2017-10-30 2022-05-24 キオクシア株式会社 計算機システムおよび制御方法
US10678703B2 (en) 2017-11-16 2020-06-09 Micron Technology, Inc. Namespace mapping structual adjustment in non-volatile memory devices
US11580034B2 (en) * 2017-11-16 2023-02-14 Micron Technology, Inc. Namespace encryption in non-volatile memory devices
CN108255741A (zh) * 2017-12-19 2018-07-06 深圳忆联信息系统有限公司 一种固态硬盘原子写入的方法及固态硬盘
CN109992393A (zh) 2017-12-29 2019-07-09 广东欧珀移动通信有限公司 应用处理方法和装置、电子设备、计算机可读存储介质
CN108388406B (zh) * 2018-01-10 2021-07-02 链家网(北京)科技有限公司 数据处理方法及装置
CN110109915B (zh) * 2018-01-18 2024-01-05 伊姆西Ip控股有限责任公司 用于管理哈希表的方法、设备和计算机程序产品
US10747659B2 (en) * 2018-02-06 2020-08-18 Western Digital Technologies, Inc. Flash fast program mode for high definition video recording and high resolution camera burst mode recording
US11334543B1 (en) 2018-04-30 2022-05-17 Splunk Inc. Scalable bucket merging for a data intake and query system
CN108776578B (zh) * 2018-06-01 2021-10-26 紫光西部数据(南京)有限公司 一种快速合并对象的方法和系统
US10785024B2 (en) 2018-06-20 2020-09-22 International Business Machines Corporation Encryption key structure within block based memory
US20190042456A1 (en) * 2018-06-28 2019-02-07 Intel Corporation Multibank cache with dynamic cache virtualization
US10896152B2 (en) * 2018-08-03 2021-01-19 EMC IP Holding Company LLC Method, apparatus and computer program product for managing data storage
KR20200025518A (ko) * 2018-08-30 2020-03-10 에스케이하이닉스 주식회사 데이터 저장 장치 및 동작 방법, 이를 포함하는 스토리지 시스템
US10754569B2 (en) 2018-09-06 2020-08-25 Oracle International Corporation Methods to reduce storage capacity
US10296451B1 (en) * 2018-11-01 2019-05-21 EMC IP Holding Company LLC Content addressable storage system utilizing content-based and address-based mappings
CN111143231B (zh) * 2018-11-02 2023-06-13 伊姆西Ip控股有限责任公司 用于数据处理的方法、设备和计算机程序产品
US10476936B1 (en) * 2018-12-13 2019-11-12 Software Ag Plugin-based file transfer systems and/or methods
US11392551B2 (en) * 2019-02-04 2022-07-19 EMC IP Holding Company LLC Storage system utilizing content-based and address-based mappings for deduplicatable and non-deduplicatable types of data
WO2020220216A1 (en) 2019-04-29 2020-11-05 Splunk Inc. Search time estimate in data intake and query system
US11715051B1 (en) 2019-04-30 2023-08-01 Splunk Inc. Service provider instance recommendations using machine-learned classifications and reconciliation
WO2021015762A1 (en) * 2019-07-24 2021-01-28 Hewlett-Packard Development Company, L.P. Storage devices for storing log files
US11176065B2 (en) * 2019-08-12 2021-11-16 Micron Technology, Inc. Extended memory interface
CN110457281A (zh) * 2019-08-14 2019-11-15 北京博睿宏远数据科技股份有限公司 数据处理方法、装置、设备及介质
US11494380B2 (en) 2019-10-18 2022-11-08 Splunk Inc. Management of distributed computing framework components in a data fabric service system
US20210117320A1 (en) * 2019-10-22 2021-04-22 Micron Technology, Inc. Construction of a block device
US11922222B1 (en) 2020-01-30 2024-03-05 Splunk Inc. Generating a modified component for a data intake and query system using an isolated execution environment image
US11721384B2 (en) * 2020-04-17 2023-08-08 Advanced Micro Devices, Inc. Hardware-assisted dynamic random access memory (DRAM) row merging
US20220027049A1 (en) * 2020-07-23 2022-01-27 International Business Machines Corporation Storing a data block in a log-structured raid drive array
US11144319B1 (en) 2020-07-28 2021-10-12 International Business Machines Corporation Redistribution of architected states for a processor register file
US11366754B2 (en) * 2020-07-28 2022-06-21 Micron Technology, Inc. Adjustable buffer memory space
JP2022048601A (ja) 2020-09-15 2022-03-28 キオクシア株式会社 ストレージ装置及び鍵配送方法
JP7484633B2 (ja) * 2020-09-30 2024-05-16 株式会社デンソー 共用ストレージ管理装置及び共用ストレージ管理方法
US11704313B1 (en) 2020-10-19 2023-07-18 Splunk Inc. Parallel branch operation using intermediary nodes
CN112506810B (zh) * 2020-11-12 2023-04-18 国家广播电视总局广播电视科学研究院 应用于芯片的存储空间分配方法及芯片
US11847100B2 (en) 2020-11-19 2023-12-19 Alibaba Group Holding Limited Distributed file system servicing random-access operations
CN112860594B (zh) * 2021-01-21 2022-11-01 华中科技大学 一种固态盘地址重映射方法、设备及固态盘
CN114281248B (zh) * 2021-11-29 2022-12-09 深圳三地一芯电子有限责任公司 一种提升ram读写性能的方法、电子设备及介质
WO2023242900A1 (ja) * 2022-06-13 2023-12-21 日本電信電話株式会社 振り分け装置、振り分けシステム、振り分け方法およびプログラム
CN116501264B (zh) * 2023-06-25 2023-09-15 苏州浪潮智能科技有限公司 一种数据存储方法、装置、系统、设备及可读存储介质

Family Cites Families (260)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
USRE20335E (en) * 1937-04-20 Electric valve translating circuit
US4571674A (en) 1982-09-27 1986-02-18 International Business Machines Corporation Peripheral storage system having multiple data transfer rates
US5247658A (en) 1989-10-31 1993-09-21 Microsoft Corporation Method and system for traversing linked list record based upon write-once predetermined bit value of secondary pointers
US5261068A (en) 1990-05-25 1993-11-09 Dell Usa L.P. Dual path memory retrieval system for an interleaved dynamic RAM memory unit
US5193184A (en) 1990-06-18 1993-03-09 Storage Technology Corporation Deleted data file space release system for a dynamically mapped virtual data storage subsystem
US5307497A (en) 1990-06-25 1994-04-26 International Business Machines Corp. Disk operating system loadable from read only memory using installable file system interface
US5325509A (en) 1991-03-05 1994-06-28 Zitel Corporation Method of operating a cache memory including determining desirability of cache ahead or cache behind based on a number of available I/O operations
US5438671A (en) 1991-07-19 1995-08-01 Dell U.S.A., L.P. Method and system for transferring compressed bytes of information between separate hard disk drive units
US5469555A (en) 1991-12-19 1995-11-21 Opti, Inc. Adaptive write-back method and apparatus wherein the cache system operates in a combination of write-back and write-through modes for a cache-based microprocessor system
US6256642B1 (en) 1992-01-29 2001-07-03 Microsoft Corporation Method and system for file system management using a flash-erasable, programmable, read-only memory
US5596736A (en) 1992-07-22 1997-01-21 Fujitsu Limited Data transfers to a backing store of a dynamically mapped data storage system in which data has nonsequential logical addresses
US5845329A (en) 1993-01-29 1998-12-01 Sanyo Electric Co., Ltd. Parallel computer
JP2856621B2 (ja) 1993-02-24 1999-02-10 インターナショナル・ビジネス・マシーンズ・コーポレイション 一括消去型不揮発性メモリおよびそれを用いる半導体ディスク装置
US5404485A (en) 1993-03-08 1995-04-04 M-Systems Flash Disk Pioneers Ltd. Flash file system
JP2784440B2 (ja) 1993-04-14 1998-08-06 インターナショナル・ビジネス・マシーンズ・コーポレイション データ・ページの転送制御方法
CA2121852A1 (en) 1993-04-29 1994-10-30 Larry T. Jost Disk meshing and flexible storage mapping with enhanced flexible caching
US5499354A (en) 1993-05-19 1996-03-12 International Business Machines Corporation Method and means for dynamic cache management by variable space and time binding and rebinding of cache extents to DASD cylinders
US5682497A (en) 1993-09-28 1997-10-28 Intel Corporation Managing file structures for a flash memory file system in a computer
US5535399A (en) 1993-09-30 1996-07-09 Quantum Corporation Solid state disk drive unit having on-board backup non-volatile memory
JPH086854A (ja) 1993-12-23 1996-01-12 Unisys Corp アウトボードファイルキャッシュ外部処理コンプレックス
US5809527A (en) 1993-12-23 1998-09-15 Unisys Corporation Outboard file cache system
US5553261A (en) 1994-04-01 1996-09-03 Intel Corporation Method of performing clean-up of a solid state disk while executing a read command
US5696917A (en) 1994-06-03 1997-12-09 Intel Corporation Method and apparatus for performing burst read operations in an asynchronous nonvolatile memory
US5504882A (en) 1994-06-20 1996-04-02 International Business Machines Corporation Fault tolerant data storage subsystem employing hierarchically arranged controllers
DE19540915A1 (de) 1994-11-10 1996-05-15 Raymond Engineering Redundante Anordnung von Festkörper-Speicherbausteinen
US6002411A (en) 1994-11-16 1999-12-14 Interactive Silicon, Inc. Integrated video and memory controller with data processing and graphical processing capabilities
US6170047B1 (en) 1994-11-16 2001-01-02 Interactive Silicon, Inc. System and method for managing system memory and/or non-volatile memory using a memory controller with integrated compression and decompression capabilities
US5586291A (en) 1994-12-23 1996-12-17 Emc Corporation Disk controller with volatile and non-volatile cache memories
US5651133A (en) 1995-02-01 1997-07-22 Hewlett-Packard Company Methods for avoiding over-commitment of virtual capacity in a redundant hierarchic data storage system
US5701434A (en) 1995-03-16 1997-12-23 Hitachi, Ltd. Interleave memory controller with a common access queue
US5682499A (en) 1995-06-06 1997-10-28 International Business Machines Corporation Directory rebuild method and apparatus for maintaining and rebuilding directory information for compressed data on direct access storage device (DASD)
DE69615278T2 (de) 1995-06-06 2002-06-27 Hewlett Packard Co SDRAM-Datenzuweisungsanordnung und -verfahren
US5930815A (en) 1995-07-31 1999-07-27 Lexar Media, Inc. Moving sequential sectors within a block of information in a flash memory mass storage architecture
US5845313A (en) 1995-07-31 1998-12-01 Lexar Direct logical block addressing flash memory mass storage architecture
US5754563A (en) 1995-09-11 1998-05-19 Ecc Technologies, Inc. Byte-parallel system for implementing reed-solomon error-correcting codes
US6014724A (en) 1995-10-27 2000-01-11 Scm Microsystems (U.S.) Inc. Flash translation layer block indication map revision system and method
US6330688B1 (en) 1995-10-31 2001-12-11 Intel Corporation On chip error correction for devices in a solid state drive
US5787486A (en) 1995-12-15 1998-07-28 International Business Machines Corporation Bus protocol for locked cycle cache hit
US5757567A (en) 1996-02-08 1998-05-26 International Business Machines Corporation Method and apparatus for servo control with high efficiency gray code for servo track ID
US6385710B1 (en) 1996-02-23 2002-05-07 Sun Microsystems, Inc. Multiple-mode external cache subsystem
US5960462A (en) 1996-09-26 1999-09-28 Intel Corporation Method and apparatus for analyzing a main memory configuration to program a memory controller
US5754567A (en) 1996-10-15 1998-05-19 Micron Quantum Devices, Inc. Write reduction in flash memory systems through ECC usage
TW349196B (en) 1996-10-18 1999-01-01 Ibm Cached synchronous DRAM architecture having a mode register programmable cache policy
US6279069B1 (en) 1996-12-26 2001-08-21 Intel Corporation Interface for flash EEPROM memory arrays
US5802602A (en) 1997-01-17 1998-09-01 Intel Corporation Method and apparatus for performing reads of related data from a set-associative cache memory
US6073232A (en) 1997-02-25 2000-06-06 International Business Machines Corporation Method for minimizing a computer's initial program load time after a system reset or a power-on using non-volatile storage
JP3459868B2 (ja) 1997-05-16 2003-10-27 日本電気株式会社 メモリ障害時におけるグループ入れ替え方式
US6418478B1 (en) 1997-10-30 2002-07-09 Commvault Systems, Inc. Pipelined high speed data transfer mechanism
US6101601A (en) 1998-04-20 2000-08-08 International Business Machines Corporation Method and apparatus for hibernation within a distributed data processing system
US5957158A (en) 1998-05-11 1999-09-28 Automatic Switch Company Visual position indicator
US6185654B1 (en) 1998-07-17 2001-02-06 Compaq Computer Corporation Phantom resource memory address mapping system
US6507911B1 (en) 1998-07-22 2003-01-14 Entrust Technologies Limited System and method for securely deleting plaintext data
US6209088B1 (en) 1998-09-21 2001-03-27 Microsoft Corporation Computer hibernation implemented by a computer operating system
US6629112B1 (en) 1998-12-31 2003-09-30 Nortel Networks Limited Resource management for CORBA-based applications
US6412080B1 (en) 1999-02-23 2002-06-25 Microsoft Corporation Lightweight persistent storage system for flash memory devices
KR100330164B1 (ko) 1999-04-27 2002-03-28 윤종용 무효 블록들을 가지는 복수의 플래시 메모리들을 동시에 프로그램하는 방법
US7194740B1 (en) 1999-05-28 2007-03-20 Oracle International Corporation System for extending an addressable range of memory
US7660941B2 (en) 2003-09-10 2010-02-09 Super Talent Electronics, Inc. Two-level RAM lookup table for block and page allocation and wear-leveling in limited-write flash-memories
US6336174B1 (en) 1999-08-09 2002-01-01 Maxtor Corporation Hardware assisted memory backup system and method
KR100577380B1 (ko) 1999-09-29 2006-05-09 삼성전자주식회사 플래시 메모리와 그 제어 방법
US8171204B2 (en) 2000-01-06 2012-05-01 Super Talent Electronics, Inc. Intelligent solid-state non-volatile memory device (NVMD) system with multi-level caching of multiple channels
US6671757B1 (en) 2000-01-26 2003-12-30 Fusionone, Inc. Data transfer and synchronization system
US6785835B2 (en) 2000-01-25 2004-08-31 Hewlett-Packard Development Company, L.P. Raid memory
US7089391B2 (en) 2000-04-14 2006-08-08 Quickshift, Inc. Managing a codec engine for memory compression/decompression operations using a data movement engine
US6523102B1 (en) 2000-04-14 2003-02-18 Interactive Silicon, Inc. Parallel compression/decompression system and method for implementation of in-memory compressed cache improving storage density and access speed for industry standard memory subsystems and in-line memory modules
US6813686B1 (en) * 2000-06-27 2004-11-02 Emc Corporation Method and apparatus for identifying logical volumes in multiple element computer storage domains
US6981070B1 (en) 2000-07-12 2005-12-27 Shun Hang Luk Network storage device having solid-state non-volatile memory
US6658438B1 (en) 2000-08-14 2003-12-02 Matrix Semiconductor, Inc. Method for deleting stored digital data from write-once memory device
US6404647B1 (en) 2000-08-24 2002-06-11 Hewlett-Packard Co. Solid-state mass memory storage device
US6728866B1 (en) * 2000-08-31 2004-04-27 International Business Machines Corporation Partitioned issue queue and allocation strategy
US6883079B1 (en) 2000-09-01 2005-04-19 Maxtor Corporation Method and apparatus for using data compression as a means of increasing buffer bandwidth
US6625685B1 (en) 2000-09-20 2003-09-23 Broadcom Corporation Memory controller with programmable configuration
US7039727B2 (en) 2000-10-17 2006-05-02 Microsoft Corporation System and method for controlling mass storage class digital imaging devices
US6779088B1 (en) 2000-10-24 2004-08-17 International Business Machines Corporation Virtual uncompressed cache size control in compressed memory systems
US7257129B2 (en) 2000-11-22 2007-08-14 Silicon Image Memory architecture with multiple serial communications ports
US6957313B2 (en) 2000-12-01 2005-10-18 Hsia James R Memory matrix and method of operating the same
US6976060B2 (en) 2000-12-05 2005-12-13 Agami Sytems, Inc. Symmetric shared file storage system
US20020103819A1 (en) 2000-12-12 2002-08-01 Fresher Information Corporation Technique for stabilizing data in a non-log based information storage and retrieval system
US7013376B2 (en) 2000-12-20 2006-03-14 Hewlett-Packard Development Company, L.P. Method and system for data block sparing in a solid-state storage device
KR100365725B1 (ko) 2000-12-27 2002-12-26 한국전자통신연구원 플래시 메모리를 이용한 파일 시스템에서 등급별 지움정책 및 오류 복구 방법
JP4818812B2 (ja) 2006-05-31 2011-11-16 株式会社日立製作所 フラッシュメモリストレージシステム
US6731447B2 (en) 2001-06-04 2004-05-04 Xerox Corporation Secure data file erasure
JP4175788B2 (ja) * 2001-07-05 2008-11-05 株式会社日立製作所 ボリューム制御装置
US6839808B2 (en) 2001-07-06 2005-01-04 Juniper Networks, Inc. Processing cluster having multiple compute engines and shared tier one caches
US6785776B2 (en) 2001-07-26 2004-08-31 International Business Machines Corporation DMA exclusive cache state providing a fully pipelined input/output DMA write mechanism
US7275135B2 (en) 2001-08-31 2007-09-25 Intel Corporation Hardware updated metadata for non-volatile mass storage cache
US20030061296A1 (en) 2001-09-24 2003-03-27 International Business Machines Corporation Memory semantic storage I/O
US6938133B2 (en) 2001-09-28 2005-08-30 Hewlett-Packard Development Company, L.P. Memory latency and bandwidth optimizations
GB0123416D0 (en) 2001-09-28 2001-11-21 Memquest Ltd Non-volatile memory control
US6892264B2 (en) 2001-10-05 2005-05-10 International Business Machines Corporation Storage area network methods and apparatus for associating a logical identification with a physical identification
US7173929B1 (en) 2001-12-10 2007-02-06 Incipient, Inc. Fast path for performing data operations
US7013379B1 (en) 2001-12-10 2006-03-14 Incipient, Inc. I/O primitives
US7290109B2 (en) 2002-01-09 2007-10-30 Renesas Technology Corp. Memory system and memory card
JP4154893B2 (ja) * 2002-01-23 2008-09-24 株式会社日立製作所 ネットワークストレージ仮想化方法
US20030145230A1 (en) 2002-01-31 2003-07-31 Huimin Chiu System for exchanging data utilizing remote direct memory access
US7085879B2 (en) 2002-02-27 2006-08-01 Microsoft Corporation Dynamic data structures for tracking data stored in a flash memory device
US7010662B2 (en) 2002-02-27 2006-03-07 Microsoft Corporation Dynamic data structures for tracking file system free space in a flash memory device
US7533214B2 (en) 2002-02-27 2009-05-12 Microsoft Corporation Open architecture flash driver
JP2003281071A (ja) 2002-03-20 2003-10-03 Seiko Epson Corp データ転送制御装置、電子機器及びデータ転送制御方法
JP4050548B2 (ja) 2002-04-18 2008-02-20 株式会社ルネサステクノロジ 半導体記憶装置
US7043599B1 (en) 2002-06-20 2006-05-09 Rambus Inc. Dynamic memory supporting simultaneous refresh and data-access transactions
US7562089B2 (en) 2002-06-26 2009-07-14 Seagate Technology Llc Systems and methods for storing information to allow users to manage files
US7082495B2 (en) 2002-06-27 2006-07-25 Microsoft Corporation Method and apparatus to reduce power consumption and improve read/write performance of hard disk drives using non-volatile memory
JP4001516B2 (ja) 2002-07-05 2007-10-31 富士通株式会社 縮退制御装置及び方法
US7051152B1 (en) 2002-08-07 2006-05-23 Nvidia Corporation Method and system of improving disk access time by compression
KR100505638B1 (ko) 2002-08-28 2005-08-03 삼성전자주식회사 워킹 콘텍스트 저장 및 복구 장치 및 방법
US7340566B2 (en) 2002-10-21 2008-03-04 Microsoft Corporation System and method for initializing a memory device from block oriented NAND flash
US7171536B2 (en) 2002-10-28 2007-01-30 Sandisk Corporation Unusable block management within a non-volatile memory system
US7035974B2 (en) 2002-11-06 2006-04-25 Synology Inc. RAID-5 disk having cache memory implemented using non-volatile RAM
US6996676B2 (en) 2002-11-14 2006-02-07 International Business Machines Corporation System and method for implementing an adaptive replacement cache policy
US7082512B2 (en) 2002-11-21 2006-07-25 Microsoft Corporation Dynamic data structures for tracking file system free space in a flash memory device
US7660998B2 (en) 2002-12-02 2010-02-09 Silverbrook Research Pty Ltd Relatively unique ID in integrated circuit
US6957158B1 (en) 2002-12-23 2005-10-18 Power Measurement Ltd. High density random access memory in an intelligent electric device
US20040148360A1 (en) 2003-01-24 2004-07-29 Hewlett-Packard Development Company Communication-link-attached persistent memory device
US6959369B1 (en) 2003-03-06 2005-10-25 International Business Machines Corporation Method, system, and program for data backup
US8041878B2 (en) 2003-03-19 2011-10-18 Samsung Electronics Co., Ltd. Flash file system
US7610348B2 (en) 2003-05-07 2009-10-27 International Business Machines Distributed file serving architecture system with metadata storage virtualization and data access at the data server connection speed
JP2004348818A (ja) 2003-05-20 2004-12-09 Sharp Corp 半導体記憶装置の書込制御方法及びシステム並びに携帯電子機器
US7243203B2 (en) 2003-06-13 2007-07-10 Sandisk 3D Llc Pipeline circuit for low latency memory
US7047366B1 (en) 2003-06-17 2006-05-16 Emc Corporation QOS feature knobs
US20040268359A1 (en) 2003-06-27 2004-12-30 Hanes David H. Computer-readable medium, method and computer system for processing input/output requests
US7487235B2 (en) 2003-09-24 2009-02-03 Dell Products L.P. Dynamically varying a raid cache policy in order to optimize throughput
US7173852B2 (en) 2003-10-03 2007-02-06 Sandisk Corporation Corrected data storage and handling methods
US7096321B2 (en) 2003-10-21 2006-08-22 International Business Machines Corporation Method and system for a cache replacement technique with adaptive skipping
WO2005065084A2 (en) 2003-11-13 2005-07-21 Commvault Systems, Inc. System and method for providing encryption in pipelined storage operations in a storage network
JP4287433B2 (ja) 2003-11-18 2009-07-01 パナソニック株式会社 ファイル記録装置
US7171514B2 (en) * 2003-11-20 2007-01-30 International Business Machines Corporation Apparatus and method to control access to logical volumes using parallel access volumes
US7139864B2 (en) 2003-12-30 2006-11-21 Sandisk Corporation Non-volatile memory and method with block management system
US7328307B2 (en) 2004-01-22 2008-02-05 Tquist, Llc Method and apparatus for improving update performance of non-uniform access time persistent storage media
US7305520B2 (en) 2004-01-30 2007-12-04 Hewlett-Packard Development Company, L.P. Storage system with capability to allocate virtual storage segments among a plurality of controllers
US7356651B2 (en) 2004-01-30 2008-04-08 Piurata Technologies, Llc Data-aware cache state machine
US7130956B2 (en) 2004-02-10 2006-10-31 Sun Microsystems, Inc. Storage system including hierarchical cache metadata
US7130957B2 (en) 2004-02-10 2006-10-31 Sun Microsystems, Inc. Storage system structure for storing relational cache metadata
US7231590B2 (en) 2004-02-11 2007-06-12 Microsoft Corporation Method and apparatus for visually emphasizing numerical data contained within an electronic document
US7725628B1 (en) 2004-04-20 2010-05-25 Lexar Media, Inc. Direct secondary device interface by a host
US20050240713A1 (en) 2004-04-22 2005-10-27 V-Da Technology Flash memory device with ATA/ATAPI/SCSI or proprietary programming interface on PCI express
US7644239B2 (en) 2004-05-03 2010-01-05 Microsoft Corporation Non-volatile memory cache performance improvement
US7360015B2 (en) 2004-05-04 2008-04-15 Intel Corporation Preventing storage of streaming accesses in a cache
US7386663B2 (en) 2004-05-13 2008-06-10 Cousins Robert E Transaction-based storage system and method that uses variable sized objects to store data
US20050257017A1 (en) 2004-05-14 2005-11-17 Hideki Yagi Method and apparatus to erase hidden memory in a memory card
US7831561B2 (en) 2004-05-18 2010-11-09 Oracle International Corporation Automated disk-oriented backups
TWI255426B (en) * 2004-05-18 2006-05-21 Carry Computer Eng Co Ltd Storage control apparatus capable of analyzing volume information and the control method thereof
US7447847B2 (en) 2004-07-19 2008-11-04 Micron Technology, Inc. Memory device trims
US7395384B2 (en) 2004-07-21 2008-07-01 Sandisk Corproation Method and apparatus for maintaining data on non-volatile memory systems
US7203815B2 (en) 2004-07-30 2007-04-10 International Business Machines Corporation Multi-level page cache for enhanced file system performance via read ahead
US8407396B2 (en) 2004-07-30 2013-03-26 Hewlett-Packard Development Company, L.P. Providing block data access for an operating system using solid-state memory
US7664239B2 (en) 2004-08-09 2010-02-16 Cox Communications, Inc. Methods and computer-readable media for managing and configuring options for the real-time notification and disposition of voice services in a cable services network
US7398348B2 (en) 2004-08-24 2008-07-08 Sandisk 3D Llc Method and apparatus for using a one-time or few-time programmable memory with a host device designed for erasable/rewritable memory
EP1786205A1 (en) 2004-08-30 2007-05-16 Matsushita Electric Industrial Co., Ltd. Recorder
US20060075057A1 (en) 2004-08-30 2006-04-06 International Business Machines Corporation Remote direct memory access system and method
US7603532B2 (en) 2004-10-15 2009-10-13 Netapp, Inc. System and method for reclaiming unused space from a thinly provisioned data container
US8131969B2 (en) * 2004-10-20 2012-03-06 Seagate Technology Llc Updating system configuration information
US7873782B2 (en) 2004-11-05 2011-01-18 Data Robotics, Inc. Filesystem-aware block storage system, apparatus, and method
EP1839154A4 (en) 2004-12-06 2008-07-09 Teac Aerospace Technologies In SYSTEM AND METHOD FOR ERASING NON-VOLATILE RECORDING MEDIUM
US8074041B2 (en) * 2004-12-09 2011-12-06 International Business Machines Corporation Apparatus, system, and method for managing storage space allocation
US7581118B2 (en) 2004-12-14 2009-08-25 Netapp, Inc. Disk sanitization using encryption
US7487320B2 (en) 2004-12-15 2009-02-03 International Business Machines Corporation Apparatus and system for dynamically allocating main memory among a plurality of applications
KR100684887B1 (ko) 2005-02-04 2007-02-20 삼성전자주식회사 플래시 메모리를 포함한 데이터 저장 장치 및 그것의 머지방법
US20060136657A1 (en) 2004-12-22 2006-06-22 Intel Corporation Embedding a filesystem into a non-volatile device
US20060143396A1 (en) 2004-12-29 2006-06-29 Mason Cabot Method for programmer-controlled cache line eviction policy
US7246195B2 (en) 2004-12-30 2007-07-17 Intel Corporation Data storage management for flash memory devices
US9104315B2 (en) 2005-02-04 2015-08-11 Sandisk Technologies Inc. Systems and methods for a mass data storage system having a file-based interface to a host and a non-file-based interface to secondary storage
US20060184719A1 (en) 2005-02-16 2006-08-17 Sinclair Alan W Direct data file storage implementation techniques in flash memories
US20060190552A1 (en) 2005-02-24 2006-08-24 Henze Richard H Data retention system with a plurality of access protocols
US7254686B2 (en) 2005-03-31 2007-08-07 International Business Machines Corporation Switching between mirrored and non-mirrored volumes
US7620773B2 (en) 2005-04-15 2009-11-17 Microsoft Corporation In-line non volatile memory disk read cache and write buffer
US20060236061A1 (en) * 2005-04-18 2006-10-19 Creek Path Systems Systems and methods for adaptively deriving storage policy and configuration rules
US8452929B2 (en) 2005-04-21 2013-05-28 Violin Memory Inc. Method and system for storage of data in non-volatile media
US7702873B2 (en) * 2005-04-25 2010-04-20 Network Appliance, Inc. Managing common storage by allowing delayed allocation of storage after reclaiming reclaimable space in a logical volume
US20060265636A1 (en) 2005-05-19 2006-11-23 Klaus Hummler Optimized testing of on-chip error correction circuit
US7457910B2 (en) 2005-06-29 2008-11-25 Sandisk Corproation Method and system for managing partitions in a storage device
US7716387B2 (en) 2005-07-14 2010-05-11 Canon Kabushiki Kaisha Memory control apparatus and method
US7552271B2 (en) 2005-08-03 2009-06-23 Sandisk Corporation Nonvolatile memory with block management
US7984084B2 (en) 2005-08-03 2011-07-19 SanDisk Technologies, Inc. Non-volatile memory with scheduled reclaim operations
KR100739722B1 (ko) 2005-08-20 2007-07-13 삼성전자주식회사 플래시 메모리 관리 방법 및 플래시 메모리 시스템
US7580287B2 (en) 2005-09-01 2009-08-25 Micron Technology, Inc. Program and read trim setting
JP5008845B2 (ja) 2005-09-01 2012-08-22 株式会社日立製作所 ストレージシステムとストレージ装置及びその制御方法
JP2007071805A (ja) 2005-09-09 2007-03-22 Denso Corp 力学量センサの製造方法
US20070061508A1 (en) 2005-09-13 2007-03-15 Quantum Corporation Data storage cartridge with built-in tamper-resistant clock
US7437510B2 (en) 2005-09-30 2008-10-14 Intel Corporation Instruction-assisted cache management for efficient use of cache and memory
US7529905B2 (en) 2005-10-13 2009-05-05 Sandisk Corporation Method of storing transformed units of data in a memory system having fixed sized storage blocks
US7516267B2 (en) 2005-11-03 2009-04-07 Intel Corporation Recovering from a non-volatile memory failure
JP4896500B2 (ja) * 2005-11-14 2012-03-14 株式会社日立製作所 機器停止を伴う仮想ボリューム制御方法
US7739472B2 (en) 2005-11-22 2010-06-15 Sandisk Corporation Memory system for legacy hosts
US7366808B2 (en) 2005-11-23 2008-04-29 Hitachi, Ltd. System, method and apparatus for multiple-protocol-accessible OSD storage subsystem
US7526614B2 (en) 2005-11-30 2009-04-28 Red Hat, Inc. Method for tuning a cache
US7877540B2 (en) 2005-12-13 2011-01-25 Sandisk Corporation Logically-addressed file storage methods
US20070156998A1 (en) 2005-12-21 2007-07-05 Gorobets Sergey A Methods for memory allocation in non-volatile memories with a directly mapped file storage system
US20070143560A1 (en) 2005-12-21 2007-06-21 Gorobets Sergey A Non-volatile memories with memory allocation for a directly mapped file storage system
US20070143566A1 (en) 2005-12-21 2007-06-21 Gorobets Sergey A Non-volatile memories with data alignment in a directly mapped file storage system
US20070143567A1 (en) 2005-12-21 2007-06-21 Gorobets Sergey A Methods for data alignment in non-volatile memories with a directly mapped file storage system
US7747837B2 (en) 2005-12-21 2010-06-29 Sandisk Corporation Method and system for accessing non-volatile storage devices
US7831783B2 (en) 2005-12-22 2010-11-09 Honeywell International Inc. Effective wear-leveling and concurrent reclamation method for embedded linear flash file systems
US20070150663A1 (en) 2005-12-27 2007-06-28 Abraham Mendelson Device, system and method of multi-state cache coherence scheme
US9002795B2 (en) 2006-01-26 2015-04-07 Seagate Technology Llc Object-based data storage device
WO2007097026A1 (ja) 2006-02-27 2007-08-30 Fujitsu Limited キャッシュ制御装置およびキャッシュ制御プログラム
US20070208790A1 (en) 2006-03-06 2007-09-06 Reuter James M Distributed data-storage system
JP4885575B2 (ja) * 2006-03-08 2012-02-29 株式会社日立製作所 記憶領域の割当ての最適化方法及びそれを実現するための管理計算機
US7676628B1 (en) * 2006-03-31 2010-03-09 Emc Corporation Methods, systems, and computer program products for providing access to shared storage by computing grids and clusters with large numbers of nodes
US20070233937A1 (en) 2006-03-31 2007-10-04 Coulson Richard L Reliability of write operations to a non-volatile memory
US7636829B2 (en) 2006-05-02 2009-12-22 Intel Corporation System and method for allocating and deallocating memory within transactional code
US20070261030A1 (en) 2006-05-04 2007-11-08 Gaurav Wadhwa Method and system for tracking and prioritizing applications
US7653832B2 (en) 2006-05-08 2010-01-26 Emc Corporation Storage array virtualization using a storage block mapping protocol client and server
US8307148B2 (en) 2006-06-23 2012-11-06 Microsoft Corporation Flash management techniques
US7694103B1 (en) * 2006-06-23 2010-04-06 Emc Corporation Efficient use of memory and accessing of stored records
US7721059B2 (en) 2006-07-06 2010-05-18 Nokia Corporation Performance optimization in solid-state media
US20080052377A1 (en) 2006-07-11 2008-02-28 Robert Light Web-Based User-Dependent Customer Service Interaction with Co-Browsing
US7870306B2 (en) 2006-08-31 2011-01-11 Cisco Technology, Inc. Shared memory message switch and cache
JP4452261B2 (ja) * 2006-09-12 2010-04-21 株式会社日立製作所 ストレージシステムの論理ボリューム管理方法、論理ボリューム管理プログラム、及びストレージシステム
JP4942446B2 (ja) 2006-10-11 2012-05-30 株式会社日立製作所 ストレージ装置及びその制御方法
US7685178B2 (en) 2006-10-31 2010-03-23 Netapp, Inc. System and method for examining client generated content stored on a data container exported by a storage system
ES2431863T5 (es) 2006-11-03 2017-07-27 Air Products And Chemicals, Inc. Sistema y método para la monitorización de procesos
US20080120469A1 (en) 2006-11-22 2008-05-22 International Business Machines Corporation Systems and Arrangements for Cache Management
US7904647B2 (en) 2006-11-27 2011-03-08 Lsi Corporation System for optimizing the performance and reliability of a storage controller cache offload circuit
CN101681282A (zh) * 2006-12-06 2010-03-24 弗森多系统公司(dba弗森-艾奥) 用于共享的、前端、分布式raid的装置、系统和方法
US8074011B2 (en) * 2006-12-06 2011-12-06 Fusion-Io, Inc. Apparatus, system, and method for storage space recovery after reaching a read count limit
US8151082B2 (en) 2007-12-06 2012-04-03 Fusion-Io, Inc. Apparatus, system, and method for converting a storage request into an append data storage command
US8935302B2 (en) 2006-12-06 2015-01-13 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for data block usage information synchronization for a non-volatile storage volume
US20080140737A1 (en) 2006-12-08 2008-06-12 Apple Computer, Inc. Dynamic memory management
US20080140918A1 (en) 2006-12-11 2008-06-12 Pantas Sutardja Hybrid non-volatile solid state memory system
US7660911B2 (en) 2006-12-20 2010-02-09 Smart Modular Technologies, Inc. Block-based data striping to flash memory
US7913051B1 (en) * 2006-12-22 2011-03-22 Emc Corporation Methods and apparatus for increasing the storage capacity of a zone of a storage system
KR101395778B1 (ko) * 2007-03-14 2014-05-19 삼성전자주식회사 메모리 카드 및 그것을 포함하는 메모리 시스템 그리고그것의 동작 방법
US20080229045A1 (en) * 2007-03-16 2008-09-18 Lsi Logic Corporation Storage system provisioning architecture
US8135900B2 (en) 2007-03-28 2012-03-13 Kabushiki Kaisha Toshiba Integrated memory management and memory management method
US20080243966A1 (en) 2007-04-02 2008-10-02 Croisettier Ramanakumari M System and method for managing temporary storage space of a database management system
US8429677B2 (en) 2007-04-19 2013-04-23 Microsoft Corporation Composite solid state drive identification and optimization technologies
US9207876B2 (en) 2007-04-19 2015-12-08 Microsoft Technology Licensing, Llc Remove-on-delete technologies for solid state drive optimization
US7853759B2 (en) 2007-04-23 2010-12-14 Microsoft Corporation Hints model for optimization of storage devices connected to host and write optimization schema for storage devices
JP2008276646A (ja) 2007-05-02 2008-11-13 Hitachi Ltd ストレージ装置及びストレージ装置におけるデータの管理方法
US8850154B2 (en) 2007-09-11 2014-09-30 2236008 Ontario Inc. Processing system having memory partitioning
US20090070526A1 (en) 2007-09-12 2009-03-12 Tetrick R Scott Using explicit disk block cacheability attributes to enhance i/o caching efficiency
US7873803B2 (en) 2007-09-25 2011-01-18 Sandisk Corporation Nonvolatile memory with self recovery
TWI366828B (en) 2007-09-27 2012-06-21 Phison Electronics Corp Wear leveling method and controller using the same
JP5134915B2 (ja) * 2007-11-02 2013-01-30 株式会社日立製作所 記憶領域の構成最適化方法、計算機システム及び管理計算機
CN104093211B (zh) 2007-11-05 2018-12-07 蜂窝通信设备有限责任公司 缓冲器状态报告系统和方法
JP2009122850A (ja) 2007-11-13 2009-06-04 Toshiba Corp ブロックデバイス制御装置及びアクセス範囲管理方法
US8195912B2 (en) * 2007-12-06 2012-06-05 Fusion-io, Inc Apparatus, system, and method for efficient mapping of virtual and physical addresses
JP5238235B2 (ja) * 2007-12-07 2013-07-17 株式会社日立製作所 管理装置及び管理方法
KR101086855B1 (ko) 2008-03-10 2011-11-25 주식회사 팍스디스크 고속 동작하는 반도체 스토리지 시스템 및 그 제어 방법
US8051243B2 (en) * 2008-04-30 2011-11-01 Hitachi, Ltd. Free space utilization in tiered storage systems
US20090276654A1 (en) 2008-05-02 2009-11-05 International Business Machines Corporation Systems and methods for implementing fault tolerant data processing services
JP5159421B2 (ja) 2008-05-14 2013-03-06 株式会社日立製作所 ストレージシステム及び管理装置を用いたストレージシステムの管理方法
US8775718B2 (en) 2008-05-23 2014-07-08 Netapp, Inc. Use of RDMA to access non-volatile solid-state memory in a network storage system
US8554983B2 (en) 2008-05-27 2013-10-08 Micron Technology, Inc. Devices and methods for operating a solid state drive
US8239624B2 (en) * 2008-06-06 2012-08-07 Pivot3, Inc. Method and system for data migration in a distributed RAID implementation
US7917803B2 (en) 2008-06-17 2011-03-29 Seagate Technology Llc Data conflict resolution for solid-state memory devices
US8843691B2 (en) 2008-06-25 2014-09-23 Stec, Inc. Prioritized erasure of data blocks in a flash storage device
US8135907B2 (en) 2008-06-30 2012-03-13 Oracle America, Inc. Method and system for managing wear-level aware file systems
JP5242264B2 (ja) 2008-07-07 2013-07-24 株式会社東芝 データ制御装置、ストレージシステムおよびプログラム
US20100017556A1 (en) 2008-07-19 2010-01-21 Nanostar Corporationm U.S.A. Non-volatile memory storage system with two-stage controller architecture
KR101086857B1 (ko) 2008-07-25 2011-11-25 주식회사 팍스디스크 데이터 머지를 수행하는 반도체 스토리지 시스템의 제어 방법
US7941591B2 (en) 2008-07-28 2011-05-10 CacheIQ, Inc. Flash DIMM in a standalone cache appliance system and methodology
JP5216463B2 (ja) 2008-07-30 2013-06-19 株式会社日立製作所 ストレージ装置、その記憶領域管理方法及びフラッシュメモリパッケージ
US8205063B2 (en) * 2008-12-30 2012-06-19 Sandisk Technologies Inc. Dynamic mapping of logical ranges to write blocks
US20100235597A1 (en) * 2009-03-10 2010-09-16 Hiroshi Arakawa Method and apparatus for conversion between conventional volumes and thin provisioning with automated tier management
US20100262979A1 (en) 2009-04-08 2010-10-14 Google Inc. Circular command queues for communication between a host and a data storage device
US8433845B2 (en) 2009-04-08 2013-04-30 Google Inc. Data storage device which serializes memory device ready/busy signals
US8380909B2 (en) 2009-04-08 2013-02-19 Google Inc. Multiple command queues having separate interrupts
US8516219B2 (en) * 2009-07-24 2013-08-20 Apple Inc. Index cache tree

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200008653A (ko) * 2017-07-06 2020-01-28 마이크론 테크놀로지, 인크. 인터페이스 구성 요소
US11436167B2 (en) 2017-07-06 2022-09-06 Micron Technology, Inc. Interface components between a controller and memory devices
WO2022097973A1 (ko) * 2020-11-04 2022-05-12 삼성전자 주식회사 전자 장치 및 이를 이용한 스토리지 관리 방법

Also Published As

Publication number Publication date
US9606914B2 (en) 2017-03-28
JP5518197B2 (ja) 2014-06-11
JP2013504820A (ja) 2013-02-07
US9292431B2 (en) 2016-03-22
WO2011031903A2 (en) 2011-03-17
CN102598019B (zh) 2015-08-19
US20140101375A1 (en) 2014-04-10
WO2011031903A3 (en) 2011-07-21
US20150058547A1 (en) 2015-02-26
EP2476079A4 (en) 2013-07-03
US8578127B2 (en) 2013-11-05
KR101769883B1 (ko) 2017-08-21
CN102598019A (zh) 2012-07-18
US20110060887A1 (en) 2011-03-10
EP2476079A2 (en) 2012-07-18

Similar Documents

Publication Publication Date Title
US9442844B2 (en) Apparatus, system, and method for a storage layer
KR101769883B1 (ko) 저장부 할당 장치, 시스템, 및 방법
US9983993B2 (en) Apparatus, system, and method for conditional and atomic storage operations
US20190073296A1 (en) Systems and Methods for Persistent Address Space Management
US10013354B2 (en) Apparatus, system, and method for atomic storage operations
US8898376B2 (en) Apparatus, system, and method for grouping data stored on an array of solid-state storage elements
US9075710B2 (en) Non-volatile key-value store
US9251086B2 (en) Apparatus, system, and method for managing a cache
US8725934B2 (en) Methods and appratuses for atomic storage operations
EP2802991B1 (en) Systems and methods for managing cache admission
US20120210041A1 (en) Apparatus, system, and method for caching data

Legal Events

Date Code Title Description
N231 Notification of change of applicant
A201 Request for examination
N231 Notification of change of applicant
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right