KR20220056729A - 커맨드 스케줄링을 수행하는 컨트롤러, 컨트롤러를 포함하는 스토리지 장치 및 컨트롤러의 동작 방법 - Google Patents

커맨드 스케줄링을 수행하는 컨트롤러, 컨트롤러를 포함하는 스토리지 장치 및 컨트롤러의 동작 방법 Download PDF

Info

Publication number
KR20220056729A
KR20220056729A KR1020200141571A KR20200141571A KR20220056729A KR 20220056729 A KR20220056729 A KR 20220056729A KR 1020200141571 A KR1020200141571 A KR 1020200141571A KR 20200141571 A KR20200141571 A KR 20200141571A KR 20220056729 A KR20220056729 A KR 20220056729A
Authority
KR
South Korea
Prior art keywords
packet
controller
queue
planes
work request
Prior art date
Application number
KR1020200141571A
Other languages
English (en)
Inventor
김영일
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Priority to KR1020200141571A priority Critical patent/KR20220056729A/ko
Priority to US17/376,942 priority patent/US20220129310A1/en
Priority to EP21189113.0A priority patent/EP3992771B1/en
Priority to CN202110913616.8A priority patent/CN114489470A/zh
Publication of KR20220056729A publication Critical patent/KR20220056729A/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/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
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • G06F3/0607Improving or facilitating administration, e.g. storage management by facilitating the process of upgrading existing storage systems, e.g. for improving compatibility between host and storage device
    • 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
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/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/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0662Virtualisation aspects
    • G06F3/0667Virtualisation aspects at data level, e.g. file, record or object virtualisation
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5072Grid computing
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • 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/546Message passing systems or structures, e.g. queues

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)
  • Mathematical Physics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Bus Control (AREA)

Abstract

커맨드 스케줄링을 수행하는 컨트롤러, 컨트롤러를 포함하는 스토리지 장치 및 컨트롤러의 동작 방법이 개시된다. 본 발명의 기술적 사상의 일측면에 따른 호스트 장치와 통신하는 스토리지 장치는, 복수의 플레인(Plane)들을 포함하는 메모리 장치와 상기 호스트 장치로부터 동시 병렬 작업 요청을 수신하여 큐에 저장하고, 상기 동시 병렬 작업 요청으로부터 생성된 제1 패킷과 단일 작업 요청으로부터 생성된 제2 패킷을 구분하기 위해 상기 제1 패킷에 동시 병렬 식별자를 추가한 제3 패킷을 생성하고, 상기 동시 병렬 식별자의 여부를 고려하는 스케줄링 정책에 따라 상기 제2 패킷을 상기 동시 병렬 작업 요청이 점유하는 적어도 하나 이상의 플레인들로 전송하는 컨트롤러를 포함하고, 상기 동시 병렬 작업 요청은 상기 복수의 플레인들 중 적어도 2 이상의 플레인을 점유하고, 상기 단일 작업 요청은 상기 복수의 플레인들 중 하나의 플레인을 점유하는 것을 특징으로 한다.

Description

