KR20210056520A - 저장 장치 및 저장 장치 시스템과 그 동작 방법 - Google Patents
저장 장치 및 저장 장치 시스템과 그 동작 방법 Download PDFInfo
- Publication number
- KR20210056520A KR20210056520A KR1020190143096A KR20190143096A KR20210056520A KR 20210056520 A KR20210056520 A KR 20210056520A KR 1020190143096 A KR1020190143096 A KR 1020190143096A KR 20190143096 A KR20190143096 A KR 20190143096A KR 20210056520 A KR20210056520 A KR 20210056520A
- Authority
- KR
- South Korea
- Prior art keywords
- streams
- write
- stream
- block
- storage device
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0613—Improving I/O performance in relation to throughput
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
- G06F3/0631—Configuration or reconfiguration of storage systems by allocating resources to storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0658—Controller construction arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
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)
- Debugging And Monitoring (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
신뢰성이 향상된 저장 장치가 제공된다. 몇몇 실시예에 따른 저장 장치는 복수의 비휘발성 메모리를 포함하는 비휘발성 메모리 장치, 외부로부터 제공되는 복수의 스트림에 저장될, 비휘발성 메모리 장치의 쓰기 블록을 할당하는 컨트롤러, 및 비휘발성 메모리와 다른 종류의 메모리를 포함하고, 복수의 스트림에 대한 쓰기 블록 할당 결과를 저장하는 버퍼 메모리를 포함하되, 컨트롤러는, 버퍼 메모리에 저장된 복수의 스트림에 대한 쓰기 블록 할당 결과와, 복수의 스트림에 저장될 비휘발성 메모리 장치의 쓰기 블록을 재할당한다.
Description
본 발명은 저장 장치 및 저장 장치 시스템과 그 동작 방법에 관한 것이다.
저장 장치는 비휘발성 저장 매체로서, 저장 장치에 저장된 데이터는 전원 공급에 관계없이 영구적으로 혹은 반영구적으로 보존될 수 있다. 저장 장치는 기계적으로 동작하는 대신에 반도체 메모리와 같이 전기적으로 동작할 수 있다.
저장 장치를 사용하는 호스트는 어플리케이션에 따라 다양한 종류의 데이터를 생성할 수 있다. 호스트는 저장 장치의 동작을 개선하기 위해 데이터와 함께 데이터에 관한 정보를 저장 장치에 제공할 수 있다.
저장 장치는, 호스트가 제공한 데이터에 관한 정보를 통해, 저장 장치 내에 존재하는 비휘발성 메모리 블록(혹은, 쓰기 블록이라고 칭할 수도 있다.)을 각각의 데이터에 할당할 수 있다. 하지만, 쓰기 블록이 저장 장치가 수행할 수 있는 최대의 성능을 발휘할 수 있도록 데이터에 관한 정보(예를 들면, 스트림)에 할당되지 않을 수 있다. 즉, 호스트 및/또는 저장 장치는 데이터에 관한 정보(예를 들면, 스트림)에 할당된 쓰기 블록의 개수를 호스트 및/또는 저장 장치의 상황에 맞게 동적으로 변경될 필요가 있다.
본 발명이 해결하고자 하는 기술적 과제는 스트림에 할당되는 쓰기(wirte) 블록을 동적으로 계산하여 할당하는 저장 장치를 제공하는 것이다.
본 발명이 해결하고자 하는 다른 기술적 과제는 스트림에 할당되는 쓰기(wirte) 블록을 동적으로 계산하여 할당하는 저장 장치 시스템을 제공하는 것이다.
본 발명이 해결하고자 하는 또다른 기술적 과제는 스트림에 할당되는 쓰기(wirte) 블록을 동적으로 계산하여 할당하는 저장 장치 시스템 동작 방법을 제공하는 것이다.
본 발명의 기술적 과제들은 이상에서 언급한 기술적 과제로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
상기 기술적 과제를 달성하기 위한 본 발명의 몇몇 실시예에 따른 저장 장치는, 복수의 비휘발성 메모리를 포함하는 비휘발성 메모리 장치, 외부로부터 제공되는 복수의 스트림에 저장될, 비휘발성 메모리 장치의 쓰기 블록을 할당하는 컨트롤러, 및 비휘발성 메모리와 다른 종류의 메모리를 포함하고, 복수의 스트림에 대한 쓰기 블록 할당 결과를 저장하는 버퍼 메모리를 포함하되, 컨트롤러는, 버퍼 메모리에 저장된 복수의 스트림에 대한 쓰기 블록 할당 결과와, 복수의 스트림에 저장될 비휘발성 메모리 장치의 쓰기 블록을 재할당한다.
상기 기술적 과제를 달성하기 위한 본 발명의 몇몇 실시예에 따른 저장 장치 시스템은, 복수의 스트림과, 복수의 스트림에 대한 실시간 정보를 출력하는 호스트, 및 호스트로부터 복수의 스트림과, 복수의 스트림에 대한 실시간 정보를 수신하는 저장 장치를 포함하되, 저장 장치는, 복수의 비휘발성 메모리를 포함하는 비휘발성 메모리 장치와, 호스트로부터 제공된 복수의 스트림에 대한 실시간 정보를 바탕으로 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하고, 계산 결과를 바탕으로 복수의 스트림 각각에 대응하여, 복수의 스트림 저장될 비휘발성 메모리 장치의 쓰기 블록을 할당하는 컨트롤러를 포함한다.
상기 기술적 과제를 달성하기 위한 본 발명의 몇몇 실시예에 따른 저장 장치 시스템은, 호스트 메모리, 호스트 메모리에 로드된 복수의 소프트웨어를 실행하는 프로세싱 유닛, 및 호스트 메모리와 프로세싱 유닛으로부터 수신한 데이터를 외부에 송신하는 인터페이스 회로를 포함하는 호스트, 및 호스트와 데이터를 주고받는 저장 장치를 포함하되, 저장 장치는, 복수의 스트림에 대한 실시간 정보를 기반으로 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하는 블록 계산기를 포함하고, 복수의 스트림 각각에 쓰기 블록을 할당하는 컨트롤러와, 컨트롤러와 채널을 통해 데이터를 주고 받고, 복수의 비휘발성 메모리를 포함하는 메모리 장치와, 비휘발성 메모리와 다른 메모리를 포함하는 버퍼 메모리를 포함한다.
상기 기술적 과제를 달성하기 위한 본 발명의 몇몇 실시예에 따른 저장 장치 시스템 동작 방법은, 호스트를 통해, 복수의 스트림 각각에 대한 성능 변경 요구를 복수의 스트림 각각에 대한 성능 비율과 함께 저장 장치에 전달하고, 저장 장치 내 블록 계산기를 통해, 호스트로부터 수신한 복수의 스트림 각각에 대한 성능 비율을 기반으로 복수의 스트림 각각에 대한 성능을 계산하고, 계산된 성능을 호스트에 전달하고, 호스트는 계산된 성능에 대한 승인 여부를 저장 장치에 전달하며, 저장 장치는 호스트로부터 승인을 수신받은 경우, 계산된 성능을 바탕으로 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하고, 저장 장치 내 블록 할당기를 통해, 계산된 쓰기 블록의 개수를 복수의 스트림 각각에 할당한다.
기타 실시예들의 구체적인 사항들은 상세한 설명 및 도면들에 포함되어 있다.
도 1은 몇몇 실시예에 따른 저장 장치 시스템을 설명하기 위한 예시적인 블록도이다.
도 2는 몇몇 실시예에 따른 저장 장치 내 컨트롤러를 설명하기 위한 예시적인 블록도이다.
도 3은 몇몇 실시예에 따른 저장 장치 시스템 동작 방법을 설명하기 위한 예시적인 흐름도이다.
도 4는 몇몇 실시예에 따른 복수의 스트림 각각에 대한 정보를 설명하기 위한 예시적인 테이블이다.
도 5은 몇몇 실시예에 따른 스트림별 쓰기 블록의 동적 할당을 설명하기 위한 예시적인 블록도이다.
도 6 내지 도 8은 몇몇 실시예에 따른 저장 장치가 도 4의 테이블을 송수신하는 동작을 설명하기 위한 예시적인 블록도이다.
도 9는 도 4와는 다른 몇몇 실시예에 따른 복수의 스트림 각각에 대한 정보를 설명하기 위한 예시적인 테이블이다.
도 10은 도 3과는 다른 몇몇 실시예에 따른 저장 장치 시스템 동작 방법을 설명하기 위한 예시적인 흐름도이다.
도 11은 몇몇 실시예에 따른 복수의 스트림 각각에 대한 쓰기 빈도가 쓰인 쓰기 횟수 테이블이 시간에 따라 업데이트되는 동작을 설명하기 위한 예시적인 도면이다.
도 12는 몇몇 실시예에 따른 쓰기 횟수 테이블이 업데이트 됨에 따라 복수의 스트림 각각에 할당되는 쓰기 블록의 개수의 동적인 변화를 설명하기 위한 예시적인 도면이다.
도 13은 몇몇 실시예에 따른 저장 장치 시스템을 설명하기 위한 예시적인 블록도이다.
도 14는 몇몇 실시예에 따른 복수의 스트림 각각의 활성화 여부와 복수의 스트림 각각에 할당된 쓰기 블록 정보를 포함하는 블록 테이블을 설명하기 위한 예시적인 도면이다.
도 15는 도 14의 블록 테이블을 바탕으로, 활성화된 스트림에 동적으로 쓰기 블록을 할당함으로써 업데이트되는 블록 테이블을 설명하기 위한 도면이다.
도 2는 몇몇 실시예에 따른 저장 장치 내 컨트롤러를 설명하기 위한 예시적인 블록도이다.
도 3은 몇몇 실시예에 따른 저장 장치 시스템 동작 방법을 설명하기 위한 예시적인 흐름도이다.
도 4는 몇몇 실시예에 따른 복수의 스트림 각각에 대한 정보를 설명하기 위한 예시적인 테이블이다.
도 5은 몇몇 실시예에 따른 스트림별 쓰기 블록의 동적 할당을 설명하기 위한 예시적인 블록도이다.
도 6 내지 도 8은 몇몇 실시예에 따른 저장 장치가 도 4의 테이블을 송수신하는 동작을 설명하기 위한 예시적인 블록도이다.
도 9는 도 4와는 다른 몇몇 실시예에 따른 복수의 스트림 각각에 대한 정보를 설명하기 위한 예시적인 테이블이다.
도 10은 도 3과는 다른 몇몇 실시예에 따른 저장 장치 시스템 동작 방법을 설명하기 위한 예시적인 흐름도이다.
도 11은 몇몇 실시예에 따른 복수의 스트림 각각에 대한 쓰기 빈도가 쓰인 쓰기 횟수 테이블이 시간에 따라 업데이트되는 동작을 설명하기 위한 예시적인 도면이다.
도 12는 몇몇 실시예에 따른 쓰기 횟수 테이블이 업데이트 됨에 따라 복수의 스트림 각각에 할당되는 쓰기 블록의 개수의 동적인 변화를 설명하기 위한 예시적인 도면이다.
도 13은 몇몇 실시예에 따른 저장 장치 시스템을 설명하기 위한 예시적인 블록도이다.
도 14는 몇몇 실시예에 따른 복수의 스트림 각각의 활성화 여부와 복수의 스트림 각각에 할당된 쓰기 블록 정보를 포함하는 블록 테이블을 설명하기 위한 예시적인 도면이다.
도 15는 도 14의 블록 테이블을 바탕으로, 활성화된 스트림에 동적으로 쓰기 블록을 할당함으로써 업데이트되는 블록 테이블을 설명하기 위한 도면이다.
도 1은 몇몇 실시예에 따른 저장 장치 시스템을 설명하기 위한 예시적인 블록도이다. 도 2는 몇몇 실시예에 따른 저장 장치 내 컨트롤러를 설명하기 위한 예시적인 블록도이다.
도 1을 참조하면, 몇몇 실시예에 따른 저장 장치 시스템(10)은 호스트(100) 및 저장 장치(200)를 포함할 수 있다.
호스트(100)는 데이터를 저장 장치(200, 예를 들어, SSD(Solid State Drive))에 저장하기 위해 스트림에 따라 데이터를 저장 장치(200)로 전송할 수 있다. 호스트(100)는 로그 파일, 메타 파일, 미디어 파일 등과 같은 데이터의 유형에 따라 데이터에 스트림 ID(Identifier)를 할당할 수 있다.
호스트(100)는 데이터의 유형에 따라 상이한 스트림 ID들을 데이터 집합에 할당하고 멀티 스트림 데이터 집합을 저장 장치(200)로 전송할 수 있다. 예를 들어, 호스트(100)는 로그 파일에 해당하는 데이터에 제1 스트림으로 할당할 수 있고, 미디어 파일에 해당하는 데이터에 제2 스트림으로 할당할 수 있다.
예를 들어, 호스트(100)는 수명이 짧은 핫 데이터와 수명이 긴 콜드 데이터가 저장 장치(200)의 동일한 위치(예를 들면, 쓰기 블록들)에 같이 저장되지 않도록, 서로 다른 스트림 ID를 각각의 서로 다른 데이터에 할당할 수 있고, 저장 장치(200)는 동일한 스트림 ID를 갖는 데이터에 대해 일정한 개수의 쓰기 블록을 할당할 수 있다.
호스트(100)는 프로세싱 유닛(110), 호스트 메모리(120), 및 인터페이스 회로(130)를 포함할 수 있다. 프로세싱 유닛(110)은 호스트 메모리(120)에 로드된 다양한 소프트웨어(예를 들어, 응용 프로그램, 운영 체제, 장치 드라이버 등)를 실행할 수 있다. 프로세싱 유닛(110)은 운영 체제(OS) 또는 응용 프로그램들(application programs)을 실행할 수 있다. 프로세싱 유닛(110)은 동종 멀티-코어 프로세서(homogeneous multi-core processor)들 또는 이종 멀티-코어 프로세서(heterogeneous multi-core processor)들을 포함할 수 있다. 예를 들어, 프로세싱 유닛(110)은 CPU(Central Processing Unit), ISP(Image Processing Unit), DSP(Digital Signal Processing Unit), GPU(Graphics Processing Unit), VPU(Vision Processing Unit), 및 NPU(Neural Processing Unit) 중 적어도 하나를 포함할 수 있으나, 이에 제한되지는 않는다.
호스트 메모리(120)에는 저장 장치 시스템(10)을 구동하기 위한 응용 프로그램, 파일 시스템, 또는 장치 드라이버 등이 로드(load)될 수 있다. 하지만, 이에 한정되지 않고, 호스트 메모리(120)에는 저장 장치(200)가 구동되기 위한 다양한 그 밖의 소프트웨어들이 로드될 수 있다. 호스트 메모리(120)에는 프로세싱 유닛(110)에서 처리할 응용 프로그램이나 데이터들이 로드될 수 있다. 예를 들어, 저장 장치(200)로 전달될 명령들에 대한 제출 큐 및 완료 큐를 관리하기 위한 입출력 스케줄러(도시되지 않음)가 호스트 메모리(120)에 로드될 수 있다.
인터페이스 회로(130)는 호스트(100)와 저장 장치(200)간의 물리적인 연결들을 제공할 수 있다. 예를 들어, 인터페이스 회로(130)는 호스트(100)에서 생성된 다양한 요청들에 대응하는 명령들, 어드레스들, 데이터 세트 등을 저장 장치(200)와의 인터페이싱 방식으로 변환할 수 있다. 예를 들어, 인터페이스 회로(130)는 USB(Universal Serial Bus), SATA(Serial AT Attachment), SAS(Serial Attached SCSI), HSIC(High Speed Inter Chip), SCSI(Small Computer System Interface), PCI(Peripheral Component Interconnection), PCIe(PCI express), NVMe(Nonvolatile Memory express), UFS(Universal Flash Storage), SD(Secure Digital), MMC(Multi Media Card), Emmc(Embedded MMC) 등과 같은 다양한 통신 방식들 중 적어도 하나를 이용하여 저장 장치(200)와 통신하도록 구성될 수 있으나, 이에 제한되는 것은 아니다.
저장 장치(200)는 컨트롤러(210), 비휘발성 메모리 장치(230), 및 버퍼 메모리(250)를 포함할 수 있다.
컨트롤러(210)는 호스트(100)로부터 제공되는 다양한 명령들을 처리할 수 있다. 호스트(100)가 제공하는 다양한 명령들에는 복수의 스트림을 갖는 쓰기 명령이 포함될 수 있다. 컨트롤러(210)는 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하고 복수의 스트림 각각에 할당할 수 있다. 복수의 스트림 각각에 할당되는 쓰기 블록들은 비휘발성 메모리 장치(230)로부터 채널(예를 들어, 제1 채널(CH1), 제2 채널(CH2), 및/또는 제n 채널(CHn))을 통해 수신하여 할당할 수 있다.
컨트롤러(210)는 FPGA(Field Programmable Gate Array), ASIC(Application Specific Integrated Circuits) 등과 같은 회로로서 구현되거나 프로세서와 프로세서에 의해 수행되는 소프트웨어의 조합으로서 구현될 수 있으나, 컨트롤러(210)의 구현이 이에 제한되는 것은 아니다.
비휘발성 메모리 장치(230)는 제1 채널(CH1)을 통해 컨트롤러(210)와 통신하는 비휘발성 메모리들, 제2 채널(CH2)을 통해 컨트롤러와 통신하는 비휘발성 메모리들(NVM), 및 제n 채널(CHn)을 통해 컨트롤러와 통신하는 비휘발성 메모리들을 포함할 수 있다. 비휘발성 메모리 장치(230)와 컨트롤러(210) 사이의 채널들의 개수는 도 1에 제한되지 않는다. 또한, 비휘발성 메모리 장치(230) 내 비휘발성 메모리들의 개수 역시 도 1에 제한되지 않는다.
비휘발성 메모리들 각각은 낸드 플래시 메모리 셀, 노어 플래시 메모리 셀, RRAM(Resistive Random Access Memory) 셀, FRAM(Ferroelectric Random Access Memory), PRAM(Phase Change Random Access Memory) 셀, TRAM(Thyristor Random Access Memory) 셀, MRAM(Magnetic Random Access Memory) 셀 등과 같은 비휘발성 메모리 셀을 포함할 수 있으나, 이에 제한되는 것은 아니다.
버퍼 메모리(250)는 호스트(100)로부터 수신된 복수의 스트림, 복수의 스트림 각각에 대한 정보 또는 비휘발성 메모리 장치(230)로부터 수신된 데이터를 임시로 저장할 수 있다. 또한, 버퍼 메모리(250)는 저장 장치(200) 내 컨트롤러(210)가 계산한 복수의 스트림 정보(예를 들어, 복수의 스트림 각각에 할당되는 쓰기 블록의 개수)를 임시로 저장할 수 있다. 버퍼 메모리(250)가 임시로 저장할 수 있는 데이터들은 이에 제한되지 않는다. 예를 들어, 버퍼 메모리(250)는 호스트(100)의 가상 블록 어드레스(LBA; Logic Block Address)들과 비휘발성 메모리 장치(230)의 물리 블록 어드레스들(PBA; Physical Block Address)들과의 관계를 나타내는 맵핑 테이블과 같은 메타 데이터를 저장할 수도 있다. 버퍼 메모리(250)는 DRAM(Dynamic Random Access Memory) 셀, SRAM(Static Random Access Memory) 셀 등과 같은 휘발성 메모리 셀들을 포함할 수 있다.
이때, 스트림에 할당되는 쓰기 블록의 개수가 정적(static)으로 정해지게 되면, 저장 장치(200)의 유동적인 상황에 대처하여 쓰기 블록을 적정하게 할당하지 못해, 저장 장치(200)의 성능을 최대로 이끌어 낼 수 없게 될 수 있다.
따라서, 몇몇 실시예에 따른 저장 장치(200)는 호스트(100)로부터 제공되는 복수의 스트림들에 대한 실시간 정보(예를 들어, 호스트(100)가 제공하는 스트림별 성능 비율, 혹은 호스트(100)가 제공하는 스트림별 성능 비율과 스트림별 성능 등이 기록된 테이블 등)를 바탕으로, 복수의 스트림에 대해 동적으로 쓰기 블록을 할당하여, 저장 장치(200)가 수행할 수 있는 최대의 성능을 가져오도록 만들 수 있다. 또는, 몇몇 실시예에 따른 다른 저장 장치(200)는 복수의 스트림들에 대한 실시간 정보(예를 들어, 호스트(100)가 제공하는 스트림별 성능 비율, 혹은 호스트(100)가 제공하는 스트림별 성능 비율과 스트림별 성능 등이 기록된 테이블, 복수의 스트림 각각에 할당되는 쓰기 블록에 대한 데이터 쓰기 빈도 정보 등)를 바탕으로, 저장 장치(200) 스스로 복수의 스트림에 대한 쓰기 블록의 재할당이 필요한 지를 판단하여, 복수의 스트림들 각각에 할당되는 쓰기 블록의 개수를 계산하여, 이에 따라 복수의 스트림들 각각에 계산된 쓰기 블록들을 할당할 수 있다.
이하에서, 도 1 및 도 2를 통해, 컨트롤러(210)가 호스트(100)로부터 제공되는 복수의 스트림 각각에 대해 쓰기 블록들을 동적으로 할당하는 동작에 대해 설명한다.
도 1 및 도 2를 참조하면, 호스트(100)와 명령들(혹은, 데이터들)을 주고받는 컨트롤러(210)는 성능 요구 신호 수신기(212), 블록 계산기(214), 및/또는 블록 할당기(216)를 포함할 수 있다.
컨트롤러(210) 내의 성능 요구 신호 수신기(212), 블록 계산기(214), 및/또는 블록 할당기(216)는 FPGA 및/또는 ASIC 등과 같은 회로로서 구현되거나 프로세서와 프로세서에 의해 수행되는 소프트웨어의 조합으로서 구현될 수 있으나, 컨트롤러(210) 내의 성능 요구 신호 수신기(212), 블록 계산기(214), 및/또는 블록 할당기(216)의 구성이 이에 제한되는 것은 아니다.
몇몇 실시예들에 따른 저장 장치(200) 내의 컨트롤러(210)는 성능 요구 신호 수신기(212)를 통해 호스트(100)로부터 데이터 혹은 명령들을 수신 받을 수 있다. 이하에서는, 컨트롤러(210) 혹은 성능 요구 신호 수신기(212)가 호스트(100)로부터 수신하는 데이터 혹은 명령들에 포함되어 있는 복수의 스트림을 수신한다고 가정하고 설명한다. 비록, 도 2에는 호스트(100)가 전송하는 복수의 스트림을 컨트롤러(210) 내의 성능 요구 신호 수신기(212)가 수신하는 것으로 도시되었으나, 컨트롤러(210)는 복수의 스트림을 수신하기 위해 성능 요구 신호 수신기(212)가 필수적으로 필요한 것은 아니다. 즉, 컨트롤러(210) 스스로 호스트(100)로부터 복수의 스트림을 직접 수신할 수도 있다. 이하에서는 설명의 편의를 위해, 컨트롤러(210)와 호스트(100) 사이의 통신에 있어, 성능 요구 신호 수신기(212) 없이 컨트롤러(210)와 호스트(100) 사이에 직접적으로 통신하는 것을 가정하여 설명한다.
블록 계산기(214)는 복수의 스트림에 할당되는 쓰기 블록을 계산할 수 있다. 몇몇 실시예에 따른 블록 계산기(214)는 호스트(100)가 복수의 스트림 각각에 대한 성능 요청을 전송한 경우, 호스트(100)가 요구한 복수의 스트림 각각에 대한 성능을 만족할 수 있도록 복수의 스트림 각각에 할당되는 쓰기 블록을 계산할 수 있다. 이때, 호스트(100)는 컨트롤러(210) 혹은 성능 요구 신호 수신기(212)에 호스트(100)가 요구하는 복수의 스트림 각각에 대한 성능 요청과 함께, 복수의 스트림 각각의 성능이 저장 장치(200) 내에서 차지하는 성능 비율 정보를 컨트롤러(210)에 전송할 수 있다.
컨트롤러(210)는 복수의 스트림 각각이 저장 장치(200) 내에서 차지하는 성능 비율 정보를 토대로, 복수의 스트림 각각이 수행할 수 있는 성능을 계산할 수 있다. 복수의 스트림 각각이 수행할 수 있는 성능은 예를 들어, 대역폭(Bandwidth)일 수 있으나 이에 제한되지는 않는다. 이하에서, 복수의 스트림 각각이 수행할 수 있는 성능은 대역폭인 것으로 설명한다.
컨트롤러(210)는 복수의 스트림 각각이 수행할 수 있는 성능을 계산한 후, 계산된 성능을 다시 호스트(100)에 전달할 수 있다. 호스트(100)는 전달받은 복수의 스트림 각각이 수행할 수 있는 성능이 호스트(100)에서 요구했던 성능과 일치하는지를 판단할 수 있다. 호스트(100)는 전달받은 성능이, 요구했던 성능과 같거나 어느 정도 허용 가능한 범위 내의 오차를 가지고 있다면, 컨트롤러(210) 측에 승인 명령을 전달할 수 있다. 만약, 컨트롤러(210)가 승인 명령을 호스트(100)로부터 받는다면, 컨트롤러(210)는 컨트롤러(210) 내 블록 할당기(216)를 통해서, 복수의 스트림 각각에 대해 계산된 성능을 수행할 수 있도록 쓰기 블록을 할당할 수 있다. 이때, 복수의 스트림 각각에 대한 쓰기 블록의 할당은 블록 할당기(216)를 통해서도 가능하지만, 이에 제한되지 않는다. 즉, 컨트롤러(210)가 블록 할당기(216) 없이 직접적으로 계산된 쓰기 블록을 복수의 스트림 각각에 할당할 수도 있다.
컨트롤러(210)가 위와는 반대로, 호스트(100)로부터 승인 명령을 받지 못한다면, 컨트롤러(210)는 복수의 스트림 각각에 할당된 쓰기 블록의 개수를 새롭게 할당하지 않는다. 즉, 저장 장치(200) 혹은 컨트롤러(210)는 복수의 스트림 각각에 할당된 쓰기 블록의 개수를 그대로 유지할 수 있다.
이하의 도 3을 통해, 몇몇 실시예에 따른 저장 장치(200)가 호스트(100)로부터 제공되는 복수의 스트림에 대해 동적으로 쓰기 블록을 할당하여, 저장 장치(200)가 수행할 수 있는 최대의 성능을 가져오도록 만드는 동작을 흐름도를 통해서 살펴본다.
도 3은 몇몇 실시예에 따른 저장 장치 시스템 동작 방법을 설명하기 위한 예시적인 흐름도이다. 도 4는 몇몇 실시예에 따른 복수의 스트림 각각에 대한 정보를 설명하기 위한 예시적인 테이블이다. 도 5는 몇몇 실시예에 따른 스트림별 쓰기 블록의 동적 할당을 설명하기 위한 예시적인 블록도이다.
도 1 내지 도 3을 참조하면, 호스트(100)가 복수의 스트림 각각에 대한 성능 변화가 필요함을 인지(S100)할 수 있다.
호스트(100)는 복수의 스트림 각각에 대한 성능을 변화시키기 위해, 복수의 스트림 각각이 저장 장치(200) 내에서 차지하는 성능 비율 정보가 담긴 요청 신호를 저장 장치(200)에 전송할 수 있다(S200). 호스트(100)가 컨트롤러(210)로 전송하는, 복수의 스트림 각각이 저장 장치(200) 내에서 차지하는 성능 비율은 도 4의 제1 테이블의 스트림별 성능 비율(300)과 같을 수 있다.
도 4를 참조하면, 호스트(100)는 컨트롤러(210)에 복수의 스트림 각각이 저장 장치(200) 내에서 차지하는 성능 비율 즉 스트림별 성능 비율(300)에 대한 정보를 컨트롤러(210)에 전송할 수 있다.
예를 들어, 제1 테이블(Table 1)에서 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각이 차지하는 성능 비율 정보 즉, 스트림별 성능 비율(300)이 제1 스트림(Stream 1)이 10%, 제2 스트림(Stream 2)이 10%, 및 제3 스트림(Stream 3)이 80%를 차지하도록 호스트(100)가 컨트롤러(210)에 전송할 수 있다.
도 4의 스트림별 성능 비율(300)은 제1 스트림(Stream 1) 내지 제3 스트림(Stream 3) 사이의 비율에 대해서만 기재되었으나, 몇몇 실시예에 따른 스트림별 성능 비율(300)은 이에 제한되지 않고, 이보다 많은 스트림들 혹은 이보다 작은 스트림들 사이의 성능 비율일 수 있다. 또한, 도 4의 제1 테이블(Table 1)에 기재된 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 대한 성능 비율 즉, 스트림별 성능 비율(300)은 예시적인 것으로, 그 비율은 제1 테이블(Table 1)의 스트림별 성능 비율(300)에 기재된 숫자에 제한되지 않을 수 있다.
다시 도 1 내지 도 3을 참조하면, 컨트롤러(210)는 호스트(100)로부터 수신한 스트림별 성능 비율을 참조하여, 복수의 스트림 각각이 수행할 수 있는 성능을 계산할 수 있다(S300). 컨트롤러(210)는 복수의 스트림들 각각이 수행할 수 있는 성능을 계산하여, 계산된 값을 호스트(100)에 전달할 수 있다(S400). 컨트롤러(210)가 계산하는 복수의 스트림 각각이 수행할 수 있는 성능은 도 4의 제1 테이블(Table 1)의 스트림별 성능(400)과 같다.
도 4를 다시 참조하면, 컨트롤러(210)가 호스트(100)로부터 수신한 정보(예를 들어, 스트림별 성능 비율(300))을 바탕으로, 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 대한 성능을 계산할 수 있다.
예를 들어, 컨트롤러(210)는 스트림별 성능 비율(300)이 제1 스트림(Stream 1)이 10%, 제2 스트림(Stream 2)이 10%, 및 제3 스트림(Stream 3)이 80%를 차지하도록 복수의 스트림 각각이 가질 수 있는 스트림별 성능(400)을 계산한다고 가정한다. 이때, 컨트롤러(210)가 계산한 스트림별 성능(400)은 제1 스트림(Stream 1)의 대역폭이 100MB/s, 제2 스트림(Stream 2)의 대역폭이 100MB/s, 및 제3 스트림(Stream 3)의 대역폭이 800MB/s를 갖도록 계산한 결과일 수 있다.
도 4의 스트림별 성능(400)은 제1 스트림(Stream 1) 내지 제3 스트림(Stream 3) 사이의 비율에 대해서만 기재되었으나, 몇몇 실시예에 따른 스트림별 성능(400)은 이에 제한되지 않고, 이보다 많은 스트림들 혹은 이보다 작은 스트림들의 성능일 수 있다. 또한, 도 4의 제1 테이블(Table 1)에 기재된 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 대한 성능 즉, 스트림별 성능(400)은 예시적인 것으로, 그 성능 값은 제1 테이블(Table 1)의 스트림별 성능(400)에 기재된 숫자에 제한되지 않을 수 있다.
다시 도 1 내지 도 3을 참조하면, 호스트(100)는 저장 장치(200)가 전송한 복수의 스트림들 각각에 대한 성능을 살펴본 후, 호스트(100)가 단계 S100에서 필요했던 복수의 스트림들 각각의 성능이 맞는 지 확인할 수 있다. 호스트(100)는 단계 S100에서 필요했던 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각의 성능이, 저장 장치(200)가 단계 S400에서 전송한 복수의 스트림들 각각의 성능과 같거나, 허용할 수 있는 범위 내의 오차를 갖는 값이라면, 호스트(100)는 저장 장치(200)에 승인 명령을 전달할 수 있다(S500).
이때, 저장 장치(200)는 호스트(100)로부터 승인 명령을 전달받은 경우, 기존의 복수의 스트림 각각에 할당된 쓰기 블록의 개수를 재할당할 수 있다. 만약, 저장 장치(200)가 호스트(100)로부터 승인 명령을 전달받지 못한 경우엔, 기존의 복수의 스트림 각각에 할당된 쓰기 블록의 개수를 그대로 유지한다. 저장 장치(200)가 호스트(100)로부터 승인 명령을 전달받은 후의 복수의 스트림 각각에 대한 쓰기 블록의 개수는 도 4의 500과 같이 설정될 수 있다.
도 4를 또 다시 참조하면, 호스트(100)로부터 승인 명령을 전달받은 저장 장치(200)는 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 대한 쓰기 블록의 개수를 변경할 수 있다.
예를 들어, 제1 스트림(Stream 1)에 할당되는 쓰기 블록의 개수는 1개일 수 있고, 제2 스트림(Stream 2)에 할당되는 쓰기 블록의 개수는 1개일 수 있으며, 제3 스트림(Stream 3)에 할당되는 쓰기 블록의 개수는 8개일 수 있다.
복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각의 스트림별 성능(400)을 만족시키기 위해, 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 쓰기 블록을 할당하는 경우의 쓰기 블록의 개수는 본 도면에 제한되지 않는다. 예를 들어, 제1 스트림(Stream 1)에 할당되는 쓰기 블록의 개수가 2개, 제2 스트림(Stream 2)에 할당되는 쓰기 블록의 개수가 2개, 제3 스트림(Stream 3)에 할당되는 쓰기 블록의 개수가 16개일 수도 있다. 즉, 스트림별 성능(400)을 통해 계산된 복수의 스트림들 각각의 성능이 수행될 수 있도록 쓰기 블록이 복수의 스트림들 각각에 할당될 수만 있다면, 그 개수는 본 도면에 제한되지 않을 수 있다. 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각의 스트림별 성능(400)을 만족시키기 위해, 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 쓰기 블록을 재할당하는 동작을 도 5를 통해 조금 더 자세히 살펴본다.
도 1 내지 도 5를 참조하면, 단계 S100에서 호스트(100)가 복수의 스트림들 각각의 성능의 변경이 필요하다고 판단되는 시점의, 복수의 스트림들 각각에 할당된 쓰기 블록들이 A1과 같이 도시될 수 있다. 쓰기 블록들(600) 내의 쓰기 블록의 개수는 본 도면에서 총 10개(B1 내지 B10)로 도시되었으나, 쓰기 블록들(600) 내의 쓰기 블록의 개수는 본 도면에 제한되지 않는다. 예를 들어, 복수의 스트림들 각각에 대한 쓰기 블록의 재할당이 수행되기 전의 A1의 상황에서, 제1 스트림(Stream 1)에 할당되는 쓰기 블록의 개수는 총 세 개(B1, B2, 및 B3)일 수 있다. 또한, 제2 스트림(Stream 2)에 할당되는 쓰기 블록의 개수는 총 세 개(B4, B5, 및 B6)일 수 있다. 마지막으로, 제3 스트림(Stream 3)에 할당되는 쓰기 블록의 개수는 총 네 개(B7, B8, B9, 및 B10)일 수 있다.
본 도면에 도시된 복수의 스트림들 각각에 대한 쓰기 블록의 재할당이 수행되기 전의 A1의 상황은 본 도면에 제한되지 않는다.
이후, 저장 장치(200)가 호스트(100)로부터 수신한 스트림별 성능 비율(300)을 바탕으로 계산한 스트림별 성능(400)에 대해, 호스트(100)가 승인 명령을 저장 장치(200)에 전달한 경우, 저장 장치(200)는 복수의 스트림 각각에 제1 테이블의 500과 같이 쓰기 블록의 개수를 각각 할당할 수 있다. 예를 들어, 저장 장치(200)가 호스트(100)로부터 승인 명령을 수신한 경우, 저장 장치(200)는 제1 스트림(Stream 1)에 대해 한 개의 쓰기 블록(B1)을 할당할 수 있다. 또한, 저장 장치(200)는 제2 스트림(Stream 2)에 대해 한 개의 다른 쓰기 블록(B2)를 할당할 수 있다. 마지막으로, 저장 장치(200)는 제3 스트림(Stream 3)에 대해 나머지 8개의 쓰기 블록(B3 내지 B10)들을 할당할 수 있다.
즉, 저장 장치(200)가 호스트(100)로부터 승인 명령을 수신한 후, 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당된 쓰기 블록의 개수를 재할당함으로써, A2와 같은 형태의 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 쓰기 블록들이 재할당될 수 있다.
상술한 동작들에 대한 설명들에서, 쓰기 블록들의 할당의 주체를 저장 장치(200)로 서술하였으나, 컨트롤러(210)가 될 수 있음은 물론이다. 또한, 쓰기 블록들의 할당의 주체를 저장 장치(200)로 서술하였으나, 블록 할당기(216)가 될 수 있음은 물론이다. 마지막으로, 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당되는 쓰기 블록의 개수를 계산하는 주체를 저장 장치(200)로 설명하였으나, 그 주체는 컨트롤러(210) 혹은 블록 계산기(214)가 될 수 있음은 물론이다.
저장 장치(200)가 호스트(100)로부터 수신한 스트림별 성능 비율(300)과, 저장 장치(200)가 계산한 스트림별 성능(400), 및 저장 장치(200)가 계산한 스트림별 쓰기 블록들에 대한 정보가 담긴 제1 테이블(Table 1)은 몇몇 실시예에 따라 서로 다른 장소에 저장되어, 쓰기 블록의 재할당이 필요한 시점에 저장 장치(200), 자세히는 컨트롤러(210), 더 자세히는 블록 계산기(214)가 제1 테이블(Table 1)을 몇몇 실시예에 따라 저장된 서로 다른 장소에서 불러올 수 있다. 블록 계산기(214)가 제1 테이블(Table 1)을 불러오는 동작을 이하 도 6 내지 도 8을 통해 자세히 살펴본다.
도 6 내지 도 8은 몇몇 실시예에 따른 저장 장치가 도 4의 테이블을 송수신하는 동작을 설명하기 위한 예시적인 블록도이다.
도 1 내지 도 6을 참조하면, 컨트롤러(210)는 정보 저장 메모리(218)를 더 포함할 수 있다. 정보 저장 메모리(218)는 DRAM 셀 또는 SRAM 셀 등과 같은 휘발성 메모리 셀을 포함할 수 있다.
정보 저장 메모리(218)는 블록 계산기(214)가 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당되는 쓰기 블록의 개수를 계산한 후, 블록 계산기(214)로부터 제1 테이블(Table 1)을 수신하여 저장할 수 있다. 또는, 정보 저장 메모리(218)는 블록 계산기(214)가 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각의 스트림별 성능(400)을 계산한 후, 블록 계산기(214)로부터 스트림별 성능 비율(300) 정보와 스트림별 성능(400) 정보를 수신하여 저장할 수 있다. 마지막으로, 정보 저장 메모리(218)는 블록 계산기(214)가 호스트(100)로부터 수신한 스트림별 성능 비율(300) 정보를 바로 수신하여 저장할 수 있다.
즉, 블록 계산기(214)는 정보 저장 메모리(218)로부터 스트림별 성능 비율(300) 정보를 읽어들여, 스트림별 성능(400)을 계산할 수 있다. 또한, 블록 계산기(214)는 정보 저장 메모리(218)로부터 스트림별 성능(400)을 읽어들여, 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당되는 쓰기 블록의 개수를 계산할 수 있다.
도 1 내지 도 7을 참조하면, 컨트롤러(210)는 저장 장치(200) 내 버퍼 메모리(250)와 통신할 수 있다. 버퍼 메모리(250)는 DRAM 셀 또는 SRAM 셀 등과 같은 휘발성 메모리 셀을 포함할 수 있다.
버퍼 메모리(250)는 블록 계산기(214)가 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당되는 쓰기 블록의 개수를 계산한 후, 블록 계산기(214)로부터 제1 테이블(Table 1)을 수신하여 저장할 수 있다. 또는, 버퍼 메모리(250)는 블록 계산기(214)가 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각의 스트림별 성능(400)을 계산한 후, 블록 계산기(214)로부터 스트림별 성능 비율(300) 정보와 스트림별 성능(400) 정보를 수신하여 저장할 수 있다. 마지막으로, 버퍼 메모리(250)는 블록 계산기(214)가 호스트(100)로부터 수신한 스트림별 성능 비율(300) 정보를 바로 수신하여 저장할 수 있다. 즉, 블록 계산기(214)는 버퍼 메모리(250)로부터 스트림별 성능 비율(300) 정보를 읽어들여, 스트림별 성능(400)을 계산할 수 있다. 또한, 블록 계산기(214)는 버퍼 메모리(250)로부터 스트림별 성능(400)을 읽어들여, 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당되는 쓰기 블록의 개수를 계산할 수 있다.
도 1 내지 도 8을 참조하면, 컨트롤러(210)는 저장 장치(200) 내 비휘발성 메모리들(NVM)과 제1 채널(CH1)을 통해 통신할 수 있다. 비휘발성 메모리들(NVM) 각각은 낸드 플래시 메모리 셀, 노어 플래시 메모리 셀, RRAM 셀, FRAM, PRAM 셀, TRAM 셀, MRAM 셀 등과 같은 비휘발성 메모리 셀을 포함할 수 있으나, 이에 제한되는 것은 아니다.
또한, 도 8에서는 컨트롤러(210)와 비휘발성 메모리들(NVM)이 제1 채널(CH1)을 통해서 통신하는 것으로만 도시되었으나, 컨트롤러(210)와 비휘발성 메모리들(NVM)가 서로 통신하는 채널은 이에 제한되지 않는다.
비휘발성 메모리들(NVM)는 블록 계산기(214)가 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당되는 쓰기 블록의 개수를 계산한 후, 블록 계산기(214)로부터 제1 테이블(Table 1)을 수신하여 저장할 수 있다. 또는, 비휘발성 메모리들(NVM)는 블록 계산기(214)가 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각의 스트림별 성능(400)을 계산한 후, 블록 계산기(214)로부터 스트림별 성능 비율(300) 정보와 스트림별 성능(400) 정보를 수신하여 저장할 수 있다. 마지막으로, 비휘발성 메모리들(NVM)는 블록 계산기(214)가 호스트(100)로부터 수신한 스트림별 성능 비율(300) 정보를 바로 수신하여 저장할 수 있다. 즉, 블록 계산기(214)는 비휘발성 메모리들(NVM)로부터 스트림별 성능 비율(300) 정보를 읽어들여, 스트림별 성능(400)을 계산할 수 있다. 또한, 블록 계산기(214)는 비휘발성 메모리들(NVM)로부터 스트림별 성능(400)을 읽어들여, 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당되는 쓰기 블록의 개수를 계산할 수 있다.
몇몇 실시예에 따른 도 3에서의 저장 장치 시스템의 동작 방법과는 달리, 호스트에서 복수의 스트림들 각각에 대한 성능 변경이 필요하다고 인지하는 경우, 도 4의 제1 테이블과 같이, 복수의 스트림들 각각의 스트림별 성능 비율, 스트림별 성능, 및 스트림별 블록 개수 정보가 모두 반영된 테이블을 저장 장치(200)에 전송할 수 있다. 이때, 저장 장치는 기존의 테이블과 호스트로부터 가장 최근에 전송받은 테이블을 비교하여, 기존의 테이블을 수정할 지 수정하지 않을 지를 결정할 수 있다. 이에 대한 자세한 동작 방법을 이하의 도 9 및 도 10을 통해 살펴본다.
도 9는 도 4와는 다른 몇몇 실시예에 따른 복수의 스트림 각각에 대한 정보를 설명하기 위한 예시적인 테이블이다.
도 1 내지 도 9를 참조하면, 호스트(100)는 복수의 스트림들에 각각에 대한 성능 변경이 필요하다고 인지하는 경우, 복수의 스트림들 각각에 대한 제2 스트림별 성능 비율(300), 제2 스트림별 성능(400), 및 제2 스트림별 쓰기 블록들의 개수(510) 정보가 담긴 제2 테이블(Table 2)을 저장 장치(200)에 전송할 수 있다. 이때, 저장 장치(200), 자세히는 컨트롤러(210), 더 자세히는 블록 계산기(214)는 버퍼 메모리(250), 비휘발성 메모리들(NVM), 혹은 정보 저장 메모리(218)에 저장된 제1 테이블(Table 1)을 읽어와, 제2 테이블(Table 2)과 비교할 수 있다. 이때, 제1 테이블(Table 1)과 제2 테이블(Table 2)이 서로 다르다고 판단되는 경우, 저장 장치(200)는 호스트(100)에 비교 결과(즉, 서로 다르다는 판단 혹은 서로 같다는 판단)를 전송하고, 호스트(100)는 저장 장치(200)로부터 수신한 비교 결과에 대해 승인 명령을 전송하거나, 승인 명령을 전송하지 않을 수 있다.
호스트(100)가 저장 장치(200)로 승인 명령을 내리는 경우는, 제1 테이블(Table 1)과 제2 테이블(Table 2)이 서로 다른 경우라고 호스트(100)가 판단하는 경우일 수 있다. 그러나, 이에 제한되지 않고, 제1 테이블(Table 1)과 제2 테이블(Table 2)이 서로 다르더라도, 호스트(100)가 허용할 수 있는 오차 범위 내의 차이를 갖고 있다고 판단한 경우에는 승인 명령을 저장 장치(200)에 전송하지 않을 수 있다.
또한, 제1 테이블(Table 1)과 제2 테이블(Table 2)이 서로 같은 경우 호스트(100)는 저장 장치(200)에 승인 명령을 전송하지 않을 수 있으나, 이에 제한되지 않고 호스트(100)는 제2 테이블(Table 2)의 업데이트가 필요하다고 판단된 경우 승인 명령을 저장 장치(200)에 전송할 수도 있다.
저장 장치(200)가 호스트(100)로부터 승인 명령을 수신한 경우, 저장 장치(200), 자세히는 컨트롤러(210), 더 자세히는 블록 계산기(214)는 버퍼 메모리(250), 비휘발성 메모리들(NVM), 혹은 정보 저장 메모리(218)에 저장된 제1 테이블(Table 1)을 제2 테이블(Table 2)로 업데이트 할 수 있다. 또는, 호스트(100)로부터 승인 명령을 받은 이후, 저장 장치(200), 자세히는 컨트롤러(210), 더 자세히는 블록 계산기(214)는 제2 스트림별 성능 비율(300)을 바탕으로 다시 한번, 제2 스트림별 성능(400) 및 제2 스트림별 쓰기 블록들(510)을 계산하여 제2 테이블을 완성할 수 있다. 예를 들어, 호스트(100)가 요구하는 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각이 저장 장치(200) 내에서 차지하는 성능 비율 정보를 담은 제2 테이블(Table 2)에서, 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각이 저장 장치(200) 내에서 제1 스트림(Stream 1)이 10%, 제2 스트림(Stream 2)이 50%, 및 제3 스트림(Stream 3)이 40%를 차지할 수 있다. 즉 제2 스트림별 성능 비율(300)이 제2 테이블(Table 2)의 첫번째 행에 도시된 바와 같이 기록될 수 있다.
제2 스트림별 성능 비율(300)을 바탕으로 저장 장치(200), 자세히는 컨트롤러(210), 더 자세히는 블록 계산기(214)가 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각의 성능을 계산할 수 있다. 예를 들어, 제1 스트림(Stream 1)의 계산된 성능은 100MB/s, 제2 스트림(Stream 2)의 계산된 성능은 500MB/s, 및 제3 스트림(Stream 3)의 계산된 성능은 400MB/s일 수 있다. 이는 제2 스트림별 성능(400)으로, 제2 테이블(Table 2)의 두번째 행에 도시된 바와 같이 기록될 수 있다.
저장 장치(200), 자세히는 컨트롤러(210), 더 자세히는 블록 계산기(214)는 또한, 제2 스트림별 성능(400)을 바탕으로, 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당되는 쓰기 블록들의 개수를 계산할 수 있다. 예를 들어, 제1 스트림(Stream 1)에 할당되는 쓰기 블록은 1개, 제2 스트림(Stream 2)에 할당되는 쓰기 블록은 5개, 그리고 제3 스트림(Stream 3)에 할당되는 쓰기 블록은 4개로 계산될 수 있다. 이는 제2 스트림별 쓰기 블록들(510)로, 제2 테이블(Table 2)의 세번째 행에 도시된 바와 같이 기록될 수 있다.
이후, 저장 장치(200), 자세히는 컨트롤러(210), 더 자세히는 블록 계산기(214)는 제2 테이블에 기록된 쓰기 블록들(510)의 개수에 따라, 복수의 스트림들 각각에 쓰기 블록을 할당할 수 있다.
서로 다른 테이블을 비교함으로써, 복수의 스트림들 각각에 할당되는 쓰기 블록들을 재할당하는 몇몇 실시예에 따른 다른 저장 장치 시스템 동작 방법에 대해, 도 10을 통해 살펴본다.
도 10은 도 3과는 다른 몇몇 실시예에 따른 저장 장치 시스템 동작 방법을 설명하기 위한 예시적인 흐름도이다. 설명의 간략화를 위해, 상술한 설명과 중복되는 부분은 생략한다.
도 1 내지 도 10을 참조하면, 호스트(100)는 복수의 스트림들 각각의 성능의 변경이 필요함을 인지할 수 있다(S110). 이때, 호스트(100)는 복수의 스트림들 각각의 제2 스트림별 성능 비율(300), 제2 스트림별 성능(400), 및 제2 스트림별 할당되는 쓰기 블록들(510)의 정보가 담긴 제2 테이블(Table 2)을 저장 장치(200)에 전송할 수 있다.
저장 장치(200)는 버퍼 메모리(250), 비휘발성 메모리들(NVM), 혹은 정보 저장 메모리(218)에 저장된 제1 테이블(Table 1)을 읽어와, 호스트(100)로부터 전송 받은 제2 테이블(Table 2)을 제1 테이블(Table 1)과 비교할 수 있다(S310).
저장 장치(200)는 단계 S310에서 비교한 결과를 호스트(100)에 전송할 수 있다(S410). 호스트(100)는 저장 장치(200)로부터 전송받은 비교 결과를 토대로, 제1 테이블(Table 1)을 제2 테이블(Table 2)로 업데이트 할 지에 대한 결정을 하고, 제1 테이블(Table 1)을 제2 테이블(Table 2)로 업데이트 할 것으로 결정한 경우, 승인 명령을 저장 장치(200)에 전송할 수 있다(S510).
승인 명령을 수신한 저장 장치(200)는 제2 테이블(Table 2)에 기록된 쓰기 블록들(510)의 개수에 따라, 복수의 스트림들 각각에 쓰기 블록을 할당할 수 있다(S610).
상술한 몇몇 실시예들에 따른 저장 장치 시스템의 동작 방법은 호스트와 저장 장치 사이의 통신이 필요한 실시예들이다. 이하의 몇몇 실시예에 따른 저장 장치 시스템 동작 방법에서는 저장 장치가 스스로 복수의 스트림들 각각에 대한 쓰기 블록의 할당되는 개수의 조정 필요성을 인지하고, 저장 장치 스스로가 복수의 스트림들 각각에 대해 쓰기 블록들을 재할당하는 실시예들에 대해 설명한다.
도 11은 몇몇 실시예에 따른 복수의 스트림 각각에 대한 쓰기 빈도가 쓰인 쓰기 횟수 테이블이 시간에 따라 업데이트되는 동작을 설명하기 위한 예시적인 도면이다. 도 12는 몇몇 실시예에 따른 쓰기 횟수 테이블이 업데이트 됨에 따라 복수의 스트림 각각에 할당되는 쓰기 블록의 개수의 동적인 변화를 설명하기 위한 예시적인 도면이다.
도 1 내지 도 12를 참조하면, 컨트롤러(210)는 매 시점마다, 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당된 쓰기 블록들에, 데이터가 시간당 쓰이는 횟수를 기록한 쓰기 빈도 정보가 담긴 쓰기 횟수 테이블(예를 들어, 제1 쓰기 횟수 테이블(Write table 1), 제2 쓰기 횟수 테이블(Write table 2), 및/또는 제3 쓰기 횟수 테이블(Write table 3) 등)을 생성할 수 있다.
비록, 도 11에 도시된 쓰기 횟수 테이블은, 제1 시점(t1), 제2 시점(t2), 및 제3 시점(t3)에 대한 총 세 개의 쓰기 횟수 테이블에 대해서만 도시했으나, 컨트롤러(210)가 생성할 수 있는 쓰기 횟수 테이블의 개수는 이에 제한되지 않는다.
컨트롤러(210)는 매 시점마다 생성한 복수의 쓰기 횟수 테이블(예를 들어, 예를 들어, 제1 쓰기 횟수 테이블(Write table 1), 제2 쓰기 횟수 테이블(Write table 2), 및/또는 제3 쓰기 횟수 테이블(Write table 3) 등)을 버퍼 메모리(250), 정보 저장 메모리(218), 및/또는 비휘발성 메모리들(NVM)에 저장하고, 업데이트 할 수 있다. 이하에서는 설명의 편의를 위해, 컨트롤러(210)가 쓰기 횟수 테이블을 버퍼 메모리(250)에 저장하고 읽어오는 것으로 설명하나, 쓰기 횟수 테이블을 저장하고 읽어오는 장소가 버퍼 메모리(250)에 제한되지 않음은 물론이다.
구체적으로, 컨트롤러(210)는 제1 시점(t1)에, 제1 스트림(Stream 1)에 할당되는 쓰기 블록에 데이터가 시간당 10번 쓰이는 것을 확인하고, 이를 기록할 수 있다. 또한, 컨트롤러(210)는 제1 시점(t1)에, 제2 스트림(Stream 2)에 할당되는 쓰기 블록에 데이터가 시간당 10번 쓰이는 것을 확인하고, 이를 기록할 수 있다. 마지막으로, 컨트롤러(210)는 제1 시점(t1)에, 제3 스트림(Stream 3)에 할당되는 쓰기 블록에 데이터가 시간당 50번 쓰이는 것을 확인하고, 이를 기록할 수 있다.
컨트롤러(210)는 제1 시점(t1)에 기록된 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3)에 할당된 쓰기 블록에 데이터가 시간당 쓰이는 횟수를 기록한 제1 쓰기 횟수 테이블(Write table 1)을 버퍼 메모리(250)에 저장할 수 있다. 컨트롤러(210)는 기록한 즉시, 혹은 버퍼 메모리(250)에 제1 쓰기 횟수 테이블(Write table 1)을 저장한 이후 필요한 시점에 제1 쓰기 횟수 테이블(Write table 1)을 바탕으로, 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당되는 쓰기 블록들의 개수가 재할당이 필요한 지를 판단할 수 있다. 이때, 컨트롤러(210)는 제1 시점(t1)의 제1 쓰기 횟수 테이블(Write table 1)을 바탕으로, 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당되는 쓰기 블록들의 재할당이 필요하다고 판단되면, 블록 계산기(214)를 통해 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당되는 쓰기 블록들의 개수를 계산하고, 블록 할당기(216)를 통해, 혹은 컨트롤러(210)가 직접 계산된 쓰기 블록들을 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당할 수 있다. 이하에서는, 설명의 편의를 위해, 복수의 스트림들 각각에 할당되는 쓰기 블록의 개수를 계산하는 주체와, 계산된 쓰기 블록의 개수대로 복수의 스트림들 각각에 쓰기 블록을 할당하는 주체를 컨트롤러로 통칭하여 설명한다. 예를 들어, 컨트롤러(210)는 제1 시점(t1)에 제1 쓰기 횟수 테이블(Write table 1)을 바탕으로, 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당되는 쓰기 블록의 재할당이 필요하다고 판단한 경우를 가정한다. 컨트롤러(210)는 제1 스트림(Stream 1)에 대해선 1개의 쓰기 블록, 제2 스트림(Stream 2)에 대해선 1개의 쓰기 블록, 그리고 제3 스트림(Stream 3)에 대해선 5개의 쓰기 블록들이 필요하다고 계산할 수 있다. 이후, 컨트롤러(210)는 쓰기 블록들(600)을 각각의 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3)에 재할당 할 수 있다. 즉, 컨트롤러(210)는 제1 스트림(Stream 1)에 대해선 1개의 쓰기 블록(B1)을 할당하고, 제2 스트림(Stream 2)에 대해선 1개의 쓰기 블록(B2)을 할당하며, 제3 스트림(Stream 3)에 대해선 5개의 쓰기 블록들(B3 내지 B7)을 제1 시점(t1)에 할당할 수 있다.
컨트롤러(210)는 제2 시점(t2)에 기록된 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3)에 할당된 쓰기 블록에 데이터가 시간당 쓰이는 횟수를 기록한 제2 쓰기 횟수 테이블(Write table 2)을 버퍼 메모리(250)에 저장할 수 있다. 컨트롤러(210)는 기록한 즉시, 혹은 버퍼 메모리(250)에 제2 쓰기 횟수 테이블(Write table 2)을 저장한 이후 필요한 시점에 제2 쓰기 횟수 테이블(Write table 2)을 바탕으로, 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당되는 쓰기 블록들의 개수가 재할당이 필요한 지를 판단할 수 있다. 이때, 컨트롤러(210)는 제2 시점(t2)의 제2 쓰기 횟수 테이블(Write table 2)을 바탕으로 제1 쓰기 횟수 테이블(Write table 1)과 비교하여, 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당되는 쓰기 블록들의 재할당이 필요하다고 판단되면, 블록 계산기(214)를 통해 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당되는 쓰기 블록들의 개수를 계산하고, 블록 할당기(216)를 통해, 혹은 컨트롤러(210)가 직접 계산된 쓰기 블록들을 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당할 수 있다. 예를 들어, 컨트롤러(210)는 제2 시점(t2)에 제2 쓰기 횟수 테이블(Write table 2)을 바탕으로 제1 쓰기 횟수 테이블(Write table 1)과 비교하여, 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당되는 쓰기 블록의 재할당이 필요하다고 판단한 경우를 가정한다. 컨트롤러(210)는 제1 스트림(Stream 1)에 대해선 1개의 쓰기 블록, 제2 스트림(Stream 2)에 대해선 5개의 쓰기 블록, 그리고 제3 스트림(Stream 3)에 대해선 1개의 쓰기 블록들이 필요하다고 계산할 수 있다. 이후, 컨트롤러(210)는 쓰기 블록들(600)을 각각의 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3)에 재할당 할 수 있다. 즉, 컨트롤러(210)는 제1 스트림(Stream 1)에 대해선 1개의 쓰기 블록(B1)을 할당하고, 제2 스트림(Stream 2)에 대해선 5개의 쓰기 블록(B2 내지 B6)을 할당하며, 제3 스트림(Stream 3)에 대해선 1개의 쓰기 블록들(B7)을 제2 시점(t2)에 할당할 수 있다.
컨트롤러(210)는 제3 시점(t3)에 기록된 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3)에 할당된 쓰기 블록에 데이터가 시간당 쓰이는 횟수를 기록한 제3 쓰기 횟수 테이블(Write table 3)을 버퍼 메모리(250)에 저장할 수 있다. 컨트롤러(210)는 기록한 즉시, 혹은 버퍼 메모리(250)에 제3 쓰기 횟수 테이블(Write table 3)을 저장한 이후 필요한 시점에 제3 쓰기 횟수 테이블(Write table 3)을 바탕으로, 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당되는 쓰기 블록들의 개수가 재할당이 필요한 지를 판단할 수 있다. 이때, 컨트롤러(210)는 제3 시점(t3)의 제3 쓰기 횟수 테이블(Write table 3)을 바탕으로 제2 쓰기 횟수 테이블(Write table 2)과 비교하여, 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당되는 쓰기 블록들의 재할당이 필요하다고 판단되면, 블록 계산기(214)를 통해 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당되는 쓰기 블록들의 개수를 계산하고, 블록 할당기(216)를 통해, 혹은 컨트롤러(210)가 직접 계산된 쓰기 블록들을 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당할 수 있다. 예를 들어, 컨트롤러(210)는 제3 시점(t3)에 제3 쓰기 횟수 테이블(Write table 3)을 바탕으로 제2 쓰기 횟수 테이블(Write table 2)과 비교하여, 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당되는 쓰기 블록의 재할당이 필요하다고 판단한 경우를 가정한다. 컨트롤러(210)는 제1 스트림(Stream 1)에 대해선 1개의 쓰기 블록, 제1 스트림(Stream 1)에 대해선 1개의 쓰기 블록, 그리고 제3 스트림(Stream 3)에 대해선 5개의 쓰기 블록들이 필요하다고 계산할 수 있다. 이후, 컨트롤러(210)는 쓰기 블록들(600)을 각각의 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3)에 재할당 할 수 있다. 즉, 컨트롤러(210)는 제1 스트림(Stream 1)에 대해선 1개의 쓰기 블록(B1)을 할당하고, 제2 스트림(Stream 2)에 대해선 1개의 쓰기 블록(B2)을 할당하며, 제3 스트림(Stream 3)에 대해선 5개의 쓰기 블록들(B3 내지 B7)을 제3 시점(t3)에 할당할 수 있다.
도 13은 몇몇 실시예에 따른 저장 장치 시스템을 설명하기 위한 예시적인 블록도이다. 도 14는 몇몇 실시예에 따른 복수의 스트림 각각의 활성화 여부와 복수의 스트림 각각에 할당된 쓰기 블록 정보를 포함하는 블록 테이블을 설명하기 위한 예시적인 도면이다. 도 15는 도 14의 블록 테이블을 바탕으로, 활성화된 스트림에 동적으로 쓰기 블록을 할당함으로써 업데이트되는 블록 테이블을 설명하기 위한 도면이다.
도 13 내지 도 15을 참조하면, 도 2와 비교했을 때, 몇몇 실시예에 따른 저장 장치의 컨트롤러(210)는 블록 풀(220)을 더 포함할 수 있다.
몇몇 실시예에 따른 저장 장치 시스템 내의 복수의 스트림들 각각에는 일정한 개수의 쓰기 블록들이 할당되어 있을 수 있다. 이때, 복수의 스트림들 모두가 활성화되어 있는 경우도 존재하지만, 복수의 스트림들 중 일부만 활성된 경우도 존재할 수 있다. 즉, 이미 복수의 스트림들에 대해 쓰기 블록들이 일정 개수 할당되어 있지만, 비활성화된 일부의 스트림들의 쓰기 블록들은 사용되지 않은 채로 존재할 수 있는 것이다. 따라서, 현재 활성화된 스트림에 대해서 최대의 성능을 발휘하기 위해, 현재 활성화되지 않은 스트림에 할당된 쓰기 블록들을 현재 활성화된 스트림에 할당시켜, 몇몇 실시예에 따른 저장 장치 시스템 전체의 성능을 향상시킬 수 있다.
몇몇 실시예에 따른 저장 장치 시스템의 컨트롤러(210)는, 복수의 스트림들 각각에 대한 활성화 여부를 판단하기 위해, 복수의 스트림들 각각에 할당된 쓰기 블록들과, 복수의 스트림들 각각에 대한 활성화 여부를 기록한 블록 테이블(Block table)을 저장할 수 있다. 이때, 블록 테이블(Block table)은 컨트롤러(210) 내에 존재하는 별도의 블록 풀(220)에 저장될 수 있다. 블록 풀(220)은 DRAM 셀, SRAM 셀 등과 같은 휘발성 메모리 셀을 포함할 수 있으나, 이에 제한되는 것은 아니다.
블록 풀(220)은 복수의 스트림들 각각에 대한 쓰기 블록이 할당된 이후에 컨트롤러(210) 혹은 블록 할당기(216)를 통해 그 할당 정보를 수신할 수 있다. 즉, 블록 풀(220)에는 도 14의 블록 테이블(Block table)과 같이 복수의 스트림들(Stream 1, Stream 2, 및 Stream 3) 각각에 할당된 쓰기 블록의 정보를 포함할 수 있다. 또한, 블록 테이블(Block table)에는 활성화된 쓰기 블록들(예를 들어, B0 내지 B4)과 활성화되지 않은 쓰기 블록들(예를 들어, B5 내지 B7)을 구분시킬 수 있다. 도 14에는 활성화된 쓰기 블록들(예를 들어, B0 내지 B4)에 대해선 1값을 부여하나, 활성화된 쓰기 블록들과 비활성화된 쓰기 블록들을 구분하는 방법은 이에 제한되지 않는다. 마지막으로, 블록 테이블(Block table)은 복수의 스트림들 중 활성화된 스트림에 대해 도 14와 같이 "Active"함을 식별할 수 있도록 구분해줄 수 있다. 즉, 도 14의 블록 테이블(Block table)의 경우 제1 스트림(Stream 1)이 활성화된 것을 알 수 있다.
컨트롤러(210) 혹은 블록 할당기(216)는 복수의 스트림들 각각에 대한 쓰기 블록의 할당을 마친 후, 블록 풀(220)의 블록 테이블(Block table) 정보를 불러올 수 있다. 도 14의 블록 테이블(Block table)을 예를 들면, 컨트롤러(210) 혹은 블록 할당기(216)는 도 14의 블록 테이블(Block table)을 통해, 현재 활성화된 쓰기 블록들이 B0 내지 B4임을 확인하고, 현재 비활성화된 스트림은 제2 스트림(Stream 2)과 제3 스트림(Stream 3)임을 확인할 수 있다.
이후, 컨트롤러(210) 혹은 블록 할당기(216)는 도 14의 블록 테이블(Block table)을 바탕으로, 현재 활성화된 블록들(B0 내지 B4) 중에서, 현재 비활성화된 제2 스트림(Stream 2) 및 제3 스트림(Stream 3)에 할당된 쓰기 블록들(B2 내지 B4)를 제1 스트림(Stream 1)에 할당할 수 있다.
컨트롤러(210) 혹은 블록 할당기(216)는 활성화된 제1 스트림(Stream 1), 활성화된 모든 쓰기 블록들(B0 내지 B4)을 할당함으로써, 도 14의 블록 테이블(Block table)을 도 15의 블록 테이블(Block table)로 업데이트 할 수 있다. 컨트롤러(210) 혹은 블록 할당기(216)는 업데이트된 도 15의 블록 테이블(Block table)을 블록 풀(220)에 전송할 수 있다.
도 14 및 도 15의 블록 테이블(Block table)은 예시적인 것으로, 그 활성화된 스트림과 복수의 스트림들 개수 및 각각의 스트림들에 할당된 쓰기 블록들의 개수는 본 도면들에 제한되지 않는다.
이상 첨부된 도면을 참조하여 본 발명의 실시예들을 설명하였으나, 본 발명은 상기 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 제조될 수 있으며, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명의 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다.
200: 저장 장치
210: 컨트롤러
214: 블록 계산기
216: 블록 할당기
218: 정보 저장 메모리 220: 블록 풀
218: 정보 저장 메모리 220: 블록 풀
Claims (20)
- 복수의 비휘발성 메모리를 포함하는 비휘발성 메모리 장치;
외부로부터 제공되는 복수의 스트림에 저장될, 상기 비휘발성 메모리 장치의 쓰기 블록을 할당하는 컨트롤러; 및
상기 비휘발성 메모리와 다른 종류의 메모리를 포함하고, 상기 복수의 스트림에 대한 쓰기 블록 할당 결과를 저장하는 버퍼 메모리를 포함하되,
상기 컨트롤러는,
상기 버퍼 메모리에 저장된 상기 복수의 스트림에 대한 쓰기 블록 할당 결과를 바탕으로, 상기 복수의 스트림에 저장될 상기 비휘발성 메모리 장치의 쓰기 블록을 재할당하는 저장 장치. - 제 1항에 있어서,
상기 컨트롤러는,
상기 복수의 스트림에 재할당될 상기 쓰기 블록의 개수를 계산하는 블록 계산기와,
상기 쓰기 블록의 개수를 기반으로 상기 복수의 스트림 각각에 상기 쓰기 블록을 재할당하는 블록 할당기를 포함하는 저장 장치. - 제 2항에 있어서,
상기 컨트롤러는,
상기 복수의 스트림 각각에 할당된 쓰기 블록 정보가 기록된 블록 테이블을 저장하는 블록 풀을 더 포함하되,
상기 블록 풀은,
상기 블록 할당기로부터 현재 활성화된 스트림 정보를 수신하고,
현재 활성화되지 않은 스트림에 대한 쓰기 블록 정보를 상기 블록 할당기에 전송하며,
상기 블록 할당기는 상기 현재 활성화되지 않은 스트림에 할당된 쓰기 블록을 상기 현재 황성화된 스트림에 할당하는 저장 장치. - 제 1항에 있어서,
상기 컨트롤러는, 상기 복수의 스트림에 대한 실시간 정보를 저장하는 정보 저장 메모리를 더 포함하되,
상기 복수의 스트림에 대한 실시간 정보는,
상기 복수의 스트림 각각에 할당되는 쓰기 블록에 대한 데이터 쓰기 빈도 정보이며, 상기 쓰기 빈도 정보는 쓰기 횟수 테이블에 기록되고,
상기 쓰기 횟수 테이블은 상기 정보 저장 메모리에 저장되는 저장 장치. - 제 4항에 있어서,
제1 시점의 제1 쓰기 횟수 테이블은 제2 시점에 제2 쓰기 횟수 테이블로 업데이트되며,
상기 컨트롤러는,
상기 제2 쓰기 횟수 테이블을 기반으로 상기 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하고,
상기 계산된 쓰기 블록의 개수를 상기 복수의 스트림 각각에 할당하는 저장 장치. - 제 1항에 있어서,
상기 컨트롤러는 상기 복수의 스트림에 대한 실시간 정보를 상기 외부로부터 수신하되,
상기 복수의 스트림에 대한 실시간 정보는,
상기 복수의 스트림 각각이 차지하는 성능 비율 정보를 포함하며,
상기 컨트롤러는,
상기 성능 비율 정보를 기반으로 상기 복수의 스트림 각각이 수행할 수 있는 성능을 계산하며,
상기 계산된 성능을 바탕으로, 상기 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하고,
상기 계산된 쓰기 블록의 개수를 상기 복수의 스트림 각각에 할당하는 저장 장치. - 제 6항에 있어서,
상기 계산된 성능은 상기 복수의 스트림 각각의 전송 속도인 저장 장치. - 제 1항에 있어서,
상기 복수의 스트림에 대한 쓰기 블록 할당 결과는 상기 비휘발성 메모리 장치에 포함된 저장 장치. - 복수의 스트림과, 상기 복수의 스트림에 대한 실시간 정보를 출력하는 호스트; 및
상기 호스트로부터 상기 복수의 스트림과, 상기 복수의 스트림에 대한 실시간 정보를 수신하는 저장 장치를 포함하되,
상기 저장 장치는,
복수의 비휘발성 메모리를 포함하는 비휘발성 메모리 장치와,
상기 호스트로부터 제공된 상기 복수의 스트림에 대한 실시간 정보를 바탕으로 상기 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하고, 상기 계산 결과를 바탕으로 상기 복수의 스트림 각각에 대응하여, 상기 복수의 스트림에 저장될 상기 비휘발성 메모리 장치의 쓰기 블록을 할당하는 컨트롤러를 포함하는 저장 장치 시스템. - 제 9항에 있어서,
상기 호스트는, 상기 호스트가 요구하는 상기 복수의 스트림 각각이 차지하는 성능 비율 정보를 상기 저장 장치에 전달하고,
상기 저장 장치는 상기 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하는 블록 계산기를 포함하며,
상기 블록 계산기를 통해, 상기 성능 비율 정보를 기반으로 상기 복수의 스트림 각각이 수행할 수 있는 성능을 계산하여 상기 호스트에 전달하고,
상기 호스트는, 상기 성능에 대한 승인 여부를 상기 저장 장치에 전달하며,
상기 저장 장치는 상기 호스트로부터 승인을 전달받으면, 상기 성능을 바탕으로 상기 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하는 저장 장치 시스템. - 제 9항에 있어서,
상기 호스트가 요구하는 상기 복수의 스트림에 대한 실시간 정보를 제1 정보로 정의하고,
상기 저장 장치에 현재 저장된 상기 복수의 스트림에 대한 실시간 정보를 제2 정보로 정의고,
상기 저장 장치는 상기 제1 정보를 수신하고,
상기 제1 정보와 상기 제2 정보를 비교하여 서로 다른 경우,
상기 호스트에 상기 제2 정보를 수정할 것을 요청하고,
상기 호스트가 상기 수정 요청에 대해 스인한 경우,
상기 저장 장치는 상기 제2 정보를 상기 제1 정보로 수정하는 저장 장치 시스템. - 제 11항에 있어서,
상기 복수의 스트림에 대한 실시간 정보는,
상기 복수의 스트림 각각이 차지하는 성능 비율 정보,
상기 복수의 스트림 각각의 성능, 및
상기 복수의 스트림 각각에 할당되는 쓰기 블록을 포함하는 저장 장치 시스템. - 제 9항에 있어서,
상기 컨트롤러는,
상기 쓰기 블록의 개수를 계산하는 블록 계산기와,
상기 블록 계산기가 계산한 상기 쓰기 블록의 개수를 기반으로 상기 복수의 스트림 각각에 상기 쓰기 블록을 할당하는 블록 할당기를 더 포함하는 저장 장치 시스템. - 제 13항에 있어서,
상기 컨트롤러는,
상기 복수의 스트림 각각에 할당된 쓰기 블록 정보가 기록된 블록 테이블을 저장하는 블록 풀을 더 포함하되,
상기 블록 풀은,
상기 블록 할당기로부터 현재 활성화된 스트림 정보를 수신하고,
현재 활성화되지 않은 스트림에 대한 쓰기 블록 정보를 상기 블록 할당기에 전송하며,
상기 블록 할당기는 상기 현재 활성화되지 않은 스트림에 할당된 쓰기 블록을, 상기 현재 활성화된 스트림에 할당하는 저장 장치 시스템. - 제 9항에 있어서,
상기 컨트롤러는, 상기 복수의 스트림에 대한 실시간 정보를 저장하는 정보 저장 메모리를 더 포함하되,
상기 복수의 스트림에 대한 실시간 정보는,
상기 복수의 스트림 각각에 할당되는 쓰기 블록에 대한 데이터의 쓰기 빈도 정보이며, 상기 쓰기 빈도 정보는 쓰기 횟수 테이블에 기록되고,
상기 쓰기 횟수 테이블은 상기 정보 저장 메모리에 저장되는 저장 장치 시스템. - 제 15항에 있어서,
제1 시점의 제1 쓰기 횟수 테이블은 제2 시점에 제2 쓰기 횟수 테이블로 업데이트되며,
상기 컨트롤러는 상기 제2 쓰기 횟수 테이블을 기반으로 상기 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하는 저장 장치 시스템. - 호스트 메모리, 상기 호스트 메모리에 로드된 복수의 소프트웨어를 실행하는 프로세싱 유닛, 및 상기 호스트 메모리와 상기 프로세싱 유닛으로부터 수신한 데이터를 외부에 송신하는 인터페이스 회로를 포함하는 호스트; 및
상기 호스트와 상기 데이터를 주고받는 저장 장치를 포함하되,
상기 저장 장치는,
복수의 스트림에 대한 실시간 정보를 기반으로 상기 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하는 블록 계산기를 포함하고, 상기 복수의 스트림 각각에 쓰기 블록을 할당하는 컨트롤러와,
상기 컨트롤러와 채널을 통해 상기 데이터를 주고 받고, 복수의 비휘발성 메모리를 포함하는 메모리 장치와,
상기 비휘발성 메모리와 다른 메모리를 포함하는 버퍼 메모리를 포함하는 저장 장치 시스템. - 제 17항에 있어서,
상기 컨트롤러는,
상기 블록 계산기가 계산한 상기 쓰기 블록의 개수를 수신하고,
상기 쓰기 블록의 개수를 기반으로 상기 복수의 스트림 각각에 상기 쓰기 블록을 할당하는 블록 할당기를 더 포함하는 저장 장치 시스템. - 제 17항에 있어서,
상기 컨트롤러는, 상기 복수의 스트림에 대한 실시간 정보를 저장하는 정보 저장 메모리를 더 포함하되,
상기 복수의 스트림에 대한 실시간 정보는,
상기 복수의 스트림 각각에 대한 쓰기 빈도 정보이며, 상기 쓰기 빈도 정보는 쓰기 횟수 테이블에 기록되고,
상기 쓰기 횟수 테이블은 상기 정보 저장 메모리에 저장되는 저장 장치 시스템. - 제 17항에 있어서,
상기 호스트는, 상기 호스트가 상기 복수의 스트림 각각에 요구하는 성능 비율 정보를 상기 저장 장치에 전달하고,
상기 저장 장치는, 상기 블록 계산기를 통해, 상기 성능 비율 정보를 기반으로 상기 복수의 스트림 각각이 수행할 수 있는 성능을 계산하여 상기 호스트에 전달하고,
상기 호스트는, 상기 계산된 성능에 대한 승인 여부를 상기 저장 장치에 전달하며,
상기 저장 장치는 상기 호스트로부터 승인을 전달받으면, 상기 계산된 성능을 바탕으로 상기 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하는 저장 장치 시스템.
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020190143096A KR20210056520A (ko) | 2019-11-11 | 2019-11-11 | 저장 장치 및 저장 장치 시스템과 그 동작 방법 |
DE102020118858.7A DE102020118858A1 (de) | 2019-11-11 | 2020-07-16 | Speichervorrichtung und speichersystem und zugehöriges betriebsverfahren |
US16/987,563 US11385812B2 (en) | 2019-11-11 | 2020-08-07 | Storage device, storage system, and operating method thereof capable of dynamically allocating write blocks to a stream |
US17/842,181 US11899947B2 (en) | 2019-11-11 | 2022-06-16 | Storage device, storage system, and operating method thereof capable of dynamically allocating write blocks to a stream |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020190143096A KR20210056520A (ko) | 2019-11-11 | 2019-11-11 | 저장 장치 및 저장 장치 시스템과 그 동작 방법 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20210056520A true KR20210056520A (ko) | 2021-05-20 |
Family
ID=75584096
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020190143096A KR20210056520A (ko) | 2019-11-11 | 2019-11-11 | 저장 장치 및 저장 장치 시스템과 그 동작 방법 |
Country Status (3)
Country | Link |
---|---|
US (2) | US11385812B2 (ko) |
KR (1) | KR20210056520A (ko) |
DE (1) | DE102020118858A1 (ko) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20230064781A1 (en) * | 2021-08-31 | 2023-03-02 | Micron Technology, Inc. | Dynamic buffer limit for at-risk data |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6490250B1 (en) * | 1999-03-09 | 2002-12-03 | Conexant Systems, Inc. | Elementary stream multiplexer |
US7139873B1 (en) * | 2001-06-08 | 2006-11-21 | Maxtor Corporation | System and method for caching data streams on a storage media |
US20070177519A1 (en) * | 2006-01-30 | 2007-08-02 | Thomsen Jan H | Systems and methods for transcoding bit streams |
US8259738B2 (en) * | 2007-05-01 | 2012-09-04 | Net Navigation Systems, Llc | Channel service manager with priority queuing |
US9547589B2 (en) | 2008-06-18 | 2017-01-17 | Super Talent Technology, Corp. | Endurance translation layer (ETL) and diversion of temp files for reduced flash wear of a super-endurance solid-state drive |
US8407400B2 (en) | 2008-11-12 | 2013-03-26 | Micron Technology, Inc. | Dynamic SLC/MLC blocks allocations for non-volatile memory |
US8949568B2 (en) | 2011-05-24 | 2015-02-03 | Agency For Science, Technology And Research | Memory storage device, and a related zone-based block management and mapping method |
US8700961B2 (en) | 2011-12-20 | 2014-04-15 | Sandisk Technologies Inc. | Controller and method for virtual LUN assignment for improved memory bank mapping |
US9128820B1 (en) | 2012-06-18 | 2015-09-08 | Western Digital Technologies, Inc. | File management among different zones of storage media |
US10691531B2 (en) | 2014-12-04 | 2020-06-23 | Western Digital Technologies, Inc. | Systems and methods for multi-zone data tiering for endurance extension in solid state drives |
US10049035B1 (en) * | 2015-03-10 | 2018-08-14 | Reniac, Inc. | Stream memory management unit (SMMU) |
US9880780B2 (en) | 2015-11-30 | 2018-01-30 | Samsung Electronics Co., Ltd. | Enhanced multi-stream operations |
US10101939B2 (en) | 2016-03-09 | 2018-10-16 | Toshiba Memory Corporation | Storage system having a host that manages physical data locations of a storage device |
US11269764B2 (en) | 2017-03-21 | 2022-03-08 | Western Digital Technologies, Inc. | Storage system and method for adaptive scheduling of background operations |
US10732838B2 (en) * | 2017-11-29 | 2020-08-04 | Western Digital Technologies, Inc. | Logical grouping for hybrid dual write |
-
2019
- 2019-11-11 KR KR1020190143096A patent/KR20210056520A/ko unknown
-
2020
- 2020-07-16 DE DE102020118858.7A patent/DE102020118858A1/de active Pending
- 2020-08-07 US US16/987,563 patent/US11385812B2/en active Active
-
2022
- 2022-06-16 US US17/842,181 patent/US11899947B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US20210141546A1 (en) | 2021-05-13 |
US11899947B2 (en) | 2024-02-13 |
US20220308773A1 (en) | 2022-09-29 |
US11385812B2 (en) | 2022-07-12 |
DE102020118858A1 (de) | 2021-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10534560B2 (en) | Data storage device and data processing system having the same | |
US10564872B2 (en) | System and method for dynamic allocation to a host of memory device controller memory resources | |
US11501843B2 (en) | Storage device that uses a host memory buffer and a memory management method including the same | |
US9329804B2 (en) | System and method for micro-tiering in non-volatile memory | |
KR102417977B1 (ko) | 메모리 시스템 및 그것의 동작 방법 | |
CN109101185B (zh) | 固态存储设备及其写命令和读命令处理方法 | |
US11635901B2 (en) | Data storage device, and non-volatile memory control method | |
CN102279712A (zh) | 一种适用于互联网存储系统的存储控制方法、系统和装置 | |
US20220261171A1 (en) | Storage devices, data storage systems and methods of operating storage devices | |
TW201905712A (zh) | 資料儲存裝置與資料儲存方法 | |
US11429314B2 (en) | Storage device, storage system and operating method thereof | |
KR20190130831A (ko) | 컨트롤러 및 이를 포함하는 메모리 시스템 | |
CN111913654B (zh) | 控制器及具有其的存储器系统 | |
US10310758B2 (en) | Storage system and storage control method | |
CN115458013A (zh) | 存储装置及其操作方法 | |
US11899947B2 (en) | Storage device, storage system, and operating method thereof capable of dynamically allocating write blocks to a stream | |
CN112286838A (zh) | 存储设备可配置的映射粒度系统 | |
KR102434840B1 (ko) | 데이터 저장 장치 | |
US20180364946A1 (en) | Data storage device | |
US20220283912A1 (en) | Storage device, operating method of storage device, and electronic device including storage device | |
KR20220076803A (ko) | 데이터 저장 장치 및 그것의 동작 방법 | |
US20230359578A1 (en) | Computing system including cxl switch, memory device and storage device and operating method thereof | |
US20240160575A1 (en) | Storage device for load balancing and method therefor | |
KR20220135786A (ko) | 메모리 시스템에 포함된 복수의 메모리 장치에서 수행되는 동작에 대해 스케줄링하는 장치 및 방법 |