KR20210056520A - 저장 장치 및 저장 장치 시스템과 그 동작 방법 - Google Patents

저장 장치 및 저장 장치 시스템과 그 동작 방법 Download PDF

Info

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
Application number
KR1020190143096A
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 KR1020190143096A priority Critical patent/KR20210056520A/ko
Priority to DE102020118858.7A priority patent/DE102020118858A1/de
Priority to US16/987,563 priority patent/US11385812B2/en
Publication of KR20210056520A publication Critical patent/KR20210056520A/ko
Priority to US17/842,181 priority patent/US11899947B2/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/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/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/0658Controller construction 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

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

저장 장치 및 저장 장치 시스템과 그 동작 방법{Storage device and storage device system and the operating method thereof}
본 발명은 저장 장치 및 저장 장치 시스템과 그 동작 방법에 관한 것이다.
저장 장치는 비휘발성 저장 매체로서, 저장 장치에 저장된 데이터는 전원 공급에 관계없이 영구적으로 혹은 반영구적으로 보존될 수 있다. 저장 장치는 기계적으로 동작하는 대신에 반도체 메모리와 같이 전기적으로 동작할 수 있다.
저장 장치를 사용하는 호스트는 어플리케이션에 따라 다양한 종류의 데이터를 생성할 수 있다. 호스트는 저장 장치의 동작을 개선하기 위해 데이터와 함께 데이터에 관한 정보를 저장 장치에 제공할 수 있다.
저장 장치는, 호스트가 제공한 데이터에 관한 정보를 통해, 저장 장치 내에 존재하는 비휘발성 메모리 블록(혹은, 쓰기 블록이라고 칭할 수도 있다.)을 각각의 데이터에 할당할 수 있다. 하지만, 쓰기 블록이 저장 장치가 수행할 수 있는 최대의 성능을 발휘할 수 있도록 데이터에 관한 정보(예를 들면, 스트림)에 할당되지 않을 수 있다. 즉, 호스트 및/또는 저장 장치는 데이터에 관한 정보(예를 들면, 스트림)에 할당된 쓰기 블록의 개수를 호스트 및/또는 저장 장치의 상황에 맞게 동적으로 변경될 필요가 있다.
본 발명이 해결하고자 하는 기술적 과제는 스트림에 할당되는 쓰기(wirte) 블록을 동적으로 계산하여 할당하는 저장 장치를 제공하는 것이다.
본 발명이 해결하고자 하는 다른 기술적 과제는 스트림에 할당되는 쓰기(wirte) 블록을 동적으로 계산하여 할당하는 저장 장치 시스템을 제공하는 것이다.
본 발명이 해결하고자 하는 또다른 기술적 과제는 스트림에 할당되는 쓰기(wirte) 블록을 동적으로 계산하여 할당하는 저장 장치 시스템 동작 방법을 제공하는 것이다.
본 발명의 기술적 과제들은 이상에서 언급한 기술적 과제로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
상기 기술적 과제를 달성하기 위한 본 발명의 몇몇 실시예에 따른 저장 장치는, 복수의 비휘발성 메모리를 포함하는 비휘발성 메모리 장치, 외부로부터 제공되는 복수의 스트림에 저장될, 비휘발성 메모리 장치의 쓰기 블록을 할당하는 컨트롤러, 및 비휘발성 메모리와 다른 종류의 메모리를 포함하고, 복수의 스트림에 대한 쓰기 블록 할당 결과를 저장하는 버퍼 메모리를 포함하되, 컨트롤러는, 버퍼 메모리에 저장된 복수의 스트림에 대한 쓰기 블록 할당 결과와, 복수의 스트림에 저장될 비휘발성 메모리 장치의 쓰기 블록을 재할당한다.
상기 기술적 과제를 달성하기 위한 본 발명의 몇몇 실시예에 따른 저장 장치 시스템은, 복수의 스트림과, 복수의 스트림에 대한 실시간 정보를 출력하는 호스트, 및 호스트로부터 복수의 스트림과, 복수의 스트림에 대한 실시간 정보를 수신하는 저장 장치를 포함하되, 저장 장치는, 복수의 비휘발성 메모리를 포함하는 비휘발성 메모리 장치와, 호스트로부터 제공된 복수의 스트림에 대한 실시간 정보를 바탕으로 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하고, 계산 결과를 바탕으로 복수의 스트림 각각에 대응하여, 복수의 스트림 저장될 비휘발성 메모리 장치의 쓰기 블록을 할당하는 컨트롤러를 포함한다.
상기 기술적 과제를 달성하기 위한 본 발명의 몇몇 실시예에 따른 저장 장치 시스템은, 호스트 메모리, 호스트 메모리에 로드된 복수의 소프트웨어를 실행하는 프로세싱 유닛, 및 호스트 메모리와 프로세싱 유닛으로부터 수신한 데이터를 외부에 송신하는 인터페이스 회로를 포함하는 호스트, 및 호스트와 데이터를 주고받는 저장 장치를 포함하되, 저장 장치는, 복수의 스트림에 대한 실시간 정보를 기반으로 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하는 블록 계산기를 포함하고, 복수의 스트림 각각에 쓰기 블록을 할당하는 컨트롤러와, 컨트롤러와 채널을 통해 데이터를 주고 받고, 복수의 비휘발성 메모리를 포함하는 메모리 장치와, 비휘발성 메모리와 다른 메모리를 포함하는 버퍼 메모리를 포함한다.
상기 기술적 과제를 달성하기 위한 본 발명의 몇몇 실시예에 따른 저장 장치 시스템 동작 방법은, 호스트를 통해, 복수의 스트림 각각에 대한 성능 변경 요구를 복수의 스트림 각각에 대한 성능 비율과 함께 저장 장치에 전달하고, 저장 장치 내 블록 계산기를 통해, 호스트로부터 수신한 복수의 스트림 각각에 대한 성능 비율을 기반으로 복수의 스트림 각각에 대한 성능을 계산하고, 계산된 성능을 호스트에 전달하고, 호스트는 계산된 성능에 대한 승인 여부를 저장 장치에 전달하며, 저장 장치는 호스트로부터 승인을 수신받은 경우, 계산된 성능을 바탕으로 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하고, 저장 장치 내 블록 할당기를 통해, 계산된 쓰기 블록의 개수를 복수의 스트림 각각에 할당한다.
기타 실시예들의 구체적인 사항들은 상세한 설명 및 도면들에 포함되어 있다.
도 1은 몇몇 실시예에 따른 저장 장치 시스템을 설명하기 위한 예시적인 블록도이다.
도 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: 블록 풀

