KR20220069810A - 스트림 id들에 기초하는 ssd-내 데이터 처리 엔진 선택을 위한 시스템 및 방법 - Google Patents

스트림 id들에 기초하는 ssd-내 데이터 처리 엔진 선택을 위한 시스템 및 방법 Download PDF

Info

Publication number
KR20220069810A
KR20220069810A KR1020210140120A KR20210140120A KR20220069810A KR 20220069810 A KR20220069810 A KR 20220069810A KR 1020210140120 A KR1020210140120 A KR 1020210140120A KR 20210140120 A KR20210140120 A KR 20210140120A KR 20220069810 A KR20220069810 A KR 20220069810A
Authority
KR
South Korea
Prior art keywords
stream
data processing
processing engine
data
processor
Prior art date
Application number
KR1020210140120A
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 삼성전자주식회사
Publication of KR20220069810A publication Critical patent/KR20220069810A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/062Securing storage systems
    • 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/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • 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/0625Power saving in 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/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
    • G06F3/0641De-duplication techniques
    • 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]
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages

Landscapes

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

Abstract

멀티-스트림 메모리 시스템은, 제1 데이터 처리 엔진 및 제2 데이터 처리 엔진을 포함하는 인-디바이스 데이터 프로세서, 컨트롤러 프로세서, 및 상기 컨트롤러 프로세서에 결합된 프로세서 메모리를 포함하되, 상기 프로세서 메모리는 상기 프로세서 메모리에 명령어들을 저장하고, 상기 명령어들은, 상기 컨트롤러 프로세서에 의해 실행되면, 상기 컨트롤러 프로세서가: 입력 스트림의 스트림 ID를 식별하는 것, 스트림 할당 테이블에 기초하여 상기 스트림 ID와 연관된 것으로서 상기 제1 데이터 처리 엔진을 식별하는 것, 그리고 처리된 데이터를 생성하기 위해 상기 제1 데이터 처리 엔진을 상기 입력 스트림에 적용하는 것을 수행하게 한다.

Description

