KR102428091B1 - 키 밸류 장치를 위한 애플리케이션 인식 입출력 완료 모드 변환기의 방법 - Google Patents

키 밸류 장치를 위한 애플리케이션 인식 입출력 완료 모드 변환기의 방법 Download PDF

Info

Publication number
KR102428091B1
KR102428091B1 KR1020160123275A KR20160123275A KR102428091B1 KR 102428091 B1 KR102428091 B1 KR 102428091B1 KR 1020160123275 A KR1020160123275 A KR 1020160123275A KR 20160123275 A KR20160123275 A KR 20160123275A KR 102428091 B1 KR102428091 B1 KR 102428091B1
Authority
KR
South Korea
Prior art keywords
command
application
storage device
statement
queues
Prior art date
Application number
KR1020160123275A
Other languages
English (en)
Other versions
KR20170099344A (ko
Inventor
페이 리우
기양석
실링 선
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Publication of KR20170099344A publication Critical patent/KR20170099344A/ko
Application granted granted Critical
Publication of KR102428091B1 publication Critical patent/KR102428091B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • 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/22Handling requests for interconnection or transfer for access to input/output bus using successive scanning, e.g. polling
    • 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/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • G06F13/26Handling requests for interconnection or transfer for access to input/output bus using interrupt with 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/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]

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)
  • Stored Programmes (AREA)

Abstract

본 발명에 따른 시스템은 애플리케이션을 저장하도록 구성되는 메모리, 메모리에 저장된 애플리케이션을 실행하도록 구성되는 프로세서, 스토리지 장치, 및, 애플리케이션 프로파일을 수신하도록 구성되는 모드 구성 모듈; 및, 애플리케이션으로부터 입출력 커맨드를 수신하고, 애플리케이션 프로파일을 사용하여 입출력 커맨드를 복수의 커맨드 큐들 중 하나로 할당하도록 구성되는 애플리케이션 인식 모듈을 포함하는 장치 드라이버를 포함한다. 스토리지 장치는 복수의 커맨드 큐들 중 하나로부터 입출력 커맨드를 수신하도록 작동한다.

Description

키 밸류 장치를 위한 애플리케이션 인식 입출력 완료 모드 변환기의 방법{METHOD OF APPLICATION AWARE IO COMPLETION MODE CHANGER FOR KEY VALUE DEVICE}
본 발명은 키-밸류 저장에 관한 것으로써, 더욱 상세하게는 저장 장치 및 애플리케이션이 저장 장치상의 키-밸류 저장을 사용하여 그것들의 통신(interaction)을 향상시키는 것에 관한 것이다.
키-밸류 데이터베이스들(key-value databases)을 저장하기 위하여 솔리드-스테이트 드라이브(SSD; solid state drive)와 같은 플래시 메모리들의 사용은 비교적 최근의 혁신이다. 비록 동적 랜덤 액세스 메모리(DRAM; dynamic random access memory)만큼 빠르진 않더라도, SSD들은 종래의 하드 디스크 드라이브들 이상의 용량을 제공하면서도 하드 디스크 드라이브들보다 상당히 빠르다. SSD의 가격이 지속적으로 하락함에 따라, SSD들은 데이터베이스들을 저장하기 위한 장치로 더욱 많이 선택되고 있다.
데이터베이스들은 키-밸류 인터페이스(key-value interface)를 자주 사용한다. 즉, 데이터베이스의 쿼리(query)는 키(key)를 제공하고, 데이터베이스는 대응하는 값(value)을 반환한다. 이러한 인터페이스는 애플리케이션으로부터의 쿼리가 특정 파일 또는 블록을 특정된 후, 장치의 물리적 블록 어드레스로 매핑(mapping)되는 종래의 파일 시스템 및 블록 시스템 인터페이스와 다르다. 데이터베이스로써 SSD를 사용하는 것은 키-밸류 인터페이스로 종래의 인터페이스를 교체하는 것을 수반한다.
그러나 애플리케이션이 키를 제공하고, 이에 따라 값을 수신할 수 있는 반면에, SSD는 모든 입출력 커맨드들을 SSD의 특정 조건들과 무관하게 동일한 방식으로 관리한다. 또한 애플리케이션이 SSD를 활용하기 위하여 애플리케이션에 대해 최선의 방법을 제안할 수 있는 어떤 정보를 포함하는 것도 아니다. 다시 말하면, 애플리케이션 및 SSD는 주어진 전체 조건들에서 그것들의 동작을 최적화할 수 없다.
대형 데이터베이스들의 성능을 향상시키기는 것 및 비용 감소 및 레이턴시 최소화의 두 가지 목적을 균형 있게 하기 위한 방법에 대한 요구가 여전히 존재한다.
본 발명은 위에서 설명한 기술적 과제를 해결하기 위한 것으로, 본 발명은 향상된 성능을 갖는 저장 장치 및 시스템을 제공할 수 있다.
본 발명의 실시 예에 따른 시스템은 애플리케이션을 저장하도록 구성되는 메모리, 상기 메모리에 저장된 애플리케이션을 실행하도록 구성되는 프로세서, 스토리지 장치, 및 장치 드라이버를 포함하고, 상기 장치 드라이버는 애플리케이션 프로파일을 수신하도록 구성되는 모드 구성 모듈, 및 상기 애플리케이션으로부터 입출력 커맨드를 수신하고, 상기 애플리케이션 프로파일을 사용하여 상기 입출력 커맨드를 복수의 커맨드 큐들 중 하나로 할당하도록 구성되는 애플리케이션 인식 모듈을 포함하는 장치 드라이버를 포함하고, 상기 스토리지 장치는 상기 복수의 커맨드 큐들 중 상기 하나로부터 상기 입출력 커맨드를 수신하도록 동작한다.
본 발명의 실시 예에 따른 방법은 저장 장치에서, 감시 매개 변수 및 전환 매개 변수를 포함하는 애플리케이션으로부터 애플리케이션 프로파일을 수신하는 단계, 상기 저장 장치에 상기 애플리케이션 프로파일을 저장하는 단계, 상기 저장 장치에서, 상기 애플리케이션 프로파일이 포함된 입출력(I/O) 커맨드를 수신하는 단계, 상기 저장 장치가 상기 I/O 커맨드를 수신하는 시점에, 상기 감시 매개 변수에 기반된 상기 저장 장치의 적어도 하나의 조건을 판별하는 단계, 및 상기 전환 매개 변수 및 상기 저장 장치의 상기 적어도 하나의 조건에 응답하여 복수의 커맨드 큐들 중 하나에 상기 I/O 커맨드를 스케줄링하는 단계를 포함한다.
본 발명의 실시 예는 비-일시적인 명령어들을 저장하는 유형의 저장 매체(tangible storage medium)를 제공한다. 상기 비-일시적인 명령어들이 기계에 의해 실행될 경우, 저장 장치에서, 감시 매개 변수 및 전환 매개 변수를 포함하는 애플래케이션 프로파일을 애플리케이션으로부터 수신하는 단계, 상기 저장 장치에 상기 애플리케이션 프로파일을 저장하는 단계, 상기 저장 장치에서, 상기 애플리케이션 프로파일을 포함하는 I/O 커맨드를 수신하는 단계, 상기 저장 장치가 상기 I/O 커맨드를 수신할 때, 상기 감시 매개 변수를 기반으로 상기 저장 장치의 적어도 하나의 조건을 결정하는 단계, 및 상기 스위치 매개 변수 및 상기 저장 장치의 상기 적어도 하나의 조건에 응답하여 복수의 커맨드 큐들 중 하나에 상기 I/O 커맨드를 스케줄링하는 단계가 실행된다.
본 발명의 실시 예에 따르면, 향상된 성능을 갖는 시스템 및 그것의 동작 방법이 제공된다.
도 1은 본 발명의 실시 예에 따라 서버의 동작들을 최적화하도록 설계된 애플리케이션 및 저장 장치를 갖는 서버를 보여준다.
도 2는 도 1의 서버의 추가적인 상세도를 보여준다.
도 3은 본 발명의 실시 예에 따른 사용자 공간 장치 드라이버와 교류하는 도 1의 애플리케이션을 보여준다.
도 4는 도 3의 모드 구성 모듈과 접속한 도 1의 애플리케이션을 보여준다.
도 5a 및 도 5b는 도 3의 애플리케이션 인식 모듈과 접속한 도 1의 애플리케이션을 보여준다.
도 6은 도 3의 동적 피드백 모듈과 접속한 도 1의 애플리케이션을 보여준다.
도 7은 도 1의 애플리케이션의 상세도를 보여준다.
도 8은 도 7의 모드 구성기의 상세도를 보여준다.
도 9a 및 도 9b는 본 발명의 실시 예에 따라 도 3의 사용자 공간 장치 드라이버가 도 1의 애플리케이션으로부터의 I/O 커맨드들을 처리하는 예시적인 절차의 순서도를 보여준다.
도 10은 본 발명의 실시 예에 따라 도 3의 사용자 공간 장치 드라이버가 I/O 커맨드들을 스케줄링하는 예시적인 절차의 순서도를 보여준다.
도 11은 본 발명의 실시 예에 따라 도 1의 애플리케이션이 도 3의 사용자 공간 장치 드라이버와 교류하는 예시적인 절차의 순서도를 보여준다.
첨부된 도면을 참조하여 본 발명의 실시 예들이 상세하게 설명될 것이다. 이하의 상세한 설명에서, 다양한 상세한 설명들은 본 발명의 기술적 사상의 이해를 돕기 위한 것이다. 그러나 당업자가 이러한 상세한 설명들없이 본 발명의 시술적 사상을 수행할 수 있음은 잘 이해될 것이다. 다른 예로써, 잘 알려진 방법들, 절차들, 구성들, 회로들, 및 네트워크들은 실시 예들이 불필요하게 모호해지지 않도록 설명되지 않는다.
제1, 제2, 등의 용어들이 본문에서 다양한 요소들을 설명하기 위하여 사용될 수 있으나, 이러한 요소들은 이러한 용어들에 한정되지 않음은 잘 이해될 것이다. 이러한 용어들은 오직 하나의 요소로부터 다른 하나를 구분하기 위하여 사용된다. 예를 들어, 본 발명의 사상으로부터의 벗어남 없이 제1 모듈은 제2 모듈을 가리킬 수 있고, 유사하게 제2 모듈은 제1 모듈을 가리킬 수 있다.
본 발명의 본문에서 사용되는 용어들은 오직 특정 실시 예를 설명하기 위한 목적을 가지며, 본 발명의 한정인 것으로 의도되지 않는다. 본 발명의 본문 및 첨부된 특허청구범위에서 사용되는 바와 같이, 단수 용어들은 맥락이 명확하게 다른 것을 지칭하지 않는 한, 복수의 형태를 포함하는 것으로 의도된다. 본 문에서 사용되는 "및/또는"의 용어는 열거된 목록들의 하나 또는 그 이상의 가능한 조합들을 포함하거나 참조하는 것임은 잘 이해될 것이다. 상세한 설명에서 사용되는 "포함한다"의 용어는 언급된 특성, 수, 단계들, 동작들, 및/또는 구성 요소들의 존재를 명시하며, 하나 또는 그 이상의 다른 특성, 수, 단계들, 동작들, 구성 요소들, 및/또는 이들의 그룹들의 존재 또는 추가를 배제하지 않는다. 도면들의 특징들 및 구성들은 필수적으로 계측되어 도시되지 않는다.
키-밸류 장치는 현존하는 NoSQL 데이터베이스들 및 디바이스-레벨 기능을 갖는 소프트웨어 기반의 스토리지의 일부를 보완하는 최적화된 키 밸류 저장소이다. NoSQL 데이터베이스들 및 소프트웨어 기반의 스토리지는 빅데이터 및 실시간 웹 애플리케이션에서의 중요하고 성장하는 산업적 이용을 찾고 있다. 빅 데이터 및 실시간 애플리케이션들로 맞추기 위하여, 향상된 성능을 달성하는 것은 키-밸류 장치들의 가장 큰 요구 사항 중 하나이다. 호스트 소프트웨어는 가능한 많은 키-밸류 장치들의 이점을 얻을 수 있도록 설계되어야 한다.
애플리케이션 프로파일들을 기반으로 입출력(I/O) 커맨드들의 처리를 동적으로(dynamically) 조절하는 새로운 방법은 다른 애플리케이션 요구들을 위하여 필요하다. 장치들이 점점 더 스마트해짐에 따라, 좀 더 지능적인 의사 결정이 애플리케이션의 이점들을 얻을 수 있도록 되기 위해서, 장치들로부터 호스트 애플리케이션들로의 피드백 또한 요구된다. 키-밸류 저장 동작들에서 이러한 향상(improvement)은 더 나은 서버 애플리케이션들을 제공할 수 있는 새로운 수직적인 통합 시스템을 생성할 것이다.
본 발명의 실시 예들은 플래시 메모리와 같은 불휘발성 저장소를 사용하는 키-밸류 장치들을 위한 호스트 소프트웨어가 다른 애플리케이션을 위한 애플리케이션 프로파일들에 기반된 입출력(I/O) 커맨드들을 처리하는 방법뿐만 아니라, 장치들로부터의 피드백 수집에 의해 커맨드 제출 경로(command submitting path)를 향상시키는 방법을 동적으로 조절하도록 한다. 개시된 완료 모드 변환기(completion mode changer)는 다른 애플리케이션 프로파일들에 기반된 인터럽트 및 폴링(polling) 방법들 모두의 이점을 얻을 수 있다. 본문은 애플리케이션 인식 I/O 완료 모드 체인저(application aware I/O completion mode changer)가 세가지 구성들 - 애플리케이션 인식 모듈(Application Aware Module), 모드 구성 모듈(Mode Configure Module), 및 동적 피드백 모듈(Dynamic Feedback Module) - 로 어떻게 설계되는지를 설명한다.
모드 변환기의 애플리케이션 인식 모듈은 애플리케이션을 인식(aware)할 수 있다. 애플리케이션 인식 모듈은 애플리케이션 프로파일들을 기반으로 애플리케이션들을 위한 장치로 다른 I/O 완료 정책들을 적용할 수 있다. 애플리케이션들의 I/O 커맨드들은 레이턴시, 초당 I/O 명령어들(IOPS; I/O instructions Per Second), 및 I/O 커맨드의 우선 순위와 같은 기준들을 기반으로 다른 완료 관리 카테고리들로 놓여질 수 있다.
모드 구성 모듈은 애플리케이션이 어떤 발행된 I/O 커맨드들을 위한 완료 정책을 구성하도록 할 수 있다. 애플리케이션들은 모드 구성 모듈을 통해 매개 변수들(parameters) 및 전환 조건들(switch condition)을 설정하고 감시(monitor)할 수 있다. 모드 변환기는 애플리케이션으로부터의 구성 입력들(configuration inputs)을 기반으로 I/O 커맨드 완료 정책을 동적으로 조절(dynamically adjust)할 수 있다.
동적 피드백 모듈은 I/O 혼잡도 제어(I/O congestion control), I/O 발행 모델들(I/O issuing models), I/O 완료 모델들(I/O completion models) 등과 같은 I/O 발행 행동(I/O issuing behavior)을 조절하는 방법에 대한 내장된 알고리즘을 이용하여, 장치 행동들 및 성능 예측에 대한 피드백(feedback)을 애플리케이션들에게 제공할 수 있다.
도 1은 본 발명의 실시 예에 따른 서버의 동작들을 최적화하도록 설계된 애플리케이션 및 스토리지 장치를 갖는 서버를 보여준다. 도 1에서, 서버(105)가 도시된다. 서버(105)는 프로세서(110), 메모리(115), 및 저장 장치(120)를 포함한다. 프로세서(110)는 인텔 제논(Intel Xeon), 셀러론(Celeron), 아이타니엄(Itanium), 또는 아톰 프로세서(Atom processor), 또는 AMD 옵트론 프로세서(Opteron processor) 등과 같은 다양한 프로세서들일 수 있다. 메모리(115)는 불휘발성 메모리(예를 들어, 플래시 메모리) 또는 SRAM(Static Random Access Memory) 또는 전형적으론 DRAM(Dynamic Random Access Memory)과 같은 다양한 메모리일 수 있다. 저장 장치(120)는 본 발명의 실시 예들로부터 이점을 얻을 수 있는 다양한 저장 장치일 수 있다. 솔리드 스테이트 드라이브(SSD)는 본 발명의 실시 예로부터 이점을 얻을 수 있는 저장 장치의 일 예이다. 그러나 적절한 기능(즉, 키-밸류 인터페이스, 모드 구성 및 애플리케이션 인식 프로세싱, 및 피드백)을 제공할 수 있는 다른 다양한 저장 장치들이 본 발명의 실시 예들로부터 이점을 얻을 수 있다. 서버(105)는 일반성의 손실 없이 데스크탑 또는 랩탑 컴퓨터와 같은, 유사한 기능을 제공하는 기계(machine)로 대체될 수 있다.
메모리(115) 내에서, 서버(105)는 애플리케이션(125) 및 장치 드라이버(130)를 포함할 수 있다. 애플리케이션(125)은 저장 장치(120)의 키-밸류 저장소를 액세스할 수 있는 다양한 애플리케이션일 수 있다. 도 1이 단지 하나의 애플리케이션(125)을 도시하고 있으나, 본 발명의 다른 실시 예들에서, 서버(105)는 복수의 애플리케이션들을 위한 기능을 제공할 수 있다. 본 발명의 또 다른 실시 예들에서, 서버(105)는 네트워크(135)를 통해 저장 장치(120)의 키-밸류 저장소로의 액세스를 훨씬 더 많은 애플리케이션들로 제공할 수 있다.
장치 드라이버(130)는 메모리(115)의 사용자 공간에 상주하는 장치 드라이버이므로, 사용자 공간 장치 드라이버(user space device driver)라 불린다. 장치 드라이버(130)는 저장 장치(120)와의 인터페이스를 제공한다. 장치 드라이버(130)는 이하에서 도 3을 참조하여 설명된다.
도 2는 도 1의 서버(105)의 추가적인 상세도를 보여준다. 도 2를 참조하면, 전형적으로, 기계(machine) 또는 기계들(105)은 하나 또는 그 이상의 프로세서들(110)을 포함한다. 프로세서들(110)은 메모리 컨트롤러(205) 및 클럭(210)을 포함할 수 있다. 메모리 컨트롤러(205) 및 클럭(210)은 기계 또는 기계들(105)의 구성들의 동작들을 조정하기 위하여 사용될 수 있다. 프로세서들(110)은 RAM(Random Access Memory), ROM(Read Only Memory), 또는 다른 상태 보존 매체를 포함할 수 있는 메모리(115)와 연결될 수 있다. 프로세서들(110)은 저장 장치들(120)과 연결되고, 이너넷 커넥터(Ethernet Connector) 또는 무선 커넥터일 수 있는 네트워크 커넥터(215)와 연결될 수 있다. 프로세서들(110)은 버스(225)와 연결될 수 있다. 버스(225)는 다른 구성들 중 사용자 인터페이스(230) 및 입출력 인터페이스 포트들과 부착된다. 입출력 인터페이스 포트들은 입출력 엔진(235)를 사용하여 관리될 수 있다.
도 3은 본 발명의 실시 예에 따른 사용자 공간 장치 드라이버(130)(user space device driver)와 통신(interact)하는 도 1의 애플리케이션(125)을 보여준다. 도 3에서, 애플리케이션(125) 및 다른 애플리케이션들(305, 310, 315, 이는 임의의 개수의 애플리케이션들을 대표한다)은 장치 드라이버(130)와 통신할 수 있다. 장치 드라이버(130)는 4개의 모듈들, 예를 들어, 모드 구성 모듈(320), 애플리케이션 인식 모듈(325), 동적 피드백 모듈(330), 및 스케줄러(335)를 포함할 수 있다. 이하에서, 도 4 내지 도 6을 참조하여 설명되는 바와 같이, 모드 구성 모듈(320), 애플리케이션 인식 모듈(325), 및 동적 피드백 모듈(330)은 애플리케이션들(125, 305, 310, 315)이 저장 장치(120)의 동작에 대하여 인지하고, 저장 장치(120)가 애플리케이션들(125, 305, 310, 315)에 대하여 인지하도록 할 수 있다.
스케줄러(335)는 특정 I/O 커맨드가 저장 장치(120)로 제공될 경우, 관리를 담당한다. 이하에서, 도 5a 및 도 5b를 참조하여 설명되는 바와 같이, 애플리케이션(125)으로부터의 특정 I/O 커맨드는 다양한 다른 커맨드 큐들로 할당될 수 있다. 스케줄러(335)는 다양한 커맨드 큐들로부터 I/O 커맨드들을 액세스할 수 있고, 그것들을 저장 장치(120)로 전달할 수 있다.
스케줄러(335)는 바람직한 스케줄 알고리즘(desired scheduling algorithm)을 제공할 수 있다. 예를 들어, 스케줄러(335)는 I/O 커맨드가 하나의 커맨드 큐로부터 획득된 이후에, I/O 커맨드가 다른 커맨드 큐로부터 획득되는 라운드-로빈 스케줄 방식(round robin scheduling algorithm)을 사용할 수 있다. 또는 스케줄러(335)는 우선 순위 스케줄 방식(prioritizing scheduling scheme)를 사용할 수 있다. 우선 순위 스케줄 방식은 다른 큐들이 다른 우선 선위들을 갖는 것을 인식할 수 있고, 낮은 우선 순위의 큐들보다 높은 우선 순위의 큐들을 선호할 수 있다. 그러나 I/O 커맨드가 주어진 커맨드 큐에 영원히 머무는 것이 바람직하지 않을 수 있기 때문에, (예를 들어, 각 커맨드 큐는 명령어가 실행되어야 하는 데드라인(deadline)을 가질 수 있다.) 우선 순위 스케줄 방식은 I/O 커맨드가 더 높은 우선 순위 커맨드 큐에 남아 있더라도, 결국 더 낮은 우선 순위 커맨드를 액세스할 수 있다. 더욱이, 스케줄러(335)의 스케줄 방식은 미리 고정될 수 있거나 또는 실시간으로 설정될 수 있다. 예를 들어, 커맨드 큐들의 용량들이 현재 스케줄링 알고리즘을 만족하지 않는 경우, 스케줄러(335)는 다른 스케줄 알고리즘으로 재구성될 수 있다. 그 이후에, 커맨드 큐들의 용량들이 떨어지는 경우, 스케줄러(335)는 원래 스케줄링 알고리즘으로 돌아갈 수 있다.
우선 순위 스케줄러의 일 예로써, 4개의 커맨드 큐들이 존재하는 것으로 가정하자. 우선 순위 스케줄러는 특정한 단위 시간 동안, N개의 I/O 커맨드들이 가장 낮은 우선 순위 큐로부터 스케줄링되고, 2N개의 I/O 커맨드들이 다음으로 가장 낮은 우선 순위 큐들로부터 스케줄링되고, 3N개의 I/O 커맨드들이 두 번째로 높은 우선 순위 큐들로부터 스케줄링되고, 4N개의 I/O 커맨드들이 가장 높은 우선 순위 커맨드 큐로부터 스케줄링되도록 설계될 수 있다.
좀 더 일반적으로, 우선 순위 스케줄러는 우선 순위에 의해 정렬된 커맨드 큐들을 포함할 수 있다. 주어진 우선 순위의 큐에 대하여, 우선 순위 스케줄러는 낮은 우선 순위의 큐로부터의 I/O 커맨드보다 더 많은 I/O 커맨드를 그 큐로부터 선택할 수 있다.
장치 드라이버(130)는 폴링 시스템(polling system) 또는 인터럽트 시스템(interrupt system) 중 어느 하나(일반적으로 둘 다 사용될 수 있다.)를 사용하여 저장 장치(120)와 통신(interact)할 수 있다. 도 3에 도시된 바와 같이, 폴링(340)은 장치 드라이버(130)에게 저장 장치(120)로 임의의 원하는 시간에 I/O 커맨드들의 완료 상태에 대해 문의(query)하도록 한다. 반면에, 인터럽트(345)는 I/O 커맨드가 완료되었을 때 저장 장치(120)가 장치 드라이버(130)로 알리도록 한다. 폴링(340)은 높은 처리량(high throughput)의 이점을 갖는다. 이는 저장 장치(130)가 새로운 I/O 커맨드를 수신할 수 있도록 준비되자 마자 장치 드라이버(130)가 저장 장치(130)를 폴링할 수 있기 때문이다. 인터럽트(345)는 낮은 레이턴시의 이점을 갖는다. 이는 장치 드라이버(130)가 새로운 I/O 커맨드가 도착함과 동시에 알려질 수 있기 때문이다. 인터럽트(345)는 폴링(340)보다 전력 소모가 적다.
도 4는 도 3의 모드 구성 모듈(320)과 접속하는 도 1의 애플리케이션(125)을 보여준다. 모드 구성 모듈(320)은 애플리케이션(125)이 발행된 I/O 커맨드들에 대하여 완료 정책(completion policy)(애플리케이션 프로파일(application profile)로 불림)을 구성하도록 할 수 있다. 완료 전환(completion switching)의 조건 및 매개 변수들(parameters)의 감시(monitoring)는 애플리케이션의 프로파일을 기반으로 구성될 수 있다. 모드 구성 모듈(320)을 통해, 애플리케이션(125)은 장치 드라이버(130)에 의해 감시될 수 있는 매개 변수들을 설정할 수 있다. 장치 드라이버(130)는 매개 변수들을 감시하여 애플리케이션(125)이 서비스 계약 수준(service level agreements)을 만족하도록 하는 방법을 결정하고, 도 3의 피드백 모듈(330)을 사용하여 애플리케이션(125)으로 피드백을 제공할 수 있다. 피드백 모듈(330)은 도 6을 참조하여 더욱 상세하게 설명된다.
도 4에서, 애플리케이션(125)은 애플리케이션 프로파일(405)을 모드 구성 모듈(320)로 전송한다. 애플리케이션 프로파일(405)은 하나 또는 그 이상의 감시 매개 변수들(410, monitoring parameters) 및 전환 매개 변수들(415, switching parameters)을 포함한다. 감시 매개 변수들(410)은 피드백을 원하는 애플리케이션(125)에 대한 매개 변수들이다. 매개 변수들의 예는 레이턴시(latency), IOPS, 큐 깊이(queue depth)(즉, 커맨드 큐들에 얼마나 많은 I/O 커맨드들이 있는가), 및 처리량(즉, I/O 커맨드들이 처리되는 비율)을 포함할 수 있다. 전환 매개 변수(415)는 장치 드라이버(130)가 저장 장치(120)로 I/O 커맨드를 전송하기 위하여 둘 또는 그 이상의 큐들로부터 선택하도록 할 수 있다. 전환 매개 변수(415)는 도 4에 도시된 바와 같이 임계치(threshold)일 수 있다. 전환 매개 변수와 적합한 감시 매개 변수가 임계치 이상인지 또는 이하인지 여부는 어떤 커맨드 큐가 I/O 커맨드를 수신할 것인지를 선택하기 위하여 사용될 수 있다. 예를 들어, 애플리케이션(125)은 감시 매개 변수(410)로써 레이턴시를 명시하고, 임계치(415)로써 0.1 ms로 명시할 수 있다. 또는 애플리케이션(125)은 감시 매개 변수(410)로써 IOPS를 명시하고, 임계치(415)로써 10,000 IOPS를 명시할 수 있다.
애플리케이션 프로파일(405)은 커맨드 큐들의 어느 우선 순위(420)가 I/O 커맨드들을 위하여 사용될 것인지를 명시할 수 있다. 예를 들어, 우선 순위(420)는 애플리케이션 프로파일(405)과 연관된 I/O 커맨드들이 우선 순위 4 또는 우선 순위 1에 할당될 것인지를 명시할 수 있다. 도 3의 애플리케이션 인식 모듈(325)은 이러한 정보를 사용하여 동일한 우선 순위의 폴링 및 인터럽트 커맨드 큐들 사이에서 선택할 수 있다.
좀 더 일반적으로, 우선 순위(420)는 둘 또는 그 이상의 커맨드 큐들을 식별하여 그것들 중 선택할 수 있다. 예를 들어, 도 1의 저장 장치(120)의 조건에 따라, 애플리케이션(125)은 다른 우선 순위의 두 개의 폴링 커맨드 큐들 중 하나로 집중된 I/O 커맨드들을 포함하기를 원할 수 있다. 전환 매개 변수(415)는 커맨드 큐들의 두 개의 다른 우선 순위들 사이에서 선택하기 위하여 사용될 수 있다. 우선 순위(420)가 둘 이상의 커맨드 큐들을 식별하는 경우, 전환 매개 변수(415)는 둘 또는 그 이상의 다른 임계치들을 명시할 수 있다. 도 1의 저장 장치(120)의 조건에 따라, 도 3의 애플리케이션 인식 모듈(325)은 식별된 커맨드 큐들에서 선택할 수 있다. 다른 애플리케이션 프로파일들은 다른 애플리케이션들과 독립적인 다른 감시 매개 변수들을 기반으로 다른 임계 값들을 명시할 수 있다. 다른 감시 매개 변수들은 각 애플리케이션으로 I/O 커맨드들을 처리하는 방법을 제어하는 기능을 제공한다.
모드 구성 모듈(320)은 애플리케이션 프로파일(405)을 애플리케이션 프로파일 저장소(425)에 저장할 수 있다. 애플리케이션 프로파일 저장소(425)는 도 1의 장치 드라이버(130)로 할당된 도 1의 메모리(115)의 일부일 수 있다. 애플리케이션 프로파일 저장소(425)는 다수의 애플리케이션들에 대한 다수의 애플리케이션 프로파일들을 저장할 수 있다. 예를 들어, 도 4는 3개의 애플리케이션 프로파일들을 저장하는 애플리케이션 프로파일 저장소(425)를 보여준다. 애플리케이션 프로파일들(405, 430)은 애플리케이션(125)과 연관되고, 애플리케이션 프로파일(435)은 애플리케이션(440)과 연관된다. 이후 장치 드라이버(130)는 이러한 애플리케이션 프로파일들을 사용하여 특정 애플리케이션으로부터의 특정 I/O 커맨드를 어떤 커맨드 큐에 저장할 것인지를 결정할 수 있다.
도 5a 및 도 5b는 도 3의 애플리케이션 인식 모듈(325)과 접속하는 도 1의 애플리케이션(125)을 보여준다. 애플리케이션 인식 모듈(325)은 애플리케이션들로부터의 I/O 커맨드들을, 그것들의 레이턴시, IOPS, 및 I/O 우선 순위 요건들을 기반으로, 다른 완료 관리 카테고리(completion handling categories)(즉, 커맨드 큐들)에 담을 수 있다. 도 4의 애플리케이션 프로파일(405)을 입력(input)으로 사용하여, 애플리케이션 인식 모듈(325)은 I/O 완료 관리자가 폴링 기반인지 또는 인터럽트 기반일 것인지를 결정할 수 있다.
폴링 카테고리 또는 인터럽트 카테고리에서, 다수의 큐들이 존재할 수 있다. 예를 들어, 도 5a에서, 폴링 카테고리(505)는 4개의 폴링 큐들(510, 515, 520, 525)을 포함하고, 인터럽트 카테고리(530)는 4개의 인터럽트 큐들(535, 540, 545, 550)을 포함한다. 그러나, 도 5a는 단순히 예시적인 것이며, 폴링 카테고리(505) 및 인터럽트 카테고리(530)는 다양한 개수의 큐들을 포함할 수 있다. 더욱이, 폴링 카테고리(505) 및 인터럽트 카테고리(530)는 다른 개수의 큐들을 포함할 수 있다. 예를 들어, 인터럽트 카테고리(530)가 오직 4개의 커맨드 큐들을 포함하는 반면에, 폴링 카테고리(505)는 8개의 커맨드 큐들을 포함할 수 있다.
각 카테고리에서, 다양한 커맨드 큐들은 다른 우선 순위를 가질 수 있다. 예를 들어, 폴링 카테고리(505)의 4개의 커맨드 큐들에서, 커맨드 큐(510)는 우선 순위 4를 가질 수 있고, 커맨드 큐(515)는 우선 순위 3을 가질 수 있고, 커맨드 큐(520)는 우선 순위 2를 가질 수 있고, 커맨드 큐(525)는 우선 순위 1을 가질 수 있다. 각 커맨드에 대한 우선 순위는 커맨드 큐로부터 I/O 커맨드를 얼마나 빠르게 획득되는지를 제어할 수 있다. 예를 들어, N이 시간 단위(예를 들어, 1ms)를 나타내는 경우, 커맨드 큐(510)는 N의 폴링 간격(polling interval)을 가질 수 있고, 커맨드 큐(515)는 2N의 폴링 간격을 가질 수 있고, 커맨드 큐(520)는 3N의 폴링 간격을 가질 수 있고, 커맨드 큐(525)는 4N의 폴링 간격을 가질 수 있다. 인터럽트 카테고리(530)는 또한 우선 순위 레벨들을 가질 수 있으나, 우선 순위 레벨들은 I/O 커맨드 결과들이 도 1의 저장 장치(120)로부터 전송되는 시점에 영향을 준다.
애플리케이션(125)이 I/O 커맨드(555)와 같은 I/O 커맨드를 애플리케이션 인식 모듈(325)로 전송하는 경우, 애플리케이션(125)은 애플리케이션 프로파일 ID(560)를 전송할 수 있다. 애플리케이션 프로파일 ID(560)는 어떤 애플리케이션 프로파일(예를 들면, 도 4의 애플리케이션 프로파일(405))이 I/O 커맨드(555)를 스케줄링할 때 사용되는지 명시할 수 있다. 그러면, 애플리케이션 인식 모듈(325)은 도 4의 애플리케이션 프로파일 저장소(425)로부터 적절한 애플리케이션 프로파일을 액세스하여, I/O 커맨드(555)가 어떤 커맨드 큐에 할당될 수 있는지 결정하는데 사용할 수 있다. 예를 들어, 도 5a에서, 애플리케이션 인식 모듈(325)은 도 4의 애플리케이션 프로파일(405)로부터 임계치(415)를 액세스한다.
애플리케이션 인식 모듈(325)은 저장 장치 조건(565)를 액세스할 수 있다. 저장 장치 조건(565)은 도 1의 저장 장치(120)의 현재 상태를 반영할 수 있다. 좀 더 상세하게, 저장 장치 조건(565)은 임계치(415)와 비교될 수 있는 도 4의 감시 매개 변수들(410)의 현재 상태를 반영할 수 있다. 비교기(570)는 이러한 비교를 수행할 수 있다. 이 후에, 저장 장치 조건(565)이 어떻게 임계치(415)와 비교하는지를 기반으로 애플리케이션 인식 모듈(325)은 커맨드 큐를 선택하여 I/O 커맨드(555)를 보유할 수 있다.
일 예로써, 도 4의 애플리케이션 프로파일(405)이 감시 매개 변수(410)로써 레이턴시를 명시하고, 임계치(415)로써 0.1ms를 명시하는 것으로 가정하자. 또한 애플리케이션(125)은 도 3의 애플리케이션 인식 모듈(325)이 저장 장치 조건(565)에 따라 폴링 카테고리(505) 및 인터럽트 카테고리(530) 사이에서 선택하도록 요청하는 것으로 가정하자. 저장 장치 조건(565)이 도 1의 저장 장치(120)가 현재 0.1ms 이하의 레이턴시를 제공하는 것을 가리키는 경우, 도 3의 애플리케이션 인식 모듈(325)은 폴링 카테고리(505)에서 커맨드 큐를 선택할 수 있고, 그렇지 않은 경우, 애플리케이션 인식 모듈(325)은 인터럽트 카테고리(530)로부터 커맨드 큐를 선택할 수 있다.
조건(565)은 애플리케이션 인식 모듈(325)이 애플리케이션(125)으로부터 I/O 커맨드를 수신할 시간 쯤(around the time)에 결정될 수 있다. "시간 쯤(around the time)"의 용어는 본 발명의 다른 실시 예들에서 다른 것들을 의미할 수 있다. 본 발명의 일부 실시 예들에서, 애플리케이션 인식 모듈(325)은 애플리케이션(125)으로부터 I/O 커맨드(555)를 수신할 때(at the time), 조건(565)을 결정할 수 있다. 본 발명의 다른 실시 예들에서, 애플리케이션 인식 모듈(325)은 애플리케이션(125)으로부터 I/O 커맨드(555)를 수신한 직후(sometime shortly after)에 조건(565)을 결정할 수 있다. 본 발명의 또 다른 실시 예들에서, 애플리케이션 인식 모듈(325)은 주기적으로 또는 연속적으로(either continuously or at periodic intervals) 조건(565)(그리고 다른 애플리케이션들에 대한 애플리케이션 프로파일들의 다른 조건들)을 위하여 도 1의 저장 장치(120)를 감시할 수 있다. 애플리케이션 인식 모듈(325)은 I/O 커맨드(555)를 위한 커맨드 큐를 선택할 때 조건(565)에 대하여 가장 최근 값을 사용할 수 있다. "시간 쯤(around the time)"의 용어는 "동시에(contemporaneous with)"와 같은 유사한 사상을 갖는 다른 용어로 대체될 수 있다.
도 5a가 사용될 큐들의 지시자(indicator of what queues to use)를 저장하는 도 4의 애플리케이션 프로파일(405)에 기반된 모델을 보여주고 있으나, 본 발명의 다른 실시 예들은 다른 원리에 따라 동작할 수 있다. 예를 들어, 도 5b에서, I/O 커맨드(555)와 함께 애플리케이션 프로파일을 명시하는 것 대신에, 애플리케이션(125)은, 애플리케이션 프로파일 저장소(425)로부터 도 4의 애플리케이션 프로파일(405)을 액세스할 필요 없이, 감시 매개 변수(410), 전환 매개 변수(415), 및 우선 순위를 직접 명시할 수 있다. 물론, 각 I/O 커맨드(555)에 감시 매개 변수(410), 전환 매개 변수(415), 및 우선 순위(420)를 포함하는 것은 애플리케이션 프로파일 식별자(application profile identifier)보다 좀 더 많은 데이터를 요구한다. 그러나, 도 3의 장치 드라이버(130)에 저장될 필요가 있는 정보의 양은 감소한다.
도 5a 및 도 5b를 조합하는 본 발명의 실시 예들 또한 가능할 수 있다. 예를 들어, 도 4의 애플리케이션 프로파일(405)은 감시 매개 변수(410) 및 전환 매개 변수(415)를 명시할 수 있으나, 우선 순위(420)를 생략할 수 있다. 그 다음에 I/O 커맨드(555)는 우선 순위(420)를 명시할 수 있다. 본 발명의 이러한 실시 예는 다양한 다른 우선 순위들과 함께 도 4의 애플리케이션 프로파일(405)을 사용하는 것을 가능하게 한다. 또는 애플리케이션 프로파일(405)은 우선 순위(420)를 명시할 수 있으나, 감시 매개 변수(410) 및 전환 매개 변수(415)를 생략할 수 있다. 본 발명의 이러한 실시 예는 애플리케이션(125)이 동일한 우선 순위(420)를 사용하나, 애플리케이션 인식 모듈(325)이 커맨드 큐들 사이에서 선택하는 방법을 바꾸도록 할 수 있다.
도 6은 도 3의 동적 피드백 모듈(330)과 접속하는 도 1의 애플리케이션(125)을 보여준다. 동적 피드백 모듈(330)은 애플리케이션(125)이 서브미션 및 완료 정책들(submission and completion policies)에 대하여 동적으로 조절하도록 하는 성능 예측 및 피드백을 애플리케이션(125)으로 제공할 수 있다. 동적 피드백 모듈(330)은 IOPS 및 레이턴시와 같이 감시된 매개 변수들(monitored parameter)을 위한 값들을 애플리케이션(125)으로 제공할 수 있다. 애플리케이션은 피드백 값들을 기반으로 혼잡도 제어(congestion control)를 위한 I/O 커맨드 서브미션 패턴을 조정할 수 있다.
더욱이, 동적 피드백 모듈(330)은 현재 장치 통계 자료(current device statistics)를 기반으로 애플리케이션(125)으로 성능 예측을 제공할 수 있다. 애플리케이션(125)은 이러한 정보를 사용하여 그것의 동작을 동적으로 조정하고, 향후 I/O 커맨드들이 서비스 계약 수준(service level agreement)을 만족하도록 계획하는 방법을 가질 수 있다.
도 6에서, 동적 피드백 모듈(330)은 저장 장치(120)로부터 정보를 수신할 수 있다. 이러한 정보는 레이턴시, IOPS, 처리량, 및 저장 장치(120)의 다른 상태들을 포함할 수 있다. 또는 동적 피드백 모듈(330)은 저장 장치(120)로부터 수신되고 전송되는 도 1의 장치 드라이버(130) 내의 정보를 기반으로 이러한 통계 자료를 추적할 수 있다. 예를 들어, 도 1의 장치 드라이버(130)가 관련된 I/O 커맨드를 전송한 이후에 0.1ms가 경과하고 저장 장치(120)로부터 데이터를 수신하는 경우, 동적 피드백 모듈(330)은 레이턴시를 연산할 수 있다. 좀 더 일반적으로, 동적 피드백 모듈(330)은 다양한 I/O 커맨드들 각각의 레이턴시를 추적하고, 이러한 I/O 커맨드들의 레이턴시들의 산술 평균(arithmetic mean)을 연산할 수 있다. IOPS, 처리량, 및 다른 원하는 통계 자료들도 유사하게 계산될 수 있다. 애플리케이션들(125, 305, 310, 315)로 제공될 수 있는 다른 통계 자료들은 각 커맨드 큐에 대한 최대 및 최소 레이턴시 및 각 커맨드 큐에 대한 최대 및 최소 IOPS를 포함할 수 있다.
동적 피드백 모듈(330)은 각 커맨드 큐에 대한 이러한 통계 자료를 (저장 장치(120)로부터 요청되었는지 또는 동적 피드백 모듈(330)에 의해 연산되었는지) 결정할 수 있다. 다른 커맨드 큐들은 다른 우선 순위를 갖기 때문에, 다른 커맨드 큐들은 다른 통계 자료를 가질 것이다. 커맨드 큐에 의해 통계 자료를 분리함으로써, 동적 피드백 모듈(330)은 애플리케이션들(125, 305, 310, 315)로 좀 더 의미 있는 정보를 제공할 수 있다.
도 4를 참조하여 설명된 바와 같이, 애플리케이션들(125, 305, 310, 315)은 애플리케이션이 추적하기를 원하는 감시 매개 변수(410)를 명시할 수 있다. 동적 피드백 모듈(330)이 저장 장치(120)에 대한 모든 통계 자료를 추적할 수 있는 반면에, 동적 피드백 모듈(330)은 애플리케이션에 의해 요청된 통계 자료만 제공할 수 있다. 감시된 매개 변수(605)는 애플리케이션(125)에 의해 요청된 통계 자료를 제공할 수 있고, 감시된 매개 변수(610)는 애플리케이션(305)에 의해 요청된 통계 자료를 제공할 수 있고, 감시된 매개 변수(615)는 애플리케이션(310)에 의해 요청된 통계 자료를 제공할 수 있고, 감시된 매개 변수(620)는 애플리케이션(315)에 의해 요청된 통계 자료를 제공할 수 있다.
동적 피드백 모듈(330)은 성능 예측기(625)를 더 포함할 수 있다. 성능 예측기(625)(performance predictor)는 휴리스틱 알고리즘(heuristic algorithm)을 사용하여, 애플리케이션들이 애플리케이션 프로파일을 변경할 경우에 예상되는 성능에 대한 정보를 애플리케이션들(125, 305, 310, 315)로 제공할 수 있다. 예를 들어, 성능 예측기(625)는 애플리케이션(125)이 애플리케이션 프로파일을 변경할 때 감시된 파라미터들(605)이 무엇이 될 수 있는지의 추정을 수행할 수 있다. 이후, 동적 피드백 모듈(330)은 이러한 성능 예측들(630, 635, 640, 645)을 애플리케이션들(125, 305, 310, 315)로 제공할 수 있다. 성능 예측들(630, 635, 640, 645)은 애플리케이션들(125, 305, 310, 315)이 독자적으로 결정할 수 없는 정보를 애플리케이션들(125, 305, 310, 315)로 제공할 수 있는데, 이는 애플리케이션들이 (애플리케이션들의 I/O 커맨드들에 영향을 줄 수 있는) 다른 애플리케이션들로부터의 I/O 커맨드에 대한 정보를 인지하기 위하여 커맨드 큐들을 액세스하지 않기 때문이다,
도 7은 도 1의 애플리케이션(125)의 상세도를 보여준다. 도 7에서, 애플리케이션(125)은 모드 구성기(705, mode configurator), 커맨드 발행기(710, command issuer), 및 피드백 수신기(715, feedback receiver)를 포함할 수 있다. 모드 구성기(705)는 도 3의 모드 구성 모듈(320)로 전송되는 도 4의 애플리케이션 프로파일(405)을 생성할 수 있다. 커맨드 발행기(710)는 I/O 커맨드들을 도 1의 장치 드라이버(130)로 발행할 수 있다. 커맨드 발행기(710)는 도 3의 애플리케이션 인식 모듈(325)이 도 5a의 I/O 커맨드(555)를 처리하는 방법을 인지하기 위하여 필요한 정보를 I/O 커맨드들에 더 추가할 수 있다. 예를 들어, 커맨드 발행기(710)는 도 4의 애플리케이션 프로파일(405)의 식별자를 도 5a의 I/O 커맨드(555)에, 또는 도 4의 감시 매개 변수(410), 도 4의 전환 매개 변수(415), 및/또는 도 4의 우선 순위(420)와 같은 정보를 추가할 수 있다. 마지막으로, 피드백 수신기(715)는 도 1의 저장 장치(120)의 동작에 대하여 도 3의 동적 피드백 모듈(330)로부터 피드백을 수신할 수 있다.
도 8은 도 7의 모드 구성기(705)의 상세도를 보여준다. 우선 먼저, 애플리케이션 프로파일(405)을 생성하는 것과는 별개로, 모드 구성기(705)는 수신된 피드백을 기반으로 애플리케이션 프로파일을 변형시킬 수 있다. 도 8에 도시된 바와 같이, 모드 구성기(705)는 애플리케이션 프로파일(405), 감시된 매개 변수(605), 및/또는 성능 예측(630)을 수신할 수 있다. 이러한 정보를 사용하여 모드 구성기(705)는 변형된 애플리케이션 프로파일(805)을 생성할 수 있다. 변형된 애플리케이션 프로파일(805)은 도 3의 모드 구성 모듈(325)로 전송되어 더 오래된 애플리케이션 프로파일(405)을 교체할 수 있다.
도 9a 및 도 9b는 본 발명의 실시 예에 따른 도 3의 사용자 공간 장치 드라이버(130)가 도 1의 애플리케이션(125)으로부터의 도 5a의 I/O 커맨드(555)를 처리하는 예시적인 절차의 순서도이다. 도 9a를 참조하면, 블록(905)에서, 도 3의 모드 구성 모듈(320)은 도 1의 애플리케이션(125)으로부터 도 4의 애플리케이션 프로파일(405)을 수신할 수 있다. 블록(910)에서, 도 3의 모드 구성 모듈(320)은 도 4의 애플리케이션 프로파일(405)을 도 4의 애플리케이션 프로파일 저장소(425)에 저장할 수 있다. 블록들(905, 910)은 점선(915)으로 도시된 바와 같이 필요에 따라 반복될 수 있다. 이러한 반복은 도 1의 애플리케이션(125)뿐만 아니라 다른 애플리케이션들로부터 추가적인 애플리케이션 프로파일들을 수신할 수 있게 한다. 블록(920)에서, 도 3의 애플리케이션 인식 모듈(325)은 도 1의 애플리케이션(125)으로부터 도 5a의 I/O 커맨드(555)를 수신할 수 있다. 블록(925)에서, 도 3의 애플리케이션 인식 모듈(325)은 도 1의 저장 장치(120)의 조건을 결정할 수 있다.
블록(930)(도 9b)에서, 도 3의 애플리케이션 인식 모듈(325)은 도 5a의 I/O 커맨드(555)를 커맨드 큐들 중 하나로 스케줄링할 수 있다. 이러한 스케줄링은 도 4의 애플리케이션 프로파일(405) 및 도 5a의 저장 장치 조건(565) 모두를 고려할 수 있다. 블록(935)에서, 도 3의 스케줄러(335)는 도 5a의 I/O 커맨드(555)를 커맨드 큐로부터 도 1의 저장 장치(120)로 전송할 시기를 스케줄링할 수 있다. 블록(940)에서, 스케줄된 시간에 도달했을 경우, 도 3의 애플리케이션 인식 모듈(325)은 도 5a의 I/O 커맨드(555)를 도 1의 저장 장치(120)로 전송할 수 있다. 블록(945)에서, 도 3의 동적 피드백 모듈(330)은 도 6의 감시된 매개 변수(605)와 같은 피드백 정보를 도 1의 애플리케이션(125)으로 제공할 수 있다. 마지막으로, 블록(950)에서, 도 3의 동적 피드백 모듈(330)은 도 6의 성능 예측(630)을 통해 도 1의 애플리케이션(125)으로 변화(change)를 제안할 수 있다.
도 10은 본 발명의 실시 예에 따라 본 발명의 실시 예에 따라, 도 3의 사용자 공간 장치 드라이버(130)가 도 5a의 I/O 커맨드(555)를 스케줄링하는 예시적인 절차의 순서도를 보여준다. 도 10을 참조하면, 블록(1005)에서, 도 3의 애플리케이션 인식 모듈(325)은 도 4의 전환 매개 변수(415)가 만족될 경우(즉, 도 4의 전환 매개 변수(415)에 의해 명시된 조건이 만족될 경우) 사용할 커맨드 큐를 식별할 수 있다. 블록(1010)에서, 도 3의 애플리케이션 인식 모듈(325)은 도 4의 전환 매개 변수(415)가 만족되지 않는 경우(즉, 도 4의 전환 매개 변수(415)에 의해 명시된 조건이 만족되지 않는 경우) 사용할 커맨드 큐를 인식할 수 있다. 블록(1015)에서, 도 3의 애플리케이션 인식 모듈(325)은 도 5a의 저장 장치 조건(565) 및 도 4의 전환 매개 변수(415)를 비교하여, 도 4의 전환 매개 변수(415)가 만족되는지 여부를 판별할 수 있다. 도 4의 전환 매개 변수(415)가 만족하는 경우, 블록(1020)에서, 제1 커맨드 큐가 선택되고, 그렇지 않은 경우, 블록(1025)에서, 제2 커맨드 큐가 선택된다.
도 10은 단지 두 개의 커맨드 큐들 상에서 선택을 개시하고 있으나, 도 10의 순서도는 임의의 개수의 커맨드 큐들로부터 선택되도록 일반화될 수 있다. 예를 들어, 블록들(1005, 1010)과 유사한 추가적인 블록들이 다른 커맨드 큐들을 식별하기 위하여 포함될 수 있고, 블록(1015)은 도 4의 복수의 전환 매개 변수들(415)을 고려하여 모든 가능한 커맨드 큐들을 커버하도록 일반화될 수 있다.
도 11은 본 발명의 실시 예에 따른 도 1의 애플리케이션(125)이 도 3의 사용자 공간 장치 드라이버(130)와 교류하는 예시적인 절차의 순서도를 보여준다. 도 11을 참조하면, 블록(1105)에서, 도 7의 모드 구성기(705)는 도 4의 애플리케이션 프로파일(415)을 생성할 수 있다. 블록(1110)에서, 도 1의 애플리케이션(125)은 도 4의 애플리케이션 프로파일(415)을 도 3의 모드 구성 모듈(320)로 전송할 수 있다. 블록들(1105, 1110)은 점선(1115)에 도시된 바와 같이, 필요에 따라 반복될 수 있다. 이러한 반복은 도 1의 애플리케이션(125)이 추가적인 애플리케이션 프로파일을 도 3의 모드 구성 모듈(325)로 전송할 수 있도록 한다.
블록(1120)에서, 도 1의 애플리케이션(125)은 도 5a의 I/O 커맨드(555)를 생성할 수 있다. 블록(1125)에서, 도 1의 애플리케이션(125)은 도 5a의 I/O 커맨드(555)를 도 3의 애플리케이션 인식 모듈(325)로 전송할 수 있다. 블록(1130)에서, 도 1의 애플리케이션(125)은 도 5a의 I/O 커맨드(555)에 응답하는 도 1의 저장 장치(120)로부터 데이터를 수신할 수 있다.
블록(1135)에서, 도 7의 피드백 수신기(715)는 도 6의 감시된 매개 변수(605) 및/또는 도 6의 성능 예측(630)과 같은 피드백을 도 3의 동적 피드백 모듈(330)로부터 수신할 수 있다. 블록(1140)에서, 도 7의 모드 구성기(705)는 수신된 피드백을 기반으로 도 4의 애플리케이션 프로파일(405)을 변형하여 도 8의 변형된 애플리케이션 프로파일(805)을 생성할 수 있다. 블록(1145)에서, 도 1의 애플리케이션(125)은 도 8의 변형된 애플리케이션 프로파일(805)을 도 3의 모드 구성 모듈(320)로 전송할 수 있다.
도 9a 내지 도 11에서, 본 발명의 일부 실시 예들이 도시된다. 그러나, 당업자는 블록들의 순서를 변경하거나, 블록들을 생략하거나, 또는 도시되지 않은 연결들을 추가함으로써, 본 발명의 다른 실시 예들이 가능함을 인지할 것이다. 순서도의 다양한 변형들 전부는 설명되든 되지 않든, 본 발명의 실시 예들로써 간주된다.
이하의 설명은 본 발명의 특정한 사상들이 구현될 수 있는 기계들 또는 적절한 기계(machine)의 일반적인 설명을 제공하도록 의도된다. 기계 또는 기계들은 적어도 일부에서, 키보드, 마우스 등과 같은 일반적인 입력 장치로부터의 입력뿐만 아니라, 다른 기계로부터 수신된 명령어, 가상 현실 환경(virtual reality environment), 생체 피드백, 또는 다른 입력 신호들에 의해 제어될 수 있다. 본문에서 사용된 바와 같이, "기계(machine)"의 용어는 단일 기계, 가상 머신, 또는 기계들, 가상 머신들 또는 함께 작동하는 장치들이 통신적으로 연결된 시스템을 넓게 아우르는 것으로 의도된다. 예시적인 기계들은 퍼스널 컴퓨터, 워크스테이션, 서버, 휴대용 컴퓨터, 소형 컴퓨터, 전화기, 태블릿 등과 같은 컴퓨팅 장치들뿐만 아니라, 대중 교통, 예를 들어, 자동차, 기차, 택시 등과 같은 운송 장치들을 포함한다.
기계 또는 기계들은 프로그램 가능하거나 또는 프로그램 불가능한 로직 장치들 또는 어레이, ASIC(Application Specific Integrated Circuit), 내장된 컴퓨터, 스마트 카드 등과 같은 내장된 컨트롤러들을 포함할 수 있다. 기계 또는 기계들은 네트워크 인터페이스, 모뎀, 또는 다른 통신 연결 등과 같이 하나 또는 그 이상의 원격 장치들과 하나 또는 그 이상의 연결들을 활용할 수 있다. 장치들은 인트라넷, 인터넷, LAN(Local Area Network), WAN(Wide Area Network) 등과 같은 물리적 또는 논리적 네트워크 방식으로 연결될 수 있다. 당업자는 네트워크 통신이 무선 주파수(RF; Radio Frequency), 위성, 마이크로웨이브, IEEE(Institute of Electrical and Electronics Engineers) 802.11, 블루투스, 광, 적외선, 케이블, 레이저 등과 같은 다양한 유선 또는 무선 단파장 또는 장파장 캐리어들 및 프로토콜을 활용할 수 있음을 인지할 것이다.
본 발명의 실시 예들은 기계들에 의해 액세스될 때 기계들에 작업들을 수행하거나 또는 요약 데이터 타입들 또는 저레벨 하드웨어 구성들을 정의하도록 하는 기능들, 절차들, 데이터 구조들, 애플리케이션 프로그램들을 포함하는 연관된 데이터를 참조하거나 또는 관련하여 설명될 수 있다. 연관된 데이터는 휘발성 또는 불휘발성 메모리(예를 들어, RAM, ROM)에 저장될 수 있거나 또는 하드 드라이브, 플로피 디스크, 광 스토리지, 테이프, 플래시 메모리, 메모리 스틱, 디지틸 비디오 디스크, 생체 스토리지 등을 포함하는 연관된 스토리지 매체 및 다른 저장 장치들에 저장될 수 있다. 연관된 데이터는 물리적 또는 논리적 네트워크를 포함하는 전송 환경상에서 패킷, 직렬 데이터, 병렬 데이터, 전파 신호들 등과 같은 형태로 제공될 수 있고, 압축되거나 또는 암호화된 형식으로 사용될 수 있다. 연관된 데이터는 분산된 환경에서 사용될 수 있고, 논리적으로 또는 원격으로 장치 액세스를 위하여 저장될 수 있다.
본 발명의 실시 예들은 하나 또는 그 이상의 프로세서들에 의해 실행될 수 있는 명령어들을 포함하는 유형의 비일시적인 기계 판독 가능한 매체(tangible, non-transitory machine-readable medium)를 포함할 수 있다. 명령어들은 본문에 기재된 바와 같은 본 발명의 구성 요소들을 수행하기 위한 명령어들을 포함할 수 있다.
실시 예들을 참조하여 본 발명의 이론들이 설명되었으나, 실시 예들은 본 발명의 기술적 사상으로부터의 벗어남 없이 변형될 수 있고, 다른 적절한 방식과 조합될 수 있음은 잘 이해될 것이다. 그리고, 상세한 설명이 특정 실시 예들을 집중되었으나, 다른 구성들이 고려된다. 특히, 본문에서 "본 발명의 실시 예에 따르면"과 같은 표현들이 사용되었으나, 이러한 표현들은 일반적으로, 참조 실시 예의 가능성을 의미하며, 본 발명이 특정 실시 예 구성들에 한정됨을 의미하지 않는다. 본문에 기재된 바와 같이, 이러한 용어들은 다른 실시 예들과 조합될 수 있는 동일한 또는 다른 실시 예들을 참조할 수 있다.
상술된 실시 예들은 본 발명을 한정하는 것은 아니다. 비록 일부 실시 예들이 설명되었으나, 당업자는 본문의 이점들 및 새로운 특징으로부터의 벗어남 없이 본 발명의 가능한 다양한 변형을 용이하게 수행할 수 있다. 따라서, 이러한 변형들은 특허청구범위에 정의된 본 발명의 사상 내에 포함되도록 의도될 수 있다.
본 발명의 실시 예들은 이하의 스테이트먼트들로 제한 없이 확장될 수 있다.
스테이트먼트 1. 본 발명의 실시 예는 시스템을 포함한다. 시스템은 컴퓨터(105); 프로세서(110); 메모리(115); 저장 장치(120); 메모리(115)에 저장되고, 프로세서(110)에 의해 실행될 수 있는 애플리케이션들(125, 305, 310, 315); 및 장치 드라이버(130)를 포함한다. 장치 드라이버(130)는 애플리케이션 프로파일(405, 430, 435)을 수신하는 모드 구성 모듈(320); 및 애플리케이션(125, 305, 310, 315)으로부터 입출력(I/O) 커맨드(555)를 수신하고, 애플리케이션 프로파일(405, 430, 435)을 사용하여 I/O 커맨드(555)를 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나로 할당하는 애플리케이션 인식 모듈(325)을 포함한다. 저장 장치(120)는 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나로부터 I/O 커맨드(555)를 수신하도록 작동한다.
스테이트먼트 2. 본 발명의 실시 예는 스테이트먼트 1의 시스템을 포함하고, 저장 장치(120)는 SSD를 포함한다.
스테이트먼트 3. 본 발명의 실시 예는 스테이트먼트 1의 시스템을 포함하고, 애플리케이션 프로파일(405, 430, 435)은 감시 파라미터(410) 및 전환 파라미터(415)를 포함하고, 애플리케이션 인식 모듈(325)은, 감시 매개 변수(410)에 의해 명시된 저장 장치(120)의 조건(565) 및 전환 매개 변수(415)를 기반으로, I/O 커맨드(555)를 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나로 할당하도록 작동한다.
스테이트먼트 4. 본 발명의 실시 예는 스테이트먼트 4의 시스템을 포함하고, 감시 파라미터(410)는 레이턴시, 초당 I/O 명령어들(IOPS; I/O instructions Per Second), 및 우선 순위(priority)를 포함하고, 전환 매개 변수(415)는 감시 매개 변수(410)에 대한 임계치(415)를 포함한다.
스테이트먼트 5. 본 발명의 실시 예는 스테이트먼트 4의 시스템을 포함하고, 애플리케이션 인식 모듈(325)은 저장 장치(120)의 적어도 하나의 조건(565)이 감시 매개 변수(410)에 대한 임계치(415)를 초과하는지를 기반으로 애플리케이션 프로파일(405, 430, 435)을 사용하여 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나로 I/O 커맨드(555)를 할당하도록 작동한다.
스테이트먼트 6. 본 발명의 실시 예는 스테이트먼트 1의 시스템을 포함하고, 모드 구성 모듈(320)은 애플리케이션(125, 305, 310, 315)에 대한 복수의 애플리케이션 프로파일들(405, 430, 435)을 수신하도록 작동하고, 애플리케이션 인식 모듈(325)은 애플리케이션(125, 305, 310, 315)으로부터 애플리케이션 프로파일들 중 하나의 선택(560) 및 I/O 커맨드를 수신하도록 작동한다.
스테이트먼트 7. 본 발명의 실시 예는 스테이트먼트 1의 시스템을 포함하고, 애플리케이션 인식 모듈(325)은 애플리케이션(125, 305, 310, 315)으로부터 우선 순위(420) 및 I/O 커맨드(555)를 수신하도록 작동한다.
스테이트먼트 8. 본 발명의 실시 예는 스테이트먼트 7의 시스템을 포함하고, 애플리케이션 모듈(325)은 우선 순위(420)를 사용하여 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나로 I/O 커맨드(555)를 할당하도록 작동한다.
스테이트먼트 9. 본 발명의 실시 예는 스테이트먼트 1의 시스템을 포함하고, 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550)은 적어도 하나의 커맨드 폴링 큐(510, 515, 520, 525) 및 적어도 하나의 인터럽트 큐(535, 540, 545, 550)를 포함한다.
스테이트먼트 10. 본 발명의 실시 예는 스테이트먼트 9의 시스템을 포함하고, 애플리케이션 모듈(325)은 애플리케이션 프로파일(405, 430, 435)을 사용하여 동일한 우선 순위의 커맨드 인터럽트 큐(535, 540, 545, 550) 및 커맨드 폴링 큐(510, 515, 520, 525) 중 하나로 I/O 커맨드를 할당하도록 작동한다.
스테이트먼트 11. 본 발명의 실시 예는 스테이트먼트 1의 시스템을 포함하고, 애플리케이션 인식 모듈(325)은 애플리케이션 프로파일(405, 430, 435)을 사용하여 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550)에서 제1 및 제2 커맨드 큐들 중 선택된 하나로 I/O 커맨드(555)를 할당하도록 작동한다. 제1 커맨드 큐는 제1 우선 순위를 포함하고, 제2 커맨드 큐는 제1 우선 순위와 다른 제2 우선 순위를 포함한다.
스테이트먼트 12. 본 발명의 실시 예는 스테이트먼트 9의 시스템을 포함하고, 장치 드라이버(130)는 감시 매개 변수(410)에 대하여 피드백(605, 630, 610, 635, 615, 640, 620, 645)을 애플리케이션(125, 305, 310, 315)으로 제공하는 동적 피드백 모듈(330)을 더 포함한다.
스테이트먼트 13. 본 발명의 실시 예는 스테이트먼트 12의 시스템을 포함하고, 피드백(605, 630, 610, 635, 615, 640, 620, 645)은 성능 향을 위하여, 전환 매개 변수(415) 및 감시 매개 변수(410) 중 적어도 하나의 변화에 대한 애플리케이션(125, 305, 310, 315)으로의 제안(630, 635, 640, 645)을 포함한다.
스테이트먼트 14. 본 발명의 실시 예는 스테이트먼트 13의 시스템을 포함하고, 변화(change)는 I/O 혼잡도, I/O 발행 모델, 및 I/O 완료 모델을 포함하는 세트로부터 얻어진다.
스테이트먼트 15. 본 발명의 실시 예는 스테이트먼트 9의 시스템을 포함하고, 피드백(605, 630, 610, 635, 615, 640, 620, 645)은 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나에 대한 애플리케이션(125, 305, 310, 315)으로의 피드백(605, 630, 610, 635, 615, 640, 620, 645)을 더 포함한다.
스테이트먼트 16. 본 발명의 실시 예는 스테이트먼트 15의 시스템을 포함하고, 피드백(605, 630, 610, 635, 615, 640, 620, 645)은 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나의 최소 레이턴시, 최대 레이턴시, 최소 초당 I/O 명령어들(IOPS), 및 최대 IOPS를 포함한다.
스테이트먼트 17. 본 발명의 실시 예는 스테이트먼트 1의 시스템을 포함하고, 장치 드라이버(130)는 저장 장치(120)로 I/O 커맨드(555)의 전달을 스케줄링하는 스케줄러(335)를 포함한다.
스테이트먼트 18. 본 발명의 실시 예는 스테이트먼트 17의 시스템을 포함하고, 스케줄러(335)는 라운드 로빈 스케줄러(335)를 포함한다.
스테이트먼트 19. 본 발명의 실시 예는 스테이트먼트 17의 시스템을 포함하고, 스케줄러(335)는 우선 순위 스케줄링 알고리즘에 기반되는 우선 순위 스케줄러(335)를 포함한다. 우선 순위 스케줄링 알고리즘은, 주어진 우선 순위의 큐(510, 515, 520, 525, 535, 540, 545, 550)에 대하여, 주어진 우선 순위보다 낮은 우선 순위의 큐들(510, 515, 520, 525, 535, 540, 545, 550)보다 주어진 우선 순위의 큐(510, 515, 520, 525, 535, 540, 545, 550)에 대하여 자주 I/O 커맨드들(555)을 선택한다.
스테이트먼트 20. 본 발명의 실시 예는 장치 드라이버(130)를 포함한다. 장치 드라이버(130)는 애플리케이션 프로파일(405, 430, 435)를 수신하는 모드 구성 모듈(320); 및 애플리케이션(125, 305, 310, 315)으로부터 입출력(I/O) 커맨드(555)를 수신하고, 애플리케이션 프로파일(405, 430, 435)을 사용하여 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나로 I/O 커맨드(555)를 할당하는 애플리케이션 인식 모듈(325)을 포함한다. 저장 장치(120)는 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나로부터 I/O 커맨드(555)를 수신하도록 작동한다.
스테이트먼트 21. 본 발명의 실시 예는 스테이트먼트 20에 따른 장치 드라이버를 포함하고, 애플리케이션 프로파일(405, 430, 435)은 감시 매개 변수(410) 및 전환 매개 변수(415)를 포함하고, 애플리케이션 인식 모듈(325)은 감시 매개 변수(410)에 의해 명시된 저장 장치(120)의 조건(565) 및 전환 매개 변수(415)를 기반으로 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나로 I/O 커맨드(555)를 할당하도록 작동한다.
스테이트먼트 22. 본 발명의 실시 예는 스테이트먼트 21에 따른 장치 드라이버를 포함하고, 감시 매개 변수(410)는 레이턴시, IOPS, 및 우선 순위를 포함하는 세트로부터 얻어진다. 전환 매개 변수(415)는 감시 매개 변수(410)에 대한 임계치(415)를 포함한다.
스테이트먼트 23. 본 발명의 실시 예는 스테이트먼트 22에 따른 장치 드라이버를 포함하고, 애플리케이션 인식 모듈(325)은 저장 장치(120)의 적어도 하나의 조건(565)이 감시 매개 변수(410)에 대한 임계치(415)를 초과하였는지 여부를 기반으로 애플리케이션 프로파일(405, 430, 435)을 사용하여 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나로 I/O 커맨드(555)를 할당하도록 작동한다.
스테이트먼트 24. 본 발명의 실시 예는 스테이트먼트 20에 따른 장치 드라이버를 포함하고, 모드 구성 모듈(320)은 애플리케이션(125, 305, 310, 315)에 대한 복수의 애플리케이션 프로파일들(405, 430, 435)을 수신하도록 작동한다. 애플리케이션 인식 모듈(325)은 애플리케이션(125, 305, 310, 315)으로부터 애플리케이션 프로파일들(405, 430, 435) 중 하나의 선택(560) 및 I/O 커맨드(555)를 수신하도록 작동한다.
스테이트먼트 25. 본 발명의 실시 예는 스테이트먼트 20에 따른 장치 드라이버를 포함하고, 애플리케이션 인식 모듈(325)은 애플리케이션(125, 305, 310, 315)으로부터 우선 순위(420) 및 I/O 커맨드(555)를 수신하도록 작동한다.
스테이트먼트 23. 본 발명의 실시 예는 스테이트먼트 25에 따른 장치 드라이버를 포함하고, 애플리케이션 인식 모듈(325)은 우선 순위(420)를 사용하여 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나로 I/O 커맨드(555)를 할당하도록 작동한다.
스테이트먼트 27. 본 발명의 실시 예는 스테이트먼트 20에 따른 장치 드라이버를 포함하고, 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550)은 적어도 하나의 커맨드 폴링 큐(510, 515, 520, 525) 및 적어도 하나의 커맨드 인터럽트 큐(535, 540, 545, 550)를 포함한다.
스테이트먼트 28. 본 발명의 실시 예는 스테이트먼트 27에 따른 장치 드라이버를 포함하고, 애플리케이션 인식 모듈(325)은 애플리케이션 프로파일(405, 430, 435)을 사용하여 동일한 우선 순위의 커맨드 인터럽트 큐(535, 540, 545, 550) 및 커맨드 폴링 큐(510, 515, 520, 525) 중 하나로 I/O 커맨드를 할당하도록 동작한다.
스테이트먼트 29. 본 발명의 실시 예는 스테이트먼트 20에 따른 장치 드라이버를 포함하고, 애플리케이션 프로파일(405, 430, 435)을 사용하여 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550)에서 제1 및 제2 커맨드 큐들 중 선택된 하나로 I/O 커맨드(555)를 할당하도록 작동한다. 제1 커맨드 큐는 제1 우선 순위를 포함하고, 제2 커맨드 큐는 제1 우선 순위와 다른 제2 우선 순위를 포함한다.
스테이트먼트 30. 본 발명의 실시 예는 스테이트먼트 20에 따른 장치 드라이버를 포함하고, 장치 드라이버(130)는 감시 매개 변수(410)에 대하여 애플리케이션(125, 305, 310, 315)으로 피드백(605, 630, 610, 635, 615, 640, 620, 645)을 제공하는 동적 피드백 모듈(330)을 더 포함한다.
스테이트먼트 31. 본 발명의 실시 예는 스테이트먼트 30에 따른 장치 드라이버를 포함하고, 피드백(605, 630, 610, 635, 615, 640, 620, 645)은 성능 향상을 위하여, 전환 매개 변수(415) 및 감시 매개 변수(410) 중 적어도 하나의 변화(change)에 대하여 애플리케이션(125, 305, 310, 315)으로의 제안(630, 635, 640, 645)을 포함한다.
스테이트먼트 32. 본 발명의 실시 예는 스테이트먼트 31에 따른 장치 드라이버를 포함하고, 변화(change)는 I/O 혼잡도, I/O 발행 모델, 및 I/O 완료 모델을 포함하는 세트로부터 얻어진다.
스테이트먼트 33. 본 발명의 실시 예는 스테이트먼트 30에 따른 장치 드라이버를 포함하고, 피드백(605, 630, 610, 635, 615, 640, 620, 645)은 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나에 대한 애플리케이션(125, 305, 310, 315)으로의 피드백(605, 630, 610, 635, 615, 640, 620, 645)을 더 포함한다.
스테이트먼트 34. 본 발명의 실시 예는 스테이트먼트 15의 시스템을 포함하고, 피드백(605, 630, 610, 635, 615, 640, 620, 645)은 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나의 최소 레이턴시, 최대 레이턴시, 최소 초당 I/O 명령어들(IOPS), 및 최대 IOPS를 포함한다.
스테이트먼트 35. 본 발명의 실시 예는 스테이트먼트 20에 따른 장치 드라이버를 포함하고, 장치 드라이버(130)는 저장 장치(120)로 I/O 커맨드(555)의 전달을 스케줄링하는 스케줄러(335)를 포함한다.
스테이트먼트 36. 본 발명의 실시 예는 스테이트먼트 35에 따른 장치 드라이버를 포함하고, 스케줄러(335)는 라운드 로빈 스케줄러(335)를 포함한다.
스테이트먼트 37. 본 발명의 실시 예는 스테이트먼트 35에 따른 장치 드라이버를 포함하고, 스케줄러(335)는 우선 순위 스케줄링 알고리즘에 기반되는 우선 순위 스케줄러(335)를 포함한다. 우선 순위 스케줄링 알고리즘은, 주어진 우선 순위의 큐(510, 515, 520, 525, 535, 540, 545, 550)에 대하여, 주어진 우선 순위보다 낮은 우선 순위의 큐들(510, 515, 520, 525, 535, 540, 545, 550)보다 주어진 우선 순위의 큐(510, 515, 520, 525, 535, 540, 545, 550)에 대하여 자주 I/O 커맨드들(555)을 선택한다.
스테이트먼트 38. 본 발명의 실시 예는 애플리케이션 프로파일(405, 430, 435)을 모드 구성 모듈(320)로 전송하는 모드 구성기(705); 및 애플리케이션 프로파일(405, 430, 435) 및 입출력(I/O) 커맨드(555)를 애플리케이션 인식 모듈(325)로 전송하는 커맨드 발행기(710)를 포함하는 애플리케이션(125, 305, 310, 315)을 포함한다.
스테이트먼트 39. 본 발명의 실시 예는 스테이트먼트 38에 따른 애플리케이션(125, 305, 310, 315)를 포함하고, 모드 구성기(705)는 모두 구성 모듈(320)로 복수의 애플리케이션 프로파일들(405, 430, 435)을 전송하도록 작동한다.
스테이트먼트 40. 본 발명의 실시 예는 스테이트먼트 38에 따른 애플리케이션(125, 305, 310, 315)를 포함하고, 애플리케이션(125, 305, 310, 315)은 동적 피드백 모듈(330)로부터 피드백(605, 630, 610, 635, 615, 640, 620, 645)을 수신하는 피드백 수신기(715)를 더 포함한다.
스테이트먼트 41. 본 발명의 실시 예는 스테이트먼트 40에 따른 애플리케이션(125, 305, 310, 315)를 포함하고, 모드 구성기(705)는 피드백(605, 630, 610, 635, 615, 640, 620, 645)에 응답하여 모드 구성 모듈(320)로 변형된 애플리케이션 프로파일(805)을 전송하도록 작동한다.
스테이트먼트 42. 본 발명의 실시 예는 방법(method)를 포함하고, 방법은 저장 장치(120)에서, 애플리케이션(125, 305, 310, 315)으로부터 감시 매개 변수(410) 및 전환 매개 변수(415)를 포함하는 애플리케이션 프로파일(405, 430, 435)을 수신하는 단계(905); 저장 장치(120), 애플리케이션 프로파일(405, 430, 435)을 저장하는 단계(910); 저장 장치(120)에서, 애플리케이션 프로파일(405, 430, 435)을 포함하는 입출력(I/O) 커맨드(555)를 수신하는 단계(920); 저장 장치(120)가 I/O 커맨드(555)를 수신하는 시점에서, 감시 매개 변수(410)에 기반된 저장 장치(120)의 적어도 하나의 조건(565)을 결정하는 단계(925); 및 전환 매개 변수(415) 및 저장 장치(120)의 적어도 하나의 조건(565)에 응답하여 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나에 I/O 커맨드(555)를 스케줄링하는 단계(930)를 포함한다.
스테이트먼트 43. 본 발명의 실시 예는 스테이트먼트 42에 따른 방법을 포함하고, 저장 장치(120)에서 애플리케이션(125, 305, 310, 315)으로부터 애플리케이션 프로파일(405, 430, 435)을 수신하는 단계(905)는 솔리드 스테이트 드라이브(SSD)에서, 애플리케이션(125, 305, 310, 315)으로부터 애플리케이션 프로파일(405, 430, 435)을 수신하는 단계(905)를 포함한다. 저장 장치(120)에서 애플리케이션 프로파일(405, 430, 435)을 저장하는 단계(910)는 SSD에 애플리케이션 프로파일(405, 430, 435)을 저장하는 단계(910)를 포함한다. 저장 장치(120)에서 I/O 커맨드(555)를 수신하는 단계(920)는 SSD에서, I/O 커맨드(555)를 수신하는 단계(920)를 포함한다. 저장 장치(120)가 I/O 커맨드(555)를 수신하는 시점에서, 감시 매개 변수(410)에 기반된 저장 장치(120)의 적어도 하나의 조건(565)을 결정하는 단계(925)는 SSD가 I/O 커맨드(555)를 수신하는 시점에서, 감시 매개 변수(410)에 기반된 SSD의 적어도 하나의 조건(565)을 결정하는 단계(925)를 포함한다.
스테이트먼트 44. 본 발명의 실시 예는 스테이트먼트 42에 따른 방법을 포함하고, 감시 매개 변수(410)는 레이턴시, 초당 I/O 명령어들(IOPS), 및 우선 순위를 포함하는 세트로부터 얻어지고, 전환 매개 변수(415)는 감시 매개 변수(410)에 대한 임계치(415)를 포함한다.
스테이트먼트 45. 본 발명의 실시 예는 스테이트먼트 44에 따른 방법을 포함하고, 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나에 I/O 커맨드(555)를 스케줄링하는 단계(930)는 저장 장치(120)의 적어도 하나의 조건(565)이 감시 매개 변수(410)에 대한 임계치(415)를 초과했는지 여부를 기반으로 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나를 선택하는 단계(1020, 1025)를 포함한다.
스테이트먼트 46. 본 발명의 실시 예는 스테이트먼트 42에 따른 방법을 포함하고, 저장 장치(120)에서, 애플리케이션 프로파일(405, 430, 435)을 수신하는 단계(905)는 저장 장치(120)에서, 애플리케이션(125, 305, 310, 315)으로부터 복수의 애플리케이션 프로파일들(405, 430, 435)을 수신하는 단계(905, 915)를 포함하고, 저장 장치(120)에서, I/O 커맨드(555)를 수신하는 단계(920)는 저장 장치(120)에서, 복수의 애플리케이션 프로파이들(405, 430, 435) 중 하나를 포함하는 I/O 커맨드(555)를 수신하는 단계(920)를 포함한다.
스테이트먼트 47. 본 발명의 실시 예는 스테이트먼트 42에 따른 방법을 포함하고, 애플리케이션 프로파일(405, 430, 435)은 우선 순위를 포함한다.
스테이트먼트 48. 본 발명의 실시 예는 스테이트먼트 47에 따른 방법을 포함하고, 전환 매개 변수(415) 및 저장 장치(120)의 적어도 하나의 조건(565)에 응답하여 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나에 I/O 커맨드(555)를 스케줄링하는 단계(930)는 우선 순위를 사용하여 커맨드 인터럽트 큐(535, 540, 545, 550) 및 커맨드 폴링 큐(510, 515, 52, 525) 중 하나에 I/O 커맨드(555)를 스케줄링하는 단계(930)를 포함한다.
스테이트먼트 49. 본 발명의 실시 예는 스테이트먼트 42에 따른 방법을 포함하고, 전환 매개 변수(415) 및 저장 장치(120)의 적어도 하나의 조건(565)에 응답하여 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나에 I/O 커맨드(555)를 스케줄링하는 단계(930)는 전환 매개 변수(415) 및 저장 장치(120)의 적어도 하나의 조건(565)에 응답하여 커맨드 인터럽트 큐(535, 540, 545, 550) 및 커맨드 폴링 큐(510, 515, 52, 525) 중 하나에 I/O 커맨드(555)를 스케줄링하는 단계(930)를 포함한다.
스테이트먼트 50. 본 발명의 실시 예는 스테이트먼트 49에 따른 방법을 포함하고, 감시 매개 변수(410)는 레이턴시, 초당 I/O 명령어들(IOPS), 및 우선 순위를 포함하는 세트로부터 얻어지고, 전환 매개 변수(415)는 감시 매개 변수(410)에 대한 임계치(415)를 포함한다. 커맨드 인터럽트 큐(535, 540, 545, 550) 및 커맨드 폴링 큐(510, 515, 52, 525) 중 하나에 I/O 커맨드(555)를 스케줄링하는 단계(930)는 적어도 하나의 커맨드 폴링 큐(510, 515, 52, 525) 중 우선 순위를 포함하는 제1 커맨드 큐를 식별하는 단계; 적어도 하나의 커맨드 인터럽트 큐(535, 540, 545, 550) 중 우선 순위를 포함하는 제2 커맨드 큐를 식별하는 단계; 및 저장 장치(120)의 적어도 하나의 조건(565)이 감시 매개 변수(410)에 대한 임계치(415)를 초과하는지 여부를 기반으로 제1 및 제2 커맨드 큐들 중 하나를 선택하는 단계(1015, 1020, 1025)를 포함한다.
스테이트먼트 51. 본 발명의 실시 예는 스테이트먼트 42에 따른 방법을 포함하고, 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나에 I/O 커맨드(555)를 스케줄링하는 단계(930)는 적어도 하나의 커맨드 폴링 큐(510, 515, 52, 525) 중 제1 우선 순위를 포함하는 제1 커맨드 큐를 식별하는 단계; 적어도 하나의 커맨드 인터럽트 큐(535, 540, 545, 550) 중 제1 우선 순위와 다른 제2 우선 순위를 포함하는 제2 커맨드 큐를 식별하는 단계; 및 저장 장치(120)의 적어도 하나의 조건(565)이 감시 매개 변수(410)에 대한 임계치(415)를 초과하는지 여부를 기반으로 제1 및 제2 커맨드 큐들 중 하나를 선택하는 단계(1015, 1020, 1025)를 포함한다.
스테이트먼트 52. 본 발명의 실시 예는 스테이트먼트 42에 따른 방법을 포함하고, 감시 매개 변수(410)에 대하여 애플리케이션(125, 305, 310, 315)으로 피드백(605, 630, 610, 635, 615, 640, 620, 645)을 제공하는 단계(945)를 더 포함한다.
스테이트먼트 53. 본 발명의 실시 예는 스테이트먼트 52에 따른 방법을 포함하고, 감시 매개 변수(410)에 대하여 애플리케이션(125, 305, 310, 315)으로 피드백(605, 630, 610, 635, 615, 640, 620, 645)을 제공하는 단계(945)는 성능 향상을 위하여 전환 매개 변수(415) 및 감시 매개 변수(410) 중 적어도 하나의 변화(change)를 애플리케이션(125, 305, 310, 315)으로 제안하는 단계(950)를 포함한다.
스테이트먼트 54. 본 발명의 실시 예는 스테이트먼트 53에 따른 방법을 포함하고, 성능 향상을 위하여 전환 매개 변수(415) 및 감시 매개 변수(410) 중 적어도 하나의 변화(change)를 애플리케이션(125, 305, 310, 315)으로 제안하는 단계(950)는 I/O 혼잡도, I/O 발행 모델, 및 I/O 완료 모델 중 하나의 향상을 위하여 변화를 애플리케이션(125, 305, 310, 315)으로 제안하는 단계(950)를 포함한다.
스테이트먼트 55. 본 발명의 실시 예는 스테이트먼트 52에 따른 방법을 포함하고, 감시 매개 변수(410)에 대하여 애플리케이션(125, 305, 310, 315)으로 피드백(605, 630, 610, 635, 615, 640, 620, 645)을 제공하는 단계(945)는 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나에 대하여 애플리케이션(125, 305, 310, 315)으로 피드백(605, 630, 610, 635, 615, 640, 620, 645)을 제공하는 단계(945)를 포함한다.
스테이트먼트 56. 본 발명의 실시 예는 스테이트먼트 55에 따른 방법을 포함하고, 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나에 대하여 애플리케이션(125, 305, 310, 315)으로 피드백(605, 630, 610, 635, 615, 640, 620, 645)을 제공하는 단계(945)는 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나의 최소 레이턴시, 최대 레이턴시, 최소 초당 I/O 명령어들(IOPS), 및 최대 IOPS에 대하여 애플리케이션(125, 305, 310, 315)으로 피드백(605, 630, 610, 635, 615, 640, 620, 645)을 제공하는 단계(945)를 포함한다.
스테이트먼트 57. 본 발명의 실시 예는 스테이트먼트 42에 따른 방법을 포함하고, 저장 장치(120)로 I/O 커맨드(555)를 전송하는 단계(940)를 더 포함한다.
스테이트먼트 58. 본 발명의 실시 예는 스테이트먼트 57에 따른 방법을 포함하고, 저장 장치(120)로 I/O 커맨드(555)를 전송하는 단계(940)는 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나로부터 I/O 커맨드(555)를 제거하고, 저장 장치(120)로 I/O 커맨드(555)를 전송하는 시간을 선택하기 위하여 스케줄링 알고리즘을 사용하는 단계(935)를 포함한다.
스테이트먼트 59. 본 발명의 실시 예는 스테이트먼트 58에 따른 방법을 포함하고, 스케줄링 알고리즘을 사용하는 단계(935)는 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나로부터 I/O 커맨드(555)를 제거하고, 저장 장치(120)로 I/O 커맨드(555)를 전송하는 시간을 선택하기 위하여 라운드 로빈 스케줄링 알고리즘(round robin scheduling algorithm)을 사용하는 단계(935)를 포함한다.
스테이트먼트 60. 본 발명의 실시 예는 스테이트먼트 58에 따른 방법을 포함하고, 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나로부터 I/O 커맨드(555)를 제거하고, 저장 장치(120)로 I/O 커맨드(555)를 전송하는 시간을 선택하기 위하여 우선 순위 스케줄링 알고리즘(prioritizing scheduling algorithm)을 사용하는 단계(935)를 포함한다. 우선 순위 스케줄링 알고리즘은 주어진 우선 순위보다 낮은 우선 순위의 커맨드 큐보다, 주어진 우선 순위의 커맨드 큐로부터 좀 더 자주 I/O 커맨드(555)를 선택한다.
스테이트먼트 61. 본 발명의 실시 예는 t방법(method)을 포함하고, 방법은 애플리케이션(125, 305, 310, 315)에 대한 애플리케이션 프로파일(405, 430, 435)을 생성하는 단계(1105); 애플리케이션 프로파일(405, 430, 435)을 모드 구성 모듈(320)로 전송하는 단계(1110); 애플리케이션(125, 305, 310, 315)에 대한 입출력(I/O) 커맨드(555)를 생성하는 단계(1120); 및 애플리케이션 인식 모듈(325)을 통해 저장 장치(120)로 I/O 커맨드(555)를 전송하는 단계(1125)를 더 포함한다.
스테이트먼트 62. 본 발명의 실시 예는 스테이트먼트 61에 따른 방법을 포함하고, 저장 장치(120)로부터 데이터를 수신하는 단계(1130)를 더 포함한다.
스테이트먼트 63. 본 발명의 실시 예는 스테이트먼트 61에 따른 방법을 포함하고, 애플리케이션(125, 305, 310, 315)에 대한 애플리케이션 프로파일(405, 430, 435)을 생성하는 단계(1105)는 감시 매개 변수(410) 및 전환 매개 변수(415)를 포함하는 애플리케이션 프로파일(405, 430, 435)을 생성하는 단계(1105)를 포함한다.
스테이트먼트 64. 본 발명의 실시 예는 스테이트먼트 61에 따른 방법을 포함하고, 애플리케이션(125, 305, 310, 315)에 대한 애플리케이션 프로파일(405, 430, 435)을 생성하는 단계(1105)는 애플리케이션(125, 305, 310, 315)에 대한 복수의 애플리케이션 프로파일들(405, 430, 435)을 생성하는 단계(1105, 1115)를 포함한다.
스테이트먼트 65. 본 발명의 실시 예는 스테이트먼트 61에 따른 방법을 포함하고, 애플리케이션 인식 모듈(325)을 통해 저장 장치(120)로 I/O 커맨드(555)를 전송하는 단계(1125)는 애플리케이션 인식 모듈(325)을 통해 저장 장치(120)로 I/O 커맨드(555) 및 애플리케이션 프로파일(405, 430, 435)을 전송하는 단계(1125)를 포함한다.
스테이트먼트 66. 본 발명의 실시 예는 스테이트먼트 61에 따른 방법을 포함하고, 동적 피드백 모듈(330)로부터 피드백(605, 630, 610, 635, 615, 640, 620, 645)을 수신하는 단계(1135)를 더 포함한다.
스테이트먼트 67. 본 발명의 실시 예는 스테이트먼트 66에 따른 방법을 포함하고, 변형된 애플리케이션 프로파일(805)을 생성하기 위하여 피드백(605, 630, 610, 635, 615, 640, 620, 645)을 기반으로 애플리케이션 프로파일(405, 430, 435)을 변형하는 단계(1140); 및 변형된 애플리케이션 프로파일(805)을 모드 구성 모듈(320)로 전송하는 단계를 더 포함한다.
스테이트먼트 68. 본 발명의 실시 예는 비-일시적인 명령어들을 저장하는 유형의 저장 매체(tangible storage medium)을 포함하는 항목을 포함하고, 비-일시적인 명령어들은 기계(105)에 의해 실행된다. 명령어들은 저장 장치(120)에서, 애플리케이션(125, 305, 310, 315)으로부터 감시 매개 변수(410) 및 전환 매개 변수(415)를 포함하는 애플리케이션 프로파일(405, 430, 435)을 수신하는 단계(905); 저장 장치(120), 애플리케이션 프로파일(405, 430, 435)을 저장하는 단계(910); 저장 장치(120)에서, 애플리케이션 프로파일(405, 430, 435)을 포함하는 입출력(I/O) 커맨드(555)를 수신하는 단계(920); 저장 장치(120)가 I/O 커맨드(555)를 수신하는 시점에서, 감시 매개 변수(410)에 기반된 저장 장치(120)의 적어도 하나의 조건(565)을 결정하는 단계(925); 및 전환 매개 변수(415) 및 저장 장치(120)의 적어도 하나의 조건(565)에 응답하여 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나에 I/O 커맨드(555)를 스케줄링하는 단계(930)를 포함한다.
스테이트먼트 69. 본 발명의 실시 예는 스테이트먼트 68에 따른 항목을 포함하고, 저장 장치(120)에서, 애플리케이션(125, 305, 310, 315)으로부터 애플리케이션 프로파일(405, 430, 435)을 수신하는 단계(905)는 솔리드 스테이트 드라이브(SSD)에서, 애플리케이션(125, 305, 310, 315)으로부터 애플리케이션 프로파일(405, 430, 435)을 수신하는 단계(905)를 포함한다. 저장 장치(120)에서 애플리케이션 프로파일(405, 430, 435)을 저장하는 단계(910)는 SSD에 애플리케이션 프로파일(405, 430, 435)을 저장하는 단계(910)를 포함한다. 저장 장치(120)에서 I/O 커맨드(555)를 수신하는 단계(920)는 SSD에서, I/O 커맨드(555)를 수신하는 단계(920)를 포함한다. 저장 장치(120)가 I/O 커맨드(555)를 수신하는 시점에서, 감시 매개 변수(410)에 기반된 저장 장치(120)의 적어도 하나의 조건(565)을 결정하는 단계(925)는 SSD가 I/O 커맨드(555)를 수신하는 시점에서, 감시 매개 변수(410)에 기반된 SSD의 적어도 하나의 조건(565)을 결정하는 단계(925)를 포함한다.
스테이트먼트 70. 본 발명의 실시 예는 스테이트먼트 68에 따른 항목을 포함하고, 감시 매개 변수(410)는 레이턴시, 초당 I/O 명령어들(IOPS), 및 우선 순위를 포함하는 세트로부터 얻어지고, 전환 매개 변수(415)는 감시 매개 변수(410)에 대한 임계치(415)를 포함한다.
스테이트먼트 69. 본 발명의 실시 예는 스테이트먼트 70에 따른 항목을 포함하고, 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나에 I/O 커맨드(555)를 스케줄링하는 단계(930)는, 저장 장치(120)의 적어도 하나의 조건(565)이 감시 매개 변수(410)에 대한 임계치(415)를 초과했는지 여부를 기반으로 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나에 I/O 커맨드(555)를 스케줄링하는 단계(930)를 포함한다.
스테이트먼트 72. 본 발명의 실시 예는 스테이트먼트 68에 따른 항목을 포함하고, 저장 장치(120)에서, 애플리케이션 프로파일(405, 430, 435)을 수신하는 단계(905)는 저장 장치(120)에서, 애플리케이션(125, 305, 310, 315)으로부터 복수의 애플리케이션 프로파일들(405, 430, 435)을 수신하는 단계(905, 915)를 포함하고, 저장 장치(120)에서, I/O 커맨드(555)를 수신하는 단계(920)는 저장 장치(120)에서, 복수의 애플리케이션 프로파일들(405, 430, 435) 중 하나를 포함하는 I/O 커맨드(555)를 수신하는 단계(920)를 포함한다.
스테이트먼트 73. 본 발명의 실시 예는 스테이트먼트 68에 따른 항목을 포함하고, 저장 장치(120)에서, 애플리케이션 프로파일(405, 430, 435)을 수신하는 단계(905)는 우선 순위를 포함하는 애플리케이션 프로파일(405, 430, 435)을 포함하는 I/O 커맨드(555)를 수신하는 단계(920)를 포함한다.
스테이트먼트 74. 본 발명의 실시 예는 스테이트먼트 73에 따른 항목을 포함하고, 전환 매개 변수(415) 및 저장 장치(120)의 적어도 하나의 조건(565)에 응답하여 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나에 I/O 커맨드(555)를 스케줄링하는 단계(930)는 우선 순위를 사용하여 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나에 I/O 커맨드(555)를 스케줄링하는 단계(930)를 포함한다.
스테이트먼트 75. 본 발명의 실시 예는 스테이트먼트 68에 따른 항목을 포함하고, 전환 매개 변수(415) 및 저장 장치(120)의 적어도 하나의 조건(565)에 응답하여 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나에 I/O 커맨드(555)를 스케줄링하는 단계(930)는 전환 매개 변수(415) 및 저장 장치(120)의 적어도 하나의 조건(565)에 응답하여 커맨드 인터럽트 큐(535, 540, 545, 550) 및 커맨드 폴링 큐(510, 515, 52, 525) 중 하나에 I/O 커맨드(555)를 스케줄링하는 단계(930)를 포함한다.
스테이트먼트 76. 본 발명의 실시 예는 스테이트먼트 75에 따른 항목을 포함하고, 감시 매개 변수(410)는 레이턴시, 초당 I/O 명령어들(IOPS), 및 우선 순위를 포함하는 세트로부터 얻어지고, 전환 매개 변수(415)는 감시 매개 변수(410)에 대한 임계치(415)를 포함한다. 커맨드 인터럽트 큐(535, 540, 545, 550) 및 커맨드 폴링 큐(510, 515, 52, 525) 중 하나에 I/O 커맨드(555)를 스케줄링하는 단계(930)는 적어도 하나의 커맨드 폴링 큐(510, 515, 52, 525) 중 우선 순위를 포함하는 제1 커맨드 큐를 식별하는 단계; 적어도 하나의 커맨드 인터럽트 큐(535, 540, 545, 550) 중 우선 순위를 포함하는 제2 커맨드 큐를 식별하는 단계; 및 저장 장치(120)의 적어도 하나의 조건(565)이 감시 매개 변수(410)에 대한 임계치(415)를 초과하는지 여부를 기반으로 제1 및 제2 커맨드 큐들 중 하나를 선택하는 단계(1015, 1020, 1025)를 포함한다.
스테이트먼트 77. 본 발명의 실시 예는 스테이트먼트 68에 따른 항목을 포함하고, 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나에 I/O 커맨드(555)를 스케줄링하는 단계(930)는 적어도 하나의 커맨드 폴링 큐(510, 515, 52, 525) 중 제1 우선 순위를 포함하는 제1 커맨드 큐를 식별하는 단계; 적어도 하나의 커맨드 인터럽트 큐(535, 540, 545, 550) 중 제1 우선 순위와 다른 제2 우선 순위를 포함하는 제2 커맨드 큐를 식별하는 단계; 및 저장 장치(120)의 적어도 하나의 조건(565)이 감시 매개 변수(410)에 대한 임계치(415)를 초과하는지 여부를 기반으로 제1 및 제2 커맨드 큐들 중 하나를 선택하는 단계(1015, 1020, 1025)를 포함한다.
스테이트먼트 78. 본 발명의 실시 예는 스테이트먼트 68에 따른 항목을 포함하고, 유형의 저장 매체에 저장된 비-일시적인 명령어는 감시 매개 변수(410)에 대하여 애플리케이션(125, 305, 310, 315)으로 피드백(605, 630, 610, 635, 615, 640, 620, 645)을 제공하는 단계를 더 포함한다.
스테이트먼트 79. 본 발명의 실시 예는 스테이트먼트 78에 따른 항목을 포함하고, 감시 매개 변수(410)에 대하여 애플리케이션(125, 305, 310, 315)으로 피드백(605, 630, 610, 635, 615, 640, 620, 645)을 제공하는 단계(945)는 성능 향상을 위하여 전환 매개 변수(415) 및 감시 매개 변수(410) 중 적어도 하나의 변화(change)를 애플리케이션(125, 305, 310, 315)으로 제안하는 단계(950)를 포함한다.
스테이트먼트 80. 본 발명의 실시 예는 스테이트먼트 79에 따른 항목을 포함하고, 성능 향상을 위하여 전환 매개 변수(415) 및 감시 매개 변수(410) 중 적어도 하나의 변화(change)를 애플리케이션(125, 305, 310, 315)으로 제안하는 단계(950)는 I/O 혼잡도, I/O 발행 모델, 및 I/O 완료 모델 중 하나의 향상을 위하여 변화를 애플리케이션(125, 305, 310, 315)으로 제안하는 단계(950)를 포함한다.
스테이트먼트 81. 본 발명의 실시 예는 스테이트먼트 78에 따른 항목을 포함하고, 감시 매개 변수(410)에 대하여 애플리케이션(125, 305, 310, 315)으로 피드백(605, 630, 610, 635, 615, 640, 620, 645)을 제공하는 단계(945)는 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나에 대하여 애플리케이션(125, 305, 310, 315)으로 피드백(605, 630, 610, 635, 615, 640, 620, 645)을 제공하는 단계(945)를 포함한다.
스테이트먼트 82. 본 발명의 실시 예는 스테이트먼트 81에 따른 방법을 포함하고, 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나에 대하여 애플리케이션(125, 305, 310, 315)으로 피드백(605, 630, 610, 635, 615, 640, 620, 645)을 제공하는 단계(945)는 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나의 최소 레이턴시, 최대 레이턴시, 최소 초당 I/O 명령어들(IOPS), 및 최대 IOPS에 대하여 애플리케이션(125, 305, 310, 315)으로 피드백(605, 630, 610, 635, 615, 640, 620, 645)을 제공하는 단계(945)를 포함한다.
스테이트먼트 83. 본 발명의 실시 예는 스테이트먼트 68에 따른 항목을 포함하고, 비-일시적인 명령어는 I/O 커맨드(555)를 저장 장치(120)로 전송하는 단계를 더 포함한다.
스테이트먼트 84. 본 발명의 실시 예는 스테이트먼트 83에 따른 항목을 포함하고, 저장 장치(120)로 I/O 커맨드(555)를 전송하는 단계(940)를 더 포함한다.
스테이트먼트 85. 본 발명의 실시 예는 스테이트먼트 84에 따른 방법을 포함하고, 저장 장치(120)로 I/O 커맨드(555)를 전송하는 단계(940)는 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나로부터 I/O 커맨드(555)를 제거하고, 저장 장치(120)로 I/O 커맨드(555)를 전송하는 시간을 선택하기 위하여 스케줄링 알고리즘을 사용하는 단계(935)를 포함한다.
스테이트먼트 86. 본 발명의 실시 예는 스테이트먼트 84에 따른 방법을 포함하고, 스케줄링 알고리즘을 사용하는 단계(935)는 복수의 커맨드 큐들(510, 515, 520, 525, 535, 540, 545, 550) 중 하나로부터 I/O 커맨드(555)를 제거하고, 저장 장치(120)로 I/O 커맨드(555)를 전송하는 시간을 선택하기 위하여 라운드 로빈 스케줄링 알고리즘(round robin scheduling algorithm)을 사용하는 단계(935)를 포함한다.
스테이트먼트 87. 본 발명의 실시 예는 예는 비-일시적인 명령어들을 저장하는 유형의 저장 매체(tangible storage medium)을 포함하는 항목을 포함하고, 비-일시적인 명령어들은 기계(105)에 의해 실행된다. 명령어들은 애플리케이션(125, 305, 310, 315)에 대한 애플리케이션 프로파일(405, 430, 435)을 생성하는 단계(1105); 애플리케이션 프로파일(405, 430, 435)을 모드 구성 모듈(320)로 전송하는 단계(1110); 애플리케이션(125, 305, 310, 315)에 대한 입출력(I/O) 커맨드(555)를 생성하는 단계(1120); 및 애플리케이션 인식 모듈(325)을 통해 저장 장치(120)로 I/O 커맨드(555)를 전송하는 단계(1125)를 더 포함한다.
스테이트먼트 88. 본 발명의 실시 예는 스테이트먼트 87에 따른 항목을 포함하고, 명령어는 저장 장치(120)로부터 데이터를 수신하는 단계(1130)를 더 포함한다.
스테이트먼트 89. 본 발명의 실시 예는 스테이트먼트 87에 따른 항목을 포함하고, 애플리케이션(125, 305, 310, 315)에 대한 애플리케이션 프로파일(405, 430, 435)을 생성하는 단계(1105)는 감시 매개 변수(410) 및 전환 매개 변수(415)를 포함하는 애플리케이션 프로파일(405, 430, 435)을 생성하는 단계(1105)를 포함한다.
스테이트먼트 90. 본 발명의 실시 예는 스테이트먼트 87에 따른 항목을 포함하고, 애플리케이션(125, 305, 310, 315)에 대한 애플리케이션 프로파일(405, 430, 435)을 생성하는 단계(1105)는 애플리케이션(125, 305, 310, 315)에 대한 복수의 애플리케이션 프로파일들(405, 430, 435)을 생성하는 단계(1105, 1115)를 포함한다.
스테이트먼트 91. 본 발명의 실시 예는 스테이트먼트 87에 따른 항목을 포함하고, 애플리케이션 인식 모듈(325)을 통해 저장 장치(120)로 I/O 커맨드(555)를 전송하는 단계(1125)는 애플리케이션 인식 모듈(325)을 통해 저장 장치(120)로 I/O 커맨드(555) 및 애플리케이션 프로파일(405, 430, 435)을 전송하는 단계(1125)를 포함한다.
스테이트먼트 92. 본 발명의 실시 예는 스테이트먼트 87에 따른 항목을 포함하고, 명령어는 동적 피드백 모듈(330)로부터 피드백(605, 630, 610, 635, 615, 640, 620, 645)을 수신하는 단계(1135)를 더 포함한다.
스테이트먼트 93. 본 발명의 실시 예는 스테이트먼트 92에 따른 항목을 포함하고, 변형된 애플리케이션 프로파일(805)을 생성하기 위하여 피드백(605, 630, 610, 635, 615, 640, 620, 645)을 기반으로 애플리케이션 프로파일(405, 430, 435)을 변형하는 단계(1140); 및 변형된 애플리케이션 프로파일(805)을 모드 구성 모듈(320)로 전송하는 단계를 더 포함한다.
결과적으로, 본문에 기재된 실시 예들의 다양한 변형의 관점에서, 상세한 설명 및 첨부된 사항은 단순히 설명을 위한 것이며, 본 발명의 범위가 한정되는 것은 아니다. 본 발명의 청구범위는 이하의 특허청구범위의 사상 및 범위 내에서 이루어질 수 있는 모든 변형들이며, 이와 동등한 것이다.

