KR20210152929A - Ssd에서의 라이트 명령하기 - Google Patents

Ssd에서의 라이트 명령하기 Download PDF

Info

Publication number
KR20210152929A
KR20210152929A KR1020210025064A KR20210025064A KR20210152929A KR 20210152929 A KR20210152929 A KR 20210152929A KR 1020210025064 A KR1020210025064 A KR 1020210025064A KR 20210025064 A KR20210025064 A KR 20210025064A KR 20210152929 A KR20210152929 A KR 20210152929A
Authority
KR
South Korea
Prior art keywords
command
logic
sequence tag
commands
host
Prior art date
Application number
KR1020210025064A
Other languages
English (en)
Inventor
강양욱
프라틱 미스라
기양석
제이슨 마티노
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Publication of KR20210152929A publication Critical patent/KR20210152929A/ko

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1051Data output circuits, e.g. read-out amplifiers, data output buffers, data output registers, data output level conversion circuits
    • G11C7/1057Data output buffers, e.g. comprising level conversion circuits, circuits for adapting load
    • 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/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • 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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1642Handling requests for interconnection or transfer for access to memory bus based on arbitration with request queuing
    • 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/18Handling requests for interconnection or transfer for access to memory bus based on priority control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9014Indexing; Data structures therefor; Storage structures hash tables
    • 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
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0653Monitoring storage devices or 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/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/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • 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
    • G06F3/0688Non-volatile semiconductor memory arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1078Data input circuits, e.g. write amplifiers, data input buffers, data input registers, data input level conversion circuits
    • G11C7/1084Data input buffers, e.g. comprising level conversion circuits, circuits for adapting load
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1008Correctness of operation, e.g. memory ordering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages
    • 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/7208Multiple device management, e.g. distributing data over multiple flash devices

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)
  • Software Systems (AREA)
  • Databases & Information Systems (AREA)
  • Multimedia (AREA)
  • Data Mining & Analysis (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Debugging And Monitoring (AREA)

Abstract

저장 장치가 호스트가 명령들을 제공하는 순서로 I/O 명령들을 처리하고 호스트에 되돌려서, 호스트 오버헤드를 감소시킬 수 있는 시스템들 및 방법들에 있어서, 하기에 한정됨이 없이, 제1 I/O 명령과 제2 I/O 명령을 수신하는 단계로서, 상기 제1 I/O 명령과 제2 I/O 명령에는 시퀀스 태그가 할당되는 단계; 그 각각의 시퀀스 태그들을 기반으로 하나 이상의 저장 채널들에 상기 제1 I/O 명령과 상기 제2 I/O 명령을 제공하는 단계; 상기 제1 I/O 명령과 상기 제2 I/O 명령이 각각 완료될 경우 상기 제1 I/O 명령과 상기 제2 I/O 명령의 명령 완료 통지를 수집하는 단계; 및 상기 연관된 완료된 제1 I/O 명령과 상기 제2 I/O 명령의 시퀀스 태그를 기반으로 호스트에 명령 완료 통지를 제공하는 단계;를 포함하는, 시스템들 및 방법들이 개시되어 있다.

Description

SSD에서의 라이트 명령하기{WRITE ORDERING IN SSDs}
본 개시의 양태들은 호스트 시스템과 저장 장치 사이에서의 순차적 I/O 명령 관리를 위한 방법들 및 시스템들에 관한 것이다.
하기의 배경 기술은 단지 본원에 개시된 발명적 아이디어들과 컨셉들의 문맥을 이해하는데 필요한 정보를 제공하는 것을 의도한다. 따라서, 배경 기술 부분은 특허 가능한 내용을 포함할 수 있으며 종래 기술의 개시로서 간주되어서는 아니된다.
저장 장치의 관점에서 보아, 주어진 I/O 명령은 다른 주어진 I/O 명령 전에 수행되는 것이 일반적으로 보장되지 않는다-이에는 여러 이유가 있으나, 3개의 주목할 중요한 것들은, 첫째, I/O 명령들은 서로 다른 크기와 복잡성을 가질 수 있으며(예를 들어, 작은 라이트는 큰 라이트보다 일반적으로 빠르고, 일부 매체에서, 리드들은 라이트보다 상당히 빠르다), 둘째로, 각각의 저장 장치에 있는 저장 매체와 연관된, 명령을 처리하기 위한 다수의 내부 채널들이 있으며, 각각의 채널은 호스트의 처리 큐들과 독립적인 처리 큐를 가지며(예: 다수의 NAND 플래시 칩에 대한 다수의 채널들-각각의 개별적인 채널은 특정 물리적 주소들을 담당함), 셋째로, 일부 저장 장치들은 제어될 수 없는 간격들로 하나 이상의 내부 처리 채널들을 차지할 수 있는 배경 동작들을 가질 수 있다(예: NAND 플레시에서의 가비지 수집).
저장 시스템을 활용할 경우, 라이트의 일관성과 일치성은 유지되어야만 하는 필수적인 성질들일 수 있다. 예를 들어, 컴퓨터 시스템이 데이터가 그 순서대로 먼저 라이팅되고, 후에 리딩되도록 요청할 때, 컴퓨터 시스템은 명령들이 실제로 그 순서대로 처리되는 것을 보장해야 한다. 그렇지 않으면, 리드 명령이 라이트 명령 전에 실행되면, 리드 명령은 옳지 않은(오래된) 데이터를 되돌릴 것이다. 다른 예시로서, 오래된 라이트 요청이 새로운 라이트 요청 후에 처리되면, 불법적인 오버라이트가 발생할 것이며, 장치 상에 기록된 데이터는 옳지 않아질 것이다. 이 관리적 문제는, 다수의 애플리케이션들이 동일한 데이터에 접속하도록 허용되고, 호스트가 I/O 명령들을 제공하는 다수의 큐들이 있으면, 증폭된다.
따라서, 라이트 스케줄링을 관리하기 위하여 저장 장치들의 능력을 향상시킬 메커니즘들에 대한 요구가 있다.
본 개시의 컨셉들의 실시예들의 양태들은 컴퓨팅 시스템, 보다 구체적으로, 저장 장치가, 호스트에 의해 최소한의 노력으로 순서대로 I/O 명령 처리와 통지를 수행할 수 있는 시스템들 및 방법들에 관한 것이다. 일부 실시예들은 시퀀스 태그들을 I/O 명령들에 제공하기 위해 시퀀스 태그 발생기 로직을 포함하고 이용할 수 있다. 일부 실시예들은 그 시퀀스 태그들에 종속적인 순서로 I/O 명령들의 처리를 개시하기 위해 명령 핸들러 로직을 포함할 수 있다. 일부 실시예들은 I/O 명령 통지들을 모으고, 이들을 그 시퀀스 태그들의 순서로 호스트로 되돌릴 수 있도록 구성된 통지 로직을 포함할 수 있다.
일 예시 실시예에 따라, 저장 장치에 있어서 순서대로 IO 요청들을 처리하기 위한 방법에 있어서, 제1 I/O 명령과 제2 I/O 명령을 수신하는 단계로서, 상기 제1 I/O 명령과 제2 I/O 명령에는 시퀀스 태그가 할당되는 단계; 상기 제1 I/O 명령과 제2 I/O 명령 각각의 시퀀스 태그를 기반으로 하나 이상의 저장 채널들에 상기 제1 I/O 명령과 상기 제2 I/O 명령을 제공하는 단계; 상기 제1 I/O 명령과 상기 제2 I/O 명령이 각각 완료될 경우 상기 제1 I/O 명령과 상기 제2 I/O 명령의 명령 완료 통지를 수집하는 단계; 및 상기 연관된 완료된 제1 I/O 명령과 상기 제2 I/O 명령의 시퀀스 태그를 기반으로 호스트에 명령 완료 통지를 제공하는 단계를 포함하는, 저장 장치에 의해 순서대로 IO 요청을 처리하는 방법이 제공된다.
다른 예시 실시예에 따르면, 저장 장치에 있어서, 적어도 2개의 명령 큐; 명령 핸들러 로직, 적어도 2개의 물리적 채널들로서, 각 물리적 채널들은 하나 이상의 솔리드 스테이트 저장 매체와 연관되며, 상기 각각의 저장 매체는 각각의 물리적 주소들와 연관된, 적어도 2개의 물리적 채널들, 상기 적어도 2개의 저장 채널들의 각각과 연관된, 적어도 2개의 물리적 채널 큐들, 및 통지 매니저 로직;을 포함하는 저장 장치가 제공된다. 상기 적어도 2개의 명령 큐들은 호스트로부터 I/O 명령들을 수신하도록 구성되며, 상기 I/O 명령들은 시퀀스 태그들과 연관된다. 상기 명령 핸들러 로직은, 상기 I/O 명령들과 상기 명령들의 시퀀스 태그들에 연관된 물리적 주소들를 기반으로, 상기 적어도 2개의 명령 큐로부터 상기 적어도 2개의 물리적 채널 큐로 I/O 명령을 제공하도록 구성된다. 상기 통지 로직은, 각각의 완료된 I/O 명령들의 시퀀스 태그들을 기반으로, 상기 호스트에 I/O 명령 완료 통지들을 제공하도록 구성된다.
다른 예시 실시예에 따르면, 시스템에 있어서, 호스트 컴퓨터 시스템; 및 상기 호스트 컴퓨터 시스템에 통신적으로 결합된 저장 장치;를 포함하는 시스템이 제공된다. 상기 저장 장치는: 적어도 2개의 명령 큐, 명령 핸들러 로직, 적어도 2개의 저장 채널로서, 각 저장 채널은 하나 이상의 솔리드 스테이트 저장 매체와 연관되며, 상기 각각의 저장 매체는 각각의 저장 주소와 연관된, 적어도 2개의 저장 채널, 상기 적어도 2개의 저장 채널의 각각과 연관된, 적어도 2개의 저장 채널 큐, 및 통지 매니저 로직을 포함한다. 상기 적어도 2개의 명령 큐는 상기 호스트 컴퓨터 시스템으로부터 I/O 명령들을 수신하도록 구성되며, 상기 I/O 명령들은 시퀀스 태그들과 연관된다. 상기 명령 핸들러 로직은, 상기 I/O 명령들과 상기 명령들의 시퀀스 태그들에 연관된 저장 주소들을 기반으로, 상기 적어도 2개의 명령 큐들로부터 상기 적어도 2개의 저장 채널 큐들로 I/O 명령들을 제공하도록 구성된다. 상기 통지 로직은, 각각의 완료된 I/O 명령들의 시퀀스 태그들를 기반으로, 상기 호스트에 명령 완료 통지들을 제공하도록 구성된다.
따라서, 호스트 시스템과 저장 장치 사이에서의 순차적 I/O 명령 관리가 가능하다.
본 발명의 이러한 또한 다른 특징들 및 양상들은 명세서, 청구항, 및 첨부된 도면들을 참고하여 이해될 것이다. 여기에서:
도 1은 본 발명의 예시 실시예에 따른 장치들을 포함하는 정보 처리 시스템의 개략적인 블록도이다.
도 2는 컴퓨터 시스템을 위한 I/O 명령 처리 기술을 도시하는 예시 순서도이다.
도 3은 I/O 명령을 처리하기 위한 컴퓨팅 시스템의 예시 블록도이다.
도 4는 본 발명의 예시 실시예에 따라 순서대로 I/O 명령들을 처리하기 위해 이용되는 컴퓨터 시스템을 위한 I/O 명령 처리 기술을 도시하는 예시 순서도이다.
도 5는 본 발명의 예시 실시예에 따라 순서대로 I/O 명령들을 처리하기 위한 컴퓨팅 시스템의 예시 블록도이다.
도 6은 본 발명의 예시 실시예에 따라 호스트에게 순서대로 완료된 I/O 동작들이 통지되는 것을 보장하는 과정의 예시 블록도이다.
도 7은 본 발명의 예시 실시예에 따라 저장 장치가 순서대로 I/O 명령 완료 통지들을 처리하는 예시 순서도이다.
다양한 예시 실시예들이, 일부 예시 실시예들이 도시된 첨부 도면을 참고하여 하기에 보다 자세히 기술될 것이다. 본 개시된 내용은, 그러나, 많은 서로 다른 형태들로 구현될 수 있으며, 본원에서 설명되는 예시 실시예들에 한정되지 않는 것으로 해석되어야 한다. 오히려, 이러한 예시 실시예들은 본 개시가 면밀하고 완전하도록 제공되며, 당업자에게 본 개시된 내용의 범위를 자세히 전달할 것이다. 도면에서, 층들과 영역들의 크기들과 상대 크기들은 명확성을 위해 과장될 수 있다.
요소 또는 층이 다른 요소 또는 층의 “위에 있다”, “연결된다”, 또는 “결합된다”라고 언급될 때, 이는 그 다른 요소 또는 층의 직접 위에 있거나, 연결되거나, 결합되거나, 또는 중간에 또 다른 요소들이나 층들이 존재할 수 있음을 의미한다. 요소가 다른 요소 또는 층의 “바로 위에 있다”, “직접 연결된다”, 또는 “직접 결합된다”라고 언급될 때, 그 중간에 다른 요소나 층이 존재하지 않는다. 유사한 참조부호들은 본원을 통하여 유사한 요소들을 지칭한다. 본원에서 사용되듯이, 용어 “및/또는”는 연관된 나열된 항목의 하나 이상의 어떤 및 모든 조합들을 포함한다.
용어들 제1, 제2, 제3 등은 본원에서 다양한 요소들, 부품들, 영역들, 층들, 및/또는 구간들을 기술하기 위해 사용될 수 있지만, 이러한 요소들, 부품들, 영역들, 층들, 및/또는 구간들이 이러한 용어에 의해서 한정되지 않아야 함을 이해하여야 한다. 이러한 용어들은 단지 하나의 요소, 부품, 영역, 층, 또는 구간을 다른 영역, 층, 또는 구간으로부터 구별하기 위하여 사용된다. 따라서, 하기에서 논의되는 제1 요소, 부품, 영역, 층, 또는 구간은 본 개시된 내용의 교시를 벗어나지 않고 제2 요소, 부품, 영역, 층, 또는 구간으로 지칭될 수 있다.
“바로 아래의”, “아래의”, “하부의”, “위의”, “상부의” 등의 공간적으로 상대적인 용어가 도면에 도시된 바와 같은 다른 요소(들) 또는 특징(들)에 대한 하나의 요소 또는 특징의 관계를 기술하기 위해 용이한 기술을 위해서 본원에서 사용될 수 있다. 상기 공간적으로 상대적인 용어들은 도면에 도시된 방향에 부가적으로 사용시 또는 작동 시에 장치의 서로 다른 방향들을 포함하도록 의도된다. 예를 들어, 도면들의 장치가 뒤집어지면, 다른 요소들 또는 특징들의 “아래의” 또는 “바로 아래의”로서 기술되면 요소들은 다른 요소들 또는 특징들의 “위의” 방향이 될 것이다. 따라서, 예시적인 용어 “아래의”는 위의 또는 아래의 모든 방향을 포함할 수 있다. 이 장치의 방향은 다르게 향할 수 있으며(90도 또는 다른 방향으로 회전), 본원에서 사용되는 공간적으로 상대적인 기술적인 표현들은 이에 따라 해석된다.
본원에서 사용되는 용어는 단지 특별한 예시 실시예들을 기술하는 것을 목적으로 하며, 본 개시된 내용을 한정하는 것을 의도하지는 않는다. 본원에서 사용되는 바와 같이, 문맥이 명확히 다르게 지칭하지 않는 한, 단수 형태들 “하나의(a, an)”및 “상기(the)”는 또한 복수 형태들을 포함한다. 본 명세서에서 사용될 때, 용어 “포함하다” 및/또는 “포함하는”은 언급된 특징, 정수, 단계, 동작, 요소, 및/또는 부품의 존재를 규정하며, 하나 이상의 다른 특징들, 정수들, 단계들, 동작들, 요소들, 부품들, 및/또는 그룹들의 존재 또는 부가를 배제하지 않는다.
본원에서 예시 실시예들은 이상화된 예시 실시예들(및 중간 구조들)의 개략적인 도시들인 단면도들을 참고하여 기술된다. 이렇듯이, 예를 들어, 제조 기술들 및/또는 공차들의 결과로서 도시들의 형상들의의 변형예들이 기대된다. 따라서, 예시 실시예들은 본원에 도시된 영역들의 특별한 형상들로 한정되는 것으로 해석되어서는 아니되며, 예를 들어, 제조의 결과인 형상들의 편차들을 포함한다. 예를 들어, 직사각형으로 도시된 이식 영역(implanted region)은, 전형적으로, 그 엣지들에서 이식으로부터 비(non)이식 영역으로 가는 이진 변화(binary change)보다는 라운딩된 또는 곡선의 특징들 및/또는 착상 집중에 있어서의 구배를 가질 것이다. 유사하게, 이식에 의해 형성된 묻힌 영역(buried region)은 묻힌 영역과 이식이 발생하는 표면 사이의 영역에서 어떤 이식을 가져올 수 있다. 따라서, 성질과 그 형상에 있어서 개략적인 도면들에 도시된 영역들은 장치의 영역의 실제 형상들을 도시하는 것을 의도하는 것이 아니고 또한 본 개시된 내용의 범위를 한정하는 것을 의도하지 않는다.
달리 정의되지 않으면, 본원에서 사용되는 (기술적 및 과학적 용어를 포함하는) 모든 용어들은 개시된 내용이 속하는 당업자에 의하여 통상적으로 이해되는 바와 같이 동일한 의미를 가진다. 통상적으로 이용되는 사전에서 정의된 것들과 같은 용어들은 관련 분야의 문맥에서의 그 의미와 일치하는 의미를 갖는 것으로 해석되어야 하며 본원에서 그와 같이 표현적으로 정의되지 않는 한 이상화된 지나치게 형식적인 의미로 해석되지 않아야 함을 또한 이해하여야 한다.
하기에서, 예시 실시예들이 첨부된 도면을 참고하여 자세히 설명될 것이다.
도 1은 본 개시된 내용의 원리들에 따라 형성된 반도체 장치들을 포함할 수 있는 정보 처리 시스템(100)의 개략적인 블록도이다.
도 1을 참조하면, 정보 처리 시스템(100)은 본 개시된 내용의 원리에 따라 구성된 장치들의 하나 이상을 포함할 수 있다. 하나 이상의 실시예에서, 정보 처리 시스템(100)은 본 개시된 내용의 원리들에 따라 하나 이상의 기술들을 채용하거나 실행할 수 있다.
다양한 실시예에서, 정보 처리 시스템(100)은, 예를 들어, 랩탑, 데스크탑, 워크스테이션, 서버, 블레이드 서버, 퍼스널 디지털 어시스턴트, 스마트폰, 태블릿, 및 다른 적절한 컴퓨터들, 또는 그 가상 머신, 또는 가상 컴퓨팅 장치와 같은 컴퓨팅 장치를 포함할 수 있다. 다양한 실시예들에서, 정보 처리 시스템(100)은 유저에 의해 사용될 수 있다.
본 개시된 내용에 따른 정보 처리 장치(100)는 중앙 처리 장치(CPU), 로직, 또는 프로세서(110)를 더 포함할 수 있다. 일부 실시예들에서, 프로세서(110)는 하나 이상의 기능 유닛 블록들(functional unit blocks)(FUBs) 또는 조합 로직 블록들(combinational logic blocks)(CLBs)(115)을 포함할 수 있다. 이러한 실시예에서, 조합 로직 블록은 다양한 부울린 로직 동작들(예: NAND, NOR, NOT, XOR), 안정화 로직 장치들(예: 플립 플롭, 래치), 기타 로직 장치들, 또는 그 조합을 포함할 수 있다. 이러한 조합 로직 동작들은 원하는 결과를 얻기 위하여 입력 신호들을 처리하는 단순한 또는 복잡한 방식으로 구성될 수 있다. 몇몇 동기화된 조합 로직 동작들의 도시된 예시들이 기술되어 있으나, 본 개시된 내용은 한정적이 아니며 비동기 동작 또는 그 조합을 포함함을 이해하여야 한다. 일 실시예에서, 조합 로직 동작들은 복수의 CMOS(complementary metal oxide semiconductor) 트랜지스터들을 포함할 수 있다. 다양한 실시예에서, 본 개시된 내용의 범위 내에 있으면서 다른 기술들이 사용될 수 있지만, 이러한 CMOS 트랜지스터들은 로직 동작들을 수행하는 게이트들 내에 배열될 수 있다.
본 개시된 내용에 따른 정보 처리 시스템(100)은 휘발성 메모리(120)(예: RAM(random access memory)를 더 포함할 수 있다. 본 개시된 내용에 따른 정보 처리 시스템(100)은 비휘발성 메모리(130)(예: 하드 드라이브, 광학 메모리, NAND 또는 플래시 메모리, 및/또는 기타 솔리드 스테이트 메모리)를 더 포함할 수 있다. 일부 실시예들에서, 휘발성 메모리(120), 비휘발성 메모리(130) 또는 그 조합 또는 일부들이 “저장 매체”로서 지칭될 수 있다. 다양한 실시예에서, 휘발성 메모리(120) 및/또는 비휘발성 메모리(130)는 반영구적 또는 실질적으로 영구적인 형태로 데이터를 저장하도록 구성될 수 있다.
다양한 실시예들에서, 정보 처리 시스템(100)은 정보 처리 시스템(100)을 유선 및/또는 무선 및/또는 셀룰러 프로토콜을 통해 통신 네트워크의 일부이거나 그를 통해 통신하도록 구성된 하나 이상의 네트워크 인터페이스들(140)을 포함할 수 있다. 무선 프로토콜의 예시는, 한정적이지 않지만, IEEE(Institute of Electrical and Electronics Engineers) 802.11g, IEEE 802.11n을 포함할 수 있다. 셀룰러 프로토콜의 예시들은, 한정적이지 않지만, 다음을 포함할 수 있다: IEEE 802.16m (a.k.a. Wireless-MAN (Metropolitan Area Network) Advanced, Long Term Evolution (LTE) Advanced, Enhanced Data rates for GSM (Global System for Mobile Communications) Evolution (EDGE), Evolved High-Speed Packet Access (HSPA+). 유선 프로토콜의 예시들은, 한정적이지 않지만, IEEE 802.3 (a.k.a. Ethernet), Fibre Channel, Power Line communication (예: HomePlug, IEEE 1901)을 포함할 수 있다. 상기는, 단지 본 개시된 내용이 한정되지 않는, 몇몇 도시적 예시임을 이해하여야 한다. 네트워크 인터페이스들(140)을 통해 네트워크에 연결되는 결과로, 정보 처리 시스템(100)은 스탠드 얼론 네트워크 자원들이던 외부 추가 시스템의 부품들이던, 예를 들어, 외부 휘발성 메모리, 비휘발성 메모리, 프로세서/로직, 및 소프트웨어와 같은 다른 자원에 접속할 수 있다.
본 개시된 내용에 따른 정보 처리 시스템(100)은 유저 인터페이스 유닛(150)(예: 디스플레이 어댑터, 햅틱 인터페이스, 및/또는 휴먼 인터페이스 장치)을 더 포함할 수 있다. 다양한 실시예들에서, 이 유저 인터페이스 유닛(150)은 유저로부터 입력을 받거나 및/또는 유저에게 출력을 제공하도록 구성될 수 있다. 다른 종류의 장치들이 또한 유저와의 인터랙션을 제공하기 위해 사용될 수 있다; 예를 들자면, 유저에게 제공되는 피드백은, 감각적인 피드백, 예를 들어, 시각적 피드백, 청각적 피드백, 및/또는 촉각 피드백의 어떤 형태일 수 있다; 그리고 유저로부터의 입력은 음향적, 구두적, 및 촉각적 입력을 포함하는 어떤 형태로 받을 수 있다.
다양한 실시예들에서, 정보 처리 시스템(100)은 하나 이상의 장치들 또는 하드웨어 부품들(160)(예: 디스플레이 또는 모니터, 키보드, 마우스, 카메라, 지문 리더, 및/또는 비디오 프로세서)을 포함할 수 있다. 상기는, 단지 본 개시된 내용이 한정되지 않는, 몇몇 도시적 예시임을 이해하여야 한다.
본 개시된 내용에 따른 정보 처리 시스템(100)은 하나 이상의 시스템 버스들(105)을 더 포함할 수 있다. 이러한 실시예에서, 시스템 버스(105)는 프로세서(110), 휘발성 메모리(120), 비휘발성 메모리(130), 네트워크 인터페이스(140), 유저 인터페이스 유닛(150), 및 하나 이상의 하드웨어 부품들(160)을 통신적으로 결합하도록 구성될 수 있다. 프로세서(110)에 의해 처리되는 데이터 또는 비휘발성 메모리(130)의 외부에서 입력되는 데이터는 비휘발성 메모리(130) 또는 휘발성 메모리(120)에 저장될 수 있다.
다양한 실시예들에서, 정보 처리 시스템(100)은 하나 이상의 소프트웨어 부품들(170)을 포함하거나 실행할 수 있다. 일부 실시예들에서, 소프트웨어 부품들(170)은 OS(operating system) 및/또는 애플리케이션을 포함할 수 있다. 일부 실시예들에서, OS는 애플리케이션에 하나 이상의 서비스들을 제공하고, 애플리케이션과 정보 처리 시스템(100)의 다양한 하드웨어 부품들(예: 프로세서(110) 및/또는 네트워크 인터페이스(140)) 사이의 중재자(intermediary)를 관리하고 그로서 동작하도록 구성될 수 있다. 이러한 실시예에서, 정보 처리 시스템(100)은 국부적으로(예: 비휘발성 메모리(130) 내에) 설치되고, 프로세서(110)에 의해 직접 실행될 수 있으며 OS와 직접 인터랙션하도록 구성된 하나 이상의 네이티브 애플리케이션을 포함한다. 이러한 실시예에서, 네이티브 애플리케이션들은 미리 컴파일된 기계 실행 코드를 포함할 수 있다. 일부 실시예들에서, 네이티브 애플리케이션들은, 소스 또는 객체 코드를 프로세서(110)에 의해 실행되는 실행 가능한 코드로 변환하도록 구성된 스크립트 인터프리터(예: C shell (csh), AppleScript, AutoHotkey), 및/또는 VM(virtual execution machine)(예: the Java Virtual Machine, the Microsoft Common Language Runtime)을 포함할 수 있다.
본원에서 논의된 바와 같이, 장치는 다양한 태스크들 수행하도록 구성된 로직들을 포함할 수 있다. 로직은 하드웨어, 소프트웨어, 또는 그 조합으로서 구현될 수 있다. 로직이 하드웨어를 포함할 때, 그 하드웨어는 전문적인 회로 배열(예: ASICS), 게이트 로직들 및 메모리들의 프로그래머블 어레이들(예: FPGA), 또는 특별히 프로그램된 범용 로직(예: CPU 및 GPU)의 형태일 수 있다. 로직이 소프트웨어를 포함할 때, 그 소프트웨어는 전문적인 회로들을 동작시키거나, 회로들 및 메모리들의 어레이들을 프로그램하거나 범용 프로세서들을 동작시키도록 구성될 수 있다. 소프트웨어로 구현되는 로직은 DRAM, 플래시, EEPROM, 저항 메모리(resistive memory) 및/또는 등과 같은 어떤 이용 가능한 저장 매체 상에 저장될 수 있다.
도 2는 I/O 명령들의 처리를 조정하기 위해 SSD(solid state drive)(220)와 통신하기 위한 호스트(205)의 메커니즘의 실시예를 도시한다. 도 3은 도 2에 기술된 방법을 수행할 수 있는 호스트(205)와 SSD(210)의 실시예의 블록도를 도시한다. 일부 실시예들에서, 호스트(205)는 도 1의 컴퓨팅 시스템(100)과 유사할 수 있다. SSD(210)는 휘발성 메모리(120) 또는 비휘발성 메모리(130)로서 또는 도 1의 네트워크 인터페이스(140)에 이용 가능한 자원으로서 기능할 수 있다. I/O 명령들은, 키 값 기반 명령, 명령 기반의 로직 블록 주소(LBA), 및/또는 기타를 포함하는 I/O 명령의 어떤 종류일 수 있다.
이제 도 2 및 도 3을 참조하면, 예시 메커니즘에 따르면, 호스트(205)는 오퍼레이팅 시스템 또는 스레드(310)로서 호스트(205) 상에서 작동하는 다양한 애플리케이션들(305)에 의해 제공되는 I/O 명령들을 트래킹하는 역할을 맡고 있다. 하기에 보다 자세히 개시되는 바와 같이, 호스트(205)는 SSD(210)에 의한 명령들의 발생할 수 있는 비정상 처리에 의해 야기되는 I/O 에러들을 방지하는 역할을 맡고 있다. 이러한 에러들은, 한정되지는 않으나, 다음을 포함한다: 불법적인 오버라이팅(여기서 오래된 데이터가 새로운 데이터를 오버라이팅한다), 오래된 데이터를 리딩(여기서 라이팅 후에 리딩이 제공되나, 라이팅 전에 처리된다), 및 애플리케이션들에 비정상 통지들(여기서 애플리케이션에 실제로 발생한 액션으로부터 비정상적인 액션들의 시퀀스를 알리며, 애플리케이션이 발생하지 않았을 때 에러가 발생되었다고 믿게 하거나 발생했을 때 에러가 발생된 것을 믿지 않게 한다). 하기에 보다 상세히 기술되는 바와 같이, 호스트는, 다른 것보다는, SSD 자원들 상에 로크들(locks)를 제공하고(예: 큐들을 로킹함), 호스트가 의존하는 명령의 완료 통지를 받을 때까지 종속된 명령들(예: 이어 일어나며 따라서 이전의 라이팅에 종속된 리딩)의 제공을 늦추어 이를 할 수 있다.
프로세스 215에서, 호스트(205)는, OS에 의해 제공된 I/O 명령들 또는 호스트(205)를 이용한 애플리케이션들(305)과 같은, (궁극적으로는 명령들(345a-d)인) I/O 명령들을 제공할 준비를 하고, I/O 명령들이 제공된 순서와 I/O 명령들을 제공하는 애플리케이션들의 정체성을 트래킹한다. 프로세스 215 동안에, (수신 순서 및 제공하는 애플리케이션의 표시와 함께) I/O 명령들은, 처리를 위해, 도 1의 휘발성 메모리(120)와 같은, 메모리에 스테이징될 수 있다.
프로세스 220에서, I/O 명령들은 순서대로 SSD로 보내진다. 보내는 동작은 I/O 명령들을, SSD(210) 상의 명령 큐들(325) 내로 리딩되며 이와 연관되는 하나 이상의 호스트측 I/O 제출 큐들(320) 내로 제공함으로써 이루어질 수 있다. I/O 명령들은 복수의 I/O 제출 큐들(320a-b)에 제공될 수 있다; 2개의 큐가 도시되어 있으나, 2개를 넘는 어떤 수도 또한 가능하다. I/O 명령들은, 프로세서 코어/스레드들(310)과 특별한 큐의 연관에 의한, 애플리케이션/OS(305)와 특별한 큐의 연관에 의한, 및/또는 (I/O 큐(320)를 결정하기 위해 키 값 페어의 키를 해싱하는 것과 같이) 해싱 로직(315)을 통하는 것을 포함하는 다양한 메커니즘들에 의해 I/O 큐들(320a-b)에 제공될 수 있다. 순서대로 I/O 명령을 보내는 동작은 보내진 I/O 명령이 종속되는 I/O 명령이 완료될 때까지 또는 자원 상의 로크가 해제될 때까지 대기하는 것을 포함할 수 있다.
프로세스 225에서, SSD(210)는 I/O 명령들(345a-d)에 도시된 I/O 명령들을 수신하고 버퍼링한다. 4개의 명령이 도시되어 있으나, 어떤 적당한 수도 당업자에게 가능하다. I/O 명령들(345a-d)이 각각의 타임 마커들(t1-t4)를 갖도록 도시되어 있으나, 이는 단지 개념도 목적이며 시스템의 프로세스를 의미하지 않는다. 명령들은, 또한 명령(리드 또는 라이트)의 성질과, 그것이 연관된 주소를 표시하기 위하여 각각 라벨들 W2, W1, R1, W3로 마킹된다. 이 마킹은 예시 명령들(345a-d)을 단지 기술하며, 시스템의 프로세스를 표시하는 것이 의도되지는 않는다. 명령들(345a-d)은, 호스트(205) 상의 I/O 제출 큐들(320a-b)의 각각의 세트에 해당하는 하나 이상의 명령 큐들(325a-b)에서 SSD(210)에 내부적으로 버퍼링되거나 저장될 수 있다. 호스트와 마찬가지로, 2개의 큐가 도시되어 있으나, 또한 더 많은 큐가 가능하다. 명령 큐들(325a-b)은 라운드 로빈 방식으로 저장 장치에서 명령 핸들러 로직(330)에 의한 처리를 위해(예: 솔리드 스테이트 메모리로부터 실질적인 검색을 위해) 가져온 그 I/O 명령들(345a-d)을 가질 수 있다. 이 명령 핸들러 로직(330)은 저장 장치 컨트롤러 회로(미도시)에서 구현될 수 있다. 이 라운드 로빈 처리는 SSD(210)를 어떤 주어진 큐(및 연관된 애플리케이션)가 독점하는 방지하거나 실질적으로 방지한다.
프로세스 230에서, SSD의 명령 큐들(325a-b)로부터 가져온 명령들(340a-d)은, 채널들(335a-b) 상에 배치된 플래시 메모리들에 의한 실제적인 수행을 위하여 복수의 SSD(210)의 메모리 장치 채널 큐(340a-b)로, 명령 핸들러 로직(330)에 의해, 제공될 수 있다(플래시 메모리는 하나 이상의 실시예들이 사용하는 많은 가능한 솔리드 스테이트 저장 메모리들 중의 하나의 예시이다).
예시에 의하여, 일부 실시예들에서, SSD(210) 내에서, 물리적인 솔리드 스테이트 메모리들(예: 플래시 메모리 칩)는, I/O 명령들의 병렬 처리를 허용하기 위해, SSD 상의 다수의 병렬 물리 채널들 내로 제공된다. 이는 물리적 채널들(예: 물리적 채널들 또는 플래시 채널들)(335a,b)을 차지하는 플래시 칩들을 갖도록 도시되어 있다(4개의 칩을 갖는 2개의 채널(335a-b)이 도시되어 있으나, 더 많은 채널과 다른 수의 칩들이 가능하다). 345a-b와 같은 I/O 명령들이 처리를 위한 물리적 메모리로 보내질 때, 이들은 각각의 물리적 채널들(335a,b)와 연관된 한 세트의 메모리 장치 채널 큐들(340a-b) 내로 배치될 수 있다. I/O 명령들은 각각의 I/O 명령과 연관된 물리적 주소(들)를 기반으로 하나 이상의 특정 메모리 장치 채널 큐(340a-b)로 보내질 수 있다. 예시에 의하여, 345a-d 중의 하나와 같은 I/O 명령이 처리되고자 할 때, 명령 핸들러 로직(330)은 그 명령에 연관된 물리적 주소를 결정하고, 물리적 주소를 포함하는 (채널들(335a b) 상의 플래시 칩과 같은) 메모리를 내장하는 하나 이상의 메모리 장치 채널 큐들(340a-b)을 결정하고, 이러한 주소를 갖는 메모리들과 연관된 채널 큐들(340a-b)에 I/O 명령을 제공할 수 있다.
도 3의 예시에서, 명령들(345a-d)의 물리적 처리는 채널 큐들(340a-b)에의 물리적 주소가 결정된 제공와 조합하여, 명령 핸들러 로직(330)에 의한 라운드 로빈 큐 페칭의 조합으로 인하여 비정상으로 이루어질 수 있음을 유의해야 한다. 예를 들어, 채널 큐(340a)는 명령(345a)(t1, W2)을 수신하고, 채널 큐(340b)는 라운드 로빈 페칭으로 인하여, 명령(345b) 앞에 명령(345d)이 오면서, 명령들(345b)(t2, W1) 및 345d(t4, W3)을 수신함을 유의해야 한다. 따라서, 명령들(345a,345d)은 그 각각의 채널 큐들(340a-b)의 맨 앞에 위치한다. 따라서, (특히, 명령(345d)이 “작은” 라이트 명령이면) 명령(345d)이 명령(345a) 앞에서 완료되는 것이 매우 가능하다. 이 비정상적인 처리는 솔리드 스테이트 메모리에 요구되는 어떤 배경 동작들에 의해 악화될 수 있다. 예를 들어, 채널(335a)에 있는 플래시 칩 상에서 가비지(garbage)가 수집되어야 한다면, 채널(335a)의 전체와, 연관된 채널 큐(340a)(및 다른 채널도 가능함)는 명령을 처리에 이용될 수 없는 반면, 가비지 수집으로 점유되지 않은 다른 채널들은 자유롭게 그 각각의 큐들(340)을 처리한다.
이제 도 2 및 도 3을 다시 참조하면, 프로세스 235에서, 통지 로직(350)을 통하여, SSD(210)는, I/O 명령들(345a-d)을 SSD가 완료시키는 순서로(즉, 상술한 바와 같이, 가능성상으로 비정상적일 수 있음), 완료된 I/O 명령(345a-d)의 호스트(205)에 통지한다. 도시된 실시예에서, 통지들의 순서는 345d일 것이며, 다음으로 345a, 다음으로 345b(345c는 아직 완료되지 않음)일 것이다. 통지 로직(350)은 SSD(210)의 저장 컨트롤러(미도시) 내에 포함될 수 있다.
프로세스 225에서, 호스트(205)는 SSD가 보내는 순서로(즉, 가능성상으로 비정상적일 수 있음) SSD(210)로부터 받은 I/O 완료 통지들을 받는다. 예를 들어, 도 3에 도시된 바와 같이, 명령 완료 통지의 순서는 345d, 345a, 다음으로 345b이며, 명령 345c는 아직 처리되지 않았다. 호스트는 이후 타이밍/일치 에러가 발생하지 않았다는 것을 필요로 하는 완료 통지를 모으고, I/O 명령 요청을 디스테이징하고, 애플리케이션/OS(305)이 들어오도록 요청하는 순서로(즉, 순서: 345a, 345b, 및 345d를 통지하기 전의 대기 중인 345c) 애플리케이션/OS(305)에 I/O 완료 통지들을 보낸다. 자원들 상의 로크들이 해제될 수 있다. 가능한 일치 에러들이 감지되면, I/O 요청들은 디스테이징되기보다는 반복되고, 애플리케이션/OS(305)는 완료 통지를 보고받지 않는다.
도 2 및 도 3, 및 그와 연관된 논의를 참조하여 알 수 있듯이, 주어진 애플리케이션으로부터 주어진 주소로의 일련의 I/O 명령들은 단일의 호스트측 I/O 큐(320), 단일의 SSD 명령 큐(325), 및 미리 정해진 세트의 채널 큐들(34)에 한정될 것이므로, 상술한 메커니즘은 일반적으로 일치 에러들의 가장 심각한 형태들을 피할 수 있다. 또한, 인터-애플리케이션 일치 에러는 하나 이상의 큐들의 로킹을 통하여 감소될 수 있다. 여전히, 이 메커니즘은 호스트로부터의 실질적인 자원 활용을 요하며, SSD 내에서 비효율을 야기할 수 있다. 특히, 호스트는 받은 순서에 따라 모든 I/O 요청들을 스테이징하고 디스테이징하여야 하며, 일치 에러들이 발생하지 않았다고 보장하기에 충분한 트랙 완료 통지들을 트래킹해야 한다. 또한, 큐의 로킹은 주어진 시간에 큐에 의해 처리될 수 있는 I/O들의 전반적인 수를 줄이고, 명령 큐들(325a-b)로부터 채널 큐들(340)로의 I/O 명령들(345a-d)의 라운드 로빈 제공은 하나 이상의 이러한 큐들을 충분히 이용되지 않은 상태로 남겨 둘 수 있다.
도 4는 호스트 오버헤드가 감소한 상태로 I/O 명령들의 처리를 조정하기 위해 SSD(solid state drive)(210')와 통신하기 위한 호스트(205')의 메커니즘의 실시예를 도시한다. 도 5은 도 4에 기술된 방법을 수행할 수 있는 호스트(205')와 SSD(210')의 실시예의 블록도를 도시한다. 일부 실시예들에서, 호스트(205')는 도 1의 컴퓨팅 시스템(100)과 유사할 수 있다. SSD(210')는 도 1의 휘발성 메모리(120) 또는 비휘발성 메모리(130)로서 또는 네트워크 인터페이스(140)에 이용 가능한 자원으로서 기능할 수 있다. I/O 명령들은, 키 값 기반 명령, 명령 기반의 로직 블록 주소(LBA), 또는 기타를 포함하는 I/O 명령의 어떤 종류일 수 있다.
하기에 더 도시되는 바와 같이, 도 4 내지 도 5에 도시된 예시 실시예들은 SSD(210')가 정의된 순서로 호스트(205')로부터 I/O 명령들을 받고 그 동일한 순서로 명령의 완료들을 호스트(205')에 통지하도록 구성된다. 이는 도 3 내지 4에 대하여 상술한 호스트측 I/O 관리의 많은 부분을 먼저 처리하게 하고, SSD(210')가 그 자신의 내부 자원을 보다 효율적으로 사용하게 한다.
도 4 내지 도 5를 참고하면, 프로세스 405에서, 호스트(205')는 애플리케이션/OS(505)에 의해 발생되는 순서로 I/O 명령들을 SSD(210')로 보낸다. 이러한 보내는 동작은, SSD(210') 상의 명령 큐들(525a-c) 내로 리딩되며 이와 연관된 하나 이상의 호스트측 I/O 제출 큐들(520a-c)을 통할 수 있다. I/O 명령들은 복수의 I/O 제출 큐들(520a-c) 내에 제공될 수 있다; 3개의 큐가 도시되어 있으나, 2개를 초과하는 어떤 수도 가능하다. I/O 요청들은, 직접 프로세서 코어/스레드들(510)과 특별한 큐의 연관에 의해 및/또는 애플리케이션/OS(505)과 특별한 큐의 연관에 의해 I/O 제출 큐들(520a-c)에 제공될 수 있다. 프로세스 405의 보내는 동작의 결과로, 명령들(545a-h)이 SSD(210')의 명령 큐들(525a-c)에 배치된다.
하기에서 보다 용이하게 분명해 지듯이, 본 실시예에서, 호스트(205')는 I/O 명령들을 직접 최소 처리에 단순히 큐잉할 수 있으며, (제공하는 순서의 트래킹 및 제공자의 확인을 포함하는) I/O 요청들을 스테이징하거나, 자원을 로킹하거나, 완료 시에 I/O 요청들을 디스테이징하거나, I/O 완료 통지들의 순서 및/또는 일치를 모니터링하여, .호스트 자원을 유용하게 만들 필요가 없다.
일부 실시예들에서, 프로세스 405에서, 각각의 I/O 명령은, 시퀀스 태그라고 불릴 수 있는, 각각의 I/O 명령이 보내지는 순서에 의해 결정되는 타임 스탬프 또는 기타 순차적 수와 연관된다. 타임 스탬프 또는 순차적 수(시퀀스 태그)는 시퀀스 태그 발생기 로직(546)에 의해 발생될 수 있다. 시퀀스 태그 발생기 로직(546)은 호스트(205') 또는 SSD(201') 상에 배치될 수 있다. 호스트(205')가 시퀀스 태그 발생기 로직(546)을 포함하는 실시예들에서, 시퀀스 태그는 I/O 명령과 함께 SSD(210')로 보내진다. 호스트(205')가 시퀀스 태그 발생기 로직(546)을 포함하는 실시예들에서, 시퀀스 태그 발생기는, I/O 명령이 한 세트의 로직 블록 주소(LBA) 지향 동작들로 분해될 수 있으면, 모든 분해된 명령들은 연속적인 시퀀스 태그를 이용하는 것을 보장하기 위해 사용될 수 있다. SSD(210')가 시퀀스 태그 발생기 로직(546)을 포함하는 실시예들에서, I/O 명령은 시퀀스 태그를 갖고 호스트(205')로 보내질 필요가 없다; 시퀀스 태그들은, SSD(210')가 받으면, I/O 명령에 추가된다. 시퀀스 태그들는 태그들(t1 내지 t8)로서 명령들(545a-h) 상에 도시된다. 시퀀스 태그 발생기 로직(546)이 SSD(210') 상에 배치되는 다양한 실시예에서, 부분적으로 어디에 시퀀스 태그(및/또는 그 I/O 명령과의 연관)가 저장되는지에 따라, 시퀀스 태그 발생기 로직(546)은 인텍스 로직, 명령 핸들러 로직, 및/또는 명령 큐와 통신할 수 있다.
이제 도 5를 참조하면, I/O 명령들(545a-h)은 각각의 시퀀스 태그들(t1-t8)과 연관됨을 유의하여야 한다. 명령은 각각의 I/O 명령 제출 큐들(520a-c)과 연관된 명령 큐들(525a-c)에 제공되어 있으며, 이는 다시 유저/OS I/O 스레드들(510)과 연관된다. 각각의 큐 내에서, I/O 명령들(545a-h)은 시간 순서이나, 큐에 걸쳐, 특정한 순서는 없음을 또한 유의하여야 한다. 각각의 I/O 명령들(545a-h)은 예시 동작 타입(리드와 라이트) 및 주소(EG 1-3)를 갖도록 도시되어 있음에 또한 유의하여야 한다. 이는 실시예들의 효과들을 도시하는 목적이며, 실시예의 어떤 동작을 반영하지는 않는다.
도 5를 더 참조하면, SSD(210')는 인덱싱 로직(533)을 포함한다. 인덱싱 로직(533)은 시퀀스 태그 순서로 명령 큐들(525a-c)에서 모든 I/O 명령들(545a-h)을 인덱싱하고, 시퀀스 태그들이 특정 I/O 명령들(545a-h)과 연관되는 메커니즘일 수 있다. 인덱싱 로직(533)은 민힙(min-heap) 인덱스를 포함할 수 있으나, 많은 다른 인덱스 또한 충분할 것이다. 일부 실시예들에서, 인덱싱 로직(533)은, 후술하는 바와 같이, 물리적 메모리 채널들(535a-b)와, 그와 연관된 큐(540a,b)의 액션들을 또한 트래킹할 수 있으나, 다른 실시예들에서, (또한 하기 논의되듯이) 다른 로직이 이러한 액션들을 트래킹할 수 있다. SSD(210')는 명령 핸들러 로직(530)을 또한 포함한다. 인덱싱 로직(533)은 인덱스(미도시)를 내장하기 위한 인덱스 메모리를 더 포함하거나 그와 통신할 수 있다. 인덱싱 로직(533)은 시퀀스 태그 발생기 로직(546), 명령 핸들러 로직(530), 및/또는 명령 큐들(525a-c)과 또한 통신할 수 있다.
도 4 내지 도 5를 이제 다시 참조하면, 프로세스 410에서, 명령 핸들러 로직(530)은 시퀀스 태그 순서로 명령 큐들(525a-c)로부터 I/O 명령들(545a-h)을 페칭하고, 각각의 특정 I/O 명령(545a-h)과 연관된 물리적 블록 주소들을 결정하고, 각각의 물리적 저장 채널들(즉, 물리적 채널)(535a,b)과 연관된 하나 이상의 물리적 채널 큐들(540a-b) 내에 각각의 특정 I/O 명령(545a-h)을 (페칭 순서로) 제공하고, 각각의 물리적 저장 채널들은 다시 결정된 물리적 주소와 연관된 솔리드 스테이트 칩들을 포함할 수 있다.
예시에 의하여, 일부 실시예들에서, SSD(210') 내에서, 물리적인 솔리드 스테이트 메모리들(예: 플래시 메모리 칩)은, I/O 명령의 병렬 처리를 허용하기 위해, SSD 상의 다수의 병렬 물리 채널들 내로 제공된다. 이는 물리적 채널(535a,b)(2개의 채널(535a-b), 그러나 더 많은 채널들과 다른 수의 칩이 가능함)을 차지하는 플래시 칩들을 갖도록 도시되어 있으며, 4개의 칩이 도시된다. 545a-h와 같은 I/O 명령들이 처리를 위한 물리적 메모리로 보내질 때, 이들은 한 세트의 메모리 장치 물리적 채널 큐들(540a-b) 내로 제공될 수 있다. I/O 명령들은 각각의 I/O 명령과 연관된 물리적 주소(들)를 기반으로 하나 이상의 특정 메모리 장치 물리적 채널 큐들(540a-b)로 보내질 수 있다. 예시에 의하여, 545a-d 중의 하나와 같은 I/O 명령이 처리되고자 할 때, 명령 핸들러 로직(530)은 그 명령에 연관된 물리적 주소들을 결정하고, 물리적 주소를 포함하는 (물리적 채널들(535a-b) 상의 플래시 칩들과 같은) 메모리를 내장하는 하나 이상의 메모리 장치 채널 큐들(540a-b)을 결정하고, 이러한 주소를 갖는 메모리들과 연관된 채널 큐들(540a-b)에 I/O 명령을 제공할 수 있다.
명령 핸들러 로직(530)은, I/O 명령 큐들(525a-c)부터의 명령들을 태그 시퀀스 순서로 물리적 채널 큐들(540a,b) 내로 처리하는 것을 보장하기 위해 인덱싱 로직(533)을 이용할 수 있다. 특정 I/O 명령(545a-h)을 채널 큐들(540a,b)로 제공하면, I/O 명령은 인덱스(553)로부터 또한 명령 큐들(525a-c)로부터 제거된다. I/O 명령이 채널 큐들(540a,b) 내로 제공될 때, 하기에 더 논의되는 바와 같이, 통지 관리자 로직(550)의 I/O 시퀀서 로직(551)에 있는 인덱스(미도시)에 의해 인덱싱될 수 있다.
도 5를 참조하면, 명령 핸들러 로직(530)이 순서대로 I/O 명령들(545a-h)을 물리적 채널 큐들(540a,b)로 보내기 때문에, 이는 그곳에 순서대도 나열된 모든 명령들을 갖는 개별 채널 큐들(540a,b) 각각을 야기한다는 점을 유의하여야 한다. 이는 어떠한 데이터 일치 에러를 방지할 수 있다: 주어진 물리적 주소 상의 모든 동작들은 순서대로 처리될 것이며, 따라서 라이트 후 리드 에러(write-after-read errors), 또는 이전 라이트 후 새로운 라이트 에러(write-after-new erros)의 가능성은 없다(또는 실질적으로 없다). 하기의 미도시된 경우에 더 유의하여야 한다: 명령이 다수의 채널들에 걸친 주소 범위 상의 동작들(예를 들어, 매우 큰 키 값에 라이팅, 또는 그 LBA 범위가 다른 물리적 주소에 전달되는 명령)을 포함하면, 그 명령은 동시 발생적으로(예: 동시에) 또한 주어진 순서대로 다수의 채널들에 보내질 것이며, 또한 채널들에 걸친 데이터 아이템들의 일치를 유지할 것이다. 그러나, (가비지 수집과 같은, 상술한 것과 유사한 이유로) 각각의 물리적 채널(535a,b)이 다른 속도로 요청을 처리할 수 있다는 사실로 여전히 한정된 비정상적 I/O 완료들이 있을 수 있다. 그러나, 상술한 바와 같이, 이 비정상적인 처리는 데이터 일치 에러들 또는 중요한 데이터 일치 에러들를 야기하지 않는다.
이제 도 4 내지 도 5를 참고하면, 프로세스 415에서, SSD(210')는 I/O 요청들을 비정상적으로 처리한다. 예시에 의하여, 상술한 바와 같이, 명령 핸들러 로직(530)은 순서대로 명령 큐들(525a-c)로부터 I/O 명령들(545a-h)을 페칭하고, 순서대로 각각의 물리적 채널 큐들(540a,b) 내로 제공할 수 있고, 각각의 물리적 채널(535a,b)은, 그 자신의 속도로, 가능성상으로 비정상적으로, 그 각각의 채널 큐(540a,b)를 처리할 것이다.
프로세스 420에서, SSD(210')는, 호스트(205')가 I/O 명령들을 제공하는 같은 순서대로, I/O 명령 완료들을 호스트(205')에 통지할 수 있다. 예시에 의하여, SSD(210')는 통지 관리자 로직(550)을 포함할 수 있다. 통지 관리자 로직(550)은 I/O 시퀀서 로직(551), 통지 버퍼(552), 및 호스트 통지 로직(553)을 포함할 수 있다. 통지 버퍼(552)는 각각의 완료된 명령들(545a-h)을 위한 채널들(535a,b)의 플래시 칩들로부터 명령 완료 통지들을 받을 수 있다. I/O 시퀀서 로직(551)은 각각의 I/O 명령들(525a-h), 및 그 연관된 시퀀스 태그들을 완료 통지들과 연관시킬 수 있다.
I/O 시퀀서 로직(551)은, I/O 명령 큐들(525a-c)(인덱싱 로직은 미도시)보다는, 물리적 채널 큐들(540a,b)에 제공된 명령들을 트래킹하는 점을 제외하고는, 인덱싱 로직(533)에 유사한 인덱싱 로직을 포함할 수 있다. 다른 실시예에서, I/O 시퀀서 로직은, 일부 실시예들에서, 명령 큐들(525a-c)과 물리적 채널 큐들(540a,b) 모두를 트래킹할 수 있는 인덱스 로직(533)과 통신한다. 통지 관리 로직(550)이 물리적 채널들(535a,b)로부터 명령 완료 통지를 받을 때, 명령 완료 통지는 통지 버퍼(552)에 버퍼링되고, I/O 시퀀서 로직(551)은 통지를 각각의 I/O 명령(545a-h)과 시퀀스 태그와 연관시킨다. 통지 관리 로직(550)은, 통지 버퍼(552)에 있는 명령 완료 통지가 가장 낮은 시퀀스 태그를 갖는 I/O 명령(545a-h)을 위한 것인지를 알기 위하여 I/O 시퀀서(551)를 체크할 수 있다. 통지 버퍼(552)에 있는 명령 완료 통지가 가장 낮은 시퀀스 태그를 갖는 I/O 명령과 연관된 것을 알게 되는 것을 기반으로, 통지 관리 로직(550)은, 호스트 통지 로직(553)이 호스트(205')에 가장 낮은 시퀀스를 갖는 I/O 명령이 완료되었음을 통지하도록 할 수 있다. 어떤 실시예에서, 통지 로직(553)은 가장 낮은 시퀀스 태그를 갖는 I/O 명령에 바로 다음의/순차적인 시퀀스 태그들을 갖는 통지 버퍼(552)에 있는 어떤 다음의 I/O 명령 완료들을 호스트(205')에 또한 통지할 수 있다. 호스트(205')로 명령 완료 통지를 보내면, 명령 완료 통지, 및 연관된 I/O 명령 리스팅 및 시퀀스 태그는 (예를 들어, 버퍼 및 인덱스 구조로부터 아이템들을 클리어링하여) 통지 버퍼(552)와 I/O 시퀀서(551)로부터 제거된다. 따라서, 호스트(205')로 보내진 명령 완료 통지들은 원래의 I/O 명령들이 보내진 순서로 되돌아간다.
이제 도 4 내지 도 5를 다시 참조하면, 프로세스 425에서, 호스트(205')는 원래의 I/O 명령들(545a-h)이 SSD(210')로 보내진 순서에 대응하는 순서로 I/O 명령 완료 통지들을 받는다. 호스트(205')는 그 후 다양한 애플리케이션/OS(505) 및/또는 I/O 명령 완료들의 유저 스레드들(510)을 통지할 수 있다. 애플리케이션/OS(505) 및 유저 스레드들(510)은 따라서 적절한 순서로 그 동작들의 성공을 통지받는다.
도 4 내지 도 5를 참조하면, 일부 실시에에서, 호스트 자원들의 사용이 크게 감소하는 것이 분명하다. 보다 상세하게는, I/O 명령들은 광범위한 스테이징 및 디스테이징, 그리고 호스트(205') 상에서의 연관된 완료 트래킹 및 오더링을 겪지 않아도 된다. 또한, 개별적인 I/O 큐들(520a-c), 또는 어떤 주어진 주소 범위도 일치 에러를 방지하거나 감소시키기 위하여 어떤 형태의 로킹도 유발할 필요가 없다. 또한, 호스트(205')는, 도 3의 해시 로직(315)와 같은, 어떤 I/O 분배 메커니즘을 동작시킬 필요가 없다. 마지막으로, 그렇지 않으면 이러한 태스크들에 투여될 프러세서 사이클들과 메모리가 다른 용도를 위해 자유로워질 수 있다.
이제 도 5 내지 도 6을 참조하면, 도 6은, 도 5의 호스트(205')에 명령 완료 통지들을 제공할 것을 결정하는 경우 사용하기 위해, 도 5의 통지 관리 로직(550)을 위한 프로세스의 실시예를 위한 순서도를 제공한다. 프로세스 605에서, 통지 관리 로직(550)은 물리적 채널들(예: 플래시 채널)(535a,b) 상에 있는 플래시 칩으로부터 대상 I/O 명령 완료 통지를 받고, 통지 버퍼(552) 내에 이를 저장한다.
프로세스 610에서, 대상 I/O 명령 완료 통지가 I/O 명령(545a-h)의 특별한 I/O 명령(예: KV 요청), 및 그와 연관된 시퀀스 태그와 연관된다. 이는, 상술한 바와 같이, I/O 시퀀서(551)(예: 내부 인덱스 또는 인덱스 로직(533))와 연관된 인덱스 로직을 갖는 명령 완료 통지를 참조하여 이루어질 수 있다. 어떤 실시예에서, I/O 명령(545a-h)이 상술한 바와 같이 다수의 채널들 사이에서 분배되면, 이 프로세스에서, 개별적인 채널 완료들은 I/O 명령을 위한 단일의 “완료” 내로 합쳐진다.
프로세스 615에서, 대상 I/O 명령 완료의 시퀀스 태그는 그것이 명령 시퀀서들(551)의 연관된 인덱서 로직(예: 내부 인덱스 또는 인덱스 로직(533))에 있는 현재의 I/O 명령 완료 통지들의 가장 낮은 시퀀스 태그인지를 알기 위해 체크된다. 일부 실시예들에서, 이는 대상 I/O 명령 완료 통지의 시퀀스 태그와 그 마지막으로 통지된 시퀀스 태그의 시퀀스 태그 수를 비교하여 이루어질 수 있다. 예시에 의하여, 시퀀스 태그가 순차적 정수인 실시예들에서, 통지 관리 로직(550)은, 대상 명령이 따라서 가장 낮게 태그된 현재의 I/O 완료 명령이면, 대상 I/O 명령 완료 통지의 시퀀스 태그가 호스트로 보내진 가장 최근의 I/O 명령 완료 통지의 ID보다 큰 것인지를 알기 위해 체크할 수 있다. 예를 들어, 시퀀스 태그가 타임 스탬프인 다른 실시예에서, 통지 관리 로직(550)은, 대상 I/O 명령 완료 통지가 가장 낮게 태그된 통지인지를 결정하기 위해, I/O 시퀀서(551)와 연관된 인덱싱 로직(예: 내부 인덱스 또는 인덱스 로직(533))을 활용할 수 있다. 보다 상세하게는, 예를 들어, 대상 I/O 명령 통지가 민힙(min-heap) 인덱스의 루트(root)에 있으면, 따라서 이것이 가장 낮게 태그된 통지이다.
프로세스 620에서, 연관된 미처리된 I/O 명령의 가장 낮은 태그가 아닌 대상 I/O 명령 완료 통지를 기반으로, (예를 들어, 더 빠른 시퀀스 태그를 갖는 I/O 명령 완료들이, 하기 도시되는 바와 같이 처리될 때) 통지가 이후의 통지를 위한 통지 버퍼에 스테이징될 수 있으며, 프로세스는 보다 많은 I/O 명령 완료 통지를 용이하게 받기 위해 프로세스 605로 되돌아간다.
프로세스 625에서, 가장 낮은 미처리된 명령과 연관된 대상 I/O 명령 완료 통지를 기반으로, 통지 관리 로직(550)은, 대상 I/O 명령 완료 통지에 순차적일 수 있는 어떤 버퍼링된 I/O 명령 완료 통지들을 배치하기 위하여 통지 버퍼(552)를 검색할 수 있다. 일부 실시예들에서, 이는 통지 버퍼(552)의 컨텐츠를 I/O 시퀀서 로직(551)의 인덱스에 제공된 순서와 비교하여 이루어질 수 있다. 일부 다른 실시예에서, 이는 대상 I/O 명령 완료 통지로의 수치적 순차를 위한 버퍼 컨텐츠의 시퀀스 태그들을 체크하여 이루어질 수 있다. 대상 I/O 명령 완료 통지 및 그와 같이 규명된 어떤 순차적 I/O 명령 완료 통지들은 호스트 통지 로직(553)로 보내지고, 통지 버퍼(552)로부터 클리어링되고, I/O 시퀀서 로직(551)과 연관된 인덱스(예: 내부 인덱스 또는 인덱스 로직(533))은 제거되고, (프로세스 615의) 통지된 가장 나중의 시퀀스 ID로부터 업데이트될 수 있다.
프로세스 630에서, 호스트 통지 로직(530)은 대상 I/O 명령 완료 통지와 프로세스 625에서 규명된 어떤 순차적 I/O 명령 완료 통지들을 호스트(205')로 제공한다. 도 6의 프로세스들은 이후 필요한 경우 새로 시작할 수 있다.
도 7은 호스트(205')로부터 순서대로 I/O 명령들을 받기 위해, 또한 그 동일한 순서로 완료된 I/O 명령들을 호스트(205')에 통지하기 위해, SSD(210')와 같은 SSD를 위한 방법을 제공한다. 당업자는 도 7의 프로세스들이 다른 순서로 이루어질 수 있고, 어떤 단계들은 본원에 개시된 컨셉들을 벗어나지 않고 추가되거나 제거될 수 있음을 알 것이다.
프로세스 705에서, 각각의 시퀀스 태그들과 연관된 I/O 명령들은, SSD(210') 상에서, 도 5의 명령 큐들(525a-c)과 같은 하나 이상의 명령 큐에 제공될 수 있다. 시퀀스 태그들은, 도 5의 시퀀스 태그 발생기 로직(546)과 같은 시퀀스 태그 발생기 로직에 의해, 호스트(205')에서 또는 SSD(210')에서, I/O 명령들과 연관될 수 있다.
프로세스 710에서, I/O 명령들은, 도 5의 인덱싱 로직(533)과 같은 I/O 명령 큐 인덱스에서 인덱싱되어, 이 인덱스는 I/O 명령들과 시퀀스 태그의 연관을 트래킹하고, 시퀀스 태그 순차에 따라 입장을 명령한다.
프로세스 715에서, I/O 명령들은, 그 시퀀스 태그들의 순차적 순서에 따라, I/O 명령 큐로부터 도 5의 채널 큐들(540a,b)와 같은 하나 이상의 물리적 채널 큐들로 이동할 수 있다. 물리적 채널 큐(들)는, I/O 명령이 대응되는 물리적 주소들를 포함하는 솔리드 스테이트 메모리 칩들을 내장하는 물리적 채널들에 대응될 수 있다. 예시에 의하여, 일부 실시예들에서, 이는 가장 낮은 시퀀스 태그를 갖는 I/O 명령을 결정하고, 가장 낮은 시퀀스 태그를 갖도록 결정된 I/O 명령의 주소와 연관된 하나 이상의 저장 채널들을 결정하고, 결정된 I/O 명령을I/O 명령의 결정된 주소와 연관된 저장 채널들을 위한 하나 이상의 저장 채널 큐들로 제공하여 이루어질 수 있다. 보다 구체적으로, 여전히, 일부 실시예들에서, 물리적 주소들은 키 값 페어의 키로부터 얻어질 수 있다. 예를 들어, 일부 실시예들에서, 키는 하나 이상의 물리적 주소에 매핑될 수 있다. 다른 실시예들에서, 물리적 주소들은 하나 이상의 LBA들로부터 얻어질 수 있으며, 예를 들어, 일부 실시예들에서, 하나 이상의 LBA들은 하나 이상의 물리적 주소에 매핑될 수 있다.
프로세스 720에서, 물리적 채널 큐로 이동한 I/O 명령들은 I/O 명령 큐들로부터 제거되고, I/O 명령 인덱스는 업데이트된다.
프로세스 725에서, 플래시 채널 큐들 각각은 그 각각의 I/O 명령들을 처리한다. I/O 명령이 완료되면, 해당 I/O 명령 완료 통지는, 도 5의 통지 관리 로직(550)과 같은 통지 관리 로직으로 보내질 수 있다.
프로세스 730에서, I/O 명령 완료 통지가 수집된다. 이들은 도 5의 통지 관리자(550)의 통지 버퍼(552)와 같은 통지 버퍼에서 수집될 수 있다.
프로세스 735에서, I/O 명령 완료 통지들은, 해당 I/O 명령들이 수신되는 동일한 순서로 호스트에 제공된다. 프로세스 735는 도 6을 참조하여 상술한 것과 유사한 프로세스를 통해 달성될 수 있다.
방법 단계들은 입력 데이트를 동작시키고 출력을 발생시켜 기능들을 수행하기 위하여 컴퓨터 프로그램을 실행하는 하나 이상의 프로그래머블 프로세서들에 의해 수행될 수 잇다. 방법 단계들은, 예를 들어, FPGA (field programmable gate array) 또는 ASIC (application-specific integrated circuit)과 같은 특별한 목적의 로직에 의해 수행될 수 있으며, 또한 장치는 그로서 구현될 수 있다.
다양한 실시예에서, 컴퓨터 판독가능 매체는, 실행되면, 장치가 방법 단계들 또는 프로세스들의 적어도 일부를 수행하게 하는 명령어들을 포함할 수 있다. 일부 실시예들에서, 컴퓨터 판독 가능 매체는, 자기 매체, 광학 매체, 다른 매체, 또는 그 조합(예: CD-ROM, 하드 드라이브, 판독 전용 메모리, 플래시 메모리)에 포함될 수 있다. 이러한 실시예에서, 컴퓨터 판독 가능 매체는 명백히 그리고 영구적으로 구형되는 제조 물품이다.
본 개시된 내용의 원리들이 예시 실시예들을 참조하여 기술되었으나, 이 개시된 컨셉의 정신 및 범위를 벗어나지 않고 다양한 변화와 변형이 가능함은 본 분야의 당업자에게 명백하다. 따라서, 상술한 실시예들은 한정적이 아니며 단지 도시적임을 이해하여야 한다. 따라서, 본 개시된 컨셉의 범위는 하기의 청구항들 및 그 균등한 범위의 가장 넓게 허용 가능한 해석으로 결정되어야 하고, 상술한 기재에 의해 한정되거나 제한되지 않아야 한다. 따라서, 첨부된 청구항은 모든 이러한 변형 및 변화가 본 실시예들의 범위 내에 있는 것으로 의도된다.
본 발명의 실시예들은, 한정되지 않고, 하기의 진술로 연장될 수 있다.
진술 1: 저장 장치에 의해 순서대로 IO 요청들을 처리하는 방법에 있어서,
제1 I/O 명령과 제2 I/O 명령을 수신하는 단계로서, 상기 제1 I/O 명령과 제2 I/O 명령에는 시퀀스 태그가 할당되는 단계;
그 각각의 시퀀스 태그를 기반으로 하나 이상의 저장 채널들에 상기 제1 I/O 명령과 상기 제2 I/O 명령을 제공하는 단계;
상기 제1 I/O 명령과 상기 제2 I/O 명령이 각각 완료될 경우 상기 제1 I/O 명령과 상기 제2 I/O 명령의 명령 완료 통지를 수집하는 단계; 및
상기 연관된 완료된 제1 I/O 명령과 상기 제2 I/O 명령의 시퀀스 태그를 기반으로 호스트에 명령 완료 통지를 제공하는 단계;를 포함하는, 저장 장치에 의해 순서대로 IO 요청을 처리하는 방법.
진술 2: 진술 1의 방법에 있어서, 상기 수신한 제1 및 제2 I/O 명령들은 그 시퀀스 태그에 의해 인덱싱되는, 저장 장치에 의해 순서대로 IO 요청을 처리하는 방법.
진술 3: 진술 1의 방법에 있어서, 그 각각의 시퀀스 태그들을 기반으로 하나 이상의 저장 채널들에 상기 제1 I/O 명령과 상기 제2 I/O 명령을 제공하는 단계는,
가장 낮은 시퀀스 태그를 갖는 I/O 명령을 결정하는 단계;
가장 낮은 시퀀스 태그를 갖도록 결정된 상기 I/O 명령의 주소와 연관된 하나 이상의 저장 채널들을 결정하는 단계;
가장 낮은 시퀀스 태그를 갖는 상기 I/O 명령의 상기 결정된 주소와 연관된 저장 채널들의 하나 이상의 저장 채널 큐들(storage channel queue)에 가장 낮은 시퀀스 태그를 갖는 상기 결정된 I/O 명령을 제공하는 단계; 및
가장 낮은 시퀀스 태그를 갖는 상기 결정된 I/O 명령을 제거하도록 상기 인덱스를 업데이트하는 단계;를 포함하는, 저장 장치에 의해 순서대로 IO 요청을 처리하는 방법.
진술 4: 진술 3의 방법에 있어서, 상기 주소는 키 값 페어(key-value pair)의 키(key)를 기반으로 하는, 저장 장치에 의해 순서대로 IO 요청을 처리하는 방법.
진술 5: 진술 3에 있어서, 상기 주소는 로직 블록 주소(logical block address)(LBA)를 포함하는, 저장 장치에 의해 순서대로 IO 요청을 처리하는 방법.
진술 6: 진술 1에 있어서, 상기 시퀀스 태그는 상기 호스트에 의해 결정되는 방법.
진술 7: 진술 1에 있어서, 상기 시퀀스 태그는 상기 저장 장치에 의해 결정되는 방법.
진술 8: 진술 1에 있어서, 상기 호스트에 명령 완료 통지를 제공하는 단계는:
제1 완료된 I/O 명령과 연관된 시퀀스 태그가 처리를 기다리는 I/O 명령들과 연관된 모든 시퀀스 태그들의 가장 낮은 시퀀스 태그인지를 결정하는 단계; 및
상기 완료된 I/O 명령의 시퀀스 태그가 가장 낮은 미처리된 I/O 명령의 시퀀스 태그라는 결정을 기반으로, 상기 가장 낮은 시퀀스 태그를 포함하는, 상기 결정된 가장 낮은 시퀀스 태그에 순차적인 시퀀스 태그들을 갖는 완료된 I/O 명령들을 위한 모든 명령 완료 통지들을 상기 호스트에 제공하는 단계;
상기 완료된 I/O 명령의 시퀀스 태그가 상기 가장 낮은 미처리된 I/O 명령의 시퀀스 태그가 아니라는 결정을 기반으로, 버퍼에 상기 명령 완료 통지를 제공하는, 저장 장치에 의해 순서대로 IO 요청을 처리하는 방법.
진술 9: 저장 장치에 있어서,
적어도 2개의 명령 큐;
명령 핸들러 로직;
적어도 2개의 물리적 채널로서, 각 물리적 채널은 하나 이상의 솔리드 스테이트 저장 매체와 연관되며, 상기 각각의 저장 매체는 각각의 물리적 주소와 연관된, 적어도 2개의 물리적 채널;
상기 적어도 2개의 저장 채널의 각각과 연관된, 적어도 2개의 물리적 채널 큐; 및
통지 매니저 로직;을 포함하고,
상기 적어도 2개의 명령 큐들은 호스트로부터 I/O 명령을 수신하도록 구성되며, 상기 I/O 명령들은 시퀀스 태그와 연관되고;
상기 명령 핸들러 로직은, 상기 I/O 명령들과 상기 명령의 시퀀스 태그들에 연관된 물리적 주소들을 기반으로, 상기 적어도 2개의 명령 큐들로부터 상기 적어도 2개의 물리적 채널 큐로 I/O 명령들을 제공하도록 구성되고; 및
상기 통지 로직은, 각각의 완료된 I/O 명령의 시퀀스 태그들을 기반으로, 상기 호스트에 I/O 명령 완료 통지들을 제공하도록 구성된, 저장 장치.
진술 10: 진술 9에 있어서, 상기 명령 핸들러 로직 또는 상기 명령 큐들과 통신하거나 상기 호스트로부터 수신된 명령 큐들로부터 I/O 명령들을 수신하고 상기 I/O 명령들의 수신 순서에 의해 결정된 시퀀스 태그와 상기 I/O 명령들을 연관시키는 시퀀스 태그 발생기 로직을 더 포함하는, 저장 장치.
진술 11: 진술 10에 있어서, 상기 저장 장치는 인덱싱 로직과 인덱스 메모리를 더 포함하고, 상기 인덱싱 로직은 상기 시퀀스 태그 발생기 로직, 상기 명령 핸들러 로직, 또는 상기 명령 큐들과 통신하도록 구성되고, 상기 인덱스 메모리 내에서, 상기 I/O 명령들을 그 각각의 시퀀스 태그와 인덱싱시키는, 저장 장치.
진술 12: 진술 11에 있어서, 상기 명령 핸들러 로직은:
상기 인덱스에서 가장 낮은 시퀀스 태그를 갖는 I/O 명령을 결정하고;
가장 낮은 시퀀스 태그를 갖도록 결정된 상기 I/O 명령의 주소와 연관된 하나 이상의 저장 채널들을 결정하고;
상기 I/O 명령의 상기 결정된 주소와 연관된 솔리드 스테이트 저장 매체와 연관된 상기 저장 채널 큐들 중 하나 이상 내로 상기 결정된 I/O 명령을 제공하고; 및
가장 낮은 시퀀스 태그를 갖는 상기 결정된 I/O 명령을 제거하도록 상기 인덱스를 업데이트하도록 구성된 저장 장치.
진술 13: 진술 12에 있어서, 상기 I/O 명령은 키 값 명령을 포함하고, 상기 저장 주소들은 상기 키 값 명령의 키를 기반으로 결정되는, 저장 장치.
진술 14: 진술 12에 있어서, 상기 I/O 명령은 하나 이상의 로직 블록 주소들(logical block addresses)(LBAs)을 포함하고, 상기 저장 주소는 상기 LBA들을 기반으로 결정되는, 저장 장치.
진술 15: 진술 9에 있어서, 상기 통지 로직은:
통지 버퍼;
I/O 시퀀서 로직; 및
호스트 통지 로직;을 포함하고,
상기 통지 버퍼는 상기 물리적 채널에 의해 완료된 각각의 I/O 명령들을 위한 명령 완료 통지들을 받고 저장하도록 구성되고,
상기 I/O 시퀀서 로직은 상기 물리적 채널들로부터 수신한 명령 완료 통지들과 연관된 시퀀스 태그를 결정하도록 구성되고, 상기 통지 버퍼 내의 명령 완료 통지가 상기 호스트에 아직 통지되지 않은 가장 낮은 시퀀스 태그인 시퀀스 태그를 갖는지를 결정하도록 더 구성되고, 및
상기 호스트 통지 로직은, 상기 버퍼가 아직 상기 호스트에 통지되지 않은 상기 가장 낮은 시퀀스 태그에 해당하는 명령 완료 통지를 포함한다는 결정을 기반으로, 상기 연관된 I/O 명령이 완료되었음을 호스트에게 통지하도록 구성된, 저장 장치.
진술 16: 시스템에 있어서,
호스트 컴퓨터 시스템; 및
상기 호스트 컴퓨터 시스템에 통신적으로 결합된 저장 장치;를 포함하고,
상기 저장 장치는,
적어도 2개의 명령 큐들;
명령 핸들러 로직;
적어도 2개의 저장 채널들로서, 각 물리적 채널은 하나 이상의 솔리드 스테이트 저장 매체와 연관되며, 상기 각각의 저장 매체는 각각의 저장 주소와 연관된, 저장 채널;
상기 적어도 2개의 저장 채널들의 각각과 연관된, 적어도 2개의 저장 채널 큐들; 및
통지 매니저 로직;을 포함하고,
상기 적어도 2개의 명령 큐들은 상기 호스트 컴퓨터 시스템으로부터 I/O 명령들을 수신하도록 구성되며, 상기 I/O 명령들은 시퀀스 태그와 연관되고;
상기 명령 핸들러 로직은, 상기 I/O 명령들과 상기 명령들의 시퀀스 태그들에 연관된 저장 주소들을 기반으로, 상기 적어도 2개의 명령 큐로부터 상기 적어도 2개의 저장 채널 큐로 I/O 명령들을 제공하도록 구성되고; 및
상기 통지 로직은, 각각의 완료된 I/O 명령들의 시퀀스 태그들를 기반으로, 상기 호스트에 명령 완료 통지를 제공하도록 구성된, 시스템.
진술 17: 진술 16에 있어서, 상기 호스트 컴퓨터 시스템은 시퀀스 태그 발생기를 포함하고, 시퀀스 태그들을 상기 저장 장치로 송신하기 위한 상기 I/O 명령들과 연관시키도록 구성된, 시스템.
진술 18: 진술 17에 있어서, 상기 시퀀스 태그 발생기는 상기 호스트 상에서 작동하는 애플리케이션들이 접근하는 순서에 따라 LBA 요청들에 시퀀스 태그들을 적용하도록 구성된 로직을 포함하는, 시스템.
110: 프로세서 및/또는 로직
120: 휘발성 메모리
130: 비휘발성 메모리
140: 네트워크 인터페이스
150: 유저 인터페이스 유닛
160: 기타 하드웨어 장치
170: 소프트웨어

Claims (18)

  1. 저장 장치에 의해 순서대로 IO 요청들을 처리하는 방법에 있어서,
    제1 I/O 명령과 제2 I/O 명령을 수신하는 단계로서, 상기 제1 I/O 명령과 제2 I/O 명령에는 시퀀스 태그가 할당되는 단계;
    상기 제1 I/O 명령과 상기 제2 I/O 명령 각각의 시퀀스 태그를 기반으로 하나 이상의 저장 채널들에 상기 제1 I/O 명령과 상기 제2 I/O 명령을 제공하는 단계;
    상기 제1 I/O 명령과 상기 제2 I/O 명령이 각각 완료될 경우 상기 제1 I/O 명령과 상기 제2 I/O 명령의 명령 완료 통지를 수집하는 단계; 및
    상기 연관된 완료된 제1 I/O 명령과 상기 제2 I/O 명령의 시퀀스 태그를 기반으로 호스트에 명령 완료 통지를 제공하는 단계를 포함하는 방법.
  2. 청구항 1에 있어서,
    상기 수신한 제1 및 제2 I/O 명령들은 상기 제1 및 제2 I/O 명령들의 시퀀스 태그들에 의해 인덱싱되는 방법.
  3. 청구항 1에 있어서,
    상기 제1 I/O 명령과 상기 제2 I/O 명령의 시퀀스 태그들을 기반으로 하나 이상의 저장 채널들에 상기 제1 I/O 명령과 상기 제2 I/O 명령을 제공하는 단계는,
    가장 낮은 시퀀스 태그를 갖는 I/O 명령을 결정하는 단계;
    가장 낮은 시퀀스 태그를 갖도록 결정된 상기 I/O 명령의 주소와 연관된 하나 이상의 저장 채널들을 결정하는 단계;
    가장 낮은 시퀀스 태그를 갖는 상기 I/O 명령의 상기 결정된 주소와 연관된 저장 채널들의 하나 이상의 저장 채널 큐들(storage channel queue)에 가장 낮은 시퀀스 태그를 갖는 상기 결정된 I/O 명령을 제공하는 단계; 및
    가장 낮은 시퀀스 태그를 갖는 상기 결정된 I/O 명령을 제거하도록 상기 인덱스를 업데이트하는 단계를 포함하는 방법.
  4. 청구항 3에 있어서,
    상기 주소는 키 값 페어(key-value pair)의 키(key)를 기반으로 하는 방법.
  5. 청구항 3에 있어서,
    상기 주소는 로직 블록 주소(logical block address)(LBA)를 포함하는 방법.
  6. 청구항 1에 있어서,
    상기 시퀀스 태그는 상기 호스트에 의해 결정되는 방법.
  7. 청구항 1에 있어서,
    청구항 1에 있어서,
    상기 시퀀스 태그는 상기 저장 장치에 의해 결정되는 방법.
  8. 청구항 1에 있어서,
    상기 호스트에 명령 완료 통지를 제공하는 단계는:
    제1 완료된 I/O 명령들과 연관된 상기 시퀀스 태그들이 처리를 기다리는 I/O 명령과 연관된 모든 시퀀스 태그의 가장 낮은 시퀀스 태그인지를 결정하는 단계; 및
    상기 완료된 I/O 명령의 시퀀스 태그가 가장 낮은 미처리된 I/O 명령의 시퀀스 태그라는 결정을 기반으로, 상기 가장 낮은 시퀀스 태그를 포함하는, 상기 결정된 가장 낮은 시퀀스 태그에 순차적인 시퀀스 태그들을 갖는 완료된 I/O 명령들을 위한 모든 명령 완료 통지들을 상기 호스트에 제공하는 단계;
    상기 완료된 I/O 명령의 시퀀스 태그가 상기 가장 낮은 미처리된 I/O 명령의 시퀀스 태그가 아니라는 결정을 기반으로, 버퍼에 상기 명령 완료 통지를 제공하는 단계를 포함하는 방법.
  9. 저장 장치에 있어서,
    적어도 2개의 명령 큐;
    명령 핸들러 로직;
    적어도 2개의 물리적 채널들로서, 각 물리적 채널은 하나 이상의 솔리드 스테이트 저장 매체와 연관되며, 상기 각각의 저장 매체는 각각의 물리적 주소들과 연관된, 적어도 2개의 물리적 채널들;
    상기 적어도 2개의 저장 채널의 각각과 연관된, 적어도 2개의 물리적 채널 큐들; 및
    통지 매니저 로직을 포함하고,
    상기 적어도 2개의 명령 큐들은 호스트로부터 I/O 명령들을 수신하도록 구성되며, 상기 I/O 명령들은 시퀀스 태그와 연관되고;
    상기 명령 핸들러 로직은, 상기 I/O 명령들과 상기 명령들의 시퀀스 태그들에 연관된 물리적 주소들을 기반으로, 상기 적어도 2개의 명령 큐들로부터 상기 적어도 2개의 물리적 채널 큐들로 I/O 명령들을 제공하도록 구성되고; 및
    상기 통지 로직은, 각각의 완료된 I/O 명령들의 시퀀스 태그들을 기반으로, 상기 호스트에 I/O 명령 완료 통지들을 제공하도록 구성된 저장 장치.
  10. 청구항 9에 있어서,
    상기 명령 핸들러 로직 또는 상기 명령 큐들와 통신하거나 상기 호스트로부터 수신된 명령 큐들로부터 I/O 명령들을 수신하고 상기 I/O 명령들의 수신 순서에 의해 결정된 시퀀스 태그와 상기 I/O 명령들을 연관시키는 시퀀스 태그 발생기 로직을 더 포함하는 저장 장치.
  11. 청구항 10에 있어서,
    인덱싱 로직과 인덱스 메모리를 더 포함하고, 상기 인덱싱 로직은 상기 시퀀스 태그 발생기 로직, 상기 명령 핸들러 로직, 또는 상기 명령 큐와 통신하도록 구성되고, 상기 인덱스 메모리 내에서, 상기 I/O 명령들을 상기 I/O 명령들 각각의 시퀀스 태그들과 인덱싱시키는 저장 장치.
  12. 청구항 11에 있어서,
    상기 명령 핸들러 로직은:
    상기 인덱스에서 가장 낮은 시퀀스 태그를 갖는 I/O 명령을 결정하고;
    가장 낮은 시퀀스 태그를 갖도록 결정된 상기 I/O 명령의 주소와 연관된 하나 이상의 저장 채널들을 결정하고;
    상기 I/O 명령의 상기 결정된 주소와 연관된 솔리드 스테이트 저장 매체와 연관된 상기 저장 채널 큐들 중 하나 이상 내로 상기 결정된 I/O 명령을 제공하고; 및
    상기 가장 낮은 시퀀스 태그를 갖는 상기 결정된 I/O 명령을 제거하도록 상기 인덱스를 업데이트하도록 구성된 저장 장치.
  13. 청구항 12에 있어서,
    상기 I/O 명령은 키 값 명령을 포함하고, 상기 저장 주소들은 상기 키 값 명령의 키를 기반으로 결정되는 저장 장치.
  14. 청구항 12에 있어서,
    상기 I/O 명령은 하나 이상의 로직 블록 주소들(logical block address)(LBA)을 포함하고, 상기 저장 주소는 상기 LBA들을 기반으로 결정되는 저장 장치.
  15. 청구항 9에 있어서,
    상기 통지 로직은,
    통지 버퍼;
    I/O 시퀀서 로직; 및
    호스트 통지 로직을 포함하고,
    상기 통지 버퍼는 상기 물리적 채널에 의해 완료된 각각의 I/O 명령들을 위한 명령 완료 통지들을 받고 저장하도록 구성되고,
    상기 I/O 시퀀서 로직은 상기 물리적 채널들로부터 수신한 명령 완료 통지들과 연관된 시퀀스 태그를 결정하도록 구성되고, 상기 통지 버퍼 내의 명령 완료 통지가 상기 호스트에 아직 통지되지 않은 가장 낮은 시퀀스 태그인 시퀀스 태그를 갖는지를 결정하도록 더 구성되고, 및
    상기 호스트 통지 로직은, 상기 버퍼가 아직 상기 호스트에 통지되지 않은 상기 가장 낮은 시퀀스 태그에 해당하는 명령 완료 통지를 포함한다는 결정을 기반으로, 상기 연관된 I/O 명령이 완료되었음을 호스트에게 통지하도록 구성된 저장 장치.
  16. 시스템에 있어서,
    호스트 컴퓨터 시스템; 및
    상기 호스트 컴퓨터 시스템에 통신적으로 결합된 저장 장치;를 포함하고,
    상기 저장 장치는,
    적어도 2개의 명령 큐들;
    명령 핸들러 로직;
    적어도 2개의 저장 채널들로서, 각 물리적 채널은 하나 이상의 솔리드 스테이트 저장 매체와 연관되며, 상기 각각의 저장 매체는 각각의 저장 주소들과 연관된, 저장 채널들;
    상기 적어도 2개의 저장 채널들의 각각과 연관된, 적어도 2개의 저장 채널 큐들; 및
    통지 매니저 로직을 포함하고,
    상기 적어도 2개의 명령 큐들은 상기 호스트 컴퓨터 시스템으로부터 I/O 명령들을 수신하도록 구성되며, 상기 I/O 명령들은 시퀀스 태그와 연관되고;
    상기 명령 핸들러 로직은, 상기 I/O 명령들과 상기 명령들의 시퀀스 태그들에 연관된 저장 주소들을 기반으로, 상기 적어도 2개의 명령 큐들로부터 상기 적어도 2개의 저장 채널 큐들로 I/O 명령들을 제공하도록 구성되고; 및
    상기 통지 로직은, 각각의 완료된 I/O 명령들의 시퀀스 태그들을 기반으로, 상기 호스트에 명령 완료 통지들을 제공하도록 구성된 시스템.
  17. 청구항 16에 있어서,
    상기 호스트 컴퓨터 시스템은 시퀀스 태그 발생기를 포함하고, 시퀀스 태그들을 상기 저장 장치로 송신하기 위한 상기 I/O 명령들과 연관시키도록 구성된 시스템.
  18. 청구항 17에 있어서,
    상기 시퀀스 태그 발생기는 상기 호스트 상에서 작동하는 애플리케이션들이 접근하는 순서에 따라 LBA 요청들에 시퀀스 태그들을 적용하도록 구성된 로직을 포함하는 시스템.
KR1020210025064A 2020-06-09 2021-02-24 Ssd에서의 라이트 명령하기 KR20210152929A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/897,173 2020-06-09
US16/897,173 US11579801B2 (en) 2020-06-09 2020-06-09 Write ordering in SSDs

Publications (1)

Publication Number Publication Date
KR20210152929A true KR20210152929A (ko) 2021-12-16

Family

ID=75143526

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210025064A KR20210152929A (ko) 2020-06-09 2021-02-24 Ssd에서의 라이트 명령하기

Country Status (5)

Country Link
US (1) US11579801B2 (ko)
EP (1) EP3923151A1 (ko)
KR (1) KR20210152929A (ko)
CN (1) CN113782071A (ko)
TW (1) TW202147129A (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11836383B2 (en) * 2021-11-23 2023-12-05 Silicon Motion Inc. Controllers of storage devices for arranging order of commands and methods of operating the same

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030135729A1 (en) 2001-12-14 2003-07-17 I/O Integrity, Inc. Apparatus and meta data caching method for optimizing server startup performance
US7243200B2 (en) 2004-07-15 2007-07-10 International Business Machines Corporation Establishing command order in an out of order DMA command queue
GB0524021D0 (en) 2005-11-25 2006-01-04 Ibm A system for preserving message order
US20070208820A1 (en) * 2006-02-17 2007-09-06 Neteffect, Inc. Apparatus and method for out-of-order placement and in-order completion reporting of remote direct memory access operations
US8055816B2 (en) 2009-04-09 2011-11-08 Micron Technology, Inc. Memory controllers, memory systems, solid state drives and methods for processing a number of commands
US20180107591A1 (en) 2011-04-06 2018-04-19 P4tents1, LLC System, method and computer program product for fetching data between an execution of a plurality of threads
US8694754B2 (en) 2011-09-09 2014-04-08 Ocz Technology Group, Inc. Non-volatile memory-based mass storage devices and methods for writing data thereto
CN102789439B (zh) 2012-06-16 2016-02-10 北京忆恒创源科技有限公司 控制数据传输过程中的中断的方法与存储设备
US9785355B2 (en) * 2013-06-26 2017-10-10 Cnex Labs, Inc. NVM express controller for remote access of memory and I/O over ethernet-type networks
US9251064B2 (en) 2014-01-08 2016-02-02 Netapp, Inc. NVRAM caching and logging in a storage system
US9354872B2 (en) 2014-04-24 2016-05-31 Xitore, Inc. Apparatus, system, and method for non-volatile data storage and retrieval
US20160132251A1 (en) * 2014-11-11 2016-05-12 Wisconsin Alumni Research Foundation Operating method of storage device and data writing method for writing data into storage device
US10133492B2 (en) * 2015-10-14 2018-11-20 Samsung Electronics Co., Ltd. Electronic system with interface control mechanism and method of operation thereof
US10509592B1 (en) 2016-07-26 2019-12-17 Pavilion Data Systems, Inc. Parallel data transfer for solid state drives using queue pair subsets
US10628081B2 (en) * 2018-03-09 2020-04-21 Toshiba Memory Corporation Managing internal command queues in solid state storage drives
US20190392047A1 (en) 2018-06-25 2019-12-26 Amazon Technologies, Inc. Multi-table partitions in a key-value database
US10817217B2 (en) 2018-06-28 2020-10-27 Seagate Technology Llc Data storage system with improved time-to-ready
CN111026324B (zh) * 2018-10-09 2021-11-19 华为技术有限公司 转发表项的更新方法及装置

Also Published As

Publication number Publication date
TW202147129A (zh) 2021-12-16
EP3923151A1 (en) 2021-12-15
US11579801B2 (en) 2023-02-14
CN113782071A (zh) 2021-12-10
US20210382654A1 (en) 2021-12-09

Similar Documents

Publication Publication Date Title
CN114816664B (zh) Gpu虚拟化
US10732836B2 (en) Remote one-sided persistent writes
US11106795B2 (en) Method and apparatus for updating shared data in a multi-core processor environment
US8095727B2 (en) Multi-reader, multi-writer lock-free ring buffer
US20150186068A1 (en) Command queuing using linked list queues
US10802766B2 (en) Database with NVDIMM as persistent storage
EP3688598B1 (en) Method for reading data stored in a non-volatile cache using rdma
US8244682B2 (en) Saving snapshot of a knowledge base without blocking
CN107111548B (zh) 硬件辅助的对象存储器迁移
US8930596B2 (en) Concurrent array-based queue
Daglis et al. SABRes: Atomic object reads for in-memory rack-scale computing
US10949341B2 (en) Implementing snapshot and other functionality in KVSSD through garbage collection and FTL
US11868306B2 (en) Processing-in-memory concurrent processing system and method
US8275954B2 (en) Using DMA for copying performance counter data to memory
WO2016119597A1 (zh) Oltp集群数据库中页面查询方法及数据处理节点
US10387302B2 (en) Managing database index by leveraging key-value solid state device
KR20210152929A (ko) Ssd에서의 라이트 명령하기
CN109983443B (zh) 实现分叉非易失性存储器快速驱动器的技术
TWI743400B (zh) 用以避免負載填充衝突的設備以及系統
US10310857B2 (en) Systems and methods facilitating multi-word atomic operation support for system on chip environments
US20210216365A1 (en) Hybrid virtual gpu co-scheduling
US11327759B2 (en) Managing low-level instructions and core interactions in multi-core processors
KR20210119333A (ko) 중첩된 범위들을 갖는 명령들에 대한 병렬 오버랩 관리
Drescher Adaptive Address-Space Management for Resource-Aware Applications
KR102638270B1 (ko) 파일 시스템 디스크에서 내장된 데이터 블록 정보로부터 디렉토리/블록 할당 맵을 재구축하는 장치 및 방법

Legal Events

Date Code Title Description
A201 Request for examination