KR102561727B1 - 순차 기입 스트림 관리 - Google Patents

순차 기입 스트림 관리 Download PDF

Info

Publication number
KR102561727B1
KR102561727B1 KR1020177023540A KR20177023540A KR102561727B1 KR 102561727 B1 KR102561727 B1 KR 102561727B1 KR 1020177023540 A KR1020177023540 A KR 1020177023540A KR 20177023540 A KR20177023540 A KR 20177023540A KR 102561727 B1 KR102561727 B1 KR 102561727B1
Authority
KR
South Korea
Prior art keywords
write
stream
sequential
sequential write
data
Prior art date
Application number
KR1020177023540A
Other languages
English (en)
Other versions
KR20170130376A (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 인텔 코포레이션
Priority to KR1020237025668A priority Critical patent/KR20230117258A/ko
Publication of KR20170130376A publication Critical patent/KR20170130376A/ko
Application granted granted Critical
Publication of KR102561727B1 publication Critical patent/KR102561727B1/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0895Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array
    • 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
    • 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/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • 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
    • 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/0683Plurality of 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/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/20Employing a main memory using a specific memory technology
    • G06F2212/202Non-volatile memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory

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)
  • Memory System Of A Hierarchy Structure (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

일 실시예에서, 시스템 내의 다수의 프로세서 노드들로부터의 다양한 순차적 및 비순차적 스트림들로부터의 기입 커맨드들이 뒤섞이는 것에도 불구하고, 솔리드 스테이트 드라이브와 같은 저장소에 배치된 기입 데이터의 순차적 성질을 개선시키기 위해 순차 기입 스트림 관리가 이용된다. 일 실시예에서, 식별된 순차 기입 스트림으로부터의 기입 데이터는 그 특정의 식별된 순차 기입 스트림에 할당된 저장 구역에 배치된다. 다른 양태에서, 검출된 순차 기입 스트림들은 검출된 스트림의 기입 속도의 함수로서 식별된다. 다른 양태들이 본원에 기술되어 있다.

Description

순차 기입 스트림 관리
본 발명의 특정 실시예들은 일반적으로 순차 기입 스트림(sequential write stream)의 기입 데이터(write data)가 저장되는 저장소에 관한 것이다.
컴퓨팅 시스템은 하나 이상의 프로세서 노드들을 가질 수 있고, 여기서 각각의 노드는 하나 이상의 중앙 처리 유닛들, 마이크로프로세서들, 마이크로프로세서의 코어들에 의해 제공되는 처리 자원 또는 특정의 컴퓨팅 시스템의 에뮬레이션인 가상 머신(VM)의 공유 처리 자원을 갖는다. 컴퓨팅 시스템의 프로세서 노드들은, 예를 들어, 저장소와 같은 자원들을 공유할 수 있다. 블록 저장소(block storage)라고 지칭되는 한 유형의 저장소에서는, 데이터가, 예를 들어, 512 바이트 배수와 같은 배수들로 받아들여진다. 공유 저장소의 경우, 각각의 프로세서 노드는 판독 커맨드들, 기입 커맨드들 및 다른 저장 커맨드들을 제공하기 위해 하나 이상의 저장 커맨드 제출 큐들을 가질 수 있다.
일부 공유 저장소 설계들에서, 공유 저장소는 다양한 프로세서 노드들의 저장 커맨드 제출 큐(storage command submission queue)들 각각에 의해 발행되는 저장 커맨드들을 수신하며 공유 저장소에 의한 실행을 기다리기 위해 저장 커맨드들을 공통 보류 저장 커맨드 큐(common pending storage command queue)에 통합(consolidate)시키는 제어기를 갖는다. 공유 저장소에의 액세스를 프로세서 노드들 간에 분배하기 위해, 블록 저장소 제어기는, 예를 들어, "라운드 로빈(round robin)" 분배 프로세스와 같은 액세스 분배 프로세스를 이용할 수 있다. 이러한 액세스 분배 프로세스에서, 블록 저장소 제어기는 한번은 하나의 커맨드 제출 큐로부터 저장 커맨드를 받아서 공통 보류 저장 커맨드 큐에 배치하고 다음번에는 다음 커맨드 제출 큐로부터 저장 커맨드를 받아서 공통 보류 저장 커맨드 큐에 배치하며, 이하 마찬가지이다. 공유 저장소 액세스 분배 프로세스의 결과로서, 특정의 프로세서 노드의 특정의 커맨드 제출 큐에 의해 발행되는 저장 커맨드들이 동일한 또는 다른 프로세서 노드들의 다른 저장 커맨드 제출 큐들에 의해 발행되는 저장 커맨드들과 뒤섞이게 될 수 있다.
하나 이상의 프로세서 노드들에 의해 종종 공유되는 블록 저장소의 일 예는 SSD(solid state drive)이다. SSD는 집적 회로 어셈블리들을 데이터를 영속적으로 저장하는 비휘발성 저장소로서 사용하는 데이터 저장 디바이스이다. SSD들은 전형적으로 움직이는 기계 컴포넌트들을 갖지 않으며, 이것에 의해 SSD들과 회전하는 디스크들 및 움직일 수 있는 판독/기입 헤드들을 포함하는, 하드 디스크 드라이브들(HDD들) 또는 플로피 디스크들과 같은, 전통적인 전자기계적 자기 디스크들이 구별된다. 전자기계적 디스크들과 비교하여, SSD들은 전형적으로 물리적 충격에 보다 내성이 있고, 조용히 작동하며, 보다 낮은 액세스 시간 및 보다 작은 대기시간(latency)을 갖는다. 많은 유형의 SSD들은, 전원이 없어도 데이터를 보유하고 비휘발성 저장 기술의 한 유형인, NAND 기반 플래시 메모리 셀들을 사용한다.
SSD의 블록 저장소 제어기는 기입 커맨드들에 응답하여 기입 데이터를 공유 저장소 내의 하나 이상의 저장 밴드(band of storage)들에 기입할 수 있다. 저장 밴드 내에서, SSD 블록 저장소 제어기는 빈번히 저장 블록(block of storage)들 전체를 한꺼번에 처리한다. 예를 들어, SSD에서의 메모리 셀 블록 내의 메모리 셀에 기입하기 전에, 전형적으로 메모리 셀 블록의 메모리 셀들에 한꺼번에 큰 전압을 인가하는 것에 의해, 저장 블록 전체가 보통 한꺼번에 소거된다. 그렇지만, 보존될 데이터를 포함하는 데이터 블록을 소거하기 전에, 변경되지 않은 채로 있어야 하는 데이터는 보통 판독되어 저장된다. 소거가 완료되면, 새로운 데이터 및 저장된 데이터 둘 다는 새로 소거된 블록에 또는 어떤 경우에 이전에 소거된 블록에 기입된다.
그 결과, 새로운 데이터를 SSD에 기입하기 위해, 새로운 데이터의 기입을 달성하기 위해 실제로 기입되는 데이터의 양이, 많은 경우에, 새로운 데이터의 양을 초과할 수 있다. 이 현상은 때때로 "기입 증폭(write amplification)"이라고 지칭되고, SSD 성능에 악영향을 줄 수 있다.
유사한 도면 부호들이 유사한 요소들을 가리키고 있는 첨부 도면의 도면들에, 본 개시내용의 실시예들이 제한으로서가 아니라 예로서 예시되어 있다.
도 1은 본 개시내용의 일 실시예에 따른 순차 기입 스트림 관리를 이용하는, 컴퓨팅 시스템의 선택된 양태들을 나타내는 상위 레벨 블록도.
도 2는 도 1의 컴퓨팅 시스템의 다수의 제출 큐들로부터 수신되는 저장 커맨드들을 큐잉하기 위한 저장 큐의 일 예를 나타낸 도면.
도 3은 본 개시내용의 일 실시예에 따른 순차 기입 스트림 관리를 이용하는, 도 1의 컴퓨팅 시스템에 대한 기입 스트림 관리 로직의 일 예의 개략도.
도 4는 본 개시내용의 일 실시예에 따른 순차 기입 스트림 관리를 이용하는, 도 1의 컴퓨팅 시스템에 대한 솔리드 스테이트 드라이브의 저장소의 저장 영역(storage regions)들을 나타낸 도면.
도 5 및 도 6은 본 개시내용의 일 실시예에 따른 순차 기입 스트림 관리를 위한 동작들의 예들을 나타낸 도면.
도 7은 도 3의 기입 스트림 관리 로직에 의해 검출되는 순차 기입 스트림들의 예들을 나타낸 도면.
도 8은 본 개시내용의 일 실시예에 따른 순차 기입 스트림 관리를 이용하는, 컴퓨팅 시스템의 다른 예를 나타낸 도면.
이하의 설명에서, 유사한 컴포넌트들은, 그들이 상이한 실시예들에서 도시되어 있는지에 관계없이, 동일한 도면 부호들을 부여받고 있다. 본 개시내용의 일 실시예(실시예들)를 명확하고 간결한 방식으로 예시하기 위해, 도면들이 꼭 축척대로 되어 있지 않을 수 있으며, 특정의 특징들이 얼마간 개략적인 형태로 도시되어 있을 수 있다. 일 실시예와 관련하여 기술되고 그리고/또는 예시되어 있는 특징들이 하나 이상의 다른 실시예들에서 동일한 방식으로 또는 유사한 방식으로 그리고/또는 다른 실시예들의 특징들과 결합되어 또는 그 대신에 사용될 수 있다.
본 설명의 일 실시예는 다양한 커맨드 제출 큐들로부터의 복수의 기입 커맨드들이 공통 커맨드 큐에 큐잉되고 공통 커맨드 큐로부터 실행되는 컴퓨팅 시스템에 관한 것이다. 본 설명의 일 양태에서, 큐잉된 기입 커맨드들 내의 순차 기입 스트림들은 특정의 순차 기입 스트림들로서 검출되고 식별된다. 따라서, 식별된 순차 기입 스트림들은, 예를 들어, 상이한 식별(identification)(ID) 이름들 또는 번호들을 할당받을 수 있고, 할당된 순차 기입 스트림 ID(identification)의 함수로서 특정의 저장 구역들 또는 영역들에 할당될 수 있다.
일 실시예에서, 데이터를 저장소에 기입하기 전에 데이터를 일시적으로 저장하기 위해 전송 버퍼 저장소(transfer buffer storage)가 제공된다. 실행 중인 커맨드들의 기입 데이터는 순차 기입 스트림들의 ID의 함수로서 이러한 전송 버퍼 저장소의 상이한 순차 기입 스트림 버퍼 파티션(sequential write stream buffer partition)들에 기입될 수 있다. 예를 들어, 하나의 식별된 순차 기입 스트림의 기입 데이터는 전송 버퍼 저장소의 하나의 순차 기입 스트림 버퍼 파티션에 집합(aggregate)될 수 있고, 다른 식별된 순차 기입 스트림의 기입 데이터는 전송 버퍼 저장소의 상이한 순차 기입 스트림 버퍼 파티션에 집합될 수 있다. 이하에서 보다 상세히 설명되는 바와 같이, 전송 버퍼에서의 순차 기입 스트림 ID의 함수로서의 이러한 기입 데이터 파티셔닝은 솔리드 스테이트 저장 디바이스에서의 기입 증폭을 감소시킬 수 있다.
본 설명의 다른 양태에서, 실행 중인 커맨드들의 기입 데이터는 식별된 순차 기입 스트림들의 함수로서 솔리드 스테이트 저장소의 상이한 순차 기입 스트림 저장 구역들 또는 영역들에 기입된다. 예를 들어, 하나의 식별된 순차 기입 스트림의 기입 데이터는 솔리드 스테이트 저장소의 하나의 순차 기입 스트림 저장 영역에 집합될 수 있고, 다른 식별된 순차 기입 스트림의 기입 데이터는 솔리드 스테이트 저장소의 상이한 순차 기입 스트림 저장 영역에 집합될 수 있다. 이하에서 보다 상세히 설명되는 바와 같이, 기입 데이터가 이와 같이 순차 기입 스트림 ID의 함수로서 상이한 분리된 순차 기입 스트림 저장 영역들에 집합하는 것이 또한 솔리드 스테이트 저장 디바이스에서의 기입 증폭을 감소시킬 수 있다.
본 설명의 다른 양태에서, 검출된 순차 기입 스트림들이 검출된 순차 기입 스트림들의 다양한 특성들의 함수로서 특정의 순차 기입 스트림들로서 식별될 수 있다. 일 실시예에서, 기입 스트림의 하나의 이러한 특성이 본원에서 순차 기입 스트림이 저장소에서 업데이트되거나 덮어쓰기되는 레이트(rate)의 척도인 "기입 속도(write velocity)"라고 지칭된다. 일 예에서, 순차 기입 스트림은 데이터 기입(data write)들이 순환 버퍼(circular buffer)를 통해 랩어라운드(wrap around) 또는 루프백(loop back)하는 순환 버퍼로서 모델링될 수 있다. 보다 낮은 데이터 업데이트 레이트(rate of data updates)를 갖는 보다 작은 순환 버퍼와 보다 높은 데이터 업데이트 레이트를 갖는 보다 큰 순환 버퍼는, 2개의 순환 버퍼들이 동일한 레이트로 랩어라운드 또는 루프백하더라도, 동일한 기입 속도를 가질 수 있다.
일 실시예에서, 검출된 순차 기입 스트림에 대한 기입 속도 특성이 검출될 수 있고, 그 검출된 순차 기입 스트림에 할당된 ID는 검출된 순차 기입 스트림에 대한 검출된 기입 속도의 함수일 수 있다. 따라서, 일 예에서, 동일하거나 유사한 기입 속도 특성들을 갖는(예컨대, 동일한 범위 내에 있는) 2개의 상이한 검출된 순차 기입 스트림들은 동일한 순차 기입 스트림 ID를 할당받을 수 있다. 본 설명에 따른 기입 속도 검출이 다른 데이터 업데이트 레이트 척도들을 갖는 다른 데이터 기입 실시예들에 적용될 수 있다는 것을 잘 알 것이다.
일 실시예에서, 동일하거나 유사한 기입 속도 특성들 및 동일한 할당된 순차 기입 스트림 ID를 갖는 2개의 상이한 검출된 순차 기입 스트림들의 기입 데이터가 공통 스트림 속도 저장 영역에 기입될 수 있고, 공통 스트림 속도 저장 영역은 상이한 검출된 순차 기입 스트림들에 대한 하나 이상의 순차 기입 스트림 저장 구역들을 포함할 수 있다. 그 결과, 솔리드 스테이트 저장소의 상이한 순차 스트림 저장 구역들은, 공통 저장 영역 내의 저장 구역들에 할당되는 검출된 순차 기입 스트림들의 기입 속도들이 동일하거나 유사한 것으로 결정되는, 공통 스트림 속도 저장 영역에 집합될 수 있다. 이하에서 보다 상세히 설명되는 바와 같이, 동일하거나 유사한 기입 속도들을 갖는 상이한 검출된 순차 기입 스트림들의 기입 데이터가 이와 같이 공통 스트림 속도 저장 영역에 집합하는 것이 또한 솔리드 스테이트 저장 디바이스에서의 기입 증폭을 감소시킬 수 있다.
다른 실시예들에서, 검출된 순차 기입 스트림들이 기입 속도 이외의 특성들의 함수로서 식별될 수 있다는 것을 잘 알 것이다. 따라서, 일부 검출된 순차 기입 스트림들은, 예를 들어, 기입 속도 특성에 부가하여 또는 그 대신에 특성들의 함수로서 순차 기입 스트림 ID들을 할당받을 수 있다.
도 1은 본 설명의 일 실시예에 따른 순차 기입 스트림 관리를 이용하는 컴퓨팅 시스템(100)의 블록도를 나타낸 것이다. 이 실시예에서, 컴퓨팅 시스템(100)은 솔리드 스테이트 드라이브(106)에의 액세스를 공유하는 복수의 프로세서 노드들(104a, 104b, ... 104n)을 포함한다. 각각의 프로세서 노드는 하나 이상의 중앙 처리 유닛들(CPU들), 마이크로프로세서들, 처리 코어들, 가상 머신들 또는 다른 처리 자원들을 가질 수 있다. 프로세서 노드들(104a, 104b ... 104n) 및 솔리드 스테이트 드라이브(106)는 SoC(system on a chip)와 같은 단일 컴포넌트로서 제조될 수 있거나, 반도체 패키지에서 또는 하나 이상의 회로 보드들 상에서, 또는 디바이스 하우징에서 서로 결합되는 개별 컴포넌트들로서 제조될 수 있거나 다른 방식으로 서로 전기적으로 결합될 수 있다.
솔리드 스테이트 드라이브(106)는 블록 저장소 제어기(110) 및, NAND 저장소, NOR 저장소 또는 어떤 다른 적당한 비휘발성 저장소와 같은, 비휘발성 저장소(120)로 이루어져 있을 수 있다. 블록 저장소 제어기(110) 및 비휘발성 저장소(120)는, 컴퓨팅 시스템(100)과 같이, SoC(system on a chip)와 같은 단일 컴포넌트로서 제조될 수 있거나, 반도체 패키지에서 또는 하나 이상의 회로 보드들 상에서, 또는 디바이스 하우징에서 서로 결합되는 또는 다른 방식으로 서로 전기적으로 결합되는 개별 컴포넌트들로서 제조될 수 있다.
특정 실시예들에서, 솔리드 스테이트 드라이브(106)는, 특정 응용에 따라, 수 테라바이트 이상 또는 그 이하의 데이터를 저장할 수 있을 것이다. 특정 실시예들은 다른 유형의 비휘발성 저장소 또는 메모리, 상변화 메모리(phase change memory)(PCM), 3차원 교차점 메모리(three dimensional cross point memory), 저항성 메모리, 나노와이어 메모리, 강유전체 트랜지스터 랜덤 액세스 메모리(FeTRAM), 멤리스터 기술(memristor technology)을 포함하는 자기저항 랜덤 액세스 메모리(MRAM) 메모리, 스핀 전달 토크(spin transfer torque)(STT)-MRAM, 바이트 주소지정가능 랜덤 액세스 비휘발성 메모리 등에 적용될 수 있다.
특정 실시예들에서, 컴퓨팅 시스템(100)은, 개인용 컴퓨터, 메인프레임, 전화 디바이스, 스마트폰, 저장소 제어기, 블레이드 컴퓨터(blade computer), 저장소를 갖는 프로세서 등과 같은, 임의의 적당한 컴퓨팅 디바이스(computational device)를 포함할 수 있다. 컴퓨팅 시스템(100)의 각각의 프로세서 노드(104a, 104b ... 104n)는 연관된 프로세서 노드에 의해, 예를 들어, PCIe(Peripheral Component Interconnect) 링크들과 같은 하나 이상의 통신 링크들 또는 버스들을 거쳐 SSD(106)에 발행될 판독, 기입 또는 다른 저장 커맨드들에 대한 하나 이상의 저장 커맨드 제출 큐들(124a, 124b ... 124n)을 갖는다. 프로세서 노드(104b)와 같은 프로세서 노드는 큐들(124b, 124c)로 표현되는 바와 같은 하나 초과의 제출 큐들을 가질 수 있다. 다른 유형의 통신 링크들 또는 버스들은 SATA(Serial Advanced Technology Attachment), SAS(Serial Attached Small Computer System Interface) 버스, 또는 인터넷, SAN(storage area network), LAN(local area network)와 같은 네트워크 등을 포함한다. SATA 규격의 추가 상세들은 미국 오리건주 비버튼 소재의 SATA-IO(SATA International Organization)에 의해 2013년 8월에 발표된 "Serial ATA Specification, Revision 3.2"라는 제목의 간행물에서 찾아볼 수 있다. 다른 예에서, 인터페이스 및/또는 상호연결 프로토콜은 NVMe(Non-Volatile Memory Host Controller Interface Express)를 준수하고 그리고/또는 그와 호환가능할 수 있다. NVMe의 추가 상세들은 NVM Express™ Work Group에 의해 2014년 11월 3일에 발표된 "NVM Express™, Revision 1.2"라는 제목의 간행물에서 그리고/또는 이 규격의 이전 버전들 및/또는 이후 버전들에서 찾아볼 수 있다(NVM Express는 NVM Express, Inc.의 상표임). SATA 및 SAS 표준들과 같은 표준들을 이용하는 실시예들이 복수의 커맨드 인터페이스 또는 다른 제출 큐들을 갖지 않을 수 있다는 것을 잘 알 것이다. 그렇지만, 본 설명에 따른 순차 기입 스트림 관리는 또한 이러한 실시예들에, 특히, 예를 들어, 저장 동작들이 뒤섞이게 되는, 블록 저장소를 공유하는 다수의 가상 머신들을 이용하는 이러한 실시예들에서, 적용될 수 있다.
프로세서 노드들(104a, 104b ... 104n)의 다양한 저장 커맨드 제출 큐들(124a, 124b ... 124n)로부터 블록 저장소 제어기(110)에 의해 수신되는 기입 저장 커맨드들의 스트림들은, 이 실시예에서, 보류 기입 커맨드 큐(pending write command queue)(132) - 그의 일 예가 도 2에 개략적으로 도시됨 - 인, 하나 이상의 공통 큐들에 큐잉된다. 본 설명의 일 양태에 따르면, 블록 저장소 제어기(110)는, 보다 효율적인 데이터 기입 동작들을 용이하게 하는 방식으로 기입 데이터를 전송 버퍼(140) 및 비휘발성 저장소(120)의 하나 이상의 구역들에 배치하는 것을 제어하기 위해, 보류 기입 커맨드 큐(132)로부터 획득된 데이터를 이용하는 기입 스트림 관리 로직(136)을 포함한다. 예를 들어, 이 실시예의 전송 버퍼(140)는 순차 스트림 버퍼 파티션들(150a, 150b, 150c ... 150n)을 포함하며, 이들 각각은 할당된 순차 기입 스트림 또는 스트림들의 기입 데이터를 집합시키기 위해 하나 이상의 식별된 순차 기입 스트림들에 할당될 수 있다. 이와 유사하게, 비휘발성 저장소(120)는 저장 영역들(160a, 160b, 160c ... 160n)을 포함하고, 이들 각각은 할당된 순차 기입 스트림 또는 스트림들의 기입 데이터를 집합시키기 위해 하나 이상의 식별된 순차 기입 스트림들에 할당될 수 있다. 기입 스트림 관리 로직(136)은 블록 저장소 제어기(110), 비휘발성 저장소(120), 하나 이상의 프로세서 노드들(104a 내지 104n) 또는 컴퓨팅 시스템(100)의 임의의 다른 컴포넌트 내에 위치될 수 있고, 데이터 기입 동작들을 개선시키기 위해 하드웨어, 소프트웨어, 펌웨어 또는 이들의 임의의 조합으로 구현될 수 있다.
예를 들어, 커맨드들의 스트림들을 CPU 코어들 또는 다른 처리 노드들로부터 공유 SSD로 직접 송신하기 위해 다수의 제출 큐들을 이용하는 많은 시스템들이 전형적으로 다양한 CPU 코어들로부터 저장 커맨드들을 송신하는 것을 직렬화(serialize)하거나 다른 방식으로 조정(coordinate)하지 않는다는 것을 잘 알 것이다. 그 결과, 하나의 CPU 코어로부터 논리적으로 인접한 저장 구역들로의 기입 커맨드들의 순차 기입 스트림이, 솔리드 스테이트 드라이브(106)의 블록 저장소 제어기 인터페이스에서, 시스템의 다른 CPU 코어들로부터의 저장 커맨드들과 뒤섞여버릴 수 있다. 그 결과, 본 설명에 따른 기입 스트림 관리 로직(136)이 없는 경우, 종래의 시스템들에서, 커맨드들의 조합된 스트림들로부터 SSD에 기입되는 데이터는 임의의 원래의 순차 기입 스트림들의 순차적 성질을 상실할 수 있다. 커맨드들이 다양한 제출 큐들에 깊게 큐잉될수록 원래의 순차 기입 스트림들의 순차적 성질의 상실의 정도가 악화될 수 있다. 그 결과, 본 설명에 따른 기입 스트림 관리 로직(136)이 없는 경우, 상이한 스트림들로부터의 커맨드 뒤섞임 및 큐 깊이(queue depth)가 증가함에 따라 SSD의 순차 기입 성능이 열화될 수 있다. 유의할 점은, 단일 스레드 방식 시나리오(single threaded scenario)에서 동작할 때에도, 운영 체제들이 상이한 하이퍼 스레드 방식 CPU 코어(hyper threaded CPU core) 상의 특정의 스레드를 웨이크(wake)시키는 경향이 있기 때문에, 스레드의 커맨드 스트림이 상이한 커맨드 제출 큐로 시프트함으로써 커맨드들을 더욱 뒤섞이게 할 수 있다.
도 3은 본 설명에 따른 기입 스트림 관리 로직(136)의 일 예를 나타낸 것이다. 이 실시예에서, 기입 스트림 관리 로직(136)의 순차 기입 스트림 식별 로직(300)은, SSD(106)에 의해 수신되는 기입 커맨드들에 순차 기입 스트림들이 존재하는 것을 검출하기 위해, 순차 기입 스트림 검출 로직(302)에서 휴리스틱스(heuristics)를 이용한다. 각각의 검출된 순차 기입 스트림에 대해, 일 실시예에서 순차 기입 스트림 기입 속도 검출 로직(310)에 의해 순차 기입 스트림의 기입 속도가 검출된다. 이전에 언급된 바와 같이, 본원에서 사용되는 바와 같이, "기입 속도"라는 용어는 데이터가 호스트 애플리케이션에 의해 업데이트되는 레이트를 지칭한다. 일부 실시예들에서, 검출된 순차 기입 스트림들에 대해 기입 속도 검출이 생략될 수 있다는 것을 잘 알 것이다.
일 실시예에서, 검출된 순차 기입 스트림에 할당되는 ID(identity)는 검출된 순차 기입 스트림의 특성들의 함수이다. 일 실시예에서, 검출된 순차 기입 스트림에 할당되는 ID(identity)는 특정의 검출된 순차 기입 스트림에 대해 검출된 기입 속도 특성의 함수이다. 공통의 또는 유사한 기입 속도를 갖는 검출된 순차 기입 스트림들에 대해, 그 순차 기입 스트림들은 순차 기입 스트림 식별 로직(300)에 의해 공통의 또는 관련된 순차 기입 스트림 식별 이름 또는 번호를 할당받을 수 있다. 따라서, 일 실시예에서, 특정의 식별된 순차 기입 스트림은, 예를 들어, 공통의 또는 유사한 기입 속도를 갖는 하나 이상의 검출된 순차 기입 스트림들의 조합일 수 있다. 다른 실시예들에서, 각각의 검출된 순차 기입 스트림은 고유의 순차 기입 스트림 ID를 할당받을 수 있다. 다른 실시예에서, 순차 기입 스트림 ID들의 그룹들을 나타내는 데이터 구조에서 공통의 또는 유사한 기입 속도를 갖는 검출된 기입 스트림들이 표시될 수 있고, 여기서 그룹의 각각의 순차 기입 스트림은 동일하거나 유사한 기입 속도를 갖는다. 순차 기입 스트림 ID들이, 특정 응용에 따라, 다양한 기법들로 할당될 수 있을 것으로 예상된다. 예를 들어, 검출된 순차 기입 스트림들이, 특정 응용에 따라, 기입 속도 이외에 또는 그에 부가하여, 논리 블록 주소지정(Logical Block Addressing)(LBA) 기입 스트림 목적지, 순차 기입 스트림의 제출 큐 소스(submission queue source) 또는 다른 특성들과 같은, 기입 스트림 특성의 함수로서 식별될 수 있다.
순차 기입 스트림을 식별할 때, 그 특정의 식별된 순차 기입 스트림의 기입 데이터는 그 식별된 순차 기입 스트림에 대해 분리된 저장 구역에 집합될 수 있다. 예를 들어, 식별된 순차 기입 스트림의 기입 데이터는, 전송 버퍼 파티션 기입 스트림 데이터 집합 로직(304)에 의해, 식별된 순차 기입 스트림에 할당되는 특정의 순차 기입 스트림 전송 버퍼 파티션(150a, 150b, ... 150n)(도 1)에 집합될 수 있다. 이하에서 보다 상세히 설명되는 바와 같이, 식별된 순차 기입 스트림의 기입 데이터를 할당된 순차 기입 스트림 전송 버퍼 파티션에서 내부적으로 재구성(reassemble)하기 위해 식별된 순차 기입 스트림의 기입 데이터를 이와 같이 집합시키는 것이 SSD(106)의 기입 성능을 개선시킬 수 있다고 생각된다. 예를 들어, 다양한 커맨드 제출 큐들로부터의 기입 커맨드들이 블록 저장소 제어기의 공통 보류 기입 큐에서 뒤섞이는 것에도 불구하고, 식별된 순차 기입 스트림의 기입 데이터의 순차적 성질이, 식별된 순차 기입 스트림의 기입 데이터를 할당된 순차 스트림 전송 버퍼 파티션에 집합시키는 것에 의해 어느 정도 회복될 수 있다고 생각된다.
하나 이상의 식별된 순차 기입 스트림들의 기입 데이터가 또한, 저장 영역 기입 속도 데이터 집합 로직(320)에 의해, 각각의 식별된 순차 기입 스트림들에 할당되는 특정의 비휘발성 저장 영역(160a, 160b, ... 160n)(도 1)에 집합될 수 있다. 일 실시예에서, 특정의 저장 영역에 할당되는 식별된 순차 기입 스트림의 검출된 순차 기입 스트림 또는 스트림들은 동일하거나 유사한 기입 속도를 갖는다. 이하에서 보다 상세히 설명되는 바와 같이, 검출된 순차 기입 스트림들의 기입 데이터를 할당된 비휘발성 저장 영역(160a, 160b, ... 160n)(도 1)에서 내부적으로 재구성하기 위해, 동일하거나 유사한 기입 속도를 갖는 검출된 순차 기입 스트림들에 의한 기입 데이터의 이러한 집합이 또한 SSD(106)의 기입 성능을 개선시킬 수 있다고 생각된다. 예를 들어, 기입 데이터를 동일하거나 유사한 기입 속도를 갖는 검출된 순차 기입 스트림들에 할당되는 저장 영역에 집합시키는 것에 의해, 그 영역의 식별된 순차 기입 스트림의 집합된 기입 데이터는 동일하거나 유사한 때에 업데이트될 수 있고, 그로써 가비지 컬렉션(garbage collection)을 용이하게 하고 데이터 재배치(data relocation) 및 기입 증폭을 감소시킬 수 있다고 생각된다.
이전에 언급된 바와 같이, 일부 실시예들에서, 검출된 순차 기입 스트림들은, 예를 들어, 기입 속도 특성에 부가하여 또는 그 대신에 특성들의 함수로서 순차 기입 스트림 ID들을 할당받을 수 있다. 그에 따라, 다양한 인자들로 인해 기입 속도들이 동일하지 않은 순차 기입 스트림들을 저장하는 저장 영역들에서, 순차 기입 스트림들이 그 영역 내에서 인접하게 저장된다는 사실이, 상이한 기입 속도들에도 불구하고, 데이터를 소거할 때가 될 때 데이터의 벌크 무효화(bulk invalidation)를 용이하게 할 수 있다는 것을 잘 알 것이다. 그 결과, 기입 증폭이 개선될 수 있다.
본 설명의 또 다른 양태에서, 식별된 순차 기입 스트림의 기입 데이터를 할당된 비휘발성 저장 영역(160a, 160b, ... 160n)(도 1)에 집합시키는 저장 영역 기입 스트림 데이터 집합 로직(320)은 식별된 순차 기입 스트림의 기입 데이터를, 공통 순차 기입 스트림 ID에 의해 식별되는 검출된 순차 기입 스트림들의 다양한 특성들의 함수로서, 저장 영역(160a, 160b, ..., 160n)(도 1) 내의 상이한 저장 구역들에서 추가로 재정렬(reorder) 및 패킹(pack)할 수 있다.
예를 들어, 도 4는 기입 데이터 집합 저장 구역(400a) 및 기입 데이터 집합 저장 구역(400b)에 의해 표현되는 바와 같은 복수의 저장 구역들을 포함하는 기입 속도 데이터 집합 저장 영역(160a)을 나타내고 있다. 기입 속도 데이터 집합 저장 영역(160a)은, 예를 들어, 식별된 순차 스트림(stream_ID0)의 기입 데이터를 수신하도록 할당될 수 있다. 이와 유사하게, 기입 속도 데이터 집합 저장 영역(160b)은 기입 데이터 집합 저장 구역(400c) 및 기입 데이터 집합 저장 구역(400d)에 의해 표현되는 바와 같은 복수의 저장 구역들을 포함한다. 기입 속도 데이터 집합 저장 영역(160b)은, 예를 들어, 식별된 순차 스트림(stream_ID1)의 기입 데이터를 수신하도록 할당될 수 있다.
일 예에서, 검출된 순차 기입 스트림들(stream-0, stream-1, stream-2, stream-3)은 동일한 순차 기입 스트림 ID(stream_ID0)를 가지며, 특정의 검출된 기입 속도들의 범위 내의 기입 데이터를 갖는다. 그에 따라, 검출된 순차 기입 스트림들(stream-0, stream-1, stream-2, stream-3)의 기입 데이터는, 예를 들어, 동일한 기입 속도 데이터 집합 저장 영역(160a)에 집합된다. 그렇지만, 저장 영역(160a)의 집합된 기입 데이터 내에서, 순차 기입 스트림 ID(stream_ID0)에 의해 식별되는 검출된 순차 기입 스트림들(stream-0, stream-1, stream-2, stream-3)의 기입 데이터는, 식별된 순차 기입 스트림의 검출된 순차 기입 스트림들의 다양한 특성들의 함수로서, 기입 속도 데이터 집합 저장 영역(160a)의 저장 구역들(400a, 400b) 중 하나 이상에서 순차적으로 재정렬되고 인접하게 패킹될 수 있다. 따라서, 이 예에서, 순차 기입 스트림 ID(stream_ID0)에 의해 식별되는 검출된 순차 기입 스트림들(stream-0, stream-1)의 기입 데이터는 기입 속도 데이터 집합 저장 영역(160a)의, 예를 들어, 저장 구역(400a)에서 재정렬되고 인접하게 패킹될 수 있다. 이와 유사하게, 순차 기입 스트림 ID(stream_ID0)에 의해 역시 식별되는 검출된 순차 기입 스트림들(stream-2, stream-3)의 기입 데이터는 기입 속도 데이터 집합 저장 영역(160a)의, 예를 들어, 저장 구역(400b)에서 재정렬되고 인접하게 패킹될 수 있다.
식별된 속도 스트림을 갖는 순차 기입 스트림 내에서 순차 기입 데이터를 순차적으로 재패킹(repack)하는 것이 가비지 컬렉션을 용이하게 한다고 생각된다. 그에 따라, 검출된 순차 기입 스트림들 중 하나 이상의 순차 기입 스트림들의 기입 속도가 부정확하게 검출되더라도, 가비지 컬렉션이 용이하게 된다고 생각된다. 예를 들어, 블록을 소거하기 전에 저장 영역 내의 블록으로부터 데이터가 판독되어야 하는 경우, 순차적 콘텐츠의 판독이 랜덤 콘텐츠와 비교하여 실질적으로 더 빠르고 더 효율적일 수 있다. 일부 실시예들에서, 순차적으로 정렬된 데이터의 이러한 판독은, 특정 응용에 따라, 4 내지 16배 더 빠를 수 있다. 예를 들어, SoC(system on a chip) 채널들에 의해 초래되는 병목현상들은 데이터를 순차적으로 정렬하는 것에 의해 달성되는 이득을 희석시킬 수 있다.
일 실시예에서, 저장 영역(160a)의, 예를 들어, 저장 구역(400a)은, 예를 들어, 논리 블록 주소지정(LBA)에 의해 나타낸 바와 같은, 예를 들어, 기입 스트림(stream-0)의 기입 데이터 목적지 주소들과 같은, 특정의 검출된 기입 스트림의 다양한 특성들의 함수로서, 또는 그 기입 데이터 스트림에 대한 기입 커맨드들이 나온 제출 큐의 함수로서, 예를 들어, 기입 스트림(stream-0)과 같은 검출된 순차 기입 스트림의 재정렬된, 인접한 기입 데이터를 저장하도록 할당될 수 있다. 여기서도, 다양한 커맨드 제출 큐들로부터의 기입 커맨드들이 블록 저장소 제어기의 공통 커맨드 큐 내에서 뒤섞이는 것에도 불구하고, 검출된 순차 기입 스트림들의 기입 데이터의 순차적 성질이, 검출된 순차 기입 스트림의 기입 데이터를 할당된 순차 스트림 저장 구역에 집합시키는 것에 의해 어느 정도 회복될 수 있다고 생각된다. 순차 기입 스트림 ID(stream_ID1)에 의해 식별되는 검출된 순차 기입 스트림들(stream-4, stream-5, stream-6, stream-7)의 기입 데이터도 이와 유사하게, 검출된 순차 기입 스트림들의 특성들의 함수로서, 기입 속도 데이터 집합 저장 영역(160b)에 대해 도시된 바와 같은 저장 구역들(400c, 400d)에서 재정렬되고 인접하게 패킹될 수 있다.
이전에 언급된 바와 같이, 기입 스트림 관리 로직(136)은 블록 저장소 제어기(110), 비휘발성 저장소(120), 하나 이상의 프로세서 노드들(104a 내지 104n) 또는 컴퓨팅 시스템(100)의 임의의 다른 컴포넌트 내에 위치될 수 있고, 데이터 기입 동작들을 개선시키기 위해 하드웨어, 소프트웨어, 펌웨어 또는 이들의 임의의 조합으로 구현될 수 있다. 그렇지만, 일부 실시예들에서, 기입 스트림 관리 로직(136)의 주 컴포넌트들을 SSD(106) 내에 배치하는 것이, 예를 들어, 주로 프로세서 노드들(104a 내지 104n)의 프로세서 노드에서 동작하는 소프트웨어와 비교하여 향상들을 제공할 수 있다는 것을 잘 알 것이다. 예를 들어, 순차 기입 스트림들과 랜덤 기입 동작들이 뒤섞이는 것을 피하기 위해 기입 커맨드들을 단일의 제출 큐에 순차적 방식으로 배열하는 호스트 소프트웨어는 SSD(106) 내의 기입 스트림 관리 로직(136)과 비교하여 입/출력 동작들에 영향을 줄 수 있다. 더욱이, 이러한 호스트 레벨 커맨드 재정렬은 다른 프로세서 노드들에 대한 상호 배타적 이벤트(mutually exclusive event)(뮤텍스(mutex)) 핸들링, 캐시 일관성(cache coherence) 및 지연 프로시저 호출(deferred procedure call)들에 악영향을 미칠 수 있다.
하나의 공유 저장소 설계에서, 블록 저장소 제어기는 공유 저장소 내에 하나 이상의 저장 공간 "밴드들"을 예비할 수 있으며, 여기서 각각의 예비된 밴드는 가상 머신과 같은 특정의 프로세서 노드에 할당된다. 따라서, 특정의 예비된 저장 밴드에 기입되는 기입 데이터는, 공유 저장소에 데이터를 기입하는 다른 가상 머신들에 의해 발행되는 기입 데이터를 제외하고, 그 예비된 저장 밴드에 할당된 특정의 가상 머신으로 제한될 수 있다.
그에 비해, 본 설명의 일 실시예에 따른 순차 기입 스트림 관리에서, 저장 밴드와 같은 특정의 저장 구역에 기입되는 기입 데이터는 단지 기입 커맨드들의 소스의 프로세서 ID(processor identity)보다는 식별된 순차 기입 스트림들의 함수로서 예비될 수 있다. 식별된 순차 기입 스트림의 기입 데이터는, 예를 들어, 순차 및 랜덤 기입 커맨드들이 뒤섞여 있는 기입 커맨드들의 스트림으로부터 또는, 예를 들어, 상이한 기입 속도들을 갖는 순차 기입 스트림들의 기입 커맨드들이 뒤섞여 있는 스트림으로부터 추출될 수 있다.
식별된 순차 스트림의 추출된 기입 데이터는, 식별된 순차 기입 스트림의 기입 커맨드들이 하나 초과의 프로세서 노드로부터 나왔을 수 있음에도 불구하고, 그 식별된 순차 스트림에 할당되는 저장 구역 또는 영역에 집합될 수 있다. 그렇지만, 일부 실시예들에서, 식별된 순차 기입 스트림의 기입 데이터를 그 검출된 순차 기입 스트림 또는 유사한 특성들을 갖는 다른 검출된 순차 기입 스트림들을 위해 예비된 저장 구역에 집합시키기 위해, 기입 커맨드들의 소스의 프로세서 ID 또는 제출 큐 ID(submission queue identity)가 또한 검출된 순차 기입 스트림들의 다른 특성들과 함께 사용될 수 있다는 것을 잘 알 것이다.
도 5는 본 설명에 따른 순차 기입 스트림 관리를 이용하는 컴퓨팅 시스템의 동작들의 일 예를 나타낸 것이다. 일 동작에서, 예를 들어, 커맨드 제출 큐들(124a, 124b ... 124n)(도 1)과 같은 복수의 상이한 커맨드 제출 큐들로부터의 기입 커맨드들이 공통 큐에 큐잉되고(블록(510), 도 5), 이는 다양한 기입 커맨드들을, 예를 들어, 블록 저장소 제어기(110)의 보류 기입 커맨드 큐(132)(도 1)와 같은 공통 큐에서 뒤섞이게 할 수 있다. 기입 커맨드들 내의 순차 기입 스트림들은, 예를 들어, 도 3의 기입 스트림 관리 로직(136)의 순차 기입 스트림 식별 로직(300)과 같은 적절한 로직에 의해 식별된다(블록(514)).
식별된 순차 기입 스트림에 대해, 그 식별된 기입 스트림의 기입 데이터가 추출되고 그 식별된 순차 기입 스트림에 할당되는 저장 구역 또는 영역에 집합된다(블록(518)). 일 실시예에서, 식별된 순차 기입 스트림의 기입 데이터는, 예를 들어, 도 3의 기입 스트림 관리 로직(136)의 전송 버퍼 파티션 기입 스트림 데이터 집합 로직(304)과 같은 로직에 의해 추출 및 집합될 수 있다. 이전에 언급된 바와 같이, 전송 버퍼 파티션 기입 스트림 데이터 집합 로직(304)은 식별된 순차 기입 스트림의 기입 데이터를 식별된 순차 기입 스트림에 할당되는 특정의 순차 스트림 전송 버퍼 파티션(150a, 150b, ... 150n)(도 1)과 같은 저장 구역에 집합시킬 수 있다.
일 실시예에서, 식별된 순차 기입 스트림의 기입 데이터는, 그 식별된 순차 기입 스트림에 할당되는 특정의 순차 스트림 전송 버퍼 파티션(150a, 150b, ... 150n) 내에, 하나 이상의 기입 데이터 페이지들로서 집합된다. 할당된 순차 스트림 전송 버퍼 파티션(150a, 150b, ... 150n)에 집합 및 버퍼링되면, 순차 기입 스트림의 집합된 기입 데이터는, 비휘발성 저장 영역(160a, 160b, ... 160n) (도 1, 도 4)과 같은, 그 식별된 순차 기입 스트림에 할당되는 비휘발성 저장소(120) 내의 특정의 저장 구역 또는 영역에 하나 이상의 기입 데이터 페이지들로서 기입된다. 기입 데이터가 전송 버퍼 저장소(140) 및 비휘발성 저장소(120)에 집합 및 버퍼링되는 입도(granularity)가, 특정 응용에 따라, 달라질 수 있다는 것을 잘 알 것이다.
본 설명의 일 양태에서, 순차 스트림 전송 버퍼 파티션들(150a, 150b, ... 150n)의 수는, 특정 응용에 따라, 전송 버퍼 저장소(140)의 크기, 입/출력 작업부하의 크기 및 다른 인자들과 같은 다양한 인자들의 함수로서 그 수가 제한될 수 있다. 따라서, 일 예에서, 예를 들어, 1 MB(메가바이트) 크기의 전송 버퍼 저장소에서, 식별된 순차 기입 스트림들로부터의 기입 데이터를 버퍼링하기 위해, 120 내지 720 KB(킬로바이트)와 같은, 일정 범위의 전송 버퍼 저장 공간이 배정(allocate)될 수 있다. 그에 따라, 순차 기입 스트림들(stream_ID0, stream_ID1, stream_ID2)과 같은, 3개의 순차 기입 스트림들이 식별되는 일 예에서, 720 KB 전송 버퍼 공간이, 3개의 식별된 순차 기입 스트림들(stream_ID0, stream_ID1, stream_ID2)의 추출 및 집합된 기입 데이터에 대해, 각각, 예를 들어, 3개의 순차 스트림 전송 버퍼 파티션들(150a, 150b, 150c)로 파티셔닝될 수 있다.
일 실시예에서, 3개의 순차 스트림 전송 버퍼 파티션들(150a, 150b, 150c)은 크기가 고정될 수 있다. 다른 실시예에서, 순차 스트림 전송 버퍼 파티션들(150a, 150b, 150c)의 크기들은 할당된 식별된 순차 기입 스트림들의 크기 및 다른 식별된 순차 기입 스트림들의 수에 따라 변할 수 있다.
버퍼 파티션(530)(도 1)으로서 표현된 나머지 전송 버퍼 공간은 이 예에서 1000 KB에서 720 KB 또는 280 KB를 뺀 것이며, 비휘발성 저장소(120)로부터의 판독 데이터를 버퍼링하거나 순차 기입 스트림의 일부로서 식별되지 않는 기입 커맨드들로부터의 기입 데이터와 같은 나머지 기입 데이터를 버퍼링하기 위한 미배정된 공간(unallocated space)일 수 있다. 예를 들어, 비휘발성 저장소(120)에 대한 랜덤한 비순차적 데이터 기입들, 가비지 컬렉션, 및 다른 데이터 재배치들과 관련하여 전송 버퍼(140)에 버퍼링될 기입 데이터가 데이터 버퍼 파티션(530)에 버퍼링될 수 있다. 특정 응용에 따라, 전송 버퍼(140) 내의 파티션들의 수 및 크기가 변할 수 있다는 것을 잘 알 것이다.
일 실시예에서, 순차 스트림 전송 버퍼 파티션(150a, 150b, 150c)에 버퍼링된 순차 기입 스트림의 기입 데이터가 비휘발성 저장소(120)(도 1)로 전송되면, 그 특정의 순차 스트림 전송 버퍼 파티션의 전송 버퍼 저장 공간이 해제되어 버퍼 파티션(530)의 미배정된 공간에 추가된다. 다른 순차 기입 스트림의 식별 시에, 미배정된 파티션(530)의 일부분이 새로운 순차 기입 스트림 파티션으로서 재배정(reallocate)되어 새로 식별된 순차 기입 스트림에 할당될 수 있다. 다른 실시예에서, 순차 스트림 전송 버퍼 파티션(150a, 150b, 150c)에 버퍼링된 순차 기입 스트림의 기입 데이터가 비휘발성 저장소(120)(도 1)로 전송되면, 그 순차 스트림 전송 버퍼 파티션의 저장 공간은 다른 식별된 순차 기입 스트림에의 할당을 기다리기 위해 예비될 수 있다.
이전에 언급된 바와 같이, 본 설명의 일 실시예에서, 한 번에 활성인 동시 순차 스트림 전송 버퍼 파티션들(150a, 150b, ... 150n)의 수는, 특정 응용에 따라, 전송 버퍼 저장소(140)의 크기, 입/출력 작업부하의 크기 및 다른 인자들과 같은 다양한 인자들의 함수로서 그 수가 제한될 수 있다. 따라서, 동시 순차 스트림 전송 버퍼 파티션들(150a, 150b, ... 150n)의 수는 한 번에, 예를 들어, 3개의 식별된 순차 기입 스트림 파티션들과 같은 최댓값으로 제한될 수 있다.
일 실시예에서, 이 예에서의 3개의 동시 순차 스트림 전송 버퍼 파티션들 각각은 하나의 활성인 식별된 순차 기입 스트림을 할당받는다. 그에 따라, 식별된 동시 활성 순차 기입 스트림들의 최대 수(이 예에서 3개의 이러한 식별된 동시 활성 순차 기입 스트림들임)를 초과하여 다른 활성 순차 기입 스트림이 식별되면, 순차 스트림 전송 버퍼 파티션이 부가의 식별된 순차 기입 스트림에 할당될 수 없을 것이다.
이러한 경우에, 본 설명의 다른 양태에 따르면, 식별된 동시 활성 순차 기입 스트림들의 최대 수를 초과하는 식별된 순차 기입 스트림의 기입 데이터의 처리가 일정 기간 동안 보류될 수 있다. 기존의 순차 스트림 전송 버퍼 파티션들 중 하나로부터의 기입 데이터의 전송의 완료 및 그 저장 공간의 해제 시에, 순차 스트림 전송 버퍼 파티션이 새로 식별된 그리고 이전에 보류된 순차 기입 스트림을 위해 배정될 수 있고, 새로 식별된 순차 기입 스트림에 대해 기입 데이터의 처리가 재개될 수 있다. 보류 기간의 만료 시에, 순차 스트림 전송 버퍼 파티션이 새로 식별된 순차 기입 스트림에 배정 및 할당되지 않으면, 그 스트림의 기입 데이터의 처리가 재개될 수 있고 처리된 기입 데이터는 미배정된 전송 버퍼 파티션(530)에 버퍼링될 수 있다. 미배정된 전송 버퍼 파티션(530)에 버퍼링된 순차 데이터가 비순차 데이터와 뒤섞이게 될 수 있다는 것을 잘 알 것이다.
일부 실시예들에서, 하나 초과의 식별된 순차 기입 스트림이 특정의 순차 스트림 전송 버퍼 파티션에 할당될 수 있다는 것을 잘 알 것이다. 그러한 경우, 순차 스트림 전송 버퍼 파티션들에 버퍼링될 수 있는 동시에 활성인 식별된 활성 순차 기입 스트림들의 최대 수가 그에 대응하여 증가될 수 있다. 이하에서 보다 상세히 설명되는 바와 같이, 공통 구역, 영역 또는 파티션에 버퍼링되거나 다른 방식으로 저장될 수 있는 순차 기입 스트림들의 유형들은, 일 실시예에서, 검출된 순차 기입 스트림들의 특성들의 함수일 수 있다.
일부 실시예들이 전송 버퍼 저장소(140)와 같은 전송 버퍼 저장소를 갖지 않을 수 있거나, 특정의 식별된 순차 기입 스트림들에 할당되는 전송 버퍼의 파티션들을 갖지 않을 수 있다는 것을 잘 알 것이다. 그에 따라, 일 실시예에서, 식별된 기입 스트림의 기입 데이터가, 예를 들어, 도 3의 기입 스트림 관리 로직(136)의 저장 영역 기입 스트림 데이터 집합 로직(320)과 같은 로직에 의해, 추출되어 곧바로 비휘발성 저장소의 저장 구역 또는 영역에 집합될 수 있다(블록(518)). 이러한 방식으로, 식별된 순차 스트림 기입 데이터를 할당된 전송 버퍼 파티션에 집합시키는 것이 우회될 수 있고, 식별된 순차 기입 스트림들에 대해 추출된 기입 데이터가, 할당된 전송 버퍼 파티션에 먼저 버퍼링되지 않고, 곧바로 앞서 논의된 바와 같은 할당된 저장 영역들(160a, 160b) 또는 저장 구역들(400a, 400b)에 집합 및 저장될 수 있다.
도 6은, 예를 들어, 도 3의 기입 스트림 관리 로직(136)의 순차 기입 스트림 식별 로직(300)의 순차 기입 스트림 검출 로직(302)의 동작들의 일 예를 나타낸 것이다. 일 동작에서, 블록 저장소 제어기(110)의 보류 기입 커맨드 큐(132)(도 1, 도 2)와 같은, 공통 커맨드 큐 내의 기입 커맨드에 대해 순차 기입 스트림 검출 처리가 개시된다(블록(710)). 이전에 언급된 바와 같이, 보류 기입 커맨드 큐(132)는 블록 저장소 제어기(110)에 의한 기입 처리를 기다리는 기입 커맨드들의 큐이고, 여기서 기입 커맨드들은 다수의 프로세서 노드들(104a, 104b ... 104n)의 다수의 제출 큐들(124a, 124, ... 124n)로부터 수신된 것이다. 그 결과, 순차 기입 스트림들의 기입 커맨드들이 다른 순차 기입 스트림들의 기입 커맨드들은 물론 랜덤한 비순차 기입 커맨드들과 뒤섞인다.
도 2에서 가장 잘 알 수 있는 바와 같이, 보류 기입 커맨드 큐(132)는 엔트리들(712a 내지 712h)에 의해 표현되는 바와 같은 큐(132)의 각각의 기입 커맨드에 대한 엔트리를 갖는다. 이 예에서, 순차 기입 스트림 검출 처리가 개시되는(블록(710)) 다음 기입 커맨드는, "헤드(head)" 화살표에 의해 표시되는 바와 같이, 큐의 헤드에 현재 있는 엔트리(712c)의 기입 커맨드이다. 특정 응용에 따라, 큐 내의 엔트리들의 수가 달라질 수 있다는 것을 잘 알 것이다.
큐(132)의 각각의 엔트리(712a 내지 712h)는, 예를 들어, 큐 엔트리 필드들(714a 내지 714d)에 의해 표현되는 바와 같은 다수의 큐 엔트리 필드들을 갖는다. 제1 큐 엔트리 필드(714a)는 블록 저장소 제어기(110)(도 1)에 의한 기입 처리를 기다리는 엔트리의 기입 커맨드 자체를 포함한다. 이 실시예에서, 큐 엔트리 필드들(714b 내지 714d)은 엔트리의 기입 커맨드와 연관된 다양한 파라미터들을 식별해준다. 이와 같이, 제2 큐 엔트리 필드(714b)는 엔트리의 커맨드가 획득된 출처인 특정의 제출 큐를, 기입 커맨드 파라미터로서, 식별해준다. 제3 큐 엔트리 필드(714c)는 엔트리의 기입 커맨드의 타겟 또는 목적지 주소를 식별해준다. 예시된 실시예에서, 기입 커맨드의 타겟 주소는 블록 저장소 제어기(110)에 의해 비휘발성 저장소(120)의 물리 주소(physical address)들로 변환되는 논리 블록 주소지정(LBA) 포맷으로 제공된다. 제4 큐 엔트리 필드(714c)는 엔트리의 기입 커맨드의 기입 동작의 기입 데이터에 의해 점유될 저장 공간의 길이를 식별해준다. 길이는 LBA 주소들의 범위, 또는 바이트들, 페이지들, 블록들 등과 같은 물리적 저장 공간의 양으로 표현될 수 있다.
예를 들어, 도 7은 순차적인 인접한 LBA 범위들(LBA0, LBA1 ... LBAn)에 의해 표현되는 비휘발성 저장소(120)의 저장 공간의 일부분(780)을 나타내며, 여기서 각각의 LBA 범위(LBA0, LBA1 ... LBAn)의 길이 또는 크기(L)는 범위마다 다르다. 이 예에서, stream_0으로 표기된 순차 기입 스트림의 기입 데이터는, 비휘발성 저장소(120)에 저장될 때, 4개의 순차적인 인접한 LBA 범위들(LBA1, LBA2, LBA3 및 LBA4)에 의해 표현되는 논리적으로 인접한 주소 공간에 기입될 것이다. 4개의 LBA 범위들(LBA1, LBA2, LBA3 및 LBA4)이 순차적이고 인접해 있기 때문에, 각각의 LBA 범위의 시작 LBA 주소(beginning LBA address)는 이전의 LBA 범위의 종료 LBA 주소(ending LBA address)로부터 연속하여 이어진다. 따라서, LBA 범위(LBA2)의 시작 LBA 주소는, 이 예에서 LBA 범위(LBA1)인 이전의 LBA 범위의 종료 LBA 주소로부터 연속하여 이어진다. 유사한 방식으로, 다른 순차 기입 스트림들(stream_1, stream_2)의 각각의 LBA 범위의 시작 LBA 주소는 특정의 순차 기입 스트림의 LBA 범위들의 시퀀스의 이전의 LBA 범위의 종료 LBA 주소로부터 연속하여 이어진다.
큐(132)의 헤드에 있는 엔트리(712c)의 기입 커맨드에 대한 순차 기입 스트림 검출 처리의 개시 시에(블록(710)), 헤드 엔트리(712c)의 큐 엔트리 필드들(714b 내지 714d)에 저장된 기입 커맨드 파라미터들이 검사되고(블록(716)), 도 2의 "이력(history)" 화살표에 의해 표시된 바와 같이, 이 예에서 엔트리(712b)인 이전의 이력 엔트리의 큐 엔트리 필드들(714b 내지 714d)에 저장된 대응하는 기입 커맨드 파라미터들과 비교된다(블록(718)). 따라서, 헤드 엔트리(712c)의 기입 커맨드가 기입 데이터를 도 7의 기입 목적지 LBA 범위(LBA2)에 기입하는 기입 커맨드이면, 그리고 이전의 이력 엔트리(712b)의 기입 커맨드가 그의 기입 데이터를 도 7의 기입 목적지 LBA 범위(LBA1)에 기입하는 기입 커맨드이면, 그 2개의 커맨드 엔트리들의 LBA 및 길이 파라미터들은 일치(match) - 즉, 헤드 엔트리(712c)의 큐 엔트리 필드들(714c, 714d)에 의해 정의되는 LBA 범위(LBA2)의 시작 LBA 주소가 이전의 이력 엔트리(712b)의 큐 엔트리 필드들(714c, 714d)에 의해 정의되는 LBA 범위(LBA1)인 이전의 LBA 범위의 종료 LBA 주소로부터 연속하여 이어진다는 것 - 를 나타낼 것이다. 따라서, 헤드 엔트리 및 이전의 이력 엔트리의 기입 커맨드들의 파라미터들은 그 2개의 엔트리들의 기입 커맨드들이 순차 기입 스트림의 기입 커맨드들일 가능성이 있다는 것을 나타낸다.
비교된 파라미터들이 순차 기입 스트림의 기입 커맨드들의 시퀀스의 2개의 기입 커맨드들에 예상되는 것들과 일치하면(블록(722)), "히트(hit)"가 도 3의 검출 이력 데이터 구조들(724)의 데이터 구조와 같은 적당한 데이터 구조에 기록된다. 블록(722)의 동작과 관련하여 기록된 "히트"가 3개의 연속적인 히트들 중 3번째 것인 것으로 결정되면(블록(726)), 순차 기입 스트림의 양성 검출(positive detection)이 반환되고(블록(730)), 검출 이력 데이터 구조들(724)(도 3)에 기록된다.
순차 기입 스트림이 검출되면, 순차 기입 스트림은 순차 기입 스트림 식별 로직(300)(도 3)에 의해 순차 스트림 ID를 할당받는다. 검출된 기입 스트림에 할당되는 특정의 순차 기입 스트림 ID는, 이하에서 보다 상세히 설명되는 바와 같은 검출된 순차 기입 스트림에 대해 검출된 기입 속도 등의, 검출된 순차 기입 스트림의 특성들과 같은, 부가의 인자들에 의존할 수 있다.
그에 부가하여, 큐의 헤드에 있는 엔트리(714c)의 기입 커맨드의 기입 처리는, 본원에서 논의되는 바와 같이, 순차 스트림 ID를 사용하여 개시될 수 있다. 큐의 헤드는 다음 엔트리(714d)로 증분될 수 있고, 큐의 이력 마커(history marker)는 다음 엔트리(714c)로 증분될 수 있다. 엔트리(714d)의 다음 기입 커맨드에 대해 순차 기입 스트림 검출 처리가 초기화될 수 있다(블록(710)).
비교된 파라미터들이 순차 기입 스트림의 기입 커맨드들의 시퀀스의 2개의 기입 커맨드들에 예상되는 것들과 일치하지 않으면(블록(722)) - 이는 헤드 엔트리(712c)의 기입 커맨드가 순차 기입 스트림의 기입 커맨드일 가능성이 없다는 것 - 즉 "히트 없음(no hit)" - 을 나타냄 -, 순차 기입 스트림의 이전의 검출을 나타내는, 파라미터 일치에 대한 3개의 연속적인 히트들이 이전에 기록되었는지를 결정하기 위해(블록(744)) 검출 이력 데이터 구조들(724)(도 3)에 기록된 검출 이력이 검사될 수 있다(블록(740)). 그러한 경우, 큐(132)의 헤드 엔트리(712c) 이후의 다음 엔트리(712d)의 기입 커맨드의 큐 엔트리 필드들(714b 내지 714d)에 저장된 기입 커맨드 파라미터들이 검사되고(블록(750)), 이 예에서 엔트리(712b)인 이전의 이력 엔트리의 큐 엔트리 필드들(714b 내지 714d)에 저장된 대응하는 기입 커맨드 파라미터들과 비교될 수 있다(블록(754)). 따라서, 다음 엔트리(712d)의 기입 커맨드가 기입 데이터를 도 7의 기입 목적지 LBA 범위(LBA2)에 기입하는 기입 커맨드이면, 그리고 이전의 이력 엔트리(712b)의 기입 커맨드가 그의 기입 데이터를 도 7의 기입 목적지 LBA 범위(LBA1)에 기입하는 기입 커맨드이면, 그 2개의 커맨드 엔트리들의 LBA 및 길이 파라미터들은 일치 - 즉, 헤드 엔트리(712c)의 큐 엔트리 필드들(714c, 714d)에 의해 정의되는 LBA 범위(LBA2)의 시작 LBA 주소가 이전의 이력 엔트리(712b)의 큐 엔트리 필드들(714c, 714d)에 의해 정의되는 LBA 범위(LBA1)인 이전의 LBA 범위의 종료 LBA 주소로부터 연속하여 이어진다는 것 - 를 나타낼 것이다. 따라서, 다음 엔트리(712d) 및 이전의 이력 엔트리(712b)의 기입 커맨드들의 파라미터들은 그 2개의 엔트리들의 기입 커맨드들이 순차 기입 스트림의 기입 커맨드들일 가능성이 있다는 것을 나타내고, 순차 기입 스트림 "히트"가 표시된다(블록(760)).
비교된 파라미터들이 순차 기입 스트림의 기입 커맨드들의 시퀀스의 2개의 기입 커맨드들에 예상되는 것들과 일치하면 - 이는 "히트"를 나타냄 -(블록(760)), 순차 기입 스트림의 양성 검출이 반환되고(블록(766)), 엔트리(714c)의 기입 커맨드에 대해 앞서 논의된 바와 같이 엔트리(714d)의 기입 커맨드에 대해 기입 처리가 개시될 수 있도록, 이 예에서 엔트리(714d)의 기입 커맨드인, 히트의 기입 커맨드가 큐의 헤드에 있도록 공통 큐(132)가 재정렬된다.
순차 기입 스트림의 양성 검출의 반환(블록(766))이 검출 이력 데이터 구조들(724)에 기록된다. 순차 기입 스트림이 검출되면, 순차 기입 스트림은 앞서 논의된 바와 같이 기입 처리를 위해 순차 기입 스트림 식별 로직(300)(도 3)에 의해 순차 스트림 ID를 할당받는다.
비교된 파라미터들이 순차 기입 스트림의 기입 커맨드들의 시퀀스의 2개의 기입 커맨드들에 예상되는 것들과 일치하지 않으면(블록(760)) - 이는 다음 엔트리(712d)의 기입 커맨드가 이력 엔트리(712b)를 갖는 순차 기입 스트림의 기입 커맨드일 가능성이 없다는 것 - 즉 "히트 없음" - 을 나타냄 -, 큐(132)의 엔트리(712d) 이후의 다음 엔트리(712e)의 기입 커맨드의 큐 엔트리 필드들(714a 내지 714d)에 저장된 기입 커맨드 파라미터들이 검사되고(블록(750)), 앞서 논의된 방식으로 이 예에서 엔트리(712b)인 이전의 이력 엔트리의 큐 엔트리 필드들(714a 내지 714d)에 저장된 대응하는 기입 커맨드 파라미터들과 비교될 수 있다(블록(754)). 부가의 히트들이 있는지 보류 기입 큐(132)를 탐색하는 것이 부가의 히트들 없이 완료되면, 큐(132)의 헤드에 있는 기입 커맨드가 기입 처리될 수 있고, 헤드 엔트리 지시자(head entry indicator)는 다음 큐 엔트리(712d)로 이동되고 이력 지시자(history indicator)는 다음 큐 엔트리(712c)로 이동될 수 있으며, 도 7의 순차 기입 스트림 검출 프로세스는 보류 기입 커맨드 큐의 모든 기입 커맨드들이 순차 기입 스트림들의 검출을 위해 검사되고 기입 처리될 때까지 반복될 수 있다.
이전에 언급된 바와 같이, 식별된 순차 기입 스트림들의 수가 식별된 동시 활성 순차 기입 스트림들의 최대 수를 초과하면, 부가의 순차 기입 스트림들의 처리가 일정 기간 동안 보류될 수 있다. 기존의 순차 스트림 전송 버퍼 파티션들 중 하나로부터의 기입 데이터의 전송의 완료 및 그 저장 공간의 해제 시에, 순차 스트림 전송 버퍼 파티션이 새로 식별된 순차 기입 스트림을 위해 배정될 수 있고, 기입 데이터의 처리가 재개될 수 있다. 보류 기간의 만료 시에, 순차 스트림 전송 버퍼 파티션이 새로 식별된 순차 기입 스트림에 배정 및 할당되지 않으면, 그 스트림의 기입 데이터의 처리가 재개될 수 있고 처리된 기입 데이터는 미배정된 전송 버퍼 파티션(530)에 버퍼링될 수 있다.
예시된 실시예에서, 순차 기입 스트림 기입 속도 검출 로직(310)(도 3)은 검출된 순차 기입 스트림의 기입 속도를 검출된 순차 기입 스트림의 기입 커맨드들 간의 시간 차이의 함수로서 결정한다. 일 예에서, 공통 보류 기입 버퍼(132)(도 1) 내의 특정의 검출된 순차 기입 스트림의 순차 기입 커맨드들의 도착 사이의 시간 차이가 결정될 수 있다. 순차 기입 스트림의 순차 기입 커맨드들 사이의 도착 시간 차이는 검출 이력 데이터 구조들(724)과 같은 데이터 구조에 기록될 수 있다. 일 실시예에서, 검출된 순차 기입 스트림의 기입 속도의 척도를 제공하기 위해, 순차 기입 스트림의 순차 기입 커맨드들 사이의 도착 시간 차이들의 평균이 결정될 수 있다. 특정 응용에 따라, 검출된 순차 기입 스트림에 대한 기입 속도를 측정하기 위해 다른 기법들이 사용될 수 있다는 것을 잘 알 것이다.
본 설명의 일 양태에서, 검출된 순차 기입 스트림의 기입 속도는 기입 증폭을, 어떤 경우에, 예를 들어, 1.0의 기입 증폭 정도로 낮게 감소시키기 위해 이용될 수 있다. 이전에 언급된 바와 같이, 많은 솔리드 스테이트 드라이브들에서, 비휘발성 저장소는 전형적으로 저장 블록(block of storage)을 한꺼번에 삭제한다. 따라서, 소거 블록, 즉 소거 중인 블록의 내용 전체가 동시에 소거된다.
블록의 모든 내용이 한꺼번에 소거될 수 있도록 호스트가 그 블록의 모든 내용을 한꺼번에 업데이트하면, 기입 증폭이 1.0 정도로 낮게 감소될 수 있다. 이와 달리, 특정의 블록의 내용 중 일부만이 업데이트되어야하고, 업데이트될 준비가 되지 않은 블록의 나머지 내용이 그럼에도 불구하고 유효한 현재 데이터이면, 블록이 소거될 수 있기 전에 업데이트되지 않는 데이터를 보존하기 위해, 나머지 업데이트되지 않는 유효한 현재 데이터는 가비지 컬렉션 프로세스에 의해 재배치된다. 데이터 재배치의 결과로서, 기입 증폭이 1.0을 초과하여 상승한다.
데이터 재배치로 인해 기입 증폭이 1.0을 초과하여 상승하는 경우에도, 데이터 재배치 프로세스 자체가 본 설명에 따른 순차 기입 스트림 관리에 의해 용이하게 될 수 있다는 것을 잘 알 것이다. 예를 들어, 재배치될 데이터가 순차적으로 그리고 큰 부분들로 재패킹(repack)된 경우, 재배치 데이터가 순차적으로 그리고, 예를 들어, 판독 동작당 다수의 4K 블록들과 같은, 큰 부분들로 배열되는 것으로 인해 데이터 판독 동작들의 효율성이 개선될 수 있다.
본 설명의 일 양태에 따르면, 검출된 순차 기입 스트림이, 검출된 순차 기입 스트림에 대해 순차 기입 스트림 기입 속도 검출 로직(310)에 의해 측정된 기입 속도의 함수로서, 순차 기입 스트림 식별 로직(300)에 의해 식별될 수 있다. 동일하거나 유사한 기입 속도들을 갖는 검출된 순차 기입 스트림들의 기입 데이터가 동일하거나 유사한 때에 업데이트되는 경향이 있다는 것을 잘 알 것이다. 따라서, 동일하거나 유사한 기입 속도들을 갖는 검출된 순차 기입 스트림들의 기입 데이터는 가비지 컬렉션 데이터 재배치를 감소시키는 것에 의해 기입 증폭을 감소시키는 것을 용이하게 하기 위해 동일한 저장 구역 또는 영역에 배치될 수 있다.
따라서, 예를 들어, 순차 기입 스트림들(stream-0 및 stream- 1)(도 4)과 같은 2개의 상이한 검출된 순차 기입 스트림들에 대한 기입 속도들이, 예를 들어, 동일하거나 유사한 것으로(예컨대, 특정의 기입 속도 범위 내에 있는 것으로) 측정되면, 2개의 상이한 순차 기입 스트림들이, 예를 들어, stream_ID0과 같은 동일한 순차 기입 스트림 식별 이름 또는 번호에 의해 식별될 수 있다. 그에 따라, 도 4의 스트림들(stream-0 및 stream-1)과 같은 2개의 상이한 검출된 순차 기입 스트림들의 기입 데이터는 순차 기입 스트림 ID(이 예에서 stream_ID0)에 할당된, 예를 들어, 동일한 기입 속도 데이터 집합 저장 영역(160a)에 배치될 수 있다. 이전에 언급된 바와 같이, 동일한 순차 기입 스트림 ID를 갖는 순차 스트림들의 기입 데이터는, 검출된 순차 기입 스트림들에 대한 제출 큐 기점 정보(submission queue origin information) 및 기입 데이터 목적지 주소지정(예를 들어, LBA들 등)에 기초하여, 저장 영역(160a)의 구역들(400a, 400b)과 같은 기입 데이터 집합 저장 구역들에서 재정렬되고 인접하게 패킹될 수 있다.
순차 기입 스트림 관리가 솔리드 스테이트 드라이브 효율성을 개선시킬 수 있는 일 예는 다수의 가상 머신들 및 다수의 커맨드 제출 큐들을 솔리드 스테이트 드라이브에 갖도록 종종 가상화되는 엔터프라이즈 시스템에서이다. 본원에서, 다양한 제출 큐들의 큐 깊이가 비교적 낮은 상황들에서도, 다수의 가상 머신들로부터의 입/출력 동작들이 혼합(mix)되는 것으로 인해 순차 기입 성능이 상당히 저하될 수 있다는 것을 잘 알 것이다. 동작들이 이와 같이 혼합되는 것은 솔리드 스테이트 드라이브에 제공되는 순차 기입 스트림들의 순차적 성질을 알기 어렵게 만들(obfuscate) 수 있다.
예를 들어, 많은 엔터프라이즈 레벨 시스템들에서 동작하는 엔터프라이즈 소프트웨어는 종종 가상 머신들을 호스팅하는 서버 또는 다른 컴퓨팅 디바이스의 예기치 않은 전원 고장의 경우에 데이터 손실 복구를 위해 어떤 형태의 저널링 기법(journaling technique)을 이용한다. 순차 기입 스트림들에 대한 이러한 데이터 손실 복구 프로세스들은 버퍼가 채워질 때까지 보존될 순차 기입 데이터가 순환 버퍼에 순차적으로 기입되는 순환 버퍼 기법을 종종 이용한다. 버퍼가 버퍼의 끝까지 채워지면, 기입 동작들은 버퍼의 시작부분(beginning)으로 루프백한다. 그 결과, 보존될 부가의 기입 데이터는 순환 버퍼의 시작부분에 있는 가장 오래된 순차 기입 데이터를 순차적으로 덮어쓰기한다. 이러한 방식으로, 예기치 않은 전원 고장의 경우에 최근의(freshest) 순차 기입 데이터가 보존된다. 한 번에 보존되는 순차 기입 데이터의 양은 순환 버퍼의 크기의 함수이다.
그렇지만, 다양한 가상 머신들로부터의 기입 커맨드들이 뒤섞이는 것으로 인해, 다양한 순환 버퍼들의 기입 데이터가 솔리드 스테이트 저장소에서 서로 그리고 랜덤한 비순차 기입 데이터와 뒤섞일 수 있다. 따라서, 솔리드 스테이트 저장 블록의 내용이 동시에 업데이트되지 않을 수 있고, 그로써 가비지 컬렉션 데이터 재배치 및 기입 증폭을 증가시킬 수 있다. 결과적으로, 솔리드 스테이트 드라이브의 성능이 저하될 수 있다.
본 설명의 순차 기입 스트림 관리의 일 실시예에 따르면, 순차 기입 스트림들에 대한 보다 빠른 저장 응답이 제공될 수 있는 반면, 랜덤 기입들은 기입 증폭으로 인해 보다 낮은 성능을 겪을 수 있다. 많은 호스트 적용분야들에서, 호스트는 데이터 복구 저널 업데이트(data recovery journal update)들을 보다 높은 우선 순위의 기입 동작으로서 취급하며, 데이터 복구 저널 업데이트가 서비스되지 않으면(또는 낮은 대역폭으로 서비스되면), 호스트는 비-저널 기입 동작(non-journal write operation)들도 차단시킬 수 있다.
본 설명의 일 양태에서, 각각의 순환 버퍼 유형 저장 구역에서의 보다 오래된 기입 데이터를 덮어쓰기 위해 기입 스트림들이 루프백하는 레이트가 동일한 한, 저장소 내의 순환 유형 버퍼들에의 2개의 상이한 순차 기입 스트림들이 그다지 성능 저하 없이 뒤섞일 수 있다는 것을 잘 알 것이다. 일 실시예에서, 순차 스트림의 기입 속도는 순환 유형 버퍼에서 데이터가 업데이트되는 루프백 레이트(loopback rate)이다. 그 결과, 동일하거나 유사한 기입 속도들을 갖는 2개의 상이한 순차 기입 스트림들의 기입 데이터가 뒤섞이는 것에도 불구하고, 기입 증폭이 1.0 정도로 낮게 감소될 수 있다.
예를 들어, 제1 순차 기입 스트림(stream_0)(도 7)은 사실상, 예를 들어, 10 MB와 같은, 제1 크기를 갖는 순환 버퍼로서 시각화(visualize)될 수 있다. 이와 유사하게, 제2 순차 기입 스트림(stream_0)은 사실상, 예를 들어, 20 MB와 같은, 제2의 상이한 크기를 갖는 순환 버퍼로서 시각화될 수 있다. 본 설명에 따르면, 2개의 상이한 순차 기입 스트림들의 기입 데이터가 서로 혼합되어, 예를 들어, 저장 영역(160a)과 같은 동일한 저장 밴드에 배치될 수 있고, 2개의 순차 기입 스트림들의 루프백 레이트들, 즉 기입 속도들이 동일하면, 예를 들어, 1.0과 같은 낮은 기입 증폭을 유지할 수 있다.
그에 따라, 2개의 상이한 검출된 순차 기입 스트림들은, 예를 들어, stream_ID0과 같은 단일의 식별된 순차 기입 스트림으로서 식별될 수 있고, 2개의 검출된 순차 기입 스트림들이 동일하거나 유사한 루프백 레이트들의 형태로 동일하거나 유사한 기입 속도들을 갖기 때문에, 예를 들어, 1.0과 같은 낮은 기입 증폭을 유지할 수 있다. 순차 기입 스트림들(stream_0 및 stream_1)에 대한 저장 구역(400a)은, 그들의 루프백 레이트들이 동일하기 때문에, 그 각자의 크기들 또는 기입 레이트들에 비례하여 1:2(10:20 MB)의 비율로 혼합된, 순차 기입 스트림들(stream_0 및 stream_1)의 혼합된 기입 데이터로 구성될 것이다. 그에 따라, 순차 기입 스트림들(stream_0 및 stream_1)을 발행하는 호스트 소프트웨어가 한바퀴 루프백할 때, 저장 구역(400a)이 채워지면, 가비지 컬렉션 프로세스는 저장 구역(400a) 내에서 완전히 무효화된 저장 블록들을 찾아낼 것이고, 그 결과 이 스트림들에 대한 기입 증폭이 낮게 된다.
순차 기입 스트림 기입 속도 검출 로직(310)에 의한 기입 속도 검출의 정확도를 개선시키기 위해, 솔리드 스테이트 드라이브(106)에 대한 프로세서 노드(104a 내지 104n) 내의 호스트 소프트웨어의 드라이버 소프트웨어는 솔리드 스테이트 드라이브(106)로 보내지는 순차 기입 스트림들을 특징지우는 데이터를 제공할 수 있다. 예를 들어, 호스트의 솔리드 스테이트 드라이브 드라이버 소프트웨어는 각각의 검출된 순차 기입 스트림에 대한 기입 속도 결정을 용이하게 하기 위해 각각의 순차 기입 스트림의 크기를 식별해주는 데이터를 제공할 수 있다. 순차 기입 스트림 크기 데이터 및 다른 순차 기입 스트림 특성화 데이터는, 예를 들어, 적절한 기입 커맨드들을 사용하여 드라이버 소프트웨어에 의해 블록 저장소 제어기(110)로 전달될 수 있다. 순차 기입 스트림 특성화 데이터가, 특정 응용에 따라, 다른 기법들 및 포맷들을 사용하여 호스트로부터 솔리드 스테이트 드라이브(106)로 전달될 수 있다는 것을 잘 알 것이다.
이전에 언급된 바와 같이, 기입 증폭을 감소시키기 위해, 일 실시예에서, 상이한 기입 속도들을 갖는 식별된 순차 기입 스트림들의 기입 데이터는, 앞서 논의된 바와 같이, 예를 들어, 상이한 전송 버퍼 파티션들, 또는 비휘발성 저장소의 상이한 저장 구역들 또는 영역들일 수 있는 개별 저장 밴드들에 기입될 수 있다. 다수의 식별된 순차 기입 스트림들을 수용하기 위해 다수의 개방 밴드(open band)들을 갖는 것이, 기입 데이터 업데이트의 완료 이전에 예기치 않은 전원 고장이 있는 경우에, 데이터를 복구하기 위한 데이터 손실 복구 기법들을 더 복잡하게 만들 수 있다는 것을 잘 알 것이다. 일 실시예에서, 이러한 데이터 손실 복구는 기입 데이터가 각각의 식별된 순차 기입 스트림에 대한 할당된 저장 밴드에 안전하게 집합되고 저장되기 전에 다양한 식별된 순차 기입 스트림들의 추출 중인 기입 데이터를 기록하기 위해 적당한 저널을 제공하는 것에 의해 용이하게 될 수 있다. 예를 들어, 데이터 손실 복구를 위한 하나의 공지된 기법은 저장소에서의 업데이트 프로세스를 완료하기 전에 전원이 예기치 않게 상실되는 경우에 기입 업데이트 데이터를 기록하는 "간접 업데이트 저널(indirection update journal)"의 사용을 포함한다. 이러한 간접 업데이트 저널들은 전형적으로 적당한 간접 업데이트 저널을 위해 GB당 1MB의 비휘발성 저장소를 추가로 이용했다.
이상으로부터, 본 설명의 일 양태에서의 순차 기입 스트림 관리가, 기입 커맨드들이 순차적으로 큐잉되지 않거나 다른 방식으로 처리되지 않더라도, 예를 들어, 전송 버퍼와 같은 저장 구역의 내용을 순차적이도록 정렬할 수 있다는 것을 알 수 있다. 일부 실시예들에서, 이것은, 예를 들어, 비휘발성 저장소 내의 데이터를 원래의 직접 메모리 액세스(Direct Memory Access)(DMA) 시퀀스와 상이한 순서로 있도록 재정렬시킬 수 있다. 이러한 재정렬이, 특히, 예를 들어, 0.5KB 입도의 데이터 기입들과 같은 보다 큰 호스트 데이터 기입들에 대해, 데이터 손실 복구 기법들을 더 복잡하게 만들 수 있다는 것을 잘 알 것이다. 이전에 언급된 바와 같이, 이러한 데이터 손실 복구는 기입 데이터가 각각의 식별된 순차 기입 스트림에 대한 할당된 저장 밴드에 안전하게 집합되고 저장되기 전에 다양한 식별된 순차 기입 스트림들의 추출 중인 기입 데이터를 기록하기 위해 적당한 저널을 제공하는 것에 의해 용이하게 될 수 있다.
게다가, 순차 기입 스트림 검출 및 기입 속도 검출이 검출 동작들을 수용하기 위해 부가의 처리 및 메모리 자원들을 이용할 수 있다는 것을 잘 알 것이다. 그렇지만, 이러한 감소들이 저장 효율성의 개선 및 호스트 레벨 입/출력 병목현상들을 감소 또는 회피하는 것에 의해 상쇄될 것으로 생각된다.
도 8은 본 설명에 따른 순차 기입 스트림 관리를 이용하는 컴퓨팅 시스템(800)의 다른 예의 선택된 양태들을 나타내는 상위 레벨 블록도이다. 시스템(800)은, 메모리 또는 저장 디바이스를 포함할 수 있는, 다수의 전자 및/ 컴퓨팅 디바이스들 중 임의의 것을 나타낼 수 있다. 이러한 전자 및/또는 컴퓨팅 디바이스들은 메인프레임, 서버, 개인용 컴퓨터, 워크스테이션, 전화 디바이스, 네트워크 기기, 가상화 디바이스, 저장소 제어기, 휴대용 또는 모바일 디바이스(예컨대, 랩톱, 넷북, 태블릿 컴퓨터, PDA(personal digital assistant), 휴대용 미디어 플레이어, 휴대용 게임 디바이스, 디지털 카메라, 휴대폰, 스마트폰, 피처폰 등) 또는 컴포넌트(예컨대, 시스템 온 칩, 프로세서, 브리지, 블록 저장소 제어기, 저장소 등)와 같은 컴퓨팅 디바이스들을 포함할 수 있다. 대안의 실시예들에서, 시스템(800)은 보다 많은 요소들, 보다 적은 요소들, 및/또는 상이한 요소들을 포함할 수 있다. 더욱이, 비록 시스템(800)이 개별 요소들을 포함하는 것으로 도시되어 있을 수 있지만, 이러한 요소들이, SoC(system on a chip)들과 같은, 하나의 플랫폼 상에 통합될 수 있다는 것을 잘 알 것이다. 예시적인 예에서, 시스템(800)은 마이크로프로세서(820), 블록 저장소 제어기(830), 메모리 또는 저장소(840) 그리고, 예를 들어, 비디오 제어기, 입력 디바이스, 출력 디바이스, 저장소, 네트워크 어댑터 등을 포함할 수 있는 주변 컴포넌트들(850)을 포함한다. 마이크로프로세서(820)는 처리 로직(827)과 명령어들 및 데이터를 저장하기 위한 메모리 계층구조의 일부일 수 있는 캐시(825)를 포함하고, 시스템 메모리 또는 저장소(840)도 메모리 또는 저장소 계층구조의 일부일 수 있다. 마이크로프로세서(820)와 메모리 또는 저장소(840) 사이의 통신은 블록 저장소 제어기(또는 칩셋)(830)에 의해 용이하게 될 수 있고, 블록 저장소 제어기(또는 칩셋)(830)는 또한 주변 컴포넌트들(850)과 통신하는 것을 용이하게 할 수 있다.
주변 컴포넌트들(850)의 저장소는, 예를 들어, 솔리드 스테이트 드라이브, 자기 디스크 드라이브, 광학 디스크 드라이브, 테이프 드라이브, 플래시 메모리 등과 같은 비휘발성 저장소일 수 있다. 저장소는 내부 저장 디바이스 또는 접속된 또는 네트워크 액세스가능 저장소를 포함할 수 있다. 마이크로프로세서(820)는 메모리 또는 저장소(840)에 데이터를 기입하고 그로부터 데이터를 판독하도록 구성된다. 저장소 내의 프로그램들은 메모리에 로딩되고 프로세서에 의해 실행된다. 네트워크 제어기 또는 어댑터는, 이더넷, FC-AL(Fiber Channel Arbitrated Loop) 등과 같은 네트워크와의 통신을 가능하게 한다. 게다가, 이 아키텍처는, 특정 실시예들에서, 정보를 디스플레이 모니터 상에 렌더링하도록 구성된 비디오 제어기를 포함할 수 있고, 여기서 비디오 제어기는 비디오 카드 상에 구현되거나 마더보드 또는 다른 기판 상에 탑재된 집적 회로 컴포넌트들 상에 통합될 수 있다. 입력 디바이스는 사용자 입력을 프로세서에 제공하기 위해 사용되고, 키보드, 마우스, 펜-스타일러스, 마이크로폰, 터치 감응 디스플레이 화면, 입력 핀, 소켓, 또는 본 기술분야에 공지된 임의의 다른 활성화 또는 입력 메커니즘을 포함할 수 있다. 출력 디바이스는 프로세서, 또는 디스플레이 모니터, 프린터, 저장소, 출력 핀, 소켓 등과 같은, 다른 컴포넌트로부터 전송된 정보를 렌더링할 수 있다. 네트워크 어댑터는, PCI(Peripheral Component Interconnect) 카드, PCI-익스프레스, 또는 어떤 다른 I/O 카드와 같은, 네트워크 카드 상에, 또는 마더보드 또는 다른 기판 상에 탑재된 집적 회로 컴포넌트들 상에 구현될 수 있다.
특정 응용에 따라, 디바이스(800)의 컴포넌트들 중 하나 이상이 생략될 수 있다. 예를 들어, 네트워크 라우터는, 예를 들어, 비디오 제어기를 갖지 않을 수 있다. 메모리 디바이스들(825, 840) 및 다른 디바이스들(800, 830, 850) 중 임의의 하나 이상은 본 설명에 따른 순차 기입 스트림 관리를 포함할 수 있다.
이하의 예들은 추가적인 실시예들에 관한 것이다.
예 1은 복수의 프로세서 노드들의 복수의 커맨드 제출 큐(command submission queue)들과 함께 사용하기 위한 장치이고, 본 장치는:
복수의 저장 공간 영역들을 갖는 비휘발성 저장소 및 공통 커맨드 큐를 갖는 저장소 제어기를 포함하는 솔리드 스테이트 저장소 드라이브(solid-state storage drive)를 포함하고, 상기 제어기는:
복수의 커맨드 제출 큐들로부터의 복수의 기입 커맨드(write command)들을 공통 커맨드 큐에 큐잉(queue)하고;
공통 커맨드 큐에 큐잉된 기입 커맨드들을 실행하도록 구성되고;
여기서 제어기는 기입 커맨드들에서 제1 및 제2 순차 기입 스트림들을 검출하도록 구성된 순차 기입 스트림 검출 로직(sequential write stream detection logic)을 포함하는 순차 기입 스트림 식별 로직(sequential write stream identification logic)을 가지며, 여기서 순차 기입 스트림 식별 로직은 검출된 제1 및 제2 순차 기입 스트림들을, 제1 및 제2 검출된 순차 기입 스트림들의 특성들의 함수로서, 각각, 제1 및 제2 식별된 순차 기입 스트림들로서 식별하도록 구성되고, 여기서 제어기는, 제1 식별된 순차 기입 스트림의 기입 데이터를 솔리드 스테이트 저장소의 제1 순차 기입 스트림 저장 영역에 집합시키는 것, 및 제2 식별된 순차 기입 스트림의 기입 데이터를 솔리드 스테이트 저장소의 제2 순차 기입 스트림 저장 영역에 집합시키는 것을 포함하여, 실행 중인 커맨드들의 기입 데이터를 기입 스트림 식별(write stream identifying)의 함수로서 솔리드 스테이트 저장소의 상이한 순차 기입 스트림 영역들에 기입하도록 구성된 순차 기입 스트림 집합 로직(sequential write stream aggregation logic)을 추가로 갖는다.
예 2에서, (본 예를 제외한) 예 1 내지 예 7의 발명 요지는 임의로 솔리드 스테이트 저장소 드라이브는 순차 기입 스트림 버퍼 파티션(sequential write stream buffer partition)들을 갖는 전송 버퍼 저장소(transfer buffer storage)를 추가로 포함하고, 제어기는, 제1 식별된 순차 기입 스트림의 기입 데이터를 전송 버퍼 저장소의 제1 순차 기입 스트림 버퍼 파티션에 집합시키는 것, 및 제2 식별된 순차 기입 스트림의 기입 데이터를 전송 버퍼 저장소의 제2 순차 기입 스트림 버퍼 파티션에 집합시키는 것을 포함하여, 실행 중인 커맨드들의 기입 데이터를 순차 기입 스트림 식별 로직에 의한 기입 스트림 식별의 함수로서 전송 버퍼 저장소의 상이한 순차 기입 스트림 버퍼 파티션들에 기입하도록 구성된 전송 버퍼 파티션 기입 스트림 데이터 집합 로직(transfer buffer partition write stream data aggregation logic)을 추가로 갖는 것을 포함할 수 있다.
예 3에서, (본 예를 제외한) 예 1 내지 예 7의 발명 요지는 임의로 순차 기입 스트림 검출 로직은 기입 커맨드에서 제3 순차 기입 스트림을 검출하도록 추가로 구성되고, 순차 기입 스트림 식별 로직은 검출된 제3 순차 기입 스트림을 제1 및 제3 검출된 순차 기입 스트림들의 특성들의 함수로서 제1 식별된 순차 기입 스트림들로서 식별하도록 추가로 구성되며, 저장소 제어기는 실행 중인 커맨드들의 기입 데이터를 기입 스트림 식별의 함수로서 솔리드 스테이트 저장소의 상이한 영역들에 기입하는 것이 제3 검출된 순차 기입 스트림의 기입 데이터를 솔리드 스테이트 저장소의 제1 영역 구역(region area)에 집합시키는 것을 포함하도록 추가로 구성되는 것을 포함할 수 있다.
예 4에서, (본 예를 제외한) 예 1 내지 예 7의 발명 요지는 임의로 순차 기입 스트림 식별 로직은 각각의 검출된 순차 기입 스트림에 대한 기입 속도 특성을 결정하도록 구성된 순차 기입 스트림 기입 속도 검출 로직(sequential write stream write velocity detection logic)을 추가로 포함하고, 순차 기입 스트림 식별 로직은 검출된 제1 및 제3 순차 기입 스트림들을 제1 식별된 순차 기입 스트림으로서 식별하는 것 및 검출된 제2 순차 기입 스트림을 제2 식별된 순차 기입 스트림으로서 식별하는 것이 검출된 제1 및 제3 순차 기입 스트림들이 제1 범위 내의 검출된 기입 속도 특성들을 갖는 것 및 검출된 제2 순차 기입 스트림이 제2 범위 내의 검출된 기입 속도 특성들을 갖는 것의 함수이도록 추가로 구성되는 것을 포함할 수 있다.
예 5에서, (본 예를 제외한) 예 1 내지 예 7의 발명 요지는 임의로 순차 기입 스트림 검출 로직은 기입 커맨드들에서 제1 및 제2 순차 기입 스트림들을 검출하는 것이 공통 커맨드 큐 내의 기입 커맨드들의 파라미터들을 검사하는 것 - 파라미터들은 기입 데이터 목적지 파라미터를 포함함 -, 및 2개의 기입 커맨드들의 기입 데이터 목적지 파라미터들이 순차 기입 스트림의 기입 커맨드들의 시퀀스에서의 2개의 기입 커맨드들의 기입 데이터 목적지 파라미터들과 일치하는지를 결정하는 것을 포함하도록 추가로 구성되는 것을 포함할 수 있다.
예 6에서, (본 예를 제외한) 예 1 내지 예 7의 발명 요지는 임의로 파라미터들은 공통 커맨드 큐의 각각의 기입 커맨드에 대한 커맨드 제출 큐 기점 파라미터(command submission queue origin parameter)를 포함하는 것을 포함할 수 있다.
예 7에서, (본 예를 제외한) 예 1 내지 예 7의 발명 요지는 임의로 순차 기입 스트림 집합 로직은 제1 식별된 순차 기입 스트림의 기입 데이터를 솔리드 스테이트 저장소의 제1 영역에 집합시키는 것이 제1 순차 기입 스트림의 기입 목적지 주소 특성을 포함하는 제1 식별된 순차 기입 스트림의 특성들의 함수로서 제1 영역 내에서 인접하게 제1 식별된 순차 기입 스트림의 기입 데이터를 순차적으로 재정렬하고 패킹하는 것을 포함하도록 추가로 구성되는 것을 포함할 수 있다.
예 8은 디스플레이와 함께 사용하기 위한 시스템이고, 본 시스템은:
복수의 커맨드 제출 큐들을 갖는 복수의 프로세서 노드들;
복수의 저장 공간 영역들을 갖는 비휘발성 저장소 및 공통 커맨드 큐를 갖는 저장소 제어기를 포함하는 솔리드 스테이트 저장소 드라이브; 및
저장소에 저장된 데이터를 표현하는 데이터를 디스플레이하는 비디오 제어기를 포함하고;
여기서 저장소 제어기는:
복수의 커맨드 제출 큐들로부터의 복수의 기입 커맨드들을 공통 커맨드 큐에 큐잉하고;
공통 커맨드 큐에 큐잉된 기입 커맨드들을 실행하도록 구성되고;
여기서 저장소 제어기는 기입 커맨드들에서 제1 및 제2 순차 기입 스트림들을 검출하도록 구성된 순차 기입 스트림 검출 로직을 포함하는 순차 기입 스트림 식별 로직을 가지며, 여기서 순차 기입 스트림 식별 로직은 검출된 제1 및 제2 순차 기입 스트림들을, 제1 및 제2 검출된 순차 기입 스트림들의 특성들의 함수로서, 각각, 제1 및 제2 식별된 순차 기입 스트림들로서 식별하도록 구성되고, 여기서 저장소 제어기는, 제1 식별된 순차 기입 스트림의 기입 데이터를 솔리드 스테이트 저장소의 제1 순차 기입 스트림 저장 영역에 집합시키는 것, 및 제2 식별된 순차 기입 스트림의 기입 데이터를 솔리드 스테이트 저장소의 제2 순차 기입 스트림 저장 영역에 집합시키는 것을 포함하여, 실행 중인 커맨드들의 기입 데이터를 기입 스트림 식별의 함수로서 솔리드 스테이트 저장소의 상이한 순차 기입 스트림 영역들에 기입하도록 구성된 순차 기입 스트림 집합 로직을 추가로 갖는다.
예 9에서, (본 예를 제외한) 예 8 내지 예 14의 발명 요지는 임의로 솔리드 스테이트 저장소 드라이브는 순차 기입 스트림 버퍼 파티션들을 갖는 전송 버퍼 저장소를 추가로 포함하고, 저장소 제어기는, 제1 식별된 순차 기입 스트림의 기입 데이터를 전송 버퍼 저장소의 제1 순차 기입 스트림 버퍼 파티션에 집합시키는 것, 및 제2 식별된 순차 기입 스트림의 기입 데이터를 전송 버퍼 저장소의 제2 순차 기입 스트림 버퍼 파티션에 집합시키는 것을 포함하여, 실행 중인 커맨드들의 기입 데이터를 순차 기입 스트림 식별 로직에 의한 기입 스트림 식별의 함수로서 전송 버퍼 저장소의 상이한 순차 기입 스트림 버퍼 파티션들에 기입하도록 구성된 전송 버퍼 파티션 기입 스트림 데이터 집합 로직을 추가로 갖는 것을 포함할 수 있다.
예 10에서, (본 예를 제외한) 예 8 내지 예 14의 발명 요지는 임의로 순차 기입 스트림 검출 로직은 기입 커맨드에서 제3 순차 기입 스트림을 검출하도록 추가로 구성되고, 순차 기입 스트림 식별 로직은 검출된 제3 순차 기입 스트림을 제1 및 제3 검출된 순차 기입 스트림들의 특성들의 함수로서 제1 식별된 순차 기입 스트림들로서 식별하도록 추가로 구성되며, 메모리 저장소 제어기는 실행 중인 커맨드들의 기입 데이터를 기입 스트림 식별의 함수로서 솔리드 스테이트 저장소의 상이한 영역들에 기입하는 것이 제3 검출된 순차 기입 스트림의 기입 데이터를 솔리드 스테이트 저장소의 제1 영역 구역에 집합시키는 것을 포함하도록 추가로 구성되는 것을 포함할 수 있다.
예 11에서, (본 예를 제외한) 예 8 내지 예 14의 발명 요지는 임의로 순차 기입 스트림 식별 로직은 각각의 검출된 순차 기입 스트림에 대한 기입 속도 특성을 결정하도록 구성된 순차 기입 스트림 기입 속도 검출 로직을 추가로 포함하고, 순차 기입 스트림 식별 로직은 검출된 제1 및 제3 순차 기입 스트림들을 제1 식별된 순차 기입 스트림으로서 식별하는 것 및 검출된 제2 순차 기입 스트림을 제2 식별된 순차 기입 스트림으로서 식별하는 것이 검출된 제1 및 제3 순차 기입 스트림들이 제1 범위 내의 검출된 기입 속도 특성들을 갖는 것 및 검출된 제2 순차 기입 스트림이 제2 범위 내의 검출된 기입 속도 특성들을 갖는 것의 함수이도록 추가로 구성되는 것을 포함할 수 있다.
예 12에서, (본 예를 제외한) 예 8 내지 예 14의 발명 요지는 임의로 순차 기입 스트림 검출 로직은 기입 커맨드들에서 제1 및 제2 순차 기입 스트림들을 검출하는 것이 공통 커맨드 큐 내의 기입 커맨드들의 파라미터들을 검사하는 것 - 파라미터들은 기입 데이터 목적지 파라미터를 포함함 -, 및 2개의 기입 커맨드들의 기입 데이터 목적지 파라미터들이 순차 기입 스트림의 기입 커맨드들의 시퀀스에서의 2개의 기입 커맨드들의 기입 데이터 목적지 파라미터들과 일치하는지를 결정하는 것을 포함하도록 추가로 구성되는 것을 포함할 수 있다.
예 13에서, (본 예를 제외한) 예 8 내지 예 14의 발명 요지는 임의로 파라미터들은 공통 커맨드 큐의 각각의 기입 커맨드에 대한 커맨드 제출 큐 기점 파라미터를 포함하는 것을 포함할 수 있다.
예 14에서, (본 예를 제외한) 예 8 내지 예 14의 발명 요지는 임의로 순차 기입 스트림 집합 로직은 제1 식별된 순차 기입 스트림의 기입 데이터를 솔리드 스테이트 저장소의 제1 영역에 집합시키는 것이 제1 순차 기입 스트림의 기입 목적지 주소 특성을 포함하는 제1 식별된 순차 기입 스트림의 특성들의 함수로서 제1 영역 내에서 인접하게 제1 식별된 순차 기입 스트림의 기입 데이터를 순차적으로 재정렬하고 패킹하는 것을 포함하도록 추가로 구성되는 것을 포함할 수 있다.
예 15는 방법이고, 본 방법은:
복수의 커맨드 제출 큐들로부터의 복수의 기입 커맨드들을 공통 커맨드 큐에 큐잉하는 단계;
공통 커맨드 큐에 큐잉된 기입 커맨드들을 실행하는 단계;
기입 커맨드들에서 제1 및 제2 순차 기입 스트림들을 검출하는 단계;
검출된 제1 및 제2 순차 기입 스트림들을, 제1 및 제2 검출된 순차 기입 스트림들의 특성들의 함수로서, 각각, 제1 및 제2 식별된 순차 기입 스트림들로서 식별하는 단계; 및
실행 중인 커맨드들의 기입 데이터를 기입 스트림 식별의 함수로서 솔리드 스테이트 저장소의 상이한 순차 기입 스트림 영역들에 기입하는 단계를 포함하고, 상기 기입 데이터를 기입하는 단계는:
제1 식별된 순차 기입 스트림의 기입 데이터를 솔리드 스테이트 저장소의 제1 순차 기입 스트림 저장 영역에 집합시키는 단계; 및
제2 식별된 순차 기입 스트림의 기입 데이터를 솔리드 스테이트 저장소의 제2 순차 기입 스트림 저장 영역에 집합시키는 단계를 포함한다.
예 16에서, (본 예를 제외한) 예 15 내지 예 21의 발명 요지는 임의로 실행 중인 커맨드들의 기입 데이터를 기입 스트림 식별의 함수로서 전송 버퍼 저장소의 상이한 순차 기입 스트림 버퍼 파티션들에 기입하는 단계를 추가로 포함하고, 상기 기입 데이터를 전송 버퍼 저장소에 기입하는 단계는:
제1 식별된 순차 기입 스트림의 기입 데이터를 전송 버퍼 저장소의 제1 순차 기입 스트림 버퍼 파티션에 집합시키는 단계; 및
제2 식별된 순차 기입 스트림의 기입 데이터를 전송 버퍼 저장소의 제2 순차 기입 스트림 버퍼 파티션에 집합시키는 단계를 포함하는 것을 포함할 수 있다.
예 17에서, (본 예를 제외한) 예 15 내지 예 21의 발명 요지는 임의로:
기입 커맨드들에서 제3 순차 기입 스트림을 검출하는 단계;
검출된 제3 순차 기입 스트림을, 제1 및 제3 검출된 순차 기입 스트림들의 특성들의 함수로서 제1 식별된 순차 기입 스트림들로서 식별하는 단계를 포함할 수 있고;
실행 중인 커맨드들의 기입 데이터를 기입 스트림 식별의 함수로서 솔리드 스테이트 저장소의 상이한 영역들에 기입하는 단계는:
제3 검출된 순차 기입 스트림의 기입 데이터를 솔리드 스테이트 저장소의 제1 영역 구역에 집합시키는 단계를 추가로 포함한다.
예 18에서, (본 예를 제외한) 예 15 내지 예 21의 발명 요지는 임의로:
각각의 검출된 순차 기입 스트림에 대한 기입 속도 특성을 결정하는 단계를 포함할 수 있고;
여기서 검출된 제1 및 제3 순차 기입 스트림들을 제1 식별된 순차 기입 스트림으로서 식별하는 것 및 검출된 제2 순차 기입 스트림을 제2 식별된 순차 기입 스트림으로서 식별하는 것은 검출된 제1 및 제3 순차 기입 스트림들이 제1 범위 내의 검출된 기입 속도 특성들을 갖는 것 및 검출된 제2 순차 기입 스트림이 제2 범위 내의 검출된 기입 속도 특성들을 갖는 것의 함수이다.
예 19에서, (본 예를 제외한) 예 15 내지 예 21의 발명 요지는 임의로 기입 커맨드들에서 제1 및 제2 순차 기입 스트림들을 검출하는 것은 공통 커맨드 큐 내의 기입 커맨드들의 파라미터들을 검사하는 것 - 파라미터들은 기입 데이터 목적지 파라미터를 포함함 -, 및 2개의 기입 커맨드들의 기입 데이터 목적지 파라미터들이 순차 기입 스트림의 기입 커맨드들의 시퀀스에서의 2개의 기입 커맨드들의 기입 데이터 목적지 파라미터들과 일치하는지를 결정하는 것을 포함하는 것을 포함할 수 있다.
예 20에서, (본 예를 제외한) 예 15 내지 예 21의 발명 요지는 임의로 파라미터들은 공통 커맨드 큐의 각각의 기입 커맨드에 대한 커맨드 제출 큐 기점 파라미터를 포함하는 것을 포함할 수 있다.
예 21에서, (본 예를 제외한) 예 15 내지 예 21의 발명 요지는 임의로 제1 식별된 순차 기입 스트림의 기입 데이터를 솔리드 스테이트 저장소의 제1 영역에 집합시키는 것은 제1 순차 기입 스트림의 기입 목적지 주소 특성을 포함하는 제1 식별된 순차 기입 스트림의 특성들의 함수로서 제1 영역 내에서 인접하게 제1 식별된 순차 기입 스트림의 기입 데이터를 순차적으로 재정렬하고 패킹하는 것을 포함하는 것을 포함할 수 있다.
예 22에서, 예 1 내지 예 7의 발명 요지는 임의로 디스플레이와 함께 사용하기 위한 시스템을 포함할 수 있고, 여기서 본 시스템은:
상기 복수의 커맨드 제출 큐들을 갖는 복수의 프로세서 노드들;
상기 솔리드 스테이트 저장소 드라이브; 및
저장소에 저장된 데이터를 표현하는 데이터를 디스플레이하는 비디오 제어기를 포함한다.
예 23은 임의의 선행 예에서 청구된 방법을 수행하는 수단을 포함하는 장치이다.
기술된 동작들은 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 임의의 조합을 생성하기 위해 표준 프로그래밍 및/또는 엔지니어링 기법들을 사용하는 방법, 장치 또는 컴퓨터 프로그램 제품으로서 구현될 수 있다. 기술된 동작들은 "컴퓨터 판독가능 저장 매체"에 유지되는 컴퓨터 프로그램 코드로서 구현될 수 있고, 여기서 프로세서는 컴퓨터 판독가능 저장 매체로부터 코드를 판독하여 실행할 수 있다. 컴퓨터 판독가능 저장 매체는 전자 회로부, 저장 재료, 무기 재료, 유기 재료, 생물학적 재료, 케이스, 하우징, 코팅, 및 하드웨어 중 적어도 하나를 포함한다. 컴퓨터 판독가능 저장 매체는 자기 저장 매체(예컨대, 하드 디스크 드라이브, 플로피 디스크, 테이프 등), 광학 저장소(CD-ROM, DVD, 광학 디스크 등), 휘발성 및 비휘발성 메모리 디바이스(예컨대, EEPROM, ROM, PROM, RAM, DRAM, SRAM, 플래시 메모리, 펌웨어, 프로그램가능 로직 등), SSD(Solid State Device) 등을 포함할 수 있지만, 이들로 제한되지 않는다. 기술된 동작들을 구현하는 코드는 또한 하드웨어 디바이스(예컨대, 집적 회로 칩, PGA(Programmable Gate Array), ASIC(Application Specific Integrated Circuit) 등)에 구현되는 하드웨어 로직에 구현될 수 있다. 또한 게다가, 기술된 동작들을 구현하는 코드는 "전송 신호"에 구현될 수 있고, 여기서 전송 신호는 공간을 통해 또는, 광학 섬유, 구리 전선 등과 같은, 전송 매체를 통해 전파할 수 있다. 코드 또는 로직이 인코딩되는 전송 신호는 무선 신호, 위성 전송, 무선파, 적외선 신호, 블루투스 등을 추가로 포함할 수 있다. 컴퓨터 판독가능 저장 매체 상에 포함되는 프로그램 코드는 전송측 스테이션 또는 컴퓨터로부터 수신측 스테이션 또는 컴퓨터로 전송 신호로서 전송될 수 있다. 컴퓨터 판독가능 저장 매체는 전송 신호만으로 이루어져 있지는 않다. 본 기술분야의 통상의 기술자는 본 설명의 범주를 벗어남이 없이 이 구성에 대해 많은 수정들이 행해질 수 있다는 것과, 제조 물품이 본 기술분야에 공지된 적당한 정보 전달 매체(information bearing medium)를 포함할 수 있다는 것을 잘 알 것이다. 물론, 본 기술분야의 통상의 기술자는 본 설명의 범주를 벗어남이 없이 이 구성에 대해 많은 수정들이 행해질 수 있다는 것과, 제조 물품이 본 기술분야에 공지된 임의의 유형적(tangible) 정보 전달 매체를 포함할 수 있다는 것을 잘 알 것이다.
특정 적용분야들에서, 본 설명에 따른 디바이스는, 데스크톱, 워크스테이션, 서버, 메인프레임, 랩톱, 핸드헬드 컴퓨터 등을 포함하는 컴퓨터 시스템과 같은, 컴퓨터 시스템에 결합된 모니터 또는 다른 디스플레이 상에 디스플레이할 정보를 렌더링하는 비디오 제어기, 디바이스 구동기 및 네트워크 제어기를 포함하는 컴퓨터 시스템에 구현될 수 있다. 대안적으로, 디바이스 실시예들은, 예를 들어, 스위치, 라우터 등과 같은, 비디오 제어기를 포함하지 않거나, 예를 들어, 네트워크 제어기를 포함하지 않는 컴퓨팅 디바이스에 구현될 수 있다.
도면들의 예시된 로직은 특정 순서로 발생하는 특정 이벤트들을 나타낼 수 있다. 대안의 실시예들에서, 특정 동작들이 상이한 순서로 수행되거나, 수정 또는 제거될 수 있다. 더욱이, 동작들이 앞서 기술된 로직에 추가될 수 있고 기술된 실시예들에 여전히 부합할 수 있다. 게다가, 본원에 기술되는 동작들이 순차적으로 발생할 수 있거나 특정 동작들이 병렬로 처리될 수 있다. 또한, 동작들이 단일 처리 유닛에 의해 또는 분산 처리 유닛들에 의해 수행될 수 있다.
다양한 실시예들의 이상의 설명은 예시 및 설명을 위해 제시되었다. 이 설명은 총망라하려는 것으로도 개시된 정확한 형태로 제한하려는 것으로도 의도되어 있지 않다. 이상의 교시내용을 바탕으로 많은 수정들 및 변형들이 가능하다.

Claims (21)

  1. 복수의 프로세서 노드들의 복수의 커맨드 제출 큐(command submission queue)들과 함께 사용하기 위한 장치로서,
    복수의 저장 공간 영역들(a plurality of regions of storage space)을 갖는 비휘발성 저장소 및 공통 커맨드 큐를 갖는 저장소 제어기를 포함하는 솔리드 스테이트 저장소 드라이브(solid-state storage drive)를 포함하고, 상기 제어기는:
    상기 복수의 커맨드 제출 큐들로부터의 복수의 기입 커맨드들을 상기 공통 커맨드 큐에 큐잉하고(queue);
    상기 공통 커맨드 큐에 큐잉된 기입 커맨드들을 실행하도록 구성되고;
    상기 제어기는 상기 기입 커맨드들에서 제1 및 제2 순차 기입 스트림들을 검출하도록 구성된 순차 기입 스트림 검출 로직(sequential write stream detection logic)을 포함하는 순차 기입 스트림 식별 로직(sequential write stream identification logic)을 가지며, 상기 순차 기입 스트림 식별 로직은 상기 검출된 제1 및 제2 순차 기입 스트림들을, 상기 제1 및 제2 검출된 순차 기입 스트림들의 특성들의 함수로서, 각각, 제1 및 제2 식별된 순차 기입 스트림들로서 식별하도록 구성되고, 상기 특성들은 기입 속도 특성 및 커맨드 제출 큐 기점(command submission queue origin) 특성을 포함하고, 상기 제어기는, 상기 제1 식별된 순차 기입 스트림의 기입 데이터를 상기 솔리드 스테이트 저장소의 제1 순차 기입 스트림 저장 영역에 집합(aggregating)시키는 것, 및 상기 제2 식별된 순차 기입 스트림의 기입 데이터를 상기 솔리드 스테이트 저장소의 제2 순차 기입 스트림 저장 영역에 집합시키는 것을 포함하여, 실행 중인 커맨드들의 기입 데이터를 기입 스트림 식별(write stream identifying)의 함수로서 상기 솔리드 스테이트 저장소의 상이한 순차 기입 스트림 영역들에 기입하도록 구성된 순차 기입 스트림 집합 로직(sequential write stream aggregation logic)을 추가로 갖는, 장치.
  2. 제1항에 있어서, 상기 솔리드 스테이트 저장소 드라이브는 순차 기입 스트림 버퍼 파티션(sequential write stream buffer partition)들을 갖는 전송 버퍼 저장소(transfer buffer storage)를 추가로 포함하고, 상기 제어기는, 상기 제1 식별된 순차 기입 스트림의 기입 데이터를 상기 전송 버퍼 저장소의 제1 순차 기입 스트림 버퍼 파티션에 집합시키는 것, 및 상기 제2 식별된 순차 기입 스트림의 기입 데이터를 상기 전송 버퍼 저장소의 제2 순차 기입 스트림 버퍼 파티션에 집합시키는 것을 포함하여, 실행 중인 커맨드들의 기입 데이터를 상기 순차 기입 스트림 식별 로직에 의한 상기 기입 스트림 식별의 함수로서 상기 전송 버퍼 저장소의 상이한 순차 기입 스트림 버퍼 파티션들에 기입하도록 구성된 전송 버퍼 파티션 기입 스트림 데이터 집합 로직(transfer buffer partition write stream data aggregation logic)을 추가로 갖는, 장치.
  3. 제1항 또는 제2항에 있어서, 상기 순차 기입 스트림 검출 로직은 상기 기입 커맨드에서 제3 순차 기입 스트림을 검출하도록 추가로 구성되고, 상기 순차 기입 스트림 식별 로직은 상기 검출된 제3 순차 기입 스트림을 상기 제1 및 제3 검출된 순차 기입 스트림들의 특성들의 함수로서 상기 제1 식별된 순차 기입 스트림들로서 식별하도록 추가로 구성되며, 상기 저장소 제어기는 실행 중인 커맨드들의 기입 데이터를 상기 기입 스트림 식별의 함수로서 상기 솔리드 스테이트 저장소의 상이한 영역들에 기입하는 것이 상기 제3 검출된 순차 기입 스트림의 기입 데이터를 상기 솔리드 스테이트 저장소의 제1 영역 구역(region area)에 집합시키는 것을 포함하도록 추가로 구성되는, 장치.
  4. 제3항에 있어서, 상기 순차 기입 스트림 식별 로직은 각각의 검출된 순차 기입 스트림에 대한 상기 기입 속도 특성을 결정하도록 구성된 순차 기입 스트림 기입 속도 검출 로직(sequential write stream write velocity detection logic)을 추가로 포함하고, 상기 순차 기입 스트림 식별 로직은 상기 검출된 제1 및 제3 순차 기입 스트림들을 상기 제1 식별된 순차 기입 스트림으로서 식별하는 것 및 상기 검출된 제2 순차 기입 스트림을 상기 제2 식별된 순차 기입 스트림으로서 식별하는 것이 상기 검출된 제1 및 제3 순차 기입 스트림들이 제1 범위 내의 검출된 기입 속도 특성들을 갖는 것 및 상기 검출된 제2 순차 기입 스트림이 제2 범위 내의 검출된 기입 속도 특성들을 갖는 것의 함수이도록 추가로 구성되는, 장치.
  5. 제1항 또는 제2항에 있어서, 상기 순차 기입 스트림 검출 로직은 상기 기입 커맨드들에서 제1 및 제2 순차 기입 스트림들을 검출하는 것이 상기 공통 커맨드 큐 내의 상기 기입 커맨드들의 파라미터들을 검사하는 것 - 상기 파라미터들은 기입 데이터 목적지 파라미터를 포함함 -, 및 2개의 기입 커맨드들의 상기 기입 데이터 목적지 파라미터들이 순차 기입 스트림의 기입 커맨드들의 시퀀스에서의 2개의 기입 커맨드들의 기입 데이터 목적지 파라미터들과 일치하는지를 결정하는 것을 포함하도록 추가로 구성되는, 장치.
  6. 제5항에 있어서, 상기 파라미터들은 상기 공통 커맨드 큐의 각각의 기입 커맨드에 대한 커맨드 제출 큐 기점 파라미터(command submission queue origin parameter)를 포함하는, 장치.
  7. 제3항에 있어서, 상기 순차 기입 스트림 집합 로직은 상기 제1 식별된 순차 기입 스트림의 상기 기입 데이터를 상기 솔리드 스테이트 저장소의 상기 제1 영역 구역에 집합시키는 것이 상기 제1 순차 기입 스트림의 기입 목적지 주소 특성을 포함하는 상기 제1 식별된 순차 기입 스트림의 특성들의 함수로서 상기 제1 영역 구역 내에서 인접하게 상기 제1 식별된 순차 기입 스트림의 기입 데이터를 순차적으로 재정렬하고 패킹(packing)하는 것을 포함하도록 추가로 구성되는, 장치.
  8. 디스플레이와 함께 사용하기 위한 시스템으로서,
    복수의 커맨드 제출 큐들을 갖는 복수의 프로세서 노드들;
    복수의 저장 공간 영역들을 갖는 비휘발성 저장소 및 공통 커맨드 큐를 갖는 저장소 제어기를 포함하는 솔리드 스테이트 저장소 드라이브; 및
    상기 저장소에 저장된 데이터를 표현하는 데이터를 디스플레이하는 비디오 제어기
    를 포함하고;
    상기 저장소 제어기는:
    상기 복수의 커맨드 제출 큐들로부터의 복수의 기입 커맨드들을 상기 공통 커맨드 큐에 큐잉하고;
    상기 공통 커맨드 큐에 큐잉된 기입 커맨드들을 실행하도록 구성되고;
    상기 저장소 제어기는 상기 기입 커맨드들에서 제1 및 제2 순차 기입 스트림들을 검출하도록 구성된 순차 기입 스트림 검출 로직을 포함하는 순차 기입 스트림 식별 로직을 가지며, 상기 순차 기입 스트림 식별 로직은 상기 검출된 제1 및 제2 순차 기입 스트림들을, 상기 제1 및 제2 검출된 순차 기입 스트림들의 특성들의 함수로서, 각각, 제1 및 제2 식별된 순차 기입 스트림들로서 식별하도록 구성되고, 상기 특성들은 기입 속도 특성 및 커맨드 제출 큐 기점 특성을 포함하고, 상기 저장소 제어기는, 상기 제1 식별된 순차 기입 스트림의 기입 데이터를 상기 솔리드 스테이트 저장소의 제1 순차 기입 스트림 저장 영역에 집합시키는 것, 및 상기 제2 식별된 순차 기입 스트림의 기입 데이터를 상기 솔리드 스테이트 저장소의 제2 순차 기입 스트림 저장 영역에 집합시키는 것을 포함하여, 실행 중인 커맨드들의 기입 데이터를 기입 스트림 식별의 함수로서 상기 솔리드 스테이트 저장소의 상이한 순차 기입 스트림 영역들에 기입하도록 구성된 순차 기입 스트림 집합 로직을 추가로 갖는, 시스템.
  9. 제8항에 있어서, 상기 솔리드 스테이트 저장소 드라이브는 순차 기입 스트림 버퍼 파티션들을 갖는 전송 버퍼 저장소를 추가로 포함하고, 상기 저장소 제어기는, 상기 제1 식별된 순차 기입 스트림의 기입 데이터를 상기 전송 버퍼 저장소의 제1 순차 기입 스트림 버퍼 파티션에 집합시키는 것, 및 상기 제2 식별된 순차 기입 스트림의 기입 데이터를 상기 전송 버퍼 저장소의 제2 순차 기입 스트림 버퍼 파티션에 집합시키는 것을 포함하여, 실행 중인 커맨드들의 기입 데이터를 상기 순차 기입 스트림 식별 로직에 의한 상기 기입 스트림 식별의 함수로서 상기 전송 버퍼 저장소의 상이한 순차 기입 스트림 버퍼 파티션들에 기입하도록 구성된 전송 버퍼 파티션 기입 스트림 데이터 집합 로직을 추가로 갖는, 시스템.
  10. 제8항 또는 제9항에 있어서, 상기 순차 기입 스트림 검출 로직은 상기 기입 커맨드에서 제3 순차 기입 스트림을 검출하도록 추가로 구성되고, 상기 순차 기입 스트림 식별 로직은 상기 검출된 제3 순차 기입 스트림을 상기 제1 및 제3 검출된 순차 기입 스트림들의 특성들의 함수로서 상기 제1 식별된 순차 기입 스트림들로서 식별하도록 추가로 구성되며, 상기 저장소 제어기는 실행 중인 커맨드들의 기입 데이터를 상기 기입 스트림 식별의 함수로서 상기 솔리드 스테이트 저장소의 상이한 영역들에 기입하는 것이 상기 제3 검출된 순차 기입 스트림의 기입 데이터를 상기 솔리드 스테이트 저장소의 제1 영역 구역에 집합시키는 것을 포함하도록 추가로 구성되는, 시스템.
  11. 제10항에 있어서, 상기 순차 기입 스트림 식별 로직은 각각의 검출된 순차 기입 스트림에 대한 상기 기입 속도 특성을 결정하도록 구성된 순차 기입 스트림 기입 속도 검출 로직을 추가로 포함하고, 상기 순차 기입 스트림 식별 로직은 상기 검출된 제1 및 제3 순차 기입 스트림들을 상기 제1 식별된 순차 기입 스트림으로서 식별하는 것 및 상기 검출된 제2 순차 기입 스트림을 상기 제2 식별된 순차 기입 스트림으로서 식별하는 것이 상기 검출된 제1 및 제3 순차 기입 스트림들이 제1 범위 내의 검출된 기입 속도 특성들을 갖는 것 및 상기 검출된 제2 순차 기입 스트림이 제2 범위 내의 검출된 기입 속도 특성들을 갖는 것의 함수이도록 추가로 구성되는, 시스템.
  12. 제8항 또는 제9항에 있어서, 상기 순차 기입 스트림 검출 로직은 상기 기입 커맨드들에서 제1 및 제2 순차 기입 스트림들을 검출하는 것이 상기 공통 커맨드 큐 내의 상기 기입 커맨드들의 파라미터들을 검사하는 것 - 상기 파라미터들은 기입 데이터 목적지 파라미터를 포함함 -, 및 2개의 기입 커맨드들의 상기 기입 데이터 목적지 파라미터들이 순차 기입 스트림의 기입 커맨드들의 시퀀스에서의 2개의 기입 커맨드들의 기입 데이터 목적지 파라미터들과 일치하는지를 결정하는 것을 포함하도록 추가로 구성되는, 시스템.
  13. 제12항에 있어서, 상기 파라미터들은 상기 공통 커맨드 큐의 각각의 기입 커맨드에 대한 커맨드 제출 큐 기점 파라미터를 포함하는, 시스템.
  14. 제10항에 있어서, 상기 순차 기입 스트림 집합 로직은 상기 제1 식별된 순차 기입 스트림의 상기 기입 데이터를 상기 솔리드 스테이트 저장소의 상기 제1 영역 구역에 집합시키는 것이 상기 제1 순차 기입 스트림의 기입 목적지 주소 특성을 포함하는 상기 제1 식별된 순차 기입 스트림의 특성들의 함수로서 상기 제1 영역 구역 내에서 인접하게 상기 제1 식별된 순차 기입 스트림의 기입 데이터를 순차적으로 재정렬하고 패킹하는 것을 포함하도록 추가로 구성되는, 시스템.
  15. 방법으로서,
    복수의 커맨드 제출 큐들로부터의 복수의 기입 커맨드들을 공통 커맨드 큐에 큐잉하는 단계;
    상기 공통 커맨드 큐에 큐잉된 기입 커맨드들을 실행하는 단계;
    상기 기입 커맨드들에서 제1 및 제2 순차 기입 스트림들을 검출하는 단계;
    상기 검출된 제1 및 제2 순차 기입 스트림들을, 상기 제1 및 제2 검출된 순차 기입 스트림들의 특성들의 함수로서, 각각, 제1 및 제2 식별된 순차 기입 스트림들로서 식별하는 단계 - 상기 특성들은 기입 속도 특성 및 커맨드 제출 큐 기점 특성을 포함함 -; 및
    실행 중인 커맨드들의 기입 데이터를 기입 스트림 식별의 함수로서 솔리드 스테이트 저장소의 상이한 순차 기입 스트림 영역들에 기입하는 단계
    를 포함하고, 상기 기입 데이터를 기입하는 단계는:
    상기 제1 식별된 순차 기입 스트림의 기입 데이터를 상기 솔리드 스테이트 저장소의 제1 순차 기입 스트림 저장 영역에 집합시키는 단계; 및
    상기 제2 식별된 순차 기입 스트림의 기입 데이터를 상기 솔리드 스테이트 저장소의 제2 순차 기입 스트림 저장 영역에 집합시키는 단계를 포함하는, 방법.
  16. 제15항에 있어서, 실행 중인 커맨드들의 기입 데이터를 상기 기입 스트림 식별의 함수로서 전송 버퍼 저장소의 상이한 순차 기입 스트림 버퍼 파티션들에 기입하는 단계를 추가로 포함하고, 상기 기입 데이터를 전송 버퍼 저장소에 기입하는 단계는:
    상기 제1 식별된 순차 기입 스트림의 기입 데이터를 상기 전송 버퍼 저장소의 제1 순차 기입 스트림 버퍼 파티션에 집합시키는 단계; 및
    상기 제2 식별된 순차 기입 스트림의 기입 데이터를 상기 전송 버퍼 저장소의 제2 순차 기입 스트림 버퍼 파티션에 집합시키는 단계를 포함하는, 방법.
  17. 제15항 또는 제16항에 있어서,
    상기 기입 커맨드들에서 제3 순차 기입 스트림을 검출하는 단계; 및
    상기 검출된 제3 순차 기입 스트림을, 상기 제1 및 제3 검출된 순차 기입 스트림들의 특성들의 함수로서 상기 제1 식별된 순차 기입 스트림들로서 식별하는 단계를 추가로 포함하고;
    실행 중인 커맨드들의 기입 데이터를 상기 기입 스트림 식별의 함수로서 솔리드 스테이트 저장소의 상이한 영역들에 기입하는 단계는:
    상기 제3 검출된 순차 기입 스트림의 기입 데이터를 상기 솔리드 스테이트 저장소의 제1 영역 구역에 집합시키는 단계를 추가로 포함하는, 방법.
  18. 제17항에 있어서,
    각각의 검출된 순차 기입 스트림에 대한 상기 기입 속도 특성을 결정하는 단계를 추가로 포함하고;
    상기 검출된 제1 및 제3 순차 기입 스트림들을 상기 제1 식별된 순차 기입 스트림으로서 식별하는 것 및 상기 검출된 제2 순차 기입 스트림을 상기 제2 식별된 순차 기입 스트림으로서 식별하는 것은 상기 검출된 제1 및 제3 순차 기입 스트림들이 제1 범위 내의 검출된 기입 속도 특성들을 갖는 것 및 상기 검출된 제2 순차 기입 스트림이 제2 범위 내의 검출된 기입 속도 특성들을 갖는 것의 함수인, 방법.
  19. 제15항 또는 제16항에 있어서, 상기 기입 커맨드들에서 제1 및 제2 순차 기입 스트림들을 검출하는 단계는 상기 공통 커맨드 큐 내의 상기 기입 커맨드들의 파라미터들을 검사하는 단계 - 상기 파라미터들은 기입 데이터 목적지 파라미터를 포함함 -, 및 2개의 기입 커맨드들의 상기 기입 데이터 목적지 파라미터들이 순차 기입 스트림의 기입 커맨드들의 시퀀스에서의 2개의 기입 커맨드들의 기입 데이터 목적지 파라미터들과 일치하는지를 결정하는 단계를 포함하는, 방법.
  20. 제19항에 있어서, 상기 파라미터들은 상기 공통 커맨드 큐의 각각의 기입 커맨드에 대한 커맨드 제출 큐 기점 파라미터를 포함하는, 방법.
  21. 제17항에 있어서, 상기 제1 식별된 순차 기입 스트림의 상기 기입 데이터를 상기 솔리드 스테이트 저장소의 상기 제1 영역 구역에 집합시키는 것은 상기 제1 순차 기입 스트림의 기입 목적지 주소 특성을 포함하는 상기 제1 식별된 순차 기입 스트림의 특성들의 함수로서 상기 제1 영역 구역 내에서 인접하게 상기 제1 식별된 순차 기입 스트림의 기입 데이터를 순차적으로 재정렬하고 패킹하는 것을 포함하는, 방법.
KR1020177023540A 2015-03-27 2016-02-19 순차 기입 스트림 관리 KR102561727B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020237025668A KR20230117258A (ko) 2015-03-27 2016-02-19 순차 기입 스트림 관리

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/671,968 US9760281B2 (en) 2015-03-27 2015-03-27 Sequential write stream management
US14/671,968 2015-03-27
PCT/US2016/018795 WO2016160172A1 (en) 2015-03-27 2016-02-19 Sequential write stream management

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020237025668A Division KR20230117258A (ko) 2015-03-27 2016-02-19 순차 기입 스트림 관리

Publications (2)

Publication Number Publication Date
KR20170130376A KR20170130376A (ko) 2017-11-28
KR102561727B1 true KR102561727B1 (ko) 2023-07-31

Family

ID=56975382

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020177023540A KR102561727B1 (ko) 2015-03-27 2016-02-19 순차 기입 스트림 관리
KR1020237025668A KR20230117258A (ko) 2015-03-27 2016-02-19 순차 기입 스트림 관리

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020237025668A KR20230117258A (ko) 2015-03-27 2016-02-19 순차 기입 스트림 관리

Country Status (6)

Country Link
US (1) US9760281B2 (ko)
EP (1) EP3274806B1 (ko)
JP (1) JP6729914B2 (ko)
KR (2) KR102561727B1 (ko)
CN (2) CN117687568A (ko)
WO (1) WO2016160172A1 (ko)

Families Citing this family (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10013177B2 (en) * 2015-04-20 2018-07-03 Hewlett Packard Enterprise Development Lp Low write amplification in solid state drive
US10282324B2 (en) 2015-07-13 2019-05-07 Samsung Electronics Co., Ltd. Smart I/O stream detection based on multiple attributes
US11461010B2 (en) 2015-07-13 2022-10-04 Samsung Electronics Co., Ltd. Data property-based data placement in a nonvolatile memory device
US10466908B2 (en) * 2015-08-25 2019-11-05 Toshiba Memory Corporation Memory system that buffers data before writing to nonvolatile memory
JP6403164B2 (ja) * 2015-09-11 2018-10-10 東芝メモリ株式会社 メモリシステム
US10089039B2 (en) * 2015-10-30 2018-10-02 Toshiba Memory Corporation Memory controller, memory device having the same, and memory control method
CN107347058B (zh) 2016-05-06 2021-07-23 阿里巴巴集团控股有限公司 数据加密方法、数据解密方法、装置及系统
US10216417B2 (en) 2016-10-26 2019-02-26 Samsung Electronics Co., Ltd. Method of consolidate data streams for multi-stream enabled SSDs
US10491797B2 (en) * 2016-12-20 2019-11-26 Shanghai Xiaoyi Technology Co., Ltd. Apparatus and method for controlling imaging devices
US10503434B2 (en) * 2017-04-12 2019-12-10 Micron Technology, Inc. Scalable low-latency storage interface
US11048624B2 (en) * 2017-04-25 2021-06-29 Samsung Electronics Co., Ltd. Methods for multi-stream garbage collection
US10698808B2 (en) * 2017-04-25 2020-06-30 Samsung Electronics Co., Ltd. Garbage collection—automatic data placement
US10733100B2 (en) * 2017-06-12 2020-08-04 Western Digital Technologies, Inc. Method and apparatus for classifying and buffering write commands
KR102398181B1 (ko) 2017-07-03 2022-05-17 삼성전자주식회사 쓰기 데이터를 위해 할당될 물리 어드레스를 미리 관리하는 스토리지 장치
US10643707B2 (en) * 2017-07-25 2020-05-05 Western Digital Technologies, Inc. Group write operations for a data storage device
US10878859B2 (en) * 2017-12-20 2020-12-29 Micron Technology, Inc. Utilizing write stream attributes in storage write commands
US10877691B2 (en) 2017-12-29 2020-12-29 Intel Corporation Stream classification based on logical regions
CN110018784B (zh) 2018-01-09 2023-01-10 阿里巴巴集团控股有限公司 数据处理方法、装置及计算设备
US10824562B2 (en) * 2018-01-09 2020-11-03 Hossein Asadi Reconfigurable caching
KR102406340B1 (ko) * 2018-02-26 2022-06-13 에스케이하이닉스 주식회사 전자 장치 및 그것의 동작 방법
US11803325B2 (en) 2018-03-27 2023-10-31 Micron Technology, Inc. Specifying media type in write commands
CN112352216B (zh) * 2018-06-30 2022-06-14 华为技术有限公司 数据存储方法及数据存储装置
CN108932155A (zh) * 2018-07-25 2018-12-04 迈普通信技术股份有限公司 虚拟机存储管理方法、装置、电子设备及可读存储介质
CN109450620B (zh) 2018-10-12 2020-11-10 创新先进技术有限公司 一种移动终端中共享安全应用的方法及移动终端
US11188250B2 (en) 2018-10-25 2021-11-30 Micron Technology, Inc. Two-stage hybrid memory buffer for multiple streams
US11061591B2 (en) * 2018-11-02 2021-07-13 Samsung Electronics Co., Ltd. Storage device processing stream data, system including the same, and operation method thereof
US10990315B2 (en) * 2018-12-03 2021-04-27 International Business Machines Corporation Write transfer resource management in a data storage system
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
JP6920001B2 (ja) * 2018-12-04 2021-08-18 株式会社日立製作所 マルチノードストレージシステム、及びマルチノードストレージシステムのキュー制御方法
US11231873B2 (en) * 2018-12-07 2022-01-25 Intel Corporation Apparatus and method for assigning velocities to write data
CN109558092A (zh) * 2018-12-17 2019-04-02 杭州普创电子有限公司 一种芯片内部flash存储方法及装置
US11347647B2 (en) * 2018-12-18 2022-05-31 Western Digital Technologies, Inc. Adaptive cache commit delay for write aggregation
CN109799959B (zh) * 2019-01-22 2020-07-10 华中科技大学 一种提高开放通道固态盘写并行性的方法
US11055022B2 (en) * 2019-03-25 2021-07-06 Western Digital Technologies, Inc. Storage system and method for early host command fetching in a low queue depth environment
CN111813326B (zh) * 2019-04-12 2024-04-19 建兴储存科技(广州)有限公司 具多数据流写入的固态存储装置及其相关写入方法
KR20210012439A (ko) * 2019-07-25 2021-02-03 삼성전자주식회사 마스터 지능 소자 및 이의 제어 방법
JP2021033845A (ja) 2019-08-28 2021-03-01 キオクシア株式会社 メモリシステムおよび制御方法
CN110716699A (zh) * 2019-10-17 2020-01-21 北京百度网讯科技有限公司 用于写入数据的方法和装置
KR20210053384A (ko) 2019-11-01 2021-05-12 삼성전자주식회사 스토리지 장치 및 스토리지 장치의 동작 방법
KR20210061544A (ko) * 2019-11-20 2021-05-28 에스케이하이닉스 주식회사 컨트롤러 및 컨트롤러의 동작방법
US11429519B2 (en) * 2019-12-23 2022-08-30 Alibaba Group Holding Limited System and method for facilitating reduction of latency and mitigation of write amplification in a multi-tenancy storage drive
US11216364B2 (en) * 2020-02-18 2022-01-04 Micron Technology, Inc. Sequential read optimization in a memory sub-system that programs sequentially
CN112015672A (zh) * 2020-08-28 2020-12-01 北京浪潮数据技术有限公司 一种存储系统中数据处理方法、装置、设备及存储介质
US11880595B2 (en) * 2020-11-06 2024-01-23 Micron Technology, Inc. Memory cell access techniques for memory systems
KR20220073998A (ko) * 2020-11-27 2022-06-03 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
TW202225987A (zh) 2020-12-21 2022-07-01 韓商愛思開海力士有限公司 用以分配儲存裝置的多個記憶通道以進行串流資料寫入的方法、儲存裝置及其記錄媒體
KR20220104511A (ko) * 2021-01-18 2022-07-26 에스케이하이닉스 주식회사 컨트롤러 및 이를 포함하는 메모리 시스템
US11675539B2 (en) * 2021-06-03 2023-06-13 International Business Machines Corporation File system operations for a storage supporting a plurality of submission queues
CN113703664B (zh) * 2021-06-24 2024-05-03 杭州电子科技大学 一种eMMC芯片随机写入速率优化实现方法
CN115729443A (zh) * 2021-09-01 2023-03-03 北京特纳飞电子技术有限公司 用于对数据进行排序的方法和装置,存储装置
KR102553878B1 (ko) * 2021-11-25 2023-07-10 삼성전자주식회사 비휘발성 메모리 기반의 저장 장치, 장치 컨트롤러 및 방법
CN116166415A (zh) * 2021-11-25 2023-05-26 三星电子株式会社 装置控制器、存储装置及其方法
US11899984B1 (en) 2022-07-26 2024-02-13 Beijing Tenafe Electronic Technology Co., Ltd. Virtual queue for messages
US11907147B1 (en) 2022-07-28 2024-02-20 Beijing Tenafe Electronic Technology Co., Ltd. Programmable message inspection engine implemented in hardware that generates an output message using a content modification plan and a destination control plan
US11989458B2 (en) 2022-09-12 2024-05-21 Western Digital Technologies, Inc. Splitting sequential read commands

Family Cites Families (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2001001262A1 (fr) * 1999-06-24 2001-01-04 Fujitsu Limited Controleur de peripherique et systeme d'entree/sortie
JP2001222380A (ja) * 2000-02-07 2001-08-17 Hitachi Ltd 外部記憶装置とそれを備えた情報処理システム
US7917903B2 (en) * 2003-03-27 2011-03-29 Hewlett-Packard Development Company, L.P. Quality of service controller and method for a data storage system
US8416657B2 (en) * 2007-12-03 2013-04-09 Mediatek Inc. Method and system for managing data from host to optical disc
US8725928B1 (en) * 2008-12-17 2014-05-13 Micron Technology, Inc. Method and apparatus for configuring write performance for electrically writable memory devices
US9230002B2 (en) 2009-01-30 2016-01-05 Oracle International Corporation High performant information sharing and replication for single-publisher and multiple-subscriber configuration
US20120110291A1 (en) 2009-04-06 2012-05-03 Kaminario Technologies Ltd. System and method for i/o command management
US8463983B2 (en) * 2009-09-15 2013-06-11 International Business Machines Corporation Container marker scheme for reducing write amplification in solid state devices
US8806143B1 (en) * 2009-10-09 2014-08-12 Netapp, Inc. Queuing received write blocks for reducing file fragmentation
US9753847B2 (en) * 2009-10-27 2017-09-05 Western Digital Technologies, Inc. Non-volatile semiconductor memory segregating sequential, random, and system data to reduce garbage collection for page based mapping
JP2011154547A (ja) * 2010-01-27 2011-08-11 Toshiba Corp メモリ管理装置及びメモリ管理方法
JP2011175615A (ja) * 2010-01-27 2011-09-08 Toshiba Corp ホスト装置およびメモリデバイス
US20110320733A1 (en) 2010-06-04 2011-12-29 Steven Ted Sanford Cache management and acceleration of storage media
CN102004698B (zh) * 2010-11-23 2012-07-04 深圳市江波龙电子有限公司 一种闪存管理方法及系统
US8458435B1 (en) * 2010-12-20 2013-06-04 Western Digital Technologies, Inc. Sequential write thread detection
US8521948B2 (en) * 2011-01-03 2013-08-27 Apple Inc. Handling dynamic and static data for a system having non-volatile memory
EP2715510B1 (en) * 2011-05-24 2018-05-02 Marvell World Trade Ltd. Method for storage devices to achieve low write amplification with low over provision
CN102521269B (zh) * 2011-11-22 2013-06-19 清华大学 一种基于索引的计算机连续数据保护方法
JP2013131060A (ja) * 2011-12-21 2013-07-04 Panasonic Corp 情報処理装置
US20130173842A1 (en) * 2011-12-28 2013-07-04 King Ying Ng Adaptive Logical Group Sorting to Prevent Drive Fragmentation
US8930619B2 (en) 2012-05-29 2015-01-06 Dot Hill Systems Corporation Method and apparatus for efficiently destaging sequential I/O streams
US9552297B2 (en) * 2013-03-04 2017-01-24 Dot Hill Systems Corporation Method and apparatus for efficient cache read ahead
JP2016506585A (ja) * 2013-01-08 2016-03-03 ヴァイオリン メモリー インコーポレイテッド データストレージのための方法及びシステム
US9223698B2 (en) * 2013-01-15 2015-12-29 Kaminario Technologies Ltd. SSD-block aligned writes
JP2014167763A (ja) * 2013-02-28 2014-09-11 Canon Inc 電子機器及びその制御方法
US8966164B1 (en) * 2013-09-27 2015-02-24 Avalanche Technology, Inc. Storage processor managing NVME logically addressed solid state disk array
KR102074329B1 (ko) * 2013-09-06 2020-02-06 삼성전자주식회사 데이터 저장 장치 및 그것의 데이터 처리 방법
CN103631940B (zh) * 2013-12-09 2017-02-08 中国联合网络通信集团有限公司 一种应用于hbase数据库的数据写入方法及系统
TWI515735B (zh) * 2013-12-09 2016-01-01 群聯電子股份有限公司 資料抹除方法、記憶體控制電路單元及記憶體儲存裝置
US8874836B1 (en) 2014-07-03 2014-10-28 Pure Storage, Inc. Scheduling policy for queues in a non-volatile solid-state storage
CN104331250B (zh) * 2014-11-18 2017-05-24 苏州佳世达电通有限公司 资料写入方法
US9658966B2 (en) * 2014-11-24 2017-05-23 Sandisk Technologies Llc Systems and methods of write cache flushing
CN104461935B (zh) * 2014-11-27 2018-03-13 华为技术有限公司 一种进行数据存储的方法、装置及系统

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
미국공개특허 제2013-0173842호(2013.07.04.) 1부.*
미국공개특허 제2014-0351511호(2014.11.27.) 1부.*
일본공개특허 제2011-175615호(2011.09.08.) 1부.*
일본공개특허 제2013-131060호(2013.07.04.) 1부.*
한국공개특허 제10-2015-0028610호(2015.03.16.) 1부.*

Also Published As

Publication number Publication date
US20160283116A1 (en) 2016-09-29
CN107430493B (zh) 2023-10-03
CN107430493A (zh) 2017-12-01
WO2016160172A1 (en) 2016-10-06
EP3274806A1 (en) 2018-01-31
CN117687568A (zh) 2024-03-12
EP3274806B1 (en) 2023-12-06
JP6729914B2 (ja) 2020-07-29
US9760281B2 (en) 2017-09-12
KR20170130376A (ko) 2017-11-28
JP2018511112A (ja) 2018-04-19
KR20230117258A (ko) 2023-08-07
EP3274806A4 (en) 2018-12-05

Similar Documents

Publication Publication Date Title
KR102561727B1 (ko) 순차 기입 스트림 관리
TWI779325B (zh) 實施用於雲端遊戲資料儲存及擷取之高速資料通信組構之系統及方法
US11960725B2 (en) NVMe controller memory manager providing CMB capability
US11656775B2 (en) Virtualizing isolation areas of solid-state storage media
US11635902B2 (en) Storage device processing stream data, system including the same, and operation method
KR102321913B1 (ko) 불휘발성 메모리 장치, 및 그것을 포함하는 메모리 시스템
US11747984B2 (en) Memory system that constructs virtual storage regions for virtual machines
JP2012508428A (ja) 単一のコマンドにより複数の非連続アドレス範囲の転送をキューイングするための方法及びシステム
US9983826B2 (en) Data storage device deferred secure delete
US9229891B2 (en) Determining a direct memory access data transfer mode
US9223706B2 (en) System, method and a non-transitory computer readable medium for a pre-fetch operation
Jung et al. Architecture exploration of flash memory storage controller through a cycle accurate profiling
US10649909B2 (en) Logical block addressing range collision crawler
US10545697B1 (en) Reverse order request queueing by para-virtual device drivers
US10437495B1 (en) Storage system with binding of host non-volatile memory to one or more storage devices
TWI601058B (zh) 減少在固態驅動機中混植輸入與輸出操作的技術
US8719496B2 (en) Storage apparatus and method for executing exclusive extent processing in parallel using counter values
Jeremic et al. Dataset Management-Aware Software Architecture for Storage Systems Based on SSDs

Legal Events

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