Claims (10)

  1. 시스템에 있어서,
    컴퓨터;
    프로세서;
    메모리;
    스토리지 장치;
    상기 메모리에 저장되고, 상기 프로세서에 의해 실행되는 애플리케이션; 및
    장치 드라이버를 포함하고,
    상기 장치 드라이버는:
    감시 매개 변수 및 전환 매개 변수를 포함하는 애플리케이션 프로파일을 수신하는 모드 구성 모듈(Mode Configure Module); 및
    상기 애플리케이션으로부터 입출력(I/O) 커맨드를 수신하고, 상기 애플리케이션 프로파일에서 상기 감시 매개 변수에 의해 정의된 상기 스토리지 장치의 조건 및 상기 전환 매개 변수를 기반으로 상기 I/O 커맨드를 복수의 커맨드 큐들 중 하나로 할당하는 애플리케이션 인식 모듈(Application Aware Module)을 포함하고,
    상기 스토리지 장치는 상기 복수의 커맨드 큐들 중 상기 하나로부터 상기 I/O 커맨드를 수신하도록 동작하고,
    상기 감시 매개 변수는 상기 애플리케이션에 관심있는 상기 스토리지 장치의 상기 조건을 식별하고,
    상기 전환 매개 변수는 상기 스토리지 장치의 상기 조건을 기반으로 상기 복수의 커맨드 큐들 중 어떤 커맨드 큐가 선택되었는지를 상기 애플리케이션 인식 모듈로 알려주는 시스템.
  2. 제 1 항에 있어서,
    상기 감시 매개 변수는 레이턴시(latency), 초당 입출력 명령어(IOPS; I/O instructions Per Second), 및 우선 순위를 포함하는 세트로부터 정해지고,
    상기 전환 매개 변수는 상기 감시 매개 변수에 대한 임계치를 포함하는 시스템.
  3. 제 2 항에 있어서,
    상기 애플리케이션 인식 모듈은 상기 스토리지 장치의 적어도 하나의 조건이 상기 감시 매개 변수에 대한 상기 임계치를 초과하는지 여부를 기반으로 상기 애플리케이션 프로파일을 사용하여 상기 복수의 커맨드 큐들 중 하나로 상기 I/O 커맨드를 할당하도록 동작하는 시스템.
  4. 제 1 항에 있어서,
    상기 복수의 커맨드 큐들은 적어도 하나의 커맨드 폴링 큐 및 적어도 하나의 커맨드 인터럽트 큐를 포함하는 시스템.
  5. 제 4 항에 있어서,
    상기 애플리케이션 인식 모듈은 상기 애플리케이션 프로파일을 사용하여 동일한 우선 순위의 상기 적어도 하나의 커맨드 인터럽트 큐 및 상기 적어도 하나의 커맨드 폴링 큐 중 어느 하나로 상기 입출력 커맨드를 할당하도록 동작하는 시스템.
  6. 제 1 항에 있어서,
    상기 장치 드라이버는 상기 감시 매개 변수에 대하여 상기 애플리케이션으로 피드백을 제공하는 동적 피드백 모듈을 더 포함하는 시스템.
  7. 제 6 항에 있어서,
    상기 피드백은 성능 향상을 위하여 상기 전환 매개 변수 및 상기 감시 매개 변수 중 적어도 하나의 변경에 대한 상기 애플리케이션으로의 제안(suggestion)을 포함하는 시스템.
  8. 제 6 항에 있어서,
    상기 피드백은 상기 복수의 커맨드 큐들 중 상기 하나에 대한 상기 애플리케이션으로의 피드백을 더 포함하는 시스템.
  9. 제 1 항에 있어서,
    상기 장치 드라이버는 상기 I/O 커맨드의 상기 스토리지 장치로의 전달을 스케쥴링하는 스케쥴러를 포함하는 시스템.
  10. 방법에 있어서,
    스토리지 장치에서 애플리케이션으로부터, 감시 매개 변수 및 전환 매개 변수를 포함하는 애플리케이션 프로파일을 수신하는 단계;
    상기 애플리케이션 프로파일을 상기 스토리지 장치에 저장하는 단계;
    상기 스토리지 장치에서 상기 애플리케이션 프로파일을 포함하는 입출력(I/O) 커맨드를 수신하는 단계;
    상기 스토리지 장치가 상기 I/O 커맨드를 수신할 때, 상기 감시 매개 변수를 기반으로 상기 스토리지 장치의 적어도 하나의 조건을 판별하는 단계; 및
    상기 전환 매개 변수 및 상기 스토리지 장치의 상기 적어도 하나의 조건에 응답하여 복수의 커맨드 큐들 중 하나에 상기 I/O 커맨드를 스케쥴링하는 단계를 포함하고,
    상기 감시 매개 변수는 상기 애플리케이션에 관심있는 상기 스토리지 장치의 상기 적어도 하나의 조건을 식별하고,
    상기 전환 매개 변수는 상기 스토리지 장치의 상기 적어도 하나의 조건을 기반으로 상기 복수의 커맨드 큐들 중 어떤 커맨드 큐가 선택되었는지를 애플리케이션 인식 모듈로 알려주는 방법.
