KR20180045786A - 멀티-스트림이 가능한 솔리드 스테이트 드라이브들을 위하여 데이터 스트림들을 통합하는 방법 - Google Patents

멀티-스트림이 가능한 솔리드 스테이트 드라이브들을 위하여 데이터 스트림들을 통합하는 방법 Download PDF

Info

Publication number
KR20180045786A
KR20180045786A KR1020170104752A KR20170104752A KR20180045786A KR 20180045786 A KR20180045786 A KR 20180045786A KR 1020170104752 A KR1020170104752 A KR 1020170104752A KR 20170104752 A KR20170104752 A KR 20170104752A KR 20180045786 A KR20180045786 A KR 20180045786A
Authority
KR
South Korea
Prior art keywords
streams
software
software streams
value
measure
Prior art date
Application number
KR1020170104752A
Other languages
English (en)
Other versions
KR102267480B1 (ko
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 KR20180045786A publication Critical patent/KR20180045786A/ko
Application granted granted Critical
Publication of KR102267480B1 publication Critical patent/KR102267480B1/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/0604Improving or facilitating administration, e.g. storage management
    • G06F3/0605Improving or facilitating administration, e.g. storage management by facilitating the interaction with a user or administrator
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • 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/0635Configuration or reconfiguration of storage systems by changing the path, e.g. traffic rerouting, path reconfiguration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/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/72Details relating to flash memory management
    • G06F2212/7207Details relating to flash memory management management of metadata or control data

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)
  • Computer Networks & Wireless Communication (AREA)
  • Debugging And Monitoring (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

본 발명에 따른 솔리드 스테이트 드라이브(SSD; Solid State Drive)는 데이터를 저장하는 플래시 메모리, SSD에서 복수의 장치 스트림들을 위한 지원(support), 복수의 커맨드들에 응답하여 플래시 메모리에 데이터를 기입하는 것 및 플래시 메모리로부터 데이터를 읽는 것을 관리하는 SSD 컨트롤러, 및 호스트 인터페이스 로직을 포함한다. 호스트 인터페이스 로직은 호스트로부터 복수의 소프트웨어 스트림들과 연관되는 복수의 커맨드들을 수신하는 수신기, 윈도우를 측정하는 타이머, 복수의 커맨드들에 응답하여, 윈도우 동안 복수의 소프트웨어 스트림들 각각에 대하여 적어도 하나의 척도에 대한 적어도 하나의 값을 판별하는 통계 수집기, 복수의 소프트웨어 스트림들 각각에 대하여 적어도 하나의 척도에 대한 적어도 하나의 값에 따라 복수의 소프트웨어 스트림들을 등급 결정하는 등급 결정기, 및 매핑을 구성하는 매퍼를 포함한다. 매핑은 복수의 소프트웨어 스트림들의 제1 서브셋의 소프트웨어 스트림들 각각을 SSD의 복수의 장치 스트림들의 고유 장치 스트림(unique device stream)으로 매핑하고, 복수의 소프트웨어 스트림들의 제2 서브셋의 소프트웨어 스트림들 전체를 SSD의 복수의 장치 스트림들의 통합 장치 스트림으로 매핑하도록 작동한다.

Description

멀티-스트림이 가능한 솔리드 스테이트 드라이브들을 위하여 데이터 스트림들을 통합하는 방법{METHOD OF CONSOLIDATING DATA STREAMS FOR MULTI-STREAM ENABLED SOLID STATE DRIVES}
본 발명은 일반적으로 솔리드 스테이트 드라이브들(SSDs; Solid State Drives)에 관한 것으로, 좀 더 상세하게는 멀티 스트림 SSD들에서 스트림들을 관리하는 것에 관한 것이다.
멀티-스트리밍 SSD들(multi-streaming solid state drives)은 입력 데이터의 스마트 배치(smart placement)가 내부 가비지 콜렉션(GC; garbage collection)의 영향을 최소화하고, 쓰기 증폭(write amplification)을 감소시키도록 한다. 멀티-스트리밍은 호스트로부터 SSD로 전송된 쓰기 요청들 각각에 단순 태그(스트림 ID)를 추가함으로써 달성될 수 있다. 이러한 태그를 기반으로, SSD는 데이터를 공통 블록들로 그룹화할 수 있다.
대형 컴퓨터 시스템에서, 애플리케이션들은 많은 파일들을 동시에 오픈할 수 있다. 이상적으로, 각 파일 형태는 스트림 쓰기들(stream writes)을 수행할 때 할당되는 자신의 스트림 ID를 가질 수 있다. 그러나, SSD들은 한번에 사용될 수 있는 제한된 개수의 활성 쓰기 스트림들만 지원한다. 이는 시스템에 의해 오픈되는 모든 파일들을 수용하기에 종종 충분하지 않다.
호스트 머신으로부터 SSD로의 스트림들을 매핑하는 것을 관리하는 방법에 대한 요구가 여전히 존재한다.
본 발명은 상술된 기술적 과제를 해결하기 위한 것으로써, 향상된 성능을 갖는 멀티-스트림이 가능한 솔리드 스테이트 드라이브들을 위하여 데이터 스트림들을 통합하는 방법을 제공하기 위한 것이다.
본 발명의 실시 예에 따른 솔리드 스테이트 드라이브(SSD, Solid State Drive)는 데이터를 저장하는 플래시 메모리, 상기 SSD에서 복수의 장치 스트림들을 위한 지원(support), 복수의 커맨드들에 응답하여 상기 플래시 메모리에 데이터를 기입하는 것 및 상기 플래시 메모리로부터 데이터를 읽는 것을 관리하는 SSD 컨트롤러, 및 호스트 인터페이스 로직을 포함하고, 상기 호스트 인터페이스 로직은 호스트로부터 복수의 소프트웨어 스트림들과 연관되는 상기 복수의 커맨드들을 수신하는 수신기, 윈도우를 측정하는 타이머, 상기 복수의 커맨드들에 응답하여, 상기 윈도우 동안 상기 복수의 소프트웨어 스트림들 각각에 대하여 적어도 하나의 척도에 대한 적어도 하나의 값을 판별하는 통계 수집기, 상기 복수의 소프트웨어 스트림들 각각에 대하여 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 등급 결정기, 및 매핑을 구성하는 매퍼를 포함하고, 상기 매핑은 상기 복수의 소프트웨어 스트림들의 제1 서브셋의 소프트웨어 스트림들 각각을 상기 SSD의 복수의 장치 스트림들의 고유 장치 스트림(unique device stream)으로 매핑하고, 상기 복수의 소프트웨어 스트림들의 제2 서브셋의 소프트웨어 스트림들 전체를 상기 SSD의 복수의 장치 스트림들의 통합 장치 스트림으로 매핑하도록 작동한다.
본 발명의 실시 예에 따른 컴퓨터 시스템에서 사용되는 드라이브는 복수의 소프트웨어 스트림들과 연관된 복수의 커맨드들을 호스트로부터 수신하는 수신기, 윈도우의 시간을 측정하는 타이머, 상기 복수의 커맨드들에 응답하여, 상기 윈도우 동안 상기 복수의 소프트웨어 스트림들 각각에 대하여 적어도 하나의 척도에 대한 적어도 하나의 값을 결정하는 통계 수집기, 상기 복수의 소프트웨어 스트림들 각각에 대하여 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 등급 결정기, 상기 복수의 소프트웨어 스트림들의 제1 서브셋의 소프트웨어 스트림들 각각을 솔리드 스테이트 드라이브(SSD, Solid State Drive)의 복수의 장치 스트림들 중 고유 장치 스트림으로 매핑하고, 상기 복수의 소프트웨어 스트림들의 제2 서브셋의 모든 소프트웨어 스트림들을 상기 SSD의 상기 복수의 장치 스트림들 중 통합 장치 스트림으로 매핑하도록 작동하는 매핑을 설정하는 매퍼, 상기 복수의 커맨드들 각각과 연관된 소프트웨어 스트림과 대응하는 장치 스트림 대한 장치 스트림 식별자(ID, identifier)를 추가적인 복수의 커맨드들 각각에 추가하는 장치 스트림 ID 추가기, 및 상기 추가적인 복수의 커맨드들 각각을 상기 SSD로 전송하는 전송기를 포함한다.
본 발명의 실시 예에 따른 방법은 복수의 소프트웨어 스트림들과 연관되고, 복수의 장치 스트림들을 포함하는 솔리드 스테이트 드라이브(SSD, Solid State Drive)를 사용하여 처리될 복수의 커맨드들을 수신하는 단계, 상기 복수의 커맨드들에 응답하여, 상기 복수의 소프트웨어 스트림들 각각에 대하여 적어도 하나의 척도에 대한 적어도 하나의 값을 결정하는 단계, 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 응답하여 상기 복수의 소프트웨어 스트림들의 제1 및 제2 서브셋들을 식별하는 단계, 상기 복수의 소프트웨어 스트림들의 상기 제1 서브셋의 각 소프트웨어 스트림을 상기 SSD의 복수의 장치 스트림들 중 고유 장치 스트림으로 매핑하고, 상기 복수의 소프트웨어 스트림들의 상기 제2 서브셋의 모든 소프트웨어 스트림들을 상기 SSD의 상기 복수의 장치 스트림들의 통합 장치 스트림으로 매핑하도록 작동하는 매핑을 생성하는 단계, 상기 매핑을 생성한 이후에, 상기 복수의 소프트웨어 스트림들과 연관된 제2 복수의 커맨드들을 수신하는 단계, 상기 매핑에 응답하여 상기 복수의 장치 스트림들 중 하나로 상기 제2 복수의 커맨드들 각각을 할당하는 단계, 및 상기 할당된 장치 스트림을 사용하여 상기 SSD에서 대한 상기 제2 복수의 커맨드들 각각을 처리하는 단계를 포함한다.
본 발명에 따르면 향상된 성능을 갖는 멀티-스트림이 가능한 솔리드 스테이트 드라이브들을 위하여 데이터 스트림들을 통합하는 방법이 제공된다.
도 1은 본 발명의 실시 예에 따른, 솔리드 스테이트 드라이브(SSD; Solid State Drvice)를 구비한 머신을 보여준다.
도 2는 도 1의 머신의 추가적인 상세도를 보여준다.
도 3은 도 1의 SSD의 상세도를 보여준다.
도 4는 도 1의 SSD에서 장치 스트림들로 매핑된 다양한 소프트웨어 스트림들과 연관된 다양한 커맨드들을 보여준다.
도 5는 도 3의 호스트 인터페이스 로직의 상세도를 보여준다.
도 6은 도 1의 SSD에서 도 4의 소프트웨어 스트림들에 대한 도 4의 장치 스트림들로의 매핑을 지원하는, 도 4의 복수의 커맨드들에 대한 통계를 연산하는데 사용되는 윈도우를 보여준다.
도 7은 도 3의 매핑을 생성하는데 사용될 수 있는 다양한 척도들(criteria)을 보여준다.
도 8은 도 5의 등급 결정기의 상세도를 보여준다.
도 9a 및 도 9b는 본 발명의 실시 예에 따른 도 5의 등급 결정기가 소프트웨어 스트림들을 정렬(rank)시키는 다른 방법들을 보여준다.
도 10a 및 도 10b는 본 발명의 실시 예에 따른 도 4의 매핑을 생성하는 예시적인 절차의 순서도를 보여준다.
도 11은 본 발명의 실시 예에 따른, 도 5의 통계 수집기가 척도들에 대한 값들을 결정하는 예시적인 절차의 순서도를 보여준다.
도 12는 본 발명의 실시 예에 따른, 도 5의 등급 결정기가 어느 소프트웨어 스트림들이 어느 장치 스트림들로 매핑되는지 결정하는 예시적인 절차의 순서도를 보여준다.
도 13은 본 발명의 실시 예에 따른 도 5의 매퍼가 소프트웨어 스트림들을 장치 스트림들로 매핑하는 예시적인 절차의 순서도를 보여준다.
첨부된 도면을 참조하여 본 발명의 실시 예들이 상세하게 설명될 것이다. 이하의 상세한 설명에서, 다양한 상세한 설명들은 본 발명의 기술적 사상의 이해를 돕기 위한 것이다. 그러나 당업자가 이러한 상세한 설명 없이 본 발명의 기술적 사상을 수행할 수 있음은 잘 이해될 것이다. 다른 예로써, 실시 예들이 불필요하게 모호해지지 않도록 잘 알려진 방법들, 절차들, 구성들, 회로들, 및 네트워크들은 설명되지 않는다.
제1, 제2, 등의 용어들이 본문에서 다양한 요소들을 설명하기 위하여 사용될 수 있으나, 이러한 요소들이 이러한 용어들에 한정되지 않음은 잘 이해될 것이다. 이러한 용어들은 오직 하나의 요소로부터 다른 하나를 구분하기 위하여 사용된다. 예를 들어, 본 발명의 사상으로부터의 벗어남 없이 제1 모듈은 제2 모듈을 가리킬 수 있고, 유사하게 제2 모듈은 제1 모듈을 가리킬 수 있다.
본 발명의 본문에서 사용되는 용어들은 오직 특정 실시 예를 설명하기 위한 목적을 가지며, 본 발명의 한정인 것으로 의도되지 않는다. 본 발명의 본문 및 첨부된 특허청구범위에서 사용되는 바와 같이, 단수 용어들은 맥락에서 명확하게 다른 것을 지칭하지 않는 한, 복수의 형태를 포함하는 것으로 의도된다. 본 문에서 사용되는 "및/또는"의 용어는 열거된 목록들의 하나 또는 그 이상의 가능한 조합들을 포함하거나 참조하는 것임은 잘 이해될 것이다. 상세한 설명에서 사용되는 "포함한다"의 용어는 언급된 특성, 수, 단계들, 동작들, 및/또는 구성 요소들의 존재를 명시하며, 하나 또는 그 이상의 다른 특성, 수, 단계들, 동작들, 구성 요소들, 및/또는 이들의 그룹들의 존재 또는 추가를 배제하지 않는다. 도면들의 특징들 및 구성들은 필수적으로 계측되어 도시되지 않는다.
멀티-스트리밍 기술에서, 애플리케이션들로부터의 쓰기 스트림 ID들의 개수는 SSD(Solid State Drive)에 의해 지원되는 스트림들의 최대 개수를 종종 초과한다. 이러한 문제점을 해결하기 위하여, SSD는 각 파일 형태/스트림 ID의 쓰기 패턴을 평가할 수 있고, 호스트 스트림 특성들(예를 들어, 쓰기 빈도, 누적 데이터 크기, 순차 쓰기(write sequentially), 서비스 품질(QoS; Quality of Service) 요구, 유휴 시간 등) 사이에서 유사점들 및 차이점들(similarities and differences)을 기반으로 실제 스트림들(actual streams, device streams)을 파일들/호스트-스트림들로 할당할 수 있다.
종래의 데이터 세트들과 달리, 스트림 데이터는 다양한 업데이트 속도로 지속적으로 컴퓨터 시스템으로 유입 및 유출된다. 엄청난 데이터 크기로 인하여 전체 데이터 스트림을 저장하거나 또는 여러 번 전체 데이터 스트림을 스캔하는 것은 불가능하다. 반면에, 처리를 위하여 데이터 스트림을 유지하는 것은 시스템에서 큰 병목현상(huge bottleneck)을 발생시킬 수 있다. 본 발명의 실시 예들은 스트림들의 단일 스캔 및 온라인을 사용하여 스트림 관리를 지원할 수 있다.
입력/출력(I/O; input/output) 요청들은 호스트 컴퓨터 시스템 또는 SSD의 펌웨어의 내부 에서 하나 이상의 큐들(queues)로 일반적으로 관리된다. 본 발명의 실시 예들은 이러한 위치들 중 하나에서 구현될 수 있다. 멀티-스트림-가능한 시스템(multi-stream-enabled system)에서, 큐의 각 요청은 애플리케이션-할당 스트림 ID(application-assigned stream ID)를 포함할 수 있다. 애플리케이션-할당 스트림 ID를 SSD-지원 스트림 ID(SSD-supported stream ID)로 변환하기 위하여, 모듈이 큐(들)에서 요청들의 윈도우(window of requests)를 감시(monitoring)하도록 구현될 수 있다. 윈도우 크기는 윈도우의 데이터 셋(dataset)이 호스트 머신의 작업 부하(workload)에 의해 생성된 데이터의 분포를 대표하도록 선택될 수 있거나, 또는 윈도우 크기는 원하는 크기로 설정될 수 있다. 예를 들어, 분산된 데이터베이스에서 발생할 수 있는 바와 같이, SSD가 다양한 머신들로부터의 커맨드들을 처리하는 경우, SSD를 포함하는 호스트 머신에 대한 작업 부하를 캡쳐하도록 설계된 윈도우 크기는 커맨드가 도착한 다른 머신들(other machines from which commands arrive)에 대한 작업 부하들을 나타내지 않을 수 있다. 이러한 경우에서, 다른 윈도우 크기가 SSD로 요청들을 전송하는 모든 머신들에 대한 작업부하를 (아마) 좀 더 잘 나타내는데 사용될 수 있다. 커맨드들이 윈도우로 진입함(enter)에 따라, 통계(statistics)(예를 들어, 각 애플리케이션-할당 스트림 ID에 대한 누적 데이터 크기 또는 카운터)가 커맨드들을 기반으로 계산될 수 있다. 윈도우가 가득 찬 경우, 애플리케이션-할당 스트림 ID들은 카운터 값들을 기반으로 SSD-지원 스트림 ID들로 매핑될 수 있다.
예를 들어, SSD가 n개의 스트림들을 지원하는 것으로 가정하자. n-1개의 가장 큰 카운터 값을 갖는 애플리케이션-할당 스트림 ID들은 1 내지 n-1의 SSD-지원 스트림 ID들로 각각 매핑될 수 있다. 애플리케이션-할당 스트림 ID와 무관하게, 윈도우에서 남은 요청들은 마지막 SSD-지원 스트림 ID(SSD-지원 스트림 ID n)을 사용할 수 있다.
데이터 요청들의 동적인 속성(dynamic nature)을 다루기 위하여, 큐 윈도우(queue window)가 선입선출(FIFO; First In, First Out) 또는 슬라이딩(sliding) 윈도우로써 관리될 수 있다. 각 요청이 윈도우를 벗어남(exit)에 따라, 연관된 애플리케이션-할당 스트림 ID와 대응하는 누적 데이터 크기 또는 카운터와 같은 통계가 벗어난 요청(exiting request)을 기반으로 감소될 수 있다. 이러한 방식에서, 통계는 오직 윈도우 내의 요청들에 대해서만 유지될 수 있다. 애플리케이션-할당 스트림 ID 대 SSD-지원 스트림 ID 맵(application-assigned stream ID to SSD-supported stream ID map)은 주기적으로 갱신되어 데이터 로드의 변화에 적응할 수 있다.
도 1은 본 발명의 일 실시 예에 따른, SSD(Solid State Drive)를 구비한 머신을 보여준다. 도 1에서, 머신(105)이 도시된다. 머신(105)은 데스크탑 또는 랩탑 컴퓨터, 서버(독립 서버 또는 랙 서버 중 하나), 또는 본 발명의 실시 예들로부터 이점을 갖는 다른 장치를 포함하나, 이에 한정되지 않는, 원하는 머신(desired machine)일 수 있다. 머신(105)은 전문적인 휴대용 컴퓨팅 장치들, 태블릿 컴퓨터들, 스마트폰들, 및 다른 컴퓨팅 장치들을 더 포함할 수 있다. 머신(105)은 적절한 애플리케이션을 구동할 수 있다. 데이터베이스 애플리케이션은 바람직한 예이나, 본 발명의 실시 예들은 다른 바람직한 애플리케이션으로 확장할 수 있다.
머신(105)은, 그것의 특정한 형태와 무관하게, 프로세서(110), 메모리(115), 및 SSD(120)(Solid State Drive)를 포함할 수 있다. 프로세서(110)는 다양한 형태의 프로세서, 예를 들어, 인텔(Intel) 제논(Xeon), 셀러론(Celeron), 아이타니엄(Itanium), 또는 아톰 프로세서(Atom Processor), AMD 옵테론(Opteron) 프로세서, ARM 프로세서 등일 수 있다. 도 1이 단일 프로세서를 보여주고 있으나, 머신(105)은 다수의 프로세서들을 포함할 수 있다. 메모리(115)는 다양한 메모리, 예를 들어, 플래시 메모리, SRAM(Static Random Access Memory), 영구적인 RAM(Persistent Random Access Memory), FRAM(Ferroelectric Random Access Memory), 또는 MRAM(Magnetoresistive Random Access Memory)과 같은 NVRAM(Non-Volatile Random Access Memory) 등일 수 있으나, 일반적으로 DRAM이다. 메모리(115)는 다른 메모리 타입들의 적절한 조합일 수 있다. 메모리(115)는 메모리 컨트롤러(125), 또는 머신(105)의 일부에 의해 제어될 수 있다.
SSD(120)는 다양한 SSD일 수 있고, 가비지 콜렉션을 수행하는 (플래시 메모리를 사용하지 않더라도)다른 형태의 스토리지를 포함하는 것으로 확장될 수 있다. SSD(120)는 프로세서(110)로 집적되거나 또는 머신(105)의 일부일 수 있는 스토리지 컨트롤러(130)에 의해 제어될 수 있다.
도 2는 도 1의 머신의 추가적인 상세도를 보여준다. 도 2를 참조하면, 일반적으로, 머신(105)은 머신(105)의 구성요소들의 동작들을 조정하는데 사용될 수 있는, 클럭(205), 및 메모리 컨트롤러(125)를 포함할 수 있는, 하나 이상의 프로세서들(110)을 포함한다. 프로세서들(110)은 예로서, RAM(random access memory), ROM(read-only memory), 또는 다른 상태 보존 매체를 포함할 수 있는 메모리(115)와 더 연결될 수 있다. 프로세서들(110)은 또한 스토리지 장치들(120)과연결될 수 있고, 이더넷 커넥터(Ethernet connector) 또는 무선 커넥터(wireless connector)일 수 있는 네트워크 커넥터(210)와 연결될 수 있다. 프로세서들(110)은 또한 버스(215)와 연결될 수 있고, 다른 구성요소들 중 입력/출력 엔진(225)을 사용하여 관리될 수 있는 입력/출력 인터페이스 포트들 및 사용자 인터페이스(220)가 버스(215)로 부착될 수 있다.
도 3은 도 1의 SSD(120)의 상세도를 보여준다. 도 3에서, SSD(120)는 호스트 인터페이스 로직(305), SSD 컨트롤러(310), 및 다양한 채널들(320-1~320-4)로 조직화될 수 있는 다양한 플래시 메모리 칩들(315-1~315-8)을 포함할 수 있다. 호스트 인터페이스 로직(305)은 SSD(120) 및 도 1의 머신(105) 사이의 통신들을 관리할 수 있다. SSD 컨트롤러(310)는 플래시 메모리 칩들(315-1~315-8)에 대한 가비지 콜렉션 동작과 함께 읽기 및 쓰기 동작들을 관리할 수 있다. SSD 컨트롤러(310)는 이러한 관리의 일부를 수행하는 플래시 변환 계층(325)을 포함할 수 있다.
도 3은 4개의 채널들(320-1~320-4)로 조직화된 8개의 플래시 메모리 칩들(315-1~315-8)을 포함하는 SSD(120)를 보여주고 있으나, 본 발명의 실시 예들은 다수의 채널들로 조직화된 다수의 플래시 메모리 칩들을 지원할 수 있다.
도 4는 도 1의 SSD(120)의 장치 스트림들로 매핑된 다양한 소프트웨어 스트림들과 연관된 다양한 커맨드들을 보여준다. 도 4에서, 다양한 커맨드들(405-1~405-k)이 도시된다. 커맨드들(405-1~405-k)은 도 1의 머신(105)의 소프트웨어 소스로부터 유래할 수 있다. 일반적으로 예시적인 소스들은 도 1의 머신(105)에서 구동하는 애플리케이션들 및 도 1의 머신(105)에서 구동하는 운영 체제(operating system)를 포함하나, 커맨드들(405-1~405-k)에 대한 다른 소스들이 가능하다.
커맨드들(405-1~405-k)은 소프트웨어 스트림들(410-1~410-n)으로 조직화될 수 있다. "소프트웨어 스트림들(software streams)"의 용어는 "장치 스트림들(device streams)"이라 지칭되는 SSD(120) 내부의 스트림과 구분하기 위하여 사용되고, "소프트웨어 스트림들(software streams)"은 애플리케이션들 및 운영 체제들을 포함하는 가능한 스트림 소스를 포함하는 것으로 의도된다. 일반적으로, 소프트웨어 스트림들(410-1~410-n)은 커맨드들(405-1~405-k)의 소스들에 의해 정의된다. 특정 소스가 오픈할 수 있는 스트림들의 개수는 제한되지 않는다. 예를 들어, 애플리케이션은 도 1의 SSD(120)로 기입되거나 또는 읽어지는 각 파일에 대하여 단일 스트림(single stream)을 오픈할 수 있다. 따라서, 스트림들의 개수(n)는 도 1의 SSD(120)로 커맨드들을 발행하는 운영 체제들 및 애플리케이션들의 개수를 초과할 수 있다. 같은 맥락에서, 애플리케이션들이 소프트웨어 스트림 당 복수의 커맨드들을 발행할 수 있기 때문에, 커맨드들의 개수(k)는 소프트웨어 스트림들의 개수(n)를 초과할 수 있다.
각 커맨드는 태그(415)를 포함할 수 있다. 태그(415)는 어느 소프트웨어 스트림들(410-1~410-n)이 커맨드와 연관되는지를 명시할 수 있다. 이러한 방식으로, 각 커맨드 소스(애플리케이션, 운영 체제 쓰레드, 또는 일부 다른 소스일 수 있음)는 소스에 가장 적절할 것 같은 방식으로 자신의 커맨드들을 관리할 수 있다.
그러나 소프트웨어 스트림들의 개수(n)가 가용한 메모리(available memory)에 의해서만 제한될 수 있는 반면에, 장치 스트림들(420-1~420-m)의 개수는 일반적으로 제한된다. 즉, 도 1의 SSD(120)는 고정된 개수의 장치 스트림들까지 지원할 수 있고, 미리 정해진 개수 이상은 지원하지 않을 수 있다. 소프트웨어 스트림들의 개수(n)가 장치 스트림들의 개수(m)보다 많지 않은 경우, 소프트웨어 스트림들은 장치 스트림들과 일대일 관계로 할당될 수 있다. 그러나 소프트웨어 스트림들이 장치 스트림들보다 많은 경우(수학적으로, n>m인 경우), 장애가 발생한다. 예를 들어, 적어도 하나의 장치 스트림은 복수의 소프트웨어 스트림들과 연관된 커맨드들을 처리할 필요가 있다. 매핑(425)은 소프트웨어 스트림들(410-1~410-n)이 장치 스트림들(420-1~420-m)에 어떻게 매핑되었는지 저장할 수 있다. 도 5 내지 도 9b는 매핑(425)이 어떻게 생성될 수 있는지를 보여준다.
도 5는 도 3의 호스트 인터페이스 로직(305)의 상세도를 보여준다. 도 5에서, 도 3의 호스트 인터페이스 로직(305)이 도 4의 매핑(425)을 생성하는 것을 담당하는 것으로 도시된다. 그러나 본 발명의 다른 실시 예들에서, 도 5에 도시된 구성요소들은 예를 들어, 도 1의 메모리 컨트롤러(125), 도 1의 스토리지 컨트롤러(130)의 일부로써 포함되고, 소프트웨어 형태로 구현될 수 있거나, 쓰기 커맨드들을 발생하기 전에 스트림들을 조합하고 쓰기 요청들을 가로챌 수 있는 라이브러리 루틴(library routines)으로 구현될 수 있거나, 도 1의 SSD(120) 내에서 또는 머신(105)내의 다른 곳에서 별도의 특정 목적 하드웨어(special purpose hardware)로써 구현될 수 있다. 설명의 편의를 위하여, 도 5 내지 도 9b에 첨부된 설명들이 도 3의 호스트 인터페이스 로직(305) 내의 구현에 중점을 두더라도, 도 4의 매핑(425)의 생성에 대한 참조는 어떤 특정 위치에서의 구현을 포함하도록 의도된다.
도 5에서, 호스트 인터페이스 로직(305)(host interface logic)은 수신기(505)(receiver), 타이머(510)(timer), 통계 수집기(515)(statistics collector), 등급 결정기(520)(ranker), 및 매퍼(525)(mapper)를 포함한다. 이러한 구성요소들은 적절한 구현을 위하여, 소프트웨어 또는 하드웨어 형태로 구현될 수 있다. 예를 들어, 도 3의 호스트 인터페이스 로직(305) 내에 구현된 본 발명의 실시 예들에 대하여, 구현은 회로를 포함할 수 있는 반면에, 도 1의 메모리 컨트롤러(125) 또는 도 1의 스토리지 컨트롤러(130)내에 구현된 본 발명의 실시 예들에 대하여, 구현은 소프트웨어를 포함할 수 있다.
수신기(505)는 다양한 소프트웨어 소스들로부터 도 4의 커맨드들(405-1~405-k)을 수신할 수 있다. 다시 한번 말하면, 도 4의 커맨드들(405-1~405-k) 각각은 도 4의 어느 소프트웨어 스트림들(410-1~410-n)이 커맨드와 연관되는지를 가리키는 도 4의 태그(415)를 포함할 수 있다.
타이머(510)는 윈도우가 오픈되고 클로즈되는 때를 측정하는데 사용될 수 있다. 일정 시간동안 윈도우를 사용함으로써, 통계 수집기(515)는 도 4의 소프트웨어 스트림들(410-1~410-n)을 도 4의 장치 스트림들(420-1~420-k)에로 매핑하는것을 지원할 수 있는, 도 1의 머신(105) 상의 작업부하를 대표하는 도 4의 스트림들(410-1~410-n)에 대한 통계를 연산할 수 있다.
도 6은 이러한 윈도우의 예를 보여준다. 도 6에서, 윈도우(605)는 커맨드들(405-1~405-k)의 일부, 특히 커맨드들(405-1~405-3)을 스패닝(spanning)하는 것으로 도시된다. 윈도우(605) 동안 발행된 커맨드들의 통계 분석을 기반으로, 도 1의 머신(105)상의 작업부하의 대표 분석이 결정될 수 있다. 도 6에 도시된 바와 같이, 3개의 커맨드들이 도 1의 머신(105)의 작업 부하의 대표 샘플을 제공하지 않을 것이다. 그러나 본 발명의 실시 예들은 특정 윈도우 내의 다수의 커맨드들을 지원할 수 있다. 윈도우(605)가 합리적인 개수의 커맨드들을 커버하도록 도시된다면, 도 6은 읽을 수 없을 정도로 복잡할 것이다.
윈도우(605)의 크기(도 5의 타이머(510)에 의해 측정되는 바와 같이)는 도 1의 머신(105)이 위치하는 용도에 따라 변할 수 있다. 예를 들어, 단위 시간당 발행되는 커맨드들의 평균 개수는 동일하나, 표준 편차(standard deviations)의 변화가 큰 2개의 머신들을 고려하자. 커맨드들의 개수에서 작은 표준 편차를 갖는 머신은 시간이 지남에 따라 상당히 고르게 분산되는 커맨드들을 포함할 것이다. 이는 작은 윈도우(605)가 커맨드들의 대표 샘플들을 캡쳐할 것임을 의미한다. 반면에, 커맨드들의 개수에서 큰 표준 편차를 갖는 머신은 상대적으로 낮은 활동도 및 높은 활동도의 조합된 구간들을 포함할 것이다. 윈도우(605)가 좁은 윈도우이고, 상대적으로 낮은 활동도의 구간들을 캡쳐하는 경우, 그것들의 커맨드들의 통계 분석은 전체 머신 상의 작업 부하를 나타내지 못할 것이다. 그러므로, 윈도우(605)는 커맨드들의 개수에서 작은 표준 편차를 갖는 머신에서 사용되는 윈도우보다 상대적으로 더 큰 윈도우일 필요가 있을 것이다.
윈도우(605)는 슬라이딩 윈도우(sliding window) 또는 불연속 윈도우(discrete window) 중 하나일 수 있다. 슬라이딩 윈도우는, 명칭이 암시하는 바와 같이, 주변을 슬라이딩하는 윈도우이다. 일반적으로, 슬라이딩 윈도우는 고정된 시간 구간을 커버하고, 시간이 흐름에 따라 시간 방향으로 이동한다. 예를 들어, 슬라이딩 윈도우는 시간(T0)에서 시작할 수 있다. 슬라이딩 윈도우는 시간(T1)까지 오픈을 유지할 수 있다. 시간(T1)에서 시작하여, 윈도우는 윈도우가 현재시간에서 항상 종료되도록 앞으로 이동할 수 있다. 슬라이딩 윈도우가 앞으로 이동함에 따라, 새로운 정보가 윈도우에 진입(enter)할 수 있고, 슬라이딩 윈도우의 시작에서의 정보(즉, 시간(T0)에 가장 가까운 정보)는 윈도우에서 벗어날(exit) 수 있다.
반면에, 불연속 윈도우는 고정된 시간 구간을 커버할 수 있고, 이동하지 않는다. 예를 들어, 불연속 윈도우는 시간(T0)으로부터 시간(T1)까지의 구간에서 통계를 잡을 수 있다. 시간(T1)에 도달했을 때, 윈도우에 대한 통계의 수집은 종료된다. (새로운 윈도우가 시간(T1)과 같은 시점에서 시작할 수 있다.)
통계 수집기(515)는 적절한 척도들(criteria)에 대한 통계(statistics)를 수집할 수 있다. 예시적인 척도들은 도 7에 도시된다. 척도들(705)의 예들은 이하의 구성들을 포함할 수 있다.
빈도(710)(Frequency): 도 6의 윈도우(605) 동안 특정 소프트웨어 스트림과 연관된 커맨드들(읽기들, 쓰기들, 또는 둘 모두)이 얼마나 많이 발행되는지를 가리킴. 더 많은 커맨드들을 갖는 소프트웨어 스트림이 더 적은 커맨드들을 갖는 소프트웨어 스트림보다 더 높은 등급(higher rank)를 가질 것이다.
누적 데이터 크기(715)(Accumulated data size): 도 6의 윈도우(605) 동안 특정 소프트웨어 스트림에 대하여 얼마나 많은 데이터가 기입되었는지를 가리킴. 더 큰 누적 데이터 크기를 갖는 소프트웨어 스트림은 더 작은 누적 데이터 크기를 갖는 소프트웨어 스트림보다 더 높은 등급을 가질 것이다.
순차 쓰기들의 개수(720)(Number of sequential writes): 도 6의 윈도우(605) 동안 특정 소프트웨어 스트림내에서 순차적인(또는 순차적으로 패턴화된) 논리 블록 어드레스들(LBAs; logical block addresses)로의 쓰기들이 얼마나 많이 발생했는지를 가리킴. 더 많은 순차 쓰기들을 갖는 소프트웨어 스트림은 더 적은 순차 쓰기들을 갖는 소프트웨어 스트림보다 더 높은 등급을 가질 것이다.
서비스 품질(725)(Quality of Service): 특정 소프트웨어 스트림이 특정한 서비스 품질(quality of service)을 요구하는지를 가리킴. (다른 소프트웨어 스트림들보다 이러한 소프트웨어 스트림에 더 높은 우선 순위를 부여할 수 있음.) 예시적인 다른 서비스 품질의 특징들은 미국 임시출원번호 US 62/309,446(2016.03.16)을 우선권 주장하는 미국특허출원번호 US 15/167,974 (2016.05.27)에서 발견될 수 있으며, 레퍼런스로써 첨부된다. 더 높은 서비스 품질 요구를 갖는 소프트웨어 스트림은 더 낮은 서비스 품질 요구를 갖는 소프트웨어 스트림보다 더 높은 등급을 가질 것이다.
유휴 시간(730)(Idle time): 특정 소프트웨어 스트림에 대한 커맨드들 사이에서 얼마나 오랜 시간이 소모되었는지를 가리킴. 더 짧은 유휴 시간을 갖는 소프트웨어 스트림은 더 긴 유휴 시간을 갖는 소프트웨어 스트림보다 더 높은 랭크를 가질 것이다.
도 5의 통계 수집기(515)는 적절한 방식으로 통계를 수집할 수 있다. 예를 들어, 도 6의 윈도우(605)가 불연속 윈도우인 경우, 도 5의 통계 수집기(515)는 도 6의 윈도우(605)의 시작에서 모든 통계를 제로(zero, 0)로 리셋할 수 있다. 그 이후에, 스트림에 대한 통계에서 변화를 일으키는 커맨드들이 발생되면, 도 5의 통계 수집기(515)는 적절하게 통계를 조정할 수 있다.
예를 들어, 척도(criterion)로써 빈도(710)를 사용하는 것을 고려하자. 커맨드가 수신될 때마다, 도 5의 통계 수집기(515)는 커맨드와 연관된 소프트웨어 스트림이 무엇인지 판별할 수 있다. 도 5의 통계 수집기(515)는 판별된 소프트웨어 스트림에 대한 빈도 카운터(값)를 증가시킬 수 있다. 누적 데이터 크기(715)에 대하여 기입된 데이터의 총량을 합하는 것, 순차 쓰기들의 개수(720)에 대하여 순차 쓰기들의 개수를 카운팅하는 것, 서비스 품질(725)에 대하여 특정 서비스 품질을 나타내는 값을 할당하는 것, 또는 유휴 시간(730)에 대하여 특정 소프트웨어 스트림이 계류 중인 커맨드들을 포함하지 않는 시간의 총량을 합산하는 것과 같이, 도 5의 통계 수집기(515)는 다른 척도들에 대하여 유사한 값들을 수집할 수 있다.
반면에, 도 6의 윈도우(605)가 슬라이딩 윈도우인 경우, 도 5의 통계 수집기(515)는 커맨드들이 도 6의 윈도우(605)로 진입하고 벗어남에 따라 통계를 조정할 수 있다. 예로써, 빈도(710)를 사용하는 것을 다시 고려하면, 특정 소프트웨어 스트림과 연관된 커맨드들이 도 6의 윈도우(605)로 진입하는 경우, 도 5의 통계 수집기(515)는 특정 소프트웨어 스트림과 연관된 카운터를 증가시킬 수 있다. 특정 소프트웨어 스트림과 연관된 커맨드들이 도 6의 윈도우(605)에서 벗어나는 경우, 도 5의 통계 수집기(515)는 특정 소프트웨어 스트림과 연관된 카운터를 감소시킬 수 있다. 이러한 방식으로, 도 5의 통계 수집기(515)에 의해 수집된 통계는 도 6의 윈도우(605) 내의 커맨드들을 항상 나타낼 수 있다. 도 5의 통계 수집기(515)는 다른 척도들에 대해서 유사하게 동작할 수 있다.
본 발명의 일부 실시 예들에서, 윈도우(605)가 불연속 윈도우인 경우, 윈도우(605)가 여전히 오픈되어 있더라도(그러므로, 커맨드들(405-1~405-k) 전체가 통계적인 목적을 위하여 처리되지 않더라도), 윈도우(605)에 대하여 지금까지 사용 가능한 통계를 사용하여 매핑(425)이 설정될 수 있다. 그러나 본 발명의 다른 실시 예들에서, 하나의 윈도우 동안 생성된 통계는 실제로 윈도우(605)가 클로즈된 이후의 시간 주기 동안 매핑(425)을 설정하는데 사용된다. 즉, 윈도우(605)가 시간(T0)로부터 시간(T1)까지의 기간 동안 통계를 수집하는데 사용되는 경우, 그것들의 통계는 시간(T1) 이후에 수신된 커맨드들(405-1~405-k)에 대한 매핑(425)을 설정하는데 사용될 수 있다. 불연속 윈도우(605)가 반복하는 불연속 윈도우인 경우, 즉, 윈도우(605)가 고정된 크기를 갖고, 하나의 윈도우가 클로즈되고, 다른 윈도우가 자동으로 오픈되는 경우, 각 윈도우에서 수집된 통계는 다음 윈도우에 대한 매핑(425)을 설정하는데 사용된다. 예를 들어, 시간(T0) 및 시간(T1) 사이에서 수집된 통계는 시간(T1) 및 시간(T2) 사이에서 매핑(425)을 생성하는데 사용될 수 있고, 시간(T1) 및 시간(T2) 사이에서 수집된 통계는 시간(T2) 및 시간(T3) 사이에서 매핑(425)을 생성하는데 사용될 수 있다.
본 발명의 다른 실시 예들에서, 윈도우(605)가 불연속 윈도우인 경우, 도 5의 통계 수집기(515)는 머신(105)의 사용자의 머신(105)에 의해 명령될 경우에만 통계를 수집하도록 동작한다. 즉, 윈도우(605)는 새로운 통계 수집을 위하여 수동으로(manually) 오픈될 수 있다. 일단 새로운 통계가 수집되면, 매핑(425)이 생성될 수 있다. 그 이후에, 매핑(425)은 도 3의 호스트 인터페이스 로직(305)이 새로운 매핑(425)을 생성하는 명령을 수신할 때까지 무기한으로 유지된다. 그 이후에, 새로운 윈도우(605)가 오픈되고, 도 5의 통계 수집기(515)는 새로운 윈도우(605)동안 수신된 커맨드들을 기반으로 새로운 통계를 수집한다.
윈도우(605)가 슬라이딩 윈도우인 경우, 매핑(425)은 원하는 스케줄 로 조정될 수 있다. 예를 들어, 매핑(425)은 도 5의 통계 수집기(515)에 의해 수집된 통계가 변경될 때마다 변경될 수 있다. 예를 들어, 커맨드가 윈도우(605)로 진입할 때마다, 대응하는 애플리케이션-할당 스트림 ID에 대한 도 7의 빈도(710)가 증가될 수 있고, 커맨드가 윈도우(605)를 벗어날 때마다, 대응하는 애플리케이션-할당 스트림 ID에 대한 도 7의 빈도(710)가 감소될 수 있다. 또는, 매핑(425)이 일정한 간격으로(예를 들어, 시간(T1) 또는 그것의 배수) 조정될 수 있다. 본 발명의 실시 예들은 다른 원하는 스케줄에 따라 매핑(425)을 업데이트하는 것을 지원할 수 있다.
윈도우(605)가 슬라이딩 윈도우 또는 불연속 윈도우인 것과 무관하게, 초기 윈도우(605) 동안 소프트웨어 스트림들(410-1~410-n)을 장치 스트림들(420-1~420-n)로 매핑하는 것을 관리하는 방법에 대한 의문이 발생할 수 있다. 초기 윈도우(605) 동안, 이전에 수집된 통계가 없는 경우, (미리 정해진 매핑이 모든 상황에서 가장 최적화될 것 같지 않기 때문에) 어떤 매핑이든 사용될 수 있다. 그러나 일단 도 5의 통계 수집기(515)가 일부 통계를 수집하면, 향후 커맨드들에 대한 매핑(425)을 생성하는 것이 가능하다.
도 5를 다시 참조하면, 일단 윈도우(605)에 대해서 통계가 수집되면, 등급 결정기(520)는 그것들의 통계를 사용하여 도 4의 소프트웨어 스트림들(410-1~410-n)을 등급 매길(rank) 수 있다. 일반적으로 값이 낮을수록 등급이 높아지나, 본 발명의 실시 예들은 높은 값이 높은 등급을 가리키는 것을 지원할 수 있다. 주어진 척도에서, 애플리케이션-할당 스트림 ID들은 그 척도에 대한 그것들의 값들의 정렬된 위치에 따라 등급을 할당 받을 수 있다. 예를 들어, 빈도(710)가 척도로써 사용되는 경우, 가장 높은 빈도를 갖는 애플리케이션-할당 스트림 ID는 등급 1(rank 1)을 할당 받을 수 있고, 다음으로 높은 빈도를 갖는 애플리케이션-할당 스트림 ID는 등급 2(rank 2)를 할당 받을 수 있고, 가장 낮은 주기를 갖는 애플리케이션-할당 스트림 ID까지 등급이 내려간다. 등급들은 이하의 표 1 및 표 2를 참조하여 더욱 상세하게 설명된다. 일단 도 4의 소프트웨어 스트림들(410-1~410-n)이 등급 매겨지면, 매퍼(525)는 도 4의 소프트웨어 스트림들(410-1~410-n)을 장치 스트림들(420-1~420-m)로 매핑할 수 있다.
매퍼(525)는 도 4의 소프트웨어 스트림들(410-1~410-n)을 2개의 서브셋들로 분할함으로써 도 4의 매핑(425)을 생성할 수 있다. 제1 서브셋의 소프트웨어 스트림들은 일대일 매핑으로 장치 스트림들로 할당될 수 있다. 제2 서브셋의 소프트웨어 스트림들은 하나의 통합 장치 스트림(single consolidated device stream)으로 모두 할당될 수 있다. 다시 말해서, 제1 서브셋의 소프트웨어 스트림들은 할당된 고유의 장치 스트림을 획득하는 반면에, 제2 서브셋의 소프트웨어 스트림들 전체는 하나의 장치 스트림을 공유한다. 제2 서브셋의 소프트웨어 스트림들 전체가 단일 장치 스트림을 공유하기 때문에, 이는 제1 서브셋이 m-1개까지의 소프트웨어 스트림들을 포함할 수 있음을 의미한다. 이 때, m은 도 1의 SSD(120)에 의해 지원되는 도 4의 장치 스트림들(420-1~420-m)의 개수이다.
도 4의 소프트웨어 스트림들(410-1~410-n)의 서브셋들은 등급 결정기(520)에 의해 결정된 도 4의 소프트웨어 스트림들(410-1~410-n)에 대한 등급들을 기반으로 결정될 수 있다. 예를 들어, 도 1의 SSD(120)에 의해 지원되는 도 4의 m개의 장치 스트림들(420-1~420-m)이 존재하는 것으로 가정하면, (선택된 척도/척도들에 따라 등급 매겨지는 바와 같이) m-1개의 최상위 등급의 소프트웨어 스트림들은 제1 서브셋에 포함될 수 있고, 낮은 등급의 소프트웨어 스트림들 전체는 제2 서브셋에 포함될 수 있다. 이러한 할당은 각각 고유 장치 스트림을 할당 받은 최고 등급을 갖는 소프트웨어 스트림들 및 통합된 장치 스트림을 공유하는 최저 등급의 소프트웨어 스트림들을 야기한다.
m-1개의 특정 소프트웨어 스트림들이 제1 서브셋에 포함된 것으로 식별되지 않을 수 있는 경우(예를 들어, 등급 m-1의 동점이 있는 경우), (선택 사항들이 모두 동일한 등급을 갖기 때문에,) 원하는 해결책이 제1 서브셋을 위한 최종 소프트웨어 스트림들을 선택하는데 사용될 수 있다. 예를 들어, m개의 소프트웨어 스트림들이 모두 최상위 등급을 갖는 것으로 가정하자 (부득이한 경우에 가능한 시나리오). m개의 소프트웨어 스트림들은 모두 동일한 등급을 갖기 때문에, m개의 소프트웨어 스트림들 중 m-1개가 제1 서브셋을 위하여 선택될 수 있고, 하나의 선택되지 않은 스트림은 제2 서브셋의 일부가 됨으로써, 통합 장치 스트림을 공유하는 것으로 밀려난다.
모든 장치 스트림들이 동등하다면, 어느 장치 스트림이 제2 서브셋의 소프트웨어 스트림들에 대하여 통합된 스트림으로써 사용되는지 또는 제1 서브셋의 m-1개의 소프트웨어 스트림들이 m-1개의 장치 스트림들로 어떻게 매핑되는지에 차이가 없다. 그러나 장치 스트림들이 구분 가능하다면, 매핑이 중요할 수 있다. 예를 들어, 가장 높은 우선 순위 장치 스트림(the highest priority device stream)이 통합 장치 스트림으로써 사용될 수 있다 (그 장치 스트림이 다수의 소프트웨어 간에 공유되기 때문이다). 남은 장치 스트림들은 사용된 척도에 기반된 그것들의 랭킹에 따라 제1 서브셋의 소프트웨어 스트림들로 할당될 수 있다. (최상위 등급을 갖는 소프트웨어 스트림은 사용 가능한 가장 높은 우선 순위 장치 스트림을 수신하고, 두번째로 높은 등급을 갖는 소프트웨어 스트림은 사용 가능한 2번째로 높은 우선 순위 장치 스트림을 수신한다.) 또는 통합 장치 스트림이 척도에 따라 낮은 등급을 갖는 다수의 소프트웨어 스트림들 사이에서 공유되기 때문에, 통합 장치 스트림은 사용 가능한 가장 낮은 우선 순위 장치 스트림으로써 선택될 수 있고, 제1 서브셋의 소프트웨어 스트림들은 척도에 따른 소프트웨어 스트림들의 등급들에 따라 가장 높은 우선 순위 장치 스트림으로 매핑된다. 본 발명의 실시 예들은 소프트웨어 스트림들로부터 장치 스트림들로의 원하는 매핑 기법을 지원할 수 있다.
상술된 설명은 하나의 장치 스트림만 통합 장치 스트림으로써 동작하는 것을 설명하나, 본 발명의 다른 실시 예들이 가능하다. 예를 들어, 복수의 장치 스트림들이 통합 장치 스트림들로써 사용될 수 있다. 본 발명의 이러한 실시 예는 도 4의 소프트웨어 스트림들의 개수(410-1~410-n)가 도 4의 장치 스트림들(420-1~420-m)의 개수를 상당히 초과할 경우에 유용할 수 있다. 소프트웨어 스트림들(410-1~410-n)의 대부분을 하나의 통합 장치 스트림들로 통합하는 것은 소프트웨어 스트림들 전체의 성능 저하를 유발할 수 있다. 복수의 통합 장치 스트림들을 사용함으로서, 통합된 소프트웨어 스트림들의 성능이 향상될 수 있다. (단, 고유한 장치 스트림들을 할당받을 수 있는 소프트웨어 스트림들의 개수를 감소하는 대가로.)
얼마나 많은 장치 스트림들이 통합 장치 스트림들로써 사용되는지는 원하는 기법을 사용하여 판별될 수 있다. 예를 들어, 도 7의 빈도(710)를 척도로써 사용할 경우, 상한 값(upper limit)이 하나의 통합 장치 스트림으로 할당될 소프트웨어 스트림들의 개수로 설정될 수 있다. 제2 서브셋의 소프트웨어 스트림들의 개수가 이러한 상한 값보다 큰 경우, 통합 장치 스트림으로 할당된 소프트웨어 스트림들의 개수를 이러한 상한 값 이하로 유지하는데 필요한 만큼 추가적인 장치 스트림들이 통합 장치 스트림들로써 사용될 수 있다. 동일한 개념이 도 7의 다른 척도들(705)을 사용하여 적용될 수 있다. 예를 들어, 도 7의 누적 데이터 크기(715)를 척도로써 사용할 경우, 하나의 통합 장치 스트림을 사용하여 기입될 누적 데이터의 총량에 대한 상한 값이 할당될 수 있다. 또는 도 7의 서비스 품질(725)을 척도로써 사용할 경우, 최대 전체 레이턴시가 도 6의 윈도우(605)의 지속 기간을 기반으로 통합 장치 스트림에 대해 설정될 수 있다. 통합 장치 스트림으로 할당된 커맨드들의 전체 개수가, 통합 장치 스트림에 대한 전체 레이턴시가 이러한 최대 전체 레이턴시보다 큰 것을 의미하는 경우, 추가적인 통합 장치 스트림이 사용될 수 있다.
추가적으로, 원하는 장치 스트림이 통합 장치 스트림으로 사용을 위하여 선택될 수 있다. 예를 들어, 통합 장치 스트림이 다수의 소프트웨어 소스들과 연관된 커맨드들을 처리할 수 있기 때문에, 통합 장치 스트림이 하나의 소프트웨어 스트림과 연관된 커맨드들을 처리하는 다른 장치 스트림들보다 좀 더 많은 커맨드를 포함하는 것으로 예상하는 것이 타당할 수 있다. 따라서, 높은 우선순위를 갖는 장치 스트림을 통합 장치 스트림으로써 선택하는 것이 유리할 수 있다. (이는 통합 장치 스트림이 오직 하나의 소프트웨어 스트림과 연관된 커맨드드을 처리하는 장치 스트림들보다 상대적으로 느리게 커맨트들을 처리할 수 있다는 사실을 보상하기 한 것이다.) 이러한 선택은 (비록 QoS가 높은 우선 순위의 장치 스트림을 통합 장치 스트림으로 선택하기 위한 유일한 이유는 아니더라도), 스트림들이 QoS 보증을 제공할 경우에 특히 유리할 수 있다.
척도들을 조합하는 것 또한 가능하다. 예를 들어, 도 4의 매핑(425)을 위하여 스트림을 등급 결정하는데 사용되는 척도가 유휴 시간(730)을 사용할 수 있으나, 얼마나 많은 통합 장치 스트림을 사용할지를 결정하는데 사용되는 척도는 윈도우(605)동안 통합 장치 스트림으로 할당된 커맨드들의 최대 개수일 수 있다. 본 발명의 실시 예들은 얼마나 많은 통합 장치 스트림들을 사용할지를 결정하는데 척도들의 사용을 지원할 수 있다. (이하의 도 8 내지 도 9b를 참조하여 설명되는 바와 같이, 소프트웨어 스트림들(410-1~410-n)의 등급 결정에 복수의 척도를 사용하는 것이 가능하다.)
상술된 바와 같이, 본 발명의 실시 예들은 도 3의 호스트 인터페이스 로직(305)내에 구현될 수 있다. 본 발명의 이러한 실시 예들에서, 구현은 도 1의 SSD(120)에 포함된다. SSD(120)가 도 4의 매핑(425)을 직접적으로 관리할 수 있기 때문에, 특정 소프트웨어 스트림이 어떤 장치 스트림으로 할당되어야 하는지 아는 것이 어렵지 않다. 본 발명의 이러한 실시 예들에서, 전송기(530) 및 장치 스트림 식별자(ID) 추가기(535)는 필요하지 않다. (기술적으로, 호스트 인터페이스 로직(305)은 데이터를 요청한 애플리케이션 또는 운영 체제 쓰레드로 정보를 다시 전송하는 전송기를 포함할 수 있다. 단 전송기(530)는 도 1의 SSD(120)의 종래의 전송기로써 동작할 수 있다.)
단, 본 발명의 실시 예들이 도 1의 메모리 컨트롤러(125), 도 1의 스토리지 컨트롤러(130)에서 또는 라이브러리 루틴으로써 구현되는 경우, 도 1의 SSD(120)는 도 4의 매핑(425)으로의 액세스를 반드시 포함하는것은 아니다. 본 발명의 일부 실시 예들에서, 도 1의 SSD(120)가 매퍼(525)에 의해 판별되는 바와 같이 매핑을 수행할 수 있도록 전송기(530)는 도 4의 매핑(425)을 전송할 수 있다. 그러나 도 4의 매핑(425)을 도 1의 SSD(120)로 전송하는 것 대신에, 본 발명의 다른 실시 예들은 장치 스트림 ID 추가기(535)를 사용함으로써 어떤 장치 스트림으로 특정 커맨드가 할당되어야 하는지를 도 1의 SSD(120)로 알릴 수 있다. 장치 스트림 ID 추가기(535)는 도 4의 연관된 장치 스트림들(420-1~420-m)을 지칭하는, 도 4의 태그(415)와 유사한, 추가 태그를 포함할 수 있다. 이러한 방식으로, 도 1의 SSD(120)는 도 4의 어느 장치 스트림(420-1~420-m)을 특정 커맨드 처리를 위하여 사용할지 알 수 있다.
본 발명의 실시 예들이 구현되는 위치와 무관하게, 도 4의 매핑(425)은 자동으로 또는 수동으로 재 생성될 수 있다. 예를 들어, 도 4의 매핑(425)은 커맨드들이 도 6의 윈도우(605)로 진입하고 나감에 따라 갱신될 수 있다. 이는 소프트웨어 스트림들(410-1~410-n)에 대한 통계에 영향을 미치고, 차례로, 도 4의 매핑(425)의 재생성을 개시할 수 있다. 또는 도 6의 윈도우(605)가 일정한 간격으로 사용되는 불연속 윈도우인 경우, 도 6의 불연속 윈도우(605)가 닫힐 때마다, 도 4의 매핑(425)은 자동으로 재생성되어 통계 수집기(515)에 의해 수집된 새로운 통계를 반영한다.
반면에, 수동 재생성이 시작될 때까지 도 4의 매핑(425)이 유지될 수 있다. 수동 재생성을 달성하기 위하여, 도 3의 호스트 인터페이스 로직(305), 도 1의 메모리 컨트롤러(125), 도 1의 스토리지 컨트롤러(130), 또는 라이브러리 루틴은 수동 재생성을 시작하는 커맨드들을 수신하고, 통계를 클리어하고, 새로운 통계를 수집하는 지원(support)을 포함할 수 있다. 이러한 커맨드들을 처리하는 지원은 펌웨어 형태(도 3의 호스트 인터페이스 로직(305)에 미도시됨) 또는 소프트웨어 형태(도 1의 메모리 컨트롤러(125) 내, 도 1의 스토리지 컨트롤러(130) 내, 또는 라이브러리 루틴)로 구현될 수 있다.
도 8은 도 5의 등급 결정기(520)의 상세도를 보여준다. 상술된 바와 같이, 등급 결정기(520)는 선택된 척도 또는 척도들을 기반으로 소프트웨어 스트림들(410-1~410-n)을 등급 결정할 수 있다. 도 8에서, 등급 결정기(520)가 척도(805), 기준치(810), 및 비교기(815)를 포함하는 것으로 도시된다. 척도(805)는 소프트웨어 스트림들을 등급 결정하는데 사용될 척도를 식별할 수 있다. 도 5의 통계 수집기(515)가 하나의 척도에 대한 통계만 수집하는 경우, 등급 결정기(520)는 어느 척도가 사용되는지 알 필요가 없을 수 있으며, 이 경우, 척도(805)은 생략될 수 있기 때문에, 척도(805)은 점선으로 도시된다. 그러나 도 5의 통계 수집기(515)가 하나의 척도에 대한 통계만 수집하더라도, 등급 결정기(520)는 어느 척도가 사용되는지 알 필요가 있을 수 있으며, 이러한 정보는 등급 순서에 영향을 미칠 수 있다. 예를 들어, 도 7의 빈도(710)는 대응하는 더 높은 빈도들을 갖는 소프트웨어 스트림에 대하여 더 높은 등급을 제안할 것이다. 그러나, 도 7의 유휴 시간(730)은 대응하는 작은 유휴 시간들을 갖는 소프트웨어 스트림들에 대하여 더 높은 등급을 제안할 것이다.
등급 결정기(520)가 하나의 척도만 사용하여 동작하는 경우, 모든 등급 결정기(520)는 각 소프트웨어 스트림에 대응하는 척도에 대한 값들에 의존하여 소프트웨어 스트림들(410-1~410-n)을 순서대로 배치해야 한다. 그러나 등급 결정기(520)는 도 4의 소프트웨어 스트림들(410-1~410-n)을 등급 결정하는데 하나 이상의 척도를 사용할 수 있다.
본 발명의 일 실시 예에서, 등급 결정기(520)는 둘 또는 그 이상의 척도를 사용하여 도 4의 소프트웨어 스트림들(410-1~410-n)을 등급 결정할 수 있다. 본 발명의 이러한 실시 예에서, 등급 결정기(520)는 기준치(810)(threshold) 및 비교기(815)(comparator)를 포함할 수 있다. 값들이 기준치(810)를 초과할 경우, 하나의 척도가 사용될 수 있고, 제1 척도에 대한 값들이 기준치(810)를 초과하지 않는 경우, 다른 척도가 사용될 수 있다. 비교기(815)는 소프트웨어 스트림들을 등급 결정하는데 어느 척도가 사용될지 판별하는데 사용될 수 있다.
도 9a는 이러한 절차를 보여준다. 도 9a에서, 비교기(815)는 도 4의 소프트웨어 스트림들(410-1~410-n)을 등급 결정하는데 사용되는 2개의 척도들에 대한 값들(905-1, 905-2) 및 기준치(810)를 수신할 수 있다. 비교기(815)는 기준치(810) 및 값(905-1)(기준치(810)와 연관된 척도에 대한 값으로써 여기에서 임의로 선택됨)을 비교할 수 있다. 값(905-1)이 기준치(810)보다 큰 경우, 비교기(815)는 값(905-1)을 (선택된 값(910)으로써) 선택하여 도 4의 소프트웨어 스트림들(410-1~410-n)을 등급 결정하는데 사용할 수 있다.
예는 이러한 시나리오에서 도 5의 등급 결정기(520)의 동작을 설명하는데 도움이 될 수 있다. 선택된 제1 척도가 도 7의 누적 데이터 크기(715)이고, 제2 척도는 도 7의 빈도(710)인 것으로 가정하자. 또한 도 4의 소프트웨어 스트림들(410-1~410-n)은 이하의 표 1에 기재된 척도들에 대한 통계인 것으로 가정하자.
소프트웨어 스트림 누적 데이터 크기 빈도
1 1.0 GB 30
2 0.75 MB 5
3 0.65 MB 6
4 1.2 GB 4
기준치(810)가 1MB로 설정된 경우, 4개의 소프트웨어 스트림들은 4, 1, 3, 2의 순서로 등급 결정될 것이다. 소프트웨어 스트림들 1 및 4 각각은 1MB를 초과하는 누적 데이터 크기들을 갖고, 소프트웨어 스트림 4는 보다 큰 누적 데이터 크기를 갖는다. (소프트웨어 스트림 1이 소프트웨어 스트림 4보다 좀더 많은 연관된 커맨드들을 갖는 사실은 관련이 없다.) 반면에, 소프트웨어 스트림들 2 및 3은 1MB보다 작은 누적 데이터 크기들을 갖고, 이러한 스트림들은 그것들의 주기를 기반으로 등급 결정된다. 소프트웨어 스트림 3은 가장 작은 누적 데이터를 기입함에도 불구하고, 더욱 많은 연관된 커맨드들 갖기 때문에, 소프트웨어 2보다 높게 등급 결정된다.
상술된 설명은 2개의 척도들을 사용하는 것에 중점을 두고 있으나, 본 발명의 실시 예들은 소프트웨어 스트림들의 최종 등급을 결정하는데 다수의 척도들을 사용하는 것을 지원할 수 있다. 즉, 제1 척도는 제1 기준치를 초과하는 제 1 척도에 대한 값들을 갖는 소프트웨어 스트림들을 등급 결정하는데 사용될 수 있고, 나머지 소프트웨어 스트림들의 제2 척도에 대한 값들이 제2 기준치보다 큰 경우, 제2 척도는 나머지 소프트웨어 스트림들(즉, 제1 척도에 대한 값이 제1 기준치를 초과하지 않는 소프트웨어 스트림들)을 등급 결정하는데 사용될 수 있다. 또한, 이러한 설명은 특정 기준치를 초과하는 값을 갖는 소프트웨어 스트림들에 초점을 맞추고 있으나, 본 발명의 실시 예들은 등급 결정의 목적을 위하여, (하한 경계 대신에) 상한 경계(upper bound)로써 하나 이상의 기준치들을 사용하는 것을 지원할 수 있다. 예를 들어, 유휴 시간이 100ms보다 작은 경우, 유휴 시간이 적어도 100ms인 소프트웨어 스트림들에 대한 등급 결정 척도로써 사용되는 도 7의 빈도(710)와 함께, 도 7의 유휴 시간(730)이 등급 결정 척도로써 사용될 수 있다.
도 8을 다시 참조하면, 본 발명의 다른 실시 예들에서, 등급 결정기(520)는 가중치 합(weighted sum)을 수행함으로써 복수의 척도들을 사용할 수 있다. 본 발명의 이러한 실시 예들에서, 등급 결정기(520)는 산술 논리 유닛(820)(ALU; arithmetic logic unit) 및 가중치들(825-1~825-l)을 포함할 수 있다. 가중치들(825-1~825-l)은 가중치 합에 포함된 별도의 척도들 각각으로 적용될 가중치들을 나타낼 수 있고, ALU(820)는 가중치 합을 연산하는데 필수적인 계산을 수행할 수 있다. 다시 말해서, 가중치들(825-1~825-l)은 가중치 합을 연산하는데 사용되는 척도들의 상대적인 중요도(relative importance)를 가리킨다. 낮은 등급이 높은 중요도를 가리킬 때, 가중치들(825-1~825-l)은 가중치 합에서 척도에 대한 높은 중요도를 가리키기 위하여 작은 값들을 유사하게 사용할 수 있다.
가중치 합을 연산하기 위하여, 등급 결정기(520)는 각 척도에 따라 개별적으로 도 4의 소프트웨어 스트림들(410-1~410-n)을 우선 등급 결정할 수 있다. 그 이후에, 가중치들에 각 소프트웨어 스트림의 등급들을 곱하여 최종 가중치 합을 생성할 수 있다. 낮은 숫자들은 높은 등급을 가리키기 때문에(등급 1은 가장 높은 등급), 작은 가중치는 좀 더 중요한 척도를 지칭하기 위하여 사용되어야 한다. 가중치들(825-1~825-l)이 1.0으로 합해지는 것이 유용하다. (단 필수는 아니다.) 가중치들(825-1~825-l) 중 오직 하나만 0이 아닌 양수 값을 갖고, 다른 가중치들(825-1~825-l)은 0의 값을 갖는다면, 하나의 척도에 따라 도 4의 소프트웨어 스트림들(410-1~410-n)을 등급 결정하는 것은 복수의 척도들에 따라 도 4의 소프트웨어 스트림들(410-1~410-n)을 등급 결정하는 것과 동일하다. 가중치 합은 정수 결과를 야기하지 않을 수 있다. 가중치 합들의 결과들이 다시 랭크되어 도 4의 소프트웨어 스트림들(410-1~410-n)에 대한 최종 등급을 생성하기 때문에, 이러한 결과는 수용될 수 있다.
도 9b는 이러한 절차를 보여준다. 도 9b에서, 도 8의 ALU(820)는 도 4의 소프트웨어 스트림들(410-1~410-n)을 등급 결정하는데 사용되는 2개의 척도들에 대한 값들(905-1, 905-2)을 가중치들(825-1, 825-2)와 함께 수신할 수 있다. 도 8의 ALU(820)는 값(905-1) 및 가중치(825-1)의 곱에 값(905-2) 및 가중치(910-2)의 곱을 더함으로써 선택된 값(910)을 연산할 수 있다. 선택된 값(910)은 도 4의 소프트웨어 스트림들(410-1~410-n)을 등급 결정하는데 사용되는 값이 된다.
다시, 예는 이러한 시나리오에서 도 5의 등급 결정기(520)의 동작을 설명하는데 도움이 될 수 있다. 선택된 제1 척도는 도 7의 누적 데이터 크기(715)이고, 제2 척도는 도 7의 빈도(710)인 것으로 가정하자. 도 4의 소프트웨어 스트림들(410-1~410-n)은 이하의 표2에 도시된 척도들에 대한 통계를 생성하는 것으로 가정하자.
소프트웨어 스트림 누적 데이터 크기 빈도 등급 1 등급 2
1 1.0 GB 30 2 1
2 0.75 MB 5 3 3
3 0.65 MB 6 4 2
4 1.2 GB 4 1 4
사항들을 단순화하기 위하여, 표 2에서, 누적 데이터 크기 및 빈도에 관한 4개의 소프트웨어 스트림들에 대한 등급들이 도시된다.
도 7의 누적 데이터 크기(715)와 연관된 가중치가 1로 설정되고, 도 7의 빈도(710)와 연관된 가중치가 0으로 설정된 경우, 등급들은 등급 1로 기재된 열에 도시된 바와 같이 될 것이다. 만약 가중치들이 서로 바뀐다면, 등급들은 등급 2로 기재된 열에 도시된 바와 같이 될 것이다.
누적 데이터 크기가 빈도보다 3배만큼 중요하게 간주되는 것으로 가정하자. 결과적인 가중치들은 누적 데이터에 대해서는 0.25이고, 빈도에 대해서는 0.75일 수 있다. (낮은 숫자는 높은 등급을 의미하고, 가중치들의 작은 값들은 큰 중요도를 의미함을 상기하자.) 소프트웨어 스트림들에 대한 등급들의 가중치 합들은 각각 1.25, 3, 2.5, 및 3.25일 것이다. 이는 소프트웨어 스트림들이 1, 3, 2, 4의 순서로 등급이 정해질 것임을 의미한다. 이는 등급 2로 기재된 열과 동일한 등급이나, 이러한 사실은 우연의 일치이다.
도 8 내지 도 9b는 2개의 척도들을 사용하는 등급 결정이 수행되는 방법을 보여준다. 본 발명의 실시 예들은 도시된 절차들의 단순 일반화에 의해 둘 이상의 척도를 사용하는 것을 지원할 수 있다. 예를 들어, 도 8의 3개 또는 그 이상의 가중치들(825-1~825-l)은 0이 아닌 값들(non-zero values)로 주어질 수 있거나, 또는 도 8의 복수의 기준치들(810)이 도 4의 소프트웨어 스트림들(410-1~410-n)을 등급 결정할 때, 어떤 척도를 사용할지 결정하기 위하여 설정될 수 있다.
도 10a 내지 도 10b는 본 발명의 실시 예에 따른, 도 4의 매핑(425)을 생성하는 예시적인 절차의 순서도를 보여준다. 도 10a에서, 1005 단계에서, 도 3의 호스트 인터페이스 로직(305)은 도 6의 윈도우(605)를 확인하여 도 4의 소프트웨어 스트림들(410-1~410-n)에 관한 통계를 수집하는데 사용할 수 있다. (이하의 도 10a 내지 도 13에서, 도 3의 호스트 인터페이스 로직(305)의 참조는 본 발명의 실시 예들이 구현되는 장소에 따라 도 1의 스토리지 컨트롤러(130) 또는 도 1의 메모리 컨트롤러(125)의 참조에 의해 대체될 수 있다.) 1010 단계에서, 호스트 인터페이스 로직(305)은 도 4의 복수의 커맨드들(405-1~405-k)을 수신할 수 있다. 커맨드들 중 일부는 도 6의 윈도우(605)가 오픈될 때 수신될 수 있다. 1015 단계에서, 통계 수집기(515)는 도 4의 복수의 커맨드들(405-1~405-k)(적어도, 도 6의 윈도우(605)가 오픈될 때 수신된 커맨드들)을 기반으로 도 7의 척도들(705)에 대한 값들을 결정할 수 있다.
1020 단계에서, 도 5의 등급 결정기(520)는 도 5의 통계 수집기(515)에 의해 결정된 값들을 기반으로 도 4의 소프트웨어 스트림들(410-1~410-n)의 서브셋들을 확인할 수 있다. 1025 단계에서, 도 5의 매퍼(525)는 도 4의 소프트웨어 스트림들(410-1~410-n)을 도 4의 장치 스트림들(420-1~420-m)로 매핑하는 도 4의 매핑(425)을 생성할 수 있다.
1030 단계에서, 도 3의 호스트 인터페이스 로직(305)은 도 4의 추가적인 커맨드들(405-1~405-k)을 수신할 수 있다. 1035 단계에서, 도 5의 매퍼(525)는 도 4의 매핑(425)을 사용하여 도 4의 추가적인 커맨드들(405-1~405-k) 각각을 도 4의 장치 스트림들(420-1~420-m)로 할당할 수 있다.
도 10b의 1040 단계에서, 도 1의 SSD(120)는 도 4의 할당된 장치 스트림들(420-1~420-m)을 사용하여 도 4의 추가적인 커맨드들(405-1~405-k)을 처리할 수 있다. 1045 단계에서, 도 1의 SSD(120)는 도 4의 추가적인 커맨드들(405-1~405-k)을 처리한 결과를 반환할 수 있다.
1050 단계에서, 도 3의 호스트 인터페이스 로직(305)은 도 4의 매핑(425)을 자동으로 생성할 수 있는지 판별할 수 있다. (도 6의 윈도우(605)가 슬라이딩 윈도우이거나 또는 SSD(120)가 도 6의 주기적인 불연속 윈도우(605)로 새로운 통계를 반복적으로 수집하도록 구성될 수 있기 때문이다.) 만약 그렇다면, 제어는 도 10a의 1005 단계로 돌아가서, 도 4의 매핑(425)을 생성하는 절차를 다시 시작할 수 있다. 그렇지 않다면, 1055 단계에서, 도 3의 호스트 인터페이스 로직(305)은 도 1의 머신(105)의 사용자 또는 도 1의 머신(105)에 의해 발행될 수 있는 매핑(425)을 재생성하는 커맨드를 수신하였는지 판별할 수 있다. 만약 그렇다면, 제어는 도 10a의 1005 단계로 돌아가서 도 4의 매핑(425)을 생성하는 절차를 다시 시작할 수 있다. 만약 그렇지 않다면, 1060 단계에서, 도 3의 호스트 인터페이스 로직(305)은 도 4의 매핑(425)을 유지하고, 그 이후에, 절차는 도 10a의 1030 단계로 돌아갈 수 있다. (또는, 도 4의 추가적인 커맨드들(405-1~405-k)이 수신되지 않는다면, 절차는 이 지점에서 단순히 종료될 수 있다.)
도 11은 본 발명의 실시 예에 따른, 도 5의 통계 수집기(515)가 도 7의 척도들(705)에 대한 값들을 결정하는 예시적인 절차의 순서도를 보여준다. 도 11에서, 1105 단계에서, 도 5의 통계 수집기(515)는 커맨드들이 도 6의 윈도우(605)로 진입하고 나감에 따라, 소프트웨어 스트림들(410-1~410-n)에 대한 값들을 조정할 수 있다. 즉, 커맨드들이 도 6의 윈도우로 진입함에 따라, 도 5의 통계 수집기(515)는 도 4의 소프트웨어 스트림들(410-1~410-n)에 대한 값들을 증가시킬 수 있고, 커맨드들이 도 6의 윈도우(605)를 나감에 따라, 도 5의 통계 수집기(515)는 도 4의 소프트웨어 스트림들(410-1~410-n)에 대한 값들을 감소시킬 수 있다.
또는, 1110 단계에서, 도 5의 통계 수집기(515)는 도 4의 소프트웨어 스트림들(410-1~410-n)에 대한 값들을 리셋할 수 있다. 이후에, 1115 단계에서, 도 5의 통계 수집기(515)는 도 6의 윈도우(605)를 통해 도 4의 소프트웨어 스트림들(410-1~410-n)에 대한 새로운 통계를 잡을 수 있다.
도 12는 본 발명의 실시 예에 따른, 도 5의 등급 결정기(520)가 도 4의 어느 소프트웨어 스트림들(410-1~410-n)이 도 4의 어느 장치 스트림들(420-1~420-m)으로 매핑되는지를 결정하는 예시적인 절차의 순서도를 보여준다. 도 12를 참조하면, 1205 단계에서, 도 5의 등급 결정기(520)는 도 5의 통계 수집기(515)에 의해 수집된 통계에 따라 도 4의 소프트웨어 스트림들(410-1~410-n)을 등급 결정할 수 있다. 1210 단계에서, 도 5의 등급 결정기(520)는 다양한 척도들에 대한 도 8의 가중치들(825-1~825-l)을 결정할 수 있다. 1215 단계에서, 등급 결정기(520)는 초기 등급들 및 도 8의 가중치들(825-1~825-l)을 사용하여 도 4의 소프트웨어 스트림들(410-1~410-n)의 최종 등급을 결정할 수 있다. 점선(1220)으로 도시된 바와 같이, 1210 단계 및 1215 단계는 생략될 수 있다. 또한, 도 8을 참조하여 설명된 바와 같이, 도 8의 가중치들(825-1~825-l) 중 하나에만 0이 아닌 양의 값이 주어진 경우, 하나의 척도에 따른 등급 결정이 1210 단계 및 1215 단계를 통해 효율적으로 달성될 수 있다.
또는, 도 5의 등급 결정기(520)가 도 8의 기준치(810) 및 비교기(815)를 사용하여 복수의 척도들을 사용하는 경우, 1225 단계에서, 도 5의 등급 결정기(520)는 제1 척도에 대한 도 8의 기준치(810)(만약 도 8의 하나이상의 기준치들(810)이 사용된다면, 추가적인 척도들에 대한 기준치들)를 결정할 수 있다. 1230 단계에서, 도 4의 소프트웨어 스트림들(410-1~410-n)은 제1 척도에 대한 값이 도 8의 기준치(810)를 초과하는 소프트웨어 스트림들에 대하여 제1 척도에 따라 등급 결정될 수 있다. 1235 단계에서, 도 4의 소프트웨어 스트림들(410-1~410-n)은 제1 척도에 대한 값이 도 8의 기준치(810)를 초과하지 않는 소프트웨어 스트림들에 대하여 제2 척도에 따라 등급 결정될 수 있다.
도 5의 등급 결정기(520)까 최종 등급 결정을 어떻게 달성하는지와 무관하게, 1240 단계에서, 도 5의 등급 결정기(520)는 제1 서트셋을 위하여 최상위 등급의 소프트웨어 스트림들(the highest ranking software streams)을 선택하고, 1245 단계에서, 도 5의 등급 결정기(520)는 제2 서브셋을 위하여 나머지 소프트웨어 스트림들(remaining software streams)을 모두 선택한다.
도 13은 본 발명의 실시 예에 따른 도 5의 매퍼(525)가 도 4의 소프트웨어 스트림들(410-1~410-n)을 도 4의 장치 스트림들(420-1~420-m)로 매핑하는 예시적인 절차의 순서도를 보여준다. 도 13을 참조하면, 1305 단계에서, 도 5의 매퍼(525)는 제1 서브셋의 소프트웨어 스트림들 각각을 고유 장치 스트림으로 매핑할 수 있다. 1310 단계에서, 도 5의 매퍼(525)는 제2 서브셋의 소프트웨어 스트림들 각각을 통합 장치 스트림으로 매핑할 수 있다. 도 5를 참조하여 설명된 바와 같이, 필요에 따라, 하나 이상의 통합 장치 스트림들이 존재할 수 있다.
도 10a 내지 도 13에서, 본 발명의 일부 실시 예들이 도시된다. 그러나, 당업자는 단계들의 순서를 변경하거나, 단계들을 생략하거나, 또는 도면들에 도시되지 않은 연결들을 포함시킴으로써, 본 발명의 다른 실시 예들이 가능함을 이해할 것이다. 순서도들의 이러한 모든 변형들은 명시적으로 설명되었는지 와 무관하게, 본 발명의 실시 예들로 간주된다.
이하의 설명은 본 발명의 특정한 사상들이 구현될 수 있는 머신들 또는 적절한 머신(machine)의 간결하고 일반적인 설명을 제공하도록 의도된다. 머신 또는 머신들은 적어도 일부에서, 키보드, 마우스 등과 같은 일반적인 입력 장치로부터의 입력뿐만 아니라, 다른 머신으로부터 수신된 명령어, 가상 현실 환경(virtual reality environment)와의 상호작용, 생체 피드백, 또는 다른 입력 신호들에 의해 제어될 수 있다. 본문에서 사용된 바와 같이, "머신(machine)"의 용어는 단일 머신, 가상 머신, 또는 머신들, 가상 머신들 또는 함께 작동하는 장치들이 통신적으로 연결된 시스템을 넓게 아우르는 것으로 의도된다. 예시적인 머신들은 퍼스널 컴퓨터, 워크스테이션, 서버, 휴대용 컴퓨터, 소형 컴퓨터, 전화기, 태블릿 등과 같은 컴퓨팅 장치들뿐만 아니라, 대중 교통, 예를 들어, 자동차, 기차, 택시 등과 같은 운송 장치들을 포함한다.
머신 또는 머신들은 프로그램 가능하거나 또는 프로그램 불가능한 로직 장치들 또는 어레이, ASIC(Application Specific Integrated Circuit), 내장된 컴퓨터, 스마트 카드 등과 같은 내장된 컨트롤러들을 포함할 수 있다. 머신 또는 머신들은 네트워크 인터페이스, 모뎀, 또는 다른 통신 연결 등과 같이 하나 또는 그 이상의 원격 장치들과 하나 또는 그 이상의 연결들을 활용할 수 있다. 머신들은 인트라넷, 인터넷, LAN(Local Area Network), WAN(Wide Area Network) 등과 같은 물리적 또는 논리적 네트워크 방식으로 연결될 수 있다. 당업자는 네트워크 통신이 무선 주파수(RF; Radio Frequency), 위성, 마이크로웨이브, IEEE(Institute of Electrical and Electronics Engineers) 802.11, 블루투스, 광, 적외선, 케이블, 레이저 등과 같은 다양한 유선 또는 무선 단파장 또는 장파장 캐리어들 및 프로토콜을 활용할 수 있음을 인지할 것이다.
본 발명의 실시 예들은 머신들에 의해 액세스될 때 머신들에 작업들을 수행하거나 또는 요약 데이터 타입들 또는 저레벨 하드웨어 구성들을 정의하도록 하는 기능들, 절차들, 데이터 구조들, 애플리케이션 프로그램들을 포함하는 연관된 데이터를 참조하거나 또는 관련하여 설명될 수 있다. 연관된 데이터는 휘발성 또는 불휘발성 메모리(예를 들어, RAM, ROM)에 저장될 수 있거나 또는 하드 드라이브, 플로피 디스크, 광 스토리지, 테이프, 플래시 메모리, 메모리 스틱, 디지틸 비디오 디스크, 생체 스토리지 등을 포함하는 연관된 스토리지 매체 및 다른 저장 장치들에 저장될 수 있다. 연관된 데이터는 물리적 또는 논리적 네트워크를 포함하는 전송 환경상에서 패킷, 직렬 데이터, 병렬 데이터, 전파 신호들 등과 같은 형태로 제공될 수 있고, 압축되거나 또는 암호화된 형식으로 사용될 수 있다. 연관된 데이터는 분산된 환경에서 사용될 수 있고, 논리적으로 및/또는 원격으로 장치 액세스를 위하여 저장될 수 있다.
본 발명의 실시 예들은 하나 또는 그 이상의 프로세서들에 의해 실행될 수 있는 명령어들을 포함하는 유형의 비일시적인 머신 판독 가능한 매체(tangible, non-transitory machine-readable medium)를 포함할 수 있다. 명령어들은 본문에 기재된 바와 같은 본 발명의 구성 요소들을 수행하기 위한 명령어들을 포함할 수 있다.
실시 예들을 참조하여 본 발명의 이론들이 설명되었으나, 실시 예들은 본 발명의 기술적 사상으로부터의 벗어남 없이 변형될 수 있고, 다른 적절한 방식과 조합될 수 있음은 잘 이해될 것이다. 그리고, 상세한 설명이 특정 실시 예들을 집중되었으나, 다른 구성들이 고려된다. 특히, 본문에서 "본 발명의 실시 예에 따르면"과 같은 표현들이 사용되었으나, 이러한 표현들은 일반적으로, 참조 실시 예의 가능성을 의미하며, 본 발명이 특정 실시 예 구성들에 한정됨을 의미하지 않는다. 본문에 기재된 바와 같이, 이러한 용어들은 다른 실시 예들과 조합될 수 있는 동일한 또는 다른 실시 예들을 참조할 수 있다.
상술된 실시 예들은 본 발명을 한정하는 것은 아니다. 비록 일부 실시 예들이 설명되었으나, 당업자는 본문의 이점들 및 새로운 특징으로부터의 벗어남 없이 본 발명의 가능한 다양한 변형을 용이하게 수행할 수 있다. 따라서, 이러한 변형들은 특허청구범위에 정의된 본 발명의 사상 내에 포함되도록 의도될 수 있다.
본 발명의 실시 예들은 이하의 구문들로 제한 없이 확장될 수 있다.
스테이트먼트 1. 본 발명의 실시 예는 솔리드 스테이트 드라이브(SSD; Solid State Drive)를 포함한다. 상기 SSD는 데이터를 저장하는 플래시 메모리; 상기 SSD에서 복수의 장치 스트림들에 대한 지원(support); 복수의 커맨드들에 응답하여 상기 플래시 메모리에 데이터를 기입하는 것 및 상기 플래시 메모리로부터 데이터를 읽는 것을 관리하는 SSD 컨트롤러; 및 호스트 인터페이스 로직을 포함한다. 상기 호스트 인터페이스 로직은 호스트로부터 복수의 소프트웨어 스트림들과 연관된 상기 복수의 커맨드들을 수신하는 수신기(receiver); 윈도우(window) 시간을 측정하는 타이머(timer); 상기 복수의 커맨드들에 응답하여 상기 윈도우동안 상기 복수의 소프트웨어 스트림들 각각에 대한 적어도 하나의 척도에 대한 적어도 하나의 값을 결정하는 통계 수집기; 상기 복수의 소프트웨어 스트림들 각각에 대하여 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 등급 결정기(ranker); 및 매핑을 설정하는 매퍼(mapper)를 포함하고, 상기 매핑은 상기 복수의 소프트웨어 스트림들 중 제1 서브셋의 소프트웨어 스트림 각각을 상기 SSD의 상기 복수의 장치 스트림들 중 고유 장치 스트림으로 매핑하고, 상기 복수의 소프트웨어 스트림들 중 제2 서브셋의 소프트웨어 스트림들 전부를 상기 SSD의 상기 복수의 장치 스트림들 중 통합 장치 스트림으로 매핑하도록 작동한다.
스테이트먼트 2. 본 발명의 실시 예는 스테이트먼트 1에 따른 SSD를 포함하고, 상기 복수의 커맨드들 각각은 상기 복수의 소프트웨어 스트림들 중 상기 매핑에 응답하여 대응하는 장치 스트림이 할당될 수 있는 대응하는 하나의 소프트웨어 스트림을 확인(identifying)하는 소프트웨어 스트림 식별자(ID; identifier) 태그를 포함한다. 상기 복수의 커맨드들 각각에 대한 결과는 상기 복수의 소프트웨어 스트림들 중 대응하는 하나의 소프트웨어 스트림을 확인하는 상기 소프트웨어 스트림 식별자 태그를 포함한다.
스테이트먼트 3. 본 발명의 실시 예는 스테이트먼트 1에 따른 SSD를 포함하고, 상기 SSD는 상기 복수의 소프트웨어 스트림들로부터 추가적인 복수의 커맨드들 수신하고, 상기 매핑에 따라 상기 추가적인 복수의 커맨드들을 상기 복수의 장치 스트림들로 할당하도록 작동한다.
스테이트먼트 4. 본 발명의 실시 예는 스테이트먼트 1에 따른 SSD를 포함하고, 상기 윈도우는 슬라이딩 윈도우이고, 상기 통계 수집기는 상기 복수의 커맨드들 각각이 상기 윈도우로 진입하고 상기 윈도우에서 나감에 따라 상기 윈도우 내의 상기 적어도 하나의 척도에 대한 상기 적으로 하나의 값을 조정하도록 작동한다.
스테이트먼트 5. 본 발명의 실시 예는 스테이트먼트 1에 따른 SSD를 포함하고, 상기 윈도우는 불연속 윈도우이다.
스테이트먼트 6. 본 발명의 실시 예는 스테이트먼트 1에 따른 SSD를 포함하고, 상기 호스트 인터페이스 로직은 다르게 명령될 때까지 상기 매핑을 유지하도록 동작하고, 상기 수신기는 상기 복수의 소프트웨어 스트림들을 상기 복수의 장치 스트림들로 재매핑하는 커맨드를 수신하도록 작동한다.
스테이트먼트 7. 본 발명의 실시 예는 스테이트먼트 5에 따른 SSD를 포함하고, 상기 호스트 인터페이스 로직은 복수의 순차적인 불연속 윈도우들에 대하여 상기 복수의 소프트웨어 스트림들을 상기 복수의 장치 스트림들로 반복적으로 재매핑하도록 작동한다.
스테이트먼트 8. 본 발명의 실시 예는 스테이트먼트 1에 따른 SSD를 포함하고, 상기 복수의 소프트웨어 스트림들의 상기 제1 서브셋은 최상위 등급을 갖는 다수의 소프트웨어 스트림들을 포함하고, 상기 최상위 등급을 갖는 소프트웨어 스트림들의 개수는 상기 복수의 장치 스트림들의 개수보다 1개 작고, 상기 복수의 소프트웨어 스트림들의 상기 제2 서브셋은 상기 복수의 소프트웨어 스트림들의 상기 제1 서브셋에 포함되지 않은 모든 소프트웨어 스트림들을 포함한다.
스테이트먼트 9. 본 발명의 실시 예는 스테이트먼트 1에 따른 SSD를 포함하고, 상기 통계 수집기는 상기 복수의 소프트웨어 스트림들 각각에 대하여 제1 척도에 대한 제1 값 및 제2 척도에 대한 제2 값을 결정하도록 작동한다.
스테이트먼트 10. 본 발명의 실시 예는 스테이트먼트 9에 따른 SSD를 포함하고, 상기 등급 결정기는 상기 제1 척도에 대한 제1 가중치 및 상기 제2 척도에 대한 제2 가중치를 포함하고, 상기 등급 결정기는 상기 제1 가중치를 사용한 상기 제1 값에 대한 제1 등급 및 상기 제2 가중치를 사용한 상기 제2 값에 대한 제2 등급의 가중치 합에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하도록 작동한다.
스테이트먼트 11. 본 발명의 실시 예는 스테이트먼트 9에 따른 SSD를 포함하고, 등급 결정기는 상기 제1 척도에 대한 기준치를 포함하고, 상기 등급 결정기는 상기 제1 척도에 대한 상기 기준치보다 큰 제1 값을 갖는 소프트웨어 스트림들에 대하여 상기 제1 척도에 따라 그리고, 상기 제1 척도에 대한 상기 기준치보다 작은 제1 값을 갖는 소프트웨어 스트림들에 대하여 상기 제2 척도에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하도록 작동한다.
스테이트먼트 12. 본 발명의 실시 예는 컴퓨터 시스템에서 사용되는 드라이버를 포함하고, 상기 드라이버는 호스트로부터 복수의 소프트웨어 스트림들과 연관된 복수의 커맨드들을 수신하는 수신기(receiver); 윈도우 시간을 측정하는 타이머(timer); 상기 복수의 커맨드들에 응답하여 상기 윈도우 동안 상기 복수의 소프트웨어 스트림들 각각에 대한 적어도 하나의 척도에 대한 적어도 하나의 값을 결정하는 통계 수집기(statistics collector); 상기 복수의 소프트웨어 스트림들 각각에 대한 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 등급 결정기; 상기 복수의 소프트웨어 스트림들의 제1 서브셋의 각 소프트웨어 스트림을 솔리드 스테이트 드라이브(SSD; Solid State Drive)의 복수의 장치 스트림들 중 고유 장치 스트림으로 매핑하고, 상기 복수의 소프트웨어 스트림들 중 제2 서브셋의 소프트웨어 스트림들 전체를 상기 SSD의 상기 복수의 장치 스트림들의 통합 장치 스트림으로 매핑하도록 동작하는 매핑을 설정하는 매퍼; 상기 복수의 커맨드들 각각과 연관된 소프트웨어 스트림과 대응하는 장치 스트림에 대한 장치 스트림 식별자(ID; identifier)를 추가적인 복수의 커맨드들 각각에 추가하는 장치 스트림 ID 추가기; 및 상기 추가적인 복수의 커맨드들 각각을 상기 SSD로 전송하는 전송기를 포함한다.
스테이트먼트 13. 본 발명의 실시 예는 스테이트먼트 12에 따른 드라이버를 포함하고, 드라이버는 상기 복수의 소프트웨어 스트림들로부터 상기 추가적인 복수의 커맨드들을 수신하고, 상기 매핑에 따라 상기 추가적인 복수의 커맨드들을 상기 복수의 장치 스트림들로 할당하도록 작동한다.
스테이트먼트 14. 본 발명의 실시 예는 스테이트먼트 12에 따른 드라이버를 포함하고, 상기 윈도우는 슬라이딩 윈도우(sliding window)이고, 상기 통계 수집기는 상기 복수의 커맨드들 각각이 상기 윈도우로 진입하고 상기 윈도우에서 나감에 따라 상기 윈도우 내에서 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값을 조정하도록 작동한다.
스테이트먼트 15. 본 발명의 실시 예는 스테이트먼트 12에 따른 드라이버를 포함하고, 상기 윈도우는 불연속 윈도우(discrete window)이다.
스테이트먼트 16. 본 발명의 실시 예는 스테이트먼트 15에 따른 드라이버를 포함하고, 상기 드라이버는 다르게 명령될 때까지 상기 매핑을 유지하도록 동작하고, 상기 수신기는 상기 복수의 소프트웨어 스트림들을 상기 복수의 장치 스트림들로 재매핑하는 커맨드를 수신하도록 작동한다.
스테이트먼트 17. 본 발명의 실시 예는 스테이트먼트 15에 따른 드라이버를 포함하고, 상기 드라이버는 복수의 순차적인 불연속 윈도우들에 대하여 상기 복수의 소프트웨어 스트림들을 상기 복수의 장치 스트림들로 반복적으로 재매핑하도록 작동한다.
스테이트먼트 18. 본 발명의 실시 예는 스테이트먼트 12에 따른 드라이버를 포함하고, 상기 복수의 소프트웨어 스트림들의 상기 제1 서브셋은 최상위 등급을 갖는 다수의 소프트웨어 스트림들을 포함할 수 있고, 상기 최상위 등급을 갖는 소프트웨어 스트림들의 개수는 상기 복수의 장치 스트림들의 개수보다 1개 적고, 상기 복수의 소프트웨어 스트림들의 상기 제2 서브셋은 상기 복수의 소프트웨어 스트림들의 상기 제1 서브셋에 포함되지 않은 모든 소프트웨어 스트림들을 포함한다.
스테이트먼트 19. 본 발명의 실시 예는 스테이트먼트 12에 따른 드라이버를 포함하고, 상기 통계 수집기는 상기 복수의 소프트웨어 스트림들 각각에 대하여 제1 척도에 대한 제1 값 및 제2 척도에 대한 제2 값을 결정하도록 작동한다.
스테이트먼트 20. 본 발명의 실시 예는 스테이트먼트 19에 따른 드라이버를 포함하고, 상기 등급 결정기는 상기 제1 척도에 대한 제1 가중치 및 상기 제2 척도에 대한 제2 가중치를 포함하고, 상기 등급 결정기는 상기 제1 가중치를 사용한 상기 제1 값에 대한 제1 등급 및 상기 제2 가중치를 사용한 상기 제2 값에 대한 제2 등급의 가중치 합에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하도록 작동한다.
스테이트먼트 21. 본 발명의 실시 예는 스테이트먼트 19에 따른 드라이버를 포함하고, 상기 등급 결정기는 상기 제1 척도에 대한 기준치를 포함하고, 상기 등급 결정기는 상기 제1 척도에 대한 상기 기준치보다 큰 제1 값을 갖는 소프트웨어 스트림들에 대하여 상기 제1 척도에 따라 그리고, 상기 제1 척도에 대한 상기 기준치보다 작은 제1 값을 갖는 소프트웨어 스트림들에 대하여 상기 제2 척도에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하도록 작동한다.
스테이트먼트 22. 본 발명의 실시 예는 복수의 소프트웨어 스트림들과 연관되고, 복수의 장치 스트림들을 포함하는 솔리드 스테이트 드라이브(SSD; Solid State Drive)를 사용하여 처리될 복수의 커맨드들을 수신하는 단계; 상기 복수의 커맨드들에 응답하여 상기 복수의 소프트웨어 스트림들 각각에 대한 적어도 하나의 척도에 대한 적어도 하나의 값을 결정하는 단계; 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 응답하여 상기 복수의 소프트웨어 스트림들의 제1 및 제2 서브셋들을 확인(identifying)하는 단계; 상기 복수의 소프트웨어 스트림들의 상기 제1 서브셋의 각 소프트웨어 스트림을 상기 SSD의 상기 복수의 장치 스트림들 중 고유 장치 스트림으로 매핑하고, 상기 복수의 소프트웨어 스트림들 중 상기 제2 서브셋의 소프트웨어 스트림들 전체를 상기 SSD의 상기 복수의 장치 스트림들의 통합 장치 스트림으로 매핑하도록 동작하는 매핑을 생성하는 단계; 상기 매핑을 생성한 이후에, 상기 복수의 소프트웨어 스트림들과 연관된 제2 복수의 커맨드들을 수신하는 단계; 상기 매핑에 응답하여 상기 복수의 장치 스트림들 중 하나로 상기 제2 복수의 커맨드들 각각을 할당하는 단계; 및 상기 할당된 장치 스트림을 사용하여 상기 SSD에서 상기 제2 복수의 커맨드들 각각을 처리하는 단계를 포함하는 방법을 포함한다.
스테이트먼트 23. 본 발명의 실시 예는 스테이트먼트 22에 따른 방법을 포함하고, 상기 방법은 상기 복수의 소프트웨어 스트림들과 연관된 상기 복수의 커맨드들의 처리에 응답하여 상기 SSD로부터 결과들을 반환하는 단계를 더 포함한다.
스테이트먼트 24. 본 발명의 실시 예는 스테이트먼트 22에 따른 방법을 포함하고, 상기 복수의 소프트웨어 스트림들과 연관된 상기 복수의 커맨드들 각각은 소프트웨어 스트림 식별자(ID; identifier) 태그를 포함하고, 상기 SSD로부터의 상기 결과들 각각은 상기 복수의 소프트웨어 스트림들과 연관된 상기 복수의 커맨드들 중 대응하는 하나로부터의 상기 소프트웨어 스트림 ID 태그를 포함한다.
스테이트먼트 25. 본 발명의 실시 예는 스테이트먼트 22에 따른 방법을 포함하고, 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 응답하여 상기 복수의 소프트웨어 스트림들의 제1 및 제2 서브셋들을 식별하는 단계는 윈도우내의 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 응답하여 상기 복수의 소프트웨어 스트림들의 상기 제1 및 제2 서브셋들을 식별하는 단계를 포함한다.
스테이트먼트 26. 본 발명의 실시 예는 스테이트먼트 25에 따른 방법을 포함하고, 상기 윈도우는 슬라이딩 윈도우이다.
스테이트먼트 27. 본 발명의 실시 예는 스테이트먼트 26에 따른 방법을 포함하고, 상기 복수의 소프트웨어 스트림들 각각에 대한 적어도 하나의 척도에 대한 적어도 하나의 값을 결정하는 단계는 상기 복수의 커맨드들이 상기 윈도우로 진입하고 상기 윈도우에서 나감에 따라 상기 윈도우 내의 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값을 조정하는 단계를 포함한다.
스테이트먼트 28. 본 발명의 실시 예는 스테이트먼트 25에 따른 방법을 포함하고, 상기 윈도우는 불연속 윈도우이다.
스테이트먼트 29. 본 발명의 실시 예는 스테이트먼트 28에 따른 방법을 포함하고, 상기 방법은 상기 제2 복수의 커맨드들을 포함하는 제2 불연속 윈도우를 식별하는 단계; 상기 제2 불연속 윈도우 동안 상기 제2 복수의 커맨드들에 응답하여 상기 적어도 하나의 척도에 대한 적어도 하나의 제2 값을 결정하는 단계; 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 제2 값에 응답하여 상기 복수의 소프트웨어 스트림들의 제3 및 제4 서브셋들을 식별하는 단계; 및 상기 복수의 소프트웨어 스트림들의 상기 제3 서브셋의 각 소프트웨어 스트림을 상기 SSD의 상기 복수의 장치 스트림들 중 고유 장치 스트림으로 매핑하고, 상기 복수의 소프트웨어 스트림들의 상기 제4 서브셋의 모든 소프트웨어 스트림들을 상기 SSD의 상기 복수의 장치 스트림들의 통합 장치 스트림으로 매핑하도록 동작하는 제2 매핑을 생성하는 단계를 더 포함한다.
스테이트먼트 30. 본 발명의 실시 예는 스테이트먼트 28에 따른 방법을 포함하고, 상기 방법은 상기 불연속 윈도우가 클로즈된 이후에 상기 매핑을 유지하는 단계; 상기 복수의 소프트웨어 스트림들을 상기 복수의 장치 스트림들로 재매핑하는 요청을 수신하는 단계; 및 제2 불연속 윈도우를 식별하는 것, 적어도 하나의 제2 값을 결정하는 것, 제3 및 제4 서브셋들을 식별하는 것, 및 상기 복수의 소프트웨어 스트림들을 상기 복수의 장치 스트림들로 재매핑하는 상기 요청에 응답하여 제2 매핑을 생성하는 것의 단계들을 수행하는 단계를 더 포함한다.
스테이트먼트 31. 본 발명의 실시 예는 스테이트먼트 22에 따른 방법을 포함하고, 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 응답하여 상기 복수의 소프트웨어 스트림들의 제1 및 제2 서브셋들을 식별하는 단계는: 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 단계; 최상위 등급을 갖는 다수의 소프트웨어 스트림들을 포함하도록 상기 복수의 소프트웨어 스트림들의 상기 제1 서브셋을 선택하되, 상기 최상위 등급을 갖는 상기 소프트웨어 스트림들의 개수는 상기 복수의 장치 스트림들의 개수보다 1개 적은 단계; 상기 복수의 소프트웨어 스트림들 중 상기 복수의 소프트웨어 스트림들의 상기 제1 서브셋에 포함되지 않은 모든 소프트웨어 스트림들을 포함하도록 상기 복수의 소프트웨어 스트림들의 상기 제2 서브셋을 선택하는 단계를 포함한다.
스테이트먼트 32. 본 발명의 실시 예는 스테이트먼트 31에 따른 방법을 포함하고, 상기 복수의 커맨드들에 응답하여 상기 복수의 소프트웨어 스트림들 각각에 대한 적어도 하나의 척도에 대한 적어도 하나의 값을 결정하는 단계는 상기 복수의 소프트웨어 스트림들 각각에 대하여 제1 척도에 대한 제1 값 및 제2 척도에 대한 제2 값을 결정하는 단계를 포함하고, 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 단계는 상기 복수의 소프트웨어 스트림들에 대하여 상기 제1 척도에 대한 상기 제1 값 및 상기 제2 척도에 대한 상기 제2 값에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 단계를 포함한다.
스테이트먼트 33. 본 발명의 실시 예는 스테이트먼트 32에 따른 방법을 포함하고, 상기 제1 척도에 대한 상기 제1 값 및 상기 제2 척도에 대한 상기 제2 값에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 단계는: 상기 제1 척도에 대한 제1 가중치 및 상기 제2 척도에 대한 제2 가중치를 결정하는 단계; 및 상기 제1 가중치를 사용하는 상기 제1 값에 대한 제1 등급 및 상기 제2 가중치를 사용하는 상기 제2 값에 대한 제2 등급의 가중치 합에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 단계를 포함한다.
스테이트먼트 34. 본 발명의 실시 예는 스테이트먼트 32에 따른 방법을 포함하고, 상기 제1 척도에 대한 상기 제1 값 및 상기 제2 척도에 대한 상기 제2 값에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 단계는: 상기 제1 척도에 대한 기준치를 결정하는 단계; 및 상기 제1 척도에 대한 상기 기준치보다 큰 제1 값을 갖는 소프트웨어 스트림들에 대한 상기 제1 척도에 따라 그리고 상기 제1 척도에 대한 상기 기준치보다 작은 제1 값을 갖는 소프트웨어 스트림들에 대한 상기 제2 척도에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 단계를 포함한다.
스테이트먼트 35. 본 발명의 실시 예는 유형의 스토리지 매체를 포함하는 제품을 포함하고, 상기 유형의 스토리지 매체는 머신에 의해 수행될 때, 복수의 장치 스트림들을 포함하는 솔리드 스테이트 드라이브(SSD; Solid State Drive)를 사용하여 처리될 복수의 커맨드들을 수신하는 것; 상기 복수의 커맨드들에 응답하여 상기 복수의 소프트웨어 스트림들 각각에 대한 적어도 하나의 척도에 대한 적어도 하나의 값을 결정하는 것; 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 응답하여 상기 복수의 소프트웨어 스트림들의 제1 및 제2 서브셋들을 식별하는 것; 상기 복수의 소프트웨어 스트림들의 상기 제1 서브셋의 각 소프트웨어 스트림을 상기 SSD의 상기 복수의 장치 스트림들 중 고유 장치 스트림으로 매핑하고, 상기 복수의 소프트웨어 스트림들 중 상기 제2 서브셋의 소프트웨어 스트림들 전체를 상기 SSD의 상기 복수의 장치 스트림들의 통합 장치 스트림으로 매핑하도록 작동하는 매핑을 생성하는 것; 상기 매핑을 생성한 이후에, 상기 복수의 소프트웨어 스트림들과 연관된 제2 복수의 커맨드들을 수신하는 것; 상기 매핑에 응답하여 상기 복수의 장치 스트림들 중 하나로 상기 제2 복수의 커맨드들 각각을 할당하는 것; 및 상기 할당된 장치 스트림을 사용하여 상기 SSD에서 상기 제2 복수의 커맨드들 각각을 처리하는 것이 유발되는 비-일시적인 명령어들을 포함한다.
스테이트먼트 36. 본 발명의 실시 예는 스테이트먼트 35에 따른 제품을 포함하고, 상기 유형의 스토리지 매체는 상기 머신에 의해 수행될 때, 상기 복수의 소프트웨어 스트림들과 연관된 상기 복수의 커맨드들의 처리에 응답하여 상기 SSD로부터 결과들을 반환하는 것이 유발되는 비-일시적인 명령어들을 더 포함한다.
스테이트먼트 37. 본 발명의 실시 예는 스테이트먼트 35에 따른 제품을 포함하고, 상기 복수의 소프트웨어 스트림들과 연관된 상기 복수의 커맨드들 각각은 소프트웨어 스트림 식별자(ID; identifier) 태그를 포함하고, 상기 SSD로부터의 상기 결과들 각각은 상기 복수의 소프트웨어 스트림들과 연관된 상기 복수의 커맨드들 중 대응하는 하나로부터의 상기 소프트웨어 스트림 ID 태그를 포함한다.
스테이트먼트 38. 본 발명의 실시 예는 스테이트먼트 35에 따른 제품을 포함하고, 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 응답하여 상기 복수의 소프트웨어 스트림들의 제1 및 제2 서브셋들을 식별하는 것은 윈도우내의 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 응답하여 상기 복수의 소프트웨어 스트림들의 상기 제1 및 제2 서브셋들을 식별하는 것을 포함한다.
스테이트먼트 39. 본 발명의 실시 예는 스테이트먼트 38에 따른 제품을 포함하고, 상기 윈도우는 슬라이딩 윈도우이다.
스테이트먼트 40. 본 발명의 실시 예는 스테이트먼트 39에 따른 제품을 포함하고, 상기 복수의 소프트웨어 스트림들 각각에 대한 적어도 하나의 척도에 대한 적어도 하나의 값을 결정하는 것은 상기 복수의 커맨드들이 상기 윈도우로 진입하고 상기 윈도우에서 나감에 따라 상기 윈도우 내의 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값을 조정하는 것을 포함한다.
스테이트먼트 41. 본 발명의 실시 예는 스테이트먼트 38에 따른 제품을 포함하고, 상기 윈도우는 불연속 윈도우이다.
스테이트먼트 42. 본 발명의 실시 예는 스테이트먼트 41에 따른 제품을 포함하고, 상기 유형의 스토리지 매체는 상기 머신에 의해 수행될 때, 상기 제2 복수의 커맨드들을 포함하는 제2 불연속 윈도우를 식별하는 것; 상기 제2 불연속 윈도우 동안 상기 제2 복수의 커맨드들에 응답하여 상기 적어도 하나의 척도에 대한 적어도 하나의 제2 값을 결정하는 것; 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 제2 값에 응답하여 상기 복수의 소프트웨어 스트림들의 제3 및 제4 서브셋들을 식별하는 것; 및 상기 복수의 소프트웨어 스트림들의 상기 제3 서브셋의 각 소프트웨어 스트림을 상기 SSD의 상기 복수의 장치 스트림들 중 고유 장치 스트림으로 매핑하고, 상기 복수의 소프트웨어 스트림들의 상기 제4 서브셋의 모든 소프트웨어 스트림들을 상기 SSD의 상기 복수의 장치 스트림들의 통합 장치 스트림으로 매핑하도록 작동하는 제2 매핑을 생성하는 것을 유발하는 비-일시적인 명령어들을 더 포함한다.
스테이트먼트 43. 본 발명의 실시 예는 스테이트먼트 41에 따른 제품을 포함하고, 상기 유형의 스토리지 매체는, 상기 머신에 의해 수행될 때, 상기 불연속 윈도우가 클로즈된 이후에 상기 매핑을 유지하는 것; 상기 복수의 소프트웨어 스트림들을 상기 복수의 장치 스트림들로 재매핑하는 요청을 수신하는 것; 및 제2 불연속 윈도우를 식별하는 것, 적어도 하나의 제2 값을 결정하는 것, 제3 및 제4 서브셋들을 식별하는 것, 및 상기 복수의 소프트웨어 스트림들을 상기 복수의 장치 스트림들로 재매핑하는 상기 요청에 응답하여 제2 매핑을 생성하는 것의 단계들을 수행하는 것을 유발하는 비-일시적인 명령어들을 더 포함한다.
스테이트먼트 44. 본 발명의 실시 예는 스테이트먼트 35에 따른 제품을 포함하고, 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 응답하여 상기 복수의 소프트웨어 스트림들의 제1 및 제2 서브셋들을 식별하는 것은: 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 것; 최상위 등급을 갖는 다수의 소프트웨어 스트림들을 포함하도록 상기 복수의 소프트웨어 스트림들의 상기 제1 서브셋을 선택하되, 상기 최상위 등급을 갖는 상기 소프트웨어 스트림들의 개수는 상기 복수의 장치 스트림들의 개수보다 1개 적은 것; 및 상기 복수의 소프트웨어 스트림들 중 상기 복수의 소프트웨어 스트림들의 상기 제1 서브셋에 포함되지 않은 모든 소프트웨어 스트림들을 포함하도록 상기 복수의 소프트웨어 스트림들의 상기 제2 서브셋을 선택하는 것을 포함한다.
스테이트먼트 45. 본 발명의 실시 예는 스테이트먼트 44에 따른 제품을 포함하고, 상기 복수의 커맨드들에 응답하여 상기 복수의 소프트웨어 스트림들 각각에 대한 적어도 하나의 척도에 대한 적어도 하나의 값을 결정하는 것은 상기 복수의 소프트웨어 스트림들 각각에 대하여 제1 척도에 대한 제1 값 및 제2 척도에 대한 제2 값을 결정하는 것을 포함하고, 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 것은 상기 복수의 소프트웨어 스트림들에 대하여 상기 제1 척도에 대한 상기 제1 값 및 상기 제2 척도에 대한 상기 제2 값에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 것을 포함한다.
스테이트먼트 46. 본 발명의 실시 예는 스테이트먼트 45에 따른 제품을 포함하고, 상기 제1 척도에 대한 상기 제1 값 및 상기 제2 척도에 대한 상기 제2 값에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 것은: 상기 제1 척도에 대한 제1 가중치 및 상기 제2 척도에 대한 제2 가중치를 결정하는 것; 및 상기 제1 가중치를 사용하는 상기 제1 값에 대한 제1 등급 및 상기 제2 가중치를 사용하는 상기 제2 값에 대한 제2 등급의 가중치 합에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 것을 포함한다.
스테이트먼트 47. 본 발명의 실시 예는 스테이트먼트 45에 따른 제품을 포함하고, 상기 제1 척도에 대한 상기 제1 값 및 상기 제2 척도에 대한 상기 제2 값에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 것은: 상기 제1 척도에 대한 기준치를 결정하는 것; 및 상기 제1 척도에 대한 상기 기준치보다 큰 제1 값을 갖는 소프트웨어 스트림들에 대한 상기 제1 척도에 따라 그리고 상기 제1 척도에 대한 상기 기준치보다 작은 제1 값을 갖는 소프트웨어 스트림들에 대한 상기 제2 척도에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 것을 포함한다.
결과적으로, 본문에 기재된 실시 예들의 다양한 변형의 관점에서, 상세한 설명 및 첨부된 사항은 단순히 설명을 위한 것이며, 본 발명의 범위가 한정되는 것은 아니다. 본 발명의 청구범위는 이하의 특허청구범위의 사상 및 범위 내에서 이루어질 수 있는 모든 변형들이며, 이와 동등한 것이다.

Claims (20)

  1. 솔리드 스테이트 드라이브(SSD; Solid State Drive)에 있어서,
    데이터를 저장하는 플래시 메모리;
    상기 SSD에서 복수의 장치 스트림들을 위한 지원(support);
    복수의 커맨드들에 응답하여 상기 플래시 메모리에 데이터를 기입하는 것 및 상기 플래시 메모리로부터 데이터를 읽는 것을 관리하는 SSD 컨트롤러; 및
    호스트 인터페이스 로직을 포함하고,
    상기 호스트 인터페이스 로직은:
    호스트로부터 복수의 소프트웨어 스트림들과 연관되는 상기 복수의 커맨드들을 수신하는 수신기;
    윈도우를 측정하는 타이머;
    상기 복수의 커맨드들에 응답하여, 상기 윈도우 동안 상기 복수의 소프트웨어 스트림들 각각에 대하여 적어도 하나의 척도에 대한 적어도 하나의 값을 판별하는 통계 수집기;
    상기 복수의 소프트웨어 스트림들 각각에 대하여 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 등급 결정기; 및
    매핑을 구성하는 매퍼를 포함하고,
    상기 매핑은 상기 복수의 소프트웨어 스트림들의 제1 서브셋의 소프트웨어 스트림들 각각을 상기 SSD의 복수의 장치 스트림들의 고유 장치 스트림(unique device stream)으로 매핑하고, 상기 복수의 소프트웨어 스트림들의 제2 서브셋의 소프트웨어 스트림들 전체를 상기 SSD의 복수의 장치 스트림들의 통합 장치 스트림으로 매핑하도록 작동하는 솔리드 스테이트 드라이브.
  2. 제 1 항에 있어서,
    상기 SSD는 상기 소프트웨어 스트림들로부터 추가적인 복수의 커맨드들 수신하고, 상기 매핑에 따라 상기 추가적인 복수의 커맨드들을 상기 복수의 장치 스트림들로 할당하도록 작동하는 솔리드 스테이트 드라이브.
  3. 제 1 항에 있어서,
    상기 윈도우는 슬라이딩 윈도우(sliding window)이고,
    상기 통계 수집기는 상기 복수의 커맨드들 각각이 상기 윈도우로 진입하고 나감에 따라 상기 윈도우 내의 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값을 조정하도록 작동하는 솔리드 스테이트 드라이브.
  4. 제 1 항에 있어서,
    상기 윈도우는 불연속 윈도우(discrete window)인 솔리드 스테이트 드라이브.
  5. 제 1 항에 있어서,
    상기 복수의 소프트웨어 스트림들의 상기 제1 서브셋은 최상위 등급을 갖는 소프트웨어 스트림들을 포함하고, 상기 최상위 등급을 갖는 소프트웨어 스트림들의 개수는 상기 복수의 장치 스트림들의 개수보다 1개 적고,
    상기 복수의 소프트웨어 스트림들의 상기 제2 서브셋은 상기 복수의 소프트웨어 스트림들의 상기 제1 서브셋에 포함되지 않은 모든 소프트웨어 스트림들을 모두 포함하는 솔리드 스테이트 드라이브.
  6. 제 1 항에 있어서,
    상기 통계 수집기는 상기 복수의 소프트웨어 스트림들 각각에 대하여 제1 척도에 대한 제1 값 및 제2 척도에 대한 제2 값을 결정하도록 작동하는 솔리드 스테이트 드라이브.
  7. 제 6 항에 있어서,
    상기 등급 결정기는 상기 제1 척도에 대한 제1 가중치 및 상기 제2 척도에 대한 제2 가중치를 포함하고,
    상기 등급 결정기는 상기 제1 가중치를 사용한 상기 제1 값에 대한 제1 등급 및 상기 제2 가중치를 사용한 상기 제2 값에 대한 제2 등급의 가중치 합에 따라 상기 복수의 소프트웨어 스트림들 각각을 등급 결정하도록 작동하는 솔리드 스테이트 드라이브.
  8. 제 6 항에 있어서,
    상기 등급 결정기는 상기 제1 척도에 대한 기준치를 포함하고,
    상기 등급 결정기는 상기 제1 척도에 대한 상기 기준치보다 큰 제1 값을 갖는 소프트웨어 스트림들에 대하여 제1 척도에 따라, 그리고 상기 제1 척도에 대한 상기 기준치보다 작은 제1 값을 갖는 소프트웨어 스트림들에 대하여 상기 제2 척도에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하도록 작동하는 솔리드 스테이트 드라이브.
  9. 컴퓨터 시스템에서 사용되는 드라이브에 있어서,
    복수의 소프트웨어 스트림들과 연관된 복수의 커맨드들을 호스트로부터 수신하는 수신기;
    윈도우의 시간을 측정하는 타이머;
    상기 복수의 커맨드들에 응답하여, 상기 윈도우 동안 상기 복수의 소프트웨어 스트림들 각각에 대하여 적어도 하나의 척도에 대한 적어도 하나의 값을 결정하는 통계 수집기;
    상기 복수의 소프트웨어 스트림들 각각에 대하여 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 등급 결정기;
    상기 복수의 소프트웨어 스트림들의 제1 서브셋의 소프트웨어 스트림들 각각을 솔리드 스테이트 드라이브(SSD; Solid State Drive)의 복수의 장치 스트림들 중 고유 장치 스트림으로 매핑하고, 상기 복수의 소프트웨어 스트림들의 제2 서브셋의 모든 소프트웨어 스트림들을 상기 SSD의 상기 복수의 장치 스트림들 중 통합 장치 스트림으로 매핑하도록 작동하는 매핑을 설정하는 매퍼;
    상기 복수의 커맨드들 각각과 연관된 소프트웨어 스트림과 대응하는 장치 스트림 대한 장치 스트림 식별자(ID; identifier)를 추가적인 복수의 커맨드들 각각에 추가하는 장치 스트림 ID 추가기; 및
    상기 추가적인 복수의 커맨드들 각각을 상기 SSD로 전송하는 전송기를 포함하는 드라이버.
  10. 제 9 항에 있어서,
    상기 윈도우는 슬라이딩 윈도우이고,
    상기 통계 수집기는 상기 복수의 커맨드들 각각이 상기 윈도우로 진입하고 나감에 따라 상기 윈도우 내에서 상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값을 조정하도록 작동하는 드라이버.
  11. 제 9 항에 있어서,
    상기 윈도우는 불연속 윈도우인 드라이버.
  12. 제 9 항에 있어서,
    상기 복수의 소프트웨어 스트림들의 상기 제1 서브셋은 최상위 등급을 갖는 소프트웨어 스트림들을 포함하고, 상기 최상위 등급을 갖는 소프트웨어 스트림들의 개수는 상기 복수의 장치 스트림들의 개수보다 1개 적고,
    상기 복수의 소프트웨어 스트림들의 상기 제2 서브셋은 상기 복수의 소프트웨어 스트림들의 상기 제1 서브셋에 포함되지 않은 소프트웨어 스트림들을 모두 포함하는 드라이버.
  13. 제 9 항에 있어서,
    상기 통계 수집기는 상기 복수의 소프트웨어 스트림들 각각에 대하여 제1 척도에 대한 제1 값 및 제2 척도에 대한 제2 값을 결정하도록 작동하는 드라이버.
  14. 제 13 항에 있어서,
    상기 등급 결정기는 상기 제1 척도에 대한 제1 가중치 및 상기 제2 척도에 대한 제2 가중치를 포함하고,
    상기 등급 결정기는 상기 제1 가중치를 사용한 상기 제1 값에 대한 제1 등급 및 상기 제2 가중치를 사용한 상기 제2 값에 대한 제2 등급의 가중치 합에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하도록 작동하는 드라이버.
  15. 제 13 항에 있어서,
    상기 등급 결정기는 상기 제1 척도에 대한 기준치를 포함하고,
    상기 등급 결정기는 상기 제1 척도에 대한 상기 기준치보다 큰 제1 값을 갖는 소프트웨어 스트림들에 대하여 상기 제1 척도에 따라, 그리고 상기 제1 척도에 대한 상기 기준치보다 작은 제1 값을 갖는 소프트웨어 스트림들에 대하여 상기 제2 척도에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하도록 작동하는 드라이버.
  16. 방법에 있어서,
    복수의 소프트웨어 스트림들과 연관되고, 복수의 장치 스트림들을 포함하는 솔리드 스테이트 드라이브(SSD; Solid State Drive)를 사용하여 처리될 복수의 커맨드들을 수신하는 단계;
    상기 복수의 커맨드들에 응답하여, 상기 복수의 소프트웨어 스트림들 각각에 대하여 적어도 하나의 척도에 대한 적어도 하나의 값을 결정하는 단계;
    상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 응답하여 상기 복수의 소프트웨어 스트림들의 제1 및 제2 서브셋들을 식별하는 단계;
    상기 복수의 소프트웨어 스트림들의 상기 제1 서브셋의 각 소프트웨어 스트림을 상기 SSD의 복수의 장치 스트림들 중 고유 장치 스트림으로 매핑하고, 상기 복수의 소프트웨어 스트림들의 상기 제2 서브셋의 모든 소프트웨어 스트림들을 상기 SSD의 상기 복수의 장치 스트림들의 통합 장치 스트림으로 매핑하도록 작동하는 매핑을 생성하는 단계;
    상기 매핑을 생성한 이후에, 상기 복수의 소프트웨어 스트림들과 연관된 제2 복수의 커맨드들을 수신하는 단계;
    상기 매핑에 응답하여 상기 복수의 장치 스트림들 중 하나로 상기 제2 복수의 커맨드들 각각을 할당하는 단계; 및
    상기 할당된 장치 스트림을 사용하여 상기 SSD에서 대한 상기 제2 복수의 커맨드들 각각을 처리하는 단계를 포함하는 방법.
  17. 제 16 항에 있어서,
    상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 응답하여 상기 복수의 소프트웨어 스트림들의 제1 및 제2 서브셋들을 식별하는 단계는:
    상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 단계;
    최상위 등급을 갖는 소프트웨어 스트림들을 포함하도록 상기 복수의 스트림들의 상기 제1 서브셋을 선택하되, 상기 최상위 등급을 갖는 소프트웨어 스트림들의 개수는 상기 복수의 장치 스트림들의 개수보다 1개 작은 단계; 및
    상기 복수의 소프트웨어 스트림들에서, 상기 복수의 소프트웨어 스트림들의 상기 제1 서브셋에 포함되지 않은 모든 소프트웨어 스트림들을 포함하도록 상기 복수의 소프트웨어 스트림들의 상기 제2 서브셋을 선택하는 단계를 포함하는 방법.
  18. 제 17 항에 있어서,
    상기 복수의 커맨드들에 응답하여, 상기 복수의 소프트웨어 스트림들 각각에 대하여 적어도 하나의 척도에 대한 적어도 하나의 값을 결정하는 단계는 상기 복수의 소프트웨어 스트림들 각각에 대하여 제1 척도에 대한 제1 값 및 제2 척도에 대한 제2 값을 결정하는 단계를 포함하고,
    상기 적어도 하나의 척도에 대한 상기 적어도 하나의 값에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 단계는 상기 복수의 소프트웨어 스트림들 각각에 대하여 상기 제1 척도에 대한 상기 제1 값 및 상기 제2 척도에 대한 상기 제2 값에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 단계를 포함하는 방법.
  19. 제 18 항에 있어서,
    상기 제1 척도에 대한 상기 제1 값 및 상기 제2 척도에 대한 상기 제2 값에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 단계는:
    상기 제1 척도에 대한 제1 가중치 및 상기 제2 척도에 대한 제2 가중치를 결정하는 단계; 및
    상기 제1 가중치를 사용하는 상기 제1 값에 대한 제1 등급 및 상기 제2 가중치를 사용하는 상기 제2 값에 대한 제2 등급의 가중치 합에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 단계를 포함하는 방법.
  20. 제 18 항에 있어서,
    상기 제1 척도에 대한 상기 제1 값 및 상기 제2 척도에 대한 상기 제2 값에 따라 상기 복수의 소프트웨어 스트림들을 등급 결정하는 단계는:
    상기 제1 척도에 대한 기준치를 결정하는 단계; 및
    상기 제1 척도에 대한 상기 기준치보다 큰 제1 값을 갖는 소프트웨어 스트림들에 대한 상기 제1 척도에 따라서 그리고, 상기 제1 척도에 대한 상기 기준치보다 작은 제1 값을 갖는 소프트웨어 스트림들에 대한 상기 제2 척도에 따라서 상기 복수의 소프트웨어 스트림들을 등급 결정하는 단계를 포함하는 방법.
KR1020170104752A 2016-10-26 2017-08-18 멀티-스트림이 가능한 솔리드 스테이트 드라이브들을 위하여 데이터 스트림들을 통합하는 방법 KR102267480B1 (ko)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US201662413177P 2016-10-26 2016-10-26
US62/413,177 2016-10-26
US201762448958P 2017-01-20 2017-01-20
US62/448,958 2017-01-20
US15/458,968 US10216417B2 (en) 2016-10-26 2017-03-14 Method of consolidate data streams for multi-stream enabled SSDs
US15/458,968 2017-03-14

Publications (2)

Publication Number Publication Date
KR20180045786A true KR20180045786A (ko) 2018-05-04
KR102267480B1 KR102267480B1 (ko) 2021-06-22

Family

ID=61969550

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170104752A KR102267480B1 (ko) 2016-10-26 2017-08-18 멀티-스트림이 가능한 솔리드 스테이트 드라이브들을 위하여 데이터 스트림들을 통합하는 방법

Country Status (5)

Country Link
US (3) US10216417B2 (ko)
JP (1) JP6851951B2 (ko)
KR (1) KR102267480B1 (ko)
CN (1) CN107992266B (ko)
TW (1) TWI718337B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220161895A (ko) * 2021-05-31 2022-12-07 한국항공대학교산학협력단 멀티스트림을 활용한 분산 병렬 시스템의 데이터 분리 저장 장치 및 방법

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018088137A (ja) 2016-11-29 2018-06-07 東芝メモリ株式会社 半導体記憶装置
US10877691B2 (en) * 2017-12-29 2020-12-29 Intel Corporation Stream classification based on logical regions
CN112352216B (zh) * 2018-06-30 2022-06-14 华为技术有限公司 数据存储方法及数据存储装置
US11182101B2 (en) * 2018-12-03 2021-11-23 Western Digital Technologies, Inc. Storage system and method for stream management in a multi-host virtualized storage system
KR20200088563A (ko) * 2019-01-15 2020-07-23 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작방법
KR20200145151A (ko) 2019-06-20 2020-12-30 삼성전자주식회사 맵핑 정보를 축약하는 플래시 변환 계층 구조를 이용하여 메모리 리소스를 관리하는 데이터 저장 장치
US11481150B2 (en) * 2020-04-01 2022-10-25 Western Digital Technologies, Inc. Read modify write optimization for video performance
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
KR20210156190A (ko) 2020-06-17 2021-12-24 삼성전자주식회사 스토리지 장치 지원 실시간 가상 머신 마이그레이션
US11863623B2 (en) * 2020-09-11 2024-01-02 Western Digital Technologies, Inc. Variable QoS management of multiple data streams
CN117806986B (zh) * 2023-12-29 2024-10-15 深圳大普微电子股份有限公司 应用数据的多流管理方法及闪存设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20150028610A (ko) * 2013-09-06 2015-03-16 삼성전자주식회사 데이터 저장 장치 및 그것의 데이터 처리 방법

Family Cites Families (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006235960A (ja) 2005-02-24 2006-09-07 Fujitsu Ltd ガーベッジコレクション高速化方法
US20090119352A1 (en) 2007-11-05 2009-05-07 Steven Joseph Branda Method for Optimizing Generational Garbage Collection Through Object Life Heuristics
US8429658B2 (en) 2008-10-16 2013-04-23 International Business Machines Corporation Lock deferral for real-time garbage collection
CN102473140B (zh) 2009-07-17 2015-05-13 株式会社东芝 存储器管理装置
US8688894B2 (en) 2009-09-03 2014-04-01 Pioneer Chip Technology Ltd. Page based management of flash storage
WO2012020544A1 (ja) 2010-08-11 2012-02-16 日本電気株式会社 データ処理システム、データ処理方法、およびプログラム
US20150121003A1 (en) * 2010-09-07 2015-04-30 Daniel L. Rosenband Storage controllers
JP2012084127A (ja) 2010-09-15 2012-04-26 Toshiba Corp 半導体装置
US20120110239A1 (en) * 2010-10-27 2012-05-03 Seagate Technology Llc Causing Related Data to be Written Together to Non-Volatile, Solid State Memory
WO2013035295A1 (en) 2011-09-07 2013-03-14 Nec Corporation Storage system
US10203881B2 (en) * 2011-12-19 2019-02-12 Apple Inc. Optimized execution of interleaved write operations in solid state drives
JP5723812B2 (ja) 2012-03-16 2015-05-27 株式会社 日立産業制御ソリューションズ ファイルサーバ、データ入出力方法、i/oフックモジュールプログラム及びi/o代行デーモンプログラム
US8886880B2 (en) 2012-05-29 2014-11-11 Dot Hill Systems Corporation Write cache management method and apparatus
US9395924B2 (en) * 2013-01-22 2016-07-19 Seagate Technology Llc Management of and region selection for writes to non-volatile memory
US9158687B2 (en) * 2013-03-04 2015-10-13 Dot Hill Systems Corporation Method and apparatus for processing fast asynchronous streams
US9367353B1 (en) * 2013-06-25 2016-06-14 Sandisk Technologies Inc. Storage control system with power throttling mechanism and method of operation thereof
WO2015005634A1 (ko) 2013-07-08 2015-01-15 주식회사 윌러스표준기술연구소 메모리 시스템 및 이의 제어 방법
CN105659143B (zh) * 2013-07-31 2019-03-22 加州理工学院 孔径扫描傅立叶重叠关联成像
US9854270B2 (en) 2013-12-19 2017-12-26 Qualcomm Incorporated Device and method for scalable coding of video information
US9459810B2 (en) 2013-12-30 2016-10-04 Sandisk Technologies Llc Storage module and method for configuring command attributes
US8874835B1 (en) 2014-01-16 2014-10-28 Pure Storage, Inc. Data placement based on data properties in a tiered storage device system
KR101544309B1 (ko) 2014-02-26 2015-08-12 한양대학교 산학협력단 스트림 기반의 비휘발성 메모리 제어 방법 및 장치
TWI554944B (zh) 2014-06-20 2016-10-21 慧榮科技股份有限公司 快閃記憶體控制裝置、快閃記憶體控制系統以及快閃記憶體控制方法
EP3021208B1 (en) * 2014-11-14 2019-01-09 Dot Hill Systems Corporation Method and apparatus for processing fast asynchronous streams
US9519429B2 (en) 2014-12-09 2016-12-13 Intel Corporation Techniques to manage multiple sequential write streams to a solid state drive
US10409526B2 (en) 2014-12-17 2019-09-10 Violin Systems Llc Adaptive garbage collection
KR20160105624A (ko) 2015-02-27 2016-09-07 에스케이하이닉스 주식회사 데이터 처리 시스템 및 그것의 동작 방법
JP2016170583A (ja) 2015-03-12 2016-09-23 株式会社東芝 メモリシステムおよび情報処理システム
US20160283124A1 (en) 2015-03-25 2016-09-29 Kabushiki Kaisha Toshiba Multi-streamed solid state drive
US9760281B2 (en) 2015-03-27 2017-09-12 Intel Corporation Sequential write stream management
US9996302B2 (en) * 2015-04-03 2018-06-12 Toshiba Memory Corporation Storage device writing data on the basis of stream
US10261725B2 (en) * 2015-04-10 2019-04-16 Toshiba Memory Corporation Storage system capable of invalidating data stored in a storage device thereof
US10013177B2 (en) 2015-04-20 2018-07-03 Hewlett Packard Enterprise Development Lp Low write amplification in solid state drive
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
US9594513B1 (en) * 2015-06-29 2017-03-14 EMC IP Holding Company LLC Data storage system with file system stream detection
KR102381343B1 (ko) 2015-07-27 2022-03-31 삼성전자주식회사 스토리지 장치 및 상기 스토리지 장치의 동작 방법
JP6403164B2 (ja) 2015-09-11 2018-10-10 東芝メモリ株式会社 メモリシステム
US9880780B2 (en) 2015-11-30 2018-01-30 Samsung Electronics Co., Ltd. Enhanced multi-stream operations
JP2018022275A (ja) 2016-08-02 2018-02-08 東芝メモリ株式会社 半導体記憶装置
JP2018160195A (ja) 2017-03-23 2018-10-11 東芝メモリ株式会社 メモリシステムおよび不揮発性メモリの制御方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20150028610A (ko) * 2013-09-06 2015-03-16 삼성전자주식회사 데이터 저장 장치 및 그것의 데이터 처리 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220161895A (ko) * 2021-05-31 2022-12-07 한국항공대학교산학협력단 멀티스트림을 활용한 분산 병렬 시스템의 데이터 분리 저장 장치 및 방법

Also Published As

Publication number Publication date
KR102267480B1 (ko) 2021-06-22
US20180113642A1 (en) 2018-04-26
JP2018073412A (ja) 2018-05-10
US10739995B2 (en) 2020-08-11
US20190129617A1 (en) 2019-05-02
US11048411B2 (en) 2021-06-29
TW201816620A (zh) 2018-05-01
US10216417B2 (en) 2019-02-26
US20200264774A1 (en) 2020-08-20
CN107992266A (zh) 2018-05-04
JP6851951B2 (ja) 2021-03-31
CN107992266B (zh) 2022-01-28
TWI718337B (zh) 2021-02-11

Similar Documents

Publication Publication Date Title
KR102267480B1 (ko) 멀티-스트림이 가능한 솔리드 스테이트 드라이브들을 위하여 데이터 스트림들을 통합하는 방법
US10346079B2 (en) System and method for managing storage system snapshots
US10001944B2 (en) Systems and methods for data organization in storage systems using large erasure codes
US10140034B2 (en) Solid-state drive assignment based on solid-state drive write endurance
EP3285187B1 (en) Optimized merge-sorting of data retrieved from parallel storage units
US10509739B1 (en) Optimized read IO for mix read/write scenario by chunking write IOs
US11210183B2 (en) Memory health tracking for differentiated data recovery configurations
US11847355B2 (en) Multistreaming in heterogeneous environments
US10719245B1 (en) Transactional IO scheduler for storage systems with multiple storage devices
US11914894B2 (en) Using scheduling tags in host compute commands to manage host compute task execution by a storage device in a storage system
US10148505B2 (en) Provisioning resources for datacenters
US12072892B2 (en) Data ingestion with spatial and temporal locality
US9444890B2 (en) Switch-based data tiering
CN112181274B (zh) 提升存储设备性能稳定性的大块的组织方法及其存储设备
US10599340B1 (en) Policy driven IO scheduler to improve read IO performance in hybrid storage systems
CN107688435B (zh) Io流调节方法与装置
US10346054B1 (en) Policy driven IO scheduler resilient to storage subsystem performance
KR101694299B1 (ko) 클라우드 스토리지의 저장장치를 관리하기 위한 방법 및 메타데이터 서버

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant