KR20210092361A - 스토리지 장치 및 그것의 동작 방법 - Google Patents

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

Info

Publication number
KR20210092361A
KR20210092361A KR1020200005368A KR20200005368A KR20210092361A KR 20210092361 A KR20210092361 A KR 20210092361A KR 1020200005368 A KR1020200005368 A KR 1020200005368A KR 20200005368 A KR20200005368 A KR 20200005368A KR 20210092361 A KR20210092361 A KR 20210092361A
Authority
KR
South Korea
Prior art keywords
key
command
value
internal
user
Prior art date
Application number
KR1020200005368A
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 KR1020200005368A priority Critical patent/KR20210092361A/ko
Priority to US17/076,619 priority patent/US11467739B2/en
Priority to EP20213056.3A priority patent/EP3851950A1/en
Priority to CN202110051502.7A priority patent/CN113126910A/zh
Publication of KR20210092361A publication Critical patent/KR20210092361A/ko
Priority to US17/939,387 priority patent/US11775183B2/en

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
    • 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/062Securing storage systems
    • G06F3/0622Securing storage systems in relation to access
    • 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
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/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/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/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
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express

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)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

본 발명의 실시 예에 따른 불휘발성 메모리 장치를 포함하는 스토리지 장치의 동작 방법은 외부 호스트 장치로부터, 제1 키를 포함하는 제1 키-밸류(KV; Key-Value) 커맨드를 수신하는 단계, 제1 KV 커맨드에 응답하여, 제1 키에 대응하는 제1 밸류를 불휘발성 메모리 장치로부터 외부 호스트 장치로 제1 사용자 데이터로서 전송하는 단계, 외부 호스트 장치로부터, 제2 키를 포함하는 제2 KV 커맨드를 수신하는 단계, 제2 KV 커맨드에 응답하여, 제2 키와 대응되는 제2 밸류를 기반으로 제1 관리 동작을 수행하는 단계를 포함하고, 제1 KV 커맨드 및 제2 KV 커맨드는 서로 동일한 타입의 KV 커맨드이다.

Description