KR1020160123275A 2016-02-23 2016-09-26 키 밸류 장치를 위한 애플리케이션 인식 입출력 완료 모드 변환기의 방법 KR102428091B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201662298989P 2016-02-23 2016-02-23
US62/298,989 2016-02-23
US15/134,361 2016-04-20
US15/134,361 US9817586B2 (en) 2016-02-23 2016-04-20 Method of application aware IO completion mode changer for key value device

Publications (2)

Publication Number Publication Date
KR20170099344A KR20170099344A (ko) 2017-08-31
KR102428091B1 true KR102428091B1 (ko) 2022-08-02

Family

ID=59629951

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160123275A KR102428091B1 (ko) 2016-02-23 2016-09-26 키 밸류 장치를 위한 애플리케이션 인식 입출력 완료 모드 변환기의 방법

Country Status (2)

Country Link
US (1) US9817586B2 (ko)
KR (1) KR102428091B1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111831234B (zh) * 2016-06-21 2024-04-23 伊姆西Ip控股有限责任公司 用于虚拟机的方法和装置
US10334334B2 (en) * 2016-07-22 2019-06-25 Intel Corporation Storage sled and techniques for a data center
US10515038B2 (en) * 2016-09-26 2019-12-24 Red Hat, Inc. Input/output command rebalancing in a virtualized computer system
US11132233B2 (en) * 2018-05-07 2021-09-28 Micron Technology, Inc. Thread priority management in a multi-threaded, self-scheduling processor
CN112384868B (zh) * 2018-06-19 2024-04-02 三菱电机株式会社 程序执行辅助装置、程序执行辅助方法及计算机可读取的存储介质
KR102560251B1 (ko) * 2018-06-20 2023-07-26 삼성전자주식회사 반도체 장치 및 반도체 시스템
US11163452B2 (en) * 2018-09-24 2021-11-02 Elastic Flash Inc. Workload based device access
US11112999B2 (en) * 2019-07-29 2021-09-07 EMC IP Holding Company LLC Optimizing I/O latency by software stack latency reduction in a cooperative thread processing model
US11561733B2 (en) 2021-02-05 2023-01-24 Micron Technology, Inc. Interrupt mode or polling mode for memory devices
US20230367726A1 (en) * 2022-05-11 2023-11-16 Vmware, Inc. Processing I/O Commands using Block Size Aware Polling
WO2024128433A1 (ko) * 2022-12-15 2024-06-20 국민대학교산학협력단 하이브리드 인터럽트 처리 장치 및 방법

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130054840A1 (en) 2011-08-22 2013-02-28 Apple Inc. Tag allocation for queued commands across multiple devices
US20150347327A1 (en) 2014-05-30 2015-12-03 Apple Inc. I/o scheduling

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7225309B2 (en) 2003-10-09 2007-05-29 International Business Machines Corporation Method and system for autonomic performance improvements in an application via memory relocation
US8291063B2 (en) * 2005-03-04 2012-10-16 Netapp, Inc. Method and apparatus for communicating between an agent and a remote management module in a processing system
US8527473B1 (en) 2005-10-20 2013-09-03 Teradata Us, Inc. Identifying database request sources in multi-database systems
US7797406B2 (en) 2006-07-27 2010-09-14 Cisco Technology, Inc. Applying quality of service to application messages in network elements based on roles and status
US20100262773A1 (en) * 2009-04-08 2010-10-14 Google Inc. Data striping in a flash memory data storage device
JP5368285B2 (ja) * 2009-12-11 2013-12-18 株式会社日立製作所 計算機システム、計算機リソースの管理方法及びプログラム
US9262182B2 (en) 2012-01-25 2016-02-16 Apple Inc. Dynamic parameter profiles for electronic devices

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130054840A1 (en) 2011-08-22 2013-02-28 Apple Inc. Tag allocation for queued commands across multiple devices
US20150347327A1 (en) 2014-05-30 2015-12-03 Apple Inc. I/o scheduling

