KR20210075731A - 스토리지 장치 및 이의 동작 방법 - Google Patents

스토리지 장치 및 이의 동작 방법 Download PDF

Info

Publication number
KR20210075731A
KR20210075731A KR1020190167144A KR20190167144A KR20210075731A KR 20210075731 A KR20210075731 A KR 20210075731A KR 1020190167144 A KR1020190167144 A KR 1020190167144A KR 20190167144 A KR20190167144 A KR 20190167144A KR 20210075731 A KR20210075731 A KR 20210075731A
Authority
KR
South Korea
Prior art keywords
key
value
block
stream
keys
Prior art date
Application number
KR1020190167144A
Other languages
English (en)
Inventor
김찬수
샤티쉬 쿠마르
이황
허완
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Priority to KR1020190167144A priority Critical patent/KR20210075731A/ko
Priority to US17/011,050 priority patent/US11461047B2/en
Priority to CN202011431455.0A priority patent/CN112988615A/zh
Publication of KR20210075731A publication Critical patent/KR20210075731A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/061Improving I/O performance
    • 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/0253Garbage collection, i.e. reclamation of unreferenced memory
    • 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/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • 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/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0652Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • 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/7205Cleaning, compaction, garbage collection, erase control
    • 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/7209Validity control, e.g. using flags, time stamps or sequence numbers

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)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

본 개시의 기술적 사상에 따른 스토리지 장치는, 복수의 블록들을 포함하는 비휘발성 메모리 및 호스트로부터 복수의 키(key)들 및 복수의 키들 각각에 대응하는 복수의 밸류(value)들을 포함하는 커맨드를 수신하고, 복수의 키들 및 복수의 밸류들을 서로 분리하고, 복수의 키들 중 제1 키들과 제1 키들에 대응하는 제1 밸류들에 대한 인덱스들을 병합함으로써 제1 키 스트림(key stream)을 생성하는 컨트롤러를 포함하고, 컨트롤러는, 제1 키 스트림과, 복수의 블록들 중 제1 밸류들이 저장된 적어도 하나의 제1 블록 간의 매칭 정보를 포함하는 키 매트릭스를 업데이트할 수 있다.

Description

스토리지 장치 및 이의 동작 방법{STORAGE DEVICE AND OPERATING METHOD OF THE SAME}
본 개시의 기술적 사상은 스토리지 장치 및 이의 동작 방법에 관한 것으로서, 구체적으로 키-밸류 기반으로 데이터를 저장하는 스토리지 장치 및 이의 동작 방법에 관한 것이다.
근래 다양한 유형의 전자 장치들이 이용되고 있다. 일부 전자 장치는 데이터를 저장할 수 있고, 저장된 데이터에 기초하여 동작할 수 있다. 이를 위해, 전자 장치는 데이터를 저장하기 위해 스토리지 장치 또는 스토리지 시스템을 포함하거나 외부의 스토리지 장치 또는 스토리지 시스템과 통신하면서 데이터를 저장하거나 읽을 수 있다.
스토리지 장치는 다양하게 분류될 수 있다. 예로서, 스토리지 장치는 비휘발성 메모리 기반 스토리지 및 휘발성 메모리 기반 스토리지로 분류될 수 있다. 비휘발성 메모리 기반 스토리지는 전원이 공급되지 않더라도 데이터를 손실하지 않을 수 있다. 한편, 전원 공급이 중단되는 경우 휘발성 메모리 기반 스토리지에 저장된 데이터는 소실될 수 있으나, 휘발성 메모리 기반 스토리지는 비휘발성 메모리 기반 스토리지에 비해 빠르게 동작할 수 있다.
예로서, 스토리지 장치는 블록 스토리지(Block Storage), 파일 스토리지(File Storage), 및 오브젝트 스토리지로 분류될 수 있다. 블록 스토리지는 물리적 위치에 기초하여 데이터를 관리하고, 파일 스토리지는 논리적 순서(Logical Sequence)에 기초하여 데이터를 관리할 수 있다. 한편, 오브젝트 스토리지는 고유 식별자에 기초하여 데이터를 관리할 수 있다. 블록 스토리지 및 파일 스토리지는 텍스트 데이터의 양이 많은 경우에 유용한 반면, 오브젝트 스토리지는 소리 데이터, 영상 데이터 등과 같은 비정형 데이터의 양이 많은 경우에 효율적인 대안일 수 있다. 오브젝트 스토리지의 일 예로서, 키-밸류 기반으로 데이터를 저장하는 키-밸류 스토리지가 있다.
본 개시의 기술적 사상은 키 스트림을 이용하여 비휘발성 메모리의 각 블록에 저장된 밸류들의 유효성을 판단함으로써, 가비지 컬렉션 동작을 수행 시 연산량을 줄이고 처리속도를 높일 수 있는 스토리지 장치 및 이의 동작 방법을 제공한다.
상기와 같은 목적을 달성하기 위하여, 본 개시의 기술적 사상의 일측면에 따른 스토리지 장치는, 복수의 블록들을 포함하는 비휘발성 메모리 및 호스트로부터 복수의 키(key)들 및 복수의 키들 각각에 대응하는 복수의 밸류(value)들을 포함하는 커맨드를 수신하고, 복수의 키들 및 복수의 밸류들을 서로 분리하고, 복수의 키들 중 제1 키들과 제1 키들에 대응하는 제1 밸류들에 대한 인덱스들을 병합함으로써 제1 키 스트림(key stream)을 생성하는 컨트롤러를 포함하고, 컨트롤러는, 제1 키 스트림과, 복수의 블록들 중 제1 밸류들이 저장된 적어도 하나의 제1 블록 간의 매칭 정보를 포함하는 키 매트릭스를 업데이트할 수 있다.
본 개시의 기술적 사상의 일측면에 따른 스토리지 장치는, 복수의 블록들을 포함하고, 복수의 키들로 구성된 복수의 키 스트림들 및 복수의 키들에 대응하는 복수의 밸류들로 구성된 복수의 밸류 스트림들을 저장하는 비휘발성 메모리, 키 스트림 별로 각 키 스트림에 포함된 키들에 대응하는 밸류들이 복수의 블록들에 저장되어 있는지를 나타내는 키 매트릭스를 저장하는 휘발성 메모리 및 키 매트릭스를 기초로 복수의 블록들 중 가비지 컬렉션을 수행할 제1 블록을 선택하고, 제1 블록을 해제(release)하는 가비지 컬렉션을 수행하는 컨트롤러를 포함할 수 있다.
본 개시의 기술적 사상의 일측면에 따른 복수의 블록들을 포함하는 비휘발성 메모리를 포함하는 스토리지 장치의 동작 방법은, 복수의 키들과 복수의 키들에 대응하는 복수의 밸류들의 어드레스들을 포함하는 키 스트림을 생성하고 저장하는 단계, 키 스트림 별로 복수의 블록들 각각과 관련된 어드레스의 포함 여부를 나타내는 키 매트릭스를 업데이트하는 단계, 키 매트릭스를 기초로, 복수의 블록들 중 제1 블록을 선택하는 단계 및 제1 블록을 해제하는 가비지 컬렉션을 수행하는 단계를 포함할 수 있다.
본 개시의 예시적 실시예에 따른 스토리지 장치 및 이의 동작 방법에 의하면, 키 스트림을 이용하여 비휘발성 메모리의 각 블록에 저장된 밸류들의 유효성을 판단할 수 있으므로, 가비지 컬렉션 동작을 수행 시 연산량을 줄이고 처리속도를 높일 수 있다.
도 1은 본 개시의 일 실시예에 따른 스토리지 시스템을 나타내는 블록도이다.
도 2는 본 개시의 일 실시예에 따른 스토리지 장치를 나타내는 블록도이다.
도 3은 본 개시의 일 실시예에 따른 스토리지 장치의 동작을 나타내는 개념도이다.
도 4a 및 도 4b는 본 개시의 일 실시예에 따른 키-밸류 매니저의 동작을 나타내는 개념도이다.
도 5는 본 개시의 일 실시예에 따른 스토리지 장치의 동작 방법을 나타내는 순서도이다.
도 6은 본 개시의 일 실시예에 따른 스토리지 장치의 동작을 나타내는 개념도이다.
도 7a 및 도 7b는 본 개시의 일 실시예에 따른 키-밸류 매니저의 동작을 나타내는 개념도이다.
도 8a 및 내지 8d는 본 개시의 일 실시예에 따른 스토리지 장치의 동작을 나타내는 개념도이다.
도 9는 본 개시의 일 실시예에 따른 스토리지 장치의 동작 방법을 나타내는 순서도이다.
도 10은 본 개시의 일 실시예에 따른 스토리지 장치의 동작 방법을 나타내는 순서도이다
도 11은 본 개시의 일 실시예에 따른 스토리지 장치를 나타내는 블록도이다.
도 12는 본 개시의 일 실시예에 따른 전자 장치를 나타내는 블록도이다.
도 1은 본 개시의 일 실시예에 따른 스토리지 시스템을 나타내는 블록도이다.
도 1을 참조하면, 스토리지 시스템(10)은 스토리지 장치(100) 및 호스트(200)를 포함하고, 스토리지 장치(100)는 컨트롤러(110), 데이터 버퍼(130) 및 비휘발성 메모리(Non Volatile Memory, NVM)(150)를 포함할 수 있다. 호스트(200)는 다양한 인터페이스를 통하여 스토리지 장치(100)와 통신할 수 있다. 예를 들어, 호스트(200)는 AP(Application Processor) 또는 SoC(System-On-a-Chip)로 구현될 수 있다.
일 예로서, 스토리지 장치(100)는 키-밸류 스토리지 장치 또는 키-밸류 스토어(store)일 수 있고, 예를 들어, 키-밸류 SSD(Solid State Drive)일 수 있다. 키-밸류 스토리지 장치는 키-밸류 페어(pair)를 이용하여 데이터를 빠르고 간단하게 처리하는 장치이다. 여기서, "키-밸류 페어"는 유일성을 가지는 키와, 상기 키에 대응하는 데이터인 밸류의 쌍이며, "튜플(tuple)" 또는 "키-밸류 튜플"이라고 지칭할 수 있다. 키-밸류 페어에서, 키는 파일 네임(file name), URI(Uniform Resource Identifier) 또는 해시와 같은 임의의 스트링(string)으로 표시되고, 밸류는 이미지, 사용자 선호 파일 또는 문서와 같은 임의의 종류의 데이터일 수 있다. 이때, 키와 밸류의 사이즈는 가변적이며, 예를 들어, 밸류의 사이즈는 밸류에 포함되는 데이터에 따라 변경될 수 있다.
이하에서는, 스토리지 장치(100)가 키-밸류 스토리지 장치인 실시예를 중심으로 설명하기로 하며, 본 명세서에서, 스토리지 장치(100)는 키-밸류 스토리지 장치 또는 키-밸류 스토어와 실질적으로 동일한 의미로 사용될 수 있다. 그러나, 스토리지 장치(100)는 키-밸류 스토리지 장치에 한정되지 않으며, 데이터를 오브젝트 단위로 관리하는 임의의 오브젝트 캐시 시스템 또는 오브젝트 스토리지 시스템에 적용될 수 있다. 따라서, 스토리지 장치(100)는 키-밸류 페어가 아닌 임의의 방식으로 데이터를 오브젝트 단위로 관리할 수 있다.
호스트(200)는 키(KEY)-밸류(VALUE) 페어를 포함하는 데이터를 기입하기 위한 커맨드(CMD), 예를 들어, 기입 요청 또는 풋(put) 커맨드를 스토리지 장치(100)에 전송할 수 있고, 스토리지 장치(100)는 커맨드(CMD)에 응답하여 비휘발성 메모리(150)에 밸류(VALUE)를 기입할 수 있다. 일 예로서, 호스트(200)는 키를 포함하는 커맨드(CMD), 예를 들어, 독출 요청 또는 겟(get) 커맨드를 스토리지 장치(100)에 전송할 수 있고, 스토리지 장치(100)는 커맨드(CMD)에 응답하여 비휘발성 메모리(150)로부터 키(KEY)에 대응하는 밸류(VALUE)를 독출할 수 있다.
컨트롤러(110)는 호스트(200)로부터의 기입 요청에 응답하여 비휘발성 메모리(150)에 밸류를 기입하거나, 또는 호스트(200)로부터의 독출 요청에 응답하여 비휘발성 메모리(150)에 저장된 밸류를 독출하도록 비휘발성 메모리(150)를 제어할 수 있다. 컨트롤러(110)는 키-밸류 매니저(120)를 포함할 수 있다.
키-밸류 매니저(120)는 커맨드(CMD)에 포함되는 키-밸류 페어를 수신하고, 키-밸류 페어에 포함되는 키와 밸류를 분리할 수 있다. 키-밸류 매니저(120)는 키-밸류 페어에 포함되는 복수의 키들(KEY)을 추출하고, 데이터 버퍼(130)에 저장할 수 있다. 키-밸류 매니저(120)는 키-밸류 페어에 포함되는 복수의 밸류들(VALUE)을 추출하고, 데이터 버퍼(130)에 저장할 수 있다.
키-밸류 매니저(120)는 일정한 개수 또는 일정한 데이터 양의 복수의 밸류들(VALUE)이 데이터 버퍼(130)에 저장된 경우, 저장된 복수의 밸류들(VALUE)을 밸류 스트림으로서 비휘발성 메모리(150)에 저장할 수 있다.
키-밸류 매니저(120)는 일정한 개수 또는 일정한 데이터 양의 복수의 키들(KEY)이 데이터 버퍼(130)에 저장된 경우, 복수의 키들(KEY)과 복수의 키들(KEY) 각각에 대응하는 밸류(VALUE)에 대한 인덱스를 병합함으로써 키 스트림을 생성할 수 있다. 키-밸류 매니저(120)는 생성한 키 스트림을 비휘발성 메모리(150)에 저장할 수 있다. 여기서 밸류(VALUE)에 대한 인덱스는, 밸류(VALUE)가 저장된 비휘발성 메모리의 영역에 대한 정보에 대응될 수 있다. 일 예로서, 밸류 스트림 및 키 스트림 각각은 비휘발성 메모리(150)의 서로 다른 영역에 저장될 수 있다.
키-밸류 매니저(120)는 생성한 키 스트림을 기초로 데이터 버퍼(130)에 저장된 키 매트릭스(140)를 업데이트할 수 있다. 여기서 키 매트릭스(140)는, 하나의 키 스트림이 포함하고 있는 키들(KEY)에 대응하는 밸류들(VALUE)이 비휘발성 메모리(150)의 각 블록에 저장되어 있는지를 나타내는 정보를 키 스트림 별로 포함할 수 있다. 즉, 키 매트릭스(140)는 하나의 키 스트림과 그 키 스트림에 대응하는 밸류들(VALUE)이 저장된 블록들 간의 매칭 정보를 키 스트림 별로 포함할 수 있다. 일 예로서, 키 매트릭스(140)는 키 스트림 별로, 복수의 블록들과 관련된 인덱스의 포함 여부를 나타내는 정보로 구현될 수 있다. 예를 들어, 비휘발성 메모리(150)에 3개의 블록들(제1 블록, 제2 블록 및 제3 블록)이 존재하는 경우, 키 매트릭스(140)는 키 스트림 별로, 제1 블록과 관련된 인덱스의 포함 여부, 제2 블록과 관련된 인덱스의 포함 여부 및 제3 블록과 관련된 인덱스의 포함 여부를 나타내는 값들을 가질 수 있다. 한편, 키-밸류 매니저(120)가 키 매트릭스(140)를 업데이트하는 동작에 관한 구체적인 설명은 도 4a 및 도 4b에서 후술한다.
키-밸류 매니저(120)는 키 매트릭스(140)를 이용하여 가비지 컬렉션(Garbage Collection)을 수행할 수 있다. 키-밸류 매니저(120)는 키 매트릭스(140)를 이용하여 비휘발성 메모리(150)의 복수의 블록들 중 대상 블록을 선택하고, 대상 블록을 해제하는 가비지 컬렉션을 수행할 수 있다.
일 예로서, 키-밸류 매니저(120)는 키 매트릭스(140)를 이용하여 비휘발성 메모리(150)의 복수의 블록들 각각에 대하여, 각 블록과 관련된 인덱스를 포함하는 키 스트림의 개수를 확인하고, 확인한 키 스트림의 개수가 가장 적은 블록을 대상 블록으로 선택할 수 있다. 즉, 키-밸류 매니저(120)는 키 매트릭스(140)를 이용하여 유효한 밸류들(VALUE)이 가장 적게 저장되어 있는 것으로 예상되는 블록을 선택할 수 있고, 선택한 블록에 대하여 가비지 컬렉션을 수행할 수 있다. 한편, 가비지 컬렉션 동작에 대한 구체적인 설명은 도 8a 내지 도 8d에서 후술한다.
데이터 버퍼(130)는 키(KEY), 밸류(VALUE) 및 키 매트릭스(KEY MATRIX)(140)를 저장하기 위한 적어도 하나의 메모리 소자를 포함할 수 있다. 일 예로서, 데이터 버퍼(130)는 동적 랜덤 액세스 메모리(Dynamic Random Access Memory; DRAM), 정적 랜덤 액세스 메모리(Static Random Access Memory; SRAM)와 같은 휘발성 메모리 소자를 포함할 수 있다.
비휘발성 메모리(150)는 메모리 셀 어레이(Memory Cell Array)(MCA)를 포함할 수 있고, 메모리 셀 어레이(MCA)는 메모리 블록들(BLK1 내지 BLKz)을 포함할 수 있으며, 메모리 블록(BLK1)은 복수의 페이지들(PG1 내지 PGk)을 포함할 수 있다. 여기서, z와 k는 각각 양의 정수일 수 있고, 실시예에 따라 다양하게 변경될 수 있다. 예를 들어, 메모리 블록은 소거의 단위이고, 페이지는 기입 및 독출의 단위일 수 있다. 일부 실시예들에서, 메모리 셀 어레이(MCA)는 복수의 플레인들(planes), 복수의 다이들(dies), 또는 복수의 칩들(chips)을 포함할 수 있다. 일 예로서, 비휘발성 메모리(150)는 플래시 메모리 장치를 포함할 수 있고, 예를 들어, 낸드(NAND) 플래시 메모리 장치를 포함할 수 있다. 그러나, 본 발명은 이에 한정되지 않고, 비휘발성 메모리(150)는 rRAM(resistive RAM), PRAM(phase change RAM), MRAM(magnetic RAM)과 같은 저항형 메모리 장치를 포함할 수 다.
스토리지 시스템(10)은 예를 들어, PC(personal computer), 데이터 서버, 네트워크-결합 스토리지, IoT(Internet of Things) 장치, 또는 휴대용 전자 기기로 구현될 수 있다. 휴대용 전자 기기는, 랩탑 컴퓨터, 이동 전화기, 스마트폰, 태블릿 PC, PDA(personal digital assistant), EDA(enterprise digital assistant), 디지털 스틸 카메라, 디지털 비디오 카메라, 오디오 장치, PMP(portable multimedia player), PND(personal navigation device), MP3 플레이어, 휴대용 게임 콘솔(handheld game console), e-북(e-book), 웨어러블 기기 등일 수 있다.
일부 실시예들에서, 스토리지 장치(100)는 전자 장치에 내장되는 내부 메모리일 수 있다. 예를 들어, 스토리지 장치(100)는 SSD, 임베디드 UFS(Universal Flash Storage) 메모리 장치 또는 eMMC(embedded Multi-Media Card)일 수 있다. 일부 실시예들에서, 스토리지 장치(100)는 전자 장치에 착탈 가능한 외장 메모리일 수 있다. 예를 들어, 스토리지 장치(100)는 UFS 메모리 카드, CF(Compact Flash), SD(Secure Digital), Micro-SD(Micro Secure Digital), Mini-SD(Mini Secure Digital), xD(extreme Digital) 또는 메모리 스틱(Memory Stick)일 수 있다.
종래의 방식에 따른 스토리지 장치는, 키-밸류 페어로부터 키와 밸류를 각각 분리함으로써 키와 밸류를 별도로 저장하고, 밸류에 포함된 유효성 정보를 이용하여 가비지 컬렉션을 수행하였다. 이에 따라, 스토리지 장치는 대상 블록에 대한 가비지 컬렉션을 수행 시, 대상 블록에 저장된 모든 밸류들을 독출하고, 독출된 밸류들에 포함된 유효성 정보를 이용하여 각 밸류의 유효 여부를 확인하고, 유효한 밸류들만을 새로운 영역에 저장하였다. 이와 같은 방식은 대상 블록으로부터 유효한 밸류들만을 선별적으로 독출하지 못하므로, 가비지 컬렉션 동작의 연산량이 증가하고, 처리 속도가 낮아지는 문제점이 있었다.
또한, 종래의 방식에 따른 스토리지 장치는, 유효성 정보를 이용하여 각 밸류의 유효 여부를 확인하기 위해 추가적으로 멀티맵 테이블을 이용한다. 여기서 멀티맵 테이블이란, 연속적으로 병합됨으로써 저장된 복수의 밸류들에 대하여, 첫 번째 밸류가 저장된 어드레스 및 연속적인 밸류들 각각의 유효성을 나타내는 유효성 비트들을 포함하는 테이블이다. 스토리지 장치는 가비지 컬렉션을 수행 시, 대상 블록으로부터 독출한 밸류의 유효성 정보에 포함된 어드레스 정보와 순서 정보를 확인하고, 멀티맵 테이블에서 확인한 어드레스와 확인한 순서에 대응하는 유효성 비트를 확인함으로써 해당 밸류가 유효한 밸류인지 판단하였다.
이와 같은 방식으로 인해 발생할 수 있는 또 다른 문제점은, 밸류의 사이즈에 따라 멀티맵 테이블에서 정의하는 연속적으로 병합되는 밸류들의 개수가 변경될 수 있다는 점이다. 즉, 밸류의 사이즈가 작아지면 연속적으로 병합되는 밸류들의 개수가 커질 수 있으므로, 멀티맵 테이블의 크기가 커질 수 있다. 반면, 밸류의 사이즈가 커지면 연속적으로 병합되는 밸류들의 개수가 작아질 수 있으므로, 멀티맵 테이블의 크기가 작아질 수 있다. 이와 같이 종래의 방식에 따른 스토리지 장치는 유효성 확인을 위해 필요로 하는 정보의 사이즈가 밸류의 사이즈에 따라 유효성 확인 동작의 불안정성을 초래하는 문제점이 있었다.
본 개시의 실시예에 따른 스토리지 장치(100)는, 복수의 키들에 복수의 밸류들이 저장된 비휘발성 메모리(150) 상의 영역(예를 들면, 복수의 블록들(BLK1~BLKz))에 대한 정보인 인덱스들을 병합함으로써 키 스트림을 생성하고, 키 스트림 별 인덱스에 대한 정보를 포함하는 키 매트릭스를 생성할 수 있다. 따라서 본 개시의 실시예에 따른 스토리지 장치는, 가비지 컬렉션을 수행 시, 키 매트릭스를 이용하여 가비지 컬렉션의 대상 블록과 관련된 인덱스를 포함하는 키 스트림을 독출하고, 독출한 키 스트림으로부터 대상 블록과 관련된 밸류들의 주소만을 획득할 수 있다. 이에 따라, 본 개시의 일 실시예에 따른 스토리지 장치는 대상 블록에 저장된 모든 밸류들을 독출하지 않고, 유효한 밸류들만을 독출함으로써, 가비지 컬렉션 동작의 연산량을 줄일 수 있고, 처리 속도를 높일 수 있다.
또한, 본 개시의 일 실시예에 따른 스토리지 장치는, 블록들의 개수와 키 스트림의 개수에 대응하는 사이즈를 갖는 키 매트릭스를 이용할 수 있다. 따라서, 본 개시의 일 실시예에 따른 스토리지 장치는, 유효성 판단을 위해 필요로 하는 정보가 밸류의 사이즈와 무관하게 일정한 사이즈를 가짐으로써, 밸류의 사이즈의 변동에 따른 유효성 확인 동작의 불안정성을 방지할 수 있다.
도 2는 본 개시의 일 실시예에 따른 스토리지 장치를 나타내는 블록도이다.
도 2를 참조하면, 스토리지 장치(100)는 키-밸류 매니저(120), 데이터 버퍼(130) 및 비휘발성 메모리(150)를 포함할 수 있다. 키-밸류 매니저(120)는 키-밸류 추출기(121), 컴팩션 모듈(122) 및 가비지 컬렉션 모듈(123)을 포함할 수 있다.
키-밸류 추출기(121)는 커맨드(CMD)에 포함된 키(KEY) 및 밸류(VALUE)를 추출할 수 있다. 키-밸류 추출기(121)는 추출한 키(KEY)를 데이터 버퍼(130)의 키 버퍼(131)에 저장하고, 추출한 밸류(VALUE)를 데이터 버퍼(130)의 밸류 버퍼(132)에 저장할 수 있다. 일 예로서, 키 버퍼(131) 및 밸류 버퍼(132)는 별도의 메모리 소자로써 구성될 수 있다. 또 다른 실시예에서, 키 버퍼(131) 및 밸류 버퍼(132)는 데이터 버퍼(130)의 서로 다른 영역으로 구성될 수 있다.
밸류 버퍼(132)에 저장된 복수의 밸류들(VALUE)이 일정 데이터 양 이상 되면, 키-밸류 추출기(121)는 복수의 밸류들(VALUE)을 기초로 밸류 스트림(ST_VAL)을 생성할 수 있다. 일 예로서, 키-밸류 추출기(121)는 복수의 밸류들(VALUE)을 연속적으로 배열함으로써 밸류 스트림(ST_VAL)을 생성할 수 있다. 키-밸류 추출기(121)는 생성된 밸류 스트림(ST_VAL)을 비휘발성 메모리(150)의 제2 영역(AR2)에 저장할 수 있다.
키 버퍼(131)에 저장된 복수의 키들(KEY)이 일정 데이터 양 이상 되면, 키-밸류 추출기(121)는 복수의 키들(KEY)을 기초로 키 스트림(ST_KEY)을 생성할 수 있다. 일 예로서, 키-밸류 추출기(121)는 복수의 키들(KEY)을 연속적으로 배열하고, 복수의 키들(KEY) 각각에 대응하는 밸류(VALUE)에 대한 인덱스를 병합함으로써 키 스트림(ST_KEY)을 생성할 수 있다. 여기서 밸류(VALUE)에 대한 인덱스는, 밸류(VALUE)가 저장된 비휘발성 메모리(150)의 영역에 대한 정보에 대응될 수 있다. 일 예로서, 밸류(VALUE)에 대한 인덱스는, 밸류(VALUE)의 제2 영역(AR2) 내의 물리적 어드레스일 수 있다.
일 예로서, 키-밸류 추출기(121)는 저장된 키(KEY)의 제1 영역(AR1) 내의 물리적 어드레스를 키 테이블을 이용하여 관리할 수 있다. 일 예로서, 상기 키 테이블은 키(KEY)에 대한 매핑 인덱스로서 키(KEY)에 대응하는 해시 키(hashed key)를 같이 저장하는 해시 테이블로서 생성될 수 있다.
키-밸류 추출기(121)는 생성한 키 스트림(ST_KEY)을 기초로, 각 키 스트림(ST_KEY)의 비휘발성 메모리(150)의 복수의 블록들 각각과 관련된 인덱스의 포함 여부를 나타내는 키 매트릭스(140)를 업데이트하고, 업데이트한 키 매트릭스(140)를 매핑 버퍼(133)에 저장할 수 있다. 일 예로서, 밸류(VALUE)에 대한 인덱스가 밸류(VALUE)가 저장된 비휘발성 메모리(150)의 영역에 대한 물리적 어드레스인 경우, 키-밸류 추출기(121)는 비휘발성 메모리(150)의 복수의 블록들 중 키 스트림(ST_KEY)에 포함된 물리적 어드레스와 관련된 블록을 확인하고, 키 매트릭스(140)에서 상기 생성한 키 스트림(ST_VAL)과 상기 확인한 블록에 대응하는 값을 변경함으로써 키 매트릭스(140)를 업데이트할 수 있다.
컴팩션 모듈(122)은 제1 영역(AR1)에 저장된 적어도 하나의 키 스트림(ST_KEY)에 대한 컴팩션 동작을 수행할 수 있다. 본 명세서에서, 컴팩션 동작은 비휘발성 메모리(150)에 저장된 유효하지 않은 밸류(VALUE)에 대응하는 키(KEY)를 삭제함으로써 새로운 키 스트림(ST_KEY)을 생성하는 동작을 의미할 수 있다. 일 예로서, 컴팩션 동작은 LSM(Log Structured Merge) 트리 기반의 데이터 구조에서, 데이터를 압축하기 위한 동작을 의미할 수 있다.
컴팩션 모듈(122)은 제1 영역(AR1)에 저장된 적어도 하나의 키 스트림(ST_KEY)을 독출하고, 유효하지 않은 키를 판별할 수 있다. 일 예로서, 유효하지 않은 키는 호스트(도 1, 200)로부터 삭제 커맨드를 수신한 밸류(VALUE)에 대응하는 키(KEY)일 수 있다. 컴팩션 모듈(122)은 적어도 하나의 키 스트림(ST_KEY)에 포함되는 유효한 키(KEY)만을 이용하여 새로운 키 스트림(ST_KEY)을 생성할 수 있다. 컴팩션 모듈(122)은 생성된 새로운 키 스트림(ST_KEY)을 비휘발성 메모리(150)의 제1 영역(AR1)에 기입할 수 있다.
컴팩션 모듈(122)은 새로운 키 스트림(ST_KEY)이 생성됨에 따라, 키 매트릭스(140) 중 상기 유효하지 않은 키를 포함한 키 스트림(ST_KEY)에 대응하는 값들을 변경하거나 삭제할 수 있다. 그리고 컴팩션 모듈(122)은 새로 생성한 키 스트림(ST_KEY)을 기초로 키 매트릭스(140)를 업데이트할 수 있다.
가비지 컬렉션 모듈(123)은 비휘발성 메모리(150)에 대한 가비지 컬렉션(Garbage Collection)을 수행할 수 있다. 일 예로서, 가비지 컬렉션 모듈(123)은 키 매트릭스(140)를 기초로 비휘발성 메모리(150)의 복수의 블록들 중 각 블록과 관련된 인덱스를 포함하는 키 스트림의 개수를 확인하고, 확인한 키 스트림의 개수가 가장 적은 블록을 대상 블록으로 선택하고, 선택한 대상 블록에 대하여 가비지 컬렉션을 수행할 수 있다. 이에 관해서는 도 8a 내지 도 8d에서 후술한다.
도 3은 본 개시의 일 실시예에 따른 스토리지 장치의 동작을 나타내는 개념도이다. 상세하게는, 도 3은 스토리지 장치의 키-밸류 페어의 저장 동작 및 키 매트릭스 생성 동작을 나타내는 개념도이다.
도 2 및 도 3을 참조하면, 키-밸류 매니저(120)는 키-밸류 페어들(KVP)을 수신하고, 키-밸류 페어들(KVP)에 포함된 키들(KEY)과 밸류들(VALUE)을 분리할 수 있다. 키-밸류 매니저(120)는 복수의 밸류들(VALUE)을 병합함으로써 밸류 스트림(ST_VALUE)을 생성하고, 생성한 밸류 스트림(ST_VALUE)을 비휘발성 메모리(150)의 제2 영역(AR2)에 저장할 수 있다.
키-밸류 매니저(120)는 밸류(VALUE)에 대응하는 인덱스(Idx)를 키(KEY)와 결합할 수 있고, 인덱스(Idx)와 결합된 키(KEY)를 데이터 버퍼(130)에 저장할 수 있다. 여기서 밸류(VALUE)에 대응하는 인덱스(Idx)는, 대응하는 밸류(VALUE)가 저장된 비휘발성 메모리(150)의 제2 영역(AR2)의 물리적 어드레스에 대응될 수 있다. 그러나 본 개시는 이에 한정되지 않으며, 밸류(VALUE)에 대응하는 인덱스(Idx)는 밸류(VALUE)가 저장된 블록에 대한 정보일 수 있다.
그리고 키-밸류 매니저(120)는 인덱스(Idx)와 각각 결합된 복수의 키들(KEY)을 병합함으로써 키 스트림(ST_KEY)을 생성하고, 생성된 키 스트림(ST_KEY)을 비휘발성 메모리(150)의 제1 영역(AR1)에 저장할 수 있다. 키-밸류 매니저(120)는 키 스트림(ST_KEY)이 저장된 비휘발성 메모리(150)의 제1영역(AR1)의 물리적 어드레스를 이용하여 키 테이블(KT)을 생성할 수 있다. 즉, 키 테이블(KT)은 키 스트림(ST_KEY)과 키 스트림(ST_KEY)이 저장된 비휘발성 메모리(150)의 물리적 어드레스를 저장할 수 있다.
키-밸류 매니저(120)는 키 스트림(ST_KEY)에 포함된 인덱스(Idx)를 이용하여, 키 스트림(ST_KEY)이 비휘발성 메모리(150)의 복수의 블록들 중 어떤 블록과 관련 있는지 확인하고, 확인 결과를 이용하여 키 매트릭스(KM)를 업데이트할 수 있다.
도 4a 및 도 4b는 본 개시의 일 실시예에 따른 키-밸류 매니저의 동작을 나타내는 개념도이다. 상세하게는, 도 4a 및 도 4b는 키-밸류 매니저가 키 매트릭스를 업데이트하는 동작을 나타내는 개념도이다. 본 실시예에 따른 키-밸류 매니저의 동작 방법은 도 1 내지 도 3의 키 밸류 매니저에 의해 수행할 수 있다.
도 4a를 참조하면, 키-밸류 매니저(120)는 3개의 키들(Key 1, Key 2, Key 3)과, 상기 3개의 키들(Key 1, Key 2, Key 3)에 대응하는 밸류들(Value 1, Value 2, Value 3)에 대한 인덱스로서 물리적 어드레스들(Value 1 PPN, Value 2 PPN, Value 3 PPN)을 병합함으로써, 제4 키 스트림(ST_KEY 4)을 생성할 수 있다.
키-밸류 매니저(120)는 제4 키 스트림(ST_KEY 4)에 포함된 인덱스들(Value 1 PPN, Value 2 PPN, Value 3 PPN)을 기초로, 상기 키들에 대응하는 밸류들(Value 1, Value 2, Value 3)이 저장된 적어도 하나의 블록을 확인할 수 있다. 도 4a를 참조하면, 키-밸류 매니저(120)는 Value 1 PPN을 기초로, 제1 밸류(Value 1)가 제1 블록(BLK 1)에 저장되어 있음을 확인할 수 있다. 그리고 키-밸류 매니저(120)는 Value 2 PPN을 기초로, 제2 밸류(Value 2)가 제3 블록(BLK 3)에 저장되어 있음을 확인할 수 있다. 그리고 키-밸류 매니저(120)는 Value 3 PPN을 기초로, 제3 밸류(Value 3)가 제5 블록(BLK 5)에 저장되어 있음을 확인할 수 있다.
그리고 키-밸류 매니저(120)는 확인한 적어도 하나의 블록에 대한 정보를 이용하여, 키 매트릭스(KM)를 업데이트할 수 있다. 도 4b를 참조하면, 키 매트릭스(KM)는 비휘발성 메모리(150)의 복수의 블록들 각각의 번호에 대응하는 블록 번호(BLOCK NUMBER)를 한 축으로 하고, 복수의 키 스트림들(ST_KEY) 각각의 번호에 대응하는 키 스트림 번호(KEY STREAM NUMBER)를 나머지 한 축으로 하는 2차원 매트리스의 형태로 구현될 수 있다. 그리고 키 매트릭스(KM) 내의 각 값은 ‘0’ 또는 ‘1’의 값을 가질 수 있다. ‘0’은 해당 키 스트림에 해당 블록과 관련된 인덱스가 포함되지 않음을 의미하고, ‘1’은 해당 키 스트림에 해당 블록과 관련된 인덱스가 포함됨을 의미할 수 있다.
일 예로서, 키-밸류 매니저(120)는 키 매트릭스(KM)의 키 스트림 번호(KEY STREAM NUMBER) 중 새로 생성한 키 스트림(ST_KEY)에 대응하는 번호의 행(row)을 확인하고, 키 매트릭스(KM)의 블록 번호(BLOCK NUMBER) 중 상기 확인한 적어도 하나의 블록에 대응하는 번호의 열(column)을 확인하고, 상기 확인한 행과 열에 대응하는 값을 변경할 수 있다. 도 4b를 참조하면, 키-밸류 매니저(120)는 생성한 제4 키 스트림(ST_KEY 4)에 대응하는 4행을 확인하고, 상기 확인한 적어도 하나의 블록(BLK 1, BLK 3, BLK 5)에 대응하는 1열, 3열, 5열을 확인할 수 있다. 그리고 키-밸류 매니저(120)는 상기 확인한 행과 열(행, 열)에 대응하는 값들((4,1), (4,3), (4,5))을 ‘0’에서 ‘1’로 변경할 수 있다.
한편, 도 4a를 도시하고 설명함에 있어서, 하나의 키 스트림(ST_KEY)에 3개의 키들과 3개의 인덱스들이 병합된 것으로 도시하고 설명하였지만, 본 개시는 이에 한정되지 않으며, 3개보다 많거나 적은 키들 및 인덱스들이 병합되는 방식으로 구현될 수도 있다.
도 5는 본 개시의 일 실시예에 따른 스토리지 장치의 동작 방법을 나타내는 순서도이다. 상세하게는, 도 5는 스토리지 장치의 키-밸류 페어의 저장 동작 및 키 매트릭스 생성 동작을 나타내는 순서도이다. 본 실시예에 따른 스토리지 장치의 동작 방법은 도 1 내지 도 3의 키-밸류 매니저에 의해 수행할 수 있다.
도 5를 참조하면, 스토리지 장치(100)는 호스트(도 1, 200)로부터 복수의 키들 및 복수의 밸류들을 포함하는 데이터를 수신할 수 있다(S110). 일 예로서, 스토리지 장치(100)는 호스트(도 1, 200)로부터 복수의 키들 및 복수의 밸류들을 포함하는 커맨드(CMD)를 수신할 수 있다. 그리고 스토리지 장치(100)는 수신한 데이터로부터 복수의 키들 및 복수의 밸류들을 분리할 수 있다(S120). 일 예로서, 스토리지 장치(100)는 복수의 키들 및 복수의 밸류들을 각각 분리하여 데이터 버퍼(130) 내에 복수의 키들 및 복수의 밸류들을 분리하여 저장할 수 있다.
그리고 스토리지 장치(100)는 적어도 일부의 밸류들을 병합함으로써 밸류 스트림을 생성하고, 생성한 밸류 스트림을 저장할 수 있다(S130). 일 예로서, 스토리지 장치(100)는 일정한 개수 또는 일정한 데이터 양의 밸류들이 데이터 버퍼(130)에 쌓이면, 저장된 밸류들을 연속적으로 배열함으로써 밸류 스트림을 생성할 수 있다. 그리고 스토리지 장치(100)는 생성한 밸류 스트림을 스토리지 장치(100)의 비휘발성 메모리(150)에 저장할 수 있다.
그리고 스토리지 장치(100)는 적어도 일부의 키들과, 상기 적어도 일부의 키들에 대응하는 밸류들에 대한 인덱스들을 병합함으로써 키 스트림을 생성할 수 있다(S140). 일 예로서, 스토리지 장치(100)는 일정한 개수 또는 일정한 데이터 양의 키들이 데이터 버퍼(130)에 쌓이면, 저장된 키들과 상기 저장된 키들에 대응하는 밸류들에 대한 인덱스를 병합함으로써 키 스트림을 생성할 수 있다. 여기서 밸류들에 대한 인덱스는, 밸류가 저장된 스토리지 장치(100) 내 비휘발성 메모리(150)의 영역에 대응하는 물리적 어드레스일 수 있다.
그리고 스토리지 장치(100)는 키 스트림을 기초로 키 매트릭스를 업데이트 할 수 있다(S150). 여기서 키 매트릭스는 각 키 스트림에 대하여 비휘발성 메모리(150)의 복수의 블록들 각각과 관련된 인덱스의 포함 여부를 나타내는 정보이다. 일 예로서, 스토리지 장치(100)는 키 스트림에 포함된 인덱스가 비휘발성 메모리(150)의 복수의 블록들 중 어떠한 블록과 관련된 인덱스인지 확인하고, 키 매트릭스에서 상기 키 스트림 및 관련성이 존재하는 블록에 대응되는 값을 변경함으로써 키 매트릭스를 업데이트할 수 있다. 그리고 스토리지 장치(100)는 키 스트림을 저장할 수 있다(S160). 일 예로서, 스토리지 장치(100)는 생성한 키 스트림을 스토리지 장치(100)의 비휘발성 메모리(150)에 저장할 수 있다.
도 6은 본 개시의 일 실시예에 따른 스토리지 장치의 동작을 나타내는 개념도이다. 상세하게는, 도 6은 스토리지 장치의 컴팩션 동작을 나타내는 개념도이다. 본 실시예에 따른 스토리지 장치의 컴팩션 동작은 도 1 내지 도 3의 키-밸류 매니저(120)에 의해 수행할 수 있다.
도 2 및 도 6을 참조하면, 키-밸류 매니저(120)는 비휘발성 메모리(150)의 제1 영역(AR1)으로부터 유효하지 않은 키 스트림(ST_IK)들을 독출(Read)할 수 있다. 일 예로서, 키-밸류 매니저(120)는 호스트(도 1, 200)의 각종 커맨드에 대응하여 키 스트림에 포함되는 키가 유효한지 여부를 나타내는 유효성 정보를 해시 테이블(HT)에 업데이트할 수 있고, 키-밸류 매니저(120)는 해시 테이블(HT)을 기초로 유효하지 않은 키 스트림(ST_IK)을 판별할 수 있다. 일 예로서, 호스트(도 1, 200)로부터 제1 밸류에 대한 소거 명령을 수신하면, 키-밸류 매니저(120)는 해시 테이블(HT)에 상기 제1 밸류에 대응되는 제1 키를, 결합된 인덱스를 기초로 분별(identify)할 수 있고, 제1 키에 대해 유효하지 않음을 나타내도록 상기 해시 테이블(HT)을 업데이트 할 수 있다.
키-밸류 매니저(120)는 독출한 유효하지 않은 키 스트림(ST_IK)들을 머징(Merge)함으로써 적어도 하나의 머지된 키 스트림(ST_MK)을 생성할 수 있다. 일 예로서, 키-밸류 매니저(120)는 상술한 테이블을 기초로 유효하지 않은 키를 삭제하고, 유효한 키들만을 추출함으로써 머지된 키 스트림(ST_MK)을 생성할 수 있다. 이에 따라서, 머지된 키 스트림(ST_MK)은 유효한 키들만이 포함된 키 스트림일 수 있다.
키-밸류 매니저(120)는 생성한 머지된 키 스트림(ST_MK)을 비휘발성 메모리(150)의 제1 영역(AR1)에 기입(Write) 할 수 있다. 또한, 키-밸류 매니저(120)는 키 테이블(KT)에 머지된 키 스트림(ST_MK)이 저장된 물리적 어드레스를 업데이트할 수 있다. 또한, 키-밸류 매니저(120)는 유효하지 않은 키 스트림(ST_IK)을 삭제하고, 해시 테이블(HT)에 유효하지 않은 키 스트림(ST_IK)에 대응하는 유효성 정보를 업데이트할 수 있다.
키-밸류 매니저(120)는 독출한 유효하지 않은 키 스트림(ST_IK)들 및 생성한 머지된 키 스트림(ST_MK)을 기초로 키 매트릭스(KM)를 업데이트할 수 있다. 일 예로서, 키-밸류 매니저(120)는 키 매트릭스(KM)에서 상기 유효하지 않은 키 스트림(ST_IK)들에 대응하는 값들을 삭제하거나 ‘0’으로 변경하고, 키 매트릭스(KM)에서 상기 머지된 키 스트림(ST_MK)에 포함된 인덱스와 관련 있는 블록의 번호와 상기 머지된 키 스트림(ST_MK)의 번호에 대응하는 값들을 변경할 수 있다.
일 예로서, 키-밸류 매니저(120)는 키 매트릭스(KM)를 기초로 유효하지 않은 밸류들에 대한 가비지 컬렉션을 수행할 수 있다. 키 매트릭스(KM)에 기초하여 가비지 컬렉션이 수행됨에 따라서, 유효하지 않은 밸류들이 제2 영역(AR2)으로부터 삭제될 수 있다. 이에 관해서는 도 8a 및 도 8d에서 후술한다.
도 7a 및 도 7b는 본 개시의 일 실시예에 따른 키-밸류 매니저의 동작을 나타내는 개념도이다. 상세하게는, 도 7a 및 도 7b는 키-밸류 매니저의 컴팩션 동작을 구체적으로 나타내는 개념도이다. 본 실시예에 따른 키-밸류 매니저의 동작 방법은 도 1 내지 도 3의 키 밸류 매니저에 의해 수행할 수 있다.
도 7a를 참조하면, 키-밸류 매니저(120)는 복수의 키 스트림들(ST_KEY) 중 유효하지 않은 키 스트림(ST_IK)들로 제2 키 스트림(ST_KEY 2) 및 제3 키 스트림(ST_KEY 3)을 독출할 수 있다.
그리고 키-밸류 매니저(120)는 제2 키 스트림(ST_KEY 2) 및 제3 키 스트림(ST_KEY 3) 각각으로부터 유효한 키 및 상기 유효한 키에 병합된 인덱스를 추출할 수 있다. 도 7a를 참조하면, 키-밸류 매니저(120)는 제2 키 스트림(ST_KEY 2)에서 유효한 키에 해당하는 제1 키(Key 1) 및 제1 밸류(Value 1)의 물리적 어드레스(Value 1 PPN)와 제2 키(Key 2) 및 제2 밸류(Value 2)의 물리적 어드레스(Value 2 PPN)를 추출할 수 있다. 그리고 키-밸류 매니저(120)는 제3 키 스트림(ST_KEY 3)에서 유효한 키에 해당하는 제6 키(Key 6) 및 제6 밸류(Value 6)의 물리적 어드레스(Value 6 PPN)를 추출할 수 있다.
그리고 키-밸류 매니저(120)는 추출한 유효한 키 및 상기 유효한 키에 병합된 인덱스를 이용하여 머지된 키 스트림(ST_MK)을 생성할 수 있다. 도 7a를 참조하면, 키-밸류 매니저(120)는 추출한 제1 키(Key 1) 및 제1 밸류(Value 1)의 물리적 어드레스(Value 1 PPN), 제2 키(Key 2) 및 제2 밸류(Value 2)의 물리적 어드레스(Value 2 PPN), 제6 키(Key 6) 및 제6 밸류(Value 6)의 물리적 어드레스(Value 6 PPN)를 연속적으로 병합함으로써 머지된 제5 키 스트림(ST_KEY 5)을 생성할 수 있다.
그리고 키-밸류 매니저(120)는 머지된 새로운 키 스트림(ST_MK) 및 유효하지 않은 키 스트림(ST_IK)을 기초로 키 매트릭스(KM)를 업데이트할 수 있다. 일 예로서, 먼저, 키-밸류 매니저(120)는 머지된 새로운 키 스트림(ST_MK)에 포함된 어드레스들을 기초로, 상기 머지된 새로운 키 스트림(ST_MK)의 키에 대응하는 밸류들이 저장된 적어도 하나의 블록을 확인할 수 있다. 도 7a를 참조하면, 키-밸류 매니저(120)는 머지된 제5 키 스트림(ST_KEY 5)에 포함된 키에 대응하는 밸류들이 각각 제6 블록(BLK 6) 또는 제2 블록(BLK 2)에 저장되어 있음을 확인할 수 있다.
그리고 키-밸류 매니저(120)는 키 매트릭스(KM)에서 머지된 새로운 키 스트림(ST_MK)에 대응하는 행과 상기 확인한 적어도 하나의 블록에 대응하는 열을 확인하고, 키 매트릭스(KM)에서 확인한 행 및 확인한 열에 대응하는 값을 변경할 수 있다. 도 7b를 참조하면, 키-밸류 매니저(120)는 상기 머지된 제5 키 스트림(ST_KEY 5)에 대응하는 행으로 5행을 확인하고, 상기 확인한 블록들(BLK 6, BLK 2)에 대응하는 열들로 2열, 6열을 확인하고, 확인한 행 및 확인한 열에 대응하는 값을 ‘0’에서 ‘1’로 변경할 수 있다.
그리고 키-밸류 매니저(120)는 키 매트릭스(KM)에서 유효하지 않은 키 스트림(ST_IK)에 대응하는 행을 확인하고, 확인한 행에 해당하는 값들을 변경할 수 있다. 도 7b를 참조하면, 키-밸류 매니저(120)는 키 매트릭스(KM)에서 유효하지 않은 제2 키 스트림(ST_KEY 2) 및 제3 키 스트림(ST_KEY 3)에 대응하는 행으로 2행 및 3행을 확인하고, 확인한 2행 및 3행 중 ‘1’을 갖는 값들을 모두 ‘0’으로 변경할 수 있다.
한편, 도 7b를 도시하고 설명함에 있어서, 유효하지 않은 키 스트림(ST_IK)을 이용하여 키 매트릭스(KM)를 업데이트 하는 방법이 키 매트릭스(KM)에서 유효하지 않은 키 스트림(ST_IK)에 대응하는 값을 0으로 변경하는 것으로 도시되고 설명되었지만, 유효하지 않은 키 스트림(ST_IK)에 대응하는 행 자체를 매트릭스(KM)에서 삭제하는 방식으로도 구현될 수 있다.
도 8a 및 내지 8d는 본 개시의 일 실시예에 따른 스토리지 장치의 동작을 나타내는 개념도이다. 상세하게는, 도 8a 내지 도 8d는 스토리지 장치의 가비지 컬렉션 동작을 나타내는 개념도이다. 본 실시예에 따른 스토리지 장치의 가비지 컬렉션 동작은 도 1 내지 도 3의 키-밸류 매니저(120)에 의해 수행할 수 있다.
키-밸류 매니저(120)는 키 매트릭스(KM)를 기초로 가비지 컬렉션을 수행할 대상 블록을 선택할 수 있다. 일 예로서, 키-밸류 매니저(120)는 키 매트릭스(KM)를 이용하여 비휘발성 메모리(150)의 복수의 블록들 각각에 대하여, 각 블록과 관련된 어드레스를 포함하는 키 스트림의 개수를 확인하고, 확인 결과를 이용하여 상기 복수의 블록들 중에서 대상 블록을 선택할 수 있다. 이하에서는 설명의 편의를 위해, 키 매트릭스(KM)가 도 8a에 도시된 바와 같이 8개의 키 스트림들(ST_KEY 1 내지 ST_KEY 8) 및 8개의 블록들(BLK 1 내지 BLK 8)에 대응하는 64개의 값들을 갖는 것을 전제로 한다. 한편, 본 개시는 상술한 예에 한하지 않으며, 구현 예에 따라 다양한 개수의 키 스트림들 또는 다양한 개수의 블록들에 대응하는 값들을 갖는 키 매트릭스(KM)를 이용할 수 있다. 또한, 이하에서는 설명의 편의를 위해 밸류(VALUE)에 대응하는 인덱스는 밸류(VALUE)가 저장된 영역의 물리적 어드레스인 것을 전제로 설명한다.
일 예로서, 먼저, 키-밸류 매니저(120)는 키 매트릭스(KM)를 이용하여 블록 번호(BLOCK NUMBER) 별로 ‘1’을 갖는 값들의 개수를 확인할 수 있다(①). 키 매트릭스(KM)에 도시된 ‘1’은 키 스트림이 대응되는 블록과 관련된 어드레스를 포함하는 것을 의미할 수 있다. 따라서, 키-밸류 매니저(120)는 각 블록에 대응하는 행에서 ‘1’을 갖는 값의 개수를 카운트함으로써, 각 블록과 관련된 어드레스를 포함하는 키 스트림의 개수를 확인할 수 있다.
예를 들어, 도 8a를 참조하면, 키-밸류 매니저(120)는 제1 블록(예를 들면, 블록 번호(BLOCK NUMBER)로 ‘1’을 갖는 블록)에 대응하는 열에서, 키 스트림 번호(KEY STREAM NUMBER)가 4, 6 및 7에 대응하는 행들의 값이 ‘1’인 것을 확인할 수 있다. 즉, 키-밸류 매니저(120)는 제4 키 스트림, 제6 키 스트림 및 제7 키 스트림에 제1 블록과 관련된 어드레스가 각각 포함되어 있음을 확인할 수 있다. 이에 따라, 키-밸류 매니저(120)는 제1 블록과 관련된 어드레스를 포함하는 키 스트림의 개수는 3개임을 확인할 수 있다. 한편, 본 개시의 일 실시예에 따른 스토리지 장치(100)는, 키 매트릭스(KM)를 이용하여 각 블록에 대응하는 행에서 ‘1’을 갖는 값의 개수를 카운트 하는 카운터(미도시)를 개별적으로 포함할 수도 있다.
그리고 키-밸류 매니저(120)는 각 블록별로 관련된 어드레스를 포함하는 키 스트림의 개수가 가장 적은 블록을 대상 블록으로 선택할 수 있다(②). 예를 들어, 도 8a를 참조하면, 키-밸류 매니저(120)는 관련된 어드레스를 포함하는 키 스트림의 개수가 가장 적은 블록, 즉, ‘1’의 개수가 가장 적은 블록인 제2 블록(예를 들면, 블록 번호(BLOCK NUMBER)로 ‘2’를 갖는 블록)을 대상 블록으로 선택할 수 있다. 그리고 키-밸류 매니저(120)는 키 매트릭스(KM)로부터 대상 블록과 관련된 어드레스를 포함하는 적어도 하나의 키 스트림을 확인할 수 있다(③). 예를 들어, 도 8a를 참조하면, 키-밸류 매니저(120)는 키 매트릭스(KM)의 대상 블록인 제2 블록에 대응하는 2열에서, 1을 갖는 값에 대응하는 행이 3행임을 확인할 수 있다. 그리고 키-밸류 매니저(120)는 제3 행에 대응하는 키 스트림이 제3 키 스트림(예를 들면, 키 스트림 번호(KEY STREAM NUMBER)로 ‘3’을 갖는 키 스트림)임을 확인할 수 있다.
그리고 키-밸류 매니저(120)는 확인한 적어도 하나의 키 스트림을 비휘발성 메모리(150)로부터 독출할 수 있다(④). 그리고 키-밸류 매니저(120)는 독출한 적어도 하나의 키 스트림으로부터 대상 블록과 관련된 어드레스를 확인할 수 있다(⑤). 예를 들어, 도 8b를 참조하면, 키-밸류 매니저(120)는 제3 키 스트림(ST_KEY 3)을 비휘발성 메모리(150)로부터 독출하고, 독출한 제3 키 스트림(ST_KEY 3)으로부터 제2 블록(BLK 2)과 관련된 어드레스로 제5 밸류의 물리적 어드레스(Value 5 PPN) 및 제6 밸류의 물리적 어드레스(Value 6 PPN)를 확인할 수 있다.
그리고 키-밸류 매니저(120)는 확인한 어드레스를 이용하여 가비지 컬렉션 독출 리스트(GC Read List)를 생성할 수 있다(⑥). 그리고 키-밸류 매니저(120)는 생성한 가비지 컬렉션 독출 리스트(GC Read List)를 이용하여 대상 블록으로부터 밸류를 독출할 수 있다(⑦). 예를 들어, 도 8b를 참조하면, 키-밸류 매니저(120)는 제5 밸류의 물리적 어드레스(Value 5 PPN) 및 제6 밸류의 물리적 어드레스(Value 6 PPN)를 이용하여 가비지 컬렉션 독출 리스트(GC Read List)를 생성하고, 생성한 가비지 컬렉션 독출 리스트(GC Read List)를 이용하여 제2 블록(BLK 2)으로부터 제5 밸류(Value 5) 및 제6 밸류(Value 6)를 독출할 수 있다.
그리고 키-밸류 매니저(120)는 독출한 밸류를 이용하여 새로운 밸류 스트림을 생성할 수 있다(⑧). 그리고 키-밸류 매니저(120)는 생성한 새로운 밸류 스트림을 새로운 영역에 저장할 수 있다(⑨). 예를 들어, 도 8c를 참조하면, 키-밸류 매니저(120)는 독출한 제5 밸류(Value 5) 및 제6 밸류(Value 6)를 이용하여 새로운 밸류 스트림(ST_VAL)을 생성하고, 생성한 새로운 밸류 스트림(ST_VAL)을 새로운 영역인 제3 블록(BLK 3)에 저장할 수 있다.
그리고 키-밸류 매니저(120)는 키 스트림(ST_KEY) 및 키 매트릭스(KM)를 업데이트할 수 있다(⑩). 구체적으로, 키-밸류 매니저(120)는 대상 블록으로부터 독출한 밸류에 대응하는 키를 포함하는 키 스트림(ST_KEY)에서, 독출된 밸류의 어드레스를 새로운 어드레스로 변경함으로써 키 스트림(ST_KEY)을 업데이트할 수 있다. 그리고 키-밸류 매니저(120)는 업데이트된 키 스트림(ST_KEY)을 기초로 키 매트릭스(KM)를 업데이트할 수 있다.
한편, 변형 가능한 실시예에서, 키-밸류 매니저(120)는 또 다른 방법으로 가비지 컬렉션을 수행할 대상 블록을 선택할 수도 있다. 먼저, 키-밸류 매니저(120)는 블록별로, 블록 내 전체 데이터에 대한 유효한 데이터의 비율을 나타내는 정보를 포함하는 유효 데이터 테이블(VALID DATA TABLE)을 이용하여 후보 블록을 선택할 수 있다. 구체적으로, 키-밸류 매니저(120)는 유효 데이터 테이블(VALID DATA TABLE)을 이용하여 유효한 데이터의 비율이 일정한 비율보다 낮은 블록을 후보 블록으로 선택할 수 있다. 예를 들어, 도 8d를 참조하면, 일정한 비율이 50으로 설정된 경우, 키-밸류 매니저(120)는 전체 데이터(100 기준) 대비 유효 데이터 비율이 각각 45, 55인 제2 블록(BLK 2)(예를 들면, 블록 번호(BLOCK NUMBER)로 ‘2’을 갖는 블록) 및 제8 블록(BLK 8)(예를 들면, 블록 번호(BLOCK NUMBER)로 ‘8’을 갖는 블록)을 후보 블록들로 선택할 수 있다.
그리고 키-밸류 매니저(120)는 키 매트릭스(KM)를 이용하여 후보 블록들에 대응하는 열별로 ‘1’을 갖는 값들의 개수를 확인할 수 있다(②). 예를 들어, 도 8d를 참조하면, 키-밸류 매니저(120)는 제2 블록(BLK 2)에 대응하는 2열 및 제8 블록(BLK 8)에 대응하는 8열에서 ‘1’을 갖는 값들의 개수를 각각 확인할 수 있다.
그리고 키-밸류 매니저(120)는 후보 블록들 중 ‘1’의 개수가 가장 적은 블록을 대상 블록으로 선택할 수 있다(③). 예를 들어, 도 8d를 참조하면, 제2 블록(BLK 2)에 대응하는 2열의 ‘1’의 개수가 더 적으므로, 키-밸류 매니저(120)는 제2 블록(BLK 2)을 대상 블록으로 선택할 수 있다. 대상 블록을 선택한 이후의 동작은 앞서 설명한 실시예와 실질적으로 동일하므로 중복되는 설명은 생략한다.
한편, 변형 가능한 실시예 및 도 8d와 관련하여, 유효 데이터 테이블(VALID DATA TABLE)을 이용하여 후보 블록을 선택하고, 키 매트릭스(KM)를 이용하여 후보 블록들 중에서 대상 블록을 선택하는 것으로 도시하고 설명하였지만, 반대로 키 매트릭스(KM)를 이용하여 후보 블록을 선택하고, 유효 데이터 테이블(VALID DATA TABLE)을 이용하여 대상 블록을 선택하는 방식으로도 구현할 수 있다. 일 예로서, 키-밸류 매니저(120)는 키 매트릭스(KM)를 이용하여 관련된 어드레스를 포함하는 키 스트림의 개수가 일정한 개수보다 적은 블록을 후보 블록으로 선택하고, 후보 블록들 중에서 유효한 데이터의 비율이 가장 적은 블록을 대상 블록으로 선택할 수 있다.
도 9는 본 개시의 일 실시예에 따른 스토리지 장치의 동작 방법을 나타내는 순서도이다. 상세하게는, 도 9는 스토리지 장치의 가비지 컬렉션의 동작을 나타내는 순서도이다. 본 실시예에 따른 스토리지 장치의 동작 방법은 도 1 내지 도 3의 키 밸류 매니저에 의해 수행할 수 있다.
도 9를 참조하면, 스토리지 장치(100)는 키 매트릭스를 이용하여 비휘발성 메모리(150)의 복수의 블록들 중 대상 블록을 선택할 수 있다(S210). 일 예로서, 스토리지 장치(100)는 복수의 블록들 중 관련된 어드레스를 포함하는 키 스트림의 개수가 가장 적은 블록을 대상 블록으로 선택할 수 있다. 또 다른 예로서, 스토리지 장치(100)는 유효한 데이터 비율에 대한 정보를 이용하여 후보 블록을 선택하고, 후보 블록 중에서 관련된 어드레스를 포함하는 키 스트림의 개수가 가장 적은 블록을 대상 블록으로 선택할 수 있다. 또 다른 예로서, 스토리지 장치(100)는 관련된 어드레스를 포함하는 키 스트림의 개수가 일정한 개수 이하인 블록을 후보 블록으로 선택하고, 후보 블록 중에서 유효한 데이터 비율이 가장 적은 블록을 대상 블록으로 선택할 수 있다.
그리고 스토리지 장치(100)는 대상 블록과 관련된 어드레스를 포함하는 키 스트림을 확인할 수 있다(S220). 구체적으로, 스토리지 장치(100)는 키 매트릭스(KM)에서 대상 블록에 대응하는 값들 중 대상 블록과 관련된 어드레스를 포함함을 나타내는 값을 확인하고, 확인한 값에 대응하는 키 스트림을 확인할 수 있다.
그리고 스토리지 장치(100)는 확인한 키 스트림으로부터 대상 블록과 관련된 어드레스를 확인할 수 있다(S230). 구체적으로, 스토리지 장치(100)는 확인한 키 스트림을 비휘발성 메모리(150)로부터 독출하고, 독출한 키 스트림에 포함된 어드레스들 중 대상 블록과 관련된 어드레스를 확인할 수 있다.
그리고 스토리지 장치(100)는 확인한 어드레스에 대응하는 밸류(VALUE)를 대상 블록으로부터 독출할 수 있다(S240). 그리고 스토리지 장치(100)는 독출한 밸류(VALUE)를 새로운 영역에 저장할 수 있다(S250). 구체적으로, 스토리지 장치(100)는 독출한 밸류(VALUE)가 복수인 경우, 복수의 밸류들(VALUE)을 연속적으로 병합함으로써 새로운 밸류 스트림(ST_VALUE)을 생성하고, 생성한 밸류 스트림(ST_VALUE)을 새로운 영역에 저장할 수 있다. 여기서 새로운 영역은, 독출한 밸류(VALUE)가 기존에 저장되었던 영역이 아닌 상이한 영역으로, 대상 블록과 상이한 블록의 영역일 수 있다.
그리고 스토리지 장치(100)는 키 스트림(ST_KEY) 및 키 매트릭스(KM)를 업데이트할 수 있다(S260). 구체적으로, 스토리지 장치(100)는 기존의 독출한 밸류(VALUE)의 어드레스를 새로운 어드레스로 변경함으로써 키 스트림(ST_KEY)을 업데이트할 수 있다. 그리고 스토리지 장치(100)는 업데이트한 키 스트림(ST_KEY)을 기초로 키 매트릭스(KM)를 업데이트할 수 있다.
본 개시의 일 실시예에 따르면, 스토리지 장치(100)는 키 스트림을 이용하여 대상 블록에 저장된 밸류들의 유효성을 판단함으로써, 연산량을 줄이고 처리 속도를 높일 수 있다.
도 10은 본 개시의 일 실시예에 따른 스토리지 장치의 동작 방법을 나타내는 순서도이다. 상세하게는, 도 10은 도 9의 S220 내지 S240의 동작을 보다 구체적으로 나타내는 순서도이다.
도 9 및 10을 참조하면, 스토리지 장치(100)는 대상 블록과 관련된 어드레스를 포함하는 키 스트림을 독출할 수 있다(S310). 예를 들어, 스토리지 장치(100)는 키 매트릭스(KM)를 이용하여 대상 블록과 관련된 어드레스를 포함하는 키 스트림(ST_KEY)으로 제1 키 스트림을 확인하고, 제1 키 스트림의 어드레스에 대응하는 영역에 접근함으로써 제1 키 스트림을 독출할 수 있다.
그리고 스토리지 장치(100)는 독출한 키 스트림(ST_KEY)에 포함된 어드레스들을 확인하고, 대상 블록과 관련된 어드레스를 가비지 컬렉션 독출 리스트(GC Read List)에 등록할 수 있다(S320). 구체적으로, 스토리지 장치(100)는 제1 키 스트림 내 어드레스들을 순차적으로 확인하고, 대상 블록과 관련된 적어도 하나의 어드레스들을 가비지 컬렉션 독출 리스트에 등록할 수 있다.
그리고 스토리지 장치(100)는 키 스트림(ST_KEY)에 포함된 모든 어드레스들에 대하여 대상 블록과의 관련성을 확인하였는지를 판단할 수 있다(S330). 구체적으로, 스토리지 장치(100)는 제1 키 스트림 내 어드레스들을 순차적으로 확인하는 과정에서, 마지막 어드레스까지 대상 블록과의 관련성을 확인하였는지를 판단할 수 있다. 만약 키 스트림(ST_KEY) 내 모든 어드레스들을 확인하지 않은 경우(S330-NO), 스토리지 장치(100)는 S320을 반복할 수 있다. 즉, 스토리지 장치(100)는 제1 키 스트림 내 다음 순서의 어드레스에 대하여 대상 블록과의 관련성을 확인할 수 있다.
반면, 키 스트림(ST_KEY) 내 어드레스들을 모두 확인한 경우(S330-YES), 스토리지 장치(100)는 대상 블록과 관련된 어드레스를 포함하는 별도의 키 스트림이 존재하는지 확인할 수 있다(S340). 구체적으로, 스토리지 장치(100)는 키 매트릭스를 이용하여 제1 키 스트림 외에 대상 블록과 관련된 어드레스를 포함하는 제2 키 스트림이 존재하는지 확인할 수 있다. 만약 대상 블록과 관련된 어드레스를 포함하는 별도의 키 스트림이 존재하는 경우(S340-YES), 스토리지 장치(100)는 해당 키 스트림에 대하여 S320을 반복할 수 있다. 반면, 대상 블록과 관련된 어드레스를 포함하는 별도의 키 스트림이 존재하지 않는 경우(S340-NO), 스토리지 장치(100)는 가비지 컬렉션 독출 리스트를 이용하여 대상 블록으로부터 유효한 밸류들을 독출할 수 있다(S350).
도 11은 본 개시의 일 실시예에 따른 스토리지 장치를 나타내는 블록도이다.
도 11을 참조하면, 스토리지 장치(100a)는 컨트롤러(110a), 휘발성 메모리(130a) 및 비휘발성 메모리(150)를 포함할 수 있다. 또한, 컨트롤러(110a)는 프로세서(111), 메모리(112), 호스트 인터페이스(113), 비휘발성 메모리 인터페이스(114), 하드웨어 가속기(115) 및 휘발성 메모리 인터페이스(116)를 포함할 수 있고, 이들은 버스(117)를 통해 서로 통신할 수 있다.
프로세서(111)는 중앙 처리 장치(Central Processing Unit; CPU)나 마이크로 프로세서 등을 포함할 수 있으며, 컨트롤러(110a)의 전반적인 동작을 제어할 수 있다. 메모리(112)는 프로세서(111)의 제어에 따라 동작하며, 동작 메모리, 버퍼 메모리, 캐시 메모리 등으로 사용될 수 있다. 예를 들어, 메모리(112)는 DRAM, SRAM과 같은 휘발성 메모리 또는 PRAM, 플래시 메모리와 같은 비휘발성 메모리로 구현될 수도 있다.
키-밸류 매니저(120a)는 펌웨어 또는 소프트웨어로 구현될 수 있고, 메모리(112)에 로딩될 수 있다. 일 예로서, 키-밸류 매니저(120a)는 FTL(Flash Translation Layer)에 구현될 수 있고, 메모리(112)에 로딩될 수 있다. 그러나, 본 개시는 이에 한정되지 않으며, 키-밸류 매니저(120a)는 하드웨어로 구현될 수도 있다. 도 1 내지 도 10에서 상술한 동작들은 프로세서(111)에 의해 키-밸류 매니저(120a)를 이용하여 수행될 수 있다.
호스트 인터페이스(113)는 호스트(HOST)와 컨트롤러(110a) 사이의 인터페이스를 제공할 수 있고, 예를 들어, USB(Universal Serial Bus), MMC, PCI-E(PCIExpress), ATA(AT Attachment), SATA(Serial AT Attachment), PATA(Parallel AT Attachment), SCSI(Small Computer System Interface), SAS(Serial Attached SCSI), ESDI(Enhanced Small Disk Interface), IDE(Integrated Drive Electronics) 등에 따른 인터페이스를 제공할 수 있다. 비휘발성 메모리 인터페이스(114)는 컨트롤러(110a)와 비휘발성 메모리(150) 사이의 인터페이스를 제공할 수 있다. 예를 들어, 키 스트림 또는 밸류 스트림이 비휘발성 메모리 인터페이스(114)를 통해 컨트롤러(110a)와 비휘발성 메모리(150) 사이에서 송수신될 수 있다.
휘발성 메모리 인터페이스(116)는 컨트롤러(110a)와 휘발성 메모리(130a) 사이의 인터페이스를 제공할 수 있다. 예를 들어, 키, 밸류, 매핑 테이블(MT) 및 키 매트릭스(KM)가 컨트롤러(110a)와 휘발성 메모리(130a) 사이에서 송수신될 수 있다.
휘발성 메모리(130a)는 매핑 테이블(MT) 및 키 매트릭스(140a)를 저장할 수 있다. 일 예로서, 휘발성 메모리(130a)는 도 2의 데이터 버퍼(130)와 같이 키, 밸류를 더 저장할 수 있다. 이를 위해 휘발성 메모리(130a)는 DRAM으로 구현될 수 있다. 매핑 테이블(MT)은 도 1 내지 도 10에서 상술한 해시 테이블 및 키 테이블 중 어느 하나를 포함할 수 있다.
하드웨어 가속기(115)는 FPGA(Field-programmable gate array), MPPA(Massively parallel processor array), GPU(Graphics processing unit), ASIC(Application-Specific Integrated Circuit), NPU(Neural processing unit), TPU(Tensor Processing Unit) 및 MPSoC(Multi-Processor System-on-Chip) 등의 다양한 종류의 가속기일 수 있다. 하드웨어 가속기(115)는 키 매트릭스(140a)를 이용하여 대상 블록을 선택하는 등 가비지 컬렉션 동작의 적어도 일부에 사용될 수 있다. 한편, 도 11에서는 컨트롤러(110a)가 하드웨어 가속기(115)를 포함하는 것으로 도시되었으나, 본 개시는 이에 한정되지 않으며, 하드웨어 가속기(115)는 생략될 수 있다.
도 12는 본 개시의 일 실시예에 따른 전자 장치를 나타내는 블록도이다.
도 12를 참조하면, 전자 장치(1000)는 프로세서(1100), 메모리 장치(1200), 스토리지 장치(1300), 모뎀(1400), 입출력 장치(1500) 및 파워 서플라이(1600)를 포함할 수 있다. 일 예로서, 스토리지 장치(1300)는 도 1 내지 도 11을 참조하여 상술된 실시예들을 이용하여 구현될 수 있다.
일 예로서, 스토리지 장치(1300)는 호스트로부터 복수의 키들 및 상기 복수의 키들 각각에 대응하는 복수의 밸류들을 포함하는 키-밸류 페어들을 수신하고, 키-밸류 페어들로부터 복수의 키들과 복수의 밸류들을 분리할 수 있다.
일 예로서, 스토리지 장치(1300)는 복수의 밸류들을 병합함으로써 밸류 스트림을 생성하고, 생성한 밸류 스트림을 비휘발성 메모리 장치에 저장할 수 있다. 또한, 스토리지 장치(1300)는 밸류에 대응하는 인덱스를 복수의 키들 각각에 결합하고, 인덱스가 각각 결합된 복수의 키들을 병합함으로써 키 스트림을 생성하고, 생성한 키 스트림을 비휘발성 메모리 장치에 저장할 수 있다.
일 예로서, 스토리지 장치(1300)는 생성한 키 스트림을 기초로, 각 키 스트림에 대한 비휘발성 메모리 장치의 복수의 블록들 각각과 관련된 인덱스의 포함 여부를 나타내는 키 매트릭스를 업데이트할 수 있다. 그리고 스토리지 장치(1300)는 키 매트릭스를 이용하여 가비지 컬렉션을 수행할 대상 블록을 선택하고, 키 매트릭스를 이용하여 대상 블록과 관련된 키 스트림을 독출하고, 독출한 키 스트림으로부터 대상 블록과 관련된 유효한 밸류의 저장 위치를 확인하고, 유효한 밸류를 독출하여 새로운 영역에 저장할 수 있다. 이에 따라서, 스토리지 장치(1300)는 대상 블록에 포함된 밸류들을 모두 독출한 후, 독출한 밸류들의 유효 여부를 일일이 판단하지 않고도, 키 스트림을 이용하여 대상 블록에 저장된 밸류들의 유효성을 판단함으로써, 가비지 컬렉션 수행 시 연산량을 줄이고 처리 속도를 높일 수 있다.
일 예로서, 스토리지 장치(1300)는 프로세서(1100)로부터의 커맨드를 수신하지 않고, 자체적으로 상술한 동작들을 수행할 수 있다.
이상에서와 같이 도면과 명세서에서 예시적인 실시예들이 개시되었다. 본 명세서에서 특정한 용어를 사용하여 실시예들을 설명되었으나, 이는 단지 본 개시의 기술적 사상을 설명하기 위한 목적에서 사용된 것이지 의미 한정이나 특허청구범위에 기재된 본 개시의 범위를 제한하기 위하여 사용된 것은 아니다. 그러므로 본 기술분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시예가 가능하다는 점을 이해할 것이다. 따라서, 본 개시의 진정한 기술적 보호범위는 첨부된 특허청구범위의 기술적 사상에 의해 정해져야 할 것이다.