커맨드 스케줄링을 수행하는 컨트롤러, 컨트롤러를 포함하는 스토리지 장치 및 컨트롤러의 동작 방법{CONTROLLER FOR PERFORMING COMMAND SCHEDULING, STORAGE DEVICE INCLUDING THE CONTROLLER, AND OPERATING METHOD OF THE CONTROLLER}
본 발명의 기술적 사상은 컨트롤러에 관한 것으로서, 상세하게는 커맨드 스케줄링을 수행하는 컨트롤러, 컨트롤러를 포함하는 스토리지 장치 및 컨트롤러의 동작 방법에 관한 것이다.
스토리지 장치는 호스트 장치로부터 전송받은 커맨드들을 효과적으로 스케줄링하기 위한 다양한 여러 스케줄링 정책들을 사용한다.
사용되는 스케줄링 정책은 복수의 호스트들 간의 공정성(Fairness)을 보장하는 조건 그리고, 커맨드를 처리하는 과정에서 발생할 수 있는 HOL 블로킹(Head-Of-Line Blocking) 문제를 방지해야 하는 조건을 만족해야 한다.
그러나, 여러 리소스를 점유해야 하는 커맨드가 입력된 경우, 상기 커맨드 및 다른 커맨드들을 스케줄링하는 과정에서 상기 커맨드의 스케줄링 우선순위가 고려되지 않는다면, 상기 커맨드의 굶주림(Starvation) 현상이 발생할 수 있다.
본 발명의 기술적 사상이 해결하려는 과제는, 복수의 리소스들을 점유하는 동시 병렬 작업을 요청하는 커맨드의 우선순위를 고려하여, 커맨드 스케줄링을 수행하는 컨트롤러, 컨트롤러를 포함하는 스토리지 장치 및 컨트롤러의 동작 방법을 제공하는 데 있다.
상기와 같은 목적을 달성하기 위하여, 본 발명의 기술적 사상의 일측면에 따른 호스트 장치와 통신하는 스토리지 장치는, 복수의 플레인(Plane)들을 포함하는 메모리 장치와 상기 호스트 장치로부터 동시 병렬 작업 요청을 수신하여 큐에 저장하고, 상기 동시 병렬 작업 요청으로부터 생성된 제1 패킷과 단일 작업 요청으로부터 생성된 제2 패킷을 구분하기 위해 상기 제1 패킷에 동시 병렬 식별자를 추가한 제3 패킷을 생성하고, 상기 동시 병렬 식별자의 여부를 고려하는 스케줄링 정책에 따라 상기 제2 패킷을 상기 동시 병렬 작업 요청이 점유하는 적어도 하나 이상의 플레인들로 전송하는 컨트롤러를 포함하고, 상기 동시 병렬 작업 요청은 상기 복수의 플레인들 중 적어도 2 이상의 플레인을 점유하고, 상기 단일 작업 요청은 상기 복수의 플레인들 중 하나의 플레인을 점유하는 것을 특징으로 한다.
상기와 같은 목적을 달성하기 위하여, 본 발명의 기술적 사상의 일측면에 따른 호스트 장치와 통신하는 스토리지 장치의 컨트롤러는, 상기 호스트 장치로부터 수신한 작업 요청(Command)이 동시 병렬 작업에 대한 요청인지 확인하고, 상기 작업 요청이 동시 병렬 작업 요청인 경우, 상기 작업 요청으로부터 생성된 제1 패킷에 동시 병렬 식별자가 추가된 제2 패킷을 생성하는 오퍼레이션 체커와 복수의 가상 출력 큐들을 포함하는 큐와 상기 제2 패킷에 포함된 상기 작업 요청의 내용에 따라, 상기 제2 패킷을 상기 제2 패킷에 대응되는 제1 가상 출력 큐에 저장하는 큐 컨트롤러와 상기 동시 병렬 식별자의 존재 여부, 상기 작업 요청의 내용, 상기 큐의 상태 변화 및 메모리 장치 내의 복수의 플레인(Plane)들의 상태 중 적어도 하나를 기초로 상기 제2 패킷을 상기 메모리 장치에 제공하기 위한 스케줄링 정책을 생성하고, 상기 스케줄링 정책에 따라 상기 제2 패킷을 상기 메모리 장치로 전송하는 스케줄러를 포함하고, 상기 동시 병렬 작업은 상기 복수의 플레인들 중 적어도 2 이상의 플레인을 점유하는 것을 특징으로 한다.
상기와 같은 목적을 달성하기 위하여, 본 발명의 기술적 사상의 일측면에 따른 스토리지 장치의 컨트롤러의 스케줄링 방법은, 호스트 장치로부터 작업 요청(Command)을 수신하는 단계와 상기 작업 요청이 동시 병렬 작업에 대한 요청인지 여부를 기초로, 상기 작업 요청으로부터 생성된 제1 패킷에 동시 병렬 식별자를 추가함으로써 제2 패킷을 생성하는 단계와 상기 제2 패킷을 큐에 저장하는 단계와 상기 동시 병렬 식별자의 존재 여부, 상기 제2 패킷에 포함된 상기 작업 요청의 내용, 상기 큐의 상태 변화 및 메모리 장치 내의 복수의 플레인(Plane)들의 상태 중 적어도 하나를 기초로 상기 제2 패킷을 상기 메모리 장치에 제공하기 위한 스케줄링 정책을 생성하는 단계와 상기 스케줄링 정책에 따라 상기 제2 패킷을 상기 메모리 장치로 전송하는 단계를 포함하고, 상기 동시 병렬 작업은 상기 복수의 플레인들 중 적어도 2 이상의 플레인을 점유하는 것을 특징으로 한다.
본 발명의 기술적 사상의 커맨드 스케줄링을 수행하는 컨트롤러, 컨트롤러를 포함하는 스토리지 장치 및 컨트롤러의 동작 방법에 따르면, 복수의 리소스들을 점유하는 동시 병렬 작업을 요청하는 커맨드에 단일 작업을 요청하는 커맨드보다 높은 우선순위를 부여함으로써, 동시 병렬 작업을 요청하는 커맨드의 굶주림 현상을 방지할 수 있는 효과가 있다.
도 1은 본 발명의 예시적인 실시예에 따른 데이터 처리 시스템을 나타내는 블록도이다.
도 2는 본 발명의 예시적인 실시예에 따른 스토리지 장치를 나타내는 블록도이다.
도 3은 본 발명의 예시적인 실시예에 따른 패키지를 나타내는 블록도이다.
도 4는 본 발명의 예시적인 실시예에 따른 메모리 컨트롤러의 동작의 일 예를 나타내는 개념도이다.
도 5는 본 발명의 예시적인 실시예에 따른 메모리 컨트롤러의 동작을 나타내는 플로우차트이다.
도 6 및 도 7은 본 발명의 예시적인 실시예에 따른 패킷의 구조를 나타내는 예시도이다.
도 8은 본 발명의 예시적인 실시예에 따른 오퍼레이션 분배기의 동작의 일 예를 나타내는 개념도이다.
도 9 및 도 10은 본 발명의 예시적인 실시예에 따른 스케줄러의 동작의 일 예를 나타내는 개념도이다.
도 11은 본 발명의 예시적인 실시예에 따른 다이 컨트롤러의 동작을 나타내는 플로우차트이다.
도 12는 본 발명의 다른 예시적인 실시예에 따른 데이터 처리 시스템을 나타내는 블록도이다.
이하, 첨부한 도면을 참조하여 본 발명의 실시예에 대해 상세히 설명한다.
도 1은 본 발명의 예시적인 실시예에 따른 데이터 처리 시스템을 나타내는 블록도이다.
도 1을 참조하면, 데이터 처리 시스템(10)은 호스트 장치(1000) 및 스토리지 장치(2000)를 포함할 수 있다. 또한, 스토리지 장치(2000)는 메모리 컨트롤러(100) 및 메모리 장치(300)를 포함할 수 있다.
호스트 장치(1000)는 사용자의 요청에 해당하는 다양한 여러 종류의 커맨드(CMD)들을 스토리지 장치(2000)로 전송할 수 있다. 이에 따라 스토리지 장치(2000)는 커맨드(CMD)들에 대응되는 동작들을 수행할 수 있다. 한편 본 명세서에서는 커맨드를 작업 요청 또는 명령을 포함하는 의미로서 사용할 수 있다.
스토리지 장치(2000)는 호스트 장치(1000)로부터의 요청에 따라 데이터를 저장하기 위한 저장 매체들을 포함할 수 있다. 한 예로서, 스토리지 장치(2000)는 하나 이상의 솔리드 스테이트 드라이브(Solid State Drive, SSD)를 포함할 수 있다. 스토리지 장치(2000)가 SSD를 포함하는 경우, 메모리 장치(300)는 데이터를 불휘발성하게 저장하는 다수 개의 플래시 메모리 칩들(예를 들어, NAND 메모리 칩들)을 포함할 수 있다. 한편, 메모리 장치(300)는 하나의 플래시 메모리 장치(300)에 해당할 수도 있으며, 또는 메모리 장치(300)는 하나 이상의 플래시 메모리 칩들을 포함하는 메모리 카드를 포함할 수도 있다.
스토리지 장치(2000)가 플래시 메모리를 포함할 때, 상기 플래시 메모리는 2D NAND 메모리 어레이나 3D(또는 수직형, Vertical) NAND(VNAND) 메모리 어레이를 포함할 수 있다. 상기 3D 메모리 어레이는 실리콘 기판 위에 배치되는 활성 영역을 가지는 메모리 셀들의 어레이들, 또는 상기 메모리 셀들의 동작과 관련된 회로로서 상기 기판상에 또는 상기 기판 내에 형성된 회로의 적어도 하나의 물리적 레벨에 모놀리식으로 형성된다. 상기 용어 "모놀리식"은 상기 어레이를 구성하는 각 레벨의 층들이 상기 어레이 중 각 하부 레벨의 층들의 바로 위에 적층되어 있음을 의미한다.
본 발명의 기술적 사상에 의한 일 실시예에서, 상기 3D 메모리 어레이는 적어도 하나의 메모리 셀이 다른 메모리 셀의 위에 위치하도록 수직 방향으로 배치된 Vertical NAND 스트링들을 포함한다. 상기 적어도 하나의 메모리 셀은 전하 트랩층을 포함할 수 있다.
미국 특허공개공보 제7,679,133호, 동 제8,553,466호, 동 제8,654,587호, 동 제8,559,235호, 및 미국 특허출원공개공보 제2011/0233648호는 3D 메모리 어레이가 복수 레벨로 구성되고 워드 라인들 및/또는 비트 라인들이 레벨들간에 공유되어 있는 3D 메모리 어레이에 대한 적절한 구성들을 상술하는 것들로서, 본 명세서에 인용 형식으로 결합된다.
다른 예로서, 스토리지 장치(2000)는 다른 다양한 종류의 메모리들을 포함할 수도 있다. 예를 들어, 스토리지 장치(2000)는 불휘발성 메모리를 포함할 수 있으며, 불휘발성 메모리는 MRAM(Magnetic RAM), 스핀전달토크 MRAM(Spin-Transfer Torque MRAM), Conductive bridging RAM(CBRAM), FeRAM(Ferroelectric RAM), PRAM(Phase RAM), 저항 메모리(Resistive RAM), 나노튜브 RAM(Nanotube RAM), 폴리머 RAM(Polymer RAM: PoRAM), 나노 부유 게이트 메모리(Nano Floating Gate Memory: NFGM), 홀로그래픽 메모리(holographic memory), 분자 전자 메모리 소자(Molecular Electronics Memory) 또는 절연 저항 변화 메모리(Insulator Resistance Change Memory) 등 다양한 종류의 메모리가 적용될 수 있다.
한 예로서, 메모리 장치(300)는 eMMC(embedded Multi-Media Card) 또는 임베디드 UFS(Universal Flash Storage) 메모리 장치(300)일 수 있다. 한 예로서, 메모리 장치(300)는 스토리지 장치(2000)에 탈착 가능한 외장(external) 메모리일 수 있다. 구체적으로, 메모리 장치(300)는 UFS 메모리 카드, CF(Compact Flash), SD(Secure Digital), Micro-SD(Micro Secure Digital), Mini-SD(Mini Secure Digital), xD(extreme Digital) 또는 메모리 스틱(Memory Stick)일 수 있으나, 이에 제한되지 않는다.
메모리 장치(300)는 복수의 메모리 블록들을 포함할 수 있다. 복수의 메모리 블록들 각각은 적어도 하나의 페이지를 포함할 수 있고, 각각의 페이지는 복수의 워드라인들이 연결된 복수의 메모리 셀들을 포함할 수 있다.
예시적인 실시예에서, 메모리 장치(300)는 복수의 다이(예를 들어 도 2의 411)들을 포함하는 패키지(400)들을 포함하며, 각각의 다이(411)는 복수의 플레인들을 포함할 수 있다. 한편 패키지(400)는 칩을 의미할 수 있고, 다이(411)는 웨이를 의미할 수 있다.
메모리 컨트롤러(100)는 복수의 채널 컨트롤러들(예를 들어, 도 2의 120, 130, 140)을 포함할 수 있으며, 각 채널 컨트롤러(120, 130, 140)는 채널(Ch1, Ch2, Chm)을 통해 메모리 장치(300)의 패키지(400)와 통신할 수 있다. 이때 채널 컨트롤러(120, 130, 140)는 복수의 다이 컨트롤러(200)를 포함할 수 있고, 각각의 다이 컨트롤러(200)는 패키지(400) 내의 다이(411)를 제어할 수 있다. 이에 대해 도 2를 통해 자세히 설명한다.
메모리 컨트롤러(100)와 메모리 장치(300)는 하나 이상의 채널(Ch1, Ch2, Chm)을 통해 커맨드, 어드레스 및 데이터를 송/수신할 수 있다. 본 명세서에서는 스토리지 장치(2000)가 m개의 채널(Ch1, Ch2, Chm)을 갖는 것을 가정하였으나, 반드시 이에 제한되는 것은 아니다.
호스트 장치(1000)는 다양한 인터페이스를 통하여 스토리지 장치(2000)와 통신할 수 있다. 한 예로서, 호스트 장치(1000)는 USB(Universal Serial Bus), MMC(MultiMediaCard), PCI-E(PCIExpress), ATA(AT Attachment), SATA(Serial AT Attachment), PATA(Parallel AT Attachment), SCSI(Small Computer System Interface), SAS(Serial Attached SCSI), ESDI(Enhanced Small Disk Interface), IDE(Integrated Drive Electronics), NVMe(Non-Volatile Memory Express) 등과 같은 다양한 인터페이스를 통해 스토리지 장치(2000)와 통신할 수 있다.
본 실시예에 따른 메모리 컨트롤러(100)는 호스트 장치(1000)로부터 수신한 커맨드가 동시 병렬 작업 요청에 관한 것인지 확인할 수 있다. 동시 병렬 작업 요청이란 메모리 장치(300) 내 복수의 리소스들을 점유하는 요청을 의미할 수 있다. 동시 병렬 작업 요청의 상대적인 의미로서, 메모리 장치(300) 내 하나의 리소스를 점유하는 요청을 단일 작업 요청이라고 지칭할 수 있다. 이때, 리소스란 작업 요청을 수행하기 위해 사용될 수 있는 항목 또는 액세스 가능한 메모리 내 영역을 의미할 수 있다. 한편 본 명세서에서는 리소스는 메모리 장치(300) 내 플레인을 의미할 수 있다.
메모리 컨트롤러(100)는 저장된 작업 요청들을 처리하기 위해 스케줄링 정책을 생성할 때, 동시 병렬 작업 요청을 고려하여 스케줄링 정책을 생성할 수 있다. 메모리 컨트롤러(100)는 스케줄링 정책 생성 과정에서 동시 병렬 작업 요청에 우선순위를 부여할 수 있다. 이에 따라 동시 병렬 작업 요청에 대한 굶주림 현상을 방지할 수 있다.
도 2는 본 발명의 예시적인 실시예에 따른 스토리지 장치를 나타내는 블록도이다.
도 1 및 도 2를 함께 참조하면, 메모리 컨트롤러(100)는 호스트 장치(1000)로부터 제공되는 커맨드(CMD)를 수신할 수 있고, 메모리 컨트롤러(100)는 커맨드(CMD)에 응답하여 메모리 장치(300)에 엑세스할 수 있다.
메모리 컨트롤러(100)는 호스트 인터페이스(Host Interface, Host I/F)(110)와 복수의 채널 컨트롤러들(120, 130, 140)을 포함할 수 있다. 호스트 인터페이스(110)와 채널 컨트롤러(120, 130, 140)는 버스를 통하여 전기적으로 접속될 수 있다. 버스는 메모리 컨트롤러(100)의 구성 수단간의 정보를 전송하는 전송로를 의미할 수 있다. 메모리 컨트롤러(100)는 이외에도 다른 구성들을 더 포함할 수 있다.
호스트 인터페이스(110)는 본 발명의 실시예들에 따라 호스트 장치(1000)와 통신하여 각종 요청을 수신하고 각종 정보를 전송할 수 있다. 예를 들어 호스트 장치(1000)로부터 다양한 종류의 커맨드(CMD)와 상기 커맨드(CMD)에 대한 데이터들을 수신할 수 있다.
한편 본 명세서에서는 스토리지 장치(2000)가 m개의 채널들(Ch1, Ch2, Chm)을 포함하는 것으로 설명하므로, 메모리 컨트롤러(100)가 m개의 채널 컨트롤러(120, 130, 140)를 포함하고, 메모리 장치(300)가 m개의 패키지(410, 420, 430)를 포함할 수 있다.
이하에서는 하나의 채널 컨트롤러(120) 및 하나의 패키지(410)에 대해 설명하며, 설명한 내용은 나머지 채널 컨트롤러(130, 140) 및 나머지 패키지(420, 430)들에 대해서도 적용될 수 있다.
채널 컨트롤러(120)는 메모리 장치(300) 내의 패키지(410)로 커맨드(CMD)를 전송할 수 있으며, 패키지(410)와 채널(Ch1)로 연결될 수 있다.
채널 컨트롤러(120)는 작업 큐(Work Queue)(121), 프로세서(122), 버퍼(123) 및 복수의 다이 컨트롤러(200)들을 포함할 수 있다. 본 명세서에서 패키지(400)는 4개의 다이(411)들을 포함하는 것을 가정하여 설명하고, 따라서 하나의 채널 컨트롤러(120, 130, 140)는 4개의 다이 컨트롤러(200)들을 포함할 수 있다.
작업 큐(121)는 호스트 장치(1000)로부터 수신한 커맨드(CMD)를 임시 저장할 수 있다.
프로세서(122)는 채널 컨트롤러(120)의 전반적인 동작을 제어할 수 있다. 프로세서(122)는 채널 컨트롤러(120) 또는 다이 컨트롤러(200)들의 동작을 제어하기 위해 ROM(미도시)에 저장된 프로그램을 실행할 수 있다.
버퍼(123)는 호스트 인터페이스(110)를 통해 호스트 장치(1000)으로부터 수신한 데이터 또는 메모리 장치(300)로부터 수신된 데이터를 임시 저장할 수 있다.
다이 컨트롤러(200)는 호스트 장치(1000)로부터 수신한 커맨드(CMD)를 채널(Ch1)을 통해 패키지(400) 내의 해당하는 다이(411)로 전송할 수 있다. 커맨드(CMD)를 전송하기 위해 스케줄링 정책을 생성하고, 생성된 스케줄링 정책에 따라 커맨드(CMD)를 다이(411)로 전송할 수 있다.
이때 본 실시예에 따른 다이 컨트롤러(200)는 각 커맨드(CMD)가 점유하는 다이(411) 내 플레인들의 개수에 따라서 각 커맨드(CMD)를 다르게 처리할 수 있다. 예를 들어 다이 컨트롤러(200)는 커맨드(CMD)가 단일 작업 요청인지 또는 동시 병렬 작업 요청인지를 고려하여 스케줄링 정책을 생성할 수 있다. 다이 컨트롤러(200)의 동작에 대해서 도 4를 통해 자세히 설명한다.
도 3은 본 발명의 예시적인 실시예에 따른 패키지를 나타내는 블록도이다.
도 2와 도 3을 함께 참조하면, 패키지(400)는 복수의 다이(411)들을 포함하며, 각각의 다이(411)는 복수의 플레인들을 포함할 수 있다. 본 실시예에서는 하나의 패키지(400)가 4개의 플레인들을 포함하는 것으로 가정하여 설명한다.
하나의 다이(411)에 속하는 플레인들은 같은 종류의 연산을 동시에 수행할 수 있고, 각각의 다이(411)는 독립적으로 낸드 연산을 동시에 수행할 수 있다.
본 실시예에서, 단일 작업 요청은 하나의 플레인만을 점유하는 작업을 의미하고, 동시 병렬 작업 요청은 동일한 시간에 복수의 플레인들을 점유해야 하는 작업을 의미할 수 있다.
도 4는 본 발명의 예시적인 실시예에 따른 컨트롤러의 동작의 일 예를 나타내는 개념도이다.
도 1과 도 4를 함께 참조하면, 스토리지 장치(2000)는 호스트 장치(1000)로부터 수신한 커맨드(CMD)를 기초로 패킷(Packet_C)을 생성할 수 있다. 예를 들어, 커맨드(CMD)가 독출 또는 기입 커맨드인 경우 생성된 패킷(Packet_C)은 입출력 요청 패킷(I/O Request Packet)일 수 있다. 생성된 패킷(Packet_C)은 커맨드(CMD)에 대응되는 정보들을 포함할 수 있다.
따라서 다이 컨트롤러(200)는 패킷(Packet_C)을 입력받고, 상기 패킷(Packet_C)을 다이(411)의 적절한 플레인으로 전송하는 역할을 한다. 이하 다이 컨트롤러(200)의 세부적인 동작에 대해 설명한다.
다이 컨트롤러(200)는 오퍼레이션 체커(Operation Checker)(210), 오퍼레이션 분배기(Operation Distributor)(220), 큐 컨트롤러(Queue Controller)(230), 가상 큐 클러스터(Virtual Queue Cluster)(240) 그리고 스케줄러(Scheduler)(250)를 포함할 수 있다.
오퍼레이션 체커(210)는 수신한 패킷(Packet_C)이 단일 작업 요청으로부터 생성된 것인지 또는 동시 병렬 작업 요청으로부터 생성된 것인지 확인할 수 있다.
이하에서는 편의상 단일 작업 요청으로부터 생성된 패킷을 단일 패킷이라 지칭하고, 동시 병렬 작업 요청으로부터 생성된 패킷을 동시 병렬 패킷이라 지칭한다.
오퍼레이션 체커(210)는 동시 병렬 패킷(Packet_C)에 구분을 위한 식별자를 추가할 수 있다. 식별자는 0 또는 1의 비트일 수 있고, 텍스트로 구현될 수도 있다. 상기 식별자를 동시 병렬 식별자라고 지칭할 수 있다. 한 예로서, 단일 패킷은 식별자가 추가되지 않고, 동시 병렬 패킷에만 식별자가 추가될 수 있다. 이하에서는 식별자가 추가된 패킷(Packet_C')을 가정하여 설명한다
오퍼레이션 분배기(220)는 오퍼레이션 체커(210)로부터 전달받은 패킷(Packet_C')을 버스를 통해 가상 큐 클러스터(240)로 포워딩할 수 있다. 오퍼레이션 분배기(220)는 패킷(Packet_C')에 포함된 정보들을 참조하고, 정보들을 기초로 패킷(Packet_C')을 가상 출력 큐(Virtual Output Queue)에 포워딩할 수 있다.
예를 들어 오퍼레이션 분배기(220)는 단일 패킷과 동시 병렬 패킷에 포함된 정보를 참조하고, 각 패킷에 동시 병렬 식별자가 존재하는지 확인할 수 있다.
오퍼레이션 분배기(220)는 동시 병렬 식별자가 없는 단일 패킷과 동시 병렬 식별자가 있는 동시 병렬 패킷을 서로 다른 가상 출력 큐에 포워딩할 수 있다.
패킷(Packet_C')이 점유하는 플레인에 따라 포워딩되는 가상 출력 큐가 결정될 수 있다. 또한 패킷(Packet_C')이 어떤 호스트 장치(1000)로부터 생성되었는지에 따라 포워딩되는 가상 출력 큐가 결정될 수 있다.
오퍼레이션 분배기(220)는 포워딩한 패킷(Packet_C')을 가상 출력 큐에 저장하기 위해서, 큐 컨트롤러(230)에 업데이트 명령을 전송할 수 있다.
큐 컨트롤러(230)는 포워딩 된 패킷(Packet_C')을 대응되는 가상 출력 큐에 저장(Push 또는 Enqueue)할 수 있다.
가상 큐 클러스터(240)는 복수의 가상 출력 큐들을 포함할 수 있다. 본 명세서에서 편의상 큐 클러스터(240)로 지칭될 수 있다. 각 가상 출력 큐는 오퍼레이션 분배기(220)로부터 포워딩 된 패킷(Packet_C')들을 저장할 수 있다.
한편 패킷(Packet_C')이 점유하는 플레인에 따라 패킷(Packet_C')이 저장되는 가상 출력 큐가 결정될 수 있다. 단일 작업 요청에 대해 예를 들면, 제1 플레인(Plane1)을 점유하는 패킷은 제1 가상 출력 큐에 저장되고, 제2 플레인(Plane2)을 점유하는 패킷은 제2 가상 출력 큐에 저장되고, 제3 플레인(Plane3)을 점유하는 패킷은 제3 가상 출력 큐에 저장되고, 제4 플레인(Plane4)을 점유하는 패킷은 제4 가상 출력 큐에 저장될 수 있다.
동시 병렬 작업 요청에 대해 예를 들면, 제1 플레인(Plane1)과 제2 플레인(Plane2)을 점유하는 패킷은 제1 가상 출력 큐에 저장되고, 제3 플레인(Plane3)과 제4 플레인(Plane4)을 점유하는 패킷은 제3 가상 출력 큐에 저장될 수 있다.
패킷(Packet_C')이 가상 출력 큐에 저장되는 규칙은 반드시 이에 제한되는 것은 아니며, 설정에 따라 달라질 수 있다.
큐 클러스터(240)는 큐 컨트롤러(230)의 저장 작업으로 인해 각 가상 출력 큐의 헤드(Head)에 발생한 변화를 스케줄러(250)에 제공할 수 있다. 예를 들어, 큐 클러스터(240)는 각 가상 출력 큐의 헤드에 위치한 패킷(Packet_C')의 정보(Data_Head)를 스케줄러(250)에 제공할 수 있다.
한편, 도 4에서는 큐 클러스터(240)가 1개인 예시를 도시하였으나, 다이 컨트롤러(200)는 복수의 큐 클러스터(240)들을 포함할 수 있다. 예를 들어 스토리지 장치(2000)가 복수의 호스트 장치(1000)들로부터 커맨드를 수신하는 경우, 다이 컨트롤러(200)는 각각의 호스트 장치(1000)에 대응되는 별도의 큐 클러스터(240)를 포함할 수 있다. 복수의 호스트 장치(1000)들이 존재하는 경우에 대해서는 도 12를 통해 설명한다.
스케줄러(250)는 큐 클러스터(240)로부터 각 가상 출력 큐들의 헤드에 위치한 패킷(Packet_C')들의 정보(Data_Head)를 수신하고, 다이(411)로부터 각 플레인의 상태 정보(Data_Plane)를 수신할 수 있다. 예를 들어 플레인이 별도의 동작을 수행중인 경우 비지 신호를, 플레인이 별도의 동작을 수행하지 않는 상태인 경우 유휴 신호를 수신할 수 있다. 스케줄러(250)는 이외에도 플레인으로부터 다른 여러 정보들을 제공받을 수 있다.
스케줄러(250)는 수신한 정보(Data_Head)를 관리하고, 상기 정보(Data_Head)를 기초로 가상 출력 큐의 스케줄링 정책을 생성할 수 있다. 스케줄링 정책이란 가상 출력 큐에 저장된 패킷(Packet_C')을 메모리 장치(300)로 전송하기 위한 스케줄링 정책을 의미할 수 있고, 각 패킷(Packet_C')의 전송에 대한 우선순위를 포함할 수 있다.
스케줄러(250)는 다양한 스케줄링 정책들을 복합적으로 활용할 수 있다. 이때 스케줄러(250)는 동시 병렬 패킷이 가상 출력 큐에서 나가지(PoP, Dequeue) 못하는 굶주림 현상을 방지하기 위해, 스케줄링 정책을 생성하거나 이미 생성된 스케줄링 정책을 수정할 수 있다.
굶주림 현상이란, 우선순위가 낮은 가상 출력 큐에 속하는 패킷은 메모리 장치(300)에 전송되지 못하고, 상기 패킷에 대응되는 커맨드가 실행되지 않는 현상을 의미한다.
한편 스케줄러(250)는 비교예에 따른, 가중치 공정 스케줄링 정책(Weighted Fair Queuing)을 이용할 수 있다.
가중치 공정 스케줄링 정책에 따르면, 호스트 장치(1000)에 따라 큐 클러스터(240)가 달라지고, 각 큐 클러스터(240)가 서로 다른 가중치를 가질 수 있다. 따라서 하나의 큐 클러스터(240)에 포함된 가상 출력 큐들 간에는 우선순위가 존재하지 않고, 가상 출력 큐들이 같은 양의 패킷들을 저장하고 있는 경우 패킷들이 서로 다른 순서로 플레인으로 전달될 수 있다.
한편, 각 플레인의 상태에 따라 가상 출력 큐에서 패킷들이 출력되는데, 이때 하나의 플레인만을 점유하는 단일 작업 요청이 출력될 확률이 높다. 복수의 플레인들이 동시에 유휴 상태가 될 확률보다, 어느 하나의 플레인이 유휴 상태가 될 확률이 더 높기 때문이다.
따라서, 단일 패킷과 동시 병렬 패킷이 모두 가상 출력 큐에 저장되어 있을 때, 단일 패킷은 대응되는 플레인으로 전달될 것이지만, 동시 병렬 패킷은 가상 출력 큐에서 계속 대기해야 하는 굶주림 현상이 발생할 확률이 높다. 이는 하나의 큐 클러스터(240) 내에서는 우선순위가 존재하지 않기 때문이다.
따라서 본 실시예에 따른 스케줄러(250)는 단일 작업 요청과 동시 병렬 작업 요청 간 우선순위에 차등을 주는 방법을 제안한다.
스케줄러(250)는 동시 병렬 작업 요청에 더 높은 우선순위를 부여함으로써, 단일 패킷이 출력 가능한 경우에도, 출력을 방지하고 동시 병렬 패킷을 먼저 출력할 수 있다. 다른 예로서, 스케줄러(250)는 동시 병렬 패킷이 저장되는 가상 출력 큐에 다른 가상 출력 큐들에 비해 높은 우선순위를 부여할 수 있다.
스케줄러(250)는 생성된 스케줄링 정책에 따라 가상 출력 큐에서 패킷(Packet_C')을 출력하여 플레인으로 전달할 수 있다.
도 5는 본 발명의 예시적인 실시예에 따른 메모리 컨트롤러의 동작을 나타내는 플로우차트이다.
도 1, 도 4 및 도 5를 함께 참조하면, 메모리 컨트롤러(100)는 호스트 장치(1000)로부터 커맨드(CMD)를 수신할 수 있다(S110). 이후 메모리 컨트롤러(100)는 상기 커맨드(CMD)를 기초로 패킷(Packet_C)을 생성할 수 있다.
메모리 컨트롤러(100)는 상기 커맨드(CMD)가 동시 병렬 작업 요청인지 확인하고, 동시 병렬 작업 요청인 경우 상기 커맨드(CMD)를 기초로 생성된 패킷(Packet_C)에 동시 병렬 식별자를 추가할 수 있다(S120). 예를 들어, 메모리 컨트롤러(100)는 단일 패킷에는 동시 병렬 식별자를 추가하지 않고, 동시 병렬 패킷에 동시 병렬 식별자를 추가할 수 있다. 이하에서는 상기 커맨드(CMD)가 동시 병렬 요청에 의한 것으로서, 동시 병렬 식별자가 추가된 패킷(Packet_C')에 대해 설명한다.
메모리 컨트롤러(100)는 패킷(Packet_C')의 정보를 기초로 패킷(Packet_C')을 큐 클러스터(240) 내의 가상 출력 큐에 저장할 수 있다(S130).
메모리 컨트롤러(100)는 상기 커맨드(CMD)가 필요로 하는 자원 또는 플레인에 따라, 패킷(Packet_C')을 저장하는 가상 출력 큐를 구분할 수 있다. 예를 들어, 제1 플레인(Plane1), 제2 플레인(Plane2)을 점유하는 커맨드로부터 생성된 패킷은 제1 가상 출력 큐에 저장하고, 플레인 3(Plane3)을 점유하는 커맨드로부터 생성된 패킷은 제3 가상 출력 큐에 저장할 수 있다.
가상 출력 큐는 헤드 부분의 상태 변화를 스케줄러(250)에 전달할 수 있다(S140). 예를 들어 헤드 부분에 저장된 패킷(Packet_C')의 정보(Data_Head)를 스케줄러(250)로 전달할 수 있다.
메모리 컨트롤러(100)는 패킷(Packet_C')의 정보(Data_Head), 가상 출력 큐의 헤드의 상태 변화 및 메모리 장치(300) 내의 복수의 플레인들의 상태를 고려하여 스케줄링 정책을 생성할 수 있다(S150). 본 실시예에 따른 스케줄링 정책이란, 동시 병렬 작업 요청 커맨드로부터 생성된 패킷의 굶주림 현상을 방지하기 위해, 상기 패킷이 가상 출력 큐에 저장된 때로부터 미리 정해진 시간 이내에 출력되기 위한 정책을 의미할 수 있다.
메모리 컨트롤러(100)는 여러 다양한 스케줄링 정책을 이용할 수 있으며, 다양한 스케줄링 정책을 이용하여 생성된 스케줄링 후보들 중 상기의 목적을 달성하기 위한 어느 하나의 스케줄링 정책을 선택할 수 있다.
메모리 컨트롤러(100)는 스케줄링 정책에 따라 가상 출력 큐에 저장된 패킷(Packet_C')을 출력하여 메모리 장치(300)의 다이(411)로 전송할 수 있다(S160).
도 6 및 도 7은 본 발명의 예시적인 실시예에 따른 패킷의 구조를 나타내는 예시도이다.
도 4와 도 6을 함께 참조하면, 동시 병렬 작업 요청 커맨드로부터 생성된 패킷(Packet_C)에 대해 설명한다.
상기 패킷(Packet_C)은 커맨드를 수행하기 위한 작업 요청의 내용을 포함하며, 도 6에 도시되지 않은 다양한 여러 정보들을 더 포함할 수 있다.
예를 들어 작업 요청의 내용은, 상기 작업 요청에 대응되는 채널 정보(Channel_ID), 상기 작업 요청에 대응되는 다이 정보(Die_ID), 상기 작업 요청이 점유하려는 플레인 정보(Plane_Bitmap), 상기 작업 요청이 생성된 호스트 장치(1000)의 정보(Tenant_ID) 및 상기 작업 요청의 종류(OP_Code) 중 적어도 하나를 포함할 수 있다.
예를 들어, 상기 커맨드가 독출 커맨드인지 또는 기입 커맨드인지를 1 또는 0으로 구분할 수 있다.
패킷(Packet_C)이 다이 컨트롤러(200)에 입력되면, 오퍼레이션 체커(210)는 상기 패킷(Packet_C)이 동시 병렬 작업 요청 커맨드로부터 생성된 것인지 확인하여, 상기 패킷(Packet_C)에 동시 병렬 식별자(Barrier_Bit)를 추가할 수 있다. 동시 병렬 식별자(Barrier_Bit)는 0 또는 1의 비트로 구현되거나 텍스트로 구현될 수도 있다. 한편, 오퍼레이션 체커(210)는 동시 병렬 패킷을 단일 패킷과 구분하면 족하므로, 반드시 식별자를 사용할 필요는 없다.
예를 들어 도 7을 참조하면, 제1 패킷(Packet_C1)은 동시 병렬 패킷이고, 제2 패킷(Packet_C2)과 제3 패킷(Packet_C3)이 단일 패킷인 상황을 가정한다.
오퍼레이션 체커(210)는 제1 패킷(Packet_C1)에 1을 추가하고, 제2 패킷(Packet_C2)과 제3 패킷(Packet_C3)에는 0을 추가할 수 있다. 이 경우 패킷(Packet_C)에 1이 추가된 것을 동시 병렬 식별자(Barrier_Bit)가 추가된 것이라고 지칭할 수 있다.
도 8은 본 발명의 예시적인 실시예에 따른 오퍼레이션 분배기의 동작의 일 예를 나타내는 개념도이다.
도 4 및 도 8을 함께 참조하면, 오퍼레이션 분배기(220)는 제공받은 패킷들(Packet_C1', Packet_C2', Packet_C3')의 정보(Data_Head)를 참조하여, 각 패킷을 구분하여 가상 출력 큐에 포워딩할 수 있다. 포워딩 된 패킷은 큐 컨트롤러(230)에 의해 저장될 수 있다.
위의 예에서, 오퍼레이션 분배기(220)는 제1 패킷(Packet_C1’)이 저장되는 가상 출력 큐와 제2 패킷(Packet_C2’)과 제3 패킷(Packet_C3’)이 저장되는 가상 출력 큐를 서로 다르게 지정할 수 있다. 예를 들어 제1 패킷(Packet_C1’)이 제1 플레인(Plane1)과 제2 플레인(Plane2)을 동시에 점유하는 작업에 관한 것이고, 제2 패킷(Packet_C2’)이 제2 플레인(Plane2)을 점유하고, 제3 패킷(Packet_C3’)이 제3 플레인(Plane3)을 점유하는 작업에 관한 것을 가정하여 설명한다.
오퍼레이션 분배기(220)는 제1 가상 출력 큐(VQ1)에는 제1 플레인(Plane1) 을 점유하는 단일 패킷과 동시 병렬 패킷을 저장하도록 지정할 수 있다. 제2 가상 출력 큐(VQ2)에는 제2 플레인(Plane2)을 점유하는 단일 패킷을 저장하도록 지정하고, 제3 가상 출력 큐(VQ3)에는 제3 플레인(Plane3)을 점유하는 단일 패킷과 동시 병렬 패킷을 저장하도록 지정할 수 있다. 제4 가상 출력 큐(VQ4)에는 제4 플레인(Plane4)을 점유하는 단일 패킷을 저장하도록 지정할 수 있다. 그러나 구분 방법은 반드시 이에 제한되는 것은 아니다. 또한 가상 출력 큐의 상황에 따라 단일 패킷과 동시 병렬 패킷이 저장되는 가상 출력 큐가 구분되지 않을 수도 있다.
도 9 및 도 10은 본 발명의 예시적인 실시예에 따른 스케줄러의 동작의 일 예를 나타내는 개념도이다.
도 9와 도 10을 함께 참조하면, 스케줄러(250)는 팩터 매니저(251), 플레인 상태 매니저(252), 스케줄 매니저(253) 그리고 스위치(254)를 포함할 수 있다.
팩터 매니저(251)는 스케줄링 정책(Data_Sch)을 생성하기 위한 정보(Data_Head)들을 수집할 수 있다. 예를 들어 큐 클러스터(240)에 포함된 복수의 가상 출력 큐들로부터 각 가상 출력 큐의 헤드에 저장된 패킷의 정보(Data_Head)를 수집할 수 있다. 또한 메모리 장치(300) 내 복수의 플레인들로부터 플레인 상태 매니저(252)를 통해 각 플레인의 점유 상태에 대한 정보(Data_Plane)를 수집할 수 있다.
팩터 매니저(251)는 도 10에 도시된 바와 같이 수집한 정보(Data_Head, Data_Plane)들을 관리할 수 있다. 예를 들어 팩터 매니저(251)는 플레인의 상태에 대한 정보(Data_Plane)를 0 또는 1의 비트로 표시하여 관리할 수 있다. 도 10에서, 제1 플레인(Plane1) 및 제3 플레인(Plane3)의 상태는 유휴 상태이고, 제2 플레인(Plane2) 및 제4 플레인(Plane4)은 비지 상태일 수 있다.
팩터 매니저(251)는 각 가상 출력 큐의 헤드에 저장된 패킷이 어떤 플레인을 점유하는지에 대한 정보(PB_VQ1, PB_VQ2, PB_VQ3, PB_VQ4)를 관리할 수 있다. 예를 들어, 제1 가상 출력 큐에 저장된 패킷은 제1 플레인(Plane1) 내지 제4 플레인(Plane4)을 점유할 수 있고, 팩터 매니저(251)는 이 정보(PB_VQ1)를 '1111'로 표시할 수 있다. 또한 제2 가상 출력 큐에 저장된 패킷은 제2 플레인(Plane2)을 점유할 수 있고, 팩터 매니저(251)는 이 정보(PB_VQ2)를 '0010'로 표시할 수 있다. 제3 가상 출력 큐에 저장된 패킷은 제3 플레인(Plane3) 및 제4 플레인(Plane4)을 점유할 수 있고, 팩터 매니저(251)는 이 정보(PB_VQ3)를 '1100'로 표시할 수 있다. 제4 가상 출력 큐의 헤드에는 어떠한 패킷도 저장되어 있지 않은 경우, 팩터 매니저(251)는 이 정보(PB_VQ4)를 '0000'로 표시할 수 있다.
한 예로서, 스케줄러(250)가 가중치 공정 스케줄링 정책(Data_Sch)을 이용하는 경우, 팩터 매니저(251)는 호스트 장치(1000)의 가상 타임스탬프(Virtual Time Stamp)에 대한 정보(VTS)를 더 수집할 수 있다.
팩터 매니저(251)는 가상 출력 큐에 저장된 패킷들 중 동시 병렬 패킷이 어떤 가상 출력 큐의 헤드에 위치하는지에 대한 정보를 관리할 수도 있다. 예를 들어, 4개의 플레인을 점유하는 동시 병렬 패킷과 제3 플레인(Plane3) 및 제4 플레인(Plane4)을 점유하는 동시 병렬 패킷은 가상 출력 큐의 헤드에 위치하고, 제1 플레인(Plane1) 및 제2 플레인(Plane2)을 점유하는 동시 병렬 패킷은 가상 출력 큐의 헤드에 위치하지 않는다는 정보를 관리할 수 있다.
한편 팩터 매니저(251)는 이 외에도 스케줄링에 필요한 정보들을 더 수집하고 관리할 수 있다.
플레인 상태 매니저(252)는 플레인으로부터 플레인 상태 정보(Data_Plane)를 수신할 수 있고, 이를 팩터 매니저(251) 또는 스케줄 매니저(253)에 전달할 수 있다.
스케줄 매니저(253)는 팩터 매니저(251) 또는 플레인 상태 매니저(252)로부터 여러 정보들(Barrier_Bitmap, VTS, Data_Plane)을 제공받고, 이를 기초로 스케줄링 정책(Data_Sch)을 생성할 수 있다. 한 예로서, 스케줄 매니저(253)는 큐 클러스터(240)의 가상 출력 큐에 새로운 패킷이 들어온 경우에 스케줄링 정책 생성을 시작할 수 있다.
스케줄 매니저(253)가 이용하는 스케줄링 정책 생성 알고리즘은 어느 하나로 제한되지 않는다.
본 실시예에 따른 스케줄 매니저(253)는 복수의 플레인들을 점유하는 명령인 동시 병렬 작업에 대한 패킷이 일정 시간 내에 가상 출력 큐에서 빠져나올 수 있도록 하는 것이 목적이다. 즉 상기 패킷의 굶주림 현상을 방지하기 위한 스케줄링 정책(Data_Sch)을 생성하는 것이 목적이다.
따라서 스케줄 매니저(253)는 현재 가상 출력 큐에서 꺼내질 수 있는 패킷들에 관한 스케줄링 정책(Data_Sch)을 생성하고, 상기 스케줄링 정책(Data_Sch)이 동시 병렬 작업에 대한 패킷의 출력을 방해하는 경우, 이미 생성된 스케줄링 정책(Data_Sch)을 수정할 수 있다.
스케줄 매니저(253)는 생성된 스케줄링 정책(Data_Sch)을 스위치(254)로 전달하고, 스위치(254)는 패킷(Packet_C')을 해당하는 플레인으로 전달할 수 있다.
도 11은 본 발명의 예시적인 실시예에 따른 다이 컨트롤러의 동작을 나타내는 플로우차트이다.
도 4, 도 9 및 도 11을 함께 참조하면, 다이 컨트롤러(200) 내 오퍼레이션 체커(210)가 동시 병렬 작업에 대한 패킷(Packet_C)을 수신하고, 상기 패킷(Packet_C)에 동시 병렬 식별자를 부가한 이후 단계에 대해 설명한다.
오퍼레이션 분배기(220)는 오퍼레이션 체커(210)로부터 패킷(Packet_C')을 수신할 수 있다(S301).
오퍼레이션 분배기(220)는 상기 패킷(Packet_C')을 큐 클러스터(240)에 포워딩할 수 있다(S302).
오퍼레이션 분배기(220)는 상기 패킷(Packet_C')을 가상 출력 큐에 저장하기 위해 큐 컨트롤러(230)로 업데이트 명령을 전송할 수 있다(S303).
업데이트 명령을 받은 큐 컨트롤러(230)는 큐 클러스터(240)의 가상 출력 큐에 패킷(Packet_C')을 저장할 수 있다(S304).
새로운 패킷(Packet_C')이 저장되면, 큐 컨트롤러(230)는 스케줄러(250)로 가상 출력 큐의 헤드에 위치한 패킷들의 정보(Data_Head)를 전송할 수 있다(S305). 한편 큐 컨트롤러(230)는 가상 출력 큐의 헤드에 위치하지 않은 패킷들의 정보도 전송할 수 있다.
스케줄러(250)는 수신한 패킷 정보(Data_Head)를 기초로 스케줄링 정책(Data_Sch)을 생성할 수 있다(S306). 한편 스케줄러(250)는 스케줄링 정책(Data_Sch)을 생성하기 위한 여러 다양한 정보들을 고려할 수 있음은 물론이다. 스케줄러(250)가 생성한 스케줄링 정책(Data_Sch)은 큐 클러스터(240) 내의 동시 병렬 작업에 대한 패킷이 고려된 것일 수 있다.
스케줄링 정책(Data_Sch)이 생성되면, 큐 클러스터(240)는 스케줄러(250)로 패킷(Packet_C')을 전송하고(S307), 스케줄러(250)는 상기 패킷(Packet_C')을 다이(411)로 전송할 수 있다(S308). 예를 들어 스케줄러(250)의 스위치(254)는 상기 패킷(Packet_C')을 상기 패킷(Packet_C')이 점유하는 플레인으로 전송할 수 있다.
패킷(Packet_C')을 수신한 다이(411)는 스케줄러(250)로 완료 정보를 전송할 수 있다(S309). 상기 완료 정보는 다이(411)에 포함된 각 플레인의 상태 정보(Data_Plane)를 포함할 수 있다. 한 예로서, 패킷(Packet_C')을 수신함으로써 플레인의 상태 정보(Data_Plane)가 변경될 수 있다.
스케줄러(250)는 큐 컨트롤러(230)로 상기 완료 정보에 포함된 플레인 상태 정보(Data_Plane)를 전송할 수 있다(S310).
큐 컨트롤러(230)는 전송이 완료된 패킷(Packet_C')을 가상 출력 큐로부터 삭제하기 위한 명령을 큐 클러스터(240)로 전송할 수 있다(S311).
도 12는 본 발명의 다른 예시적인 실시예에 따른 데이터 처리 시스템을 나타내는 블록도이다.
이하에서 도 1 및 도 2와 중복되는 내용의 설명은 생략한다.
도 4, 도 9 및 도 12를 함께 참조하면, 데이터 처리 시스템(20)은 커맨드를 제공하는 복수의 호스트 장치(1100, 1200, 1300)들을 포함할 수 있다. 각 호스트 장치(1100, 1200, 1300)는 테넌트(Tenant)로 지칭될 수 있으며, 스토리지 장치(3000)의 메모리 컨트롤러(3100)는 각 호스트 장치(1100, 1200, 1300)의 커맨드를 구분하여 처리하고, 각 커맨드를 구분하여 큐 클러스터(3110, 3120, 3130)에 저장할 수 있다. 따라서 스토리지 장치(3000)는 복수 개의 큐 클러스터(3110, 3120, 3130)들을 포함할 수 있다.
이때, 스토리지 장치(3000)가 가중치 공정 스케줄링 정책을 사용하는 경우, 호스트 장치들(1100, 1200, 1300) 간 가상 타임스탬프는 서로 다를 수 있고, 가상 타임스탬프의 차이를 기초로 스케줄링 정책이 생성될 수 있다.
한 예로서, 스케줄러(250) 내 스케줄 매니저(253)는 스케줄링 정책 생성을 위해서, 가상 타임스탬프의 값이 가장 작은 호스트 장치에 대응되는 큐 클러스터(240)를 먼저 탐색할 수 있다. 상기 큐 클러스터(240)에 출력 가능한 패킷이 있는 경우 상기 패킷을 출력하기 위한 스케줄링 정책을 생성하고, 상기 패킷을 출력할 수 있다. 패킷의 출력 가능 여부는 플레인의 상태, 패킷의 정보 등을 고려하여 결정될 수 있다.
상기 큐 클러스터(240)에 출력 가능한 패킷이 없는 경우, 가상 타임스탬프의 값이 2번째로 작은 호스트 장치에 대응되는 큐 클러스터(240)를 탐색할 수 있다.
이상에서와 같이 도면과 명세서에서 예시적인 실시예들이 개시되었다. 본 명세서에서 특정한 용어를 사용하여 실시예들을 설명되었으나, 이는 단지 본 발명의 기술적 사상을 설명하기 위한 목적에서 사용된 것이지 의미 한정이나 특허청구범위에 기재된 본 발명의 범위를 제한하기 위하여 사용된 것은 아니다. 그러므로 본 기술분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시예가 가능하다는 점을 이해할 것이다. 따라서, 본 발명의 진정한 기술적 보호범위는 첨부된 특허청구범위의 기술적 사상에 의해 정해져야 할 것이다.

Claims (10)

  1. 호스트 장치와 통신하는 스토리지 장치에 있어서,
    복수의 플레인(Plane)들을 포함하는 메모리 장치; 및
    상기 호스트 장치로부터 동시 병렬 작업 요청을 수신하여 큐에 저장하고, 상기 동시 병렬 작업 요청으로부터 생성된 제1 패킷과 단일 작업 요청으로부터 생성된 제2 패킷을 구분하기 위해 상기 제1 패킷에 동시 병렬 식별자를 추가한 제3 패킷을 생성하고, 상기 동시 병렬 식별자의 여부를 고려하는 스케줄링 정책에 따라 상기 제2 패킷을 상기 동시 병렬 작업 요청이 점유하는 적어도 하나 이상의 플레인들로 전송하는 컨트롤러를 포함하고,
    상기 동시 병렬 작업 요청은 상기 복수의 플레인들 중 적어도 2 이상의 플레인을 점유하고, 상기 단일 작업 요청은 상기 복수의 플레인들 중 하나의 플레인을 점유하는 것을 특징으로 하는 스토리지 장치.
  2. 제1항에 있어서,
    상기 스케줄링 정책은 상기 동시 병렬 식별자가 포함된 패킷에 높은 우선순위를 부여하는 것을 특징으로 하는 스토리지 장치.
  3. 제1항에 있어서,
    상기 컨트롤러는,
    상기 제3 패킷의 상기 동시 병렬 식별자를 확인하고, 상기 제3 패킷이 상기 큐에 저장된 때로부터 제1 시간 이내에, 상기 제3 패킷을 상기 메모리 장치에 전송하는 것을 특징으로 하는 스토리지 장치.
  4. 제1항에 있어서,
    상기 큐는 복수의 가상 출력 큐들을 포함하고,
    상기 컨트롤러는,
    상기 작업 요청이 점유하는 적어도 하나 이상의 플레인들에 따라 상기 제3 패킷을 제1 가상 출력 큐에 저장하는 것을 특징으로 하는 스토리지 장치.
  5. 제4항에 있어서,
    상기 컨트롤러는,
    상기 제2 패킷을 제2 가상 출력 큐에 저장하고, 상기 제1 가상 출력 큐의 우선순위를 상기 제2 가상 출력 큐의 우선순위보다 높게 설정하는 것을 특징으로 하는 스토리지 장치.
  6. 제1항에 있어서,
    상기 스케줄링 정책은 상기 복수의 플레인들 각각이 작업 중(Busy)인지 또는 유휴 상태(Idle)인지에 대한 정보를 기초로 생성된 것을 특징으로 하는 스토리지 장치.
  7. 스토리지 장치의 컨트롤러의 스케줄링 방법에 있어서
    호스트 장치로부터 작업 요청(Command)을 수신하는 단계;
    상기 작업 요청이 동시 병렬 작업에 대한 요청인지 여부를 기초로, 상기 작업 요청으로부터 생성된 제1 패킷에 동시 병렬 식별자를 추가함으로써 제2 패킷을 생성하는 단계;
    상기 제2 패킷을 큐에 저장하는 단계;
    상기 동시 병렬 식별자의 존재 여부, 상기 제2 패킷에 포함된 상기 작업 요청의 내용, 상기 큐의 상태 변화 및 메모리 장치 내의 복수의 플레인(Plane)들의 상태 중 적어도 하나를 기초로 상기 제2 패킷을 상기 메모리 장치에 제공하기 위한 스케줄링 정책을 생성하는 단계; 및
    상기 스케줄링 정책에 따라 상기 제2 패킷을 상기 메모리 장치로 전송하는 단계를 포함하고,
    상기 동시 병렬 작업은 상기 복수의 플레인들 중 적어도 2 이상의 플레인을 점유하는 것을 특징으로 하는 스케줄링 방법.
  8. 제7항에 있어서,
    상기 제2 패킷을 상기 메모리 장치에 제공하기 위한 스케줄링 정책을 생성하는 단계는,
    상기 제2 패킷이 상기 큐에 저장된 때로부터 제1 시간 이내에, 상기 제2 패킷을 상기 메모리 장치에 전송하기 위한 상기 스케줄링을 정책을 생성하는 것을 특징으로 하는 스케줄링 방법.
  9. 제8항에 있어서,
    상기 제2 패킷을 상기 메모리 장치에 제공하기 위한 스케줄링 정책을 생성하는 단계는,
    복수의 스케줄링 정책들 중 상기 큐에 적용 가능한 제1 스케줄링 정책들을 선정하는 단계; 및
    상기 제1 스케줄링 정책들 중에서, 상기 제2 패킷이 상기 큐에 저장된 때로부터 제1 시간을 초과하여 상기 제2 패킷을 상기 메모리 장치에 전송하는 제2 스케줄링 정책을 제외시키는 단계를 포함하는 것을 특징으로 하는 스케줄링 방법.
  10. 제7항에 있어서,
    상기 제2 패킷에 포함된 상기 작업 요청의 내용은,
    상기 작업 요청에 대응되는 채널 정보, 상기 작업 요청에 대응되는 다이 정보, 상기 작업 요청이 점유하는 플레인 정보 및 상기 작업 요청이 생성된 호스트 정보, 상기 작업 요청의 종류 중 적어도 하나를 포함하는 것을 특징으로 하는 스케줄링 방법.
KR1020200141571A 2020-10-28 2020-10-28 커맨드 스케줄링을 수행하는 컨트롤러, 컨트롤러를 포함하는 스토리지 장치 및 컨트롤러의 동작 방법 KR20220056729A (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020200141571A KR20220056729A (ko) 2020-10-28 2020-10-28 커맨드 스케줄링을 수행하는 컨트롤러, 컨트롤러를 포함하는 스토리지 장치 및 컨트롤러의 동작 방법
US17/376,942 US20220129310A1 (en) 2020-10-28 2021-07-15 Controller for performing command scheduling, storage device including the controller, and operating method of the controller
EP21189113.0A EP3992771B1 (en) 2020-10-28 2021-08-02 Controller for performing command scheduling, storage device including the controller, and operating method of the controller
CN202110913616.8A CN114489470A (zh) 2020-10-28 2021-08-10 控制器、包括该控制器的存储设备和该控制器的操作方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020200141571A KR20220056729A (ko) 2020-10-28 2020-10-28 커맨드 스케줄링을 수행하는 컨트롤러, 컨트롤러를 포함하는 스토리지 장치 및 컨트롤러의 동작 방법

Publications (1)

Publication Number Publication Date
KR20220056729A true KR20220056729A (ko) 2022-05-06

Family

ID=77168114

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200141571A KR20220056729A (ko) 2020-10-28 2020-10-28 커맨드 스케줄링을 수행하는 컨트롤러, 컨트롤러를 포함하는 스토리지 장치 및 컨트롤러의 동작 방법

Country Status (4)

Country Link
US (1) US20220129310A1 (ko)
EP (1) EP3992771B1 (ko)
KR (1) KR20220056729A (ko)
CN (1) CN114489470A (ko)

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101226685B1 (ko) 2007-11-08 2013-01-25 삼성전자주식회사 수직형 반도체 소자 및 그 제조 방법.
KR101691092B1 (ko) 2010-08-26 2016-12-30 삼성전자주식회사 불휘발성 메모리 장치, 그것의 동작 방법, 그리고 그것을 포함하는 메모리 시스템
US8553466B2 (en) 2010-03-04 2013-10-08 Samsung Electronics Co., Ltd. Non-volatile memory device, erasing method thereof, and memory system including the same
US9536970B2 (en) 2010-03-26 2017-01-03 Samsung Electronics Co., Ltd. Three-dimensional semiconductor memory devices and methods of fabricating the same
KR101682666B1 (ko) 2010-08-11 2016-12-07 삼성전자주식회사 비휘발성 메모리 장치, 그것의 채널 부스팅 방법, 그것의 프로그램 방법 및 그것을 포함하는 메모리 시스템
KR102615659B1 (ko) * 2016-07-08 2023-12-20 에스케이하이닉스 주식회사 메모리 시스템 및 이의 동작 방법
KR20180045102A (ko) * 2016-10-24 2018-05-04 삼성전자주식회사 메모리 컨트롤러의 동작 방법 및 메모리 컨트롤러를 포함하는 저장 장치의 동작 방법
KR20180062247A (ko) * 2016-11-30 2018-06-08 삼성전자주식회사 효율적인 버퍼 할당을 수행하는 컨트롤러, 스토리지 장치 및 스토리지 장치의 동작 방법
US10740042B2 (en) * 2016-12-30 2020-08-11 Western Digital Technologies, Inc. Scheduling access commands for data storage devices
US10387081B2 (en) * 2017-03-24 2019-08-20 Western Digital Technologies, Inc. System and method for processing and arbitrating submission and completion queues
US10672175B2 (en) * 2017-04-17 2020-06-02 Intel Corporation Order independent asynchronous compute and streaming for graphics
KR102410671B1 (ko) * 2017-11-24 2022-06-17 삼성전자주식회사 스토리지 장치, 스토리지 장치를 제어하는 호스트 장치, 및 스토리지 장치의 동작 방법
KR20190090614A (ko) * 2018-01-25 2019-08-02 에스케이하이닉스 주식회사 메모리 컨트롤러 및 그 동작 방법
KR102527265B1 (ko) * 2018-08-23 2023-05-02 에스케이하이닉스 주식회사 데이터 저장 장치 및 동작 방법, 이를 포함하는 스토리지 시스템
US10877696B2 (en) * 2019-03-28 2020-12-29 Intel Corporation Independent NAND memory operations by plane
KR20220018351A (ko) * 2020-08-06 2022-02-15 에스케이하이닉스 주식회사 메모리 컨트롤러 및 이의 동작 방법

Also Published As

Publication number Publication date
US20220129310A1 (en) 2022-04-28
EP3992771B1 (en) 2024-03-13
CN114489470A (zh) 2022-05-13
EP3992771A1 (en) 2022-05-04

Similar Documents

Publication Publication Date Title
US12001720B2 (en) Controller for quality of service based arbitrations
US10521118B2 (en) Methods, systems, and computer readable media for write classification and aggregation using host memory buffer (HMB)
US11182101B2 (en) Storage system and method for stream management in a multi-host virtualized storage system
CN110088725B (zh) 用于对提交队列和完成队列进行处理并做出仲裁的系统和方法
CN110088723B (zh) 用于对提交队列和完成队列进行处理并且做出仲裁的系统和方法
CN108628777B (zh) 动态和自适应中断合并的系统和方法
US20190332428A1 (en) Task queues
US10133483B2 (en) Memory system and method for differential thermal throttling
US10534546B2 (en) Storage system having an adaptive workload-based command processing clock
US10642500B2 (en) Methods, systems and computer readable media for intelligent fetching of data storage device commands from submission queues
US8356135B2 (en) Memory device and control method
KR101687762B1 (ko) 저장 장치 및 그것의 커맨드 스케줄링 방법
US10725901B2 (en) Storage system and method for soft-decision-based command execution to enhance random write performance
US11294600B2 (en) Storage device interfacing with host device and operating method of the storage device
US10013173B2 (en) Data storage device with command buffer management module and method of operating same
KR20220056729A (ko) 커맨드 스케줄링을 수행하는 컨트롤러, 컨트롤러를 포함하는 스토리지 장치 및 컨트롤러의 동작 방법
US11941295B2 (en) Data storage device and method for providing an adaptive data path
US11720280B2 (en) Storage system and method for improving utilization of a communication channel between a host and the storage system
US11544107B2 (en) Storage system and method for multiprotocol handling
KR20180090039A (ko) 데이터 저장 장치 및 그것의 동작 방법

Legal Events

Date Code Title Description
A201 Request for examination