스트림 ID들에 기초하는 SSD-내 데이터 처리 엔진 선택을 위한 시스템 및 방법{SYSTEM AND METHOD FOR IN-SSD DATA PROCESSING ENGINE SELECTION BASED ON STREAM IDS}
본 개시의 양상들은 메모리 장치들의 분야에 관한 것이다.
솔리드-스테이트 드라이브(solid-state drive)/솔리드-스테이트 디스크(solid-state disk)(SSD)는 데이터를 지속적으로 저장하기 위해 집적 회로(IC; integrated circuit) 어셈블리(assembly)들을 메모리로 사용하는 솔리드-스테이트 스토리지 장치이다. SSD 기술은 일반적으로 전통적인 블록 입출력(I/O; input/output) 하드 디스크 드라이브(HDD; hard disk drive)들과 호환되는 전자 인터페이스들을 이용하므로, 많은 일반적인 애플리케이션(application)들에서 쉽게 교체할 수 있다.
“멀티-스트림 SSD(multi-stream SSD)”로 지칭되는 개념은 상이한 속성들을 갖는 데이터를 별도로 저장하는 인터페이스들을 운영 체제 및 애플리케이션에 제공한다. 이러한 개별적인 데이터 저장들은 “스트림(stream)들”로 지칭된다. 스트림들은 서로 다른 데이터 쓰기들이 서로 연관되거나 또는 유사한 수명을 갖는 시기를 나타내는데 사용될 수 있다. 즉, 개별적인 데이터 쓰기들의 그룹은 집합적인 스트림의 일부일 수 있고, 그리고 각 스트림은 운영 체제 또는 대응하는 애플리케이션에 의해 할당된 스트림 ID에 의해 식별될 수 있다. 따라서, 유사한 특성들 또는 속성들을 갖는 서로 다른 데이터에 고유한(unique) 스트림 ID가 각각 할당될 수 있고, 따라서 해당 스트림 ID에 대응하는 데이터는 SSD 내의 동일한 블록에 쓰여질 수 있다.
현재, 일부 SSD들은 SSD 내 데이터의 압축 또는 암호화와 같은, 장치-측 처리를 허용한다. SSD에서 데이터를 처리하는 것은, 애플리케이션들에 대해 투명할 수 있는 방식으로 호스트-측 처리 시간 및 CPU(Central Processing Unit)/메모리 소비를 감소시키는 것과 같은, 다양한 이점들을 제공할 수 있다.
관련 기술의 SSD들은, 서로 다른 스트림 ID들을 갖는 데이터와 같은, 모든 인커밍(incoming) 데이터를 동일한 방식으로 취급한다. 예를 들어, 모든 인커밍 데이터는 소스 또는 스트림 ID와 관계없이 압축되고 그리고/또는 암호화될 수 있다. 그러나, 일반적으로, 모든 데이터들이 압축되거나 암호화될 필요는 없다. 예를 들어, 이미 압축된 데이터를 압축하면 메타데이터 오버헤드로 인해 원래 데이터 크기보다 커질 수 있고, 그리고 데이터 처리로 야기된 임시 데이터는 암호화될 필요가 없을 수 있다.
더욱이, 압축 및 암호화 요구 사항들은 애플리케이션들마다 다를 수 있다. 예를 들어, 일부 애플리케이션들은 높은 압축 비율의 이점을 가질 수 있지만, 다른 애플리케이션들은 높은 압축 속도의 이점을 가질 수 있다. 그러나, 예를 들어, 높은-압축률 알고리즘들은 느린 압축 속도를 가지므로, 이러한 효과들은 일반적으로 동시에 달성될 수 없다. 또한, 서로 다른 애플리케이션들은, RSA(Rivest-Shamir-Adleman) 또는 AES(Advanced Encryption Standard)와 같은, 서로 다른 암호화 세기를 요구할 수 있다. 그러므로, SSD에서 모든 인커밍 스트림들을 동일한 방식으로 취급하는 것은 비효율성 및 바람직하지 않은 결과를 가져올 수 있다.
이러한 배경기술 섹션에서 개시된 상술된 정보는 본 개시의 이해를 돕기 위한 것이며, 따라서 본 개시가 속한 기술 분야에서의 통상의 기술자에게 이미 알려진 선행 기술을 구성하지 않는 정보를 포함할 수 있다.
본 개시의 일 실시 예에 따르면, 스트림 ID에 기초하여 스토리지 장치 내에서 데이터 처리 엔진을 선택하는 시스템 및 방법이 제공된다.
본 개시의 실시 예들의 양상들은 인커밍 데이터의 스트림 ID들에 기초하여 SSD-내 데이터 처리 엔진 선택이 가능한 멀티-스트리밍(multi-streaming) 메모리 시스템들에 관한 것이다. 일부 실시 예들에서, 멀티-스트리밍 메모리 시스템은, 데이터 스트림이 압축으로부터 이점을 얻을 수 없으면 압축 엔진을 바이패스(bypass)하고 그리고/또는 데이터 스트림이 암호화로부터 이점을 얻을 수 없으면 암호화 엔진을 바이패스 함으로써, 성능을 향상시키고 전력 소비를 감소시킨다.
본 개시의 실시 예에 따르면, 멀티-스트림 메모리 시스템이 제공된다. 상기 멀티-스트림 메모리 시스템은, 제1 데이터 처리 엔진 및 제2 데이터 처리 엔진을 포함하는 인-디바이스 데이터 프로세서, 컨트롤러 프로세서, 및 상기 컨트롤러 프로세서에 결합된 프로세서 메모리를 포함한다. 상기 프로세서 메모리는 상기 프로세서 메모리에 명령어들을 저장하고, 상기 명령어들은, 상기 컨트롤러 프로세서에 의해 실행되면, 상기 컨트롤러 프로세서가: 입력 스트림의 스트림 ID를 식별하는 것, 스트림 할당 테이블에 기초하여 상기 스트림 ID와 연관된 것으로서 상기 제1 데이터 처리 엔진을 식별하는 것, 그리고 처리된 데이터를 생성하기 위해 상기 제1 데이터 처리 엔진을 상기 입력 스트림에 적용하는 것을 수행하게 한다.
일부 실시 예들에서, 상기 스트림 할당 테이블은 상기 스트림 ID를 포함하는 복수의 스트림 ID들을 상기 제1 및 제2 데이터 처리 엔진들을 포함하는 복수의 데이터 처리 엔진들에 매핑한다.
일부 실시 예들에서, 상기 제1 데이터 처리 엔진은 상기 제2 데이터 처리 엔진과 다른 동작을 수행하도록 구성된다.
일부 실시 예들에서, 상기 제1 데이터 처리 엔진은 압축, 암호화, 중복제거, 검색, 및 그래픽 처리 중 적어도 하나를 수행한다.
일부 실시 예들에서, 상기 명령어들은, 상기 컨트롤러 프로세서가: 상기 스트림 할당 테이블에 기초하여 상기 스트림 ID와 연관되지 않은 것으로서 상기 제2 데이터 처리 엔진을 식별하는 것, 그리고 상기 제2 데이터 처리 엔진을 식별하는 것에 응답하여, 상기 처리된 데이터에 대해 상기 제2 데이터 처리 엔진을 바이패스하는 것을 더 수행하게 한다.
일부 실시 예들에서, 상기 명령어들은, 상기 컨트롤러 프로세서가: 상기 스트림 할당 테이블에 기초하여 상기 스트림 ID와 연관된 것으로서 상기 제2 데이터 처리 엔진을 식별하는 것, 그리고 상기 제2 데이터 처리 엔진을 식별하는 것에 응답하여, 상기 제2 데이터 처리 엔진을 상기 처리된 데이터에 적용하는 것을 더 수행하게 한다.
일부 실시 예들에서, 상기 인-디바이스 데이터 프로세서는 상기 프로세서 메모리 및 상기 컨트롤러 프로세서를 포함하는 상기 멀티-스트림 메모리 시스템의 솔리드 스테이트 드라이브(SSD) 내부에 통합된다.
일부 실시 예들에서, 상기 스트림 할당 테이블은 상기 스트림 ID를 포함하는 복수의 스트림 ID들을 상기 멀티-스트림 메모리 시스템의 하나 이상의 메모리 장치들 내의 복수의 물리적 어드레스들에 매핑한다.
일부 실시 예들에서, 상기 명령어들은, 상기 컨트롤러 프로세서가: 상기 스트림 할당 테이블에 기초하여 상기 스트림 ID와 연관된 물리적 어드레스를 식별하는 것, 그리고 상기 멀티-스트림 메모리 시스템의 메모리 장치 내의 상기 물리적 어드레스에 상기 처리된 데이터를 저장하는 것을 더 수행하게 한다.
일부 실시 예들에서, 상기 명령어들은, 상기 컨트롤러 프로세서가: 상기 처리된 데이터와 연관된 메타데이터를 생성하는 것으로서, 상기 메타데이터는 상기 입력 스트림에 대한 상기 제1 데이터 처리 엔진의 애플리케이션을 가리키는 것, 그리고 상기 멀티-스트림 메모리 시스템의 메모리 장치 내의 상기 물리적 어드레스에 상기 처리된 데이터와 함께 상기 메타데이터를 저장하는 것을 더 수행하게 한다.
일부 실시 예들에서, 상기 제1 및 제2 데이터 처리 엔진들 중 상기 식별된 하나를 적용하는 것은, 압축된 데이터를 생성하기 위해 제1 압축 엔진에 의해 상기 입력 스트림을 압축하는 것을 포함한다. 상기 명령어들은, 상기 컨트롤러 프로세서가: 상기 압축된 데이터의 압축 비율을 모니터링하는 것, 상기 압축 비율이 임계 값보다 작은지를 결정하는 것, 그리고 상기 결정에 응답하여, 상기 입력 스트림의 나머지에 대해 상기 제1 및 제2 데이터 처리 엔진들 중 상기 식별된 하나를 바이패스하는 것을 더 수행하게 한다.
일부 실시 예들에서, 상기 명령어들은, 상기 컨트롤러 프로세서가: 상기 스트림 할당 테이블을 호스트에 제공하는 것으로서, 상기 호스트는 상기 입력 스트림의 소스인 것을 더 수행하게 한다.
본 개시의 실시 예에 따르면, 멀티-스트림 메모리 시스템이 제공된다. 상기 멀티-스트림 메모리 시스템은, 데이터 처리 엔진을 포함하는 인-디바이스 데이터 프로세서, 컨트롤러 프로세서, 및 상기 컨트롤러 프로세서에 결합된 프로세서 메모리를 포함한다. 상기 프로세서 메모리는 상기 프로세서 메모리에 명령어들을 저장하고, 상기 명령어들은, 상기 컨트롤러 프로세서에 의해 실행되면, 상기 컨트롤러 프로세서가: 제1 입력 스트림의 제1 스트림 ID를 식별하는 것, 제2 입력 스트림의 제2 스트림 ID를 식별하는 것, 스트림 할당 테이블에 기초하여 상기 제1 스트림 ID가 상기 데이터 처리 엔진과 연관되는지를 결정하는 것, 상기 데이터 처리 엔진을 상기 제1 입력 스트림에 적용하는 것, 그리고 상기 제2 입력 스트림에 대해 상기 데이터 처리 엔진을 바이패스하는 것을 수행하게 한다.
일부 실시 예들에서, 상기 명령어들은, 상기 컨트롤러 프로세서가: 상기 스트림 할당 테이블에 기초하여 상기 제2 스트림 ID가 상기 데이터 처리 엔진과 연관되지 않는지를 결정하는 것을 더 수행하게 한다.
일부 실시 예들에서, 상기 스트림 할당 테이블은 상기 제1 및 제2 스트림 ID들을 포함하는 복수의 스트림 ID들을 상기 멀티-스트림 메모리 시스템의 하나 이상의 메모리 장치들 내의 복수의 물리적 어드레스들에 매핑한다.
일부 실시 예들에서, 상기 명령어들은, 상기 컨트롤러 프로세서가: 상기 스트림 할당 테이블에 기초하여 상기 제2 스트림 ID와 연관된 물리적 어드레스를 식별하는 것, 그리고 상기 멀티-스트림 메모리 시스템의 메모리 장치 내의 상기 물리적 어드레스에 상기 제2 입력 스트림을 저장하는 것을 더 수행하게 한다.
본 개시의 실시 예에 따르면, 멀티-스트림 메모리 시스템 내의 입력 스트림을 처리하는 방법이 제공된다. 상기 방법은, 입력 스트림의 스트림 ID를 식별하는 단계, 스트림 할당 테이블에 기초하여 상기 스트림 ID와 연관된 것으로서 인-디바이스 데이터 프로세서의 제1 데이터 처리 엔진을 식별하는 단계로서, 상기 인-디바이스 데이터 프로세서는 제2 데이터 처리 엔진을 포함하는 것, 및 처리된 데이터를 생성하기 위해 상기 제1 데이터 처리 엔진을 상기 입력 스트림에 적용하는 단계를 포함한다.
일부 실시 예들에서, 상기 스트림 할당 테이블은 상기 스트림 ID를 포함하는 복수의 스트림 ID들을 상기 제1 및 제2 데이터 처리 엔진들을 포함하는 복수의 데이터 처리 엔진들에 매핑한다.
일부 실시 예들에서, 상기 방법은, 상기 스트림 할당 테이블에 기초하여 상기 스트림 ID와 연관되지 않은 것으로서 상기 제2 데이터 처리 엔진을 식별하는 단계, 및 상기 제2 데이터 처리 엔진을 식별하는 단계에 응답하여, 상기 처리된 데이터에 대해 상기 제2 데이터 처리 엔진을 바이패스하는 단계를 더 포함한다.
일부 실시 예들에서, 상기 방법은, 호스트로부터 상기 입력 스트림을 수신하는 단계로서, 상기 호스트는 상기 입력 스트림을 상기 스트림 ID와 연관시키는 것을 더 포함한다.
본 개시의 실시 예들에 따르면, 스트림 ID에 기초하여 스토리지 장치 내에서 데이터 처리 엔진을 선택하는 시스템 및 방법이 제공된다.
또한, 스트림 ID에 기초하여 선택되지 않은 엔진을 바이패스 함으로써, 메모리 시스템의 데이터 처리 속도가 증가하고, 그리고 메모리 시스템의 전력 소비가 감소될 수 있다.
본 개시의 이러한 양상들 및 다른 양상들은 상세한 설명, 청구범위, 및 첨부된 도면들을 참조하여 다음과 같이 이해될 것이다.
도 1은 본 개시의 일부 실시 예들에 따른, SSD-내 데이터 처리를 갖는 멀티-스트림 메모리 시스템을 설명하는 블록도이다.
도 2는 본 개시의 일부 실시 예들에 따라, 특정 스트림에 대해 SSD 내의 인-디바이스 데이터 처리 엔진들을 바이패스 하면서, 다른 스트림들에 대해 인-디바이스 데이터 처리를 수행하는 멀티-스트림 메모리 시스템의 예시를 설명한다.
도 3은 본 개시의 일부 실시 예들에 따른, 미들웨어 데이터 처리를 이용하는 멀티-스트림 메모리 시스템을 설명하는 블록도이다.
도 4는 본 개시의 일부 예시적인 실시 예들에 따른, 멀티-스트림 메모리 시스템 내의 입력 스트림을 처리하는 방법을 설명하는 순서도이다.
본 개념의 특징들 및 그것들을 달성하는 방법들은 후술되는 실시 예들의 상세한 설명 및 첨부된 도면들을 참조하여 보다 쉽게 이해될 수 있다. 이하에서, 첨부된 도면들을 참조하여 예시적인 실시 예들이 보다 상세하게 설명될 것이고, 도면들 전체에 걸쳐 유사한 참조 번호들은 유사한 구성 요소들을 나타낸다. 그러나, 본 개시는 다양하고 상이한 형태들로 구현될 수 있고, 그리고 본 명세서에서 설명된 실시 예들로만 한정되는 것은 아니다. 오히려, 이러한 실시 예들은 예시들로서 제공됨에 따라 본 개시가 철저하고 완전해질 것이고, 그리고 본 개시의 양상들 및 특징들을 본 개시가 속한 기술 분야에서의 통상의 기술자에게 완전하게 전달할 것이다 따라서, 본 개시의 양상들 및 특징들의 완전한 이해를 위해, 본 개시가 속한 기술 분야에서의 통상의 기술자에게 필요하지 않은 과정들, 구성 요소들, 및 기법들은 설명되지 않을 수 있다. 다르게 언급하지 않는 한, 첨부된 도면들 및 쓰여진 설명들 전체에 걸쳐 유사한 참조 번호들은 유사한 구성 요소들을 나타내므로, 이것들의 설명들은 반복되지 않을 수 있다. 도면들에서, 구성 요소들, 레이어들, 및 영역들의 상대적인 크기들은 명확성을 위해 과장될 수 있다.
달리 정의되지 않는 한, 본 명세서에서 사용되는 (기술적 및 과학적 용어들을 포함하는) 모든 용어들은 본 개시가 속하는 기술 분야에서의 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가진다. 일반적으로 사전에서 정의되는 것과 같은 이러한 용어들은, 관련 기술 및/또는 본 명세서의 맥락에서 그것들의 의미와 일치하는 의미를 갖는 것으로 해석되어야 하고, 그리고 본 명세서에서 명시적으로 정의되지 않는 한, 이상화되거나 또는 과도하게 형식적인 의미로 해석되지 않아야 함이 더 이해될 것이다.
관련 기술의 스토리지 스택(storage stack)에서, 서로 다른 애플리케이션들로부터의 호스트 데이터는 솔리드-스테이트 드라이브(SSD)로 전송되기 전에 혼합된다. SSD 압축(compression) 또는 암호화(encryption) 엔진이 활성화되면 관련 기술의 SSD 내부에서 모든 데이터는 압축되거나 또는 암호화된다. 압축/암호화 엔진은 데이터 세트가 낮은 압축 비율을 갖거나 암호화될 필요가 없는 것으로 알려지면 관리 커맨드에 의해 턴 오프될 수 있다. 그러나, 관련 기술의 SSD에서 오직 하나의 데이터 스트림(stream)만 있으므로, 압축/암호화 엔진을 턴 오프하는 것은 다른 애플리케이션들로부터의 데이터에도 영향을 미치고, 다른 애플리케이션들이 SSD에서의 압축/암호화 처리로부터 이점을 얻을 수 있는 경우에도 마찬가지이다.
따라서, 본 개시의 양상들이 제공하는 멀티-스트림 메모리 시스템(예를 들어, 멀티-스트림 플래시 드라이브)은 압축 엔진 및/또는 암호화 엔진을 포함하고, 그리고 압축 및/또는 암호화로부터 이점을 얻을 수 없는 데이터 스트림들에 대해 압축 엔진 및/또는 암호화 엔진을 선택적으로 바이패스(또는, 우회)(bypass)할 수 있다. 일부 실시 예들에서, 멀티-스트림 메모리 시스템은 애플리케이션 요구 사항들에 기초하여 적절한 데이터 처리 엔진(예를 들어, 압축 엔진 또는 암호화 엔진)을 선택할 수 있다. 일부 실시 예들에서, 멀티-스트림 메모리 시스템은, 호스트 또는 멀티-스트림 메모리 시스템에 의해 할당될 수 있는, 스트림 ID에 기초하여 스트림을 선택적으로 압축 및/또는 암호화한다. 일부 실시 예들에 따르면, 멀티-스트림 메모리 시스템의 컨트롤러는 대응하는 데이터 스트림의 압축 비율 및/또는 압축 속도에 기초하여 데이터 스트림이 압축되어야 하는지 여부를 자동으로 결정할 수 있다.
도 1은 본 개시의 일부 실시 예들에 따른, SSD-내(in-SSD) 데이터 처리를 갖는 멀티-스트림 메모리 시스템을 설명하는 블록도이다. 도 2는 본 개시의 일부 실시 예들에 따라, 특정 스트림에 대해 SSD 내의 인-디바이스(in-device) 데이터 처리 엔진들을 바이패스 하면서, 다른 스트림들에 대해 인-디바이스 데이터 처리를 수행하는 멀티-스트림 메모리 시스템의 예시를 설명한다. 도 3은 본 개시의 일부 실시 예들에 따른, 미들웨어(예를 들어, 미드-웨어(mid-ware)) 데이터 처리를 이용하는 멀티-스트림 메모리 시스템을 설명하는 블록도이다.
도 1을 참조하면, 일부 실시 예들에서, 멀티-스트림 메모리 시스템(10)은 호스트(20)와 데이터 통신하는 인-디바이스 데이터 처리를 갖는 멀티-스트림 SSD(예를 들어, 멀티-스트림 플래시 드라이브)(100)를 포함한다. 멀티-스트림 SSD(100)는 SSD 컨트롤러(110), 멀티-스트림 SSD(100) 내부에 통합되는 인-디바이스 데이터 프로세서(120), 및 복수의 메모리 장치들(130-1 내지 130-M)(여기서 M은 1보다 큰 정수)을 포함하는 비-휘발성 메모리를 포함한다. 일부 예들에서, 메모리 장치들(130)은 플래시 메모리 장치들(예를 들어, NAND 플래시 메모리 장치들)일 수 있다.
SSD 컨트롤러(110)는 복수의 제1 내지 제N 스트림들(여기서 N은 1보다 큰 정수)을 통해 호스트(20) 및 SSD(100) 사이에서 데이터의 전송을 용이하게 한다. 일부 실시 예들에서, SSD 컨트롤러(110)는 호스트 인터페이스 레이어(112) 및 플래시 변환 레이어(FTL; flash translation layer)(114)를 포함한다. 호스트 인터페이스 레이어(112)는 호스트(20)로부터 애플리케이션 I/O 요청들을 페치(fetch)하고, I/O 요청들을 SSD 내부 읽기/쓰기 트랜잭션(transaction)들로 변환하고, 그리고 FTL(114)에 대해 그것들을 스케줄링한다. 플래시 변환 레이어(FTL)(114)는 호스트(20)의 섹터-기반(sector-based) 파일 시스템 및 SSD(100)의 메모리 장치들(130) 사이에서 변환 레이어로서 역할을 한다. 호스트 인터페이스 레이어(112) 및 FTL(114)은 소프트웨어 및/또는 하드웨어로 구현될 수 있다. FTL(114)은 메모리 장치들(130)에 대한 호스트 측 액세스를 운영 체제 및 파일 시스템에게 제공하고 그리고 이들이 하나의 블록 스토리지 장치로 행동하는 것을(또는 보이는 것을) 보장한다. 일부 예들에서, FTL(114)은 논리적 대 물리적(logical to physical; LtoP) 테이블에서 호스트의 논리적 어드레스들을 플래시 메모리의 물리적 어드레스들로 매핑하여, 논리적 블록 인터페이스를 플래시 메모리 장치(130)에 제공함으로써 플래시의 복잡성(complexity)을 숨긴다.
데이터 프로세서(120)는 SSD(100) 내부에 내장된 컴퓨터로서 동작하고 그리고 데이터의 인커밍 및 아웃고잉(outgoing) 스트림들에 대한, 압축/압축해제(compression/decompression), 암호화/복호화(encryption/decryption), 검색 동작들, 및/또는 그래픽 처리와 같은, 인-디바이스 데이터 처리를 수행한다. 데이터 프로세서(120)는 데이터가 저장된 위치에 가깝게 처리를 이동시키고, 따라서 시간 및 에너지 측면에서 비용이 많이 드는 동작일 수 있는, 데이터 이동의 필요성을 감소시킨다. 예를 들어, 검색을 실행하면, 일반적으로, 스토리지 장치에 있는 많은 양의 데이터는 호스트로 이동되고, 그리고 호스트에서 검색해야 한다. 그러나, 인-디바이스 데이터 프로세서(120)를 사용하면, SSD(100) 자체에서 문의(inquiry)를 보내고, 그리고 데이터 프로세서(120)가 검색을 수행하게 하고, 그리고 결과를 간단히 반환한다. 도 1에서 도시된 바와 같이, 데이터 프로세서(120)는 하나 이상의 압축 엔진들(122), 하나 이상의 암호화 엔진들(124), 하나 이상의 중복제거 엔진들(125), 하나 이상의 검색 엔진들(126), 및/또는 하나 이상의 그래픽 처리 엔진들(128)을 포함할 수 있다. 그러나, 본 개시의 실시 예들은 이에 제한되지 않으며, 임의의 적절한 엔진은 데이터 프로세서(120) 내에 포함될 수 있다. 일부 예들에서, 하나 이상의 압축 엔진들(122)은 'brotli', 'gzip', 'libdeflate', 'lzfse', 및 'zstd' 압축들 중 적어도 하나를 수행할 수 있고, 그리고 하나 이상의 암호화 엔진들(124)은 'chacha20-ietf', 'aes-256-gcm', 'aes-256-cfb', 'aes-256-ctr', 및 'camellia-256-cfb' 암호화들 중 하나를 수행할 수 있다.
일부 실시 예들에 따르면, SSD 컨트롤러(110)는 스트림 ID에 기초하여 스트림들에 대한 데이터 처리를 선택적으로 적용한다. 멀티-스트림 SSD에서, 각 입출력(input/output) 스트림은 고유한 스트림 ID에 의해 식별될 수 있고, 고유한 스트림 ID는 (예를 들어, 호스트에 의해) I/O 커맨드 내에 인코딩될 수 있다. SSD 컨트롤러(110)는 스트림 할당 테이블(stream assignment table)에 기초하여 주어진 스트림 ID에 대해 특정 데이터 처리 엔진을 활성화 또는 비활성화할 수 있고, 스트림 할당 테이블은 각 스트림 ID를 SSD(100)에 의해 수용될 하나 이상의 액션(action)들에 매핑한다. 액션들은, 예를 들어, 데이터 배치(data placement), 압축, 암호화, 검색, 및 그래픽 처리를 포함한다. 일부 실시 예들에서, 스트림 할당 테이블은 SSD(100)의 펌웨어에서 코딩되고, 그리고 호스트(20)에 대해 이용 가능하게 된다. 그러므로, 호스트(20)에서 실행되는 각 애플리케이션은 의도된 목적을 위해 사용할 적절한 스트림 ID를 결정할 수 있다.
이하에서, 표 1은 8개의 스트림들을 지원하는 멀티-스트림 SSD(100)에서 스트림 할당 테이블의 예시를 설명한다.
스트림 번호 (ID) 1 2 3 4 5 6 7 8
목적 데이터 배치 데이터 배치 데이터 배치 데이터 배치 데이터 배치 데이터 배치 데이터 배치 데이터 배치
제1 압축 엔진 제2 압축 엔진 제3 압축 엔진 제1 암호화 엔진 제2 암호화 엔진 검색 엔진 제1 압축 엔진
제2 암호화 엔진
표 1에서 도시된 바와 같이, 각 스트림 ID는 SSD(100)에서 특정 물리적 어드레스와 연관될 수 있다. 예를 들어, 각 스트림 ID는 플래시 메모리 장치들(130) 중 다른 하나와 연관될 수 있다. 그러나, 본 개시의 실시 예들은 이에 제한되지 않으며, 2개 이상의 스트림 ID들은 SSD(100) 내의 단일 물리적 어드레스 또는 메모리 장치(130)와 연관될 수 있다. 추가적으로, 각 스트림 ID는 하나 이상의 데이터 처리 엔진들과 연관될 수 있거나, 또는 임의의 다른 데이터 처리 엔진과 연관되지 않을 수 있다. 예를 들어, 표 1에서, 제1 내지 제3 스트림 ID들은 제1 내지 제3 압축 엔진들과 연관되고, 제7 스트림 ID는 제1 압축 엔진 및 제2 암호화 엔진 모두와 연관되고, 그리고 제8 스트림 ID는 임의의 인-디바이스 처리 엔진과 연관되지 않는다.일부 실시 예들에서, 데이터의 스트림이 SSD(100)에 도달하면, SSD 컨트롤러(110)(예를 들어, 호스트 인터페이스 레이어(112))는 인커밍 데이터의 스트림 ID를 검사하고, 그리고 스트림 할당 테이블에 기초하여, 데이터를 보낼 엔진들을 결정하고, 그리고 스트림 ID에 대해 엔진이 특정되지 않으면, 데이터 프로세서(120)를 완전히 바이패스하는 것(즉, 데이터 프로세서(120) 내의 엔진들 중 어느 것도 적용하지 않음)을 결정한다. 표 1의 예시에서 제8 스트림에 대한 압축 및 암호화 엔진들의 바이패스는 또한 도 2에서 시각화된다.
일부 실시 예들에서, 적절한 데이터 처리 엔진을 적용한 후, SSD 컨트롤러(110)는 처리된 데이터의 각 유닛(unit)에 적절한 엔진 ID를 태그(tag)하고, 그리고 메모리 장치들(130) 내의 대응하는 위치에 데이터를 저장하도록 진행하고, 이것은 스트림 할당 테이블에 표시된 대응하는 데이터 배치에 기초한다. 일부 예들에서, 데이터의 유닛이 데이터 프로세서(120)에 의해 처리되면(예를 들어, 압축 및/또는 암호화 됨), FTL(114)은 대응하는 엔진 ID(들)을 처리된 데이터의 메타데이터(metadata)에 기록하고, 그리고 이것을 처리된 데이터와 함께 대응하는 메모리 장치(들)에 저장한다. 일부 예들에서, 데이터의 유닛은 논리적 페이지 또는 FTL에서 매핑 엔트리 크기(예를 들어, 4KB)에 맞는 페이지들의 그룹일 수 있다.
호스트(20)가 저장된 데이터에 대한 읽기 요청을 보내면, SSD 컨트롤러(110)(예를 들어, FTL(114))는 메타데이터에 기초하여 저장된 데이터에 대해 수행되었던 동작을 결정하고, 그리고 데이터 프로세서(120)가 다른 동작을 수행하도록 지시한다. 예를 들어, 데이터 프로세서(120)가 쓰기 동작 동안 특정 스트림 데이터를 압축/암호화하면, SSD 컨트롤러(110)는 호스트(20)에 의해 다시 읽어질 때 데이터 프로세서(120)가 데이터를 압축해제/복호화하도록 자동으로 지시한다.
스트림 할당 테이블의 지식은 호스트(20) 및/또는 SSD(100)에 유익하면 호스트(20)의 애플리케이션들이 적절한 SSD-내 처리를 선택할 수 있게 하고, 그리고 이러한 동작들이 호스트(20) 또는 SSD(100)에 거의 또는 전혀 유익하지 않으면 SSD-내 데이터 처리를 바이패스(예를 들어, 적용하지 않음)하게 할 수 있다. 일례로, 표 1 및 도 2의 경우에서, 제8 애플리케이션(도 2 참조)의 데이터가 낮은 압축 비율을 가짐에 따라, SSD(100)가 제8 애플리케이션의 데이터의 압축으로부터 이점을 얻을 수 없으면, 애플리케이션은 데이터 프로세서(120)의 압축 엔진들을 바이패스(예를 들어, 적용하지 않음) 하는 제8 스트림 ID를 사용하도록 선택할 수 있고, 따라서 멀티-스트림 SSD(100)의 성능을 향상(예를 들어, 대역폭을 증가)시킬 수 있다.
표 1에서 설명된 바와 같이, 일부 예들에서, 데이터 프로세서(120)는 다른 타입의 압축 엔진들(예를 들어, deflate(RFC-1951), ZLIB(RFC-1950), GZIP(RFC-1952), 등) 및/또는 다른 타입의 암호화 엔진들(예를 들어, RSA, AES, 등)을 포함할 수 있고, 데이터 스트림은 데이터 스트림의 압축/암호화 요구 사항에 가장 잘 맞는 압축/암호화 엔진으로 라우팅(routing)될 수 있다.
일부 실시 예들에 따르면, SSD 컨트롤러(110)는 주어진 스트림에 대해 적절한 스트림 ID를 선택할 수 있다. 예를 들어, SSD 컨트롤러(110)는 압축 중인 스트림의 압축 비율을 (예를 들어, 실시간으로) 모니터링할 수 있고, 그리고 스트림의 압축 비율이 임계 값보다 작으면, SSD 컨트롤러(110)는 (예를 들어, 바이패스 스트림 ID로) 스트림 ID를 변경함으로써, 스트림이 압축 엔진을 바이패스 하도록 재지정(redirection)할 수 있다. 이러한 바이패스 목적의 스트림 ID 변경은 내부적이고 일시적으로 수행될 수 있고, 호스트(20)에 전달되지 않을 수 있다. 일부 예들에 따르면, SSD 컨트롤러(110)는 저장되는 데이터를 모니터링 할 수 있고 그리고 원하는 경우 중복제거(deduplication)를 바이패스할 수 있다.
도 1은 데이터 프로세서(120)가 SSD(100) 내부에 통합된 실시 예들을 설명하지만, 본 개시의 실시 예들은 이에 제한되지 않는다. 예를 들어, 도 3은 데이터 프로세서(120-1)가 SSD(100-1) 외부의 미들웨어(middleware) 시스템(200)에 존재(reside)하는 실시 예들을 설명한다. 미들웨어 시스템(200)은 클라우드에 존재하거나, 또는 호스트 운영 체제 및 그 위에서 실행되는 애플리케이션들 사이에 존재할 수 있다. 이러한 예들에서, 데이터 프로세서(120-1)는 도 1의 실시 예들의 데이터 프로세서(120)와 동일하거나 또는 실질적으로 동일할 수 있고, 그리고 미들웨어 시스템(200)은 도 1의 실시 예들의 호스트 인터페이스 레이어(112)와 유사하게, 호스트 애플리케이션들로부터의 I/O 요청들을 처리하는 애플리케이션 인터페이스 레이어(112-1)를 포함할 수 있다. 일부 실시 예들에서, 미들웨어 컨트롤러(210)는 도 1 및 도 2와 관련하여 상술된 입력 스트림들을 처리하고(예를 들어, 스트림 ID 검출 프로세스를 수행) 그리고 도 1 및 도 2와 관련하여 상술된 바와 같이 하나 이상의 데이터-처리 엔진들을 바이패스할 수 있다. 미들웨어 시스템(200)은 처리된 데이터의 스트림 ID를 유지하므로, 멀티-스트림 SSD(100-1)의 호스트 인터페이스 레이어(112)는 스트림 ID에 기초하여 I/O 스트림들을 식별/분리할 수 있고 그리고 스트림들이 메모리 장치들(130) 내의 대응하는 위치들에 저장되는 것을 허용할 수 있다.
상술된 바와 같이, 본 개시는 미들웨어 시스템(200)으로부터 수신된 처리된 데이터에 대해 스트림 ID-기반 배치를 수행한다.
도 4는 본 개시의 일부 예시적인 실시 예들에 따른, 멀티-스트림 메모리 시스템 내의 입력 스트림을 처리하는 방법(300)을 설명하는 순서도이다.
일부 실시 예들에서, (예를 들어, 입력 스트림을 스트림 ID와 연관시키는 호스트로부터) 입력 스트림을 수신하면, SSD(100)는 입력 스트림의 스트림 ID를 식별한다(S302). 이 후, SSD(100)는 스트림 할당 테이블에 기초하여 스트림 ID와 연관된 것으로서 인-디바이스 데이터 프로세서(120)의 복수의 데이터 처리 엔진들 중 제1 데이터 처리 엔진을 식별한다(S304). 스트림 할당 테이블은 식별된 스트림 ID를 포함하는 복수의 스트림 ID들을 복수의 데이터 처리 엔진들에 매핑할 수 있다. 이 후, SSD(100)는 처리된 데이터를 생성하기 위해 제1 데이터 처리 엔진을 입력 스트림에 적용하고, 처리된 데이터는 SSD(100) 내에 저장될 수 있다(S306). 일부 실시 예들에서, 복수의 데이터 처리 엔진들은 스트림 ID와 연관되지 않은 제2 데이터 처리 엔진을 포함한다. 여기서, SSD(100)는 스트림 할당 테이블에 기초하여 스트림 ID와 연관되지 않은 것으로서 제2 데이터 처리 엔진을 식별하고, 그리고 처리된 데이터에 대해 제2 데이터 처리 엔진을 바이패스(예를 들어, 적용하지 않음)한다.
상술된 멀티-스트림 SSD(100) 또는 미들웨어 시스템(200) 및 SSD(100-1)에 의해 수행되는 동작들은 단지 예시적인 동작들에 불과하고, 이러한 장치들에 의해 수행되는 동작들은 본 명세서에서 명시적으로 설명되지 않은 다양한 동작들을 포함할 수 있는 것으로 이해될 것이다.
멀티-스트림 SSD의 구성 요소들(예를 들어, SSD 컨트롤러(110), 데이터 프로세서(120), 등)에 의해 수행되는 동작들은 “처리 회로” 또는 “프로세서” (예를 들어, 컨트롤러 프로세서)에 의해 수행될 수 있고, 이들은 데이터 또는 디지털 신호들을 처리하는데 채용되는 하드웨어, 펌웨어, 및 소프트웨어의 임의의 조합을 포함할 수 있다. 처리 회로 하드웨어는, 예를 들어, 주문형 집적 회로(ASIC; application specific integrated circuit)들, 범용 또는 특수 목적의 중앙 처리 장치(CPU; central processing unit)들, 디지털 신호 프로세서(DSP; digital signal processor)들, 그래픽 처리 장치(GPU; graphics processing unit)들, 및 필드 프로그래머블 게이트 어레이(FPGA; field programmable gate array)들과 같은 프로그래밍 가능한 논리 장치들을 포함할 수 있다. 처리 회로에서, 본 명세서에서 사용된 바와 같이, 각 기능은 해당 기능을 수행하도록 구성된(예를 들어, 유선) 하드웨어에 의해, 또는 CPU와 같은, 비-일시적 스토리지 매체에 저장된 명령어들을 실행하도록 구성된 보다 범용적인 목적의 하드웨어에 의해 수행된다. 처리 회로는 단일 인쇄 배선 기판(PWB; printed wiring board) 상에 제작되거나 또는 다수의 서로 연결된 PWB들에 걸쳐 분산될 수 있다. 처리 회로는 다른 처리 회로들을 포함할 수 있고, 예를 들어, 처리 회로는 PWB 상에 서로 연결된, 2개의 처리 회로들, 즉, FPGA 및 CPU를 포함할 수 있다.
비록, “제1”, “제2”, “제3”, 등의 용어들이 본 명세서에서 다양한 구성 요소들, 구성들, 영역들, 레이어들, 및/또는 섹션들을 설명하기 위해 사용되었지만, 이러한 구성 요소들, 구성들, 영역들, 레이어들, 및/또는 섹션들은 이러한 용어들에 의해 제한되지 않아야 함이 이해될 것이다. 이러한 용어들은 하나의 구성 요소, 구성, 영역, 레이어, 또는 섹션을 다른 구성 요소, 구성, 영역, 레이어, 또는 섹션으로부터 구별하는데 사용된다. 따라서, 본 발명의 개념의 범위를 벗어나지 않으면서, 이하에서 논의되는 제1 구성 요소, 구성, 영역, 레이어, 또는 섹션은 제2 구성 요소, 구성, 영역, 레이어, 또는 섹션으로 지칭될 수 있다.
본 명세서에서 사용된 용어는 특정 실시 예들을 설명하는 목적으로 사용되고 본 발명의 개념을 제한하는 것으로 의도되지 않는다. 본 명세서에서 사용된 바와 같이, 문맥상 명백히 다르게 지시하지 않는 한, 단수의 형태는 복수의 형태를 포함하는 것으로 의도된다. 용어들 “포함하다”, “포함하는”, “갖다”, 및/또는 “갖는”은, 본 명세서에서 사용될 때, 명시된 특징, 정수, 단계, 동작, 구성 요소, 및/또는 구성의 존재를 지정하지만, 하나 이상의 다른 특징, 정수, 단계, 동작, 구성 요소, 구성, 및/또는 이들의 그룹의 존재 또는 추가를 배제하지 않는 것으로 더 이해될 것이다. 본 명세서에서 사용된 바와 같이, 용어 “및/또는”은 관련하여 나열된 항목을 중 하나 이상의 임의의 모든 조합들을 포함한다. 더욱이, 본 발명의 실시 예들을 설명할 때, “할 수 있다”의 사용은 “본 발명의 하나 이상의 실시 예들”을 지칭한다. 또한, 용어 “예시적인”은 예시 또는 설명을 지칭하는 것으로 의도된다.
구성 요소, 레이어, 영역, 또는 구성이 다른 구성 요소, 레이어, 영역, 또는 구성 “상에”, “연결된”, 또는 “결합된” 것으로 지칭되면, 이것은 다른 구성 요소, 레이어, 영역, 또는 구성에 직접적으로 있고, 연결되고, 또는 결합될 수 있거나, 또는 하나 이상의 개입하는 구성 요소들, 레이어들, 영역들, 또는 구성들이 존재할 수 있음이 이해될 것이다. 게다가, 구성 요소 또는 계층이 2개의 구성 요소들 또는 레이어들 “사이에” 있는 것으로 지칭되면, 이것은 2개의 구성 요소들 또는 레이어들 사이의 유일한 구성 요소 또는 레이어일 수 있거나, 또는 하나 이상의 개입하는 구성 요소들 또는 레이어들이 또한 존재할 수 있음이 더 이해될 것이다.
본 명세서에서 사용된 바와 같이, 용어들 “사용하다(use)”, “사용하는(using)”, 및 “사용된(used)”은, 각각, 용어들 “이용하다(utilize)”, “이용하는(utilizing)”, 및 “이용된(utilized)”의 동의어로 간주될 수 있다.
본 개시의 목적들을 위해, “X, Y, 및 Z 중 적어도 하나” 그리고 “X, Y, 및 Z로 구성된 그룹으로부터 선택된 적어도 하나”는 오직 X, 오직 Y, 오직 Z, 또는 예를 들어, XYZ, XYY, YZ, 및 ZZ와 같은, X, Y, 및 Z 중 2개 이상의 임의의 조합으로 해석될 수 있다.
더욱이, 본 발명의 실시 예들을 설명할 때, “할 수 있다”의 사용은 “본 발명의 하나 이상의 실시 예들”을 지칭한다. 또한, 용어 “예시적인”은 예시 또는 설명을 지칭하는 것으로 의도된다.
특정 실시 예가 다르게 구현될 수 있는 경우, 특정 프로세스 순서는 설명된 순서와 다르게 수행될 수 있다. 예를 들어, 2개의 연속적으로 설명된 프로세스들은 실질적으로 동시에 수행될 수 있거나 또는 설명된 순서와 반대의 순서로 수행될 수 있다.
본 발명은 그것의 설명적인 실시 예들을 특히 참조하여 상세하게 설명되었지만, 본 명세서에서 설명된 실시 예들은 완전한 것으로 의도되지 않거나, 또는 개시된 정확한 형태들로 본 발명의 범위를 제한하는 것으로 의도되지 않는다. 본 개시가 속한 기술 및 기술 분야에서의 통상의 지식을 가진 자는 어셈블리 및 동작의 설명된 구조들 및 방법들에서의 대안들 및 변경들을 이해할 것이고, 본 발명의 원리들, 진의들, 및 범위를 과도하게 벗어나지 않으면서, 후술되는 청구범위 및 그것들의 균등한 범위에 따라, 이를 실시할 수 있을 것이다.