Claims (20)

  1. 복수의 비휘발성 메모리를 포함하는 비휘발성 메모리 장치;
    외부로부터 제공되는 복수의 스트림에 저장될, 상기 비휘발성 메모리 장치의 쓰기 블록을 할당하는 컨트롤러; 및
    상기 비휘발성 메모리와 다른 종류의 메모리를 포함하고, 상기 복수의 스트림에 대한 쓰기 블록 할당 결과를 저장하는 버퍼 메모리를 포함하되,
    상기 컨트롤러는,
    상기 버퍼 메모리에 저장된 상기 복수의 스트림에 대한 쓰기 블록 할당 결과를 바탕으로, 상기 복수의 스트림에 저장될 상기 비휘발성 메모리 장치의 쓰기 블록을 재할당하는 저장 장치.
  2. 제 1항에 있어서,
    상기 컨트롤러는,
    상기 복수의 스트림에 재할당될 상기 쓰기 블록의 개수를 계산하는 블록 계산기와,
    상기 쓰기 블록의 개수를 기반으로 상기 복수의 스트림 각각에 상기 쓰기 블록을 재할당하는 블록 할당기를 포함하는 저장 장치.
  3. 제 2항에 있어서,
    상기 컨트롤러는,
    상기 복수의 스트림 각각에 할당된 쓰기 블록 정보가 기록된 블록 테이블을 저장하는 블록 풀을 더 포함하되,
    상기 블록 풀은,
    상기 블록 할당기로부터 현재 활성화된 스트림 정보를 수신하고,
    현재 활성화되지 않은 스트림에 대한 쓰기 블록 정보를 상기 블록 할당기에 전송하며,
    상기 블록 할당기는 상기 현재 활성화되지 않은 스트림에 할당된 쓰기 블록을 상기 현재 황성화된 스트림에 할당하는 저장 장치.
  4. 제 1항에 있어서,
    상기 컨트롤러는, 상기 복수의 스트림에 대한 실시간 정보를 저장하는 정보 저장 메모리를 더 포함하되,
    상기 복수의 스트림에 대한 실시간 정보는,
    상기 복수의 스트림 각각에 할당되는 쓰기 블록에 대한 데이터 쓰기 빈도 정보이며, 상기 쓰기 빈도 정보는 쓰기 횟수 테이블에 기록되고,
    상기 쓰기 횟수 테이블은 상기 정보 저장 메모리에 저장되는 저장 장치.
  5. 제 4항에 있어서,
    제1 시점의 제1 쓰기 횟수 테이블은 제2 시점에 제2 쓰기 횟수 테이블로 업데이트되며,
    상기 컨트롤러는,
    상기 제2 쓰기 횟수 테이블을 기반으로 상기 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하고,
    상기 계산된 쓰기 블록의 개수를 상기 복수의 스트림 각각에 할당하는 저장 장치.
  6. 제 1항에 있어서,
    상기 컨트롤러는 상기 복수의 스트림에 대한 실시간 정보를 상기 외부로부터 수신하되,
    상기 복수의 스트림에 대한 실시간 정보는,
    상기 복수의 스트림 각각이 차지하는 성능 비율 정보를 포함하며,
    상기 컨트롤러는,
    상기 성능 비율 정보를 기반으로 상기 복수의 스트림 각각이 수행할 수 있는 성능을 계산하며,
    상기 계산된 성능을 바탕으로, 상기 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하고,
    상기 계산된 쓰기 블록의 개수를 상기 복수의 스트림 각각에 할당하는 저장 장치.
  7. 제 6항에 있어서,
    상기 계산된 성능은 상기 복수의 스트림 각각의 전송 속도인 저장 장치.
  8. 제 1항에 있어서,
    상기 복수의 스트림에 대한 쓰기 블록 할당 결과는 상기 비휘발성 메모리 장치에 포함된 저장 장치.
  9. 복수의 스트림과, 상기 복수의 스트림에 대한 실시간 정보를 출력하는 호스트; 및
    상기 호스트로부터 상기 복수의 스트림과, 상기 복수의 스트림에 대한 실시간 정보를 수신하는 저장 장치를 포함하되,
    상기 저장 장치는,
    복수의 비휘발성 메모리를 포함하는 비휘발성 메모리 장치와,
    상기 호스트로부터 제공된 상기 복수의 스트림에 대한 실시간 정보를 바탕으로 상기 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하고, 상기 계산 결과를 바탕으로 상기 복수의 스트림 각각에 대응하여, 상기 복수의 스트림에 저장될 상기 비휘발성 메모리 장치의 쓰기 블록을 할당하는 컨트롤러를 포함하는 저장 장치 시스템.
  10. 제 9항에 있어서,
    상기 호스트는, 상기 호스트가 요구하는 상기 복수의 스트림 각각이 차지하는 성능 비율 정보를 상기 저장 장치에 전달하고,
    상기 저장 장치는 상기 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하는 블록 계산기를 포함하며,
    상기 블록 계산기를 통해, 상기 성능 비율 정보를 기반으로 상기 복수의 스트림 각각이 수행할 수 있는 성능을 계산하여 상기 호스트에 전달하고,
    상기 호스트는, 상기 성능에 대한 승인 여부를 상기 저장 장치에 전달하며,
    상기 저장 장치는 상기 호스트로부터 승인을 전달받으면, 상기 성능을 바탕으로 상기 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하는 저장 장치 시스템.
  11. 제 9항에 있어서,
    상기 호스트가 요구하는 상기 복수의 스트림에 대한 실시간 정보를 제1 정보로 정의하고,
    상기 저장 장치에 현재 저장된 상기 복수의 스트림에 대한 실시간 정보를 제2 정보로 정의고,
    상기 저장 장치는 상기 제1 정보를 수신하고,
    상기 제1 정보와 상기 제2 정보를 비교하여 서로 다른 경우,
    상기 호스트에 상기 제2 정보를 수정할 것을 요청하고,
    상기 호스트가 상기 수정 요청에 대해 스인한 경우,
    상기 저장 장치는 상기 제2 정보를 상기 제1 정보로 수정하는 저장 장치 시스템.
  12. 제 11항에 있어서,
    상기 복수의 스트림에 대한 실시간 정보는,
    상기 복수의 스트림 각각이 차지하는 성능 비율 정보,
    상기 복수의 스트림 각각의 성능, 및
    상기 복수의 스트림 각각에 할당되는 쓰기 블록을 포함하는 저장 장치 시스템.
  13. 제 9항에 있어서,
    상기 컨트롤러는,
    상기 쓰기 블록의 개수를 계산하는 블록 계산기와,
    상기 블록 계산기가 계산한 상기 쓰기 블록의 개수를 기반으로 상기 복수의 스트림 각각에 상기 쓰기 블록을 할당하는 블록 할당기를 더 포함하는 저장 장치 시스템.
  14. 제 13항에 있어서,
    상기 컨트롤러는,
    상기 복수의 스트림 각각에 할당된 쓰기 블록 정보가 기록된 블록 테이블을 저장하는 블록 풀을 더 포함하되,
    상기 블록 풀은,
    상기 블록 할당기로부터 현재 활성화된 스트림 정보를 수신하고,
    현재 활성화되지 않은 스트림에 대한 쓰기 블록 정보를 상기 블록 할당기에 전송하며,
    상기 블록 할당기는 상기 현재 활성화되지 않은 스트림에 할당된 쓰기 블록을, 상기 현재 활성화된 스트림에 할당하는 저장 장치 시스템.
  15. 제 9항에 있어서,
    상기 컨트롤러는, 상기 복수의 스트림에 대한 실시간 정보를 저장하는 정보 저장 메모리를 더 포함하되,
    상기 복수의 스트림에 대한 실시간 정보는,
    상기 복수의 스트림 각각에 할당되는 쓰기 블록에 대한 데이터의 쓰기 빈도 정보이며, 상기 쓰기 빈도 정보는 쓰기 횟수 테이블에 기록되고,
    상기 쓰기 횟수 테이블은 상기 정보 저장 메모리에 저장되는 저장 장치 시스템.
  16. 제 15항에 있어서,
    제1 시점의 제1 쓰기 횟수 테이블은 제2 시점에 제2 쓰기 횟수 테이블로 업데이트되며,
    상기 컨트롤러는 상기 제2 쓰기 횟수 테이블을 기반으로 상기 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하는 저장 장치 시스템.
  17. 호스트 메모리, 상기 호스트 메모리에 로드된 복수의 소프트웨어를 실행하는 프로세싱 유닛, 및 상기 호스트 메모리와 상기 프로세싱 유닛으로부터 수신한 데이터를 외부에 송신하는 인터페이스 회로를 포함하는 호스트; 및
    상기 호스트와 상기 데이터를 주고받는 저장 장치를 포함하되,
    상기 저장 장치는,
    복수의 스트림에 대한 실시간 정보를 기반으로 상기 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하는 블록 계산기를 포함하고, 상기 복수의 스트림 각각에 쓰기 블록을 할당하는 컨트롤러와,
    상기 컨트롤러와 채널을 통해 상기 데이터를 주고 받고, 복수의 비휘발성 메모리를 포함하는 메모리 장치와,
    상기 비휘발성 메모리와 다른 메모리를 포함하는 버퍼 메모리를 포함하는 저장 장치 시스템.
  18. 제 17항에 있어서,
    상기 컨트롤러는,
    상기 블록 계산기가 계산한 상기 쓰기 블록의 개수를 수신하고,
    상기 쓰기 블록의 개수를 기반으로 상기 복수의 스트림 각각에 상기 쓰기 블록을 할당하는 블록 할당기를 더 포함하는 저장 장치 시스템.
  19. 제 17항에 있어서,
    상기 컨트롤러는, 상기 복수의 스트림에 대한 실시간 정보를 저장하는 정보 저장 메모리를 더 포함하되,
    상기 복수의 스트림에 대한 실시간 정보는,
    상기 복수의 스트림 각각에 대한 쓰기 빈도 정보이며, 상기 쓰기 빈도 정보는 쓰기 횟수 테이블에 기록되고,
    상기 쓰기 횟수 테이블은 상기 정보 저장 메모리에 저장되는 저장 장치 시스템.
  20. 제 17항에 있어서,
    상기 호스트는, 상기 호스트가 상기 복수의 스트림 각각에 요구하는 성능 비율 정보를 상기 저장 장치에 전달하고,
    상기 저장 장치는, 상기 블록 계산기를 통해, 상기 성능 비율 정보를 기반으로 상기 복수의 스트림 각각이 수행할 수 있는 성능을 계산하여 상기 호스트에 전달하고,
    상기 호스트는, 상기 계산된 성능에 대한 승인 여부를 상기 저장 장치에 전달하며,
    상기 저장 장치는 상기 호스트로부터 승인을 전달받으면, 상기 계산된 성능을 바탕으로 상기 복수의 스트림 각각에 할당되는 쓰기 블록의 개수를 계산하는 저장 장치 시스템.
KR1020190143096A 2019-11-11 2019-11-11 저장 장치 및 저장 장치 시스템과 그 동작 방법 KR20210056520A (ko)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

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) 메모리 시스템에 포함된 복수의 메모리 장치에서 수행되는 동작에 대해 스케줄링하는 장치 및 방법