KR20210156759A - 큐 가용성 모니터링을 위한 시스템, 방법 및 장치 - Google Patents

큐 가용성 모니터링을 위한 시스템, 방법 및 장치 Download PDF

Info

Publication number
KR20210156759A
KR20210156759A KR1020210073744A KR20210073744A KR20210156759A KR 20210156759 A KR20210156759 A KR 20210156759A KR 1020210073744 A KR1020210073744 A KR 1020210073744A KR 20210073744 A KR20210073744 A KR 20210073744A KR 20210156759 A KR20210156759 A KR 20210156759A
Authority
KR
South Korea
Prior art keywords
queue
register
bit
entry
processor
Prior art date
Application number
KR1020210073744A
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 KR20210156759A publication Critical patent/KR20210156759A/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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3037Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a memory, e.g. virtual memory, cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3051Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1642Handling requests for interconnection or transfer for access to memory bus based on arbitration with request queuing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/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
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7839Architectures of general purpose stored program computers comprising a single central processing unit with memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/28Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
    • H04L12/2803Home automation networks
    • H04L12/2807Exchanging configuration information on appliance services in a home automation network

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)
  • Computing Systems (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Automation & Control Theory (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Mathematical Physics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

방법은 큐 가용성 모듈이 엔트리가 큐에서 이용 가능함을 결정하는 단계, 엔트리가 큐에서 이용 가능하다고 결정하는 것에 기초하여 레지스터의 비트를 어서팅하는 단계, 프로세서가 상기 비트가 어서팅됨을 결정하는 단계, 및 상기 프로세서가 상기 비트가 어서팅됨을 결정한 것에 기초하여 상기 큐의 상기 엔트리를 처리하는 단계를 포함한다. 상기 방법은 상기 프로세서와 관련된 강결합된 메모리에 상기 레지스터를 저장하는 단계를 더 포함할 수 있다. 상기 방법은 상기 강결합된 메모리에 상기 큐를 저장하는 단계를 더 포함한다. 상기 방법은 상기 큐 가용성 모듈에서 제2 큐에서 엔트리가 이용 가능함을 결정하는 단계 및 상기 제2 큐에서 엔트리가 이용 가능함을 결정하는 것에 기초하여 상기 레지스터의 제2 비트를 어서팅하는 단계를 더 포함한다. 상기 방법은 파인드-퍼스트 명령어(find-first instruction)를 사용하여 상기 레지스터의 상기 제1 비트를 찾는 단계를 더 포함한다.

Description

큐 가용성 모니터링을 위한 시스템, 방법 및 장치{SYSTEMS, METHODS, AND DEVICES FOR QUEUE AVAILABILITY MONITORING}
본 개시는 일반적으로 큐에 관한 것이고, 특히 큐 가용성 모니터링을 위한 시스템, 방법 및 장치에 관한 것이다.
큐는 프로세서에 의해 처리될 수 있는 명령 및/또는 요청과 같은 하나 이상의 엔트리들을 저장할 수 있다. 프로세서는 큐를 확인하여 큐가 프로세싱을 위해 가용 가능한 임의의 엔트리를 갖는 지의 여부를 판단한다.
본 개시의 배경 기술에 공개된 상기 정보는 본 개시의 배경의 이해를 높이기 위한 것일 뿐이므로 종래 기술을 구성하지 않는 정보를 포함할 수 있다.
본 개시의 목적은 큐 가용성 모니터링을 위한 시스템, 방법 및 장치를 제공하는데 있다.
방법은 큐 가용성 모듈이 엔트리가 큐에서 이용 가능함을 결정하는 단계, 엔트리가 큐에서 이용 가능하다고 결정하는 것에 기초하여 레지스터의 비트를 어서팅하는 단계, 프로세서가 상기 비트가 어서팅됨을 결정하는 단계, 및 상기 프로세서가 상기 비트가 어서팅됨을 결정한 것에 기초하여 상기 큐의 상기 엔트리를 처리하는 단계를 포함한다. 상기 방법은 상기 프로세서와 관련된 강결합된 메모리에 상기 레지스터를 저장하는 단계를 더 포함할 수 있다. 상기 방법은 상기 강결합된 메모리에 상기 큐를 저장하는 단계를 더 포함할 수 있다. 상기 큐는 제1 큐일 수 있고, 상기 비트는 제1 비트일 수 있으며, 상기 방법은 상기 큐 가용성 모듈이 엔트리가 제2 큐에서 이용 가능함을 결정하는 단계, 및 엔트리가 상기 제2 큐에서 이용 가능하다고 결정하는 것에 기초하여 상기 레지스터의 제2 비트를 어서팅하는 단계를 더 포함할 수 있다. 상기 방법은 파인드-퍼스트 명령어(find-first instruction)를 사용하여 상기 레지스터의 상기 제1 비트를 찾는 단계를 더 포함할 수 있다. 상기 방법은 상기 프로세서가 상기 제2 비트가 어서팅됨을 결정하는 단계 및 상기 프로세서가 상기 제2 비트가 어서팅됨을 결정한 것에 기초하여 상기 제2 큐의 상기 엔트리를 처리하는 단계를 더 포함할 수 있다. 상기 큐는 커맨드 큐, DMA(Direct Memory Access) 큐 또는 전송 큐 중 하나를 포함할 수 있다. 상기 엔트리를 처리하는 단계는 명령을 처리하는 단계를 포함할 수 있다. 상기 엔트리를 처리하는 단계는 자원을 관리하는 단계를 포함할 수 있다. 상기 방법은 통신 인터페이스를 통해 호스트로부터 명령을 수신하는 단계, 상기 명령을 파싱하는(parsing) 단계, 및 상기 큐의 상기 엔트리로서 상기 명령을 저장하는 단계를 더 포함할 수 있다. 상기 큐에서 엔트리가 이용 가능함을 결정하는 단계는 상기 엔트리의 페이즈 태그(phase tag)를 검사하는 단계를 포함할 수 있다.
시스템은 하나 이상의 엔트리들을 보유하도록 구성된 큐, 상기 큐에서 하나 이상의 엔트리들의 가용성을 나타내는 비트를 포함하는 레지스터, 상기 큐를 모니터링하고 하나 이상의 엔트리들이 상기 큐에서 이용 가능하다고 결정하는 것에 기초하여 상기 레지스터의 상기 비트를 어서팅하도록 구성된 큐 가용성 모듈, 및 상기 레지스터를 검사하고 상기 레지스터의 상기 비트가 어서팅됨을 결정하는 것에 기초하여 상기 큐의 엔트리를 처리하도록 구성된 프로세서를 포함할 수 있다. 상기 큐 가용성 모듈은 시스템 버스를 통해 상기 프로세서에 결합될 수 있으며, 상기 레지스터는 상기 시스템 버스의 프로세서측에 저장될 수 있다. 상기 레지스터는 상기 프로세서와 관련된 강결합된 메모리에 저장될 수 있다. 상기 큐는 제1 큐이며, 상기 비트는 제1 비트일 수 있으며, 상기 시스템은 하나 이상의 엔트리들을 보유하도록 구성된 제2 큐를 더 포함할 수 있으며, 상기 큐 가용성 모듈은 상기 제2 큐를 모니터링하고 하나 이상의 엔트리들이 상기 제2 큐에서 이용 가능하다고 결정하는 것에 기초하여 상기 레지스터의 상기 제2 비트를 어서팅하도록 더 구성될 수 있으며, 상기 프로세서는 상기 레지스터를 검사하고 상기 레지스터의 상기 제2 비트가 어서팅됨을 결정하는 것에 기초하여 상기 제2 큐의 엔트리를 처리하도록 더 구성될 수 있다. 상기 프로세서는 파인드-퍼스트 명령어를 이용하여 상기 레지스터를 검사하도록 더 구성될 수 있다.
방법은 큐 가용성 모듈에서 큐를 모니터링하는 단계, 상기 큐 가용성 모듈에서 상기 큐의 이용 가능한 엔트리에 기초하여 레지스터를 갱신하는 단계, 프로세서에서 상기 레지스터를 검사하는 단계, 및 상기 프로세서에서 상기 레지스터의 상태에 기초하여 상기 이용 가능한 엔트리를 처리하는 단계를 포함할 수 있다. 상기 큐는 제1 큐일 수 있으며, 상기 레지스터를 갱신하는 단계는 상기 레지스터의 제1 비트를 어서팅하는 단계를 포함할 수 있고, 상기 방법은 상기 큐 가용성 모듈에서 제2 큐를 모니터링하는 단계, 및 상기 큐 가용성 모듈에서 상기 제2 큐의 이용 가능한 엔트리에 기초하여 상기 레지스터의 제2 비트를 갱신하는 단계를 포함할 수 있다. 상기 방법은 상기 프로세서와 관련된 강결합된 메모리에 상기 레지스터를 저장하는 단계를 더 포함할 수 있다. 상기 레지스터는 파인드-퍼스트 명령어로 검사될 수 있다.
본 개시의 실시 예들에 따르면, 사용가능한 엔트리에 대해 큐를 모니터링할 수 있다. 또한, 본 개시의 실시 예들에 따르면, 프로세서가 이용 가능한 엔트리를 가질 수 있는 큐를 찾는 데 걸리는 시간을 줄이거나 제거함으로써 지연 시간을 줄일 수 있다.
도면은 반드시 축척 방식으로 그려진 것은 아니며 유사한 구조 또는 기능의 엘리먼트들은 일반적으로 도면 전체에 걸쳐 예시를 위해 유사한 참조 번호로 표시된다. 도면은 여기에서 다양한 실시예들의 설명을 용이하게 하기 위한 것일 뿐이다. 도면은 여기에 개시된 교시의 모든 측면을 기술하지 않으며 청구 범위의 범위를 제한하지 않는다. 도면이 흐려지는 것을 방지하기 위해 모든 구성요소, 연결부 등이 표시되지 않을 수 있으며 모든 구성 요소가 참조 번호를 갖지 않을 수 있다. 그러나 구성요소의 구성들의 패턴은 도면으로부터 용이하게 파악할 수 있다. 명세서와 함께 첨부된 도면은 본 개시의 예시적인 실시예들을 도시하고, 상세한 설명과 함께 본 개시의 원리를 설명하는 역할을 한다.
도 1은 본 개시에 따른 큐 가용성 모니터링을 갖는 시스템의 실시 예를 도시한다.
도 2는 본 개시에 따른 큐 가용성 모니터링을 위한 방법의 실시 예의 흐름도를 도시한다.
도 3은 본 개시에 따른 다수의 큐들에 대한 큐 가용성 모니터링을 갖는 시스템의 실시예를 도시한다.
도 4는 본 개시에 따른, 시스템을 통한 프로세스 및 데이터 흐름과 함께, 다수의 모듈들과 연관된 다수의 큐들에 대한 큐 가용성 모니터링을 갖는 시스템의 예시적인 실시예를 도시한다.
도 5는 본 개시에 따른 큐 가용성 모니터 레지스터의 예시적인 실시예를 도시한다.
도 6은 본 개시에 따른 큐 가용성 모니터링을 위한 방법의 다른 실시예의 흐름도를 도시한다.
개요(Overview)
일 실시예는 사용가능한 엔트리에 대해 큐를 모니터링할 수 있다. 큐에서 엔트리가 이용 가능하면, 레지스터의 해당 비트가 어서팅(asserted)될 수 있다. 그런 다음, 프로세서는 상기 비트를 확인하고 상기 비트가 어서팅되었다면, 해당 큐의 엔트리를 처리할 수 있다. 일부 실시예에서, 상기 큐는 큐 가용성 모니터(QAM) 모듈에 의해 모니터링될 수 있다. 구현 세부사항에 따라, QAM 모듈 및/또는 레지스터는 예컨대, 프로세서가 이용 가능한 엔트리에 대한 상기 큐를 검사하였다면 관련된 시간을 줄이거나 제거함으로써 지연 시간(latency)을 줄일 수 있다.
일부 실시예에서, QAM 모듈은 다수의 큐들을 모니터링하고 이용 가능한 엔트리를 갖는 각 큐에 대해 대응하는 비트를 어서팅할 수 있다. 서로 다른 큐들에 해당하는 비트들이 동일한 레지스터로 그룹화될 수 있다. 이후, 하나 이상의 프로세서들이 다수의 비트들을 검사하고 레지스터의 어서팅된 비트들에 대응하는 큐들의 엔트리들을 처리할 수 있다. 구현 세부사항에 따라, 다수의 큐들에 대한 비트들을 동일한 레지스터로 통합하는 것은 하나 이상의 프로세서들이 다수의 큐들에 대한 비트들을 검사하는 시간을 줄이거나 제거하여 지연 시간을 줄일 수 있다.
일부 실시예에서, 하나 이상의 레지스터는 레지스터를 검사할 수 있는 프로세서와 관련된 강결합된(tightly coupled) 메모리에 저장될 수 있다. 이는 예를 들어 프로세서가 시스템 버스 또는 인터페이스를 통해 레지스터 내용에 액세스하는 시간을 줄이거나 제거함으로써 지연 시간을 줄일 수 있다. 일부 실시예에서, 프로세서는 예를 들어, 선행 제로 카운트 명령어(count leading zeros instruction) 또는 후행 제로 카운트 명령어(count trailing zeros instruction)과 같은 파인드-퍼스트 명령어(find-first instruction)을 사용하여 다수의 비트들을 갖는 레지스터를 검사할 수 있다. 예를 들어, 프로세서가 이용 가능한 엔트리를 가질 수 있는 큐를 찾는 데 걸리는 시간을 줄이거나 제거함으로써 지연 시간을 줄일 수 있다.
큐 검사(Checking Queues)
일부 실시예에서, 큐는 엔트리에서 생산자 인덱스(producer index: PI), 소비자 인덱스(consumer index: CI) 및/또는 페이즈 태그(phase tag: PT) 비트와 같은 포인터 및/또 필드의 사용을 통해 동작할 수 있다. PI는 큐에 엔트리를 저장하기 위해 다음의 빈 위치를 가리킬 수 있다. CI는 큐가 비어 있지 않은 경우 큐에서 가져올 다음 엔트리를 가리킬 수 있다. 엔트리의 PI는 엔트리가 큐에 추가될 때 생산자에 의해 갱신될 수 있으며 새로운 엔트리가 이전 또는 현재 추가 라운드의 일부로 게시되었는지의 여부를 나타낼 수 있다.
프로세서는 처리할 이용 가능한 엔트리들에 대해 하나 이상의 큐들을 검사할 수 있다. 그러나, 큐를 검사하는 것은 상대적으로 시간이 많이 소요되는 프로세스를 수반할 수 있다. 예를 들어, 시스템의 일 실시예에서, 임베디드 프로세서는 표 1에 도시된 예시 코드를 사용하여 입출력 (I/O) 동작을 위한 큐의 CI 위치에 있는 엔트리의 PT 비트를 검사할 수 있다.
01 Bool IsQueueEmpty(void * pEntries)
02 {
03 Entity *entry = reinterpret_cast<Entry *>(pEntries);
04 entry = &entry[CI];
05 return ((entry->InfoBits.nPT & 0x1) != nPT);
06 }
이 코드를 실행하는 데 상당한 시간이 걸릴 수 있다. 또한, 프로세서가 처리할 이용 가능한 엔트리들을 검색하는 동안 검사할 수 있는 시스템의 다수의 큐들이 존재할 수 있다. 따라서, 이용 가능한 엔트리들에 대해 큐들을 검사하는 것은 상당한 추가적인 CPU(중앙 처리 장치) 사이클들을 초래하며, 이는 I/O 대역폭을 줄이거나 I/O 지연 시간을 늘릴 수 있다.
큐 가용성 모니터링(Queue Availability Monitoring)
도 1은 본 개시에 따른 큐 가용성 모니터링을 갖는 시스템의 실시 예를 도시한다. 도 1에 도시된 실시예(100)는 큐(102), 큐 가용성 모니터(QAM) 모듈(104), QAM 레지스터(106), 큐 관리 모듈(107) 및 프로세서(108)를 포함할 수 있다.
큐(102)는 명령, 자원 요청, 관리 요청, 전송 요청 등과 같은 엔트리를 보유하도록 구성될 수 있다. 큐 관리 모듈(107)은 큐(102)를 관리하기 위해 하드웨어 및/또는 소프트웨어 기능(functionality)을 포함할 수 있다. 예를 들어, 큐(102)가 원형 큐(circular queue)로서 구현되는 일부 실시예에서, 큐 관리 모듈(107)은 큐에 대한 PI 비트, CI 비트 및/또는 PT 비트를 구현하는 하나 이상의 레지스터를 포함할 수 있다. 큐 관리 모듈(107)은 또한 엔티티가 큐(102)의 엔트리를 배치할 때 다른 하드웨어 및/또는 소프트웨어와 같은 엔티티에 의해 어서팅될 수 있는 비트를 가질 수 있는 도어벨 레지스터를 포함할 수 있다.
QAM 모듈(104)은 큐(102)에 새로운 엔트리가 언제 배치되는 지를 결정하기 위해 큐(102)를 예를 들어 연속적으로 또는 주기적 간격으로 모니터링할 수 있다. 일부 실시예에서, QAM 모듈(104)은 예를 들어 PI의 상태를 지속적으로 또는 자주 검사하고 PI가 변화할 때 새로운 엔트리가 추가되었다고 결정함으로써 큐(102)를 예비적으로(proactively) 모니터링할 수 있다. 예를 들어, 큐(102)가 PI, CI 및 PT 비트를 갖는 원형 버퍼(circular buffer)로 구현되는 경우, QAM 모듈(104)은 예시 코드(example code)에 대해 전술한 것과 유사한 로직을 사용하여 CI 위치에서 엔트리의 PT 비트를 검사할 수 있다. QAM 모듈(104)이 하드웨어로 구현될 수 있는 일부 실시예에서, 구현 세부사항에 따라, QAM 모듈(104)은 엔트리가 큐(102)에서 언제 이용 가능한 지를 결정하는 것과 관련된 시간을 줄일 수 있다.
일부 다른 실시예에서, QAM 모듈(104)은 예를 들어, 새로운 엔트리가 추가되었음을 나타내는 큐 관리 모듈(107)의 도어벨 레지스터의 비트를 모니터링함으로써 큐(102)를 모니터링할 수 있다. 일부 다른 실시예에서, QAM 모듈(104)은 예컨대, QAM 모듈(104)에 새로운 엔트리가 큐(102)에 언제 추가되었음을 예컨대, 통지 신호를 사용하여 통지할 수 있는 큐 관리 모듈(107)과 인터페이싱함으로써 큐(102)를 모니터링할 수 있다.
엔트리가 큐(102)에서 이용 가능함을 검출하는 것에 응답하여, QAM 모듈(104)은 QAM 레지스터(106)의 큐(102)에 대응하는 비트(110)를 어서팅할 수 있다. 일부 실시예에서, 비트 (110)는 로직 "1"로 설정함으로써 어서팅될 수 있다. 다른 실시예에서, 비트(110)는 로직 "0"으로 클리어함으로써 어서팅될 수 있다.
프로세서(108)는 큐(102)에서 엔트리가 이용 가능한 지를 결정하기 위해 QAM 레지스터(106)의 비트 (110)를 검사할 수 있다. 비트 (110)가 어서팅되면, 프로세서(108)는 큐(102)로부터 엔트리를 가져와서 상기 엔트리를 처리하도록 진행할 수 있다. 예를 들어, 엔트리가 저장 장치에 대한 쓰기 명령과 같은 명령인 경우, 프로세서(108)는 상기 명령에 의해 지정된 로직 블록 주소로부터 데이터를 검색하고 상기 데이터를 호스트로 전달할 수 있다. 다른 예로서, 엔트리가 계산 프로세스에 대한 리소스 요청이면, 프로세서(108)는 엔트리에 포함된 하나 이상의 파라미터에 기초하여 하나 이상의 계산 및/또는 메모리 리소스를 할당하도록 진행할 수 있다.
프로세서(108)는 QAM 레지스터(106)의 비트(110)를 검사하기 위해 다양한 기술을 사용할 수 있다. 예를 들어, 일부 실시예에서, 프로세서는 비트(110)를 주기적으로 검사할 수 있다. 일부 실시예에서, 프로세서는 예를 들어, 비트(110)를 어서팅할 때, 예를 들어 QAM 모듈(104)에 의해 생성될 수 있는 인터럽트와 같은 이벤트에 응답하여 비트(110)를 검사할 수 있다.
엔트리가 큐(102)로부터 풀링된(pulled) 후, QAM 모듈(104)은 큐(102)에 어떤 추가 엔트리가 있는지 여부를 판단할 수 있다. 추가 엔트리가 있다면, QAM 모듈(104)은 비트(110)를 어서팅된 상태로 남겨 둘 수 있다. 그러나, 큐 (102)에 더 이상 엔트리가 없다면, QAM은 비트(110)를 디어서팅할(de-assert) 수 있다. 예를 들어, 일부 실시예에서, 프로세서(108)는 큐로부터 엔트리를 가져올 때 CI를 인크리먼트할 수 있다. QAM 모듈은 CI의 값이 큐(102)가 비어 있음을 나타낼 수 있는 PI의 값과 동일한 지의 조건에 대해 검사할 수 있다. 대안적으로 또는 추가적으로, QAM 모듈(104)은 예시 코드에 대해 전술한 것과 유사한 로직을 사용하여 CI 위치에서 엔트리의 PT 비트를 검사할 수 있다.
큐(102)는 원형 버퍼, 링크드 리스트(linked list) 등과 같은 임의의 구조를 가질 수 있고, 임의의 포맷을 갖는 엔트리에 임의의 타입의 데이터, 명령 등을 저장할 수 있다. 일부 실시예에서, 큐(102)는 커맨드 디스패칭(command dispatching), 직접 메모리 액세스(DMA) 관리, 전송 관리 등과 같은 기능을 수행할 수 있는 하나 이상의 모듈과 연관되거나 상기 하나 이상의 모듈에 의해 사용될 수 있다.
QAM 모듈(104) 및/또는 큐 관리 모듈 (107)은 하드웨어, 소프트웨어 (펌웨어를 포함할 수 있음) 또는 이들의 임의의 조합으로 구현될 수 있다. 일부 실시예에서, QAM 모듈(104) 및/또는 큐 관리 모듈(107)은 전체적으로 또는 주로 하드웨어로 구현될 수 있으며, 예를 들어, 조합 로직, 순차 로직, 타이머, 카운터, 레지스터, 게이트 어레이, CPLDs(complex programmable logic devices), 하나 이상의 상태 머신 등을 포함할 수 있다. 일부 실시예에서, QAM 모듈(104) 및/또는 큐 관리 모듈(107)은 부분적으로 또는 주로 소프트웨어로, 예컨대, 프론트-엔드 하드웨어(front-end hardware)로 구현되어, 큐를 갖는 하드웨어 모듈과 인터페이스하지만 하나 이상의 모니터링 기능을 수행하도록 프로그래밍될 수 있는 전용 또는 공유 프로세서 코어, 메모리, 프로그램 스토리지 등과도 인터페이스한다. QAM 모듈(104) 및/또는 큐 관리 모듈(107)이 적어도 부분적인 소프트웨어 구현을 가질 수 있는 일부 실시예에서, 소프트웨어는 프로세서(108)와 분리된 하드웨어 상에서 동작할 수 있다. QAM 모듈(104) 및/또는 큐 관리 모듈(107)이 적어도 부분적인 소프트웨어 구현을 가질 수 있는 일부 다른 실시 예에서, 소프트웨어는 예를 들어 별도의 백그라운드 프로세스로서 프로세서(108) 상에서 적어도 부분적으로 동작할 수 있다.
QAM 레지스터(106)는 SRAM(static random access memory), DRAM(dynamic random access memory)과 같은 임의의 타입의 휘발성 메모리, NOR(not-OR), NAND(not-AND)과 같은 임의의 타입의 비휘발성 메모리, 영구 메모리 등을 포함하는 임의의 메모리 기술을 사용하여, 예를 들어 시스템 메모리, 캐시 메모리, 강결합된 메모리 등과 같은 임의의 타입의 메모리로 구현될 수 있다.
프로세서 (108)는 예를 들어, 전용 또는 공유 프로세서 코어, 메모리, 프로그램 스토리지 등과 같은 임의의 타입의 처리 장치로 구현될 수 있다. 일부 실시예에서, 프로세서(108)는 개별 구성요소로서, FPGA (field programmable gate array)의 일부로서, ASIC(application specific integrated circuit)의 일부로서 등과 같이 구현될 수 있다. 일부 실시예에서, 프로세서(108)는 예를 들어, 저장 장치, 그래픽 처리 장치(GPU) 등에 대한 장치 컨트롤러의 일부로서 구현될 수 있다.
도 2는 본 개시에 따른 큐 가용성 모니터링을 위한 방법의 실시 예의 흐름도를 도시한다. 예를 들어,도 2에 도시된 방법은 도 1에 도시된 시스템에서 사용될 수 있지만, 도 1 및 도 2에 도시된 실시예들 중 어느 것도 다른 실시예와 함께 사용하도록 제한되지 않는다.
도 2를 참조하면, 상기 방법 (200)은 동작 202에서 개시할 수 있다. 동작 204에서, 상기 방법은 큐 가용성 모듈에서, 엔트리가 큐에서 이용 가능함을 결정할 수 있다. 동작 206에서, 상기 방법은 엔트리가 큐에서 이용 가능하다고 결정하는 것에 기초하여 레지스터의 비트를 어서팅할 수 있다. 동작 208에서, 상기 방법은 프로세서에서 상기 비트가 어서팅된 것을 결정할 수 있다. 동작 210에서, 프로세서는 상기 비트가 어서팅됨을 결정한 것에 기초하여 큐의 엔트리를 처리할 수 있다. 상기 방법은 동작 212에서 종료할 수 있다.
여기에 설명된 임의의 다른 실시예들뿐만 아니라 도 2에 도시된 실시예와 관련하여 설명된 동작 및/또는 구성요소는 예시적인 동작 및/또는 구성요소이다. 일부 실시예에서, 일부 동작 및/또는 구성요소는 생략될 수 있고 및/또는 다른 동작 및/또는 구성요소가 포함될 수 있다. 더욱이, 일부 실시예에서, 동작들 및/또는 구성요소들의 시간적 및/또는 공간적 순서가 변경될 수 있다.
도 3은 본 개시에 따른 다수의 큐들에 대한 큐 가용성 모니터링을 갖는 시스템의 실시예를 도시한다. 도 3에 도시된 실시예 (300)는 도 1에 도시된 실시예와 유사하게, 큐(302), 큐 가용성 모니터(QAM) 모듈(304), QAM 레지스터(306), 큐 관리 모듈(307) 및 프로세서(308)를 포함할 수 있다. 그러나, 도 3에 도시된 실시예는 제1 비트(310)에 추가하여, 또한, 추가 큐 (303) 및 QAM 레지스터(306)의 대응하는 비트(311)를 포함할 수 있다. QAM 모듈(304)은 두 개의 큐들(302 및 303) 모두를 모니터링하여, 새로운 엔트리가 언제 두 개의 큐들 중 어느 하나에 배치되는 지를 판단한다. 엔트리가 제1 큐(302)에서 이용 가능함을 검출하는 것에 응답하여, QAM 모듈(104)은 QAM 레지스터(306)의 제1 큐(302)에 대응하는 제1 비트(310)를 어서팅할 수 있다. 엔트리가 제2 큐(303)에서 이용 가능함을 검출하는 것에 응답하여, QAM 모듈(304)은 QAM 레지스터(306)의 제2 큐(303)에 대응하는 제2 비트(311)를 어서팅할 수 있다. 프로세서(308)는 두 개의 비트들(310 및 311) 모두를 검사하고 적어도 하나의 이용 가능한 엔트리를 갖는 임의의 큐로부터 하나 이상의 엔트리를 풀링하여(pull) 및 처리하는 것을 진행할 수 있다.
일부 실시예에서, 그리고 구현 세부사항에 따라, 공통(common) 레지스터에 그룹화된 다수의 큐들에 대한 비트들을 가짐으로써, 지연 시간을 줄이는 데 도움이 될 수 있다. 예를 들어, 공통 레지스터의 사용은 시스템 메모리, 캐시 메모리 등에 대한 액세스 횟수를 감소시킬 수 있으며, 프로세서는 큐들 중 어느 하나가 이용 가능한 엔트리를 가지고 있는 지의 여부를 판단할 수 있다. 더욱이, 공통 레지스터에 그룹화된 다수의 큐들에 대한 비트들을 가짐으로써, 또한 프로세서가 단일 명령어(single instruction)를 사용하여 이용 가능한 엔트리를 갖는 다음 큐를 효율적으로 검색할 수 있도록 하기 때문에 지연 시간을 줄일 수 있다. 예를 들어, 프로세서는 선행 제로 카운트 명령어, 후행 제로 카운트 명령어, 비트 스캔 명령어, ffs(find first set) 명령어 등과 같은 파인드-퍼스트 명령어를 사용할 수 있다.
도 1 내지 도 3에 도시된 실시예들은 본 개시에 따라 매우 다양한 방식으로 변경될 수 있다. 예를 들어,도 1 및 도 3에 도시된 실시예들은 각각 단일(single) QAM 모듈(104), QAM 레지스터(106) 및 프로세서(108)를 포함하지만, 다른 실시예에서는 이러한 구성요소들의 다양한 예들이 포함될 수 있다. 더욱이, QAM 모듈(104), QAM 레지스터(106) 및 프로세서(108)가 별도의 구성요소로 도시되어 있지만, 다른 실시예에서는 이들 구성요소 중 일부 또는 전부가 서로 및/또는 다른 구성요소와 통합될 수 있다.
도 4는 본 개시에 따른, 시스템을 통한 프로세스 및 데이터 흐름과 함께, 다수의 모듈들과 연관된 다수의 큐들에 대한 큐 가용성 모니터링을 갖는 시스템의 예시적인 실시예를 도시한다. 도 5는 본 개시에 따른 QAM 레지스터의 예시적인 실시예를 도시한다. 도 4에 도시된 시스템 및 데이터 흐름과 도 4에 도시된 QAM 레지스터는 서로 관련하여 사용될 수 있지만, 어느 쪽도 서로의 특정 세부 사항에 제한되지 않는다.
본 개시의 원리들의 일부를 도시하기 위해,도 4 및 5에 도시된 실시예들은 기저(underlying) 통신 인터페이스로서 PCIe(Peripheral Component Interconnect Express)를 사용하여 NVMe (Nonvolatile Memory Express) 프로토콜을 구현할 수 있는 SSD (solid state drive)의 맥락에서 설명될 수 있다. 그러나, 본 개시의 원리들은 이러한 구현 세부사항에 제한되지 않는다. 도 4에 도시된 구성요소들은 예를 들어 SSD용 저장 장치 컨트롤러(402)에 포함될 수 있다. 일부 실시예에서, 컨트롤러(402)는 예를 들어 FPGA 또는 ASIC 상에서 제조될 수 있다.
데이터 흐름 (1)에서, 예를 들어, 관리 명령 및/또는 I/O 명령과 같은 하나 이상의 명령이 제1 마스터 버스(406)를 통해 시스템에 연결될 수 있는 PCIe 인터페이스(미도시)를 통해 NVMe 프로토콜을 사용하여 호스트(404)로부터 수신될 수 있다. 제1 마스터 인터페이스(406)는 예를 들어, AMBA(Advanced Microcontroller Bus Architecture) 버스, AXI(Advanced eXtensible Interface) 버스 등을 사용하여 구현될 수 있다. PCIe 시스템을 위한 인터페이스를 제공하기 때문에, 제1 마스터 버스(406)는 PCIe 마스터 버스로 지칭될 수 있다.
데이터 흐름 (2)에서, PCIe 마스터 버스(406)를 통해 수신된 하나 이상의 명령은 하나 이상의 명령을 파싱할 수 있는 커맨드 디스패처(dispatcher) 모듈(408)로 전송될 수 있다. 예를 들어, 하나 이상의 명령이 호스트(404)에서 I/O 및/또는 관리자 전송 큐(administrative submission queue)로부터 가져올 수 있다(fetch). 커맨드 디스패처 모듈(408)은 시스템(400)에 대한 명령들을 저장하기 위해 임의의 개수의 연관된 큐들을 사용할 수 있다. 이 예시적인 실시예에서, 커맨드 큐들 CMD0, CMD1, CMD2 및 CMD3을 포함하는 커맨드 디스패처 모듈(408)과 관련된 4개의 큐들이 있을 수 있다. 커맨드 큐들은 예를 들어, 쓰기 큐, 긴급 쓰기 큐(urgent write queue), 읽기 큐 및 긴급 읽기 큐(urgent read queue)와 같은 목적으로 사용될 수 있다. 커맨드 큐들 CMD0, CMD1, CMD2, CMD3 각각은 도 5에 도시된 바와 같이 QAM 레지스터(500)에서 대응하는 비트를 가질 수 있다.
일부 실시예에서, 커맨드 큐들 CMD0, CMD1, CMD2 및 CMD3은 커맨드 디스패처 모듈(408)에 위치한 큐들로 구현될 수 있다. 추가적으로 또는 대안적으로, 커맨드 큐들 CMD0, CMD1, CMD2 및 CMD3는 이하 더 상세히 설명되는 바와 같이 하나 이상의 프로세서 코어(422)와 연관될 수 있는 하나 이상의 강결합된 메모리(420) 내의 큐들(424)로 구현될 수 있다.
데이터 흐름 (3)에서, QAM 모듈(410)은 커맨드 큐들 CMD0, CMD1, CMD2 및 CMD3을 모니터링하고, 예를 들어 장치 컨트롤러(402) 내의 시스템 메모리의 특수 기능 레지스터를 사용하여 구현될 수 있는 QAM 레지스터(412)의 해당 비트들을 업데이트 할 수 있다. QAM 레지스터(412)는 예를 들어 도 5에 도시된 QAM 레지스터(500)와 유사한 방식으로 구성될 수 있다.
데이터 흐름 (3.1)에서, QAM 모듈(410)은 DMA 읽기/쓰기 매니저 모듈(414)에 의해 사용될 수 있는 하나 이상의 큐를 모니터링하고 QAM 레지스터(412)에서 대응하는 비트를 업데이트할 수 있다. DMA 매니저 모듈(414)은 예컨대, NVMe 프로토콜을 통한 호스트와의 프론트-엔드 DMA 트랜잭션들 및/또는 예컨대, 플래시 변환 계층(FTL)을 통한 플래시 메모리 모듈과의 백-엔드 DMA 트랜잭션을 구현할 수 있다. 이 예시적인 실시예에서, DMA 큐들 DMA0, DMA1, DMA2, DMA3 및 DMA4를 포함하는 DMA 매니저 모듈(414)과 관련된 5개의 큐들이 있을 수 있다. DMA 큐들은 예를 들어, 쓰기 전송 큐, 읽기 전송 큐, 쓰기 FTL 큐, 읽기 분리 완료 큐(read discrete done queue), 및/또는 쓰기 분리 완료 큐(write discrete done queue)와 같은 목적으로 사용될 수 있습니다. DMA 큐들 DMA0, DMA1, DMA2, DMA3 및 DMA4 각각은 예를 들어,도 5에 도시된 QAM 레지스터(500)와 유사한 방식으로 구성될 수 있는 QAM 레지스터(412)에 대응하는 비트를 가질 수 있다.
데이터 흐름 (3.2)에서, QAM 모듈(410)은 TQ(transfer Quene) 읽기/쓰기 매니저 모듈(416)에 의해 사용될 수 있는 하나 이상의 큐를 모니터링하고 QAM 레지스터(412)에서 대응하는 비트를 업데이트할 수 있다. 이 예시적인 실시예에서, TQ 큐들 TQ0 및 TQ1을 포함하는 TQ 매니저 모듈(416)과 연관된 2 개의 큐들이 있을 수 있다. TQ 큐들은 예컨대, 쓰기 부분 전송 완료 큐(write partial transfer done queue) 및/또는 읽기 부분 전송 완료 큐(read partial transfer done queue)와 같은 목적으로 사용될 수 있다. TQ 큐들 TQ0 및 TQ1 각각은 예를 들어,도 5에 도시된 QAM 레지스터(500)와 유사한 방식으로 구성될 수 있는 QAM 레지스터(412)에 대응하는 비트를 가질 수 있다.
하나 이상의 강결합된 메모리들(420) 및 연관된 프로세서 코어들(422) 중 하나만이 도 4에 도시되어 있더라도, 임의의 개수의 강결합된 메모리들(420) 및/또는 연관된 프로세서 코어들(422)이 포함될 수 있다. 일부 실시예에서, 강결합된 메모리들(420) 및/또는 관련 프로세서 코어들(422) 각각은 시스템 마스터 버스(418)에 인터페이스될 수 있다. 일부 실시예에서, 강결합된 메모리(420)와 프로세서 코어(422) 사이에 일대일 대응, 즉 코어 당 하나의 강결합된 메모리가 있을 수 있다. 다른 실시예에서, 하나 이상의 코어들이 하나 이상의 메모리들과 함께 동작하도록 임의의 배열로 구성될 수 있다. 더욱이, 일부 실시예에서, 커맨드 큐들 CMD0 내지 CMD3, DMA 큐들 DMA0 내지 DMA4 및 TQ 큐들 TQ0 및 TQ1과 같은 큐들은 임의의 개수의 강결합된 메모리들(420) 사이에서 큐(424)로서 분배될 수 있고, 상기 큐들의 엔트리들은 임의의 개수의 프로세서 코어들(422)에 의해 처리될 수 있다.
일부 실시예에서, 프로세스 흐름 (6)에서, 하나 이상의 프로세서 코어(422)에 의해 실행되는 명령어들(예를 들어, 펌웨어)은 시스템 마스터 버스(418)를 통해 QAM 레지스터(412)에 액세스함으로써 큐 (424)에 이용 가능한 엔트리가 있는지 여부를 판단할 수 있다. 시스템 마스터 버스(418)는 예컨대, AMBA 버스, AXI 버스 등을 사용하여 구현될 수 있다. 명령어를 실행하는 하나 이상의 프로세서 코어(422)는 QAM 레지스터(412)의 대응하는 비트들에 의해 표시된 바와 같이 큐(424)에서 이용 가능할 수 있는 하나 이상의 엔트리를 처리하도록 진행할 수 있다. 예를 들어, 명령어들을 실행하는 프로세서 코어(422)는 커맨드 큐들 CMD0 내지 CMD3에서 하나 이상의 명령을 처리할 수 있다. 유사하게, 명령어를 실행하는 하나 이상의 프로세서 코어(422)는 DMA 큐들 DMA0 내지 DMA4 및/또는 TQ 큐들 TQ0 및 TQ1의 하나 이상의 요청에 응답하여 자원을 관리 및/또는 할당할 수 있다.
일부 실시예에서, QAM 레지스터(412)가 하나 이상의 강결합된 메모리들(420)의 하나 이상의 QAM 섀도우 레지스터(QAM shadow register)(426)에 섀도 잉(예를 들어, 연속적으로 복사)되는 데이터 흐름들 (4) 및 (5)가 구현될 수 있다. 이 섀도잉 동작은 시스템 마스터 버스(418) 상에서 수행된다. 예를 들어, 일부 실시예에서, QAM 레지스터(412)가 갱신될 때마다, QAM 모듈(410)은 하나 이상의 QAM 섀도우 레지스터(426)의 업데이트를 개시할 수 있다. 강결합된 메모리(420)와 관련된 프로세서 코어(422)는 QAM 섀도우 레지스터(426)의 내용을 읽을 수 있다. 일부 실시예에서, 그리고 구현 세부사항에 따라, QAM 레지스터(412)를 하나 이상의 QAM 섀도우 레지스터(426)로 섀도 잉하는 것은, 예를 들어 하나 이상의 프로세서 코어(422)가 QAM 레지스터(412)의 정보에 액세스할 수 있게 함으로써 지연 시간을 줄일 수 있다.
일부 실시예에서, 그리고 구현 세부사항에 따라, 큐들 CMD0 내지 CMD3, DMA0 내지 DMA4 및/또는 TQ0 및 TQ1에 대응하는 비트들을 공통 QAM 레지스터(412)(및/또는 하나 이상의 새도우 레지스터(424))로 통합함으로써 하나 이상의 프로세서 코어(422)가 이용 가능한 엔트리를 갖는 다음 큐를 찾기 위해 파인드-퍼스트 명령어와 같은 효율적인 비트 조작 명령어(bit manipulation instruction)를 사용할 수 있게 함으로써 지연 시간을 줄일 수 있다. 예를 들어, 프로세서 코어들(422), CLZ(Count Leading Zeros) 또는 CTZ(Count Trailing Zeros) 명령어를 위한 하나 이상의 RISC (Reduced Instruction Set Computer) 프로세서 코어들을 사용하는 구현은 이용 가능한 엔트리를 갖는 첫번째 큐를 찾는 데 사용될 수 있다.
일부 실시예에서, 커맨드 디스패처 모듈(408), QAM 모듈(410), DMA 매니저 모듈(414) 및/또는 TQ 매니저 모듈(416)과 같은 구성요소 중 하나 이상은 주로 하드웨어로 구현될 수 있으며, 이는 구현 세부사항에 따라 비교적 빠른 동작을 제공할 수 있는 전용 하드웨어의 사용을 가능하게 할 수 있다. 상기 구성요소들 중 하나 이상을 구현하는 데 사용될 수 있는 하드웨어의 예로는 조합 로직, 순차 로직, 타이머, 카운터, 레지스터, 게이트 어레이, CPLD(complex programmable logic device), FPGA, ASICS, 하나 이상의 상태 머신 등을 포함한다. 그러나 일부 실시예에서, 이러한 구성요소들 중 하나 이상은 소프트웨어(예컨대, 프로세서에 의해 실행 가능한 소프트웨어) 또는 하드웨어와 소프트웨어의 조합으로 구현될 수 있다.
일부 실시예에서,도 4에 도시된 구성 요소들에 추가하여, 저장 장치 컨트롤러(402)는 하나 이상의 프로세서 코어들(422)에 의해 예컨대, 시스템 마스터 인터페이스(418)를 통해 액세스될 수 있는 SRAM, DRAM, 추가 주변기기, FTL 등과 같은 추가 구성요소를 포함할 수 있다.
도 4에 도시된 실시예가 특정 개수 및/또는 타입의 프로세서, 모듈, 큐, 인터페이스 및 기타 구성요소 등으로 도시되었지만, 다른 실시예에서는 임의의 개수 및/또는 타입의 프로세서, 모듈, 큐, 인터페이스 및 기타 구성요소 등이 사용될 수 있다.
도 6은 본 개시에 따른 큐 가용성 모니터링을 위한 방법의 다른 실시예의 흐름도를 도시한다. 상기 방법(600)은 동작(602)에서 시작할 수 있다. 동작 604에서, 상기 방법은 큐 가용성 모듈에서 큐를 모니터링할 수 있다. 동작 606에서, 상기 방법은 큐 가용성 모듈에서 큐의 이용 가능한 엔트리에 기초하여 레지스터를 갱신할 수 있다. 동작 608에서, 상기 방법은 프로세서에서 레지스터를 검사할 수 있다. 동작 610에서, 프로세서는 레지스터의 상태에 기초하여 이용 가능한 엔트리를 처리할 수 있다. 상기 방법은 동작 612에서 종료될 수 있다.
여기에 설명된 임의의 다른 실시예들뿐만 아니라 도 2에 도시된 실시예와 관련하여 설명된 동작 및/또는 구성요소는 예시적인 동작 및/또는 구성요소이다. 일부 실시예에서, 일부 동작 및/또는 구성요소는 생략될 수 있고 및/또는 다른 동작 및/또는 구성요소가 포함될 수 있다. 더욱이, 일부 실시예에서, 동작들 및/또는 구성요소들의 시간적 및/또는 공간적 순서가 변경될 수 있다.
전술한 실시예들은 다양한 구현 세부사항들과 관련하여 설명되었지만, 본 개시의 원리들은 이들 또는 어떤 다른 특정 세부사항에 제한되지 않는다. 예를 들어, 일부 기능은 특정 구성요소에 의해 구현되는 것으로 설명되었지만, 다른 실시예에서, 상기 기능은 서로 다른 위치에 있고 다양한 사용자 인터페이스들을 갖는 서로 다른 시스템들 및 구성요소들 사이에 분배될 수 있다. 특정 실시예들은 특정 프로세스, 단계 등을 갖는 것으로 설명되었지만, 이들 용어들은, 또한 특정 프로세스, 단계 등이 다수의 프로세스들, 단계들 등으로 구현될 수 있는 실시예들 또는 다수의 프로세스들, 단계들이 단일 프로세스, 단계 등에 통합될 수 있는 실시예들을 포괄할 수 있다. 구성요소 또는 엘리먼트에 대한 언급은 구성요소 또는 엘리먼트의 일부만을 나타낼 수 있다. 예를 들어, 집적 회로에 대한 언급은 집적 회로의 전부 또는 일부만을 나타낼 수 있고, 블록에 대한 언급은 전체 블록 또는 하나 이상의 서브 블록을 나타낼 수 있다. 본 개시 및 청구범위에서 "제1" 및 "제2" 와 같은 용어들의 사용은 이들이 한정하는 사물들(things)을 구별하기 위한 목적일 뿐이고 문맥에서 달리 명확히 하지 않는 한 공간적 또는 시간적 순서를 나타내지 않을 수 있다. 일부 실시 예에서, "에 기초하여(based on)"는 "적어도 부분적으로 기초하여"를 의미할 수 있다. 일부 실시예에서, "디스에이블되는 것"은 "적어도 부분적으로 디스에이블되는 것"을 의미할 수 있다. 제1 요소(thing)의 언급은 제2 요소(thing)의 존재를 내포하지 않을 수 있다. 섹션 표제 등과 같은 다양한 구조적 지원이 편의상 제공될 수 있지만, 이러한 지원 및 본 개시의 원리에 따라 배열된 주제(subject matter)는 이러한 구조적 지원에 의해 제한되지 않는다.
전술한 다양한 세부사항 및 실시예는 본 특허 개시의 발명 원리에 따라 추가 실시예를 생성하기 위해 결합될 수 있으며, 때로는 상승적인 결과를 갖는다. 본 특허 개시의 발명 원리는 본 발명의 개념을 벗어나지 않고 구성적으로 및 세부적으로 변형될 수 있으므로, 이러한 변경 및 수정은 이하 청구범위 내에 있는 것으로 간주된다.
102: 큐
104: 큐 가용성 모니터(QAM) 모듈
106: QAM 레지스터
107: 큐 관리 모듈
108: 프로세서

Claims (10)

  1. 큐 가용성 모듈이 엔트리가 큐에서 이용 가능함을 결정하는 단계;
    엔트리가 큐에서 이용 가능하다고 결정하는 것에 기초하여 레지스터의 비트를 어서팅하는 단계;
    프로세서가 상기 비트가 어서팅됨을 결정하는 단계; 및
    상기 프로세서가 상기 비트가 어서팅됨을 결정한 것에 기초하여 상기 큐의 상기 엔트리를 처리하는 단계를 포함하는 방법.
  2. 제1항에 있어서,
    상기 프로세서에 관련된 강결합된 메모리에 상기 레지스터를 저장하는 단계를 더 포함하는 방법.
  3. 제2항에 있어서,
    상기 강결합된 메모리에서 상기 큐를 저장하는 단계를 더 포함하는 방법.
  4. 제1항에 있어서,
    상기 큐는 제1 큐이며, 상기 비트는 제1 비트이며, 상기 방법은
    상기 큐 가용성 모듈이 엔트리가 제2 큐에서 이용 가능함을 결정하는 단계;
    엔트리가 상기 제2 큐에서 이용 가능하다고 결정하는 것에 기초하여 상기 레지스터의 제2 비트를 어서팅하는 단계;를 더 포함하는 방법.
  5. 제4항에 있어서,
    파인드-퍼스트 명령어(find-first instruction)를 사용하여 상기 레지스터의 상기 제1 비트를 찾는 단계를 더 포함하는 방법.
  6. 제4항에 있어서,
    상기 프로세서가 상기 제2 비트가 어서팅됨을 결정하는 단계; 및
    상기 프로세서가 상기 제2 비트가 어서팅됨을 결정한 것에 기초하여 상기 제2 큐의 상기 엔트리를 처리하는 단계를 더 포함하는 방법.
  7. 하나 이상의 엔트리들을 보유하도록 구성된 큐;
    상기 큐에서 하나 이상의 엔트리들의 가용성을 나타내는 비트를 포함하는 레지스터;
    상기 큐를 모니터링하고 하나 이상의 엔트리들이 상기 큐에서 이용 가능하다고 결정하는 것에 기초하여 상기 레지스터의 상기 비트를 어서팅하도록 구성된 큐 가용성 모듈;
    상기 레지스터를 검사하고 상기 레지스터의 상기 비트가 어서팅됨을 결정하는 것에 기초하여 상기 큐의 엔트리를 처리하도록 구성된 프로세서를 포함하는 시스템.
  8. 제7항에 있어서,
    상기 큐 가용성 모듈은 시스템 버스를 통해 상기 프로세서에 결합되며;
    상기 레지스터는 상기 시스템 버스의 프로세서측에 저장되는 시스템.
  9. 제7항에 있어서,
    상기 레지스터는 상기 프로세서와 관련된 강결합된 메모리에 저장되는 시스템.
  10. 제7항에 있어서,
    상기 큐는 제1 큐이며, 상기 비트는 제1 비트이며,
    상기 시스템은 하나 이상의 엔트리들을 보유하도록 구성된 제2 큐를 더 포함하고,
    상기 큐 가용성 모듈은 상기 제2 큐를 모니터링하고 하나 이상의 엔트리들이 상기 제2 큐에서 이용 가능하다고 결정하는 것에 기초하여 상기 레지스터의 상기 제2 비트를 어서팅하도록 더 구성되며,
    상기 프로세서는 상기 레지스터를 검사하고 상기 레지스터의 상기 제2 비트가 어서팅됨을 결정하는 것에 기초하여 상기 제2 큐의 엔트리를 처리하도록 더 구성되는 시스템.
KR1020210073744A 2020-06-18 2021-06-07 큐 가용성 모니터링을 위한 시스템, 방법 및 장치 KR20210156759A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202063041113P 2020-06-18 2020-06-18
US63/041,113 2020-06-18
US17/001,674 US11467843B2 (en) 2020-06-18 2020-08-24 Systems, methods, and devices for queue availability monitoring
US17/001,674 2020-08-24

Publications (1)

Publication Number Publication Date
KR20210156759A true KR20210156759A (ko) 2021-12-27

Family

ID=79023545

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210073744A KR20210156759A (ko) 2020-06-18 2021-06-07 큐 가용성 모니터링을 위한 시스템, 방법 및 장치

Country Status (2)

Country Link
US (3) US11467843B2 (ko)
KR (1) KR20210156759A (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11604743B2 (en) * 2020-08-31 2023-03-14 International Business Machines Corporation Input/output queue hinting for resource utilization
JP2022048716A (ja) * 2020-09-15 2022-03-28 キオクシア株式会社 ストレージシステム

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6618376B2 (en) * 2001-03-14 2003-09-09 Occam Networks ATM utopia bus snooper switch
US8542693B2 (en) * 2007-08-01 2013-09-24 Texas Instruments Incorporated Managing free packet descriptors in packet-based communications
US20140258680A1 (en) * 2013-03-05 2014-09-11 Qualcomm Incorporated Parallel dispatch of coprocessor instructions in a multi-thread processor
US9436634B2 (en) 2013-03-14 2016-09-06 Seagate Technology Llc Enhanced queue management
US9558132B2 (en) 2013-08-14 2017-01-31 Intel Corporation Socket management with reduced latency packet processing
WO2015121912A1 (ja) 2014-02-12 2015-08-20 株式会社日立製作所 データ記憶装置
US9927983B2 (en) 2015-09-28 2018-03-27 Sandisk Technologies Llc Methods, systems and computer readable media for intelligent fetching of data storage device commands from submission queues
US10394678B2 (en) 2016-12-29 2019-08-27 Intel Corporation Wait and poll instructions for monitoring a plurality of addresses
US10466903B2 (en) 2017-03-24 2019-11-05 Western Digital Technologies, Inc. System and method for dynamic and adaptive interrupt coalescing
US10310996B2 (en) 2017-05-31 2019-06-04 International Business Machines Corporation Hardware queue manager with water marking
US10489056B2 (en) 2017-11-09 2019-11-26 Nvidia Corporation Queue manager for streaming multiprocessor systems
US10649822B2 (en) 2018-06-29 2020-05-12 Hewlett Packard Enterprise Development Lp Event ingestion management

Also Published As

Publication number Publication date
US12001846B2 (en) 2024-06-04
US20210397456A1 (en) 2021-12-23
US20240320010A1 (en) 2024-09-26
US20230108597A1 (en) 2023-04-06
US11467843B2 (en) 2022-10-11

Similar Documents

Publication Publication Date Title
JP6944983B2 (ja) ハイブリッドメモリ管理
US10860326B2 (en) Multi-threaded instruction buffer design
US12001846B2 (en) Systems, methods, and devices for queue availability monitoring
US8117389B2 (en) Design structure for performing cacheline polling utilizing store with reserve and load when reservation lost instructions
US7600076B2 (en) Method, system, apparatus, and article of manufacture for performing cacheline polling utilizing store with reserve and load when reservation lost instructions
CN106897230B (zh) 用于处理原子更新操作的装置和方法
US9390015B2 (en) Method for performing cacheline polling utilizing a store and reserve instruction
US7581067B2 (en) Load when reservation lost instruction for performing cacheline polling
US8190794B2 (en) Control function for memory based buffers
US20180276128A1 (en) Methods for performing a memory resource retry
US9009420B2 (en) Structure for performing cacheline polling utilizing a store and reserve instruction
JP2024054306A (ja) ハードウェアベースのメモリ圧縮
US10580110B2 (en) Hardware structure to track page reuse
US9983874B2 (en) Structure for a circuit function that implements a load when reservation lost instruction to perform cacheline polling
US8719542B2 (en) Data transfer apparatus, data transfer method and processor
JP2009521054A (ja) ダイナミックキャッシュ管理装置及び方法
JP2007207249A (ja) ミス衝突処理状態でのキャッシュ・ヒットのための方法、システムおよびマイクロプロセッサ
US11436150B2 (en) Method for processing page fault by processor
US10169235B2 (en) Methods of overriding a resource retry
US9558119B2 (en) Main memory operations in a symmetric multiprocessing computer
US12099456B2 (en) Command processing circuitry maintaining a linked list defining entries for one or more command queues and executing synchronization commands at the queue head of the one or more command queues in list order based on completion criteria of the synchronization command at the head of a given command queue
WO2020190516A2 (en) Bulk memory initialization
JP2014032555A (ja) キャッシュメモリ制御装置およびキャッシュメモリ制御方法

Legal Events

Date Code Title Description
A201 Request for examination