Also Published As

Publication number Publication date
US20170242594A1 (en) 2017-08-24
KR20170099344A (ko) 2017-08-31
US9817586B2 (en) 2017-11-14

Similar Documents

Publication Publication Date Title
KR102428091B1 (ko) 키 밸류 장치를 위한 애플리케이션 인식 입출력 완료 모드 변환기의 방법
US20210224114A1 (en) Capacity Analysis Using Closed-System Modules
US10318467B2 (en) Preventing input/output (I/O) traffic overloading of an interconnect channel in a distributed data storage system
US20190324819A1 (en) Distributed-system task assignment method and apparatus
US20190303200A1 (en) Dynamic Storage-Aware Job Scheduling
EP3970011B1 (en) Systems and methods for digital workforce intelligent orchestration
KR102267480B1 (ko) 멀티-스트림이 가능한 솔리드 스테이트 드라이브들을 위하여 데이터 스트림들을 통합하는 방법
US10810143B2 (en) Distributed storage system and method for managing storage access bandwidth for multiple clients
Song et al. A two-stage approach for task and resource management in multimedia cloud environment
US8301805B2 (en) Managing I/O request in a storage system
US20150317556A1 (en) Adaptive quick response controlling system for software defined storage system for improving performance parameter
GB2531074A (en) Storage system and method for operating a storage system
US20180039514A1 (en) Methods and apparatus to facilitate efficient scheduling of digital tasks in a system
US20220229695A1 (en) System and method for scheduling in a computing system
US9424510B2 (en) Adaptive fuzzy rule controlling system for software defined storage system for controlling performance parameter
CN107870779B (zh) 调度方法与装置
US20130346983A1 (en) Computer system, control system, control method and control program
US20230333903A1 (en) Method and system for performing anomaly detection in a distributed multi-tiered computing environment
EP3550421B1 (en) Storage controller and io request processing method
US20190104017A1 (en) Accelerating machine learning and profiling over a network
US20230333908A1 (en) Method and system for managing resource buffers in a distributed multi-tiered computing environment
US11994975B2 (en) Method and system for performing root cause analysis associated with service impairments in a distributed multi-tiered computing environment
US20230333887A1 (en) Method and system for provisioning an application in a distributed multi-tiered computing environment using case based reasoning
US20230333912A1 (en) Method and system for managing a distributed multi-tiered computing environment based on load predictions
US11953978B2 (en) Method and system for performing service remediation in a distributed multi-tiered computing environment

Legal Events

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