Claims (20)

  1. 제1 데이터 처리 엔진 및 제2 데이터 처리 엔진을 포함하는 인-디바이스 데이터 프로세서;
    컨트롤러 프로세서; 및
    상기 컨트롤러 프로세서에 결합된 프로세서 메모리를 포함하되,
    상기 프로세서 메모리는 상기 프로세서 메모리에 명령어들을 저장하고, 상기 명령어들은, 상기 컨트롤러 프로세서에 의해 실행되면, 상기 컨트롤러 프로세서가:
    입력 스트림의 스트림 ID를 식별하는 것;
    스트림 할당 테이블에 기초하여 상기 스트림 ID와 연관된 것으로서 상기 제1 데이터 처리 엔진을 식별하는 것; 그리고
    처리된 데이터를 생성하기 위해 상기 제1 데이터 처리 엔진을 상기 입력 스트림에 적용하는 것을 수행하게 하는 멀티-스트림 메모리 시스템.
  2. 제 1 항에 있어서,
    상기 스트림 할당 테이블은 상기 스트림 ID를 포함하는 복수의 스트림 ID들을 상기 제1 및 제2 데이터 처리 엔진들을 포함하는 복수의 데이터 처리 엔진들에 매핑하는 멀티-스트림 메모리 시스템.
  3. 제 1 항에 있어서,
    상기 제1 데이터 처리 엔진은 상기 제2 데이터 처리 엔진과 다른 동작을 수행하도록 구성된 멀티-스트림 메모리 시스템.
  4. 제 1 항에 있어서,
    상기 제1 데이터 처리 엔진은 압축, 암호화, 중복제거, 검색, 및 그래픽 처리 중 적어도 하나를 수행하는 멀티-스트림 메모리 시스템.
  5. 제 1 항에 있어서,
    상기 명령어들은, 상기 컨트롤러 프로세서가:
    상기 스트림 할당 테이블에 기초하여 상기 스트림 ID와 연관되지 않은 것으로서 상기 제2 데이터 처리 엔진을 식별하는 것; 그리고
    상기 제2 데이터 처리 엔진을 식별하는 것에 응답하여, 상기 처리된 데이터에 대해 상기 제2 데이터 처리 엔진을 바이패스하는 것을 더 수행하게 하는 멀티-스트림 메모리 시스템.
  6. 제 1 항에 있어서,
    상기 명령어들은, 상기 컨트롤러 프로세서가:
    상기 스트림 할당 테이블에 기초하여 상기 스트림 ID와 연관된 것으로서 상기 제2 데이터 처리 엔진을 식별하는 것; 그리고
    상기 제2 데이터 처리 엔진을 식별하는 것에 응답하여, 상기 제2 데이터 처리 엔진을 상기 처리된 데이터에 적용하는 것을 더 수행하게 하는 멀티-스트림 메모리 시스템.
  7. 제 1 항에 있어서,
    상기 인-디바이스 데이터 프로세서는 상기 프로세서 메모리 및 상기 컨트롤러 프로세서를 포함하는 상기 멀티-스트림 메모리 시스템의 솔리드 스테이트 드라이브(SSD) 내부에 통합되는 멀티-스트림 메모리 시스템.
  8. 제 1 항에 있어서,
    상기 스트림 할당 테이블은 상기 스트림 ID를 포함하는 복수의 스트림 ID들을 상기 멀티-스트림 메모리 시스템의 하나 이상의 메모리 장치들 내의 복수의 물리적 어드레스들에 매핑하는 멀티-스트림 메모리 시스템.
  9. 제 1 항에 있어서,
    상기 명령어들은, 상기 컨트롤러 프로세서가:
    상기 스트림 할당 테이블에 기초하여 상기 스트림 ID와 연관된 물리적 어드레스를 식별하는 것; 그리고
    상기 멀티-스트림 메모리 시스템의 메모리 장치 내의 상기 물리적 어드레스에 상기 처리된 데이터를 저장하는 것을 더 수행하게 하는 멀티-스트림 메모리 시스템.
  10. 제 9 항에 있어서,
    상기 명령어들은, 상기 컨트롤러 프로세서가:
    상기 처리된 데이터와 연관된 메타데이터를 생성하는 것으로서, 상기 메타데이터는 상기 입력 스트림에 대한 상기 제1 데이터 처리 엔진의 애플리케이션을 가리키는 것; 그리고
    상기 멀티-스트림 메모리 시스템의 메모리 장치 내의 상기 물리적 어드레스에 상기 처리된 데이터와 함께 상기 메타데이터를 저장하는 것을 더 수행하게 하는 멀티-스트림 메모리 시스템.
  11. 제 1 항에 있어서,
    상기 제1 및 제2 데이터 처리 엔진들 중 상기 식별된 하나를 적용하는 것은:
    압축된 데이터를 생성하기 위해 제1 압축 엔진에 의해 상기 입력 스트림을 압축하는 것을 포함하고,
    상기 명령어들은, 상기 컨트롤러 프로세서가:
    상기 압축된 데이터의 압축 비율을 모니터링하는 것;
    상기 압축 비율이 임계 값보다 작은지를 결정하는 것; 그리고
    상기 결정에 응답하여, 상기 입력 스트림의 나머지에 대해 상기 제1 및 제2 데이터 처리 엔진들 중 상기 식별된 하나를 바이패스하는 것을 더 수행하게 하는 멀티-스트림 메모리 시스템.
  12. 제 1 항에 있어서,
    상기 명령어들은, 상기 컨트롤러 프로세서가:
    상기 스트림 할당 테이블을 호스트에 제공하는 것으로서, 상기 호스트는 상기 입력 스트림의 소스인 것을 더 수행하게 하는 멀티-스트림 메모리 시스템.
  13. 데이터 처리 엔진을 포함하는 인-디바이스 데이터 프로세서;
    컨트롤러 프로세서; 및
    상기 컨트롤러 프로세서에 결합된 프로세서 메모리를 포함하되,
    상기 프로세서 메모리는 상기 프로세서 메모리에 명령어들을 저장하고, 상기 명령어들은, 상기 컨트롤러 프로세서에 의해 실행되면, 상기 컨트롤러 프로세서가:
    제1 입력 스트림의 제1 스트림 ID를 식별하는 것;
    제2 입력 스트림의 제2 스트림 ID를 식별하는 것;
    스트림 할당 테이블에 기초하여 상기 제1 스트림 ID가 상기 데이터 처리 엔진과 연관되는지를 결정하는 것;
    상기 데이터 처리 엔진을 상기 제1 입력 스트림에 적용하는 것; 그리고
    상기 제2 입력 스트림에 대해 상기 데이터 처리 엔진을 바이패스하는 것을 수행하게 하는 멀티-스트림 메모리 시스템.
  14. 제 13 항에 있어서,
    상기 명령어들은, 상기 컨트롤러 프로세서가:
    상기 스트림 할당 테이블에 기초하여 상기 제2 스트림 ID가 상기 데이터 처리 엔진과 연관되지 않는지를 결정하는 것을 더 수행하게 하는 멀티-스트림 메모리 시스템.
  15. 제 13 항에 있어서,
    상기 스트림 할당 테이블은 상기 제1 및 제2 스트림 ID들을 포함하는 복수의 스트림 ID들을 상기 멀티-스트림 메모리 시스템의 하나 이상의 메모리 장치들 내의 복수의 물리적 어드레스들에 매핑하는 멀티-스트림 메모리 시스템.
  16. 제 13 항에 있어서,
    상기 명령어들은, 상기 컨트롤러 프로세서가:
    상기 스트림 할당 테이블에 기초하여 상기 제2 스트림 ID와 연관된 물리적 어드레스를 식별하는 것; 그리고
    상기 멀티-스트림 메모리 시스템의 메모리 장치 내의 상기 물리적 어드레스에 상기 제2 입력 스트림을 저장하는 것을 더 수행하게 하는 멀티-스트림 메모리 시스템.
  17. 멀티-스트림 메모리 시스템 내의 입력 스트림을 처리하는 방법에 있어서:
    입력 스트림의 스트림 ID를 식별하는 단계;
    스트림 할당 테이블에 기초하여 상기 스트림 ID와 연관된 것으로서 인-디바이스 데이터 프로세서의 제1 데이터 처리 엔진을 식별하는 단계로서, 상기 인-디바이스 데이터 프로세서는 제2 데이터 처리 엔진을 포함하는 것; 및
    처리된 데이터를 생성하기 위해 상기 제1 데이터 처리 엔진을 상기 입력 스트림에 적용하는 단계를 포함하는 방법.
  18. 제 17 항에 있어서,
    상기 스트림 할당 테이블은 상기 스트림 ID를 포함하는 복수의 스트림 ID들을 상기 제1 및 제2 데이터 처리 엔진들을 포함하는 복수의 데이터 처리 엔진들에 매핑하는 방법.
  19. 제 17 항에 있어서,
    상기 스트림 할당 테이블에 기초하여 상기 스트림 ID와 연관되지 않은 것으로서 상기 제2 데이터 처리 엔진을 식별하는 단계; 및
    상기 제2 데이터 처리 엔진을 식별하는 단계에 응답하여, 상기 처리된 데이터에 대해 상기 제2 데이터 처리 엔진을 바이패스하는 단계를 더 포함하는 방법.
  20. 제 17 항에 있어서,
    호스트로부터 상기 입력 스트림을 수신하는 단계로서, 상기 호스트는 상기 입력 스트림을 상기 스트림 ID와 연관시키는 것을 더 포함하는 방법.
