KR20220146325A - 다중 리소스 파라미터들에 기초한 입출력 커맨드 스케줄링을 위한 시스템들 및 방법들 - Google Patents

다중 리소스 파라미터들에 기초한 입출력 커맨드 스케줄링을 위한 시스템들 및 방법들 Download PDF

Info

Publication number
KR20220146325A
KR20220146325A KR1020220044505A KR20220044505A KR20220146325A KR 20220146325 A KR20220146325 A KR 20220146325A KR 1020220044505 A KR1020220044505 A KR 1020220044505A KR 20220044505 A KR20220044505 A KR 20220044505A KR 20220146325 A KR20220146325 A KR 20220146325A
Authority
KR
South Korea
Prior art keywords
input
output
amount
resources
command
Prior art date
Application number
KR1020220044505A
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 KR20220146325A publication Critical patent/KR20220146325A/ko

Links

Images

Classifications

    • 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/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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • 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/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/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/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/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
    • 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
    • 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/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Bus Control (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Advance Control (AREA)

Abstract

입출력 커맨드들을 스케줄링하는 방법이 설명된다. 방법은 입출력 스케줄러에 의해, 애플리케이션으로부터 입출력 커맨드를 수신하는 단계, 입출력 컨트롤러에 의해, 입출력 커맨드에 기초하여 입출력 리소스 요구 사항을 생성하는 단계, 트래픽 컨트롤러에 의해, 입출력 리소스 요구 사항에 기초하여 사용 가능한 리소스들의 양이 기준을 충족하는지를 결정하는 단계, 및 트래픽 컨트롤러에 의해, 충족되는 기준에 대한 응답으로 입출력 커맨드를 큐로 전송하는 단계를 포함한다.

Description

다중 리소스 파라미터들에 기초한 입출력 커맨드 스케줄링을 위한 시스템들 및 방법들{SYSTEMS AND METHODS FOR I/O COMMAND SCHEDULING BASED ON MULTIPLE RESOURCE PARAMETERS}
본 개시는 스토리지 장치들에 관한 것으로, 특히 다중 리소스 파라미터들에 기초한 입출력 커맨드 스케줄링을 위한 시스템들 및 방법들에 관한 것이다.
호스트 컴퓨팅 장치는 스토리지 장치에 의한 처리를 위한 커맨드들(예, 읽기 및 쓰기 커맨드들)을 제공할 수 있다. 호스트 컴퓨팅 장치는 커맨드들의 처리를 위한 특정 QoS(Quality of Service) 요구 사항을 가질 수 있다. 그러나, 특정 상황들에서는 예를 들어, 트래픽 충돌들 및 대역폭 충돌들로 인해 QoS 요구 사항들에 따라 커맨드들을 처리하기에 하드웨어 리소스가 충분하지 않아 지터(jitter)를 초래할 수 있다.
따라서, QoS 요구 사항을 처리하기 위해 스토리지 장치의 하드웨어 리소스의 가용성을 고려하는 스토리지 장치에 의한 처리를 위한 커맨드들을 스케줄링하기 위한 시스템 및 방법이 필요하다.
본 개시의 목적은 다중 리소스 파라미터들에 기초한 입출력 커맨드 스케줄링을 위한 시스템들 및 방법을 제공하는데 있다.
일 실시 예에 따르면, 입출력 커맨드들을 스케줄링하는 방법이 설명된다. 상기 방법은 입출력 스케줄러에 의해, 애플리케이션으로부터 입출력 커맨드를 수신하는 단계, 입출력 컨트롤러에 의해, 상기 입출력 커맨드에 기초하여 입출력 리소스 요구 사항을 생성하는 단계, 트래픽 컨트롤러에 의해, 상기 입출력 리소스 요구 사항에 기초하여 사용 가능한 리소스들의 양이 기준을 충족하는지를 결정하는 단계, 및 상기 트래픽 컨트롤러에 의해, 상기 충족되는 기준에 대한 응답으로 상기 입출력 커맨드를 큐로 전송하는 단계를 포함한다.
스토리지 장치와 관련된 상기 리소스들은 다수의 사용 가능한 하드웨어 토큰들, 사용 가능한 버퍼의 양, 또는 사용 가능한 DMA(Direct Memory Access) 디스크립터의 양, 중 적어도 하나 이상을 포함하고, 그리고 상기 사용 가능한 리소스들에 대한 정보는 장치 힌트를 통해 획득되고, 초과구독(oversubscription) 요인에 의해 조정된다.
상기 충족되는 기준의 상기 결정은 상기 트래픽 컨트롤러에 의해, 스케줄된 입출력 커맨드들의 양이 예약된 리소스들의 양보다 작은지를 결정하는 단계, 상기 트래픽 컨트롤러에 의해, 상기 스케줄된 입출력 커맨드들의 양이 미리 결정된 트래픽 임계 값보다 작은지를 결정하는 단계, 및 상기 트래픽 컨트롤러에 의해, 상기 입출력 리소스 요구 사항에 기초하여 요구된 리소스들의 양이 상기 사용 가능한 리소스들의 양보다 작은지를 결정하는 단계를 포함한다.
상기 방법은 상기 입출력 리소스 요구 사항으로부터 결정된 상기 요구된 리소스들의 양에 기초하여 상기 입출력 커맨드에 요구된 리소스들을 할당하는 단계, 및 상기 입출력 커맨드가 완료되었다는 결정에 응답하여 상기 입출력 커맨드로부터 상기 리소스들을 할당 해제하는 단계를 더 포함할 수 있다.
상기 방법은 상기 트래픽 컨트롤러에 의해, 상기 스케줄된 입출력 커맨드의 양이 상기 미리 결정된 트래픽 임계 값보다 크면, 상기 입출력 커맨드를 상기 입출력 스케줄러로 전송하고 입출력 활용도(utilization) 카운터의 트래픽 충돌 카운트를 증가시키는 단계를 더 포함할 수 있다.
상기 방법은 상기 트래픽 컨트롤러에 의해, 상기 입출력 리소스 요구 사항에 기초하여 상기 요구된 리소스들의 양이 상기 사용 가능한 리소스들의 양보다 적으면, 상기 입출력 커맨드를 상기 입출력 스케줄러로 전송하고 입출력 활용도 카운터의 리소스 충돌 카운터를 증가시키는 단계를 더 포함할 수 있다.
상기 방법은 트래픽 충돌에 응답하여 상기 미리 결정된 트래픽을 증가시키는 단계를 더 포함할 수 있다.
상기 방법은 미리 결정된 시간 동안 상기 입출력 스케줄러로부터 입출력 커맨드를 수신하는 것을 일시 중지한 것에 응답하여 상기 트래픽 임계 값을 상기 미리 결정된 트래픽 임계 값으로 재설정하는 단계를 더 포함할 수 있다.
상기 입출력 리소스 요구 사항은 버퍼 및 DMA 디스크립터를 포함할 수 있다.
다른 실시 예에 따르면, 스토리지 장치에 의한 처리를 위한 입출력 커맨드들을 스케줄링하기 위한 시스템이 설명된다. 상기 시스템은 프로세서; 및 명령어들을 저장하도록 구성된 메모리를 포함하고, 상기 명령어들이 실행될 때, 상기 명령어들은 상기 프로세서가 입출력 스케줄러에 의해, 애플리케이션으로부터 입출력 커맨드를 수신하고, 입출력 컨트롤러에 의해, 상기 입출력 커맨드에 기초하여 입출력 리소스 요구 사항을 생성하고, 트래픽 컨트롤러에 의해, 상기 입출력 리소스 요구 사항에 기초하여 사용 가능한 리소스들의 양이 기준을 충족하는지를 결정하고, 그리고 상기 트래픽 컨트롤러에 의해, 상기 충족되는 기준에 대한 응답으로 상기 입출력 커맨드를 큐로 전송하도록 야기할 수 있다.
스토리지 장치와 관련된 상기 리소스들은 다수의 사용 가능한 하드웨어 토큰들, 사용 가능한 버퍼의 양, 또는 사용 가능한 DMA(Direct Memory Access) 디스크립터의 양, 중 적어도 하나 이상을 포함하고, 그리고 상기 사용 가능한 리소스들에 대한 정보는 장치 힌트를 통해 획득되고, 초과구독(oversubscription) 요인에 의해 조정될 수 있다.
상기 충족되는 기준의 상기 결정은 상기 트래픽 컨트롤러에 의해, 스케줄된 입출력 커맨드들의 양이 예약된 리소스들의 양보다 작은지를 결정하는 것, 상기 트래픽 컨트롤러에 의해, 상기 스케줄된 입출력 커맨드들의 양이 미리 결정된 트래픽 임계 값보다 작은지를 결정하는 것, 그리고 상기 트래픽 컨트롤러에 의해, 상기 입출력 리소스 요구 사항에 기초하여 요구된 리소스들의 양이 상기 사용 가능한 리소스들의 양보다 작은지를 결정하는 것을 포함할 수 있다.
상기 명령어들은 상기 프로세서가 상기 입출력 리소스 요구 사항으로부터 결정된 상기 요구된 리소스들의 양에 기초하여 상기 입출력 커맨드에 요구된 리소스들을 할당하고, 그리고 상기 입출력 커맨드가 완료되었다는 결정에 응답하여 상기 입출력 커맨드로부터 상기 리소스들을 할당 해제하도록 더 야기할 수 있다.
상기 명령어들은 상기 프로세서가 상기 트래픽 컨트롤러에 의해, 상기 스케줄된 입출력 커맨드의 양이 상기 미리 결정된 트래픽 임계 값보다 크면, 상기 입출력 커맨드를 상기 입출력 스케줄러로 전송하고 입출력 활용도(utilization) 카운터의 트래픽 충돌 카운트를 증가시키도록 더 야기할 수 있다.
상기 명령어들은 상기 프로세서가 상기 트래픽 컨트롤러에 의해, 상기 입출력 리소스 요구 사항에 기초하여 상기 요구된 리소스들의 양이 상기 사용 가능한 리소스들의 양보다 적으면, 상기 입출력 커맨드를 상기 입출력 스케줄러로 전송하고 입출력 활용도 카운터의 리소스 충돌 카운터를 증가시키도록 더 야기할 수 있다.
상기 명령어들은 상기 프로세서가 트래픽 충돌에 응답하여 상기 미리 결정된 트래픽을 증가시키도록 더 야기할 수 있다.
상기 명령어들은 상기 프로세서가 미리 결정된 시간 동안 상기 입출력 스케줄러로부터 입출력 커맨드를 수신하는 것을 일시 중지한 것에 응답하여 상기 트래픽 임계 값을 상기 미리 결정된 트래픽 임계 값으로 재설정하도록 더 야기할 수 있다.
상기 입출력 리소스 요구 사항은 버퍼 및 DMA 디스크립터를 포함할 수 있다.
다른 실시 예에 따르면, 시스템이 설명된다. 상기 시스템은 스토리지 장치의 비-휘발성 메모리에 액세스하기 위해 입출력 커맨드들을 처리하기 위한 스토리지 장치 리소스들을 포함하는 스토리지 장치, 및 상기 스토리지 장치와 연관되고 상기 스토리지 장치로 상기 입출력 커맨드들을 전송하도록 구성되는 호스트 장치를 포함하되, 상기 호스트 장치는 상기 입출력 커맨드들을 스케줄하도록 구성된 입출력 컨트롤러를 포함하고, 상기 입출력 컨트롤러는 입출력 스케줄러로부터 수신된 상기 입출력 커맨드에 기초하여 입출력 리소스 요구 사항을 생성하고, 상기 입출력 컨트롤러의 트래픽 컨트롤러에 의해, 상기 입출력 리소스 요구 사항에 기초하여 사용 가능한 리소스들의 양이 기준을 충족하는지를 결정하고, 그리고 상기 트래픽 컨트롤러에 의해, 상기 충족되는 기준에 대한 응답으로 상기 입출력 커맨드를 큐로 전송하도록 구성될 수 있다.
상기 시스템의 상기 입출력 컨트롤러는 상기 트래픽 컨트롤러에 의해, 스케줄된 입출력 커맨드들의 양이 예약된 리소스들의 양보다 작은지를 결정하고, 상기 트래픽 컨트롤러에 의해, 상기 스케줄된 입출력 커맨드들의 양이 미리 결정된 트래픽 임계 값보다 작은지를 결정하고, 상기 트래픽 컨트롤러에 의해, 상기 입출력 리소스 요구 사항에 기초하여 요구된 리소스들의 양이 상기 사용 가능한 리소스들의 양보다 작은지를 결정하고, 상기 입출력 리소스 요구 사항으로부터 결정된 상기 요구된 리소스들의 양에 기초하여 상기 입출력 커맨드에 요구된 리소스들을 할당하고, 상기 스토리지 장치에 의해 상기 입출력 커맨드를 처리하고, 상기 입출력 커맨드의 상기 처리가 완료되었는지를 확인하고, 그리고 상기 입출력 커맨드가 완료되었다는 결정에 응답하여 상기 입출력 커맨드로부터 상기 리소스들을 할당 해제하도록 더 구성될 수 있다.
본 개시의 실시 예들에 따르면, 다중 리소스 파라미터들에 기초한 입출력 커맨드 스케줄링을 위한 시스템들 및 방법이 제공된다.
또한, 본 개시의 실시 예들에 따르면, 다중 파라미터 리소스들에 기초하여 스토리지 장치에 대한 입출력 커맨드들을 스케줄링함으로써, 제어되지 않은 입출력 트래픽 및 제어되지 않은 입출력 대역폭 충돌들로 인한 지연이 감소될 수 있다
도 1은 일부 실시 예들에 따른 입출력 커맨드들 스케줄링을 위한 시스템의 개념적 블록도이다.
도 2는 일부 실시 예들에 따른 입출력 커맨드의 리소스-기반 스케줄링을 위한 시스템의 블록도이다.
도 3은 일부 실시 예들에 따른 도 2의 시스템의 다양한 추상 계층들의 블록도이다.
도 4a 및 도 4b는 일부 실시 예들에 따른 입출력 커맨드들 스케줄링을 위한 시스템의 블록도들이다.
도 5는 일부 실시 예들에 따른 입출력 커맨드들 스케줄링을 위한 시스템의 블록도이다.
도 6은 일부 실시 예들에 따른 입출력 커맨드를 변환하기 위한 예시적인 변환기의 블록도이다.
도 7은 일부 실시 예들에 따른 트래픽 흐름 프로세스를 예시하는 순서도이다.
도 8은 일부 실시 예들에 따른 트래픽 임계 값을 조정하기 위한 프로세스를 예시하는 순서도이다.
도 9는 일부 실시 예들에 따른 다수의 리소스 파라미터들에 기초하여 입출력 커맨드들의 스케줄링을 위한 프로세스를 예시하는 순서도이다.
본 개시의 실시 예들 및 이의 장점들은 다음의 상세한 설명을 참조함으로써 가장 잘 이해된다. 특별히 언급하지 않는 한, 유사한 참조 번호들은 첨부된 도면들 및 쓰여진 설명에서 유사한 구성요소들을 나타내고, 따라서 그것에 대한 설명은 반복되지 않을 것이다. 도면에서, 구성 요소, 층 및 영역들의 상대적인 크기는 명확성을 위해 과장될 수 있다.
이하에서는, 첨부되는 도면들을 참조하여 본 개시의 예시적인 실시 예가 자세히 설명될 것이다. 하지만, 본 개시는 다양한 다른 형태로 실시될 수 있으며, 여기에 설명된 내용에 국한되어서 해석되어서는 안된다. 오히려, 이러한 실시 예들은 이 개시가 철저하고 완전하게 되기 위한 예로서 제공되고, 그리고 본 개시가 속하는 기술 분야에서 통상의 지식을 가진 자에게 본 개시의 특징 및 기능을 완전하게 전달할 것이다. 따라서, 본 개시의 기술 분야에서 통상의 지식을 가진 자가 본 개시의 특징 및 기능을 완벽하게 이해하기 위해 필요하지 않은 프로세스, 요소들, 및 기술들은 설명되지 않을 수 있다.
일반적으로 말해서, 스토리지 장치는 호스트 컴퓨팅 장치로부터의 입출력 커맨드들 처리를 위한 제한된 수의 하드웨어 리소스들을 가질 수 있다. 예를 들어, 하드웨어 리소스들은 처리를 위한 입출력 커맨드들 스케줄링을 위해 사용될 수 있는 하드웨어 큐들 및 관련된 토큰들일 수 있다. 하드웨어 큐들의 크기 및 관련된 토큰들의 수는 구현에 따라 다를 수 있고, 스토리지 장치의 성능 및 QoS(Quality of Service) 요구 사항들에 따라 달라질 수 있다.
스토리지 장치와 상호 용하는 장치 드라이버는 처리될 입출력 커맨드들에 소프트웨어 리소스들을 할당할 수 있다. 예를 들어, 소프트웨어 리소스들은 소프트웨어 큐들 및 관련된 토큰들일 수 있다. 소프트웨어 큐들 및 관련된 토큰들의 깊이는 임의일 수 있고, 그리고 하드웨어 큐들 및 관련된 토큰들의 깊이를 초과할 수 있다. 이로 인해 장치 드라이버는 스토리지 장치 내에서 사용가능한 하드웨어 리소스들보다 많은 입출력 커맨드들을 예약하는 경우가 있을 수 있다. 이러한 상황에서, 장치 드라이버에 의해 예약되었지만 하드웨어 리소스를 소비할 수 없는 입출력 커맨드는 처리가 지연되어 높은 지터(jitter)가 발생할 수 있다.
도 1은 일부 실시 예들에 따른 입출력 커맨드들 스케줄링을 위한 시스템의 개념적 블록도이다. 시스템은 스토리지 장치(102)에 의한 처리를 위해 입출력 커맨드들을 제출하도록 구성된 장치 드라이버(100)를 포함한다. 장치 드라이버(100)는 호스트 처리 장치의 하나 이상의 애플리케이션들에 의해 제출된 입출력 커맨드들을 저장하기 위한 다양한 소프트웨어 큐들(104-108)을 포함할 수 있다. 예를 들어, 제1 큐(104)는 쓰기 입출력 커맨드들을 저장하도록 구성된 딥 쓰기 큐일 수 있는 반면에, 제2 큐(106)는 읽기 입출력 커맨드들을 저장하도록 구성된 얕은 읽기 큐일 수 있다. 입출력 커맨드들은 처리를 위해 입출력 커맨드들을 스토리지 장치(102)로 전달하기 위해 소프트웨어 리소스들(예를 들어, 소프트웨어 큐들(104-108) 및 토큰들(110))을 소비할 수 있다.
장치 드라이버(100)와 유사하게, 스토리지 장치(102)는 장치 드라이버(100)에 의해 제출된 입출력 커맨드들을 저장하도록 구성된 하나 이상의 하드웨어 큐들(112-114)을 포함할 수 있다. 예를 들어, 하드웨어 큐(112)는 제1 큐(104) 및 제2 큐(106)로부터 페치된 입출력 커맨드를 저장하도록 구성될 수 있다. 하드웨어 큐(112)의 입출력 커맨드는 하드웨어 리소스들(116)(예를 들어, 하드웨어 토큰들)을 소비할 수 있다. 할당된 하드웨어 리소스들(116)은 스토리지 장치에 의한 처리를 위해 스케줄링될 수 있다.
장치 드라이버에 구성된 다양한 소프트웨어 큐들(104-108)은 입출력 커맨드들의 처리를 위한 QoS 규정들을 어드레싱하기 위한 것일 수 있다. 예를 들어, 쓰기 및 읽기 입출력 커맨드들을 별도의 큐들(104, 106)로 분리하고, 그리고 라운드 로빈(round robin)과 같은 스케줄링 알고리즘을 사용함으로써, 제2 큐(Q2) 내의 읽기 입출력 커맨드들은 예측 가능한 시간 윈도우에서 서비스될 수 있다. 그러나, 일부 상황들에서 제2 큐에 처리될 것으로 예상되어 대기중인 입출력 커맨드들이 있지만, 스토리지 장치 내의 리소스 충돌들로 인해 제2 큐의 입출력 커맨드들이 예상대로 서비스되지 않을 수 있다.
이 점을 설명하기 위해, 제1 큐(104)는 대기 중인 1000개의 쓰기 입출력 커맨드들을 갖고, 제2 큐(106)는 대기 중인 10개의 읽기 입출력 커맨드들을 갖는 예를 고려할 수 있다. 이 예의 목적을 위해 1000개의 쓰기 입출력 커맨드들은 1000개의 소프트웨어 토큰들(110)을 소비하고, 그리고 처리를 위해 스토리지 장치에 제출될 수 있다고 가정할 수 있다. 그러나, 이 예에 따르면, 스토리지 장치(102)는 할당될 768개의 하드웨어 토큰들(116)만을 갖는다. 따라서, 스토리지 장치(102)는 처리를 위해 제1 큐(104)로부터 768개의 쓰기 입출력 커맨드들을 페치해서 모든 768개의 하드웨어 토큰들(116)이 소비되게 한다. 쓰기 입출력 커맨드들이 모든 하드웨어 토큰들(116)을 소비하고, 소프트웨어 토큰들(110)이 할당된 더 많은 쓰기 입출력 커맨드들이 처리되도록 남아 있는 상태에서, 제2 큐 내의 읽기 입출력 커맨드들은 예상 시간 윈도우 동안 처리되지 않을 수 있다. 따라서, 제2 큐에 대한 QoS 요구 사항들은 충족되지 못할 수 있다.
본 개시의 실시 예는 처리를 위해 입출력 커맨드들을 제출하기 위한 스토리지 장치의 다중 리소스 파라미터들의 가용성을 고려하는 입출력 커맨드들의 리소스-기반 스케줄링을 위한 시스템 및 방법에 관한 것이다. 일 실시 예에 따르면, 스토리지 장치의 하드웨어 리소스들은 소프트웨어 리소스들의 매칭/동기화를 위해 모니터링된다. 동기화되면, 소프트웨어 리소스들은 원하는 대로 입출력 커맨드들에 할당될 수 있다. 예를 들어, 입출력 커맨드들에 소프트웨어 리소스들을 할당하는 것은 서비스 수준 계약(SLA, Service Level Agreement)에 명시된 바와 같이 결정된 QoS에 기초할 수 있다. QoS가 소프트웨어 리소스들의 할당을 결정하는데 사용될 수 있는 기준의 예로 사용되지만, 통상의 기술자는 예를 들어, 사용자 선호도 등과 같은 다른 기준도 고려될 수 있음을 인식해야 한다.
일 실시 예에 따르면, 장치 드라이버는 하드웨어 리소스 정보를 식별하고, 그리고 소프트웨어 리소스 정보를 업데이트하도록 구성된 소프트웨어 토큰 관리자를 포함한다. 일 실시 예에서, 소프트웨어 토큰 관리자는 다수의 사용가능한 하드웨어 리소스들과 일치하도록 다수의 사용가능한 소프트웨어 리소스들을 업데이트한다. 사용 가능한 소프트웨어 리소스들의 특정 부분은 예를 들어, QoS 기대치들을 기반으로 하는 장치 드라이버의 하나 이상의 대기 열들을 위해 예약될 수 있다. 나머지 소프트웨어 리소스들은 공유된 풀의 일부일 수 있다. 일 실시 예에서, 소프트웨어 토큰 관리자는 처리를 위해 스토리지 장치로 입출력 커맨드들을 제출하기 위해 공유된 풀로부터 소프트웨어 토큰들/리소스들을 소프트웨어 큐들 내에 있는 입출력 커맨드들에 할당한다. 일 실시 예에 따르면, 큐 내의 입출력 커맨드에 할당될 공유된 풀 내에 소프트웨어 리소스들이 없는 경우, 소프트웨어 토큰 관리자는 큐에 예약된 소프트웨어 토큰들에 액세스하고, 그리고 예약된 토큰들 중 하나를 커맨드에 할당할 수 있다. 예약된 토큰들은 입출력 커맨드들이 QoS 요구 사항들을 만족하기 위해 적시에 처리되도록 허락할 수 있다.
도 2는 일 실시 예에 따른 입출력 커맨드들의 리소스-기반 스케줄링을 위한 시스템의 블록도이다. 시스템은 저장 인터페이스 버스(204)를 통해 데이터 스토리지 장치(202)에 결합된 컴퓨팅 장치(200)를 포함할 수 있다. 스토리지 장치(202)는 예를 들어, 솔리드 스테이트 드라이브(SSD), 이더넷 SSD(eSSD), 범용 직렬 버스(USB) 드라이브, 보안 디지털(SD) 카드, 내장형 멀티미디어 컨트롤러(eMMC), 범용 플래시 스토리지(UFS) 등과 같은 비-휘발성 스토리지 장치일 수 있다. 스토리지 인터페이스 버스(106)는 예를 들어, PCIe(Peripheral Component Interconnect Express) 버스, 이더넷 및 CXL(Compute Express Link)일 수 있다. 일 실시 예에서, 호스트 장치(200)는 스토리지 인터페이스 프로토콜을 사용하여, 스토리지 인터페이스 버스(206)을 통해 데이터 스토리지 장치(202)로부터 데이터를 송수신한다. 스토리지 인터페이스 프로토콜은 예를 들어, NVMe(Non-Volatile Memory Express) 프로토콜 또는 처리될 입출력 커맨드를 저장하기 위해 큐를 사용하는 임의의 다른 유사한 프로토콜일 수 있다.
일 실시 예에서, 호스트(200)는 호스트(200)의 애플리케이션 레이어 내에서 실행되는 하나 이상의 애플리케이션들(206)을 포함한다. 하나 이상의 애플리케이션들(206)은 프로세서에 의한 실행을 위해 호스트 메모리 공간에 저장되는 소프트웨어 애플리케이션들일 수 있다. 일 실시 예에서, 하나 이상의 애플리케이션들(206)은 처리를 위해 스토리지 장치(202)에 입출력 커맨드들을 전송할 수 있다. 예를 들어, 하나 이상의 애플리케이션들은 스토리지 장치로부터 데이터를 읽기 위한 읽기 입출력 커맨드들, 스토리지 장치로부터 데이터를 쓰기 위한 쓰기 입출력 커맨드들, 및/또는 기타 입출력 요청들을 발행할 수 있다.
일 실시 예에서, 호스트(200)는 스토리지 장치(202)와 인터페이스하도록 구성된 장치 드라이버(208)를 포함할 수 있다. 일 실시 예에서, 장치 드라이버(208)는 호스트 메모리 내에 저장되고 프로세서에 의해 실행되는 소프트웨어 명령어들로서 구현된다. 장치 드라이버(208)는 하나 이상의 큐들(212a, 212b)(이하, 소프트웨어 큐들(212)이라고 함)을 포함할 수 있다. 소프트웨어 큐들(212)은 예를 들어, 하나 이상의 제출 큐들 및 완료 큐들을 포함할 수 있다. 제출 큐들은 다양한 애플리케이션들(206)에 의해 제출된 입출력 커맨드들/요청들을 저장하도록 구성될 수 있다. 완료 큐들은 스토리지 장치(202)에 의해 처리된 입출력 커맨드들/요청들에 대한 완료 메시지들을 저장하도록 구성될 수 있다.
하나 이상의 소프트웨어 큐들(212)(예를 들어, 제출 큐들)은 호스트(200)로부터의 특정 유형의 입출력 커맨드들을 저장하기 위해 전용될 수 있다. 예를 들어, 하나의 큐는 애플리케이션들의 읽기 입출력 커맨드들을 저장하는데 전용될 수 있고, 다른 큐는 쓰기 입출력 커맨드들을 저장하는데 전용될 수 있다. 일 실시 예에서, 특정 QoS 요구 사항들은 하나 이상의 SLA들에 기초하여 소프트웨어 큐들(212)에 부과될 수 있다. 예를 들어, 소프트웨어 큐들(212)내의 특정 수의 입출력 커맨드들이 주어진 시간 기간 내에 처리될 것으로 예상될 수 있다. 상이한 QoS 요구 사항들은 상이한 소프트웨어 큐들(212)과 연관될 수 있다.
장치 드라이버(208)는 처리될 입출력 커맨드들의 스케줄링에 영향을 미칠 수 있는 소프트웨어 리소스들을 관리하도록 구성된 토큰 관리자(210)를 더 포함할 수 있다. 소프트웨어 리소스들은 예를 들어, 소프트웨어 토큰들 및/또는 큐들(212)일 수 있다. 일 실시 예에서, 토큰 관리자(210)는 스토리지 장치로부터의 정보에 기초하여 소프트웨어 토큰들의 가용성을 결정하고, 그리고 소프트웨어 큐들(212) 내에 저장된 입출력 커맨드들에 사용 가능한 토큰들을 할당하도록 구성된다. 토큰 관리자(210)는 컨트롤러 및/또는 토큰 유형 별 기반으로 가용성 정보를 유지하도록 구성될 수 있다. 토큰들이 공유된 풀에서 사용할 수 있는 경우 할당된 토큰들은 공유된 풀에서 가져온 것일 수 있고, 또는 큐에 제출된 입출력 커맨드들에 대해, 큐에 예약된 풀에서 가져온 것일 수 있다.
일 실시 예에서, 스토리지 장치(202)는 호스트(200) 및 장치 제어 서브시스템(216) 사이의 인터페이스를 위한 호스트 인터페이스 레이어(HIL, 214)를 포함한다. HIL(214)은 하나 이상의 컨트롤러들(218) 및 하나 이상의 큐들(220a~220c)(이하, 하드웨어 큐들(220)이라고 함)을 제한없이 포함할 수 있다. 하드웨어 큐들(220)의 깊이는 예를 들어, 스토리지 장치의 처리 능력에 의존할 수 있다. 일 실시 예에서, 스토리지 장치에 의한 상이한 타입들의 처리에 대해 다른 큐들이 유지될 수 있다. 예를 들어, 하나의 하드웨어 큐는 하드웨어 가속 엔진에 의한 처리를 위한 입출력 커맨드들을 저장할 수 있고, 다른 큐는 펌웨어를 통한 처리를 위한 입출력 커맨드들을 저장할 수 있다.
컨트롤러(218)는 예를 들어, 예를 들어, FPGA(Field Programmable Gate Array), eFPGA(embedded FPGA), ASIC(Application Specific Integrated Circuit), 보조 프로세서, CPLD(Complex Programmable Logic Device) 및/또는 임의의 적절한 디지털 및/또는 아날로그 회로와 같은 하나 이상의 프로세서들을 통해 구현될 수 있다. 하나 이상의 컨트롤러들(218) 중 하나는 하나 이상의 하드웨어 큐들(220)과 연관될 수 있다. 컨트롤러들(218) 중 하나는 소프트웨어 큐들(212) 내에서의 처리를 위해 제출된 입출력 커맨드들에 하드웨어 리소스들을 관리하고 할당하도록 구성될 수 있다. 예를 들어, 하드웨어 리소스들은 하드웨어 토큰들 및/또는 큐들(220)일 수 있다.
일 실시 예에서, 하나 이상의 컨트롤러들(218)은 하나 이상의 소프트웨어 큐들(212)로부터 입출력 요청들/커맨드들을 페치하고, 페치된 요청들을 하나 이상의 컨트롤러들(218)에 대응하는 하나 이상의 하드웨어 큐들(218)에 저장하도록 구성될 수 있다. 일부 실시 예들에서, 요청들은 장치 드라이버(208)에 의해 페치되고 제출될 수 있다.
하드웨어 큐들(220)에 저장된 입출력 커맨드들은 처리를 위한 하드웨어 토큰들이 할당될 수 있다. 일 실시 예에서, 상이한 타입들의 하드웨어 토큰들이 유지되고 하드웨어 큐들(220)의 타입 및 수에 따라 할당될 수 있다. 예를 들어, 하드웨어 토큰의 제1 타입은 하드웨어 가속 엔진에 의한 처리에 전용되는 제1 하드웨어 큐(220a)에 할당될 수 있고, 하드웨어 토큰의 제2 타입은 펌웨어를 통한 처리에 전용되는 제2 하드웨어 큐(220b)에 할당될 수 있다.
상이한 하드웨어 큐들(220) 내의 입출력 커맨드들에 할당될 가용 하드웨어 토큰들의 수는 이미 큐들 내에 있는 입출력 커맨드들의 수에 의존할 수 있다. 일 실시 예에서, 토큰들은 하드웨어 큐 타입에 기초하여 컨트롤러(218)에 의해 할당된다. 일 실시 예에서, 하드웨어 토큰들은 하나 이상의 하드웨어 큐들(220) 내의 입출력 커맨드들을 저장할 때 자동으로 할당된다. 하드웨어 토큰들이 할당된 커맨드들은 장치 제어 서브시스템(216)에 의한 처리를 위해 스케줄링 될 수 있다.
일 실시 예에서, 장치 제어 서브시스템(216)은 애플리케이션(206)에 의해 요청된 입출력 커맨드들을 실행하기 위해 컨트롤러들(218)과 상호작용한다. 서브시스템(216)은 제한 없이 하나 이상의 프로세서들(222) 및 하나 이상의 미디어 인터페이스들(224)를 포함할 수 있다. 하나 이상의 프로세서들(222)는 컨트롤러(218)로 및 컨트롤러(218)로부터 입출력 커맨드들을 처리하고, 스토리지 장치(202)의 동작들을 관리하기 위해 컴퓨터-읽기가능 명령어들을 실행하도록 구성될 수 있다. 하나 이상의 프로세서들(222)에 의해 실행되는 컴퓨터-읽기 가능 명령어들은 예를 들어, 펌웨어 코드일 수 있다.
일 예에서, 하나 이상의 프로세서(222)는 NVM 미디어(226)로 또는 NVM 미디어(226)로부터 쓰기 또는 읽기 입출력 커맨드들을 수신하기 위해 컨트롤러(218)와 상호작용하도록 구성될 수 있다. 하나 이상의 프로세서(222)는 쓰기 또는 읽기 동작들을 실행하기 위해 미디어 인터페이스(224)를 통해 NVM 미디어(226)와 상호작용할 수 있다. NVM 미디어(226)는 예를 들어, 플래시 메모리와 같은 하나 이상의 유형의 비-휘발성 메모리를 포함할 수 있다.
일 실시 예에서, 스토리지 장치(202)는 단기 저장을 위한 내부 메모리(228) 또는 스토리지 장치의 동작 동안 임시 메모리를 더 포함한다. 내부 메모리(228)는 DRAM(Dynamic Random Access Memory), SRAM(Static Random Access Memory) 및/또는 DTCM(Data Tightly Coupled Memory)을 포함할 수 있다. 내부 메모리(228)는, 예를 들어, 하드웨어 큐들(220)을 저장하는데 사용될 수 있다.
도 3은 도 2의 실시 예에 따른 다양한 추상 레이어들의 블록도이다. 호스트(200)의 추상화 레이어들은 애플리케이션 레이어(300) 및 장치 드라이버 레이어(302)를 포함할 수 있다. 애플리케이션 레이어(300)은 애플리케이션(206)에 의해 발행된 입출력 요청들에 기초하여 입출력 커맨드들을 생성하도록 구성될 수 있다. 애플리케이션 레이어(300)에 의해 생성된 입출력 커맨드들은 스토리지 장치(202)와 통신하기 위해 사용되는 스토리지 인터페이스 버스(204)의 스토리지 인터페이스 프로토콜을 확인할 수 있다.
일 실시 예에서, 장치 드라이버 레이어(302)는 소프트웨어 큐들(212) 및 토큰 관리자(210)를 포함한다. 애플리케이션 계층(300)에 의해 생성된 입출력 커맨드들은 예를 들어, 입출력 커맨드 타입에 기초하여 장치 드라이버(208) 내의 큐들(212)에 저장된다. 토큰 관리자(210)는 스토리지 장치로부터의 정보에 기초하여 소프트웨어 토큰들의 가용성을 결정할 수 있고, 그리고 소프트웨어 큐들(212) 내에 저장된 입출력 커맨드들에 사용 가능한 토큰들을 할당할 수 있다. 모든 토큰들이 할당되면, 서비스는 거부될 수 있다. 일 실시 예에서, 입출력 커맨드는 소프트웨어 큐들(212)에서 대기하도록 허용될 수 있지만, 사용가능한 토큰들이 존재하지 않는 경우, 입출력 커맨드는 처리를 위해 하드웨어 큐들(220)에 제출되지 않을 수 있다.
일 실시 예에서, 스토리지 장치(202)는 다양한 서브 레이어들을 포함할 수 있는 스토리지 레이어(304)를 포함한다. 다양한 서브 레이어들은 호스트 인터페이스 계층(214)은 물론, 예를 들어 플래시 변환 계층(306) 및 플래시 인터페이스 계층(308)과 같은 NVM 미디어(226)와 인터페이스 하기 위한 다른 계층을 포함할 수 있다. NVM 미디어(226)는 플래시 미디어(310)로서 스토리지 레이어(304)에 포함될 수 있다.
도 4a는 다른 실시 예에 따른 입출력 커맨드들을 스케줄링하기 위한 시스템의 개념적 블록도이다. 시스템(400)은 예를 들어 NVMe(Non-Volatile Memory Express) 프로토콜을 사용하는 솔리드 스테이트 드라이브(SSD)와 같은 스토리지 장치(402) 및 스토리지 장치의 동작을 제어하기 위한 호스트 장치(404)를 포함한다. 스토리지 장치는 하드웨어 토큰들(406), 하드웨어 직접 메모리 액세스(DMA) 디스크립터(408), 및 하드웨어 버퍼(410)를 포함할 수 있고, 호스트 장치는 제1 큐 내지 제n 큐들(412)(예를 들어, NVMe 큐들), 블록 다중 큐들 및 입출력 스케줄러(414)를 포함할 수 있다. 그 다음, 소프트웨어 애플리케이션은 입출력 커맨드(예를 들어, 읽기 또는 쓰기 커맨드)를 스토리지 장치(402)에 의해 처리될 블록 다중 큐들(414)로 전송할 수 있고, 블록 다중 큐들(414)은 입출력 커맨드를 큐(412)로 푸시할 수 있다. 그 다음, 스토리지 장치(402)는 입출력 커맨드를 처리하기 위해 입출력 커맨드를 큐(412)로부터 페치할 수 있다. 예를 들어, 다중 입출력 커맨드들이 큐(412)에 있으면, 스토리지 장치(402)는 입출력 커맨드들을 각 큐(412)로부터 라운드 로빈 방식으로 페치할 수 있다. 일반적으로 입출력 커맨드들이 읽기 또는 쓰기 입출력 커맨드들이기 때문에, 데이터는 호스트 장치(404) 및 스토리지 장치(402) 사이에서(예를 들어, 스토리지 장치(402)의 NAND 플래시 메모리로/로부터) 데이터가 전송된다. 이러한 경우, 입출력 커맨드가 스토리지 장치에 의해 페치되면, 하드웨어 토큰(406)은 각 입출력 커맨드에 할당되고, 각 입출력 커맨드를 처리하기 위해 필요한 하드웨어 리소스들의 양이 결정된다. 예를 들어, 하드웨어 리소스들은 하드웨어 버퍼들 및 DMA 디스크립터들을 포함할 수 있다. 따라서, 입출력 커맨드는 데이터를 전달하기 위해 처리될 수 있고, 일단 전달이 완료되면, 스토리지 장치는 입출력 커맨드가 완료되었음을 큐(412)에 알린다. 그 다음, 큐(412)는 입출력 커맨드의 처리가 완료되었음을 블록 다중 큐(414)에 알리고, 블록 다중 큐(414)는 입출력 커맨드가 완료되었음을 소프트웨어 애플리케이션에 알린다.
더 상세하게는, 소프트웨어 애플리케이션으로부터 블록 다중 큐(414)로 생성된 입출력 커맨드들은 상이한 크기들 및 상이한 입출력 레이트들일 수 있다. 도 4a의 개념적 예시에서, 상이한 입출력 스트림들이 있고, 각 입출력 스트림은 상이한 입출력 레이트를 갖는다. 즉, 타원들로 표시된 입출력 스트림은 32KB 입출력 레이트를 갖고, 직사각형들은 64KB 입출력 레이트를 갖고, 삼각형들은 입출력 스트림은 4KB 입출력 레이트를 갖고, 이러한 각각의 입출력 스트림들은 다른 큐(412)에 할당된다. 예를 들어, 32KB 입출력 스트림은 제1 큐에 할당되고 64KB 입출력 스트림은 제n-1 큐에 할당되고, 그리고 4KB 입출력 스트림은 제n 큐에 할당된다. 제1 내지 제n 큐들 각각은 도 4a의 타원들, 직사각형들, 또는 삼각형들 각각에 의해 표시되는 다중 입출력 커맨드들을 큐에 넣을 수 있다. 큐들(412)이 입출력 커맨드들로 채워짐에 따라, 스토리지 장치(402)는 라운드 로빈 방식으로 큐(412)로부터 페치하지만, 제1 큐 내지 제n-1 큐들에 대한 입출력 레이트들이 제n 큐에 대한 입출력 레이트보다 빠르기 때문에, 대부분의 입출력 커맨드들은 스토리지 장치에 의해 페치되도록 스케줄된 대부분의 입출력 커맨드는 제1 내지 제n-1 큐들에서 가져온다. 예를 들어, 32KB 입출력 스트림에 대한 입출력 커맨드는 사용 가능한 리소스들(예를 들어, 하드웨어 버퍼 및 DMA 디스크립터)을 점유하고, 그리고 64KB 입출력 스트림에 대한 입출력 커맨드는 하드웨어 리소스들이 해제될 수 있도록 32KB 입출력 스트림에 대한 모든 입출력 커맨드들이 완료될 때까지 기다려야한다. 결과적으로, 제n 큐와 같은 느린 큐들은 더 빠른 입출력 커맨드이 모두 완료될 때까지 기다렸다가 페치되도록 기다려야 합니다. 따라서, 느린 입출력 스트림들에 대한 입출력 커맨드들은 지연되어, 입출력 트래픽 충돌 및 입출력 커맨드들의 불공정한 스케줄링이 발생한다.
추가적으로, 상술된 일부 스케줄링 기술들은 제어되지 않는 입출력 대역폭을 초래할 수 있다. 데이터가 호스트 장치와 스토리지 장치 사이에서 이동함에 따라, 더 큰 크기의 데이터 전달이 필요한 입출력 커맨드들은 하드웨어 버퍼 및 DMA 디스크립터와 같은 스토리지 장치 리소스들을 소비한다. 결과적으로, 다른 입출력 커맨드들에 대한 큐들은 지연될 수 있고, 더 작은 입출력 커맨드들에 대해 입출력 응답성에 부정적인 영향을 미칠 수 있다. 따라서, 제어되지 않은 입출력 대역폭 및 제어되지 않은 입출력 트래픽 충돌들을 극복하는 기술이 요구된다.
도 4b는 일부 실시 예들에 따른 입출력 커맨드들 스케줄링하기 위한 시스템의 다른 개념적 블록도이다. 일부 시스템들에서는, 사용 가능한 리소스들(예를 들어, 하드웨어 토큰들)의 양의 일부만 풀링되고 다른 모든 큐들에 의해 공유되고 나머지 리소스들의 양은 지정된 큐들을 위해 예약되어 예약된 리소스가 더 빠른 레이트의 입출력 스트림 큐들(412)에 의해 사용되지 않는다.
예를 들어, 입출력 커맨드들을 위한 4개의 토큰들이 제1 큐 내지 제n 큐(412) 각각에 예약될 수 있다. 따라서, 3개의 큐들(즉, 제1 큐, 제n-1 큐, 제n 큐)이 있으면, 총 12개(즉, 4개의 토큰들 x 3개의 큐들)의 토큰들이 예약된다. 따라서, 768개의 하드웨어 토큰들이 있는 경우, 768개의 하드웨어 토큰들 중 12개만 예약되고 756개의 하드웨어 토큰들은 제1 내지 제n 큐(412)의 모든 큐들 내에서 사용 가능할 수 있다. 따라서, 더 빠른 입출력 스트림 레이트들을 가진 입출력 커맨드들이 모든 공유된 하드웨어 토큰들을 차지하더라도, 느린 입출력 스트림들에 의해 예약된 하드웨어 토큰들은 사용되지 않는다. 이 기술은 입출력 커맨드들의 스케줄링의 공정성을 개선하지만, 하드웨어 토큰들의 공유된 부분은 여전히 제어되지 않고 제어되지 않은 입출력 트래픽이 발생할 수 있다.
따라서, 다른 실시 예에 따르면, 입출력 커맨드는 예를 들어, 하드웨어 토큰, DMA 디스크립터, 및 버퍼와 같은 리소스들의 가용성에 기초하여 스케줄링될 수 있다. 일부 실시 예들에서, 다른 리소스들의 가용성은 스토리지 시스템의 타입에 따라 고려될 수 있다. 따라서, 입출력 커맨드는 스케줄링 결정(예를 들어, 입출력 커맨드를 스케줄링할지 또는 나중에 다시 스케줄링할지 여부)을 내리기 전에 입출력 커맨드에 요구된 리소스의 양으로 변환될 수 있다. 일부 실시 예들에서, 스케줄러는 입출력 커맨드를 처리하기에 충분한 리소스들이 있는지 여부를 결정하는데 요구된 리소스들의 양으로 사용 가능한 리소스들을 확인하고, 그런 다음 입출력 커맨드를 스케줄할지 여부를 결정한다(예를 들어, 나중을 위해 다시 스케줄링).
예를 들어, 도 4a의 제1 큐 내지 제n-1 큐(412)는 스토리지 장치(402)의 입출력 처리 능력을 넘어서는 입출력 요청들로 채워져 있다. 따라서, 제n 큐와 같은 느린 레이트의 입출력 스트림들에 대한 입출력 커맨드들을 스케줄링하는데 지연들이 발생할 수 있다. 따라서, 도 4b에 도시된 본 개시 내용의 일부 실시 예들에 따르면, 리소스-기반 입출력 컨트롤러(416)는 디바이스 힌트(418)(예를 들어, HW-HINT)로부터 사용 가능한 리소스들의 양을 결정할 수 있고, 그 다음 사용 가능한 리소스들에 기초하여 입출력 커맨드를 스케줄링할 수 있다. 일부 실시 예들에서, 입출력 커맨드가 스케줄링되면 그러한 리소스들의 가용성 및 활용은 리소스들의 사용 가능한 양을 감소시키고 입출력 커맨드의 처리가 완료되면 사용가능한 리소스들의 양이 증가됨으로써 추적될 수 있다. 따라서, 도 4b의 제1 큐 내지 제n-1 큐들(412)이 사용가능한 리소스들에 기초하여 채워지기 때문에, 입출력 컨트롤러는 제1 큐 내지 제n-1 큐들(412)에서 더 빠른 레이트의 입출력 스트림들의 초과-스케줄링을 방지하거나 줄일 수 있다. 따라서, 더 느린 레이트의 입출력 스트림들로부터의 입출력 커맨드에 의해 대기 지연들이 감소되거나 방지될 수 있다.
도 5는 본 개시의 일 실시 예에 따른 입출력 커맨드들의 리소스-기반 스케줄링을 위한 시스템의 블록도이다. 시스템(500)은 예를 들어, NVMe(Non-Volatile Memory Express) 프로토콜, SATA(Serial Advanced Technology Attachment), SAS(Serial Attached Small Computer System Interface), 및/또는 임의의 다른 적절한 프로토콜을 사용하는 SSD와 같은 스토리지 장치(504) 및 스토리지 장치의 동작을 제어하기 위한 커널(kernel)을 포함하는 호스트 장치(502)를 포함한다. 일부 실시 예들에서, 호스트 장치(502)는 예를 들어, NVMe 또는 다른 적절한 프로토콜을 사용하는 스토리지 인터페이스에 의해 스토리지 장치(504)에 연결된다. 스토리지 장치는 데이터를 저장하기 위한 하드웨어 토큰(510), 하드웨어 DMA(524), 하드웨어 버퍼(520), 및 낸드 플래시(522)를 포함할 수 있다. 호스트 장치(502)는 큐들(506)(예를 들어, NVMe 큐들) 및 블록 다중 큐들(508)을 포함할 수 있다. 일부 실시 예들에서, 큐들(506)은 최대 1024개의 큐 엔트리들(예를 들어, 지원되는 최대 큐(MQES))을 지원하도록 구성될 수 있다. 다른 실시 예들에서, 큐들(506)은 더 작거나 더 큰 용량, 예를 들어 1024 MQES보다 작거나 더 클 수 있다. 그러나 일부 실시 예들에서, 큐들(506)은 최대 제출/완료 큐 카운트(“” 또는 호스트 장치(504)의 중앙 처리 장치(CPU) 카운트의 개수에 기초하여 리눅스 드라이버에 의해 구성될 수 있다. 따라서, 도 4a 내지 4b를 참조하여 앞서 설명된 바와 같이, 예를 들어, 큐들(506) 내에 있는 입출력 커맨드들은 스토리지 장치(504)에 의한 처리를 위해 라운드 로빈 방식으로 스토리지 장치(504)에 의해 페치될 수 있다. 입출력 커맨드들이 페치되면, 각 입출력 커맨드는 하드웨어 토큰(510)(예를 들어, 하드웨어 토큰에 바운드)이 할당되고, 리소스 할당자(530)로 보내지고 여기서 DMA 디스크립터 및 버퍼는 입출력 커맨드에 할당되고, 그리고 입출력 커맨드는 처리된다(예를 들어, DMA 동작은 호스트 메모리 및 NAND 플래시 사이에서 발생). 예를 들어, 도 5를 참조하면 입출력 커맨드가 호스트 장치(502)의 큐(506)로부터 페치된 입출력 커맨드 및 하드웨어 토큰(510)이 할당된다. 그런 다음 토큰이 이미 할당된 입출력 커맨드는 리소스 할당자(530)로 전송된다. 일부 실시 예들에서, 사용 가능한 DMA 디스크립터(224) 리소스들은 음영 처리된 상자들로 나타낸 리소스 할당기(530)로 제공되고 사용 가능한 버퍼(520)는 빈 상자들로 나타낸 리소스 할당기(530)로 제공된다. 리소스 할당기(530)는 그 다음 DMA 디스크립터들 및 버퍼를 입출력 커맨드들로 할당할 수 있다.
호스트 장치(502)로 돌아가서, 일부 실시 예들에서, 본 개시의 다양한 실시 예들에 따라, 블록 다중 큐(508)으로부터의 입출력 커맨드들을 제어하기 위한 호스트 장치(502)는 입출력 컨트롤러(526)를 포함한다. 일부 실시 예들에서, 입출력 컨트롤러(526)는 블록 다중 큐(508)로부터 입출력 요청 포맷으로서 수신된 입출력 커맨드들을 입출력 리소스 요청 포맷으로 변환하기 위한 변환기(528) 및 입출력 커맨드를 큐들(506)로 보낼지 또는 블록 다중 큐(508)로 다시 보낼지 여부를 결정하기 위한 트래픽 컨트롤러(512)를 포함한다. 예를 들어, 도 6은 입출력 커맨드가 입출력 요청 포맷 내에 수신되는 예시적인 변환기(528)를 도시하며, 이 커맨드의 시작 어드레스가 8K이고, 데이터 크기는 88K인 [8K, 88K]의 예시이다. 즉, 예를 들어, 커맨드가 쓰기 작업에 대한 것이면, 스토리지 장치에 기록될 데이터의 크기는 88K이고 해당 데이터는 스토리지 장치 내의 어드레스 8K의 위치에 저장될 것이다. 변환기(528)는 예를 들어, 이러한 정보를 11개의 DMA 디스크립터들 또는 일부 다른 버퍼 크기를 포함하는 리소스 요청 포맷으로 변환한다. 따라서, 입출력 커맨드에 기초하는 입출력 요청으로부터 입출력 리소스 요청의 형태의 입출력 커맨드가 생성된다.
일부 실시 예들에서, 입출력 컨트롤러(526)는 입출력 리소스 요청 포맷 내의 수신된 입출력 커맨드를 분석하도록 구성된 트래픽 컨트롤러(512), 하드웨어 토큰(510)의 가용성을 결정하도록 구성된 토큰 관리자(514), 및 DMA 디스크립터(예를 들어, "DMA D"), 및 버퍼 체커(516)를 더 포함한다. 일부 실시 예들에서, 리소스들의 가용성은 장치 힌트(예를 들어, "HW-HINT")에 의해 결정된다. 다시 말해서, 장치 힌트는 스토리지 장치 내의 리소스들의 상태 및/또는 가용성을 결정 및 모니터링하고 이 정보를 호스트 장치(예를 들어, 입출력 컨트롤러(526))에 제공한다. 보다 구체적으로, 하드웨어 토큰들(510)의 상태 및/또는 가용성은 소프트웨어 토큰 관리자(514)에 의해 미러링되어 입출력 컨트롤러(526)가 리소스 가용성에 기초하여 결정들을 만들 수 있다. 또한, 장치 힌트는 스토리지 장치(504)의 DMA 디스크립터(524) 및 버퍼(520)의 가용성을 DMA 디스크립터 및 버퍼 검사기(516)에 제공하고 이에 따라 입출력 컨트롤러(526)는 이 정보를 사용하여 입출력 커맨드를 처리하는 데 충분한 리소스들(예를 들어, DMA 디스크립터 및/또는 버퍼)이 사용 가능한지 여부를 결정할 수 있다. 본 개시에서, 리소스들은 예로서 하드웨어 토큰(510), DMA 디스크립터(524), 및 버퍼(520)를 지칭하지만, 리소스들은 스토리지 장치(504) 또는 시스템(500)의 유형에 따라 다른 파라미터들을 지칭할 수 있다.
일부 실시 예들에서, 초과구독(oversubscription) 요소는 장치 힌트가 사용 가능한 것으로 결정된 리소스들의 양을 조정하기 위해 활용될 수 있다. 즉, 리소스들의 양은 스토리지 장치의 처리 능력이나 처리 능력을 간접적으로 나타내므로 실제 리소스들에 기초하여 입출력 커맨드들을 스케줄링하는 것은 스토리지 장치의 실제 기능보다 적은 입출력 커맨드 제출을 도입할 수 있다. 예를 들어, 128KB 읽기 동작은 스토리지 장치 내부에서 다중 데이터 세그먼트들로 분할될 수 있고 각 데이터 세그먼트들에는 DMA 디스크립터 및 버퍼가 할당될 수 있으며, DMA 동작으로 처리될 수 있다. 일부 실시예들에서, 대부분의 DMA 동작들이 완료되고 DMA 디스크립터들 및 버퍼가 스토리지 장치로 반환되더라도, 호스트 장치는 입출력 커맨드가 완료되고 이러한 표시가 입출력 컨트롤러(526)로 제공될 때까지 DMA 디스크립터 및 버퍼가 사용 가능한지 감지할 수 없다.
따라서, 초과구독 요소는 사용 가능한 리소스들을 조정함으로써 이러한 차이를 설명한다. 보다 구체적으로, 리소스-기반 입출력 컨트롤러(526)는 호스트 장치 및 스토리지 장치의 리소스 해제 시간의 차이를 고려함으로써 HW-HINT의 리소스들의 양을 조정한다.
따라서, 입출력 컨트롤러(526)는 입출력 커맨드를 취할 수 있고 그리고 이러한 입출력 커맨드를 처리하기 위해 특정 기준이 충족되는지 여부를 결정할 수 있고, 그렇다면 큐(506)으로 입출력 커맨드를 전송할 수 있다. 예를 들어, 입출력 컨트롤러(526)는 스토리지 디바이스(504)가 입출력 리소스 요구 사항에 의해 지시된 바와 같이 충분한 리소스들(예를 들어, DMA 디스크립터 및 버퍼)을 갖는 경우, 기준이 충족된 것으로 결정할 수 있다. 다시 말해서, 예를 들어, 리소스 요구 사항이 특정 입출력 커맨드에 11개의 DMA 디스크립터들 및 88K의 버퍼가 필요하고 20개의 DMA 디스크립터들 및 100K의 버퍼가 사용 가능한 것으로 표시되면 기준이 충족될 수 있다. 반면에 10개의 DMA 디스크립터들 또는 50K의 버퍼만 있는 경우 리소스 기준이 충족되지 않을 수 있다. 따라서, 기준이 만족되지 않으면, 입출력 커맨드는 블록 다중 큐(508)로 다시 전송되고 그리고 입출력 컨트롤러(526)로의 재제출을 위해 다시 스케줄링된다. 그 시점에서, 입출력 컨트롤러(526)는 이러한 기준이 충족되는지 여부에 따라 입출력 커맨드를 처리하여 큐(506)로 전송하거나 블록 다중 큐(508)로 다시 보내는 것을 다시 결정할 것이다.
도 7은 입출력 커맨드를 큐(506)로 보낼지 또는 입출력 커맨드를 다시 스케줄링할 블록 다중 큐(508)로 보낼지를 결정하기 위해 트래픽 컨트롤러(512)에 의해 취해진 단계들을 도시하는 흐름도이다. 일부 실시 예들에서, 입출력 커맨드는 블록 다중 큐(508)로부터 입출력 컨트롤러(526)로 전송되고, 트래픽 컨트롤러(512)는 입출력 커맨드가 큐(506)로 입출력 커맨드를 전송하기 위한 특정 기준을 충족하는지 여부를 결정한다. 보다 구체적으로, 입출력 커맨드가 트래픽 컨트롤러(512)에 의해 수신되면, 입출력 커맨드는 변환기(528)에 의해 입출력 요청 포맷에서 입출력 리소스 요구 사항 포맷으로 변환된다(702). 따라서, 입출력 커맨드는 예를 들어, 커맨드의 크기 및 어드레스와 같은 입출력 커맨드를 처리하기 위한 리소스 요구 사항들을 결정하는 것이 용이한 포맷으로 되어 있다. 일부 실시 예들에서, 그러한 변환된 포맷은 입출력 디스크립터("IOD") 구조의 형태에 있을 수 있다.
일부 실시 예들에서, 호스트 장치는 메모리(518)를 포함한다. 메모리(518)는 예를 들어, 시스템(500)의 동작동안 단기-스토리지 또는 임시 메모리에 사용되는 내부 메모리일 수 있다. 메모리(518)는 DRAM(Dynamic Random Access Memory), SRAM(Static Random Access Memory), 및/또는 DTCM(Data Tightly Coupled Memory)을 포함할 수 있다. 메모리(518)는 예를 들어, 각 큐(506)에 대한 리소스들의 가용성을 결정하기 위해 장치 드라이버에 의해 관리되는 입출력 통계 및 리소스 활용 카운터를 포함하는 데이터 구조를 저장하는데 사용될 수 있다. 예를 들어, 정보는 토큰들에 대한 예약된 값, 토큰들에 대한 임계 값, 트래픽 충돌 카운트, 리소스 충돌 카운트 및 온-더-플라이(on-the-fly) 카운트를 포함할 수 있다. 일부 실시 예들에서, 토큰들에 대한 예약된 값은 상술된 바와 같이, 예를 들어 제1 큐(Q1) 내지 제n 큐(Qn)들 각각에 대해 4개의 토큰들이 예약된 특정 큐들에 대해 예약된 토큰들의 개수에 대응한다. 임계 값은 동적 트래픽 임계 윈도우 값에 대응하고, 이에 대해서는 후술될 것이다. 트래픽 충돌 카운트는 입출력 커맨드가 충돌되거나 사용 중인 모든 토큰으로 인해 대기해야 했던 횟수들에 대응한다. 리소스 충돌 카운트는 제한된 리소스를 할당할 수 없는 횟수들에 대응한다. 본 명세서에서 개시된 바와 같이, 온-더-플라이 카운트는 큐에 이미 스케줄링되어 있고/있거나 처리 중인 입출력 요청들 또는 입출력 요청 카운트들의 수를 의미한다. 따라서, 현재 입출력 리소스 요청 사항들의 형태인 입출력 커맨드는 예약된 리소스들의 양(예를 들어, 예약된 하드웨어 토큰 값)이 온-더-플라이인 리소스들의 양(예를 들어, 온-더-플라이 카운트)보다 큰지 여부를 결정하기 위해 평가된다(704). 예약된 리소스들의 양이 온-더-플라이인 리소스들의 양보다 크면, 입출력 통계 및 리소스 활용 카운터가 업데이트되고(710) 입출력 커맨드가 스케줄링될 큐(506)로 전송된다(712). 예약된 리소스들의 양이 온-더-플라이인 리소스들의 양보다 크지 않은 경우, 트래픽 임계 값이 온-더-플라이인 리소스들의 양보다 큰지 여부 및 충분한 리소스들이 있는지 여부가 결정된다(706). 만약 트래픽 임계 값이 온-더-플라이인 리소스들의 양보다 크지 않으면, 입출력 커맨드는 블록 다중 큐(508)로 다시 전송되어 나중에 다시 스케쥴링되고 트래픽 충돌 카운트는 증가된다. 반면에, 트래픽 임계 값이 온-더-플라이인 리소스들의 양보다 크고 충분한 리소스들이 있으면, 직렬화된 하드웨어 리소스들 체크가 수행된다(708).
일부 실시 예들에서, 직렬화된 하드웨어 리소스들 체크는 이러한 입출력 커맨드를 처리하는데 요구된 리소스들의 양이 현재 사용 가능한 리소스들의 양보다 적은지 여부를 결정하는 것을 포함한다. 즉, 결정은 이러한 입출력 커맨드를 처리하기 위해 충분한 리소스들이 있는지 여부를 판단한다. 충분한 사용 가능한 리소스들이 있지 않으면, 입출력 커맨드는 블록 다중 큐(508)로 다시 전송되어 나중에 다시 스케줄링되고 그리고 리소스 충돌 카운트는 증가된다. 요구된 리소스들의 양이 현재 사용 가능한 리소스들의 양보다 적으면, 이러한 입출력 커맨드를 처리하기 위해 충분한 리소스들이 있으므로 입출력 통계 및 리소스 활용 카운터가 업데이트되고(710) 그리고 입출력 커맨드는 스케줄링될 큐(506)로 전송된다(712).
일부 실시 예들에서, 트래픽 임계 값은 트래픽 충돌, 리소스 충돌 및 현재 온-더-플라이 요청 카운트에 관한 현재 트래픽 상태 정보에 기초하여 조정 가능한 동적 임계 값이다. 도 8은 트래픽 임계 값을 조정하기 위한 프로세스를 예시하는 순서도이다. 예를 들어, 트래픽 임계 윈도우는 트래픽 충돌이 있지만 리소스 충돌이 없고, 그리고 현재 임계 값이 미리 결정된 임계 값 제한보다 작은 경우 너무 작은 것으로 결정될 수 있다. 이 경우, 트래픽 임계 윈도우가 증가될 수 있다(802). 한편, 트래픽 임계 윈도우는 트래픽 충돌이 없고, 리소스 충돌이 없고, 그리고 온-더-플라이인 리소스의 양이 트래픽 임계 값보다 작은 경우 충분한 것으로 결정될 수 있다. 이 경우, 트래픽 임계 윈도우가 감소될 수 있다(804). 미리 결정된 지속 시간 동안 입출력 커맨드가 없으면, 예를 들어, 만약 입출력 스케줄러(508)로부터 입출력 커맨드들을 수신하는데 10초, 12초 등의 시간 동안 일시 중지 또는 일시적인 정지가 있으면 트래픽 임계 윈도우는 기본 값, 예를 들어, 4 또는 8로 재설정될 수 있다(806). 예시 지속 시간 및 기본 값은 단지 예시를 통해 제공되며 제한하려는 의도가 아님을 유의해야 한다. 따라서, 트래픽 임계 값은 실-시간으로 동적으로 조정될 수 있다.
도 9는 일부 실시 예들에 따른, 멀티 리소스 파라미터들에 기초하여 입출력 커맨드들을 스케줄링하는 프로세스를 도시하는 순서도이다. 일부 실시 예들에서, 시스템은 스토리지 장치 및 호스트 장치를 포함하고, 호스트 장치는 장치 드라이버에 의한 초기화 동안 스토리지 장치와 연관된 리소스의 양에 관한 정보를 획득하도록 구성될 수 있다. 일부 실시 예들에서, 이것은 초기화동안 한 번 발생한다. 호스트 장치는 입출력 요청을 포함하는 애플리케이션(예를 들어, 소프트웨어 애플리케이션)으로부터 입출력 커맨드를 수신하도록 구성된 입출력 스케줄러를 포함한다(902). 호스트 장치는 입출력 컨트롤러를 더 포함하고, 입출력 커맨드에 대한 리소스 요구 사항이 결정될 수 있도록 입출력 커맨드에 기초하여 입출력 리소스 요구 사항이 생성될 수 있다(904).
일부 실시 예들에서, 입출력 컨트롤러는 트래픽 컨트롤러를 포함한다. 따라서, 트래픽 컨트롤러는 스토리지 장치와 연관된 리소스들과 관련하여 수신된 정보가 입출력 커맨드의 입출력 리소스 요구 사항에 기초한 기준을 만족하는지 여부를 결정할 수 있다(906). 기준이 충족되는 것에 응답하여, 트래픽 컨트롤러는 입출력 커맨드를 큐에 전송할 수 있으므로, 입출력 커맨드는 처리를 위해 스케줄링될 수 있다(908). 다음으로, 입출력 리소스 요구 사항에서 결정된 요구된 리소스들의 양에 기초하여 입출력 커맨드에 요구된 리소스들이 할당된다. 리소스들이 할당되면, 입출력 커맨드는 스토리지 장치에 의해 처리되거나 실행될 수 있고(예를 들어, 호스트 메모리 및 NAND 플래시 사이에서 발생하는 DMA 동작), 입출력 커맨드의 처리가 완료되었다는 결정이 만들어진다(910). 입출력 커맨드의 처리가 완료되면, 입출력 커맨드로부터의 리소스들을 할당 해제함으로써 이전에 할당된 리소스들이 해제될 수 있다(912). 이에 따라, 본 발명의 다양한 실시 예들에 따른 다중 파라미터 리소스들에 기초하여 스토리지 장치에 대한 입출력 커맨드들이 스케줄링될 수 있다. 따라서, 제어되지 않은 입출력 트래픽 및 제어되지 않은 입출력 대역폭 충돌들로 인한 지연이 줄어들거나 방지될 수 있다. 그러나, 설명된 방법 및 동작은 통상의 기술자가 이해할 수 있도록 예시로만 제공되며 여기에 명시적으로 제공되지 않은 다양한 추가 단계를 포함할 수 있다. 일부 실시 예들에서, 동작들의 시간적 순서는 변경될 수 있다.
비록 여기에서 제 1, 제 2, 제3 등의 용어들은 다양한 요소들, 성분들, 영역들, 레이어들 그리고/또는 섹션들을 설명하기 위해 사용되지만, 이러한 요소들, 성분들, 영역들, 레이어들 그리고/또는 섹션들은 이러한 용어들로 인해 제한되지 않는 것으로 이해될 것이다. 이러한 용어들은 다른 요소, 성분, 영역, 레이어, 또는 섹션으로부터 하나의 요소, 구성, 영역, 레이어 또는 섹션을 구별하기 위해 사용된다. 따라서, 후술하는 제 1 구성 요소, 성분, 영역, 레이어, 또는 섹션은 본 발명의 사상 및 범위를 벗어나지 않고, 제 2 구성 요소, 성분, 영역, 레이어, 또는 섹션을 지칭할 수 있다.
요소, 레이어, 영역, 또는 성분이 다른 요소, 레이어, 영역 또는 성분 “에”, “에 연결된”, “에 결합된” 것으로 언급되는 때, 그것은 다른 요소, 레이어, 영역, 또는 성분 “에 직접적으로”, “에 직접적으로 연결된”, “에 직접적으로 결합된” 것으로 이해되거나, 하나 또는 그 이상의 사이의 요소들, 레이어들, 영역들, 또는 성분들이 존재할 수 있다. 또한, 요소 또는 레이어가 두 개의 요소들 또는 레이어들 사이로 언급되는 때, 그것은 단지 요소 또는 레이어가 두 요소들 또는 레이어들 사이에 있을 수 있거나, 또는 하나 또는 그 이상의 사이의 요소들 또는 레이어들이 또한 존재할 수 있다.
본 명세서에서 사용된 용어들은 단지 특정한 실시 예들을 설명하기 위한 것이고, 본 발명을 제한하려는 것으로 의도되지 않았다. 본 명세서에서 사용된 바와 같이, 문맥상 명백하게 다르게 뜻하지 않는 한, 단수 형태 “하나”는 복수의 형태도 포함하는 것으로 의도된다. “구성되는”, “구성되고 있는”, “포함하는”, 그리고 “포함하고 있는” 용어들이 본 명세서에서 사용될 때, 이러한 용어들은 정해진 특징들, 정수들, 단계들, 동작들, 요소들, 및/또는 성분들이 존재를 명시하나, 하나 또는 그 이상의 다른 특징들, 정수들, 단계들, 동작들, 요소들, 성분들, 및/또는 그것들의 그룹들의 추가 또는 존재를 불가능하게 하지 않는다. 본 명세서에서 사용된 바와 같이, “및/또는” 용어는 하나 또는 그 이상의 열거된 항목들과 연관된 임의의 그리고 모든 조합들 포함한다. “적어도 하나”와 같은 표현들은 요소들 전체 리스트를 수정하고 그리고 리스트의 개별 요소들을 수정하지 않는다.
본 명세서에서 사용된 바와 같이, “대체로”, “약” 용어 그리고 이와 유사한 용어들은 근사치의 용어들로서 사용되고, 정도의 용어들로서 사용되지 않고. 본 발명의 당업자에 의해 식별되는 측정된 또는 계산된 값들의 고유한 변동을 고려하기 위한 것이다. 또한, 본 발명의 실시 예들을 기술할 때 "할 수 있다"의 사용은 "본 발명의 하나 이상의 실시 예들"을 의미한다. 본 명세서에서 사용된 바와 같이, “사용”, “사용되는”, 그리고 “사용된” 용어들은 “활용”, “활용되는”, 그리고 “활용된” 용어들의 동의어로 각각 간주될 수 있다.
본 명세서에서 기술된 본 발명의 실시 예에 따른 전자 또는 전기 장치들 그리고/또는 다른 임의의 관련된 장치들 또는 요소들은 임의의 적합한 하드웨어, 펌웨어(예를 들면, Application Specific Integrated Circuit; ASIC), 소프트웨어, 또는 소프트웨어, 펌웨어, 그리고 하드웨어의 조합을 이용하여 구현될 수 있다. 예를 들어, 이러한 장치들의 다양한 요소들은 하나의 집적 회로(Integrated Circuit; IC) 칩 또는 분리된 IC 칩들로 형성될 수 있다. 또한, 이러한 장치들의 다양한 요소들은 유연한 인쇄 회로 필름(Flexible Printed Circuit Film), TCP(Tape Carrier Package), 인쇄 회로 기판(Printed Circuit Board; PCB) 위에 구현되거나 하나의 기판 위에서 형성될 수 있다. 또한, 이러한 장치들의 다양한 요소들은 컴퓨터 프로그램 명령들을 실행하고 본 명세서에서 설명된 다양한 기능들을 수행하기 위한 다른 시스템 요소들과 상호 작용하는 하나 이상의 컴퓨팅 장치들에서 또는 하나 이상의 프로세서들에서 수행되는 프로세스 또는 스레드(Thread)일 수 있다. 컴퓨터 프로그램 명령들은 예를 들면 RAM(Random Access Memory)과 같은 표준 메모리 장치를 이용하는 컴퓨팅 장치에서 구현되는 메모리 내에 저장된다. 컴퓨터 프로그램 명령들은 또한 예를 들면 CD-ROM, 플래시 드라이브(Flash Drive), 또는 그와 같은 다른 일시적이지 않은 컴퓨터 읽기 가능한 미디어(Non-transitory Computer Readable Media)에 저장될 수도 있다. 또한, 본 발명의 당업자는 본 발명의 예시적인 실시 예들의 사상 및 범위를 벗어나지 않고 다양한 컴퓨팅 장치들의 기능은 단일 컴퓨팅 장치에 통합되거나 집적되고, 특정 컴퓨팅 장치의 기능이 하나 또는 그 이상의 다른 컴퓨팅 장치들에 분산될 수 있음을 인식해야 한다.
본 개시 전체에 걸쳐 설명된 임의의 구성 요소 또는 구성 요소의 임의의 조합을 사용하여 순서도에 설명된 하나 이상의 동작을 수행할 수 있음이 이해될 것이다. 더욱이, 설명된 동작은 단지 예시적인 동작이고 여기에 명시적으로 설명되지 않은 다양한 추가 단계를 포함할 수 있다. 또한 동작의 시간 순서는 다를 수 있다.
다르게 정의되지 않는 한, 본 명세서에서 사용된 모든 용어들(기술적 그리고 과학적 용어들을 포함하는)은 본 발명이 속한 기술 분야에서 당업자에 의해 일반적으로 이해되는 동일한 의미를 갖는다. 일반적으로 사용되는 사전에 정의된 이러한 용어들은 본 명세서 및/또는 관련 기술의 문맥에서 그들의 의미와 일치하는 의미를 갖는 것으로 해석되어야 하며, 본 명세서에서 명백하게 정의되지 않는 한 이상화되거나 지나지게 형식적인 감각으로 해석되지 않아야 한다.
본 개시에 설명된 실시 예는 단지 예시일 뿐이다. 통상의 기술자는 구체적으로 개시된 것들로부터 다양한 대안적인 실시 예들을 인식할 수 있다. 이러한 대한적인 실시 예들은 본 개시의 범위 내에 있는 것으로 의도된다. 따라서, 실시 예들은 후술되는 청구항들 및 그것의 균등물들에 설명된 대로 실시될 수 있음을 이해할 것이다.

Claims (20)

  1. 입출력 커맨드들을 스케줄링하는 방법에 있어서,
    입출력 스케줄러에 의해, 애플리케이션으로부터 입출력 커맨드를 수신하는 단계;
    입출력 컨트롤러에 의해, 상기 입출력 커맨드에 기초하여 입출력 리소스 요구 사항을 생성하는 단계;
    트래픽 컨트롤러에 의해, 상기 입출력 리소스 요구 사항에 기초하여 사용 가능한 리소스들의 양이 기준을 충족하는지를 결정하는 단계; 및
    상기 트래픽 컨트롤러에 의해, 상기 충족되는 기준에 대한 응답으로 상기 입출력 커맨드를 큐로 전송하는 단계를 포함하는 방법.
  2. 제 1 항에 있어서,
    스토리지 장치와 관련된 상기 리소스들은 다수의 사용 가능한 하드웨어 토큰들, 사용 가능한 버퍼의 양, 또는 사용 가능한 DMA(Direct Memory Access) 디스크립터의 양, 중 적어도 하나 이상을 포함하고, 그리고
    상기 사용 가능한 리소스들에 대한 정보는 장치 힌트를 통해 획득되고, 초과 구독(oversubscription) 요인에 의해 조정되는 방법.
  3. 제 1 항에 있어서,
    상기 충족되는 기준의 상기 결정은:
    상기 트래픽 컨트롤러에 의해, 스케줄된 입출력 커맨드들의 양이 예약된 리소스들의 양보다 작은지를 결정하는 단계;
    상기 트래픽 컨트롤러에 의해, 상기 스케줄된 입출력 커맨드들의 양이 미리 결정된 트래픽 임계 값보다 작은지를 결정하는 단계; 및
    상기 트래픽 컨트롤러에 의해, 상기 입출력 리소스 요구 사항에 기초하여 요구된 리소스들의 양이 상기 사용 가능한 리소스들의 양보다 작은지를 결정하는 단계를 포함하는 방법.
  4. 제 3 항에 있어서,
    상기 입출력 리소스 요구 사항으로부터 결정된 상기 요구된 리소스들의 양에 기초하여 상기 입출력 커맨드에 요구된 리소스들을 할당하는 단계; 및
    상기 입출력 커맨드가 완료되었다는 결정에 응답하여 상기 입출력 커맨드로부터 상기 리소스들을 할당 해제하는 단계를 더 포함하는 방법.
  5. 제 3 항에 있어서,
    상기 트래픽 컨트롤러에 의해, 상기 스케줄된 입출력 커맨드의 양이 상기 미리 결정된 트래픽 임계 값보다 크면, 상기 입출력 커맨드를 상기 입출력 스케줄러로 전송하고 입출력 활용도(utilization) 카운터의 트래픽 충돌 카운트를 증가시키는 단계를 더 포함하는 방법.
  6. 제 3 항에 있어서,
    상기 트래픽 컨트롤러에 의해, 상기 입출력 리소스 요구 사항에 기초하여 상기 요구된 리소스들의 양이 상기 사용 가능한 리소스들의 양보다 적으면, 상기 입출력 커맨드를 상기 입출력 스케줄러로 전송하고 입출력 활용도 카운터의 리소스 충돌 카운터를 증가시키는 단계를 더 포함하는 방법.
  7. 제 3 항에 있어서,
    트래픽 충돌에 응답하여 상기 미리 결정된 트래픽을 증가시키는 단계를 더 포함하는 방법.
  8. 제 7 항에 있어서,
    미리 결정된 시간 동안 상기 입출력 스케줄러로부터 입출력 커맨드를 수신하는 것을 일시 중지한 것에 응답하여 상기 트래픽 임계 값을 상기 미리 결정된 트래픽 임계 값으로 재설정하는 단계를 더 포함하는 방법.
  9. 제 1 항에 있어서,
    상기 입출력 리소스 요구 사항은 버퍼 및 DMA 디스크립터를 포함하는 방법.
  10. 스토리지 장치에 의한 처리를 위한 입출력 커맨드들을 스케줄링하기 위한 시스템에 있어서,
    프로세서; 및
    명령어들을 저장하도록 구성된 메모리를 포함하고, 상기 명령어들이 실행될 때, 상기 명령어들은 상기 프로세서가:
    입출력 스케줄러에 의해, 애플리케이션으로부터 입출력 커맨드를 수신하고;
    입출력 컨트롤러에 의해, 상기 입출력 커맨드에 기초하여 입출력 리소스 요구 사항을 생성하고;
    트래픽 컨트롤러에 의해, 상기 입출력 리소스 요구 사항에 기초하여 사용 가능한 리소스들의 양이 기준을 충족하는지를 결정하고; 그리고
    상기 트래픽 컨트롤러에 의해, 상기 충족되는 기준에 대한 응답으로 상기 입출력 커맨드를 큐로 전송하도록 야기하는 시스템.
  11. 제 10 항에 있어서,
    스토리지 장치와 관련된 상기 리소스들은 다수의 사용 가능한 하드웨어 토큰들, 사용 가능한 버퍼의 양, 또는 사용 가능한 DMA(Direct Memory Access) 디스크립터의 양, 중 적어도 하나 이상을 포함하고, 그리고
    상기 사용 가능한 리소스들에 대한 정보는 장치 힌트를 통해 획득되고, 초과구독(oversubscription) 요인에 의해 조정되는 시스템.
  12. 제 10 항에 있어서,
    상기 충족되는 기준의 상기 결정은:
    상기 트래픽 컨트롤러에 의해, 스케줄된 입출력 커맨드들의 양이 예약된 리소스들의 양보다 작은지를 결정하는 것;
    상기 트래픽 컨트롤러에 의해, 상기 스케줄된 입출력 커맨드들의 양이 미리 결정된 트래픽 임계 값보다 작은지를 결정하는 것; 그리고
    상기 트래픽 컨트롤러에 의해, 상기 입출력 리소스 요구 사항에 기초하여 요구된 리소스들의 양이 상기 사용 가능한 리소스들의 양보다 작은지를 결정하는 것을 포함하는 시스템.
  13. 제 12 항에 있어서,
    상기 명령어들은 상기 프로세서가:
    상기 입출력 리소스 요구 사항으로부터 결정된 상기 요구된 리소스들의 양에 기초하여 상기 입출력 커맨드에 요구된 리소스들을 할당하고; 그리고
    상기 입출력 커맨드가 완료되었다는 결정에 응답하여 상기 입출력 커맨드로부터 상기 리소스들을 할당 해제하도록 더 야기하는 시스템.
  14. 제 12 항에 있어서,
    상기 명령어들은 상기 프로세서가:
    상기 트래픽 컨트롤러에 의해, 상기 스케줄된 입출력 커맨드의 양이 상기 미리 결정된 트래픽 임계 값보다 크면, 상기 입출력 커맨드를 상기 입출력 스케줄러로 전송하고 입출력 활용도(utilization) 카운터의 트래픽 충돌 카운트를 증가시키도록 더 야기하는 시스템.
  15. 제 12 항에 있어서,
    상기 명령어들은 상기 프로세서가:
    상기 트래픽 컨트롤러에 의해, 상기 입출력 리소스 요구 사항에 기초하여 상기 요구된 리소스들의 양이 상기 사용 가능한 리소스들의 양보다 적으면, 상기 입출력 커맨드를 상기 입출력 스케줄러로 전송하고 입출력 활용도 카운터의 리소스 충돌 카운터를 증가시키도록 더 야기하는 시스템.
  16. 제 12 항에 있어서,
    상기 명령어들은 상기 프로세서가 트래픽 충돌에 응답하여 상기 미리 결정된 트래픽을 증가시키도록 더 야기하는 시스템.
  17. 제 16 항에 있어서,
    상기 명령어들은 상기 프로세서가 미리 결정된 시간 동안 상기 입출력 스케줄러로부터 입출력 커맨드를 수신하는 것을 일시 중지한 것에 응답하여 상기 트래픽 임계 값을 상기 미리 결정된 트래픽 임계 값으로 재설정하도록 더 야기하는 시스템.
  18. 제 10 항에 있어서,
    상기 입출력 리소스 요구 사항은 버퍼 및 DMA 디스크립터를 포함하는 시스템.
  19. 스토리지 장치의 비-휘발성 메모리에 액세스하기 위해 입출력 커맨드들을 처리하기 위한 스토리지 장치 리소스들을 포함하는 스토리지 장치; 및
    상기 스토리지 장치와 연관되고 상기 스토리지 장치로 상기 입출력 커맨드들을 전송하도록 구성되는 호스트 장치를 포함하되,
    상기 호스트 장치는 상기 입출력 커맨드들을 스케줄하도록 구성된 입출력 컨트롤러를 포함하고,
    상기 입출력 컨트롤러는:
    입출력 스케줄러로부터 수신된 상기 입출력 커맨드에 기초하여 입출력 리소스 요구 사항을 생성하고;
    상기 입출력 컨트롤러의 트래픽 컨트롤러에 의해, 상기 입출력 리소스 요구 사항에 기초하여 사용 가능한 리소스들의 양이 기준을 충족하는지를 결정하고; 그리고
    상기 트래픽 컨트롤러에 의해, 상기 충족되는 기준에 대한 응답으로 상기 입출력 커맨드를 큐로 전송하도록 구성되는 시스템.
  20. 제 19 항에 있어서,
    상기 입출력 컨트롤러는:
    상기 트래픽 컨트롤러에 의해, 스케줄된 입출력 커맨드들의 양이 예약된 리소스들의 양보다 작은지를 결정하고;
    상기 트래픽 컨트롤러에 의해, 상기 스케줄된 입출력 커맨드들의 양이 미리 결정된 트래픽 임계 값보다 작은지를 결정하고;
    상기 트래픽 컨트롤러에 의해, 상기 입출력 리소스 요구 사항에 기초하여 요구된 리소스들의 양이 상기 사용 가능한 리소스들의 양보다 작은지를 결정하고;
    상기 입출력 리소스 요구 사항으로부터 결정된 상기 요구된 리소스들의 양에 기초하여 상기 입출력 커맨드에 요구된 리소스들을 할당하고;
    상기 스토리지 장치에 의해 상기 입출력 커맨드를 처리하고;
    상기 입출력 커맨드의 상기 처리가 완료되었는지를 확인하고; 그리고
    상기 입출력 커맨드가 완료되었다는 결정에 응답하여 상기 입출력 커맨드로부터 상기 리소스들을 할당 해제하도록 더 구성된 시스템.

KR1020220044505A 2021-04-23 2022-04-11 다중 리소스 파라미터들에 기초한 입출력 커맨드 스케줄링을 위한 시스템들 및 방법들 KR20220146325A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202163179013P 2021-04-23 2021-04-23
US63/179,013 2021-04-23
US17/333,316 2021-05-28
US17/333,316 US11620159B2 (en) 2021-04-23 2021-05-28 Systems and methods for I/O command scheduling based on multiple resource parameters

Publications (1)

Publication Number Publication Date
KR20220146325A true KR20220146325A (ko) 2022-11-01

Family

ID=81653473

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220044505A KR20220146325A (ko) 2021-04-23 2022-04-11 다중 리소스 파라미터들에 기초한 입출력 커맨드 스케줄링을 위한 시스템들 및 방법들

Country Status (5)

Country Link
US (2) US11620159B2 (ko)
EP (1) EP4080341A3 (ko)
KR (1) KR20220146325A (ko)
CN (1) CN115237587A (ko)
TW (1) TW202244742A (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220374149A1 (en) * 2021-05-21 2022-11-24 Samsung Electronics Co., Ltd. Low latency multiple storage device system
US12067254B2 (en) 2021-05-21 2024-08-20 Samsung Electronics Co., Ltd. Low latency SSD read architecture with multi-level error correction codes (ECC)
JP2023015488A (ja) * 2021-07-20 2023-02-01 富士通株式会社 データ中継装置、中継制御方法およびストレージシステム
US11934672B2 (en) * 2021-08-26 2024-03-19 International Business Machines Corporation Cached workload management for a multi-tenant host
US11809710B2 (en) * 2021-09-24 2023-11-07 Micron Technology, Inc. Outstanding transaction monitoring for memory sub-systems
US11907577B2 (en) * 2021-12-06 2024-02-20 Western Digital Technologies, Inc. Command queuing for data storage devices
US20230393784A1 (en) * 2022-06-03 2023-12-07 Micron Technology, Inc. Data path sequencing in memory systems

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6333936B1 (en) 1998-04-29 2001-12-25 Telefonaktiebolaget Lm Ericsson (Publ) Method and apparatus for allocating processing resources
US6857020B1 (en) 2000-11-20 2005-02-15 International Business Machines Corporation Apparatus, system, and method for managing quality-of-service-assured e-business service systems
US8145785B1 (en) * 2004-02-13 2012-03-27 Habanero Holdings, Inc. Unused resource recognition in real time for provisioning and management of fabric-backplane enterprise servers
US9397944B1 (en) * 2006-03-31 2016-07-19 Teradici Corporation Apparatus and method for dynamic communication scheduling of virtualized device traffic based on changing available bandwidth
WO2009153620A1 (en) * 2008-06-19 2009-12-23 Freescale Semiconductor, Inc. A system, method and computer program product for scheduling a processing entity task
JP4764915B2 (ja) 2008-12-08 2011-09-07 株式会社日立製作所 性能管理システム、情報処理システム、及び性能管理システムにおける情報収集方法
US8930953B2 (en) * 2009-01-16 2015-01-06 International Business Machines Corporation Dynamic checking of hardware resources for virtual environments
US8037219B2 (en) 2009-04-14 2011-10-11 Lsi Corporation System for handling parallel input/output threads with cache coherency in a multi-core based storage array
US20210349749A1 (en) 2012-02-14 2021-11-11 Aloke Guha Systems and methods for dynamic provisioning of resources for virtualized
US9396031B2 (en) * 2013-09-27 2016-07-19 International Business Machines Corporation Distributed UIMA cluster computing (DUCC) facility
KR101699377B1 (ko) 2014-07-02 2017-01-26 삼성전자주식회사 불휘발성 메모리 및 메모리 컨트롤러를 포함하는 스토리지 장치 및 스토리지 장치의 동작 방법
KR102387932B1 (ko) * 2014-07-31 2022-04-15 삼성전자주식회사 멀티 포트, 멀티 펑션 PCIe 장치의 호스트 명령어의 QoS 유지 방법 및 그 시스템
US9483315B2 (en) * 2015-02-03 2016-11-01 International Business Machines Corporation Autonomous dynamic optimization of platform resources
US11275590B2 (en) * 2015-08-26 2022-03-15 Huawei Technologies Co., Ltd. Device and processing architecture for resolving execution pipeline dependencies without requiring no operation instructions in the instruction memory
US11467769B2 (en) 2015-09-28 2022-10-11 Sandisk Technologies Llc Managed fetching and execution of commands from submission queues
US9792051B2 (en) 2016-02-24 2017-10-17 Samsung Electronics Co., Ltd. System and method of application aware efficient IO scheduler
CN107306232B (zh) * 2016-04-22 2021-02-26 华为技术有限公司 网络设备、控制器、队列管理方法及流量管理芯片
US10257047B2 (en) * 2016-07-21 2019-04-09 International Business Machines Corporation Service availability risk
US10146585B2 (en) 2016-09-07 2018-12-04 Pure Storage, Inc. Ensuring the fair utilization of system resources using workload based, time-independent scheduling
KR20180057036A (ko) 2016-11-21 2018-05-30 삼성전자주식회사 효율적인 리소스 관리를 위한 전자 장치 및 이의 방법
US10496563B2 (en) * 2017-04-07 2019-12-03 Intel Corporation Apparatus and method for dynamic provisioning, quality of service, and scheduling in a graphics processor
US10541939B2 (en) 2017-08-15 2020-01-21 Google Llc Systems and methods for provision of a guaranteed batch
JP2019074995A (ja) 2017-10-18 2019-05-16 富士ゼロックス株式会社 情報処理装置
CN116010312A (zh) 2018-01-18 2023-04-25 伊姆西Ip控股有限责任公司 用于管理输入/输出的方法、设备和计算机程序产品
US11409436B2 (en) 2018-08-08 2022-08-09 Micron Technology, Inc. Buffer management in memory systems for read and write requests
US11163452B2 (en) * 2018-09-24 2021-11-02 Elastic Flash Inc. Workload based device access
US11507430B2 (en) 2018-09-27 2022-11-22 Intel Corporation Accelerated resource allocation techniques
US10834009B2 (en) 2019-03-18 2020-11-10 Intel Corporation Systems and methods for predictive scheduling and rate limiting
US11669272B2 (en) 2019-05-31 2023-06-06 Micron Technology, Inc. Predictive data transfer based on availability of media units in memory sub-systems
US11748278B2 (en) 2019-06-20 2023-09-05 Intel Corporation Multi-protocol support for transactions
US11231963B2 (en) 2019-08-15 2022-01-25 Intel Corporation Methods and apparatus to enable out-of-order pipelined execution of static mapping of a workload
US20200089537A1 (en) * 2019-11-20 2020-03-19 Intel Corporation Apparatus and method for bandwidth allocation and quality of service management in a storage device shared by multiple tenants
US11321257B2 (en) 2019-12-31 2022-05-03 Micron Technology, Inc. Quality of service control of logical devices for a memory sub-system
US11436049B2 (en) 2020-04-17 2022-09-06 Apple Inc. Systems and methods to control bandwidth through shared transaction limits
US20210349657A1 (en) 2020-05-08 2021-11-11 Pure Storage, Inc. Providing data management as-a-service
US11704058B2 (en) * 2020-07-28 2023-07-18 Samsung Electronics Co., Ltd. Systems and methods for resource-based scheduling of commands
US20210266253A1 (en) * 2021-04-23 2021-08-26 Intel Corporation Pooling of network processing resources

Also Published As

Publication number Publication date
US20220342703A1 (en) 2022-10-27
EP4080341A2 (en) 2022-10-26
TW202244742A (zh) 2022-11-16
US20230214259A1 (en) 2023-07-06
CN115237587A (zh) 2022-10-25
US11620159B2 (en) 2023-04-04
EP4080341A3 (en) 2022-11-09

Similar Documents

Publication Publication Date Title
KR20220146325A (ko) 다중 리소스 파라미터들에 기초한 입출력 커맨드 스케줄링을 위한 시스템들 및 방법들
CN111444012B (zh) 一种保证延迟敏感应用延迟slo的动态调控资源方法及系统
US9208116B2 (en) Maintaining I/O priority and I/O sorting
US9606838B2 (en) Dynamically configurable hardware queues for dispatching jobs to a plurality of hardware acceleration engines
KR102450528B1 (ko) 애플리케이션을 인식하는 효율적인 io 스케줄러 시스템 및 방법
US9019826B2 (en) Hierarchical allocation of network bandwidth for quality of service
US11093352B2 (en) Fault management in NVMe systems
WO2022068697A1 (zh) 任务调度方法及装置
KR102226014B1 (ko) 데이터 프로세싱 엔진 및 그것의 리소스 관리 방법
KR20110118810A (ko) 다수의 가상 서버들 사이에 공유 자원들의 할당을 통한 소프트웨어 제어기능을 갖는 마이크로 프로세서
EP3945419A1 (en) Systems and methods for resource-based scheduling of commands
WO2017151236A1 (en) Traffic shaper with policer(s) and adaptive timers
CA2316643C (en) Fair assignment of processing resources to queued requests
US20230401109A1 (en) Load balancer
US12039357B2 (en) Mechanism for distributed resource-based I/O scheduling over storage device
CN219642231U (zh) 一种任务分发装置和基于任务分发装置的多核异构处理器
US20230108001A1 (en) Priority-based scheduling with limited resources
WO2022185527A1 (ja) スケジューリング装置、スケジューリング方法、および、スケジューリングプログラム
CN115543554A (zh) 一种计算作业的调度方法、装置及计算机可读存储介质