Claims (10)

  1. 복수의 블록들을 포함하는 비휘발성 메모리; 및
    호스트로부터 복수의 키(key)들 및 상기 복수의 키들 각각에 대응하는 복수의 밸류(value)들을 포함하는 커맨드를 수신하고, 상기 복수의 키들 및 상기 복수의 밸류들을 서로 분리하고, 상기 복수의 키들 중 제1 키들과 상기 제1 키들에 대응하는 제1 밸류들에 대한 인덱스들을 병합함으로써 제1 키 스트림(key stream)을 생성하는 컨트롤러;를 포함하고,
    상기 컨트롤러는,
    상기 제1 키 스트림과, 상기 복수의 블록들 중 상기 제1 밸류들이 저장된 적어도 하나의 제1 블록 간의 매칭 정보를 포함하는 키 매트릭스를 업데이트하는 것을 특징으로 하는 스토리지 장치.
  2. 제1항에 있어서,
    상기 인덱스는,
    상기 제1 밸류들의 상기 비휘발성 메모리 내 저장 위치에 대한 정보인 것을 특징으로 하는 스토리지 장치.
  3. 제2항에 있어서,
    상기 컨트롤러는,
    상기 제1 키 스트림에 포함된 인덱스들을 기초로, 상기 제1 키 스트림으로부터 상기 제1 밸류들이 저장된 적어도 하나의 블록을 확인하고, 상기 키 매트릭스에서 상기 제1 키 스트림 및 상기 확인한 적어도 하나의 블록에 대응하는 인덱스를 변경하는 것을 특징으로 하는 스토리지 장치.
  4. 복수의 블록들을 포함하고, 복수의 키들로 구성된 복수의 키 스트림들 및 상기 복수의 키들에 대응하는 복수의 밸류들로 구성된 복수의 밸류 스트림들을 저장하는 비휘발성 메모리;
    키 스트림 별로 각 키 스트림에 포함된 키들에 대응하는 밸류들이 상기 복수의 블록들에 저장되어 있는지를 나타내는 키 매트릭스를 저장하는 휘발성 메모리; 및
    상기 키 매트릭스를 기초로 상기 복수의 블록들 중 가비지 컬렉션을 수행할 제1 블록을 선택하고, 상기 제1 블록을 해제(release)하는 가비지 컬렉션을 수행하는 컨트롤러;를 포함하는 스토리지 장치.
  5. 제4항에 있어서,
    상기 컨트롤러는,
    상기 키 매트릭스를 이용하여 상기 복수의 블록들 별로 각 블록에 저장된 밸류에 대응하는 키를 포함하는 키 스트림 개수를 확인하고, 상기 확인 결과를 이용하여 상기 제1 블록을 선택하는 것을 특징으로 하는 스토리지 장치.
  6. 제5항에 있어서,
    상기 컨트롤러는,
    상기 키 매트릭스를 이용하여 확인한 키 스트림의 개수가 가장 적은 블록을 상기 제1 블록으로 선택하는 것을 특징으로 하는 스토리지 장치.
  7. 제4항에 있어서,
    상기 컨트롤러는,
    상기 키 매트릭스를 이용하여, 상기 제1 블록에 저장된 밸류에 대응하는 키를 포함하는 적어도 하나의 키 스트림을 확인하고, 상기 비휘발성 메모리로부터 상기 적어도 하나의 키 스트림을 독출하는 것을 특징으로 하는 스토리지 장치.
  8. 제7항에 있어서,
    상기 복수의 키 스트림들은,
    포함된 키들에 대응하는 밸류들의 어드레스들을 포함하고,
    상기 컨트롤러는,
    상기 독출한 적어도 하나의 키 스트림으로부터 상기 제1 블록과 관련된 어드레스를 확인하고, 상기 확인한 어드레스를 기초로 상기 제1 블록으로부터 상기 확인한 어드레스에 대응하는 밸류를 독출하는 것을 특징으로 하는 스토리지 장치.
  9. 복수의 블록들을 포함하는 비휘발성 메모리를 포함하는 스토리지 장치의 동작 방법에 있어서,
    복수의 키들과 상기 복수의 키들에 대응하는 복수의 밸류들의 어드레스들을 포함하는 키 스트림을 생성하고 저장하는 단계;
    키 스트림 별로 상기 복수의 블록들 각각과 관련된 어드레스의 포함 여부를 나타내는 키 매트릭스를 업데이트하는 단계;
    상기 키 매트릭스를 기초로, 상기 복수의 블록들 중 제1 블록을 선택하는 단계; 및
    상기 제1 블록을 해제하는 가비지 컬렉션을 수행하는 단계;를 포함하는 동작 방법.
  10. 제9항에 있어서,
    상기 가비지 컬렉션을 수행하는 단계는,
    상기 키 매트릭스를 이용하여 상기 제1 블록과 관련된 어드레스를 포함하는 적어도 하나의 키 스트림을 확인하는 단계;
    상기 확인한 적어도 하나의 키 스트림으로부터 상기 제1 블록과 관련된 적어도 하나의 어드레스를 확인하는 단계;
    상기 확인한 적어도 하나의 어드레스를 기초로 상기 제1 블록으로부터 적어도 하나의 밸류를 독출하는 단계; 및
    상기 독출한 적어도 하나의 밸류를 상기 비휘발성 메모리 내 새로운 영역에 저장하는 단계;를 포함하는 스토리지 장치의 동작 방법.