KR1020210140120A 2020-11-20 2021-10-20 스트림 id들에 기초하는 ssd-내 데이터 처리 엔진 선택을 위한 시스템 및 방법 KR20220069810A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202063116685P 2020-11-20 2020-11-20
US63/116,685 2020-11-20
US17/117,008 US11500587B2 (en) 2020-11-20 2020-12-09 System and method for in-SSD data processing engine selection based on stream IDs
US17/117,008 2020-12-09

Publications (1)

Publication Number Publication Date
KR20220069810A true KR20220069810A (ko) 2022-05-27

Family

ID=81594884

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210140120A KR20220069810A (ko) 2020-11-20 2021-10-20 스트림 id들에 기초하는 ssd-내 데이터 처리 엔진 선택을 위한 시스템 및 방법

Country Status (4)

Country Link
US (3) US11500587B2 (ko)
KR (1) KR20220069810A (ko)
CN (1) CN114518842B (ko)
TW (1) TW202221511A (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112748883B (zh) * 2021-01-15 2023-01-10 苏州浪潮智能科技有限公司 一种io请求流水线处理设备、方法、系统及存储介质

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5715176A (en) * 1996-01-23 1998-02-03 International Business Machines Corporation Method and system for locating a frame position in an MPEG data stream
JP3206458B2 (ja) * 1996-10-18 2001-09-10 日本電気株式会社 Dma転送方式
US8069298B2 (en) 2007-06-29 2011-11-29 Sandisk Technologies Inc. Method of storing and accessing header data from memory
WO2010014934A2 (en) 2008-07-31 2010-02-04 Koolspan, Inc. System for and method of remote secure backup
US20100169303A1 (en) 2008-12-31 2010-07-01 David Biderman Playlists for real-time or near real-time streaming
KR101451369B1 (ko) 2011-04-29 2014-10-16 엘에스아이 코포레이션 암호화된 전송 고체 상태 디스크 제어기
US8918579B2 (en) 2012-02-06 2014-12-23 Sandisk Technologies Inc. Storage device and method for selective data compression
US9448738B2 (en) 2013-03-15 2016-09-20 Western Digital Technologies, Inc. Compression and formatting of data for data storage systems
US9606803B2 (en) * 2013-07-15 2017-03-28 Texas Instruments Incorporated Highly integrated scalable, flexible DSP megamodule architecture
US9588704B2 (en) 2014-12-23 2017-03-07 Commvault Systems, Inc. Secondary storage operation instruction tags in information management systems
US20160283125A1 (en) * 2015-03-25 2016-09-29 Kabushiki Kaisha Toshiba Multi-streamed solid state drive
US9753666B2 (en) * 2015-03-27 2017-09-05 Intel Corporation Efficient data compression for solid-state memory
US9696935B2 (en) * 2015-04-24 2017-07-04 Kabushiki Kaisha Toshiba Storage device that secures a block for a stream or namespace and system having the storage device
US10509770B2 (en) * 2015-07-13 2019-12-17 Samsung Electronics Co., Ltd. Heuristic interface for enabling a computer device to utilize data property-based data placement inside a nonvolatile memory device
US10282324B2 (en) * 2015-07-13 2019-05-07 Samsung Electronics Co., Ltd. Smart I/O stream detection based on multiple attributes
US10198215B2 (en) * 2016-06-22 2019-02-05 Ngd Systems, Inc. System and method for multi-stream data write
KR102318477B1 (ko) * 2016-08-29 2021-10-27 삼성전자주식회사 Ssd 어레이 관리를 위한 스트림 식별자 기반 스토리지 시스템
US10459644B2 (en) * 2016-10-28 2019-10-29 Western Digital Techologies, Inc. Non-volatile storage system with integrated compute engine and optimized use of local fast memory
JP2018160189A (ja) * 2017-03-23 2018-10-11 東芝メモリ株式会社 メモリシステム
US20180321855A1 (en) * 2017-05-03 2018-11-08 Samsung Electronics Co., Ltd. Multistreaming in heterogeneous environments
WO2018219452A1 (en) * 2017-05-31 2018-12-06 Huawei Technologies Co., Ltd. Cross platform stream dataflows
KR102482035B1 (ko) * 2017-11-30 2022-12-28 에스케이하이닉스 주식회사 메모리 컨트롤러, 메모리 시스템 및 그 동작 방법
KR102656172B1 (ko) * 2018-03-28 2024-04-12 삼성전자주식회사 가상 스트림들과 물리 스트림들을 맵핑하기 위한 스토리지 장치 및 그것의 동작 방법
US10884920B2 (en) * 2018-08-14 2021-01-05 Western Digital Technologies, Inc. Metadata-based operations for use with solid state devices
JP2021043837A (ja) * 2019-09-13 2021-03-18 キオクシア株式会社 メモリシステム
KR20210099930A (ko) * 2020-02-05 2021-08-13 에스케이하이닉스 주식회사 메모리 컨트롤러 및 그 동작 방법
US11301173B2 (en) * 2020-04-20 2022-04-12 Alibaba Group Holding Limited Method and system for facilitating evaluation of data access frequency and allocation of storage device resources

Also Published As

Publication number Publication date
US20220164138A1 (en) 2022-05-26
US11500587B2 (en) 2022-11-15
US20230079467A1 (en) 2023-03-16
US11836387B2 (en) 2023-12-05
CN114518842B (zh) 2024-04-12
CN114518842A (zh) 2022-05-20
US20240111458A1 (en) 2024-04-04
TW202221511A (zh) 2022-06-01

Similar Documents

Publication Publication Date Title
US10642522B2 (en) Method and system for in-line deduplication in a storage drive based on a non-collision hash
US9985649B1 (en) Combining hardware and software approaches for inline data compression
US10120608B2 (en) System and method for computing message digests
US20190278525A1 (en) Techniques for data storage protection and integrity checking
TWI594121B (zh) 使用資料壓縮的快取技術
US9785378B2 (en) Tracking transformed memory pages in virtual machine chain migration
US10635315B1 (en) Performing compression and deduplication at different granularities
TWI771933B (zh) 借助命令相關過濾器來進行重複資料刪除管理的方法、主裝置以及儲存伺服器
US20240111458A1 (en) System and method for in-ssd data processing engine selection based on stream ids
AU2015215975B1 (en) Apparatus and method for single pass entropy detection on data transfer
US20200042500A1 (en) Collaborative compression in a distributed storage system
KR102407573B1 (ko) 엔디피-서버: 데이터 센터의 저장 서버 기반 데이터 중심 컴퓨팅 구성
US9483186B1 (en) Selectable policies for identifiable storage command streams
US11036652B2 (en) Secured access control in a storage system
US9223706B2 (en) System, method and a non-transitory computer readable medium for a pre-fetch operation
US20180088822A1 (en) Using compression to increase capacity of a memory-side cache with large block size
US11347586B2 (en) Realizing high-speed and low-latency RAID across multiple solid-state storage device with host-side FTL
US20190171370A1 (en) Tiering data compression within a storage system
US10402323B2 (en) Organizing memory to optimize memory accesses of compressed data
US20130205071A1 (en) Compressed cache storage acceleration
US9983877B2 (en) Automatic hardware ZLW insertion for IPU image streams
JP2022049848A (ja) ストレージ装置及びデータ処理方法
US20160267050A1 (en) Storage subsystem technologies
US11960419B2 (en) Systems and methods for data prefetching for low latency data read from a remote server
Chen et al. Length preserving compression: Marrying encryption with compression