스토리지 장치 및 그것의 동작 방법{STORAGE DEVICE AND OPERATION METHOD THEREOF}
본 발명은 반도체 메모리에 관한 것으로, 더욱 상세하게는 스토리지 장치 및 그것의 동작 방법에 관한 것이다.
반도체 메모리는 SRAM, DRAM 등과 같이 전원 공급이 차단되면 저장하고 있던 데이터가 소멸되는 휘발성 메모리 장치 및 플래시 메모리 장치, PRAM, MRAM, RRAM, FRAM 등과 같이 전원 공급이 차단되어도 저장하고 있던 데이터를 유지하는 불휘발성 메모리 장치로 구분된다.
플래시 메모리 기반의 솔리드 스테이트 드라이브(SSD; solid state drvie)는 대용량 저장매체로서 널리 사용된다. 일반적으로, SSD는 호스트와 미리 정해진 인터페이스를 통해 통신한다. 이 때, 호스트는 SSD로부터 다양한 정보를 획득하기 위한 다양한 관리 동작을 수행할 수 있다. 호스트는 상술된 관리 동작을 수행하기 위해, 미리 정해진 인터페이스에 의해 정의된 다양한 커맨드들을 사용할 수 있다. 그러나, SSD로부터 제공되는 정보가 다양해짐에 따라, 미리 정해진 인터페이스에 의해 정의되어야 하는 커맨드들이 다양해지고, 이로 인하여, 인터페이스 구성이 복잡해지는 문제점이 있다.
본 발명의 목적은 상술된 기술적 과제를 해결하기 위한 것으로, 향상된 성능 및 감소된 비용을 갖는 스토리지 장치 및 그것의 동작 방법을 제공하는데 있다.
본 발명의 실시 예에 따른 불휘발성 메모리 장치를 포함하는 스토리지 장치의 동작 방법은 외부 호스트 장치로부터, 제1 키를 포함하는 제1 키-밸류(KV; Key-Value) 커맨드를 수신하는 단계; 상기 제1 KV 커맨드에 응답하여, 상기 제1 키에 대응하는 제1 밸류를 상기 불휘발성 메모리 장치로부터 상기 외부 호스트 장치로 제1 사용자 데이터로서 전송하는 단계; 상기 외부 호스트 장치로부터, 제2 키를 포함하는 제2 KV 커맨드를 수신하는 단계; 상기 제2 KV 커맨드에 응답하여, 상기 제2 키와 대응되는 제2 밸류를 기반으로 제1 관리 동작을 수행하는 단계를 포함하고, 상기 제1 KV 커맨드 및 상기 제2 KV 커맨드는 서로 동일한 타입의 KV 커맨드이다.
본 발명의 실시 예에 따른 스토리지 장치는 사용자 키에 대응하는 제1 밸류를 포함하는 사용자 키-밸류 페어를 저장하도록 구성된 불휘발성 메모리 장치; 및 상기 불휘발성 메모리 장치를 제어하도록 구성된 스토리지 컨트롤러를 포함하고, 상기 스토리지 컨트롤러는 내부 키에 대응하는 제2 밸류를 포함하는 내부 키-밸류 페어, 및 상기 사용자 키 및 상기 내부 키, 및 상기 제1 및 제2 밸류들의 위치에 대한 정보를 포함하는 키 인덱스를 저장하도록 구성된 메모리 장치; 및 외부 호스트 장치로부터의 제1 키-밸류(KV; Key-Value) 커맨드에 응답하여, 상기 키 인덱스를 기반으로 상기 제1 KV 커맨드에 포함된 키가 상기 내부 키인지 또는 상기 사용자 키인지 판별하고, 상기 키가 상기 사용자 키인 경우, 상기 제1 밸류를 상기 외부 호스트 장치로 전송하고, 상기 키가 상기 내부 키인 경우, 상기 제2 밸류에 대응하는 제1 관리 동작을 수행하도록 구성된 키-밸류(KV; Key-Value) 관리자를 포함한다.
본 발명의 실시 예에 따른 불휘발성 메모리 장치를 포함하는 스토리지 장치의 동작 방법은 외부 호스트 장치로부터 제1 키를 포함하는 제1 키-밸류(KV; Key-Value) 커맨드를 수신하는 단계; 상기 제1 키가 내부 키인지 또는 사용자 키인지 판별하는 단계; 및 상기 제1 키가 상기 사용자 키인 경우, 상기 불휘발성 메모리 장치에 저장된 사용자 데이터에 대한 제1 입출력 동작을 수행하고, 상기 제1 키가 상기 내부 키인 경우, 상기 스토리지 장치에 대한 제1 관리 동작을 수행하는 단계를 포함한다.
본 발명의 실시 예에 따른 스토리지 장치를 제어하도록 구성된 호스트의 동작 방법은 제1 키-밸류(KV; Key-Value) 커맨드를 상기 스토리지 장치로 전송하는 단계; 상기 스토리지 장치로부터 적어도 하나의 내부 키 및 적어도 하나의 밸류에 대한 정보를 포함하는 내부 KV 페어에 대한 정보를 수신하는 단계; 상기 내부 KV 페어를 기반으로, 상기 적어도 하나의 내부 키 중 제1 내부 키를 포함하는 제2 KV 커맨드를 상기 스토리지 장치로 전송하는 단계; 상기 제2 KV 커맨드에 응답한 상기 스토리지 장치로부터, 상기 적어도 하나의 밸류 중, 상기 제1 내부 키와 대응되는 제1 밸류에 대응하는 제1 장치 정보를 수신하는 단계; 제1 사용자 키를 포함하는 제3 KV 커맨드를 상기 스토리지 장치로 전송하는 단계; 및 상기 제3 KV 커맨드에 응답한 상기 스토리지 장치로부터 상기 제1 사용자 키에 대응하는 제1 사용자 데이터를 수신하는 단계를 포함한다.
본 발명의 실시 예에 따른 스토리지 장치를 제어하도록 구성된 호스트의 동작 방법은 상기 스토리지 장치에 대한 제1 관리 동작을 수행하기 위하여, 제1 관리 커맨드와 대응되는 제1 내부 키를 포함하는 제1 KV 커맨드를 상기 스토리지 장치로 전송하는 단계; 상기 스토리지 장치에 대한 제2 관리 동작을 수행하기 위하여, 제2 관리 커맨드와 대응되는 제2 내부 키를 포함하는 제2 KV 커맨드를 상기 스토리지 장치로 전송하는 단계; 상기 스토리지 장치로부터 제1 사용자 데이터를 읽기 위하여, 상기 제1 사용자 데이터와 대응되는 제1 사용자 키를 포함하는 제3 KV 커맨드를 상기 스토리지 장치로 전송하는 단계; 및 상기 스토리지 장치에 제2 사용자 데이터를 저장하기 위하여, 상기 제2 사용자 데이터와 대응되는 제2 사용자 키 및 상기 제2 사용자 데이터와 대응하는 제2 밸류를 포함하는 제4 KV 커맨드를 상기 스토리지 장치로 전송하는 단계를 포함하고, 상기 제1 내지 제4 KV 커맨드들 중 적어도 2개는 서로 동일한 타입의 KV 커맨드이다.
본 발명의 실시 예에 따른 호스트 장치 및 스토리지 장치를 포함하는 스토리지 시스템의 동작 방법은 상기 호스트 장치가, 제1 사용자 키를 포함하는 제1 키-밸류(KV; Key-Value) 커맨드를 상기 스토리지 장치로 전송하는 단계; 상기 스토리지 장치가, 상기 제1 KV 커맨드에 응답하여, 상기 제1 사용자 키에 대응하는 제1 밸류를 제1 사용자 데이터로서 상기 호스트 장치로 전송하는 단계;
상기 호스트 장치가, 제1 내부 키를 포함하는 제2 KV 커맨드를 상기 스토리지 장치로 전송하는 단계; 및 상기 스토리지 장치가, 상기 제2 KV 커맨드에 응답하여, 상기 제1 내부 키와 대응되는 제2 밸류에 대응하는 제1 관리 동작을 수행하는 단계를 포함하고, 상기 제1 KV 커맨드 및 상기 제2 KV 커맨드는 동일한 타입의 KV 커맨드이다.
본 발명의 실시 예에 따르면, 스토리지 장치는 다양한 관리 동작들에 대한 정보를 포함하는 내부 키-밸류(KV; Key-Value) 페어를 관리할 수 있다. 호스트는 키-밸류 인터페이스에서 제공되는 키-밸류 커맨드를 통해 내부 KV 페어를 액세스함으로써, 스토리지 장치에 대한 다양한 관리 동작을 수행할 수 있다. 따라서, 다양한 관리 동작들을 수행하기 위한 별도의 커맨드들이 불필요하므로, 호스트 및 스토리지 장치 사이의 인터페이스가 간결해질 수 있다. 즉, 향상된 성능 및 감소된 비용을 갖는 스토리지 장치 및 그것의 동작 방법이 제공된다.
도 1은 본 발명의 실시 예에 따른 스토리지 시스템을 예시적으로 보여주는 블록도이다.
도 2는 도 1의 스토리지 컨트롤러를 예시적으로 보여주는 블록도이다.
도 3a는 블록 기반의 스토리지 시스템의 계층 구조를 설명하기 위한 도면이다.
도 3b는 도 3a의 블록 기반 스토리지 시스템의 동작을 설명하기 위한 순서도이다.
도 4a는 도 1의 스토리지 시스템의 계층 구조를 예시적으로 보여주는 블록도이다.
도 4b는 도 1 및 도 4a의 스토리지 시스템의 동작을 개략적으로 보여주는 순서도이다.
도 5는 도 1의 키 인덱스, 내부 KV 페어, 및 사용자 KV 페어를 설명하기 위한 도면이다.
도 6은 도 1의 스토리지 장치의 초기 동작을 예시적으로 보여주는 순서도이다.
도 7은 도 6의 순서도에 따른 초기 동작을 설명하기 위한 블록도이다.
도 8은 도 1의 스토리지 장치의 동작을 예시적으로 보여주는 순서도이다.
도 9a 내지 도 9e는 도 8의 순서도에 따른 동작을 구체적으로 설명하기 위한 도면들이다.
도 10은 도 1의 스토리지 시스템의 동작을 예시적으로 보여주는 순서도이다.
도 11a 내지 도 11e는 도 10의 순서도에 따른 동작을 설명하기 위한 도면들이다.
도 12는 도 1의 스토리지 시스템의 동작을 예시적으로 보여주는 순서도이다.
도 13은 도 1의 스토리지 장치의 동작을 예시적으로 보여주는 순서도이다.
도 14는 도 1의 스토리지 장치의 동작을 예시적으로 보여주는 순서도이다.
도 15a 내지 도 15e는 도 14의 순서도에 따른 동작을 설명하기 위한 도면들이다.
도 16은 도 15e의 로그 데이터를 저장하는데 사용되는 내부 데이터 구조를 보여주는 도면이다.
도 17은 도 1의 스토리지 장치의 동작을 예시적으로 보여주는 순서도이다.
도 18은 본 발명의 실시 예에 따른 스토리지 시스템을 예시적으로 보여주는 블록도이다.
도 19는 본 발명의 실시 예에 따른 스토리지 시스템을 예시적으로 보여주는 블록도이다.
도 20은 본 발명의 실시 예에 따른 스토리지 시스템이 적용된 데이터 센터를 예시적으로 보여주는 블록도이다.
이하에서, 본 발명의 기술 분야에서 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있을 정도로, 본 발명의 실시 예들이 명확하고 상세하게 기재될 것이다.
도 1은 본 발명의 실시 예에 따른 스토리지 시스템을 예시적으로 보여주는 블록도이다. 도 1을 참조하면, 스토리지 시스템(100)은 호스트(110) 및 스토리지 장치(120)를 포함할 수 있다. 스토리지 시스템(100)은 개인용 컴퓨터, 랩탑 컴퓨터, 서버, 워크스테이션, 스마트폰, 태블릿 PC 등과 같은 다양한 정보 처리 장치들 중 적어도 하나를 포함할 수 있다.
호스트(110)는 스토리지 장치(120)에 데이터(DATA)를 저장하거나 또는 스토리지 장치(120)에 저장된 데이터(DATA)를 읽을 수 있다. 예시적인 실시 예에서, 스토리지 장치(120)는 키-밸류 스토리지 장치(Key-Value storage device)일 수 있다. 즉, 호스트(110)는 키-밸류 페어(Key-Value pair; KV pair)를 기반으로 스토리지 장치(120)를 제어할 수 있다.
예를 들어, 종래의 블록-기반의 스토리지 시스템에서, 호스트는 스토리지 장치의 저장 공간을 논리 블록 어드레스로 관리하고, 논리 블록 어드레스를 기반으로 스토리지 장치를 제어한다. 즉, 블록-기반의 스토리지 시스템에서, 호스트는 고정된 길이를 갖는 논리 블록 어드레스를 기반으로 스토리지 장치를 제어한다.
반면에, 본 발명의 실시 예에 따른 호스트(110)는 키-밸류 커맨드(CMD_KV)(이하에서, “커맨드”라 칭함.)를 사용하여 스토리지 장치(120)를 제어할 수 있다. KV 커맨드(CMD_KV)는 키(key) 또는 밸류(value)와 대응되는 정보를 포함할 수 있다. 예시적인 실시 예에서, 호스트(110)로부터 제공되는 키는 종래의 논리 블록 어드레스와 달리, 가변 크기를 가질 수 있다. 예시적인 실시 예에서, 키-밸류 페어는 NoSQL과 같은 데이터베이스에서 지원되는 데이터 관리 구조일 수 있으며, KV 커맨드는 NoSQL과 같은 데이터베이스에서 지원되는 커맨드 타입을 가리킬 수 있다.
예시적인 실시 예에서, KV 커맨드(CMD_KV)는 종래의 인터페이스들(PCIe, NVMe, SATA, IDE, UFS, eMMC 등)에 의해 정의된 커맨드와 다른 구성을 가질 수 있다. 예시적인 실시 예에서, KV 커맨드(CMD_KV)는 호스트(110)의 애플리케이션 계층에서 사용되는 커맨드 타입과 동일 또는 유사한 형태(예를 들어, GET, PUT, DEL, LIST 등)를 가질 수 있다. KV 커맨드(CMD_KV)의 구성 및 구조는 이하의 도면들을 참조하여 더욱 상세하게 설명된다.
스토리지 장치(120)는 호스트(110)로부터의 KV 커맨드(CMD_KV)에 응답하여, 데이터(DATA)를 저장하거나 또는 저장된 데이터(DATA)를 출력할 수 있다. 예를 들어, 스토리지 장치(120)는 스토리지 컨트롤러(121) 및 불휘발성 메모리 장치(122)를 포함할 수 있다. 불휘발성 메모리 장치(122)는 사용자 키-밸류(KV; Key-Value) 페어(KVPR-user)를 포함할 수 있다. 사용자 KV 페어(KVPR-user)는 사용자 데이터를 포함하는 데이터 구조 또는 사용자 데이터가 저장된 저장 공간을 가리킬 수 있다. 사용자 KV 페어(KVPR-user)는 도 5를 참조하여 더욱 상세하게 설명된다.
스토리지 컨트롤러(121)는 호스트(110)로부터 수신된 KV 커맨드(CMD_KV)에 응답하여, KV 커맨드(CMD_KV)에 포함된 키와 대응되는 데이터를 불휘발성 메모리 장치(122)의 사용자 KV 페어(KVPR-user)로부터 출력하거나 또는 KV 커맨드(CMD_KV)에 포함된 밸류를 불휘발성 메모리 장치(122)의 사용자 KV 페어(KVPR-user)에 저장할 수 있다.
예를 들어, 스토리지 컨트롤러(121)는 키 인덱스(IDX) 및 키-밸류(KV; Key-Value) 관리자(121a)를 포함할 수 있다. 키 인덱스(IDX)는 스토리지 장치(120)에서 관리되는 키들 및 키들과 대응되는 정보 또는 데이터가 저장된 위치 사이의 관계에 대한 정보를 포함할 수 있다. 키 인덱스(IDX)는 도 5를 참조하여 더욱 상세하게 설명된다.
KV 관리자(121a)는, 키 인덱스(IDX)를 기반으로, 호스트(110)로부터 수신된 KV 커맨드(CMD_KV)의 키와 대응되는 데이터의 위치를 검색할 수 있다. KV 관리자(121a)는 검색된 위치로부터 데이터를 읽고, 읽은 데이터(DATA)를 호스트(110)로 전송할 수 있다. 또는, KV 관리자(121a)는, 호스트(110)로부터 수신된 KV 커맨드(CMD_KV)의 키와 대응되는 데이터의 위치를 할당하고, 할당된 위치에 KV 커맨드(CMD_KV)에 포함된 밸류를 사용자 데이터로서 저장할 수 있다. KV 관리자(121a)는 할당된 위치 및 키를 기반으로, 키 인덱스(IDX)를 갱신할 수 있다.
상술된 바와 같이, 스토리지 시스템(100)의 호스트(110) 및 스토리지 장치(120)는 키-밸류 페어를 기반으로 동작할 수 있다. 예시적인 실시 예에서, 스토리지 장치(120)의 스토리지 컨트롤러(121)는 내부 KV 페어(KVPR-int)를 더 포함할 수 있다. 내부 KV 페어(KVPR-int)는 스토리지 장치(120)에서 자체적으로 관리되는 키-밸류 페어를 가리킬 수 있다. 내부 KV 페어(KVPR-int)는 스토리지 장치(120)에서 지원되는 다양한 동작, 또는 관리 동작들에 대한 정보를 포함할 수 있다. 호스트(110)는 내부 KV 페어(KVPR-int)를 액세스함으로써, 스토리지 장치(120)에 대한 다양한 관리 동작을 제어할 수 있다.
예를 들어, 종래의 NVMe 기반의 스토리지 시스템에서, 호스트는 NVMe 사양에 의해 정의된 Get Log Page 커맨드를 사용하여, 스토리지 장치에 대한 스마트 정보를 읽는다. 반면에, 본 발명의 실시 예에 따르면, 스토리지 컨트롤러(121)의 내부 KV 페어(KVPR-int)는 Get Log Page 커맨드(특히 SMART/HEALTH information)과 관련된 정보를 포함할 수 있다. 이 때, 호스트(110)는 Get Log Page 커맨드(특히 SMART/HEALTH information)와 대응되는 키(또는 내부 키)를 포함하는 KV 커맨드(CMD_KV)를 스토리지 장치(120)로 전송함으로써, 스토리지 장치(120)로부터 스마트 정보를 획득할 수 있다. 즉, 종래의 스토리지 시스템에서는, 스토리지 장치의 다양한 관리 동작들을 지원하기 위해, 다양한 관리 동작들 각각에 대한 별도의 커맨드들이 정의되었으나, 본 발명의 실시 예에 따른 스토리지 시스템(100)에서, 호스트(110)는, 관리 동작을 위한 별도의 커맨드 정의 없이, 스토리지 장치(120) 자체에서 관리되는 내부 KV 페어(KVPR-int)를 액세스함으로써, 다양한 관리 동작을 수행할 수 있다.
상술된 바와 같이, 본 발명의 실시 예에 따르면, 호스트(110)는 다양한 관리 동작들을 위한 별도의 커맨드 정의 없이, KV 커맨드(CMD_KV)를 사용하여 스토리지 장치(120)를 액세스하거나 또는 스토리지 장치(120)에 대한 관리 동작을 수행할 수 있다. 따라서, 호스트(110) 및 스토리지 장치(120) 사이의 인터페이스가 간결해질 수 있으며, 이에 따라 향상된 성능 및 감소된 비용을 갖는 스토리지 시스템이 제공된다.
도 2는 도 1의 스토리지 컨트롤러를 예시적으로 보여주는 블록도이다. 도 1 및 도 2를 참조하면, 스토리지 컨트롤러(121)는 KV 관리자(121a), 프로세서(121b), 메모리 장치(121c), 내부 제어 모듈(121c), 호스트 인터페이스 회로(121e), 및 플래시 인터페이스 회로(121f)를 포함할 수 있다. KV 관리자(121)는 도 1을 참조하여 설명되었으므로, 이에 대한 상세한 설명은 생략된다.
프로세서(121b)는 스토리지 컨트롤러(121)의 제반 동작을 제어할 수 있다. 메모리 장치(121c)는 스토리지 컨트롤러(121)의 버퍼 메모리, 캐시 메모리, 또는 동작 메모리로서 사용될 수 있다. 예시적인 실시 예에서, 메모리 장치(121c)는 SRAM, DRAM 등과 같은 휘발성 메모리 또는 플래시 메모리, MRAM, RRAM, PRAM 등과 같은 불휘발성 메모리일 수 있다.
예시적인 실시 예에서, 키 인덱스(IDX) 및 내부 KV 페어(KVPR-int)는 메모리 장치(121c)에 저장될 수 있다. 비록 키 인덱스(IDX) 및 내부 KV 페어(KVPR-int)가 스토리지 컨트롤러(121) 내부의 메모리 장치(121c)에 저장되는 것으로 도시되어 있으나, 본 발명의 범위가 이에 한정되는 것은 아니며, 키 인덱스(IDX) 및 내부 KV 페어(KVPR-int)는 스토리지 컨트롤러(121) 외부의 버퍼 메모리(미도시)(예를 들어, DRAM)에 저장될 수 있다.
내부 제어 모듈(121d)은 스토리지 컨트롤러(121)의 내부 동작 또는 관리 동작을 제어하도록 구성될 수 있다. 예를 들어, 내부 제어 모듈(121d)은, 호스트(110)로부터의 특정 키(예를 들어, 내부 키)를 포함하는 KV 커맨드(CMD_KV)에 응답하여, 스토리지 장치(120) 또는 스토리지 컨트롤러(121)에 대한 다양한 관리 동작(예를 들어, 로그(Log) 정보 관리 동작, 특징(Feature) 정보 관리 동작 등)을 수행하도록 구성될 수 있다.
스토리지 컨트롤러(121)는 호스트 인터페이스 회로(121e)를 통해 호스트(110)와 통신하도록 구성될 수 있다. 호스트 인터페이스 회로(121e)는 미리 정해진 인터페이스 규약을 기반으로 구현될 수 있다. 예시적인 실시 예에서, 미리 정해진 인터페이스 규약은 PCI-express(Peripheral Component Interconnect express) 인터페이스, NVMe(nonvolatile memory express) 인터페이스, SATA(Serial ATA) 인터페이스, SAS(Serial Attached SCSI) 인터페이스, UFS(Universal Flash Storage) 인터페이스 등과 같은 다양한 인터페이스 규약들 중 적어도 하나를 포함할 수 있으나, 본 발명의 범위가 이에 한정되는 것은 아니다. 예시적인 실시 예에서, 호스트 인터페이스 회로(121e)는 키-밸류(KV; Key-Value) 인터페이스를 기반으로 구현될 수 있다. KV 인터페이스는 GET, PUT, DEL, LIST 등과 같은 KV 커맨드를 지원하도록 구성된 인터페이스일 수 있다.
스토리지 컨트롤러(121)는 플래시 인터페이스 회로(121f)를 통해 불휘발성 메모리 장치(122)와 통신할 수 있다. 예시적인 실시 예에서, 플래시 인터페이스 회로(121f)는 낸드 인터페이스, 토글 인터페이스, 또는 ONFI 인터페이스를 기반으로 구현될 수 있다. 예시적인 실시 예에서, 플래시 인터페이스 회로(121f)는 불휘발성 메모리 장치(122)에 포함된 복수의 불휘발성 메모리들 각각을 제어하도록 구성된 플래시 메모리 컨트롤러(미도시)(FMC; flash memory controller)를 포함할 수 있다.
예시적인 실시 예에서, KV 관리자(121a)는 소프트웨어, 하드웨어, 또는 그것들의 조합의 형태로 구현될 수 있다. KV 관리자(121a)가 소프트웨어 형태로 구현되는 경우, KV 관리자(121a)와 관련된 정보 또는 프로그램은 메모리 장치(121c)에 저장될 수 있고, 프로세서(121b)에 의해 구동될 수 있다. KV 관리자(121a)가 하드웨어 형태로 구현되는 경우, KV 관리자(121A)는 호스트 인터페이스 회로(121e)에 포함될 수 있다. 그러나 본 발명의 범위가 이에 한정되는 것은 아니며, KV 관리자(121a)는 별도의 모듈 또는 하드웨어 형태로 구현될 수 있다.
도 3a는 블록 기반의 스토리지 시스템의 계층 구조를 설명하기 위한 도면이다. 도면의 간결성 및 설명의 편의를 위하여, 도 3a의 구성 요소들에 대한 참조 번호는 생략된다. 도 3a를 참조하면, 블록-기반의 스토리지 시스템에 포함된 호스트는 애플리케이션 계층, 파일 시스템, 및 장치 드라이버를 포함한다. 애플리케이션 레이어는 호스트에서 실행되는 다양한 애플리케이션들을 가리킬 수 있다. 파일 시스템은 애플리케이션 레이어에서 생성된 다양한 정보를 조직화하도록 구성된다. 예를 들어, 파일 시스템은 애플리케이션 레이어에서 생성되거나 또는 요청된 데이터를 논리 블록 어드레스를 기반으로 관리할 수 있다. 장치 드라이버는 파일 시스템에 의해 관리되는 논리 블록 어드레스를 기반으로, 스토리지 장치로 전송될 요청 또는 커맨드를 생성하거나 또는 스토리지 장치로부터 수신된 요청 또는 커맨드를 처리하도록 구성될 수 있다. 또는 장치 드라이버는 애플리케이션 계층의 요청에 응답하여, 스토리지 장치에서 수행될 다양한 관리 동작들에 대한 커맨드를 생성하도록 구성될 수 있다. 플래시 변환 계층은 장치 드라이버로부터 제공된 커맨드의 논리 블록 어드레스를 불휘발성 메모리 장치의 물리 어드레스로 변환하고, 이를 관리하도록 구성될 수 있다.
도 3b는 도 3a의 블록 기반 스토리지 시스템의 동작을 설명하기 위한 순서도이다. 도 3a 및 도 3b를 참조하면, 읽기 동작을 위해, S1 단계에서, 호스트는 제1 입출력 커맨드를 스토리지 장치로 전송한다. 제1 입출력 커맨드는 커맨드 타입이 읽기라는 정보 및 논리 블록 어드레스에 대한 정보를 포함한다. S2 단계에서, 스토리지 장치는 수신된 제1 입출력 커맨드에 응답하여, 논리 블록 어드레스에 대응하는 사용자 데이터를 호스트로 전송한다.
다음으로, 쓰기 동작을 위해, S3 단계에서, 호스트는 제2 입출력 커맨드를 스토리지 장치로 전송한다. 제2 입출력 커맨드는 커맨드 타입이 쓰기라는 정보, 논리 블록 어드레스에 대한 정보, 및 기입될 사용자 데이터를 포함한다. 스토리지 장치는 제2 입출력 커맨드에 응답하여, 논리 블록 어드레스에 대응하는 물리 어드레스를 할당하고, 할당된 물리 어드레스에 대응하는 영역에 사용자 데이터를 기입할 수 있다.
다음으로, 특정 관리 동작(예를 들어, 스마트/헬스 정보를 획득하기 위한 관리 동작)을 위해, S4 단계에서, 호스트는 Get Log Page 커맨드를 스토리지 장치로 전송한다. 이 때, Get Log Page 커맨드는 “x2h”의 로그 식별자(Log Identifier)를 포함할 수 있다. “x2h”의 로그 식별자(Log Identifier)는 스마트/헬스 정보에 대응하는 로그 식별자일 수 있다. S5 단계에서, 스토리지 장치는 GetLogPage 커맨드에 응답하여, 스마트/헬스 정보를 호스트로 전송할 수 있다.
다음으로, 특정 관리 동작(예를 들어, 휘발성 쓰기 캐시 활성화를 설정하기 위한 관리 동작)을 위해, S6 단계에서, 호스트는 Set Feature 커맨드를 스토리지 장치로 전송할 수 있다. 이 때, Set Feature 커맨드는 “x6”의 특징 식별자(Feature Identifier) 및 휘발성 쓰기 캐시 인에이블에 대한 정보를 포함할 수 있다. 스토리지 장치는 Set Feature 커맨드에 응답하여, 휘발성 쓰기 캐시 인에이블과 관련된 특징(Feature)를 설정할 수 있다.
상술된 바와 같이, 종래의 블록 기반 스토리지 시스템에서, 호스트는 논리 블록 어드레스를 기반으로 스토리지 장치 또는 데이터를 관리하고, 스토리지 장치는 논리 블록 어드레스를 물리 블록 어드레스로 변환하고 관리하도록 구성된다. 뿐만 아니라, 종래의 블록 기반 스토리지 시스템에서, 호스트는 미리 정의된 커맨드를 사용하여 스토리지 장치에 대한 다양한 관리 동작을 수행한다.
도 4a는 도 1의 스토리지 시스템의 계층 구조를 예시적으로 보여주는 블록도이다. 도 1 및 도 4a를 참조하면, 스토리지 시스템(100)은 호스트(110) 및 스토리지 장치(120)를 포함할 수 있다.
호스트(110)는 애플리케이션 레이어(111) 및 장치 드라이버(112)를 포함할 수 있다. 애플리케이션 레이어(111)는 호스트(110)에서 구동되는 다양한 응용 프로그램들을 포함할 수 있다.
애플리케이션 레이어(111)는 다양한 응용 프로그램들을 구동하는 과정에서, 애플리케이션 커맨드(CMD_APP)를 발행할 수 있다. 장치 드라이버(112)는 애플리케이션 레이어(111)로부터의 애플리케이션 커맨드(CMD_APP)를 KV 커맨드(CMD_KV)로 변환시킬 수 있다. 예를 들어, 장치 드라이버(112)는 애플리케이션 레이어(111)로부터의 애플리케이션 커맨드(CMD_APP)를 GET, PUT, DEL, 또는 LIST와 같은 형태의 KV 커맨드(CMD_KV)로 변환시킬 수 있다. 변환된 KV 커맨드(CMD_KV)는 스토리지 장치(120)로 전달될 수 있다.
예시적인 실시 예에서, 애플리케이션 레이어(111)가 키-밸류 페어를 기반으로 동작하는 경우, 애플리케이션 레이어(111)는 KV 커맨드(CMD_KV)를 생성할 수 있다. 이 경우, 애플리케이션 레이어(111)로부터의 KV 커맨드(CMD_KV)는 별도의 변환 없이, 스토리지 장치(120)로 직접 또는 미리 정해진 인터페이스 프로토콜을 통해 전달될 수 있다.
예시적인 실시 예에서, KV 커맨드(CMD_KV)는 GET, PUT, DEL, 및 LIST 중 어느 하나일 수 있다. GET 커맨드는 키를 포함하는 GET[Key]의 구조를 가질 수 있고, 스토리지 장치(120)로부터 키에 대응하는 밸류(예를 들어, 데이터 또는 정보)를 독출하는데 사용될 수 있다. PUT 커맨드는 키 및 밸류를 포함하는 PUT[Key, Value]의 구조를 가질 수 있고, 키에 대응하는 밸류(예를 들어, 데이터 또는 정보)를 기입 또는 저장하는데 사용될 수 있다. DEL 커맨드는 키를 포함하는 DEL[Key]의 구조를 가질 수 있고, 스토리지 장치(120)에서 키에 대응하는 밸류 또는 키-밸류 페어를 삭제하는데 사용될 수 있다. LIST 커맨드는 키들을 포함하는 LIST[Key1, Key2]의 구조를 가질 수 있고, 스토리지 장치(120)로부터 키들(Key1~Key2)에 대응하는 밸류(예를 들어, 데이터 또는 정보)를 확인하는데 사용될 수 있다. 상술된 KV 커맨드들의 종류들은 예시적인 것이며, 본 발명의 범위가 이에 한정되는 것은 아니다.
스토리지 장치(120)는 KV 관리자(121a) 및 불휘발성 메모리 장치(122)를 포함할 수 있다. KV 관리자(121a)는 호스트(110)로부터 수신된 KV 커맨드(CMD_KV)에 응답하여, 키 인덱스(IDX)를 기반으로, KV 커맨드(CMD_KV)에 포함된 키와 대응되는 정보를 검색할 수 있다. 예를 들어, KV 커맨드(CMD_KV)에 포함된 키와 대응되는 정보가 내부 KV 페어(KVPR-int)에 존재하는 경우, KV 관리자(121a)는 내부 KV 페어(KVPR-int)로부터 KV 커맨드(CMD_KV)의 키와 대응되는 정보를 읽고, 읽은 정보와 대응되는 동작을 수행할 수 있다. 또는, KV 커맨드(CMD_KV)에 포함된 키와 대응되는 정보가 사용자 KV 페어(KVPR-user)에 존재하는 경우, KV 관리자(121a)는 불휘발성 메모리 장치(122)의 사용자 KV 페어(KVPR-user)로부터 KV 커맨드(CMD_KV)의 키와 대응되는 데이터를 읽고, 읽은 데이터를 호스트(110)로 전송할 수 있다.
도 4b는 도 1 및 도 4a의 스토리지 시스템의 동작을 개략적으로 보여주는 순서도이다. 이하에서, 설명의 편의를 위하여, 내부 키(iK; internal Key), 사용자 키(uK; user Key) 등의 용어들이 사용된다. 내부 키(iK)는 내부 KV 페어(KVPR-int)에 포함된 정보와 대응되는 키를 가리키고, 사용자 키(uK)는 사용자 KV 페어(KVPR-user)에 포함된 사용자 데이터와 대응되는 키를 가리킬 수 있다. 또한, 이하에서, GET, PUT, DEL, LIST 등의 용어들이 사용된다. GET, PUT, DEL, LIST 등의 용어들은 KV 커맨드(CMD_KV)의 타입을 구분하기 위한 용어들이며, 본 발명의 기술적 사상에 따른 KV 커맨드가 이에 한정되는 것은 아니다.
도 1, 도 4a, 및 도 4b를 참조하면, 읽기 동작을 위해, S10 단계에서, 호스트(110)는 제1 KV 커맨드를 스토리지 장치(120)로 전송할 수 있다. 이 때, 제1 KV 커맨드는 GET[uK1]의 구조를 가질 수 있다. “GET”의 커맨드 타입은 스토리지 장치(120)로부터 데이터 또는 정보를 읽기 위한 커맨드 타입일 수 있다. 즉, GET[uK1]의 KV 커맨드는 제1 사용자 키(uK1)에 대응하는 사용자 데이터를 읽기 위한 커맨드일 수 있다.
S11 단계에서, 스토리지 장치(120)는 호스트(110)로부터 수신된 GET[uK1]에 응답하여, 제1 사용자 키(uK1)에 대응하는 사용자 데이터를 호스트(110)로 전송할 수 있다.
다음으로, 쓰기 동작을 위해, S21 단계에서, 호스트(110)는 제2 KV 커맨드를 스토리지 장치(120)로 전송할 수 있다. 이 때, 제2 KV 커맨드는 PUT[uK2, V2]의 구조를 가질 수 있다. “PUT”의 커맨드 타입은 스토리지 장치(120)에 데이터 또는 정보를 저장하기 위한 커맨드 타입일 수 있다. 즉, PUT[uK2, V2]의 KV 커맨드는 제2 사용자 키(uK2)에 대응하는 사용자 데이터로서 제2 밸류(V2)를 저장하기 위한 커맨드일 수 있다. 스토리지 장치(120)는 PUT[uK2, V2]의 KV 커맨드에 응답하여, 제2 사용자 키(uK2)에 대응하는 사용자 데이터로서 제2 밸류(V2)를 불휘발성 메모리 장치(120)의 사용자 KV 페어(KVPR-user)에 저장할 수 있다. 예시적인 실시 예에서, 저장 동작이 완료된 이후에, 스토리지 장치(120)는 제2 밸류(V2)가 저장된 위치 및 제2 사용자 키(uK2)를 기반으로 키 인덱스(IDX)를 갱신할 수 있다.
다음으로, 특정 관리 동작(예를 들어, 스마트/헬스 정보를 획득하기 위한 관리 동작)을 위해, S30 단계에서, 호스트(110)는 제3 KV 커맨드를 스토리지 장치(120)로 전송할 수 있다. 이 때, 제3 KV 커맨드는 GET[iK1]의 구조를 가질 수 있다. 제1 내부 키(iK1)에 대응하는 밸류는 스마트/헬스 정보를 획득하기 위한 관리 동작(예를 들어, Get Log Page)에 대한 커맨드와 대응될 수 있다. 제1 내부 키(iK1)에 대응하는 밸류는 내부 KV 페어(KVPR-int)에 저장될 수 있다.
즉, 특정 관리 동작을 수행하기 위해, 호스트(110)는 별도로 정의된 커맨드를 사용하지 않고, 사용자 데이터를 읽는데 사용되는 “GET”의 KV 커맨드 및 특정 관리 동작과 대응되는 내부 키(즉, 제1 내부 키(iK1))를 사용하여 특정 관리 동작을 수행할 수 있다.
S31 단계에서, 스토리지 장치(120)는 GET[iK1]에 응답하여, 특정 관리 동작에 대응하는 동작, 예를 들어, 스마트/헬스 정보 전송을 수행할 수 있다. 예를 들어, 스토리지 장치(120)는 내부 KV 페어(KVPR-int)로부터 GET[iK1]의 제1 내부 키(iK1)와 대응되는 정보(즉, 스마트/헬스 정보를 획득하기 위한 관리 동작에 대응하는 커맨드)를 확인하고, 확인된 정보와 대응되는 동작, 즉, 스마트/헬스 정보를 전송하는 동작을 수행할 수 있다.
다음으로, 다른 특정 관리 동작(예를 들어, 휘발성 쓰기 캐시 활성화를 설정하기 위한 관리 동작)을 위해, S40 단계에서, 호스트(110)는 제4 KV 커맨드를 스토리지 장치(120)로 전송할 수 있다. 이 때, 제4 KV 커맨드는 PUT[iK2, V2]의 구조를 가질 수 있다. 제2 내부 키(iK2)에 대응하는 밸류는 휘발성 쓰기 캐시 활성화 특징을 설정하기 위한 관리 동작(예를 들어, Set Feature)에 대한 커맨드와 대응될 수 있다. 제2 내부 키(iK2)에 대응하는 밸류는 내부 KV 페어(KVPR-int)에 저장될 수 있다.
스토리지 장치(120)는 PUT[iK2, V2]에 응답하여, 제2 내부 키(iK2)에 대응하는 관리 동작, 즉, 휘발성 쓰기 캐시 활성화 특징을 제2 밸류(V2)로 설정하는 동작을 수행할 수 있다.
상술된 바와 같이, 본 발명의 실시 예에 따른 스토리지 시스템(100)은 KV 커맨드(CMD_KV)를 기반으로, 스토리지 장치(120)에 대한 입출력 동작(I/O operation) 및 관리 동작을 수행할 수 있다.
예를 들어, 도 3a 및 도 3b를 참조하여 설명된 바와 같이, 블록 기반의 스토리지 시스템에서는, 입출력 동작을 위한 커맨드들 및 관리 동작을 위한 커맨드들이 독립적으로 또는 개별적으로 정의되어야 한다. 반면에, 본 발명의 실시 예에 따른 스토리지 시스템(100)은, 입출력 동작을 위한 커맨드들 및 관리 동작을 위한 커맨드들을 개별적으로 정의하지 않고, 통합된 KV 커맨드들(CMD_KV)를 사용하여 다양한 동작을 수행할 수 있다. 따라서, 호스트(110) 및 스토리지 장치(120) 사이의 인터페이스가 간소화될 수 있다. 뿐만 아니라, 호스트(110)의 애플리케이션 계층(111)이 스토리지 장치(120)를 직접 제어하거나 또는 최소한의 신호 변환(예를 들어, 물리 포트를 통한 신호 변환)만을 통해 스토리지 장치(120)를 제어할 수 있기 때문에, 호스트(110) 계층 구조가 간소화될 수 있다.
도 5는 도 1의 키 인덱스, 내부 KV 페어, 및 사용자 KV 페어를 설명하기 위한 도면이다. 설명의 편의를 위하여, 키 인덱스(IDX), 내부 KV 페어(KVPR-int), 및 사용자 KV 페어(KVPR-user)를 설명하는데 불필요한 구성 요소들은 생략된다. 도면의 간결성을 위하여, 키 인덱스(IDX), 내부 KV 페어(KVPR-int), 및 사용자 KV 페어(KVPR-user)의 일부 데이터 구조가 도 5에 도시되나 본 발명의 범위가 이에 한정되는 것은 아니다.
도 1 및 도 5를 참조하면, 키 인덱스(IDX)는 키 그룹 식별자(Key Group ID)에 대한 정보를 포함할 수 있다. 키 그룹 식별자(Key Group ID)는 키들의 특성을 구분하는데 사용될 수 있다. 예를 들어, 제1 내지 제k 내부 키들(iK1~iKk)은 스토리지 장치(120)의 내부에서 관리되는 키들일 수 있다. 즉, 제1 내지 제k 내부 키들(iK1~iKk)은 사용자 데이터와 무관하게, 스토리지 장치(120)에 대한 다양한 관리 동작들에 대응하는 키들일 수 있다. 또는, 제1 내지 제k 내부 키들(iK1~iKk)에 대응하는 밸류들은 내부 KV 페어(KVPR-int)에 저장될 수 있다. 제1 내지 제k 내부 키들(iK1~iKk)에 대하여, 제0 그룹(#0)의 키 그룹 식별자가 부여될 수 있다.
반면에, 제1 내지 제m 사용자 키들(uK1~uKm)은 불휘발성 메모리 장치(120)의 사용자 KV 페어(KVPR-user)에 포함된 사용자 데이터(UD1~UD4)에 대응하는 키들일 수 있다. 즉, 제1 내지 제m 사용자 키들(uK1~uKm)은 호스트(110)에 의해 관리되거나 또는 실제 사용자 데이터와 각각 대응되는 키들일 수 있다. 제1 내지 제m 사용자 키들(uK1~uKm)에 대하여, 제1 내지 제n 그룹(#1~#n)의 키 그룹 식별자들이 부여될 수 있다.
예시적인 실시 예에서, 호스트(110)로부터 수신된 KV 커맨드(CMD_KV)는 키 그룹 식별자 및 키 명칭에 대한 정보를 포함할 수 있다. 즉, 스토리지 컨트롤러(121)의 KV 관리자(121a)는 호스트(110)로부터 수신된 KV 커맨드(CMD_KV)의 키 그룹 식별자를 기반으로, KV 커맨드(CMD_KV)에 포함된 키 명칭에 대응하는 키가 내부 키인지 또는 사용자 키인지 판별할 수 있다. 다시 말해서, 복수의 키들(iK1~iKk, uK1~uKm)에 대하여, 내부 키 또는 사용자 키를 기준으로, 키 그룹 식별자가 다르게 부여됨으로써, 호스트(110)로부터 수신된 KV 커맨드의 키가 내부 키에 대응하는지 또는 사용자 키에 대응하는지 판별될 수 있다. 뿐만 아니라, 내부 키 및 사용자 키의 키 명칭이 서로 중복되더라도, 키 그룹 식별자를 통해 내부 키 및 사용자 키가 서로 구분될 수 있다.
이하에서, 설명의 편의 및 도면의 간결성을 위하여, 키, 내부 키, 또는 사용자 키 등의 용어 또는 구성들은 대응하는 키 그룹 식별자에 대한 정보를 포함하는 것으로 가정한다. 즉, 내부 키는 내부 키에 대응하는 키 그룹 식별자 및 내부 키에 대한 키 명칭의 정보를 포함할 수 있고, 사용자 키는 사용자 키에 대응하는 키 그룹 식별자 및 사용자 키에 대한 키 명칭의 정보를 포함할 수 있다. 그러나 본 발명의 범위가 이에 한정되는 것은 아니다. 예를 들어, 내부 키 및 사용자 키의 키 명칭이 중복되지 않도록 관리되는 경우, 키 그룹 식별자는 생략될 수 있다.
키 인덱스(IDX)는 키 명칭 및 위치에 대한 정보를 포함할 수 있다. 예를 들어, 키 인덱스(IDX)는 키 명칭들(예를 들어, iK1~iKk, uK1~uKm) 및 대응하는 위치(iLCT1~iLCTk, sLCT1~sLCTm)에 대한 정보를 포함수 있다. 즉, 제1 내부 위치(iLCT1)는 제1 내부 키(iK1)에 대응하는 밸류가 저장된 위치를 가리킬 수 있고, 제k 내부 위치(iLCTk)는 제k 내부 키(iKk)에 대응하는 밸류가 저장된 위치를 가리킬 수 있다. 제1 스토리지 위치(sLCT1)는 제1 사용자 키(uK1)와 대응되는 밸류가 저장된 위치를 가리킬 수 있고, 제m 스토리지 위치(sLCTm)는 제m 사용자 키(uKm)와 대응되는 밸류 저장된 위치를 가리킬 수 있다.
예시적인 실시 예에서, 제1 내지 제k 내부 위치들(iLCT1~iLCTk)은 메모리 장치(121c)에 대한 메모리 주소 또는 위치를 가리킬 수 있고, 제1 내지 제m 스토리지 위치들(sLCT1~sLCTm)은 불휘발성 메모리 장치(122)에 대한 메모리 주소, 물리적 주소, 또는 논리적 주소를 가리킬 수 있다.
내부 KV 페어(KVPR-int)는 제1 내지 제k 내부 키들(iK1~iKk) 각각에 대응하는 밸류(Value)를 포함할 수 있다. 예를 들어, 제1 내부 키(iK1)에 대응하는 밸류는 “식별자가 에러 정보(Error Information)으로 설정된 Get Log Page 커맨드”와 대응되는 정보일 수 있다. 제2 내부 키(iK2)에 대응하는 밸류는 “식별자가 스마트/헬스 정보(SMART/HEALTH information)으로 설정된 Get Log Page 커맨드”와 대응되는 정보일 수 있다. 마찬가지로, 제3 내지 제k 내부 키들(iK3~iKk) 각각에 대응하는 밸류들은 “식별자가 F/W Slot Information인 Get Log Page 커맨드,” “식별자가 Arbitration인 Get Features 커맨드,” “식별자가 Power management인 Get Features 커맨드,” “식별자가 LBA Range Type인 Get Features 커맨드,” 및 “식별자가 Volatile Write Cache인 Set Features 커맨드”와 대응되는 정보일 수 있다. 예시적인 실시 예에서, 내부 KV 페어(KVPR-int)는 스토리지 컨트롤러(121)에 포함된 메모리 장치(121c) 또는 스토리지 컨트롤러(121)와 별도로 구비된 버퍼 메모리(미도시)(예를 들어, DRAM 버퍼)에 저장될 수 있다.
KV 관리자(121a)는 내부 KV 페어(KVPR-int)의 정보를 기반으로 스토리지 장치(120)에 대한 다양한 관리 동작을 수행할 수 있다. 예를 들어, 호스트(110)로부터 GET[iK2]의 KV 커맨드(CMD_KV)가 수신된 경우, KV 관리자(121a)는 키 인덱스(IDX)를 기반으로, 제2 내부 키(iK2)에 대응하는 제2 내부 위치(iLCT2)를 확인하고, 내부 KV 페어(KVPR-int)로부터 제2 내부 위치(iLCT2)에 저장된 밸류(즉, 식별자가 SMART/HEALTH Information인 Get Log Page 커맨드)를 검출할 수 있다. KV 관리자(121a)는 검출된 밸류에 응답하여, 대응하는 동작(즉, SMART/HEALTH 정보를 출력하는 동작)을 수행할 수 있다.
비록 도 5에서, 내부 KV 페어(KVPR-int)가 일부 관리 커맨드들을 포함하는 것으로 도시되어 있으나, 본 발명의 범위가 이에 한정되는 것은 아니다. 내부 KV 페어(KVPR-int)는 Abort 커맨드, Asynchronous Event Request 커맨드, Create I/O Completion Queue 커맨드, Create I/O Submission Queue 커맨드, Delete I/O Completion Queue 커맨드, Delete I/O Submission Queue 커맨드, Doorbell Buffer Config 커맨드, Device Self-test 커맨드, Directive Receive 커맨드, Directive Send 커맨드, Firmware Commit 커맨드, Firmware Image Download 커맨드, Get Features 커맨드, Get Log Page 커맨드, Identify 커맨드, Keep Alive 커맨드, NVMe-MI Receive 커맨드, NVMe-MI Send 커맨드, Namespace Attachment 커맨드, Namespace Management 커맨드, Set Features 커맨드, Virtualization Management 커맨드, Format 커맨드, Sanitize 커맨드, Security Receive 커맨드, Security Send 커맨드, Get LBA Status 커맨드 등과 같은 다양한 관리 동작을 위한 관리 커맨드들(Admin Command) 또는 관리 커맨드들 각각에 대응하는 다양한 필드 값들에 대한 정보를 내부 키들 각각에 대한 밸류로서 포함할 수 있다.
사용자 KV 페어(KVPR-user)는 제1 내지 제k 사용자 키들(uK1~uKk) 각각에 대응하는 밸류(Value)를 포함할 수 있다. 예를 들어, 제1 사용자 키(uK1)에 대응하는 밸류는 제1 사용자 데이터(UD1)일 수 있고, 제2 사용자 키(uK2)에 대응하는 밸류는 제2 사용자 데이터(UD2)일 수 있다. 마찬가지로, 제3 내지 제m 사용자 키들(uK3~uKm) 각각에 대응하는 밸류들은 제3 내지 제m 사용자 데이터(UD3~UDm)일 수 있다. 사용자 KV 페어(KVPR-user)는 불휘발성 메모리 장치(122)에 저장될 수 있다.
호스트(110)로부터 사용자 키(uK)가 수신된 경우, KV 관리자(121a)는 키 인덱스(IDX)를 기반으로 수신된 사용자 키(uK)와 대응되는 밸류가 저장된 스토리지 위치를 결정하고, 결정된 스토리지 위치를 기반으로 사용자 KV 페어(KVPR-user)로부터 대응하는 밸류를 읽을 수 있다. 또는, 호스트(110)로부터 사용자 키(uK) 및 밸류가 수신된 경우, KV 관리자(121a)는 밸류를 불휘발성 메모리 장치(122)의 사용자 KV 페어(KVPR-user)에 저장하고, 밸류가 저장된 스토리지 위치 및 사용자 키를 기반으로 키 인덱스를 갱신할 수 있다.
도 6은 도 1의 스토리지 장치의 초기 동작을 예시적으로 보여주는 순서도이다. 도 7은 도 6의 순서도에 따른 초기 동작을 설명하기 위한 블록도이다. 설명의 편의를 위하여, 스토리지 장치(120)의 초기 동작을 설명하는데 불필요한 구성 요소들은 생략된다.
이하에서, 설명의 편의를 위하여, 중복되는 구성들에 대한 상세한 설명은 생략된다. 본 발명의 실시 예를 명확하게 설명하기 위하여, KV 관리자(121a)는 호스트(110)로부터의 키를 판별하는 동작 및 내부 KV 페어(KVPR-int)를 액세스하는 동작을 수행하고, 내부 제어 모듈(121d)은 스토리지 장치(120)에 대한 관리 동작을 수행하고, NVM 제어 모듈(121f)(즉, 도 2의 플래시 인터페이스 회로)은 불휘발성 메모리 장치(122)에 대한 제어 동작을 수행하는 것으로 가정한다. 그러나 본 발명의 범위가 이에 한정되는 것은 아니며, 본 발명의 실시 예에 따른 동작들은 KV 관리자(121a)에 의해 수행되거나 또는 스토리지 컨트롤러(121) 또는 스토리지 장치(120)에 포함된 다른 구성 요소들에 의해 수행될 수 있다.
도 1, 도 6, 및 도 7을 참조하면, S100 단계에서, 스토리지 장치(120)는 내부 KV 페어(KVPR-int)를 로드할 수 있다. 예를 들어, 앞서 설명된 바와 같이, 내부 KV 페어(KVPR-int)는 스토리지 장치(120)에서 수행되는 다양한 관리 동작들에 대응하는 정보 또는 내부 키와 대응되는 밸류를 포함할 수 있다. 도 7에 도시된 바와 같이, 내부 KV 페어(KVPR-int)는 불휘발성 메모리 장치(122)에 저장될 수 있다. 또는, 내부 KV 페어(KVPR-int)는 펌웨어 형태로 별도의 저장 공간에 저장될 수 있다. 스토리지 장치(120)의 초기 동작 또는 초기화 동작에서, 불휘발성 메모리 장치(120)에 저장된 내부 KV 페어(KVPR-int)가 스토리지 컨트롤러(121)의 메모리 장치(121c)로 로드될 수 있다.
도 6의 S101 단계에서, 스토리지 장치(120)는 키 인덱스(IDX)를 생성할 수 있다. 예를 들어, 도 5를 참조하여 설명된 바와 같이, 키 인덱스(IDX)는 복수의 키들 및 위치에 대한 정보를 포함할 수 있다. 스토리지 장치(120)는 로드된 내부 KV 페어(KVPR-int)의 밸류들에 대응하는 내부 키들 및 밸류들이 저장된 위치(즉, 메모리 장치(121c)에서의 위치)을 기반으로 키 인덱스(IDX)를 생성할 수 있다.
또는 도 7에 도시된 바와 같이, 키 인덱스(IDX)는 불휘발성 메모리 장치(122)에 저장될 수 있고, 불휘발성 메모리 장치(122)에 저장된 키 인덱스(IDX)는 메모리 장치(121c)로 로드될 수 있다. 예시적인 실시 예에서, 비록 도면에 도시되지는 않았으나, 불휘발성 메모리 장치(122)에 저장된 키 인덱스(IDX)는 불휘발성 메모리 장치(122)에 포함된 사용자 KV 페어(KVPR-user)의 밸류들의 위치들 및 사용자 키들에 대한 정보를 포함할 수 있다. 즉, 불휘발성 메모리 장치(122)에 저장된 키 인덱스(IDX)는 이전에 저장된 사용자 데이터에 대한 정보를 포함할 수 있다.
이후에, 도 6의 S102 단계에서, 스토리지 장치(120)는 호스트(110)로부터 KV 커맨드(예를 들어, LIST 커맨드)를 수신할 수 있다. 예를 들어, 도 7에 도시된 바와 같이, 호스트(110)는 제0 KV 커맨드(CMD_KV0)를 스토리지 장치(120)로 전송할 수 있다. 제0 KV 커맨드(CMD_KV0)는 LIST[iK1, iKk]의 커맨드 구조를 가질 수 있다. “LIST”의 커맨드는 특정 키들 사이의 밸류들을 검색하는데 사용되는 커맨드일 수 있다. 즉, 호스트(110)는 내부 키들(uK1~uKk)에 대응하는 밸류들을 검색하기 위해, 스토리지 장치(120)로 LIST[iK1~iKk]의 KV 커맨드를 전송할 수 있다.
도 6의 S103 단계에서, 스토리지 장치(120)는 호스트(110)로부터 KV 커맨드(예를 들어, LIST 커맨드)에 응답하여, 키 인덱스(IDX)를 기반으로, 내부 KV 페어(KVPR-int)에 대한 정보를 호스트(110)로 전송할 수 있다. 예를 들어, 도 7에 도시된 바와 같이, 스토리지 컨트롤러(121)의 KV 관리자(121a)는 제0 KV 커맨드(CMD_KV0), 즉, LIST[iK1,iKk]에 응답하여, 키 인덱스(IDX)를 기반으로 제1 내지 제k 내부 키들(iK1~iKk)에 대응하는 내부 위치들(iLCT)을 결정하고, 결정된 내부 위치들을 기반으로 내부 KV 페어(KVPR-int)로부터 대응하는 밸류들을 검출할 수 있다. 내부 제어 모듈(121d)은 KV 관리자(121d)의 제어에 따라, 검출된 밸류들을 내부 KV 페어(KVPR-int)로서 호스트(110)로 전송할 수 있다.
상술된 바와 같이, 본 발명의 실시 예에 따른 스토리지 장치(120)는 초기 동작에서, 미리 저장된 또는 미리 정해진 내부 KV 페어(KVPR-int)를 메모리 장치(121c)로 로드할 수 있다. 이 때, 호스트(110)는 스토리지 장치(120)에서 지원되는 관리 동작을 확인하기 위해, KV 커맨드(CMD_KV)(예를 들어, LIST 커맨드)를 사용하여 내부 KV 페어(KVPR-int)를 확인할 수 있다. 이후에, 호스트(110)는 확인된 내부 KV 페어(KVPR-int)를 기반으로 스토리지 장치(120)에 대한 다양한 관리 동작을 제어할 수 있다.
예시적인 실시 예에서, 내부 KV 페어(KVPR-int)에 대한 정보가 호스트(110) 및 스토리지 장치(120) 사이에서 사전에 결정되거나 또는 호스트(110) 및 스토리지 장치(120) 사이의 인터페이스 규약에 의해 미리 정의된 경우, 내부 KV 페어(KVPR-int)를 확인하는 동작은 생략될 수 있다.
예시적인 실시 예에서, 도 6 및 도 7을 참조하여 설명된 동작은 스토리지 시스템(100)의 초기화 동작에서 수행되거나 또는 스토리지 시스템(100)의 구동 중에 주기적으로 수행되거나 또는 별도의 요청에 의해 비주기적으로 수행될 수 있다.
도 8은 도 1의 스토리지 장치의 동작을 예시적으로 보여주는 순서도이다. 이하에서, 설명의 편의를 위하여, 중복된 구성에 대한 상세한 설명은 생략된다. 도 1 및 도 8을 참조하면, S110 단계에서, 스토리지 장치(120)는 호스트(110)로부터 KV 커맨드(CMD_KV)를 수신할 수 있다. KV 커맨드(CMD_KV)의 구조는 앞서 설명되었으므로, 이에 대한 상세한 설명은 생략된다.
S120 단계에서, 스토리지 장치(120)는 수신된 KV 커맨드(CMD_KV)에 포함된 키가 내부 키인지 판별할 수 있다. 예를 들어, 스토리지 컨트롤러(121)의 KV 관리자(121a)는 키 인덱스(IDX)를 기반으로, KV 커맨드(CMD_KV)의 키가 내부 키인지 판별할 수 있다.
KV 커맨드(CMD_KV)의 키가 내부 키인 경우, S130 단계에서, 스토리지 장치(120)는 내부 KV 페어(KVPR-int)를 기반으로, KV 커맨드(CMD_KV)에 대응하는 동작을 판별할 수 있다. 예를 들어, 앞서 설명된 바와 같이, 내부 KV 페어(KVPR-int)는 내부 키 각각에 대응하는 밸류를 포함할 수 있다. 내부 KV 페어(KVPR-int)에 포함된 밸류들은 스토리지 장치(120)의 다양한 관리 동작과 대응될 수 있다. 따라서, 스토리지 장치(120)는 KV 커맨드(CMD_KV)의 키(즉, 내부 키)와 대응되는 밸류를 기반으로, KV 커맨드(CMD_KV)에 대응하는 동작(예를 들어, 관리 동작)을 결정할 수 있다. S140 단계에서, 스토리지 장치(120)는 결정된 동작을 수행할 수 있다.
KV 커맨드(CMD_KV)의 키가 내부 키가 아닌 경우(예를 들어, 사용자 키인 경우), S150 단계에서, 스토리지 장치(120)는 사용자 KV 페어(KVPR-user)를 기반으로, KV 커맨드(CMD_KV)에 대응하는 동작을 수행할 수 있다. 예를 들어, 스토리지 장치(120)는 키 인덱스(IDX)를 기반으로, KV 커맨드(CMD_KV)의 키(예를 들어, 사용자 키)에 대응하는 밸류가 저장된 위치를 확인하고, 확인된 위치를 기반으로, 사용자 KV 페어(KVPR-user)로부터의 사용자 데이터를 호스트(110)로 전송할 수 있다. 또는, 스토리지 장치(120)는 KV 커맨드(CMD_KV)의 키(예를 들어, 사용자 키)에 대응하는 밸류를 사용자 KV 페어(KVPR-user)에 저장하고, 저장된 위치 및 KV 커맨드(CMD_KV)의 키(예를 들어, 사용자 키)를 기반으로, 키 인덱스(IDX)를 갱신할 수 있다.
도 9a 내지 도 9e는 도 8의 순서도에 따른 동작을 구체적으로 설명하기 위한 도면들이다. 설명의 편의를 위하여 중복 구성에 대한 상세한 설명은 생략된다. 또한, 설명의 편의를 위하여, 제1 내부 키(iK1)는 스마트/헬스 정보를 획득하기 위한 Get Log Page 커맨드와 대응되고, 제2 내부 키(iK2)는 휘발성 쓰기 캐시(VWC; Volatile Write Cache) 기능을 설정하기 위한 Set Features 커맨드와 대응되는 것으로 가정한다.
도 1 및 도 9a 내지 도 9e를 참조하면, 스토리지 시스템(100)은 호스트(110) 및 스토리지 장치(120)를 포함할 수 있다. 스토리지 장치(120)는 스토리지 컨트롤러(121) 및 불휘발성 메모리 장치(122)를 포함할 수 있다. 스토리지 컨트롤러(121)는 KV 관리자(121a), 메모리 장치(121c), 내부 제어 모듈(121d) 및 NVM 제어 모듈(121f)을 포함할 수 있다. 메모리 장치(121c)는 키 인덱스(IDX) 및 내부 KV 페어(KVPR-int)를 포함할 수 있다. 불휘발성 메모리 장치(122)는 사용자 KV 페어(KVPR-user)를 포함할 수 있다.
먼저 도 9a를 참조하여, 제1 관리 동작(예를 들어, 스마트/헬스 정보를 획득하기 위한 Get Log Page 동작)을 수행하는 구성이 설명된다. 도 9a에 도시된 바와 같이, 호스트(110)는, 제1 관리 동작을 수행하기 위해, 제1 KV 커맨드(CMD_KV1)를 스토리지 컨트롤러(121)로 전송할 수 있다. 제1 KV 커맨드(CMD_KV1)는 GET[iK1]의 데이터 구조 또는 커맨드 포맷을 가질 수 있다.
스토리지 컨트롤러(121)의 KV 관리자(121a)는, 키 인덱스(IDX)를 기반으로, 제1 KV 커맨드(CMD_KV1)의 제1 내부 키(iK1)가 내부 키임을 확인(예를 들어, 키 그룹 식별자를 기반으로 확인)할 수 있다. KV 관리자(121a)는 키 인덱스(IDX)를 기반으로, 제1 내부 키(iK1)와 대응되는 제1 내부 위치(iLCT1)를 확인하고, 제1 내부 위치(iLCT1)를 기반으로 내부 KV 페어(KVPR-int)로부터 제1 내부 키(iK1)와 대응되는 밸류(즉, Get Log Page - SMART/HEALTH)를 획득할 수 있다. KV 관리자(121a)는 획득된 밸류(즉, Get Log Page - SMART/HEALTH)를 기반으로, 내부 제어 모듈(121d)를 제어할 수 있다.
내부 제어 모듈(121d)은 KV 관리자(121a)의 제어에 따라, 획득된 밸류(즉, Get Log Page - SMART/HEALTH)에 대응하는 제1 관리 동작을 수행할 수 있다. 예를 들어, 내부 제어 모듈(121d)은 제1 관리 동작의 결과로서, 제1 장치 정보(DI1)를 호스트(110)로 전송할 수 있다. 예시적인 실시 예에서, 제1 장치 정보(DI1)는 스마트/헬스 정보일 수 있다.
다음으로, 도 9b를 참조하여, 제2 관리 동작(예를 들어, 휘발성 쓰기 캐시를 설정하기 위한 Set Features 동작)을 수행하는 구성이 설명된다. 도 9b에 도시된 바와 같이, 호스트(110)는, 제2 관리 동작을 수행하기 위해, 제2 KV 커맨드(CMD_KV2)를 스토리지 컨트롤러(121)로 전송할 수 있다. 제2 KV 커맨드(CMD_KV2)는 PUT[iK2, V1]의 데이터 구조 또는 커맨드 포맷을 가질 수 있다.
스토리지 컨트롤러(121)의 KV 관리자(121a)는, 키 인덱스(IDX)를 기반으로, 제2 KV 커맨드(CMD_KV2)의 제2 내부 키(iK2)가 내부 키임을 확인(예를 들어, 키 그룹 식별자를 기반으로 확인)할 수 있다. KV 관리자(121a)는 키 인덱스(IDX)를 기반으로, 제2 내부 키(iK2)와 대응되는 제2 내부 위치(iLCT2)를 확인하고, 제2 내부 위치(iLCT2)를 기반으로 내부 KV 페어(KVPR-int)로부터 제2 내부 키(iK2)와 대응되는 밸류(즉, Set Features - VWC)를 획득할 수 있다. KV 관리자(121a)는 획득된 밸류(즉, Set Features - VWC)를 기반으로, 내부 제어 모듈(121d)를 제어할 수 있다.
내부 제어 모듈(121d)은 KV 관리자(121a)의 제어에 따라, 획득된 밸류(즉, Set Features - VWC)에 대응하는 제2 관리 동작을 수행할 수 있다. 예를 들어, 내부 제어 모듈(121d)은 특징(FT)(또는 특징(FT)에 대한 정보가 저장된 레지스터) 중 휘발성 쓰기 캐시(VWC)과 관련된 정보를 제0 밸류에서 제1 밸류로 갱신(V0→할 수 있다. 이 때, 제1 밸류(V1)는 제2 KV 커맨드(CMD_KV2)에 포함된 밸류일 수 있다.
다음으로, 도 9c를 참조하여, 제1 사용자 데이터(UD1)에 대한 읽기 동작을 수행하는 구성이 설명된다. 도 9c에 도시된 바와 같이, 호스트(110)는, 제1 사용자 데이터(UD1)에 대한 읽기 동작을 수행하기 위해, 제3 KV 커맨드(CMD_KV3)를 스토리지 컨트롤러(121)로 전송할 수 있다. 제3 KV 커맨드(CMD_KV3)는 GET[uK1]의 데이터 구조 또는 커맨드 포맷을 가질 수 있다.
스토리지 컨트롤러(121)의 KV 관리자(121a)는, 키 인덱스(IDX)를 기반으로, 제3 KV 커맨드(CMD_KV3)의 제1 사용자 키(uK1)가 사용자 키임을 확인(예를 들어, 키 그룹 식별자를 기반으로 확인)할 수 있다. KV 관리자(121a)는 키 인덱스(IDX)를 기반으로, 제1 사용자 키(uK2)와 대응되는 제1 스토리지 위치(sLCT1)를 확인할 수 있다. KV 관리자(121a)는, 제1 스토리지 위치(sLCT2)를 기반으로 NVM 제어 모듈(121f)을 제어할 수 있다.
NVM 제어 모듈(121f)은 제1 스토리지 위치(sLCT2)를 기반으로 불휘발성 메모리 장치(120)의 KV 페어(KVPR-int)로부터 제1 사용자 키(uK1)와 대응되는 밸류(즉, 제1 사용자 데이터(UD1))를 읽고, 읽은 밸류(즉, 제1 사용자 데이터(UD1))를 호스트(110)로 전송할 수 있다.
다음으로, 도 9d를 참조하여, 제2 사용자 데이터(UD2)에 대한 쓰기 동작을 수행하는 구성이 설명된다. 도 9d에 도시된 바와 같이, 호스트(110)는, 제2 사용자 데이터(UD2)에 대한 쓰기 동작을 수행하기 위해, 제4 KV 커맨드(CMD_KV4)를 스토리지 컨트롤러(110)로 전송할 수 있다. 제4 KV 커맨드(CMD_KV4)는 PUT[uK2, V2]의 데이터 구조 또는 커맨드 포맷을 가질 수 있다.
스토리지 컨트롤러(121)의 KV 관리자(121a)는, 키 인덱스(IDX)를 기반으로, 제4 KV 커맨드(CMD_KV4)의 제2 사용자 키(uK2)가 사용자 키임을 확인(예를 들어, 키 그룹 식별자를 기반으로 확인)할 수 있다. KV 관리자(121a)는 키 인덱스(IDX)를 기반으로, 제4 KV 커맨드(CMD_KV4)의 제2 밸류(V2)가 저장될 스토리지 위치(예를 들어, 제2 스토리지 위치(sLCT2))를 결정 또는 할당할 수 있다. KV 관리자(121a)는 할당된 스토리지 위치(sLCT2)를 기반으로 NVM 제어 모듈(121f)을 제어할 수 있다.
NVM 제어 모듈(121f)은 KV 관리자(121a)의 제어에 따라, 불휘발성 메모리 장치(122)의 사용자 KV 페어(KVPR-user)에서, 할당된 스토리지 위치(sLCT2)와 대응되는 영역에 제2 밸류(V2)를 제2 사용자 데이터(UD2)로서 저장할 수 있다. 다시 말해서, NVM 제어 모듈(121f)은 제2 사용자 키(uK2)와 대응되는 제2 밸류(V2)를 제2 사용자 데이터(UD2)로서 사용자 KV 페어(KVPR-user)에 저장할 수 있다.
예시적인 실시 예에서, 쓰기 동작이 완료된 후, 또는 쓰기 동작이 수행되는 도중에, KV 관리자(121a)는 할당된 스토리지 위치(sLCT2) 및 제2 사용자 키(uK2)를 기반으로 키 인덱스(IDX)를 갱신할 수 있다. 즉, 갱신된 키 인덱스(IDXa)는 제2 사용자 키(uK2)에 대한 정보 및 할당된 스토리지 위치(sLCT2)에 대한 정보를 포함할 것이다.
다음으로, 도 9e를 참조하여, 제2 사용자 데이터(UD2)에 대한 삭제 동작을 수행하는 구성이 설명된다. 도 9e에 도시된 바와 같이, 호스트(110)는 제2 사용자 데이터(UD2)에 대한 삭제 동작을 수행하기 위해, 제5 KV 커맨드(CMD_KV5)를 스토리지 컨트롤러(121)로 전송할 수 있다. 제5 KV 커맨드(CMD_KV5)는 DEL[uK2]의 데이터 구조 또는 데이터 포맷을 가질 수 있다.
스토리지 컨트롤러(121)의 KV 관리자(121a)는, 키 인덱스(IDX)를 기반으로, 제4 KV 커맨드(CMD_KV4)의 제2 사용자 키(uK2)가 사용자 키임을 확인(예를 들어, 키 그룹 식별자를 기반으로 확인)할 수 있다. KV 관리자(121a)는 키 인덱스(IDX)를 기반으로, 제2 사용자 키(uK2)와 대응되는 제2 스토리지 위치(sLCT2)를 확인할 수 있다. KV 관리자(121a)는, 제2 스토리지 위치(sLCT2)를 기반으로 NVM 제어 모듈(121f)을 제어할 수 있다.
NVM 제어 모듈(121f)은 KV 관리자(121a)의 제어에 따라, 사용자 KV 페어(KVPR-user)로부터 제2 사용자 키(uK2)와 대응되는 제2 사용자 데이터(UD2)를 삭제할 수 있다. 예시적인 실시 예에서, NVM 제어 모듈(121f)은 KV 관리자(121a)의 제어에 따라, 제2 사용자 데이터(UD2)를 물리적으로 삭제할 수 있다. 또는, NVM 제어 모듈(121f)은 KV 관리자(121a)의 제어에 따라, 제2 사용자 데이터(UD2)를 논리적으로 삭제(예를 들어, 제2 사용자 데이터(UD2)를 무효화(invalid)시킴.)하고, 이후에, 특정 조건(예를 들어, 가비지 콜렉션 등)에서 제2 사용자 데이터(UD2)를 물리적으로 삭제할 수 있다.
KV 관리자(121a)는 제2 사용자 데이터(UD2)가 물리적 또는 논리적으로 삭제된 이후에, 키 인덱스(IDX)를 갱신할 수 있다. 즉, 갱신된 키 인덱스(IDXb)는 제2 사용자 데이터(UD2)와 대응되는 제2 사용자 키(uK2)에 대한 정보를 포함하지 않을 수 있다. 또는, 갱신된 키 인덱스(IDXb)는 제2 사용자 키(uK2)에 대한 무효화 정보를 포함할 수 있다.
상술된 바와 같이, 본 발명의 실시 예에 따른 스토리지 시스템(100)은 KV 커맨드를 기반으로 다양한 입출력 동작 및 다양한 관리 동작을 수행할 수 있다. 예를 들어, 도 9a 및 도 9c를 참조하여 설명된 바와 같이, 동일한 타입의 KV 커맨드, 즉, GET 커맨드를 사용하여, 제1 관리 동작 및 읽기 동작이 수행될 수 있다. 이 때, 제1 관리 동작 및 읽기 동작에 대한 KV 커맨드의 타입은 서로 동일하나, KV 커맨드에 포함된 키를 변경함으로써, 관리 동작 또는 읽기 동작이 수행될 수 있다. 또는, 도 9b 및 도 9d를 참조하여 설명된 바와 같이, 동일한 타입의 KV 커맨드, 즉, PUT 커맨드를 사용하여, 제2 관리 동작 및 쓰기 동작이 수행될 수 있다. 이 때, 제2 관리 동작 및 쓰기 동작에 대한 KV 커맨드의 타입은 서로 동일하나, KV 커맨드에 포함된 키를 변경함으로써, 관리 동작 또는 쓰기 동작이 수행될 수 있다. 다시 말해서, 읽기 동작 또는 쓰기 동작을 위한 KV 커맨드가 다른 관리 동작들을 위해 사용될 수 있다.
예시적인 실시 예에서, KV 커맨드의 타입이 동일하다는 것은 KV 커맨드의 특정 필드의 값들이 동일하다는 것을 의미할 수 있다. 예를 들어, KV 커맨드의 타입이 동일하다는 것은 KV 커맨드의 동작 코드(OpCode)의 필드들이 서로 동일한 것을 의미할 수 있다. 또는 KV 커맨드의 타입이 동일하다는 것은 KV 커맨드의 커맨드 헤더들이 서로 동일한 것을 의미할 수 있다. 그러나 본 발명의 범위가 이에 한정되는 것은 아니다.
즉, 본 발명의 실시 예에 따르면, 호스트 및 스토리지 장치 사이에서 정의된 커맨드 포맷 또는 커맨드 타입의 개수를 최소화하면서, 스토리지 장치에 대한 다양한 동작들이 지원될 수 있다.
도 10은 도 1의 스토리지 시스템의 동작을 예시적으로 보여주는 순서도이다. 도 10을 참조하여, 호스트(110)가 내부 KV 페어(KVPR-int)를 갱신하고, 갱신된 내부 KV 페어(KVPR-int)를 기반으로 관리 동작을 수행하는 구성이 설명된다. 설명의 편의를 위하여, 중복되는 구성들에 대한 상세한 설명은 생략된다.
도 1 및 도 10을 참조하면, S211 단계에서, 호스트(110)는 제1 KV 커맨드(CMD_KV1)를 스토리지 장치(120)로 전송할 수 있다. 이 때, 제1 KV 커맨드(CMD_KV1)는 PUT[iK1, V1]의 데이터 구조 또는 커맨드 포맷을 가질 수 있다.
S121 단계에서, 스토리지 장치(120)는 제1 내부 키(iK1)에 대응하는 필드를 제1 밸류(V1)로 설정할 수 있다. 예를 들어, 스토리지 장치(120)는 내부 KV 페어(KVPR-int)에서, 제1 내부 키(iK1)와 대응되는 필드를 제1 밸류(V1)로 설정하거나 또는 갱신할 수 있다.
S213 단계에서, 스토리지 장치(120)는 제2 KV 커맨드(CMD_KV2)를 스토리지 장치(120)로 전송할 수 있다. 제2 KV 커맨드(CMD_KV2)는 GET[iK1]의 데이터 구조 또는 커맨드 포맷을 가질 수 있다.
S214 단계에서, 스토리지 장치(120)는 제1 내부 키(iK1) 및 제1 밸류(V1)에 대응하는 제1 동작을 수행할 수 있다. 예를 들어, S211 단계 및 S212 단계의 동작을 통해 내부 KV 페어(KVPR-int)에서, 제1 내부 키(iK1)에 대응하는 필드는 제1 밸류(V1)로 설정된다. 즉, S213 단계를 통해 GET[iK1]의 구조를 갖는 제2 KV 커맨드(CMD_KV2)가 수신된 경우, 스토리지 장치(120)는 제1 내부 키(iK1) 및 제1 밸류(V1)에 대응하는 동작을 수행할 수 있다. S214 단계의 동작은 이하의 도 11a 내지 도 11e를 참조하여 더욱 상세하게 설명된다.
S215 단계에서, 스토리지 장치(120)는 제1 동작의 결과로서, 제1 장치 정보(DI1)를 호스트(110)로 전송할 수 있다. 예를 들어, 제1 키(iK1)에 대응하는 정보가 Get Log Page 커맨드와 대응되고, 제1 밸류(V1)가 스마트/헬스 정보와 대응되는 경우, 제1 장치 정보(DI1)는 스마트/헬스 정보일 수 있다. S215 계의 동작은 이하의 도 11a 내지 도 11e를 참조하여 더욱 상세하게 설명된다.
다음으로, 호스트(110) 및 스토리지 장치(120)는 S221 단계 내지 S225 단계의 동작들을 수행할 수 있다. S221 단계 내지 S225 단계의 동작들은 밸류가 제2 밸류(V2)인 점, 및 장치 정보가 제2 장치 정보(DI2)인 점만 제외하면, S211 단계 내지 S215 단계의 동작들과 유사하므로, 이에 대한 상세한 설명은 생략된다.
상술된 바와 같이, 호스트(110)는 PUT 타입의 KV 커맨드를 사용하여, 특정 내부 키와 대응되는 필드를 특정 관리 동작과 대응되는 값으로 설정하고, 이후에, 특정 내부 키를 포함하는 GET 타입의 KV 커맨드를 사용하여, 특정 관리 동작을 수행할 수 있다. 즉, 호스트(110)에 의해 내부 KV 페어(KVPR-int)가 갱신될 수 있으며, 호스트(110)는 갱신된 내부 KV 페어를 기반으로 다양한 관리 동작을 수행할 수 있다.
도 11a 내지 도 11e는 도 10의 순서도에 따른 동작을 설명하기 위한 도면들이다. 설명의 편의를 위하여, 중복되는 구성들에 대한 상세한 설명은 생략된다. 먼저, 도 1 및 도 11a를 참조하면, 키 인덱스(IDX)는 내부 키들(iK1~iK3)에 대한 정보 및 내부 위치들(iLCT1~iLCT3)에 대한 정보를 포함할 수 있다. 내부 KV 페어(KVPR-int)는 내부 키들(iK1~iK3)에 대한 밸류들을 포함할 수 있다. 이 때, 도 5를 참조하여 설명된 바와 달리, 도 11a의 내부 KV 페어(KVPR-int)에 포함된 밸류들 각각에서 일부 필드들(예를 들어, 식별자(Identifier))은 정의되지 않은 값일 수 있다. 즉, 제1 내부 키(iK1)에 대응하는 밸류는 Get Log Page 커맨드와 대응하는 정보를 포함하되, 식별자(Identifier)와 관련된 정보를 포함하지 않을 수 있다. 마찬가지로, 제2 및 제3 내부 키들(iK2, iK3) 각각에 대응하는 밸류들은 Get Features 커맨드 및 Set Features 커맨드와 대응하는 정보를 포함하되, 식별자(Identifier)와 관련된 정보를 포함하지 않을 수 있다. 그러나, 도 11a에 도시된 키 인덱스(IDX) 및 내부 KV 페 어(KVPR-int)는 예시적인 것이며, 본 발명의 범위가 이에 한정되는 것은 아니다. 예를 들어, 내부 KV 페어(KVPR-int)는 다른 다양한 관리 동작을 지원하는 다양한 커맨드들 또는 커맨드 타입들을 밸류로서 더 포함할 수 있다.
예시적인 실시 예에서, 호스트(110)는 도 10을 참조하여 설명된 바와 같이, PUT 타입의 KV 커맨드를 사용하여 내부 KV 페어(KVPR-int)의 특정 필드들(예를 들어, 식별자(Identifier))를 설정함으로써, 내부 KV 페어(KVPR-int)를 갱신할 수 있다. 호스트(110)는 갱신된 내부 KV 페어(KVPR-int)를 기반으로 관리 동작을 수행할 수 있다.
도 1 및 도 10 내지 도 11e를 참조하면, 스토리지 장치(120)는 스토리지 컨트롤러(121) 및 불휘발성 메모리 장치(122)를 포함할 수 있다. 스토리지 컨트롤러(121)는 KV 관리자(121a), 메모리 장치(121c), 내부 제어 모듈(121d) 및 NVM 제어 모듈(121f)을 포함할 수 있다. 메모리 장치(121c)는 키 인덱스(IDX) 및 내부 KV 페어(KVPR-int)를 포함할 수 있다. 설명의 편의를 위하여, 내부 KV 페어(KVPR-int)는 제1 및 제2 내부 키들(iK1, iK2)에 대응하는 밸류로서 Get Log Page 커맨드 및 Get Features 커맨드에 대한 정보를 포함하는 것으로 가정한다.
도 11b 및 도 11c를 참조하여, 제1 내부 키(iK1)를 사용한 SMART/HEALTH 정보 획득 동작이 설명된다. 도 11b에 도시된 바와 같이, 호스트(110)는 제1 KV 커맨드(CMD_KV1)를 스토리지 컨트롤러(121)로 전송할 수 있다. 제1 KV 커맨드(CMD_KV1)는 PUT[iK1, V1]의 데이터 구조 또는 커맨드 포맷을 가질 수 있다.
KV 관리자(121a)는 키 인덱스(IDX)를 기반으로, 제1 KV 커맨드(CMD_KV1)의 제1 내부 키(iK1)가 내부 키임을 확인할 수 있다. KV 관리자(121a)는 키 인덱스(IDX)를 기반으로, 제1 내부 키(iK1)에 대응하는 밸류가 저장된 제1 내부 위치(iLCT1)를 확인할 수 있다. KV 관리자(121a)는 제1 내부 위치(iLCT1)에서, 특정 필드(예를 들어, 식별자(Identifier))를 제1 밸류(V1)로 설정할 수 있다. 이 때, 제1 밸류(V1)는 SMART/HEALTH 정보에 대응하는 식별자를 가리킬 수 있다.
이후에, 도 11c에 도시된 바와 같이, 호스트(110)는 제2 KV 커맨드(CMD_KV2)를 스토리지 컨트롤러(121)로 전송할 수 있다. 제2 KV 커맨드(CMD_KV2)는 GET[iK1]의 데이터 구조 또는 커맨드 포맷을 가질 수 있다. KV 관리자(121a)는 제2 KV 커맨드(CMD_KV2)에 응답하여, 제1 내부 키(iK1)에 대응하는 밸류(즉, Get Log Page - SMART/HEALTH)를 기반으로, 내부 제어 모듈(121d)을 제어하고, 내부 제어 모듈(121d)은 제1 장치 정보(DI1)를 출력할 수 있다. 도 11c의 동작은 제1 내부 키(iK1)에 대응하는 특정 필드가 추가 설정된다는 점만 제외하면, 도 9a의 동작과 유사하므로, 이에 대한 상세한 설명은 생략된다.
다음으로, 도 11d 및 도 11e를 참조하여, 제1 내부 키(iK1)를 사용한 F/W Slot 정보 획득 동작이 설명된다. 도 11c에 도시된 바와 같이, 호스트(110)는 제3 KV 커맨드(CMD_KV3)를 스토리지 컨트롤러(121)로 전송할 수 있다. 제3 KV 커맨드(CMD_KV3)는 PUT[iK1, V2]의 데이터 구조 또는 커맨드 포맷을 가질 수 있다.
KV 관리자(121a)는 키 인덱스(IDX)를 기반으로, 제3 KV 커맨드(CMD_KV3)의 제1 내부 키(iK1)가 내부 키임을 확인할 수 있다. KV 관리자(121a)는 키 인덱스(IDX)를 기반으로, 제1 내부 키(iK1)에 대응하는 밸류가 저장된 제1 내부 위치(iLCT1)를 확인할 수 있다. KV 관리자(121a)는 제1 내부 위치(iLCT1)에서, 특정 필드(예를 들어, 식별자(Identifier))를 제2 밸류(V1)로 설정할 수 있다. 이 때, 제2 밸류(V2)는 F/W Slot 정보에 대응하는 식별자를 가리킬 수 있다.
이후에, 도 11e에 도시된 바와 같이, 호스트(110)는 제2 KV 커맨드(CMD_KV2)를 스토리지 컨트롤러(121)로 전송할 수 있다. 제2 KV 커맨드(CMD_KV2)는 GET[iK1]의 데이터 구조 또는 커맨드 포맷을 가질 수 있다. KV 관리자(121a)는 제2 KV 커맨드(CMD_KV2)에 응답하여, 제1 내부 키(iK1)에 대응하는 밸류(즉, Get Log Page - F/W Slot)를 기반으로, 내부 제어 모듈(121d)을 제어하고, 내부 제어 모듈(121d)은 제2 장치 정보(DI2)를 출력할 수 있다.
상술된 바와 같이, 특정 내부 키에 대하여 이전에 설정된 밸류에 따라, 동일한 KV 커맨드(예를 들어, GET[iK1])에 대하여, 다른 관리 동작이 수행될 수 있다. 즉, 호스트(110)는 PUT 타입의 KV 커맨드를 사용하여 내부 KV 페어(KVPR-int)를 갱신할 수 있고, 갱신된 내부 KV 페어를 사용하여 다양한 관리 동작을 수행할 수 있다. 따라서, 다양한 관리 동작들 각각에 대한 별도의 커맨드 정의가 불필요하기 때문에, 호스트(110) 및 스토리지 장치(120) 사이의 인터페이스가 간결해질 수 있다. 따라서, 향상된 성능 및 감소된 비용을 갖는 스토리지 시스템이 제공된다.
도 12는 도 1의 스토리지 시스템의 동작을 예시적으로 보여주는 순서도이다. 설명의 편의를 위하여, 중복되는 구성들에 대한 상세한 설명은 생략된다. 도 1 및 도 12를 참조하면, S310 단계에서, 호스트(110)는 제1 KV 커맨드(CMD_KV1)를 스토리지 장치(120)로 전송할 수 있다. 제1 KV 커맨드(CMD_KV1)는 PUT[iK_n, V_n]의 데이터 구조 및 커맨드 포맷을 가질 수 있다. 이 때, iK_n은 새로운 내부 키에 대한 정보를 가리키고, V_n은 새로운 내부 키에 대응하는 밸류를 가키리 수 있다.
즉, 호스트(110)는 스토리지 장치(120)의 내부 KV 페어(KVPR-int)에 의해 정의되지 않은 관리 동작을 수행하기 위해, 새로운 내부 키(iK_n) 및 대응하는 밸류(V_n)를 포함하는 제1 KV 커맨드(CMD_KV1)를 스토리지 장치(120)로 전송할 수 있다.
S320 단계에서, 스토리지 장치(120)는 제1 KV 커맨드(CMD_KV1)에 응답하여, 새로운 내부 키(iK_n) 및 대응하는 밸류(V_n)를 기반으로, 내부 KV 페어(KVPR-int) 및 키 인덱스(IDX)를 갱신할 수 있다. 예를 들어, 스토리지 컨트롤러(121)는 새로운 내부 키(iK_n)에 대한 새로운 내부 위치(iLCT_n)를 결정하고, 새로운 내부 위치(iLCT_n)에 대응하는 밸류(V_n)를 저장할 수 있다. 스토리지 컨트롤러(121)는 새로운 내부 위치(iLCT_n) 및 새로운 내부 키(iK_n)를 키 인덱스(IDX)에 등록하거나 또는 갱신할 수 있다.
S330 단계에서, 호스트(110)는 제2 KV 커맨드(CMD_KV2)를 스토리지 장치(120)로 전송할 수 있다. 제2 KV 커맨드(CMD_KV2)는 GET[iK_n]의 데이터 구조 또는 데이터 포맷을 가질 수 있다.
S340 단계에서, 스토리지 장치(120)는 제2 KV 커맨드(CMD_KV2)에 응답하여, 새로운 내부 키(iK_n) 및 대응하는 밸류(V_n)에 대응하는 동작을 수행할 수 있다. S350 단계에서, 스토리지 장치(120)는 S340 단계의 동작의 결과로서 장치 정보(DI_n)를 호스트(110)로 전송할 수 있다. S340 단계 및 S350 단계의 동작들은 호스트(110)에 의해 내부 키(iK_n) 및 밸류(V_n)가 새로 정의된다는 점을 제외하면, 앞서 설명된 구성들과 유사하므로, 이에 대한 상세한 설명은 생략된다.
도 13은 도 1의 스토리지 장치의 동작을 예시적으로 보여주는 순서도이다. 도 1 및 도 13을 참조하면, S410 단계에서, 스토리지 장치(120)는 펌웨어 파일을 다운로드할 수 있다. 예를 들어, 스토리지 장치(120)는 호스트(110)와 연결된 네트워크를 통해 제조사로부터 제공된 펌웨어 파일을 다운로드할 수 있다. 또는 스토리지 장치(120)는 별도의 통신 채널을 통해 펌웨어 파일을 다운로드할 수 있다.
S420 단계에서, 스토리지 장치(120)는 펌웨어 파일을 기반으로 펌웨어 업데이트를 수행하여 내부 KV 페어(KVPR-int)를 갱신할 수 있다. 예를 들어, 앞서 설명된 바와 같이, 내부 KV 페어(KVPR-int)는 스토리지 장치(120) 내부에서 관리될 수 있으며, 미리 정해진 정보일 수 있다. 즉, 내부 KV 페어(KVPR-int)는 펌웨어 형태로 제공될 수 있다. 스토리지 장치(120)에 새로운 관리 기능이 추가되는 경우, 제조사로부터 제공된 펌웨어 업데이트를 통해 내부 KV 페어(KVPR-int)가 갱신될 수 있다.
예시적인 실시 예에서, 특정 인터페이스 규약을 지원하는 현재의 통신 채널은 새로운 기능이 추가된 새로운 인터페이스 규약을 만족하지 못할 수 있다. 반면에, 상술된 본 발명의 실시 예에 따르면, 호스트(110) 및 스토리지 장치(120) 사이에 새로운 기능이 추가되더라도, 내부 KV 페어(KVPR-int)에 대한 펌웨어 업데이트를 통해 추가된 새로운 기능이 지원될 수 있다. 따라서, 감소된 비용을 갖는 스토리지 시스템이 제공된다.
도 14는 도 1의 스토리지 장치의 동작을 예시적으로 보여주는 순서도이다. 도 14를 참조하여, 스토리지 장치(120)에서 키-밸류 페어를 사용하여 동작 로그를 관리하는 구성이 설명된다. 간결한 설명을 위하여, 중복되는 구성들에 대한 상세한 설명은 생략된다.
도 1 및 도 14를 참조하면, S510 단계에서, 스토리지 장치(120)는 호스트(110)로부터 입출력 커맨드를 수신할 수 있다. 예시적인 실시 예에서, 입출력 커맨드는 사용자 키(uK)에 대한 KV 커맨드(CMD_KV)일 수 있다. 즉, 입출력 커맨드는 GET[uK], PUT[uK, V], DEL[uK] 등의 데이터 구조 또는 커맨드 포맷을 가질 수 있다.
S520 단계에서, 스토리지 장치(120)는 입출력 커맨드에 대응하는 동작을 수행할 수 있다. 예를 들어, 입출력 커맨드가 GET[uK]의 KV 커맨드인 경우, 스토리지 장치(120)는 사용자 키(uK)에 대응하는 사용자 데이터를 호스트(110)로 전송할 수 있다. 또는 입출력 커맨드가 PUT[uK, V]의 KV 커맨드인 경우, 스토리지 장치(120)는 밸류(V)를 불휘발성 메모리 장치(120)의 사용자 KV 페어(KVPR-user)에 저장하고, 키 인덱스(IDX)를 갱신할 수 있다. 또는 입출력 커맨드가 DEL[uK]의 KV 커맨드인 경우, 스토리지 장치(120)는 사용자 키(uK)에 대응하는 밸류 또는 사용자 데이터를 사용자 KV 페어(KVPR-user)에서 삭제 또는 제거할 수 있다.
S530 단계에서, 스토리지 장치(120)는 로그 버퍼에 동작 로그 엔트리를 기록할 수 있다. 예를 들어, 동작 로그 엔트리는 S520 단계에서 수행된 동작에 대한 정보 또는 개략적인 정보를 가리킬 수 있다. 스토리지 장치(120)는 메모리 장치(121c)(도 2 참조)의 일부 영역인 로그 버퍼 또는 별도의 로그 버퍼에, 수행된 동작에 대응하는 동작 로그 엔트리를 기록할 수 있다.
S540 단계에서, 스토리지 장치(120)는 로그 버퍼가 가득 찼는지 판별할 수 있다. 예를 들어, 스토리지 장치(120)는 미리 할당된 로그 버퍼에 동작 로그 엔트리가 가득 찼는지 판별할 수 있다. 예시적인 실시 예에서, 스토리지 장치(120)는 로그 버퍼에 기록된 동작 로그들의 전체 크기가 기준 값 이상인지 판별할 수 있다.
로그 버퍼에 동작 로그 엔트리가 가득 차지 않은 경우, 즉, 로그 버퍼의 남은 용량이 존재하는 경우, 스토리지 장치(120)는 S510 단계의 동작을 계속한다.
로그 버퍼에 동작 로그 엔트리가 가득 찬 경우, 즉, 로그 버퍼의 남은 용량이 존재하지 않는 경우, S550 단계에서, 스토리지 장치(120)는 로그 버퍼에 저장된 로그 엔트리들을 기반으로 로그 데이터(LD)를 생성할 수 있다. 예를 들어, 로그 데이터(LD)는 로그 버퍼에 저장된 복수의 로그 엔트리들의 조합일 수 있다.
S560 단계에서, 스토리지 장치(120)는 생성된 로그 데이터(LD)를 불휘발성 메모리 장치(120)에 저장할 수 있다. 예시적인 실시 예에서, 로그 데이터(LD)는 불휘발성 메모리 장치(120)의 동작 로그 KV 페어(KVPR-op)(도 15e를 참조하여 설명됨.)에 저장될 수 있다. 예시적인 실시 예에서, 로그 데이터(LD)가 불휘발성 메모리 장치(120)에 저장된 이후에, 로그 버퍼가 리셋 또는 해제(release)될 수 있다.
S570 단계에서, 스토리지 장치(120)는 저장된 로그 데이터(LD)를 기반으로 키 인덱스(IDX)를 갱신할 수 있다. 예를 들어, 스토리지 장치(120)는 로그 데이터(LD)에 대한 동작 로그 키(oK; operation log key)를 할당하고, 할당된 동작 로그 키 및 로그 데이터가 저장된 스토리지 위치를 기반으로 키 인덱스(IDX)를 갱신할 수 있다.
즉, 상술된 바와 같이, 본 발명의 실시 예에 따른 스토리지 장치(120)는 호스트(110)로부터의 별도의 명시적인 커맨드 또는 요청없이 내부에서 수행되는 동작에 대한 동작 로그를 KV 페어로 관리할 수 있다. 예시적인 실시 예에서, 호스트(110)로부터의 LIST 타입의 KV 커맨드를 통해, 동작 로그 키에 대한 정보가 호스트(110)로 제공될 수 있다. 호스트(110)는 동작 로그 키에 대한 정보를 기반으로, KV 커맨드(예를 들어, GET[oK] 타입의 KV 커맨드)를 사용하여 스토리지 장치(120)로부터 로그 데이터(LD)를 읽을 수 있다.
도 15a 내지 도 15e는 도 14의 순서도에 따른 동작을 설명하기 위한 도면들이다. 설명의 편의를 위하여, 중복되는 구성들에 대한 상세한 설명은 생략된다. 도 14의 순서도에 따른 동작 로그를 KV 페어로 관리하는 방안을 설명하는데 불필요한 구성 요소들은 생략된다. 그러나 본 발명의 범위가 이에 한정되는 것은 아니며, 도 15a 내지 도 15e를 참조하여 설명된 스토리지 시스템(100)은 도 1 내지 도 13을 참조하여 설명된 동작 방법(내부 키를 사용한 관리 동작)을 수행하도록 구성될 수 있다.
도 1, 도 14, 및 도 15a 내지 도 15e를 참조하면, 스토리지 시스템(100)은 호스트(110) 및 스토리지 장치(120)를 포함할 수 있다. 스토리지 장치(120)는 스토리지 컨트롤러(121) 및 불휘발성 메모리 장치(122)를 포함할 수 있다. 스토리지 컨트롤러(121)는 KV 관리자(121a), 메모리 장치(121c) 및 NVM 제어 모듈(121f)을 포함할 수 있다. 메모리 장치(121c)는 키 인덱스(IDX) 및 로그 버퍼(LB)를 포함할 수 있다. 불휘발성 메모리 장치(122)는 사용자 KV 페어(KVPR-user)를 포함할 수 있다. 예시적인 실시 예에서, 로그 버퍼(LB)는 메모리 장치(121c)의 공간 중 동작 로그를 기록하기 위해 할당된 공간을 가리킬 수 있다. 예시적인 실시 예에서, 로그 버퍼(LB)는 별도의 메모리로 구현될 수 있다.
도 15a에 도시된 바와 같이, 호스트(110)는 PUT[uK1, V1]의 구조를 갖는 제1 KV 커맨드(CMD_KV1)를 스토리지 컨트롤러(121)로 전송할 수 있다. KV 관리자(121a)는 제1 KV 커맨드(CMD_KV1)를 기반으로, NVM 제어 모듈(121f)를 제어할 수 있다. 제1 NVM 제어 모듈(121f)은 제1 사용자 키(uK1)와 대응되는 제1 밸류(V1)를제1 사용자 데이터(UD1)로서 사용자 KV 페어(KVPR-user)에 저장할 수 있다. KV 관리자(121a)는 제1 사용자 키(uK1)에 대응하는 제1 밸류(V1)가 저장된 제1 스토리지 위치(sLCT1)를 기반으로 키 인덱스(IDX)를 갱신할 수 있다.
NVM 제어 모듈(121f)은 제1 KV 커맨드(CMD_KV1)에 대응하는 동작(즉, 제1 사용자 키(uK1)에 대응하는 제1 밸류(V1)를 저장하는 동작)에 대한 정보{PUT.uK1}를 로그 버퍼(LB)에 기록할 수 있다.
다음으로, 도 15b에 도시된 바와 같이, 호스트(110)는 PUT[uK2, V2]의 구조를 갖는 제2 KV 커맨드(CMD_KV2)를 스토리지 컨트롤러(121)로 전송할 수 있다. 앞서 설명된 바와 유사하게, NVM 제어 모듈(121f)은 제2 사용자 키(uK2)에 대응하는 제2 밸류(V2)를 제2 사용자 데이터(UD2)로서 사용자 KV 페어(KVPR-user)에 저장하고, 제2 KV 커맨드(CMD_KV2)에 대응하는 동작과 관련된 정보{PUT.uK2}를 로그 버퍼(LB)에 기록할 수 있다. KV 관리자(121a)는 제2 밸류(V2)가 저장된 제2 스토리지 위치(sLCT2) 및 제2 사용자 키(uK2)를 기반으로 키 인덱스(IDX)를 갱신할 수 있다.
다음으로, 도 15c에 도시된 바와 같이, 호스트(110)는 PUT[uK2, V3]의 구조를 갖는 제3 KV 커맨드(CMD_KV3)를 스토리지 컨트롤러(121)로 전송할 수 있다. KV 관리자(121f)는 키 인덱스(IDX)를 기반으로 제2 사용자 키(uK2)에 대한 제2 사용자 데이터(UD2)가 사용자 KV 페어(KVPR-user)에 존재함을 확인할 수 있다. 이 경우, NVM 제어 모듈(121f)은 KV 관리자(121a)의 제어에 따라, 사용자 KV 페어(KVPR-user)의 제2 사용자 데이터(UD2)를 제2 밸류(V2)에서 제3 밸류(V3)로 교체 또는 갱신할 수 있다.
NVM 제어 모듈(121f)은 제3 KV 커맨드(CMD_KV3)에 대응하는 동작과 관련된 정보{PUT.uK2}를 로그 버퍼(LB)에 기록할 수 있다. 제2 사용자 키(uK2)와 관련된 정보가 키 인덱스(IDX)에 포함되어 있으므로, KV 관리자(121a)는 키 인덱스(IDX)를 갱신하지 않을 수 있다.
다음으로, 도 15d에 도시된 바와 같이, 호스트(110)는 DEL[uK1]의 구조를 갖는 제4 KV 커맨드(CMD_KV4)를 스토리지 컨트롤러(121)로 전송할 수 있다. KV 관리자(121a)는 키 인덱스(IDX)를 기반으로 제4 KV 커맨드(CMD_KV4)의 제1 사용자 키(uK1)와 대응되는 밸류(즉, 제1 사용자 데이터(UD1))가 저장된 제1 스토리지 위치(sLCT1)를 확인하고, 제1 스토리지 위치(sLCT1)를 기반으로 NVM 제어 모듈(121f)을 제어할 수 있다.
NVM 제어 모듈(121f)은 KV 관리자(121a)의 제어에 따라, 제1 사용자 키(uK1)와 대응되는 제1 사용자 데이터(UD1)를 사용자 KV 페어(KVPR-user)로부터 제거, 무효화, 또는 삭제할 수 있다. NVM 제어 모듈(121f)은 제4 KV 커맨드(CMD_KV4)와 대응되는 동작에 대한 정보{DEL.uK1}를 로그 버퍼(LB)에 기록할 수 있다.
다음으로, 도 15e에 도시된 바와 같이, 로그 버퍼(LB)가 가득 찰 수 있다. 이 경우, 스토리지 컨트롤러(121)는 로그 버퍼(LB)에 저장된 로그 엔트리들”{PUT.uK1}, {PUT.uK2}, {PUT.uK2}, {DEL.uK1}”을 기반으로 로그 데이터(LD)를 생성하고, 생성된 로그 데이터(LD)를 불휘발성 메모리 장치(122)의 동작 로그 KV 페어(KVPR-op)에 저장할 수 있다.
KV 관리자(121a)는 로그 데이터(LD)에 대하여, 제1 동작 로그 키(oK1)를 할당할 수 있다. KV 관리자(121a)는 제1 동작 로그 키(oK1)에 대응하는 로그 데이터(LD)가 저장된 스토리지 위치(sLCT3) 및 제1 동작 로그 키(oK1)를 기반으로 키 인덱스(IDX)를 갱신할 수 있다. 즉, 갱신된 키 인덱스(IDX)는 제1 동작 로그 키(oK1) 및 제3 스토리지 위치(sLCT3)에 대한 정보를 포함할 것이다.
예시적인 실시 예에서, 제1 동작 로그 키(oK1)는 내부 키(internal key)로서 관리될 수 있으며, 제1 동작 로그 키(oK1)에 대하여 내부 키와 대응되는 키 그룹 식별자가 부여될 수 있다.
예시적인 실시 예에서, 도 15e의 실시 예 이후에, 호스트(110)로부터 GET[oK1]의 KV 커맨드가 수신된 경우, 스토리지 컨트롤러(121)는 동작 로그 KV 페어(KVPR-op)로부터 제1 동작 로그 키(oK1)에 대응하는 로그 데이터(LD)를 호스트(110)로 제공할 수 있다. 호스트(110)는 동작 로그 KV 페어(KVPR-op)에 포함된 로그 데이터(LD)를 저널링(Journaling)을 위해 사용할 수 있다.
예시적인 실시 예에서, 스토리지 장치(120)에 대한 남은 저장 공간이 부족한 경우(즉, 사용자 KV 페어(KVPR-user)를 위한 공간이 부족한 경우), 호스트(110)는 DEL 타입의 KV 커맨드를 사용하여, 동작 로그 KV 페어(KVPR-op)에 포함된 로그 데이터(LD)를 삭제함으로써, 스토리지 장치(120)의 저장 공간(즉, 사용자 KV 페어(KVPR-user)를 위한 공간)을 확보할 수 있다.
상술된 바와 같이, 본 발명의 실시 예에 따르면, 스토리지 장치(120)는 호스트(110)로부터의 명시적인 요청 또는 커맨드 없이, 내부적으로 수행되는 동작에 대한 동작 로그를 KV 페어로 관리할 수 있다. 따라서, 동작 로그를 관리하기 위한 별도의 커맨드들이 요구되지 않기 때문에, 스토리지 시스템의 인터페이스가 간결해질 수 있다.
도 16은 도 15e의 로그 데이터를 저장하는데 사용되는 내부 데이터 구조를 보여주는 도면이다. 도 16을 참조하면, 데이터 구조는 KV 페어 헤더, 동작 로그 키(oK), 패딩 정보, 및 로드 데이터(LD)(즉, 밸류(value))를 포함할 수 있다.
KV 페어 헤더는 로그 데이터(LD)를 동작 로그 KV 페어(KVPR-op)에 저장하는데 필요한 정보(예를 들어, PUT 커맨드 헤더)를 포함할 수 있다. 동작 로그 키(oK)는 동작 로그 키와 관련된 정보를 포함할 수 있다. 패딩 정보는 데이터 구조의 크기를 조절하기 위한 임의의 값일 수 있다.
로그 데이터(LD)는 로그 헤더 및 복수의 로그 엔트리들을 포함할 수 있다. 로그 헤더 및 복수의 로그 엔트리들 각각은 표 1과 같은 정보를 포함할 수 있다.
Type Field Size (in byte)
Log Header Signature 2
Log Header Sequence Number 8
Key OP Log Count 4
Size 4
Log Entry Operation Type 2
Key Group ID 2
Key Size 4
Reserved 8
Key Variable (4~255B)
표 1을 참조하면, 로그 헤더는, 2바이트의 시그니쳐, 8 바이트의 로그 헤더 시퀀스 넘버, 4바이트의 키 동작 로그 카운트, 및 4바이트의 사이즈 정보를 포함할 수 있다. 복수의 로그 엔트리들 각각은 대응하는 KV 커맨드에 대한 2 바이트의 동작 타입 정보, 2바이트의 키 그룹 식별자 정보, 4바이트의 키 크기 정보, 8바이트의 예비 정보, 및 가변 크기의 키 정보를 포함할 수 있다.도 16에 도시된 데이터 구조를 기반으로 복수의 동작 로그 엔트리들을 포함하는 로그 데이터(LD)가 불휘발성 메모리 장치(122)의 동작 로그 KV 페어(KVPR-op)에 저장될 수 있다.
도 17은 도 1의 스토리지 장치의 동작을 예시적으로 보여주는 순서도이다. 도 17을 참조하여, 스토리지 장치(120)가 내부 KV 페어(KVPR-int) 및 동작 로그 KV 페어(KVPR-op)를 관리하는 실시 예가 설명된다. 간결한 설명을 위하여, 호스트(110)로부터 수신된 KV 커맨드는 제1 키를 포함하는 GET 커맨드인 것으로 가정한다.
도 1, 도 15e 및 도 17을 참조하면, S1100 단계에서, 스토리지 장치(120)는 호스트(110)로부터 KV 커맨드를 수신할 수 있다. 이 때, KV 커맨드는 제1 키를 포함하는 GET 커맨드일 수 있다.
S1200 단계에서, 스토리지 장치(120)는 제1 키가 내부 키인지 판별할 수 있다. 예를 들어, 스토리지 컨트롤러(121)는 제1 키에 포함된 키 그룹 식별자를 기반으로 제1 키가 내부 키인지 또는 사용자 키인지 판별할 수 있다.
제1 키가 내부 키인 경우, S1300 단계에서, 스토리지 장치(120)는 제1 키에 대응되는 밸류가 불휘발성 메모리 장치(122)에 저장되었는지 판별할 수 있다. 예를 들어, 스토리지 장치(120)는 키 인덱스(IDX)를 기반으로 제1 키가 저장된 위치를 확인할 수 있다. 예시적인 실시 예에서, 제1 키가 내부 KV 페어(KVPR-int)의 정보와 대응되는 경우, 제1 키와 대응되는 밸류는 스토리지 컨트롤러(121)의 메모리 장치(121c)에 저장될 수 있고, 제1 키가 동작 로그 KV 페어(KVPR-op)의 정보와 대응되는 경우, 제1 키와 대응되는 밸류는 불휘발성 메모리 장치(122)에 저장될 수 있다.
제1 키에 대응되는 밸류가 불휘발성 메모리 장치(122)에 저장되지 않은 경우, S1400 단계에서, 스토리지 장치(120)는 내부 KV 페어(KVPR-int)로부터 대응하는 밸류를 검색할 수 있다. 예를 들어, 앞서 설명된 바와 같이, 제1 키가 내부 KV 페어(KVPR-int)의 Get Log Page-SMART/HEALTH 정보와 대응되는 경우, 스토리지 장치(120)는 대응하는 밸류로서 SMART/HEALTH 정보를 검색하거나 또는 생성할 수 있다. 즉, 제1 키의 밸류에 대응하는 동작을 수행함으로써, 대응하는 밸류가 결정될 수 있다.
제1 키에 대응되는 밸류가 불휘발성 메모리 장치(122)에 저장된 경우, S1500 단계에서, 스토리지 장치(120)는 동작 로그 KV 페어(KVPR-op)로부터 제1 키에 대응하는 밸류(즉, 로그 데이터)를 검색할 수 있다.
제1 키가 내부 키가 아닌 경우(즉, 제1 키가 사용자 키인 경우), S1600 단계에서, 스토리지 장치(120)는 불휘발성 메모리 장치(122)의 사용자 KV 페어(KVPR-user)로부터 제1 키에 대응하는 사용자 데이터를 밸류로서 검색할 수 있다.
S1700 단계에서, 스토리지 장치(120)는 검색되거나 또는 생성된 밸류를 호스트(110)로 전송할 수 있다.
상술된 바와 같이, 본 발명의 실시 예에 따른 스토리지 시스템(100)은 단일 타입의 KV 커맨드(예를 들어, GET 커맨드)를 사용하여 다양한 형태의 정보(사용자 데이터, 동작 로그, 또는 다양한 관리 동작에 의한 정보)를 추출하거나 또는 독출하는 방안을 지원할 수 있다. 따라서, 스토리지 시스템(100)의 인터페이스가 간결해질 수 있으며, 별도의 인터페이스 변경없이 새로운 기능의 추가/변경/삭제가 용이하게 행해질 수 있다. 따라서, 향상된 성능 및 감소된 비용을 갖는 스토리지 시스템이 제공된다.
도 18은 본 발명의 실시 예에 따른 스토리지 시스템을 예시적으로 보여주는 블록도이다. 도 18을 참조하면, 스토리지 시스템(1000)은 호스트(1100) 및 스토리지 장치(1200)를 포함할 수 있다. 호스트(1100)는 스토리지 장치(1200)를 제어하도록 구성될 수 있다.
스토리지 장치(1200)는 스토리지 컨트롤러(1210) 및 불휘발성 메모리 장치(1220)를 포함할 수 있다. 스토리지 컨트롤러(1210)는 복수의 NVMe 컨트롤러들(1211~1213)을 포함할 수 있다. 복수의 NVMe 컨트롤러들(1211~1213) 각각은 물리 포트(PT)를 통해 호스트(1100)와 통신할 수 있다. 예시적인 실시 예에서, 복수의 NVMe 컨트롤러들(1211~1213) 각각은 서로 다른 물리 포트들(미도시)을 통해 호스트(1100)와 통신할 수 있다. 물리 포트(PT)는 PCIe 인터페이스 규약에 의해 정의된 물리 계층을 가리킬 수 있다.
복수의 NVMe 컨트롤러들(1211~1213) 각각은 호스트(1100)의 제어에 따라, 불휘발성 메모리 장치(1220)의 명칭 공간들(NS0~NS3)을 각각 제어하도록 구성될 수 있다. 예를 들어, 불휘발성 메모리 장치(1220)는 복수의 명칭 공간들(NS0~NS3)로 관리될 수 있다. 복수의 명칭 공간들(NS0~NS3) 각각은 논리적 또는 물리적으로 구분된 저장 공간을 가리킬 수 있다. 복수의 명칭 공간들(NS0~NS3) 각각은 호스트(1100)의 제어에 따라 독립적인 속성을 갖도록 구성될 수 있다.
제1 NVMe 컨트롤러(1211)는 제0 및 제1 명칭 공간들(NS0, NS1)을 제어할 수 있고, 제2 NVMe 컨트롤러(1212)는 제0 및 제2 명칭 공간들(NS0, NS2)을 제어할 수 있고, 제3 NVMe 컨트롤러(1213)는 제0 및 제3 명칭 공간들(NS0, NS3)을 제어할 수 있다. 즉, 제0 명칭 공간(NS0)은 복수의 NVMe 컨트롤러들(1211~1213)에 의해 공유되는 명칭 공간일 수 있다.
예시적인 실시 예에서, 호스트(1100)는 관리 전송 큐(ASQ), 관리 완료큐(ACQ), 전송 큐(SQ), 및 완료 큐(CQ)를 통해 스토리지 장치(1200)를 제어할 수 있다. 관리 전송 큐(ASQ)는 복수의 NVMe 컨트롤러들(1211~1213) 중 적어도 하나로 제공되는 관리 커맨드를 큐잉하도록 구성될 수 있다. 관리 완료 큐(ACQ)는 관리 커맨드에 대한 완료 정보를 큐잉하도록 구성될 수 있다. 전송 큐(SQ)는 복수의 NVMe 컨트롤러들(1211~1213) 중 적어도 하나로 제공되는 입출력 커맨드를 큐잉하도록 구성될 수 있다. 완료 큐(CQ)는 입출력 커맨드에 대한 완료 정보를 큐잉하도록 구성될 수 있다.
관리 전송 큐(ASQ), 관리 완료큐(ACQ), 전송 큐(SQ), 및 완료 큐(CQ)는 복수의 NVMe 컨트롤러들(1211~1213) 각각 또는 전체에 대하여 구성될 수 있거나 또는 복수의 명칭 공간들(NS0~NS3) 각각 또는 전체에 대하여 구성될 수 있다.
예시적인 실시 예에서, 복수의 명칭 공간들(NS0~NS3) 중 적어도 하나의 명칭 공간은 키-밸류 스토리지로서 사용될 수 있다. 예를 들어, 복수의 명칭 공간들(NS0~NS3) 중 제1 명칭 공간(NS1)의 속성은 키-밸류 스토리지로 설정될 수 있다. 이 경우, 제1 명칭 공간(NS1)을 제어하도록 구성된 제1 NVMe 컨트롤러(1211)는 도 1 내지 도 17을 참조하여 설명된 동작 방법을 기반으로 동작할 수 있다. 즉, 제1 NVMe 컨트롤러(1211)는 호스트(1100)로부터의 KV 커맨드(CMD_KV)에 응답하여 도 1 내지 도 17을 참조하여 설명된 동작을 수행할 수 있다. 이 경우, 제1 NVMe 컨트롤러(1211)에 의해 내부 KV 페어(KVPR-int)가 관리될 수 있다.
예시적인 실시 예에서, 제1 NVMe 컨트롤러(1211)가 도 1 내지 도 17을 참조하여 설명된 동작 방법을 기반으로 동작하는 호스트(1100)는 제1 명칭 공간(NS1)에 대한 관리 동작을 위한 커맨드(즉, 내부 키를 포함하는 KV 커맨드)를 관리 전송 큐(ASQ)에 큐잉하거나 또는 관리 전송 큐(ASQ)에 큐잉하는 대신에 전송 큐(SQ)에 큐잉할 수 있다.
상술된 바와 같이, 본 발명의 실시 예에 따른 스토리지 시스템(1000)은 불휘발성 메모리 장치(1220)의 저장 공간을 복수의 명칭 공간들로 관리할 수 있고, 복수의 명칭 공간들 중 적어도 일부에 대하여, 도 1 내지 도 18을 참조하여 설명된 동작 방법(즉, 내부 KV 페어를 사용한 관리 동작)을 수행할 수 있다.
도 19는 본 발명의 실시 예에 따른 스토리지 시스템을 예시적으로 보여주는 블록도이다. 도 19를 참조하면, 스토리지 시스템(2000)은 호스트(2100) 및 제1 및 제2 스토리지 장치들(2210, 2220)을 포함할 수 있다. 호스트(2100)는 인터페이스 채널(IF)을 통해 제1 및 제2 스토리지 장치들(2210, 2220)과 통신할 수 있다. 예시적인 실시 예에서, 인터페이스 채널(IF)은 도 1 내지 도 18을 참조하여 설명된 KV 커맨드를 지원하도록 구성된 통신 채널일 수 있다.
제1 및 제2 스토리지 장치들(2210, 2220) 각각은 도 1 내지 도 18을 참조하여 설명된 스토리지 장치일 수 있다. 즉, 제1 및 제2 스토리지 장치들(2210, 2220) 각각은 내부 KV 페어(KVPR-int) 또는 동작 로그 KV 페어(KVPR-op)를 관리하도록 구성될 수 있다. 예시적인 실시 예에서, 제1 및 제2 스토리지 장치들(2210, 2220)에 의해 관리되는 내부 KV 페어(KVPR-int)는 서로 다를 수 있다. 즉, 제1 및 제2 스토리지 장치들(2210, 2220)에 의해 지원되는 관리 동작들은 서로 다를 수 있다. 그러나, 본 발명의 실시 예에 따르면, 동일한 타입의 KV 커맨드를 사용하여 다양한 관리 동작이 수행될 수 있기 때문에, 제1 및 제2 스토리지 장치들(2210, 2220)에 의해 지원되는 관리 동작들이 서로 다르더라도, 호스트(2100)는 제1 및 제2 스토리지 장치들(2210, 2220)에서 지원되는 관리 동작들을 정상적으로 수행할 수 있다.
도 20은 본 발명의 실시 예에 따른 스토리지 시스템이 적용된 데이터 센터를 예시적으로 보여주는 블록도이다. 도 20을 참조하면, 데이터 센터(3000)는 복수의 컴퓨팅 노드들(3100~3400)(또는 서버들)을 포함할 수 있다. 복수의 컴퓨팅 노드들(3100~3400)은 네트워크(NT)를 통해 서로 통신할 수 있다. 예시적인 실시 예에서, 네트워크(NT)는 SAN(storage area network)와 같은 스토리지 전용 네트워크이거나 또는 TCP/IP와 같은 인터넷 네트워크일 수 있다. 예시적인 실시 예에서, 네트워크(NT)는 파이버 채널(Fibre Channel), iSCSI 프로토콜, FCoE, NAS, NVMe-oF 등과 같은 다양한 통신 프로토콜들 중 적어도 하나를 포함할 수 있다.
복수의 컴퓨팅 노드들(3100~3400) 각각은 프로세서들(3110, 3210, 3310, 3410), 메모리들(3120, 3220, 3320, 3420), 스토리지 장치들(3130, 3230, 3330, 3430), 및 인터페이스 회로들(3140, 3240, 3340, 3440)을 각각 포함할 수 있다.
예를 들어, 제1 컴퓨팅 노드(3100)는 제1 프로세서(3110), 제1 메모리(3120), 제1 스토리지 장치(3130), 및 제1 인터페이스 회로(3140)를 포함할 수 있다. 예시적인 실시 예에서, 제1 프로세서(3110)는 싱글 코어 또는 멀티 코어로 구현될 수 있다. 제1 메모리(3120)는 DRAM, SDRAM, SRAM, 3D XPoint 메모리, MRAM, PRAM, FeRAM, ReRAM, 3D X-Point 등과 같은 메모리를 포함할 수 있다. 제1 메모리(3120)는 제1 컴퓨팅 노드(3100)의 시스템 메모리, 동작 메모리, 또는 버퍼 메모리로서 사용될 수 있다. 제1 스토리지 장치(3130)는 하드 디스크 드라이브(HDD), 솔리드 스테이트 드라이브(SSD) 등과 같은 대용량 저장 매체일 수 있다. 제1 인터페이스 회로(3140)는 네트워크(NT)를 통한 통신 지원하도록 구성된 네트워크 인터페이스 컨트롤러(NIC; network interface controller)일 수 있다.
예시적인 실시 예에서, 제1 컴퓨팅 노드(3100)의 제1 프로세서(3110)는 미리 정해진 메모리 인터페이스를 기반으로 제1 메모리(3120)를 액세스하도록 구성될 수 있다. 또는, 공유 메모리 구조(shared memory architecture)의 실시 예에서, 제1 컴퓨팅 노드(3100)의 제1 프로세서(3110)는 네트워크(NT)를 통해 다른 컴퓨팅 노드들(3200, 3300, 3400)의 메모리들(3220, 3320, 3420)을 액세스하도록 구성될 수 있다. 인터페이스 회로(3140)는 상술된 제1 프로세서(3110)의 공유 메모리(즉, 다른 컴퓨팅 노드들의 메모리들)로의 접근을 제어 또는 지원하도록 구성된 네트워크 스위치(미도시)를 포함할 수 있다.
예시적인 실시 예에서, 제1 컴퓨팅 노드(3100)의 제1 프로세서(3110)는 미리 정해진 스토리지 인터페이스를 기반으로 제1 스토리지 장치(3130)를 액세스하도록 구성될 수 있다. 또는 제1 컴퓨팅 노드(3100)의 제1 프로세서(3110)는 네트워크(NT)를 통해 다른 컴퓨팅 노드들(3200, 3300, 3400)의 스토리지 장치들(3230, 3330, 3430)을 액세스하도록 구성될 수 있다. 인터페이스 회로(3140)는 상술된 제1 프로세서(3110)의 다른 스토리지 장치들로의 접근을 제어 또는 지원하도록 구성된 네트워크 스위치(미도시)를 포함할 수 있다. 예시적인 실시 예에서, 복수의 컴퓨팅 노드들(3100~3140) 각각에 포함된 스토리지 장치들(3130~3430)은 하나의 RAID 볼륨을 구성할 수 있다.
제2 내지 제4 컴퓨팅 노드들(3200~3400)은 상술된 제1 컴퓨팅 노드(3100)와 유사한 동작을 수행할 수 있으며, 이에 대한 상세한 설명은 생략된다.
예시적인 실시 예에서, 데이터 센터(3000)에서, 다양한 애플리케이션들이 실행될 수 있다. 다양한 애플리케이션들은 컴퓨팅 노드들(3100~3400) 사이의 데이터 이동 또는 복사를 위한 명령어를 실행하도록 구성되거나, 또는 컴퓨팅 노드들(3100~3400) 상에 존재하는 다양한 정보들을 조합, 가공, 재생산하기 위한 명령어들을 실행하도록 구성될 수 있다. 예시적인 실시 예에서, 다양한 애플리케이션들은 데이터 센터(3000)에 포함된 복수의 컴퓨팅 노드들(3100~3400) 중 어느 하나에 의해 수행되거나 또는, 다양한 애플리케이션들은 복수의 컴퓨팅 노드들(3100~3400) 사이에서 분산되어 실행될 수 있다.
예시적인 실시 예에서, 데이터 센터(3000)는 고성능 컴퓨팅(HPC; high-performance computing)(예를 들어, 금융, 석유, 재료과학, 기상 예측 등), 기업형 애플리케이션(예를 들어, 스케일 아웃 데이터베이스), 빅 데이터 애플리케이션(예를 들어, NoSQL 데이터베이스, 인-메모리 복제 등)을 위해 사용될 수 있다.
예시적인 실시 예에서, 복수의 컴퓨팅 노드들(3100~3400) 중 적어도 하나는 애플리케이션 서버일 수 있다. 애플리케이션 서버는 데이터 센터(3000)에서 다양한 동작을 수행하도록 구성된 애플리케이션을 실행하도록 구성될 수 있다. 복수의 컴퓨팅 노드들(3100~3400) 중 적어도 하나는 스토리지 서버일 수 있다. 스토리지 서버는 데이터 센터(3000)에서 생성되거나 또는 관리되는 데이터를 저장하도록 구성될 수 있다.
예시적인 실시 예에서, 데이터 센터(3000)에 포함된 복수의 컴퓨팅 노드들(3100~3400) 각각 또는 그것들의 부분들은 동일한 위치에 존재하거나 또는 물리적으로 이격된 위치에 존재할 수 있으며, 무선 통신 또는 유선 통신에 기반된 네트워크(NT)를 통해 서로 통신할 수 있다. 예시적인 실시 예에서, 데이터 센터(3000)에 포함된 복수의 컴퓨팅 노드들(3100~3400)은 서로 동일한 메모리 기술을 기반으로 구현되거나 또는 서로 다른 메모리 기술들을 기반으로 구현될 수 있다.
비록 도면에 도시되지는 않았으나, 데이터 센터(3000)의 복수의 컴퓨팅 노드들(3100~3400) 중 적어도 일부는 네트워크(NT) 또는 다른 통신 인터페이스(미도시)를 통해 외부 클라이언트 노드(미도시)와 통신할 수 있다. 복수의 컴퓨팅 노드들(3100~3400) 중 적어도 일부는 외부 클라이언트 노드의 요청에 따라 자체적으로 요청(예를 들어, 데이터 저장, 데이터 전송 등)을 처리하거나 또는 다른 컴퓨팅 노드에서 요청을 처리할 수 있다.
예시적인 실시 예에서, 데이터 센터(3000)에 포함된 복수의 컴퓨팅 노드들(3100~3400)의 개수, 각 컴퓨팅 노드에 포함된 프로세서의 개수, 메모리 개수, 스토리지 장치의 개수는 예시적인 것이며, 본 발명의 범위가 이에 한정되는 것은 아니다.
예시적인 실시 예에서, 복수의 컴퓨팅 노드들(3100~3400) 각각은 도 1 내지 도 19를 참조하여 설명된 호스트일 수 있고, 복수의 컴퓨팅 노드들(3100~3400) 각각에 포함된 스토리지 장치들(3130~3140) 각각은 도 1 내지 도 19를 참조하여 설명된 스토리지 장치일 수 있다. 복수의 컴퓨팅 노드들(3100~3400)은 도 1 내지 도 19를 참조하여 설명된 KV 커맨드를 기반으로, 스토리지 장치들(3130~3140)를 각각 제어할 수 있다. 스토리지 장치들(3130~3430) 각각은 도 1 내지 도 19를 참조하여 설명된 바와 같이, 내부 KV 페어를 관리하도록 구성될 수 있고, 도 1 내지 도 19를 참조하여 설명된 동작 방법을 기반으로 동작할 수 있다.
상술된 내용은 본 발명을 실시하기 위한 구체적인 실시 예들이다. 본 발명은 상술된 실시 예들뿐만 아니라, 단순하게 설계 변경되거나 용이하게 변경할 수 있는 실시 예들 또한 포함할 것이다. 또한, 본 발명은 실시 예들을 이용하여 용이하게 변형하여 실시할 수 있는 기술들도 포함될 것이다. 따라서, 본 발명의 범위는 상술된 실시 예들에 국한되어 정해져서는 안되며 후술하는 특허청구범위뿐만 아니라 이 발명의 특허청구범위와 균등한 것들에 의해 정해져야 할 것이다.

Claims (20)

  1. 불휘발성 메모리 장치를 포함하는 스토리지 장치의 동작 방법에 있어서,
    외부 호스트 장치로부터, 제1 키를 포함하는 제1 키-밸류(KV; Key-Value) 커맨드를 수신하는 단계;
    상기 제1 KV 커맨드에 응답하여, 상기 제1 키에 대응하는 제1 밸류를 상기 불휘발성 메모리 장치로부터 상기 외부 호스트 장치로 제1 사용자 데이터로서 전송하는 단계;
    상기 외부 호스트 장치로부터, 제2 키를 포함하는 제2 KV 커맨드를 수신하는 단계;
    상기 제2 KV 커맨드에 응답하여, 상기 제2 키와 대응되는 제2 밸류를 기반으로 제1 관리 동작을 수행하는 단계를 포함하고,
    상기 제1 KV 커맨드 및 상기 제2 KV 커맨드는 서로 동일한 타입의 KV 커맨드인 동작 방법.
  2. 제 1 항에 있어서,
    상기 제1 키는 사용자 키를 가리키는 제1 키 그룹 식별자, 및 제1 키 명칭에 대한 정보를 포함하고,
    상기 제2 키는 내부 키를 가리키는 제2 키 그룹 식별자, 및 제2 키 명칭에 대한 정보를 포함하는 동작 방법.
  3. 제 1 항에 있어서,
    상기 제2 밸류는 상기 제1 동작에 대응하는 관리 커맨드 및 커맨드 식별자에 대한 정보를 포함하는 동작 방법.
  4. 제 1 항에 있어서,
    상기 제1 KV 커맨드에 응답하여, 상기 제1 키에 대응하는 제1 밸류를 상기 불휘발성 메모리 장치로부터 상기 외부 호스트 장치로 제1 사용자 데이터로서 전송하는 단계는:
    복수의 키들 및 상기 복수의 키들 각각에 대응하는 밸류들의 위치들에 대한 정보를 포함하는 키 인덱스를 기반으로, 상기 제1 키에 대응하는 상기 제1 밸류의 제1 위치를 판별하는 단계;
    상기 판별된 제1 위치를 기반으로, 상기 불휘발성 메모리 장치로부터 상기 제1 밸류를 읽는 단계; 및
    상기 읽은 제1 밸류를 상기 제1 사용자 데이터로서 상기 외부 호스트 장치로 전송하는 단계를 포함하는 동작 방법.
  5. 제 4 항에 있어서,
    상기 제2 KV 커맨드에 응답하여, 상기 제2 키와 대응되는 제2 밸류를 기반으로 제1 관리 동작을 수행하는 단계는:
    상기 키 인덱스를 기반으로, 상기 제2 키에 대응하는 상기 제2 밸류의 제2 위치를 판별하는 단계;
    상기 판별된 제2 위치를 기반으로 상기 제2 밸류를 읽는 단계; 및
    상기 읽은 제2 밸류에 응답하여, 상기 제1 관리 동작을 수행하는 단계를 포함하는 동작 방법.
  6. 제 5 항에 있어서,
    상기 제1 KV 커맨드에 대한 제1 동작 로그를 로그 버퍼에 기록하는 단계;
    상기 제1 동작 로그를 포함하는 제1 로그 데이터를 상기 불휘발성 메모리 장치에 저장하는 단계; 및
    상기 제1 로그 데이터에 대한 제3 키를 할당하고, 상기 제1 로그 데이터가 저장된 제3 위치 및 상기 제3 키를 기반으로 상기 키 인덱스를 갱신하는 단계를 더 포함하는 동작 방법.
  7. 제 6 항에 있어서,
    상기 외부 호스트 장치로부터 상기 제3 키를 포함하는 제3 KV 커맨드를 수신하는 단계; 및
    상기 제3 KV 커맨드에 응답하여, 상기 제3 키와 대응되는 상기 제1 로그 데이터를 상기 외부 호스트 장치로 전송하는 단계를 더 포함하고,
    상기 제1 KV 커맨드, 상기 제2 KV 커맨드, 및 상기 제3 KV 커맨드는 서로 동일한 타입의 KV 커맨드인 동작 방법.
  8. 제 1 항에 있어서,
    상기 제2 밸류는 상기 스토리지 장치의 메모리 장치에 저장된 내부 키-밸류 페어에 포함되는 동작 방법.
  9. 제 8 항에 있어서,
    상기 내부 키-밸류 페어는 상기 스토리지 장치의 초기화 과정에서, 상기 불휘발성 메모리 장치로부터 상기 메모리 장치로 로드되는 동작 방법.
  10. 제 8 항에 있어서,
    상기 외부 호스트 장치로부터 제4 키 및 제4 밸류를 포함하는 제4 KV 커맨드를 수신하는 단계;
    상기 제4 KV 커맨드에 응답하여, 상기 제4 밸류를 상기 내부 키-밸류 페어에 저장하는 단계;
    상기 외부 호스트 장치로부터 상기 제4 키를 포함하는 제5 KV 커맨드를 수신하는 단계; 및
    상기 제5 KV 커맨드에 응답하여, 상기 제4 밸류와 대응되는 제2 관리 동작을 수행하는 단계를 더 포함하는 동작 방법.
  11. 제 10 항에 있어서,
    상기 제4 밸류는 상기 제2 관리 동작에 대응하는 관리 커맨드 및 커맨드 식별자에 대한 정보를 포함하는 동작 방법.
  12. 사용자 키에 대응하는 제1 밸류를 포함하는 사용자 키-밸류 페어를 저장하도록 구성된 불휘발성 메모리 장치; 및
    상기 불휘발성 메모리 장치를 제어하도록 구성된 스토리지 컨트롤러를 포함하고,
    상기 스토리지 컨트롤러는:
    내부 키에 대응하는 제2 밸류를 포함하는 내부 키-밸류 페어, 및 상기 사용자 키 및 상기 내부 키, 및 상기 제1 및 제2 밸류들의 위치에 대한 정보를 포함하는 키 인덱스를 저장하도록 구성된 메모리 장치; 및
    외부 호스트 장치로부터의 제1 키-밸류(KV; Key-Value) 커맨드에 응답하여, 상기 키 인덱스를 기반으로 상기 제1 KV 커맨드에 포함된 키가 상기 내부 키인지 또는 상기 사용자 키인지 판별하고, 상기 키가 상기 사용자 키인 경우, 상기 제1 밸류를 상기 외부 호스트 장치로 전송하고, 상기 키가 상기 내부 키인 경우, 상기 제2 밸류에 대응하는 제1 관리 동작을 수행하도록 구성된 키-밸류(KV; Key-Value) 관리자를 포함하는 스토리지 장치.
  13. 제 12 항에 있어서,
    상기 내부 KV 페어는, 상기 스토리지 장치의 초기화 동작에서, 상기 불휘발성 메모리 장치로부터 상기 메모리 장치로 로드되는 스토리지 장치.
  14. 제 12 항에 있어서,
    상기 KV 관리자는 상기 외부 호스트 장치로부터의 제2 KV 커맨드에 응답하여, 상기 내부 KV 페어에 대한 정보를 상기 외부 호스트 장치로 전송하도록 더 구성된 스토리지 장치.
  15. 제 12 항에 있어서,
    상기 외부 호스트 장치로부터의 제2 KV 커맨드에 응답하여, 상기 KV 관리자는:
    상기 제2 KV 커맨드에 포함된 제2 키가 상기 사용자 키인 경우, 상기 사용자 키-밸류 페어에서, 상기 제1 밸류를 상기 제2 KV 커맨드의 제3 밸류로 갱신하고,
    상기 제2 KV 커맨드에 포함된 상기 제2 키가 상기 내부 키인 경우, 상기 제2 밸류에 대응하는 정보를 상기 제2 KV 커맨드의 상기 제3 밸류로 갱신하도록 더 구성되고,
    상기 제2 밸류는 셋 피쳐(Set Feature) 커맨드에 대응하고, 상기 제2 밸류에 대응하는 정보는 상기 스토리지 장치의 특징(Feature) 정보인 스토리지 장치.
  16. 제 12 항에 있어서,
    상기 외부 호스트 장치로부터의 제2 KV 커맨드에 응답하여, 상기 KV 관리자는:
    상기 제2 KV 커맨드에 포함된 제2 키가 상기 사용자 키인 경우, 상기 사용자 키-밸류 페어에서, 상기 제1 밸류를 상기 제2 KV 커맨드의 제3 밸류로 갱신하고,
    상기 제2 KV 커맨드에 포함된 상기 제2 키가 상기 내부 키인 경우, 상기 내부 키-밸류 페어에서, 상기 제2 밸류를 상기 제2 KV 커맨드의 상기 제3 밸류로 갱신하도록 더 구성된 스토리지 장치.
  17. 제 16 항에 있어서,
    상기 외부 호스트 장치로부터의, 상기 내부 키인 상기 제2 키를 포함하는 제3 KV 커맨드에 응답하여, 상기 KV 관리자는 상기 제3 밸류에 대응하는 제2 관리 동작을 수행하도록 더 구성된 스토리지 장치.
  18. 제 12 항에 있어서,
    상기 스토리지 컨트롤러는 PCI-express 인터페이스 기반의 물리 포트를 통해 상기 외부 호스트 장치와 통신하는 스토리지 장치.
  19. 불휘발성 메모리 장치를 포함하는 스토리지 장치의 동작 방법에 있어서,
    외부 호스트 장치로부터 제1 키를 포함하는 제1 키-밸류(KV; Key-Value) 커맨드를 수신하는 단계;
    상기 제1 키가 내부 키인지 또는 사용자 키인지 판별하는 단계; 및
    상기 제1 키가 상기 사용자 키인 경우, 상기 불휘발성 메모리 장치에 저장된 사용자 데이터에 대한 제1 입출력 동작을 수행하고, 상기 제1 키가 상기 내부 키인 경우, 상기 스토리지 장치에 대한 제1 관리 동작을 수행하는 단계를 포함하는 동작 방법.
  20. 제 19 항에 있어서,
    상기 제1 관리 동작은 상기 제1 키와 대응하는 제1 밸류를 기반으로 수행되는 동작 방법.


KR1020200005368A 2020-01-15 2020-01-15 스토리지 장치 및 그것의 동작 방법 KR20210092361A (ko)

Priority Applications (5)

Application Number Priority Date Filing Date Title
KR1020200005368A KR20210092361A (ko) 2020-01-15 2020-01-15 스토리지 장치 및 그것의 동작 방법
US17/076,619 US11467739B2 (en) 2020-01-15 2020-10-21 Storage device and operation method thereof
EP20213056.3A EP3851950A1 (en) 2020-01-15 2020-12-10 Storage device and operation method thereof
CN202110051502.7A CN113126910A (zh) 2020-01-15 2021-01-14 存储设备及其操作方法
US17/939,387 US11775183B2 (en) 2020-01-15 2022-09-07 Storage device and operation method thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020200005368A KR20210092361A (ko) 2020-01-15 2020-01-15 스토리지 장치 및 그것의 동작 방법

Publications (1)

Publication Number Publication Date
KR20210092361A true KR20210092361A (ko) 2021-07-26

Family

ID=76763130

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200005368A KR20210092361A (ko) 2020-01-15 2020-01-15 스토리지 장치 및 그것의 동작 방법

Country Status (3)

Country Link
US (1) US11467739B2 (ko)
KR (1) KR20210092361A (ko)
CN (1) CN113126910A (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3851950A1 (en) * 2020-01-15 2021-07-21 Samsung Electronics Co., Ltd. Storage device and operation method thereof
US11836133B2 (en) * 2021-07-19 2023-12-05 Samsung Electronics Co., Ltd. In-memory database (IMDB) acceleration through near data processing
US11934264B2 (en) * 2021-11-22 2024-03-19 Western Digital Technologies, Inc. ECC parity biasing for Key-Value data storage devices
US11940911B2 (en) * 2021-12-17 2024-03-26 Netapp, Inc. Persistent key-value store and journaling system
US11853607B2 (en) * 2021-12-22 2023-12-26 Western Digital Technologies, Inc. Optimizing flash memory utilization for NVMe KV pair storage
US11928336B2 (en) 2022-03-03 2024-03-12 Samsung Electronics Co., Ltd. Systems and methods for heterogeneous storage systems
US20230297945A1 (en) * 2022-03-16 2023-09-21 Dell Products L.P. Capture of emmc card identification for component traceability of pcie daughter card

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5524144B2 (ja) 2011-08-08 2014-06-18 株式会社東芝 key−valueストア方式を有するメモリシステム
US9075710B2 (en) * 2012-04-17 2015-07-07 SanDisk Technologies, Inc. Non-volatile key-value store
US9037556B2 (en) 2012-12-03 2015-05-19 Vmware, Inc. Distributed, transactional key-value store
US9785356B2 (en) 2013-06-26 2017-10-10 Cnex Labs, Inc. NVM express controller for remote access of memory and I/O over ethernet-type networks
JP6361223B2 (ja) 2014-03-27 2018-07-25 日本電気株式会社 トランザクションシステム
US9846642B2 (en) 2014-10-21 2017-12-19 Samsung Electronics Co., Ltd. Efficient key collision handling
US10210168B2 (en) 2015-02-23 2019-02-19 International Business Machines Corporation Managing data in storage according to a log structure
US10346048B2 (en) 2015-04-10 2019-07-09 Samsung Electronics Co., Ltd. Electronic system with storage management mechanism and method of operation thereof
CN107209644B (zh) 2015-12-28 2020-04-28 华为技术有限公司 一种数据处理方法以及NVMe存储器
EP3279810B1 (en) 2016-06-14 2019-09-04 Huawei Technologies Co., Ltd. Data access method and related apparatus and system
KR20180087925A (ko) 2017-01-25 2018-08-03 삼성전자주식회사 논리 어드레스와 물리 어드레스 사이에서 해싱 기반 변환을 수행하는 스토리지 장치
KR102406666B1 (ko) 2017-09-20 2022-06-08 삼성전자주식회사 스냅샷 기능을 지원하는 키-밸류 스토리지 장치 및 상기 키-밸류 스토리지 장치의 동작 방법
US10868679B1 (en) * 2019-07-25 2020-12-15 Cypress Semiconductor Corporation Nonvolatile memory device with regions having separately programmable secure access features and related methods and systems

Also Published As

Publication number Publication date
US20210216220A1 (en) 2021-07-15
US11467739B2 (en) 2022-10-11
CN113126910A (zh) 2021-07-16

Similar Documents

Publication Publication Date Title
KR20210092361A (ko) 스토리지 장치 및 그것의 동작 방법
US8595461B2 (en) Management of recycling bin for thinly-provisioned logical volumes
US9116913B2 (en) File storage system and file cloning method
US8983911B2 (en) Storage media abstraction for uniform data storage
US11782632B2 (en) Selective erasure of data in a SSD
US11580162B2 (en) Key value append
US11775183B2 (en) Storage device and operation method thereof
CN109804359A (zh) 用于将数据回写到存储设备的系统和方法
US8560775B1 (en) Methods for managing cache configuration
EP3446221B1 (en) Adapted block translation table (btt)
KR20170085951A (ko) 버저닝 저장 장치 및 방법
US11550479B1 (en) Metadata management in storage systems
US9965195B2 (en) Methods and systems for efficiently storing data at a plurality of storage tiers using a transfer data structure
US11947419B2 (en) Storage device with data deduplication, operation method of storage device, and operation method of storage server
US8769196B1 (en) Configuring I/O cache
US10089125B2 (en) Virtual machines accessing file data, object data, and block data
US11379408B2 (en) Pointer-based dynamic data structures in key-value stores
CN109983452A (zh) 用于连续可用的网络文件系统(nfs)状态数据的系统和方法
US11971825B2 (en) Managing granularity of a metadata structure for a storage system
CN110737397B (zh) 用于管理存储系统的方法、设备和计算机程序产品
US20210334182A1 (en) Network storage failover systems and associated methods
JPWO2016103356A1 (ja) 階層化ストレージシステム、ストレージコントローラ及びレプリケーション初期化方法
US11537597B1 (en) Method and system for streaming data from portable storage devices
US11960481B2 (en) Managing lookup operations of a metadata structure for a storage system
US11803314B2 (en) Techniques for performing metadata updates