KR1020190167144A 2019-12-13 2019-12-13 스토리지 장치 및 이의 동작 방법 KR20210075731A (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020190167144A KR20210075731A (ko) 2019-12-13 2019-12-13 스토리지 장치 및 이의 동작 방법
US17/011,050 US11461047B2 (en) 2019-12-13 2020-09-03 Key-value storage device and operating method
CN202011431455.0A CN112988615A (zh) 2019-12-13 2020-12-07 键值存储设备和操作方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190167144A KR20210075731A (ko) 2019-12-13 2019-12-13 스토리지 장치 및 이의 동작 방법

Publications (1)

Publication Number Publication Date
KR20210075731A true KR20210075731A (ko) 2021-06-23

Family

ID=76316848

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190167144A KR20210075731A (ko) 2019-12-13 2019-12-13 스토리지 장치 및 이의 동작 방법

Country Status (3)

Country Link
US (1) US11461047B2 (ko)
KR (1) KR20210075731A (ko)
CN (1) CN112988615A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022260375A1 (ko) 2021-06-10 2022-12-15 주식회사 엘지에너지솔루션 원통형 배터리 셀의 용접 장치

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230188338A1 (en) * 2021-12-10 2023-06-15 Amazon Technologies, Inc. Limiting use of encryption keys in an integrated circuit device
CN114415966B (zh) * 2022-01-25 2022-08-12 武汉麓谷科技有限公司 一种kv ssd存储引擎的构建方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110276744A1 (en) * 2010-05-05 2011-11-10 Microsoft Corporation Flash memory cache including for use with persistent key-value store
US9311252B2 (en) 2013-08-26 2016-04-12 Globalfoundries Inc. Hierarchical storage for LSM-based NoSQL stores
US9785547B2 (en) 2014-02-13 2017-10-10 Hitachi, Ltd. Data management apparatus and method
US10338817B2 (en) 2014-12-30 2019-07-02 Sandisk Technologies Llc Systems and methods for storage recovery
KR102449192B1 (ko) 2015-09-10 2022-09-29 삼성전자주식회사 데이터 저장 장치의 작동 방법과 이를 포함하는 데이터 처리 시스템의 작동 방법
US10628305B2 (en) 2016-05-13 2020-04-21 International Business Machines Corporation Determining a data layout in a log structured storage system
US10719495B2 (en) * 2017-02-09 2020-07-21 Micron Technology, Inc. Stream selection for multi-stream storage devices
US10725988B2 (en) * 2017-02-09 2020-07-28 Micron Technology, Inc. KVS tree
US10706105B2 (en) 2017-02-09 2020-07-07 Micron Technology, Inc. Merge tree garbage metrics
TWI692690B (zh) 2017-12-05 2020-05-01 慧榮科技股份有限公司 存取快閃記憶體模組的方法及相關的快閃記憶體控制器與電子裝置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022260375A1 (ko) 2021-06-10 2022-12-15 주식회사 엘지에너지솔루션 원통형 배터리 셀의 용접 장치

Also Published As

Publication number Publication date
CN112988615A (zh) 2021-06-18
US11461047B2 (en) 2022-10-04
US20210181988A1 (en) 2021-06-17

Similar Documents

Publication Publication Date Title
CN106354745B (zh) 用于提供计算机装置的接口的方法和计算机装置
KR102549545B1 (ko) 스토리지 장치 및 스토리지 장치의 동작 방법
US11874815B2 (en) Key-value storage device and method of operating the same
US10671287B2 (en) Method of performing garbage collection, storage device performing the same and computing system including the same
US11573890B2 (en) Storage device storing data based on key-value and operating method of the same
US11461047B2 (en) Key-value storage device and operating method
CN112506814B (zh) 一种存储器及其控制方法与存储***
US10296250B2 (en) Method and apparatus for improving performance of sequential logging in a storage device
KR102535828B1 (ko) 메모리 컨트롤러 및 상기 메모리 컨트롤러의 동작 방법
KR102567224B1 (ko) 데이터 저장 장치 및 이를 포함하는 컴퓨팅 시스템
KR20170038853A (ko) 호스트-관리 비휘발성 메모리
US11556271B2 (en) Storage device storing data on key-value basis and operating method thereof
US10168926B2 (en) Method of operating data storage device and method of operating data processing system including same
US11842082B2 (en) Storage device including a plurality of zones having separate compression ratios and operating method thereof
KR20210068888A (ko) 키-밸류 기반으로 데이터를 저장하는 스토리지 장치 및 이의 동작 방법
US9880930B2 (en) Method for operating controller and method for operating device including the same
KR20200033459A (ko) 메모리 시스템 및 그것의 동작방법
KR20230025322A (ko) 호스트, 호스트의 동작 방법 및 스토리지 시스템
CN115576861A (zh) 存储设备和存储设备的操作方法