KR20240048519A - 메모리 대역폭 제어를 위한 방법들 및 시스템들 - Google Patents

메모리 대역폭 제어를 위한 방법들 및 시스템들 Download PDF

Info

Publication number
KR20240048519A
KR20240048519A KR1020247006319A KR20247006319A KR20240048519A KR 20240048519 A KR20240048519 A KR 20240048519A KR 1020247006319 A KR1020247006319 A KR 1020247006319A KR 20247006319 A KR20247006319 A KR 20247006319A KR 20240048519 A KR20240048519 A KR 20240048519A
Authority
KR
South Korea
Prior art keywords
memory
data access
level
request
bandwidth usage
Prior art date
Application number
KR1020247006319A
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
Priority claimed from US17/666,438 external-priority patent/US11899964B2/en
Application filed by 퀄컴 인코포레이티드 filed Critical 퀄컴 인코포레이티드
Publication of KR20240048519A publication Critical patent/KR20240048519A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0846Cache with multiple tag or data arrays being simultaneously accessible
    • G06F12/0848Partitioned cache, e.g. separate instruction and operand caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/152Virtualized environment, e.g. logically partitioned system

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)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

전자 디바이스의 리소스들은 복수의 클라이언트들에 의해 활용될 복수의 리소스 부분들로 파티셔닝된다. 각각의 리소스 부분은 각자의 클라이언트에 배정되고, 각자의 파티션 식별자(ID)를 갖고, 복수의 메모리 블록들에 대해 추적된 복수의 메모리 대역폭 사용량 상태들에 대응한다. 각각의 리소스 부분에 대해, 메모리 대역폭 사용량 상태들 각각은 각자의 메모리 블록과 연관되고, 각자의 메모리 블록에 액세스하기 위해 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 적어도 어느 정도가 사용되는지를 나타낸다. 사용량 레벨이, 메모리 대역폭 사용량 상태들에 기초하여 각각의 리소스 파티션에 대해 결정되고, 크레디트 카운트를 조정하도록 적용된다. 크레디트 카운트가 요청 발행 임계치를 초과하여 조정될 때, 각자의 파티션 ID에 대한 메모리 액세스 요청 큐로부터 다음 데이터 액세스 요청이 발행된다.

Description

메모리 대역폭 제어를 위한 방법들 및 시스템들
관련 출원
본 출원은 2021년 9월 1일자로 출원된 발명의 명칭이 "Methods and Systems for Memory Bandwidth Control"인 미국 가특허출원 제63/239,702호, 2021년 10월 1일자로 출원된 발명의 명칭이 "Methods and Systems for Memory Bandwidth Control"인 미국 가특허출원 제63/251,517호, 및 2021년 10월 1일자로 출원된 발명의 명칭이 "Methods and Systems for Memory Bandwidth Control"인 미국 가특허출원 제63/251,518호에 대한 우선권을 주장하며, 이들 각각은 이로써 그 전체가 참조에 의해 통합된다.
본 출원은 또한, 2022년 2월 7일자로 출원된, 발명의 명칭이 "Methods and Systems for Memory Bandwidth Control"인 미국 특허출원 제17/666,438호에 대한 우선권을 주장하며, 이는 이로써 그 전체가 참조에 의해 통합된다.
기술분야
본 출원은 대체적으로 다수의 클라이언트들에게 계산 및 저장 리소스들을 제공하는 마이크로프로세서의 하나 이상의 프로세싱 클러스터들 외부의 메모리에 대한 메모리 액세스들을 제어하기 위한 방법들, 시스템들, 및 디바이스들을 포함하는, 그러나 이들에 제한되지 않는 마이크로프로세서 기술에 관한 것이다.
더 느린 메모리 또는 캐시로부터 더 빠른 로컬 캐시로의 캐시 프리페칭 및 마이크로프로세서의 개별 프로세서 유닛들의 동작들에 의해 요구된 규칙적인 메모리 액세스들 둘 모두를 용이하게 하기 위해 컴퓨터 시스템의 마이크로프로세서에는 대량의 트래픽이 종종 존재한다. 프로세서 클러스터(즉, 멀티코어 마이크로프로세서)의 맥락에서, 마이크로프로세서들의 계산 및 저장 리소스들은 이들 리소스들의 상이한 부분들로 다수의 테넌트(tenant)들 또는 클라이언트들을 후원하기 위해 파티셔닝될 수 있다. 멀티코어 마이크로프로세서의 각각의 프로세서 클러스터에 대해 상이한 클라이언트들과 연관된 캐시 프리페칭 및 규칙적인 메모리 액세스들을 효율적으로 관리하는 전자 디바이스 또는 시스템을 제공하는 것이 매우 바람직할 것이다.
첨부된 청구항들의 범주 내의 시스템들, 방법들 및 디바이스들의 다양한 구현들 각각은 여러 개의 양태들을 가지며, 그 양태들 중 어떠한 단일 양태도 본 명세서에 설명된 속성들을 단독으로 담당하지는 않는다. 첨부된 청구범위의 범주를 제한하지 않고서, 본 개시내용을 고려한 후에, 그리고 특히 "발명을 실시하기 위한 구체적인 내용"이라는 제목의 섹션을 고려한 후에, 전자 디바이스의 상이한 클라이언트들의 메모리 대역폭 사용량 상태들에 기초하여 프로세싱 클러스터 외부의 메모리 블록들(예컨대, 이중 데이터 레이트 동기식 동적 랜덤 액세스 메모리(Double Data Rate Synchronous Dynamic Random-Access Memory, DDR SDRAM))에 대한 메모리 요청 액세스들을 관리하기 위해 일부 구현들의 양태들이 어떻게 사용되는지를 이해할 것이다. 전자 디바이스의 리소스들은 상이한 클라이언트들에 의해 활용된 리소스 부분들로 파티셔닝된다. 각각의 리소스 부분에 대해 메모리 대역폭 사용량 상태들이 추적되어, 메모리 블록들에 액세스하기 위해 각자의 리소스 부분에 배정된 메모리 액세스 대역폭들 중 어느 정도가 사용되는지를 실시간으로 모니터링할 수 있다. 메모리 액세스 요청 큐에서 각자의 리소스 부분과 연관된 다음 데이터 액세스 요청(next data access request)을 발행할지 여부를 제어하기 위해, 리소스 부분의 메모리 대역폭 사용량 상태들로부터 사용량 레벨이 도출된다. 일부 구현들에서, 각각의 리소스 부분에 대해, 메모리 블록들의 더 낮은 사용량 레벨 및/또는 낮은 사용량 레벨에 머무르는 더 긴 지속기간은 다음 데이터 액세스 요청을 발행할 더 높은 가능성으로 이어진다. 이들 수단에 의해, 상이한 클라이언트들과 연관된 데이터 액세스 요청들은 메모리 블록들의 이들 클라이언트들의 기존 사용량 레벨들에 기초하여 효율적으로 그리고 개별적으로 관리될 수 있다.
일 양태에서, 메모리 액세스를 관리하기 위한 방법이 전자 디바이스에서 구현된다. 전자 디바이스는 하나 이상의 프로세싱 클러스터들 및 복수의 메모리 블록들을 포함하고, 각각의 프로세싱 클러스터는 하나 이상의 각자의 프로세서들을 포함하고 메모리 블록들 중 적어도 하나의 메모리 블록에 커플링된다. 본 방법은, 전자 디바이스의 리소스들을 복수의 클라이언트들에 의해 활용될 복수의 리소스 부분들로 파티셔닝하는 단계를 포함한다. 각각의 리소스 부분은 각자의 클라이언트에 배정되고, 각자의 파티션 식별자(identifier, ID)를 갖는다. 본 방법은, 복수의 메모리 블록들에 대한 복수의 클라이언트들과 연관된 복수의 데이터 액세스 요청들을 수신하는 단계를 추가로 포함한다. 본 방법은, 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 메모리 블록들에 대응하는 복수의 메모리 대역폭 사용량 상태들을 추적하는 단계, 및 복수의 메모리 대역폭 사용량 상태들로부터 각자의 파티션 ID와 연관된 사용량 레벨을 결정하는 단계를 추가로 포함한다. 각각의 메모리 대역폭 사용량 상태는 각자의 메모리 블록과 연관되고, 각자의 메모리 블록에 액세스하기 위해 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 적어도 어느 정도가 사용되는지를 나타낸다. 본 방법은, 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 사용량 레벨에 기초하여 크레디트 카운트(credit count)를 조정하는 단계, 조정된 크레디트 카운트를 요청 발행 임계치와 비교하는 단계, 및 크레디트 카운트가 요청 발행 임계치보다 더 크다는 결정에 따라, 메모리 액세스 요청 큐에서 각자의 파티션 ID와 연관된 다음 데이터 액세스 요청을 발행하는 단계를 추가로 포함한다.
일부 상황들에서, 본 방법은, 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 크레디트 카운트가 요청 발행 임계치 미만이라는 결정에 따라, 크레디트 카운트가 요청 발행 임계치보다 크도록 조정될 때까지 각자의 파티션 ID의 메모리 액세스 요청 큐로부터 임의의 데이터 액세스 요청을 발행하는 것을 유보하는 단계를 추가로 포함한다.
다른 양태에서, 메모리 액세스를 관리하기 위한 방법이 제1 메모리에서 구현된다. 제1 메모리는 전자 디바이스 내의 하나 이상의 프로세싱 클러스터들 및 복수의 메모리 블록들에 커플링된다. 본 방법은, 복수의 클라이언트들과 연관된 복수의 데이터 액세스 요청들을 복수의 메모리 블록들로 포워딩하는 단계를 포함한다. 전자 디바이스의 리소스들은 복수의 클라이언트들에 의해 활용될 복수의 리소스 부분들로 파티셔닝되고, 각각의 리소스 부분은 각자의 클라이언트에 배정되고 각자의 파티션 ID를 갖는다. 본 방법은, 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 메모리 블록들에 액세스하기 위해 각자의 ID와 연관된 데이터 액세스 요청들의 서브세트를 식별하는 단계, 및 메모리 블록들에 대응하는 복수의 메모리 대역폭 사용량 상태들을 추적하는 단계를 추가로 포함한다. 각각의 메모리 대역폭 사용량 상태는 각자의 메모리 블록과 연관되고, 각자의 메모리 블록에 액세스하기 위해 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 적어도 어느 정도가 사용되는지를 나타낸다. 본 방법은, 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 데이터 액세스 요청들의 서브세트 각각에 응답하여, 각자의 데이터 액세스 요청이 대응하는 메모리 블록에 액세스하기 위한 것이라고 결정하는 단계, 대응하는 메모리 블록의 메모리 대역폭 사용량 상태를 수신하는 단계, 및 대응하는 메모리 블록의 메모리 대역폭 사용량 상태를 하나 이상의 프로세싱 클러스터들에 보고하는 단계를 추가로 포함한다.
또 다른 양태에서, 메모리 사용량을 추적하기 위한 방법이 메모리 시스템에서 구현된다. 메모리 시스템은, 전자 디바이스 내의 제1 메모리를 통해 하나 이상의 프로세싱 클러스터들에 커플링되고, 메모리 블록을 포함한다. 본 방법은, 메모리 블록에 대한 복수의 클라이언트들과 연관된 데이터 액세스 요청들의 세트를 수신하는 단계를 포함한다. 리소스들은 복수의 클라이언트들에 의해 활용될 복수의 리소스 부분들로 파티셔닝되고, 각각의 리소스 부분은 각자의 클라이언트에 배정되고 각자의 파티션 ID를 갖는다. 본 방법은, 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 메모리 블록에 액세스하기 위해 각자의 ID와 연관된 데이터 액세스 요청들의 서브세트를 식별하는 단계, 및 각자의 파티션 ID와 연관된 메모리 대역폭 사용량 상태를 추적하는 단계를 포함한다. 메모리 대역폭 사용량 상태는, 메모리 블록에 액세스하기 위해 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 적어도 어느 정도가 사용되는지를 나타낸다. 본 방법은, 데이터 액세스 요청들의 세트 각각에 응답하여, 메모리 대역폭 사용량 상태를 하나 이상의 프로세싱 클러스터들에 보고하는 단계를 추가로 포함한다.
다른 구현들 및 이점들은 본 명세서 내의 설명들 및 도면들을 고려하여 당업자에게 명백할 수 있다.
도 1은 일부 구현들에 따른, 통상적인 전자 디바이스 내의 예시적인 시스템 모듈의 블록도이다.
도 2는 일부 구현들에 따른, 하나 이상의 프로세싱 클러스터들을 갖는 예시적인 전자 디바이스의 블록도이다.
도 3a 및 도 3b는 일부 구현들에 따른, 프로세싱 클러스터 외부의 메모리 블록들에 저장된 데이터에 액세스하기 위한 요청들을 제어 및 추적하는 예시적인 전자 디바이스들의 블록도들이다.
도 4는 일부 구현들에 따른, 메모리 대역폭 사용량 상태들에 기초하여 메모리 블록들에 저장된 데이터에 액세스하기 위한 리소스 파티션의 요청들을 제어하기 위해 프로세싱 클러스터의 제어기에 의해 구현된 예시적인 프로세스를 예시한다.
도 5a 및 도 5b는 일부 구현들에 따른, 개별 메모리 블록의 메모리 대역폭 사용량 상태 및 메모리의 현재 혼잡 레벨을 추적하기 위해 메모리에 의해 구현되는 예시적인 프로세스들을 예시한다.
도 6a는 일부 구현들에 따른, 각각의 메모리 블록의 현재 혼잡 레벨 및 메모리 대역폭 사용량 상태들을 추적하기 위해 캐시에 의해 구현되는 예시적인 프로세스를 예시한다.
도 6b는 일부 구현들에 따른, 캐시 자체의 현재 혼잡 레벨을 추적하기 위해 캐시에 의해 구현되는 예시적인 프로세스를 예시한다.
도 6c는 일부 구현들에 따른, 메모리 대역폭 사용량 상태들, 각각의 메모리 블록의 현재 혼잡 레벨, 및 캐시 자체의 현재 혼잡 레벨을 추적하기 위해 캐시에 의해 구현되는 또 다른 예시적인 프로세스를 예시한다.
도 7a, 도 7b, 및 도 7c는 각각 일부 구현들에 따른, 복수의 리소스 파티션들의 데이터 액세스 요청들을 관리하기 위한 프로세싱 클러스터, 캐시, 및 메모리 블록들에 저장된 데이터의 예시적인 데이터 구조들이다.
도 8은 일부 구현들에 따른, 프로세싱 클러스터에서 캐시 프리페칭을 제어하기 위해 프로세싱 클러스터의 혼잡 레벨을 결정하는 예시적인 방법을 예시한다.
도 9는 일부 구현들에 따른, 개별 프로세싱 클러스터에서 캐시 프리페칭을 제어하기 위해 시스템 혼잡 레벨을 결정하는 예시적인 방법을 예시한다.
도 10은 일부 구현들에 따른, 전자 디바이스에 의해 메모리(104)에 대한 메모리 액세스들을 관리하는 방법의 흐름도이다.
도 11은 일부 구현들에 따른, 하나 이상의 프로세싱 클러스터들 및 복수의 메모리 블록들에 커플링된 제1 메모리(예컨대, 캐시)에서 메모리 대역폭 사용량을 추적하는 방법의 흐름도이다.
도 12는 일부 구현들에 따른, 메모리 시스템의 메모리 블록의 메모리 대역폭 사용량을 추적하는 방법의 흐름도이다.
이러한 예시적인 실시 형태들 및 구현들은, 본 개시내용을 제한하거나 한정하지 않고 오히려 그의 이해를 돕기 위한 예들을 제공하기 위해 언급된다. 추가적인 실시 형태들이 발명을 실시하기 위한 구체적인 내용에서 논의되고, 추가의 설명이 거기에 제공된다. 다른 구현들 및 이점들은 본 명세서 내의 설명들 및 도면들을 고려하여 당업자에게 명백할 수 있다.
이제 특정 실시 형태들이 상세히 참조될 것이며, 그 예들은 첨부 도면들에 예시되어 있다. 하기의 상세한 설명에서는, 본 명세서에 제시된 주제를 이해하는 것을 돕기 위해 다수의 비제한적인 특정 세부사항들이 기술된다. 그러나, 다양한 대안들이 청구항들의 범주를 벗어나지 않으면서 사용될 수 있고, 주제가 이러한 특정 세부사항들 없이 실시될 수 있음이 당업자에게 명백할 것이다.
도 1은 일부 구현들에 따른, 통상적인 전자 디바이스 내의 예시적인 시스템 모듈(100)의 블록도이다. 이러한 전자 디바이스 내의 시스템 모듈(100)은 적어도, 시스템 온 칩(SoC)(102), 프로그램들, 명령들 및 데이터를 저장하기 위한 메모리 모듈들(104), 입력/출력(I/O) 제어기(106), 네트워크 인터페이스들(108)과 같은 하나 이상의 통신 인터페이스들, 및 이들 컴포넌트들을 상호연결하기 위한 하나 이상의 통신 버스들(140)을 포함한다. 일부 구현들에서, I/O 제어기(106)는 SoC(102)가 범용 직렬 버스 인터페이스를 통해 I/O 디바이스(예컨대, 키보드, 마우스 또는 트랙 패드(track-pad))와 통신할 수 있게 한다. 일부 구현들에서, 네트워크 인터페이스들(108)은 Wi-Fi, 이더넷 및 블루투스 네트워크들에 대한 하나 이상의 인터페이스들을 포함하고, 이들 각각은 전자 디바이스가 외부 소스, 예컨대 서버 또는 다른 전자 디바이스와 데이터를 교환할 수 있게 한다. 일부 구현들에서, 통신 버스들(140)은 시스템 모듈(100)에 포함된 다양한 시스템 컴포넌트들 사이의 통신들을 상호연결 및 제어하는 회로부(때때로 칩셋으로 불림)를 포함한다.
일부 구현들에서, 메모리 모듈들(104)(예컨대, 도 2 내지 도 11의 메모리(104), 도 12의 메모리 시스템)은 DRAM, SRAM, DDR RAM 또는 다른 랜덤 액세스 솔리드 스테이트 메모리 디바이스들과 같은 고속 랜덤 액세스 메모리를 포함한다. 일부 구현들에서, 메모리 모듈들(104)은 비휘발성 메모리, 예컨대 하나 이상의 자기 디스크 저장 디바이스들, 광학 디스크 저장 디바이스들, 플래시 메모리 디바이스들, 또는 다른 비휘발성 솔리드 스테이트 저장 디바이스들을 포함한다. 일부 구현들에서, 메모리 모듈들(104), 또는 대안적으로 메모리 모듈들(104) 내의 비휘발성 메모리 디바이스(들)는 비일시적 컴퓨터 판독가능 저장 매체를 포함한다. 일부 구현들에서, 메모리 슬롯들이 메모리 모듈들(104)을 수용하기 위한 시스템 모듈(100) 상에 예비된다. 일단 메모리 슬롯들에 삽입되면, 메모리 모듈들(104)은 시스템 모듈(100)에 통합된다.
일부 구현들에서, 시스템 모듈(100)은 이하로부터 선택되는 하나 이상의 컴포넌트들을 추가로 포함한다:
Figure pct00001
전자 디바이스에서, SoC(102)와, 메모리 모듈들(104)을 포함한 메모리 컴포넌트들 사이의 통신을 제어하는 메모리 제어기(110);
전자 디바이스에 데이터를 저장하기 위해 집적 회로 어셈블리들을 적용하고, 많은 구현들에서, NAND 또는 NOR 메모리 구성들에 기초하는 솔리드 스테이트 드라이브(SSD)들(112);
전자기계 자기 디스크들에 기초하여 디지털 정보를 저장 및 검색하기 위해 사용되는 종래의 데이터 저장 디바이스인 하드 드라이브(114);
외부 전력 공급을 수신하도록 전기적으로 커플링되는 전력 공급 커넥터(116);
전자 디바이스 내의 다양한 컴포넌트들 또는 회로들(예컨대, SoC(102))에 의해 요구되는 바와 같이, 수신된 외부 전력 공급을 다른 원하는 DC 전압 레벨들, 예컨대 5V, 3.3V 또는 1.8V로 변조하는 전력 관리 집적 회로(power management integrated circuit, PMIC)(118);
출력 이미지들의 하나 이상의 디스플레이 디바이스들에 대한 피드를 그들의 바람직한 이미지/비디오 포맷들에 따라 생성하는 그래픽 모듈(120); 및
컴퓨터 프로그램들의 제어 하에서 전자 디바이스로의 그리고 그로부터의 오디오 신호들의 입력 및 출력을 용이하게 하는 사운드 모듈(122).
통신 버스들(140)은 또한, 컴포넌트들(110 내지 122)을 포함한 다양한 시스템 컴포넌트들 사이의 통신들을 상호연결 및 제어한다는 것에 유의한다.
또한, 당업자는, 메모리 모듈들(104) 내의 그리고 SSD들(112) 내의 비일시적 컴퓨터 판독가능 저장 매체들에 정보를 저장하기 위해 새로운 데이터 저장 기술들이 개발됨에 따라, 다른 비일시적 컴퓨터 판독가능 저장 매체들이 사용될 수 있다는 것을 알고 있다. 이러한 새로운 비일시적 컴퓨터 판독가능 저장 매체들은, 비록 각자의 데이터 저장 기술들이 현재 개발 중이고 아직 상용화되지 않았더라도, 생물학적 재료들, 나노와이어들, 탄소 나노튜브들 및 개별 분자들로부터 제조된 것들을 포함하지만 이에 제한되지 않는다.
일부 구현들에서, SoC(102)는 하나 이상의 마이크로프로세서들 또는 중앙 프로세싱 유닛들, 메모리, 입력/출력 포트들 및 2차 저장소를 단일 기판 상에 통합하는 집적 회로 상에서 구현된다. SoC(102)는 PMIC(118)에 의해 제공된 하나 이상의 내부 공급 전압들을 수신하도록 구성된다. 일부 구현들에서, SoC(102) 및 PMIC(118) 둘 모두는 메인 로직 보드 상에, 예컨대 메인 로직 보드의 2개의 별개의 영역들 상에 장착되고, 메인 로직 보드에 형성된 전도성 와이어들을 통해 서로 전기적으로 커플링된다. 상기에 설명된 바와 같이, 이러한 배열은, SoC의 성능을 손상시킬 수 있는, 예컨대 내부 전압 공급부에서 전압 강하를 야기할 수 있는 기생 효과들 및 전기적 노이즈를 도입한다. 대안적으로, 일부 구현들에서, SoC(102) 및 PMIC(118)는 집적 반도체 디바이스에 수직으로 배열되어, 그들이 메인 로직 보드에 형성되지 않은 전기 연결부(electrical connection)들을 통해 서로 전기적으로 커플링되도록 한다. SoC(102) 및 PMIC(118)의 그러한 수직 배열은 SoC(102)와 PMIC(118) 사이의 전기 연결부들의 길이를 감소시키고, 메인 로직 보드의 전도성 와이어들에 의해 야기되는 성능 저하를 회피할 수 있다. 일부 구현들에서, SoC(102) 및 PMIC(118)의 수직 배열은 SoC(102)와 PMIC(118) 사이의 제한된 공간에 박막 인덕터들을 통합함으로써 부분적으로 용이해진다.
도 2는 일부 구현들에 따른, 하나 이상의 프로세싱 클러스터들(202)(예컨대, 제1 프로세싱 클러스터(202-1), 제M 프로세싱 클러스터(202-M))을 갖는 예시적인 전자 디바이스(200)의 블록도이다. 전자 디바이스(200)는 프로세싱 클러스터들(202)에 더하여 캐시(220) 및 메모리(104)를 추가로 포함한다. 캐시(220)는 SOC(102) 상에서 프로세싱 클러스터들(202)에 커플링되는데, 이는 SOC(102) 외부에 있는 메모리(104)에 추가로 커플링된다. 메모리(104)는 복수의 메모리 블록들(222)을 포함하고, 선택적으로 동적 랜덤 액세스 메모리(dynamic random-access memory, DRAM)이다. 각각의 프로세싱 클러스터(202)는 하나 이상의 프로세서들(204), 클러스터 캐시(212), 및 제어기(216)를 포함한다. 클러스터 캐시(212)는 하나 이상의 프로세서들(204)에 커플링되고, 하나 이상의 프로세서들(204)에 대한 하나 이상의 요청 큐들(214)을 유지한다. 각각의 프로세서(204)는 각자의 프로세서(204)와 연관된 캐시 프리페칭을 제어하기 위해 각자의 프로세싱 클러스터(202)의 제어기(216)에 커플링되는 각자의 프리페처(208)를 추가로 포함한다. 일부 구현들에서, 각각의 프로세서(204)는, 명령 캐시 및 데이터 캐시로 선택적으로 분할되는 코어 캐시(218)를 추가로 포함하고, 코어 캐시(218)는 각자의 프로세서(204)에 의해 즉시 실행될 수 있는 명령들 및 데이터를 저장한다.
일례에서, 제1 프로세싱 클러스터(202-1)는 제1 프로세서(204-1), ...., 제N 프로세서(204-N), 제1 클러스터 캐시(212-1), 및 제1 제어기(216-1)를 포함하고, 여기서 N은 1보다 큰 정수이다. 제1 클러스터 캐시(212-1)는 하나 이상의 제1 요청 큐들(214-1)을 갖고, 각각의 제1 요청 큐는 제1 프로세싱 클러스터(202-1)의 프로세서들(204)의 서브세트로부터 수신된 요구 요청들 및 프리페치 요청들의 큐를 포함한다. 일부 구현들에서, SOC(102)는 단일 프로세싱 클러스터(202-1)만을 포함한다. 대안적으로, 일부 구현들에서, SOC(102)는 적어도 추가적인 프로세싱 클러스터(202), 예컨대 제M 프로세싱 클러스터(202-M)를 포함한다. 제M 프로세싱 클러스터(202-M)는 제1 프로세서(206-1),...., 제N' 프로세서(206-N'), 제M 클러스터 캐시(212-M), 및 제M 제어기(216-M)를 포함하며, 여기서 N'은 1보다 큰 정수이고, 제M 클러스터 캐시(212-M)는 하나 이상의 제M 요청 큐들(214-M)을 갖는다.
일부 구현들에서, 하나 이상의 프로세싱 클러스터들(202)은 전자 디바이스에 대한 중앙 프로세싱 유닛(CPU)을 제공하도록 구성되고, 캐시들의 계층구조와 연관된다. 예를 들어, 캐시들의 계층구조는 그들의 별개의 동작 속도(operational speed)들 및 크기들에 기초하여 구별되는 3개의 레벨들을 포함한다. 본 출원의 목적들을 위해, 메모리(캐시 메모리를 포함함)의 "속도"에 대한 언급은 메모리에 데이터를 기입하거나 그로부터 데이터를 판독하는 데 필요한 시간과 관련되고(예컨대, 더 빠른 메모리는 더 느린 메모리보다 짧은 기입 및/또는 판독 시간들을 가짐), 메모리의 "크기"에 대한 언급은 메모리의 저장 용량과 관련된다(예컨대, 더 작은 메모리는 더 큰 메모리보다 적은 저장 공간을 제공함). 코어 캐시(218), 클러스터 캐시(212), 및 캐시(220)는 제1 레벨(L1) 캐시, 제2 레벨(L2) 캐시, 및 제3 레벨(L3) 캐시에 각각 대응한다. 각각의 코어 캐시(218)는 각자의 프로세서(204)에 의해 직접 실행될 명령들 및 데이터를 보유하고, 메모리의 3개의 레벨들 중에서 가장 빠른 동작 속도 및 가장 작은 크기를 갖는다. 각각의 프로세싱 클러스터(202)에 대해, 클러스터 캐시(212)는 코어 캐시(218)보다 동작적으로 더 느리고 크기가 더 크고, 코어 캐시(218)에 보유된 데이터보다 각자의 프로세싱 클러스터(202)의 프로세서(204)에 의해 액세스될 가능성이 낮은 데이터를 보유한다. 캐시(220)는 복수의 프로세싱 클러스터들(202)에 의해 공유되고, 각각의 코어 캐시(218) 및 클러스터 캐시(212)보다 크기가 더 크고, 속도가 더 느리다. 각각의 프로세싱 클러스터(202)에서, 각자의 제어기(216)는 캐시(220) 및 메모리(104)에 대한 메모리 액세스들과 연관된 시스템 혼잡 레벨 및 클러스터 캐시(212)와 연관된 로컬 클러스터 혼잡 레벨을 모니터링하고, 시스템 및/또는 클러스터 혼잡 레벨들에 기초하여 코어 캐시들(218) 및/또는 클러스터 캐시(212)에 대한 명령들 및 데이터의 프리페치들을 제어한다. 각각의 개별 프로세서(204)는 또한 각자의 클러스터 캐시(212)로부터 각자의 개별 코어 캐시(218)로의 명령들 및 데이터의 프리페치들을 제어하기 위해 프로세서 혼잡 레벨을 모니터링한다.
일부 구현들에서, 제1 프로세싱 클러스터(202-1)의 제1 클러스터 캐시(212-1)는 동일한 프로세싱 클러스터 내의 단일 프로세서(204-1)에 커플링되고, 임의의 다른 프로세서들(예컨대, 204-N)에는 커플링되지 않는다. 일부 구현들에서, 제1 프로세싱 클러스터(202-1)의 제1 클러스터 캐시(212-1)는 동일한 프로세싱 클러스터 내의 다수의 프로세서들(204-1, 204-N)에 커플링된다. 일부 구현들에서, 제1 프로세싱 클러스터(202-1)의 제1 클러스터 캐시(212-1)는 동일한 프로세싱 클러스터(202-1) 내의 하나 이상의 프로세서들(204)에 커플링되고, 제1 프로세싱 클러스터(202-1) 이외의 임의의 클러스터 내의 프로세서들(예컨대, 클러스터(202-M) 내의 프로세서들(206))에는 커플링되지 않는다. 그러한 경우들에서, 제1 프로세싱 클러스터(202-1)의 제1 클러스터 캐시(212-1)는 때때로 제2 레벨 캐시로 지칭된다.
각각의 프로세싱 클러스터(202)에서, 각각의 요청 큐(214)는 선택적으로 각자의 프로세싱 클러스터(202)의 프로세서들(204)의 서브세트로부터 수신된 요구 요청들 및 프리페치 요청들의 큐를 포함한다. 각자의 프로세서(204)로부터 수신된 각각의 데이터 액세스 요청은 요청 큐들(214) 중 하나의 요청 큐로 분배된다. 일부 구현들에서, 요청 큐(214)는 특정 프로세서(204)로부터 수신된 요청들만을 수신한다. 일부 구현들에서, 요청 큐(214)는 프로세싱 클러스터(202) 내의 하나 초과의 프로세서(204)로부터 요청들을 수신하여, 요청 부하가 복수의 요청 큐들(214) 사이에서 균형을 이룰 수 있게 한다. 구체적으로, 일부 상황들에서, 요청 큐(214)는 동일한 프로세싱 클러스터(202) 내의 상이한 프로세서들(204)로부터 하나의 유형의 데이터 액세스 요청들(예컨대, 프리페치 요청들)만을 수신한다. 요청 큐(들)(214)에서의 각각의 데이터 액세스 요청이, 메모리 판독 또는 기록 동작을 구현하기 위해 캐시(220) 및/또는 메모리(104)에 액세스하도록 제어기(216-1)의 제어 하에 발행된다. 일부 구현들에서, 캐시(220)에 의해 만족되지 않은 데이터 액세스 요청들만이 메모리(104)로 추가로 전송되고, 그러한 데이터 액세스 요청들 각각은 메모리(104)의 각자의 메모리 블록(222)에 의해 만족될 수 있다.
각각의 프로세싱 클러스터(202)에서, 제어기(216)는 클러스터 캐시(212)의 출력, 클러스터 캐시(212) 내의 요청 큐들(214), 및 프로세싱 클러스터(202)의 하나 이상의 프로세서들(204)에 커플링된다. 구체적으로, 제어기(216)는 클러스터 캐시(212)의 출력을 통해 캐시(220) 및 메모리(104) 둘 모두에 커플링된다. 전자 디바이스(200)의 계산 및 저장 리소스들은 복수의 클라이언트들(224)에 의해 활용될 복수의 리소스 부분들로 파티셔닝된다. 각각의 리소스 부분은 각자의 클라이언트(224)에 배정되고, 각자의 파티션 식별자(ID)를 갖는다. 요청 큐들(214)은 메모리(104) 내의 복수의 메모리 블록들(222) 또는 캐시(220)에 대한 메모리 액세스들을 요청하기 위해 복수의 클라이언트들(224)과 연관된 복수의 데이터 액세스 요청들을 포함한다. 각자의 파티션 ID를 갖는 각각의 리소스 부분(즉, 각각의 클라이언트(224))에 대해, 제어기(216)는 메모리(104)의 상이한 메모리 블록들(222)에 대응하는 복수의 메모리 대역폭 사용량 상태들(즉, 도 4의 402)을 추적한다. 각각의 메모리 대역폭 사용량 상태는 메모리(104)의 각자의 메모리 블록(222)과 연관되고, 메모리(104)의 각자의 메모리 블록(222)에 액세스하기 위해 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 적어도 어느 정도가 사용되는지를 나타낸다. 제어기(216)는 복수의 메모리 대역폭 사용량 상태들로부터의 각각의 파티션 ID와 연관된 사용량 레벨(즉, 도 4의 406)을 결정하고, 포괄적인 사용량 레벨에 기초하여 크레디트 카운트(즉, 도 4의 408)를 조정하고, 크레디트 카운트에 기초하여 요청 큐(214) 내의 각각의 파티션 ID(즉, 각각의 클라이언트(224))와 연관된 다음 데이터 액세스 요청(즉, 도 4의 412)을 발행한다.
일부 구현들에서, 클러스터 레벨에서, 제어기(216)는 요청 큐(214)로부터 수신된 신호들에 기초하여 대응하는 프로세싱 클러스터(202)의 로컬 클러스터 혼잡 레벨을 모니터링한다. 구체적으로, 제어기(216)는 프로세싱 클러스터(202) 내의 하나 이상의 프로세서들(204)로부터 클러스터 캐시(212)로 전송된 복수의 데이터 액세스 요청들이 클러스터 캐시(212)에 의해 만족되지 않은 정도에 기초하여 프로세싱 클러스터(202)의 혼잡 레벨을 결정한다. 프로세싱 클러스터(202)의 혼잡 레벨이, 프로세싱 클러스터(202)의 혼잡 레벨이 제1 클러스터 혼잡 임계치 초과일 것을 요구하는 제1 혼잡 기준을 만족한다는 결정에 따라, 제어기(216)는, 하나 이상의 프로세서들(204) 중 제1 각자의 프로세서(예컨대, 프로세서(204-1))로 하여금, 클러스터 캐시(212)에 대한 프리페치 요청들을 적어도 제1 임계 품질의 프리페치 요청들로 제한하게 한다(즉, 프리페치 요청들을 높은 품질 프리페치들로 제한하게 함). 구체적으로, 일례에서, 제어기(216)는 프리페치 스로틀링(prefetch throttling)을 인에이블하기 위해 신호 또는 다른 정보를 프로세서들(204)(예컨대, 프로세서들(204-1) 내의 프리페처(208-1))로 송신하여, 적어도 제1 임계 품질의 프리페치 요청들만이 클러스터 캐시(212)로 전송되도록 한다. 이것은 선택적으로, 제1 프리페치 스로틀 모드와는 상이한 제2 프리페치 스로틀링 모드(M2)에 대응하고, 클러스터 캐시(212)로부터의 프로세서들(204)에 의한 프리페칭을 도 8의 적어도 제1 임계 품질(804)의 프리페치 요청들로 제한한다.
대안적으로, 프로세싱 클러스터(202)의 혼잡 레벨이 제1 혼잡 기준을 만족하지 않는다(예컨대, 프로세싱 클러스터(202)의 혼잡 레벨이 제1 클러스터 혼잡 임계치 미만임)는 결정에 따라, 제어기(216)는, 하나 이상의 프로세서들로 하여금, 클러스터 캐시(212)에 대한 프리페치 요청들을 적어도 제1 임계 품질의 프리페치 요청들로 제한하게 하는 것을 보류한다. 예를 들어, 제어기(216)는, 프로세서들(204)로 하여금, 클러스터 캐시(212)에 대한 프리페치 요청들을 완전히 제한하게 하는 것을 보류하여, 임의의 품질의 어떠한 프리페치 요청들도 제한되지 않도록 한다. 이것은 선택적으로 제1 프리페치 스로틀링 모드(M1)에 대응하며, 여기서 클러스터 캐시(212)로부터의 프로세서들(204)의 프리페칭은 도 8을 참조하여 설명된 바와 같이 제어기(216)에 의해 제한되지 않는다.
일부 구현들에서, 제1 클러스터 혼잡 임계치 미만의 혼잡 레벨은 클러스터 캐시(212)에서의 낮은 혼잡도를 나타내고, 제1 클러스터 혼잡 임계치 초과의 혼잡 레벨은 하나 이상의 더 높은 혼잡도들을 나타낸다. 하나 이상의 더 높은 혼잡도들이 단일의 높은 혼잡도에 대응하는 경우, 제1 클러스터 혼잡 임계치 초과의 혼잡 레벨은 이러한 높은 혼잡도를 나타낸다. 대조적으로, 하나 이상의 더 높은 혼잡도가 일 세트의 혼잡도들(예컨대, 중간, 높음, 매우 높음)에 대응하는 경우, 제1 클러스터 혼잡 임계치 초과의 혼잡 레벨은 일 세트의 혼잡도들 중 임의의 정도와 연관된다.
또한, 일부 구현들에서, 시스템 레벨에서, 제어기(216)는 클러스터 캐시(212)의 출력으로부터 수신된 시스템 비지 레벨 신호(system busy level signal)(즉, 현재 혼잡 레벨(504 또는 604))에 기초하여 프로세싱 클러스터(202)에 커플링된 메모리 시스템의 시스템 혼잡 레벨을 모니터링한다. 시스템 비지 레벨 신호는, 수신되었지만 캐시(220) 또는 메모리(104)에 의해 만족되지 않은 미해결 진행 중(outstanding in-flight) 요청들의 정보를 포함한다. 구체적으로, 제어기(216)는 캐시(220)에 의해 수신된 미해결 진행 중 요청들의 수에 기초하여 캐시(220)의 현재 혼잡 레벨(604)(예컨대, 도 6b의 HN[2])을 획득하고, 캐시(220)의 획득된 현재 혼잡 레벨(604)을 포함하는 제1 혼잡 레벨 이력(예컨대, 도 9의 이력(902))을 유지한다. 제어기(216)는 또한, 메모리(104)에 의해 수신된 미해결 진행 중 요청들의 수에 기초하여 메모리(104)의 현재 혼잡 레벨(504)(예컨대, 도 5b의 SN[2])을 획득하고, 메모리(104)의 현재 혼잡 레벨(504)을 포함하는 제2 혼잡 레벨 이력(예컨대, 도 9의 이력(904))을 유지한다. 일부 상황들에서, 캐시(220)에 의해 만족되지 않은 데이터 액세스 요청들이 메모리(104)로 추가로 전송되고, 따라서 캐시(220)로 전송된 데이터 액세스 요청들이 캐시(220)에 의해 만족되지 않은 정도에 기초하여 메모리(104)에 의해 수신된 미해결 진행 중 요청들의 수(즉, 현재 혼잡 레벨(504))가 결정된다.
제어기(216)는, 프로세싱 클러스터(202)로 하여금, 캐시(220)의 현재 혼잡 레벨(604) 및 메모리(104)의 현재 혼잡 레벨(504) 중 적어도 하나에 기초하여 프로세싱 클러스터(202)로부터의 프리페치 요청들을 제한하게 한다. 일부 구현들에서, 프로세싱 클러스터(202)로부터의 프리페치 요청들은 제1 혼잡 레벨 이력 및/또는 제2 혼잡 레벨 이력에 기초하여 제한된다. 일부 구현들에서, 제어기(216)는 제1 혼잡 레벨 이력에 기초하여 캐시(220)의 제1 혼잡 레벨(이는 복합 혼잡 레벨임)을 결정하도록 또는 제2 혼잡 레벨 이력에 기초하여 메모리(104)의 제2 혼잡 레벨(이는 복합 혼잡 레벨임)을 결정하도록 구성된다. 프로세싱 클러스터(202)로부터의 프리페치 요청들은, 제1 혼잡 레벨 및/또는 제2 혼잡 레벨에 기초하여 프로세싱 클러스터(202)의 합쳐진 요청 큐(들)(214)로부터 디스에이블될 수 있다. 일부 구현들에서, 제1 혼잡 레벨의 이력 및/또는 제2 혼잡 레벨의 이력은 제어기(216) 자체에 의해 유지된다. 추가적으로, 프리페치 품질들을 제어하기 위해 적용된 클러스터 혼잡 임계치(들)는 캐시(220) 및 메모리(104)의 제1 및/또는 제2 혼잡 레벨 이력들에 기초하여 설정된다. 캐시(220) 및 메모리(104)의 시스템 혼잡 레벨들의 적용에 대한 더 상세한 내용들은 도 8 및 도 9를 참조하여 하기에서 설명된다.
도 3a 및 도 3b는 일부 구현들에 따른, 프로세싱 클러스터(202) 외부의 메모리 블록들(222)에 저장된 데이터에 액세스하기 위한 요청들을 제어 및 추적하는 예시적인 전자 디바이스들(300, 350)의 블록도들이다. 전자 디바이스들(300, 350) 각각에서, 하나 이상의 프로세싱 클러스터들(202)은 복수의 메모리 블록들(222)을 포함하는 메모리(104)에 추가로 커플링되는 캐시(220)에 커플링된다. 각각의 프로세싱 클러스터(202)는 하나 이상의 프로세서들(204) 및 하나 이상의 프로세서들(204)에 커플링된 클러스터 캐시(212)를 포함한다. 각각의 프로세서(204)는 코어 캐시(218) 및 프리페처(208)를 추가로 포함하고, 클러스터 캐시(212)는 하나 이상의 요청 큐들(214) 및 제어기(216)를 추가로 포함한다. 코어 캐시(218), 클러스터 캐시(212), 및 캐시(220)는 프로세서(들)(204)에 명령들 및 데이터를 제공하기 위한 캐시들의 계층구조를 형성한다. 코어 캐시(218)는 각각의 프로세서(204)에 의해 직접적으로 실행될 명령들 및 데이터를 저장하도록 구성되고, 클러스터 캐시(212)는, 프로세서(204)에 의해 실행될 가능성이 적고 필요한 경우 코어 캐시(218)에 로딩될 명령들 및 데이터를 제공하도록 구성된다. 캐시(220)는, 클러스터 캐시(212)에 있는 것들보다 프로세서(204)에 의해 실행될 가능성이 적고 필요한 경우 클러스터 캐시(212)에 로딩될 명령들 및 데이터를 제공하도록 구성된다. 프로세싱 클러스터(202)의 클러스터 캐시(212)는, 사전정의된 기간 내에 하나 이상의 프로세서들(204)로부터 캐시(220)로 전송된 복수의 데이터 액세스 요청들을 추가로 포함하는, 즉 모든 요구 요청들 및 모든 프리페치 요청들을 포함하는 하나 이상의 데이터 액세스 요청 큐들(214)을 포함한다. 일부 구현들에서, 데이터 액세스 요청이 캐시(220)에 의해 만족되지 않은 경우, 그것은 메모리(104)의 복수의 메모리 블록들(222) 중 하나(예컨대, 제1 메모리 블록(222A))로 추가로 전송된다.
도 3a를 참조하면, 일부 구현들에서, 하나 이상의 데이터 액세스 요청 큐들(214) 내의 복수의 데이터 액세스 요청들은 메모리(104) 내의 제1 메모리 블록(222A)으로부터의 데이터 항목의 추출을 요청하도록 구성되는 판독 요청(302)을 포함한다. 판독 요청(302)은 복수의 클라이언트들(224) 중 하나(예컨대, 제1 클라이언트(224A))와 연관되고, 복수의 클라이언트들(224) 중 하나를 대신하여 프로세싱 클러스터(202)에 의해 이루어진다. 제어기(216)는 프로세싱 클러스터(202)를 제어하여, 판독 요청(302)을 캐시(220)에 발행한다. 캐시(220)는 판독 요청(302)을 제1 메모리 블록(222A)으로 포워딩한다. 판독 요청(302)을 수신할 시에, 제1 메모리 블록(222A)은 판독 요청에 의해 요청된 데이터 항목을 추출하고, 판독 요청이 복수의 클라이언트들(224) 중 하나와 연관된다고 결정하고, 복수의 클라이언트(224) 중 하나에 대해 로컬로 추적되었던 메모리 대역폭 사용량 상태(memory bandwidth usage state, MBUS)를 획득한다. 메모리 대역폭 사용량 상태(MBUS)는, 제1 메모리 블록(222A)에 액세스하기 위해 복수의 클라이언트들(224) 중 하나에 배정된 메모리 액세스 대역폭 중 적어도 어느 정도가 사용되는지를 나타낸다. 판독 요청(302)에 응답하여, 제1 메모리 블록(222A)은 요청된 데이터 항목을 프로세싱 클러스터(202)로 직접 전송한다. 일부 구현들에서, 복수의 클라이언트들(224) 중 하나의 메모리 대역폭 사용량 상태(MBUS)는 요청된 데이터 항목과 함께 프로세싱 클러스터(202)로 직접 전송된다. 대안적으로, 일부 구현들에서, 복수의 클라이언트들(224) 중 하나의 메모리 대역폭 사용량 상태(MBUS)는 캐시(220)로 전송되고, 캐시(220)는 메모리 대역폭 사용량 상태(MBUS)를 프로세싱 클러스터(202)로 포워딩한다. 추가적으로, 일부 구현들에서, 단일 판독 요청(302)에 응답하여, 복수의 클라이언트들(224) 중 하나의 메모리 대역폭 사용량 상태(MBUS)는 제1 메모리 블록(222A)에 의해 두 번, 즉 제1 메모리 블록(222A)으로부터 프로세싱 클러스터(202)로 직접적으로 그리고 캐시(220)를 통해 간접적으로 보고된다.
일부 구현들에서, 각각의 프로세싱 클러스터(202)의 하나 이상의 데이터 액세스 요청 큐들(214) 내의 복수의 데이터 액세스 요청들은 복수의 판독 요청들(302)을 포함하고, 각각의 판독 요청(302)은 메모리(104) 내의 각자의 메모리 블록(222)으로부터 각자의 데이터 항목의 추출을 요청하도록 구성된다. 각각의 판독 요청(302)은 각자의 클라이언트(224)와 연관되고, 각자의 클라이언트를 대신하여 프로세싱 클러스터(202)에 의해 이루어진다. 각각의 판독 요청(302)에 응답하여, 각자의 판독 요청(302)에 대응하는 메모리 블록(222)은 각자의 클라이언트(224)의 메모리 대역폭 사용량 상태(MBUS)를 캐시(220)를 통해 직접적으로 또는 간접적으로 프로세싱 클러스터(202)에 보고하고, 그에 의해 프로세싱 클러스터(202)가 복수의 클라이언트들(224)에 대한 복수의 메모리 대역폭 사용량 상태(MBUS)들을 추적할 수 있게 한다. 각각의 클라이언트(224)는 메모리(104)의 메모리 블록들(222)의 각자의 메모리 블록과 각각 연관된 메모리 대역폭 사용량 상태(MBUS)들의 서브세트에 대응한다. 이들 수단에 의해, 각각의 클라이언트(224)에 대해, 메모리(104)의 메모리 블록들(222)과 연관된 메모리 대역폭 사용량 상태(MBUS)들은 각자의 클라이언트(224)에 대한 프로세싱 클러스터(202)에 의해 발행된 판독 요청들(302)에 응답하여 업데이트된다.
도 3b를 참조하면, 일부 구현들에서, 하나 이상의 데이터 액세스 요청 큐들(214) 내의 복수의 데이터 액세스 요청들은 메모리(104) 내의 제1 메모리 블록(222A)으로의 데이터 항목의 저장을 요청하도록 구성되는 기록 요청(304)을 포함한다. 기록 요청(304)은 복수의 클라이언트들(224) 중 하나와 연관되고, 복수의 클라이언트들(224) 중 하나를 대신하여 프로세싱 클러스터(202)에 의해 이루어진다. 따라서, 기록 요청(304)은 복수의 클라이언트들(224) 중 하나에 배정된 저장 리소스들을 사용하여 구현된다. 제어기(216)는 프로세싱 클러스터(202)를 제어하여, 기록 요청(304)을 캐시(220)에 발행한다. 캐시(220)는 기록 요청(304)을 제1 메모리 블록(222A)으로 포워딩한다. 기록 요청(304)을 수신할 시에, 제1 메모리 블록(222A)은, 그것이 복수의 클라이언트들(224) 중 하나에 배정된 임의의 남아 있는 메모리 액세스 대역폭을 갖는지 여부에 따라 기록 요청(304)에 포함된 데이터 항목을 메모리 유닛에 선택적으로 기록하거나 또는 기록하지 않는다. 추가적으로, 제1 메모리 블록(222A)은, 기록 요청(304)이 복수의 클라이언트들(224) 중 하나와 연관된다고 결정하고, 복수의 클라이언트들(224) 중 하나에 대해 추적되었던 메모리 대역폭 사용량 상태(MBUS)를 획득한다. 기록 요청(304)에 응답하여, 제1 메모리 블록(222A)은, 데이터 항목이 제1 메모리 블록(222A)에 기록되었는지 여부를 나타내는 기록 확인 메시지를 캐시(220)로 전송한다. 기록 확인 메시지는 복수의 클라이언트들(224) 중 하나의 메모리 대역폭 사용량 상태(MBUS)를 추가로 포함한다. 캐시(220)는 복수의 클라이언트들(224) 중 하나에 의한 제1 메모리 블록(222A)의 메모리 대역폭 사용량 상태(MBUS)를 포함하는 기록 확인 메시지를 프로세싱 클러스터(202)로 포워딩한다.
일부 구현들에서, 하나 이상의 데이터 액세스 요청 큐들(214) 내의 복수의 데이터 액세스 요청들은 복수의 판독 요청들(304)을 포함하고, 각각의 기록 요청(304)은 메모리(104) 내의 각자의 메모리 블록(222)으로의 각자의 데이터 항목의 저장을 요청하도록 구성된다. 각각의 기록 요청(304)은 각자의 클라이언트(224)와 연관되고, 각자의 클라이언트(224)를 대신하여 프로세싱 클러스터(202)에 의해 이루어진다. 각각의 기록 요청(304)에 응답하여, 각자의 기록 요청(304)에 대응하는 메모리 블록(222)은 각자의 클라이언트(224)의 메모리 대역폭 사용량 상태(MBUS)를 캐시(220)를 통해 간접적으로 프로세싱 클러스터(202)에 보고한다. 이들 수단에 의해, 각각의 클라이언트(224)에 대해, 메모리(104)의 메모리 블록들(222)과 연관된 메모리 대역폭 사용량 상태들은 각자의 클라이언트(224)에 대한 프로세싱 클러스터(202)에 의해 발행된 기록 요청들(304)에 응답하여 업데이트된다.
도 4는 일부 구현들에 따른, 메모리 대역폭 사용량 상태들(402)에 기초하여 메모리 블록들(222)에 저장된 데이터에 액세스하기 위한 리소스 파티션의 요청들을 제어하기 위해 프로세싱 클러스터(202)의 제어기(216)에 의해 구현된 예시적인 프로세스(400)를 예시한다. 상기에 설명된 바와 같이, 전자 디바이스는 하나 이상의 프로세싱 클러스터들(202), 캐시(220), 및 메모리(104)를 포함한다. 그러한 계산 및 저장 리소스들은 복수의 클라이언트들(224) 사이에서 공유되고, 따라서 복수의 클라이언트들(224)에 의해 활용될 복수의 리소스 부분들로 파티셔닝된다. 각각의 리소스 부분은 각자의 클라이언트(224)에 배정되고, 각자의 리소스 부분 및 각자의 클라이언트(224)를 나타내는 각자의 파티션 식별자(ID)를 갖는다. 프로세스(400)는, 각자의 파티션 ID와 연관된 리소스 파티션이 배정되는 제1 클라이언트(224A)에 대한 프로세싱 클러스터(202)의 제어기(216)에 의해 구현된다. 각각의 클라이언트(224)는 선택적으로 전자 디바이스에 의해 제공된 컴퓨터 서비스에 가입한 개인 또는 기업체이다. 프로세싱 클러스터(202)의 제어기(216)는 제1 클라이언트(224A)를 포함하는 복수의 클라이언트들 각각에 대한 메모리 블록 사용량 테이블(401)을 저장한다.
구체적으로, 메모리 블록 사용량 테이블(401)은 복수의 행(row)들을 포함한다. 각각의 행은 메모리(104)의 메모리 블록들(222)의 각자의 메모리 블록에 대응하고, 메모리 블록들(222)에 대응하는 복수의 메모리 대역폭 사용량 상태들(402)을 저장 및 추적하도록 구성된다. 각각의 메모리 대역폭 사용량 상태(402)는, 각자의 메모리 블록(222)과 연관되고, 각자의 메모리 블록(222)에 액세스하기 위해 제1 클라이언트(224A)의 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 적어도 어느 정도(예컨대, 75%)가 사용되는지를 나타낸다. 예를 들어, 도 4를 참조하면, 메모리 블록 사용량 테이블(401)은 메모리(104)의 32개의 메모리 블록들(222)에 대응하는 32개의 행들을 포함한다. 각각의 행에 대해, 제1 열(column)은 각각의 메모리 블록(222)의 메모리 블록 식별을 나타내는 정수를 포함하고, 제2 열은 각자의 메모리 대역폭 사용량 상태(402), 예컨대 각자의 메모리 블록(222)에 액세스하기 위해 제1 클라이언트(224A)에 배정된 메모리 액세스 대역폭의 75% 초과가 사용되는지 여부를 나타내는 플래그를 포함한다. 적어도 메모리 블록 0 및 메모리 블록 31은 제1 클라이언트(224A)에 배정된 메모리 액세스 대역폭의 75% 초과를 사용했고, 적어도 메모리 블록 1은 제1 클라이언트(224A)에 배정된 메모리 액세스 대역폭의 75% 초과를 사용하지 않았다.
복수의 데이터 액세스 요청들이 프로세싱 클러스터(202)의 하나 이상의 요청 큐들(214) 내에서 대기하고 있다. 제어기(216)는 클록 주파수에 따라 동작하고, 메모리 블록들(222)의 메모리 대역폭 사용량 상태들(402)에 기초하여 복수의 데이터 액세스 요청들의 발행을 관리하도록 구성된다. 일부 상황들에서, 복수의 데이터 액세스 요청들은 하나 초과의 클라이언트(224)의 하나 초과의 리소스 파티션에 의해 생성되고, 제1 클라이언트(224A)의 리소스 파티션에 대한 데이터 액세스 요청들의 서브세트를 포함한다. 데이터 액세스 요청들의 서브세트는 제1 요청(404A) 및 제1 요청(404A) 이후의 제2 요청(404B)을 추가로 포함한다. 각각의 요청(404)은 선택적으로, 각자의 메모리 블록(222)으로부터 데이터 항목을 판독하기 위한 판독 요청(예컨대, 판독 요청(302))이거나 또는 각자의 메모리 블록(222)에 데이터 항목을 저장하기 위한 기록 요청(예컨대, 기록 요청(304))이다. 제어기(216)는 상이한 메모리 블록들(222)과 연관되어 메모리 블록 사용량 테이블(401)에 저장되는 메모리 대역폭 사용량 상태들(402)에 기초하여 상이한 메모리 블록들(222)에 액세스하기 위해 제1 클라이언트(224A)의 리소스 파티션과 연관된 데이터 액세스 요청들의 서브세트를 발행한다.
일부 구현들에서, 제어기(216)는 메모리 블록 사용량 테이블(401)에 저장된 복수의 메모리 대역폭 사용량 상태들(402)로부터 제1 클라이언트(224A)의 파티션 ID와 연관된 사용량 레벨(406)을 생성한다. 예를 들어, 사용량 레벨(406)은 제1 클라이언트(224A)의 파티션 ID에 배정된 메모리 액세스 대역폭의 75% 초과를 사용한 메모리 블록들(222)의 수, 즉 메모리 블록 사용량 테이블(401)의 제2 열에 있는 "Y"의 수와 동일하다. 더 구체적으로, 일례에서, 사용량 레벨(406)은 11과 동일하고, 32개의 메모리 블록들(222) 중 11개가 제1 클라이언트(224A)의 파티션 ID에 배정된 메모리 액세스 대역폭의 75% 초과를 사용하였다.
제어기(216)는 사용량 레벨(406)에 기초하여 크레디트 카운트(408)를 조정하고(예컨대, 누적함), 크레디트 카운트(408)를 요청 발행 임계치(410)와 비교하여 제1 클라이언트(224A)의 파티션 ID와 연관된 다음 데이터 액세스 요청(412)이 발행될 필요가 있는지 여부를 결정한다. 크레디트 카운트(408)가 요청 발행 임계치(410)를 초과하여 누적된 경우, 제1 클라이언트(224A)의 파티션 ID와 연관된 다음 데이터 액세스 요청(412)이 발행된다. 크레디트 카운트(408)는 선택적으로, 0으로 재설정되거나(414) 또는 사전정의된 값만큼(예컨대, 1만큼, 요청 발행 임계치(410)만큼) 감소된다. 반대로, 크레디트 카운트(408)가 요청 발행 임계치(410) 미만인 경우, 제어기(216)는, 크레디트 카운트(408)가 요청 발행 임계치(410)보다 크도록 조정될 때까지, 하나 이상의 요청 큐들(214)이 각자의 파티션 ID의 임의의 데이터 액세스 요청을 발행하는 것을 유보한다(416).
일부 구현들에서, 제어기(216)는 클록 주파수에 따라 적어도 부분적으로 사용량 레벨(406)에 기초하여 크레디트 카운트(408)를 조정한다. 제1 클라이언트(224A)와 연관된 파티션 ID에 대한 각자의 메모리 블록(222)에 액세스하기 위한 제1 요청(404A)이 발행된 후에, 제1 클라이언트(224A)와 연관된 메모리 블록 사용량 테이블(401)에 저장된 복수의 메모리 대역폭 사용량 상태들(402) 중 하나 이상이 업데이트된다. 메모리 대역폭 사용량 상태들(402)의 이러한 업데이트 이후 사전정의된 수의 클록 사이클들 후에, 메모리 블록 사용량 테이블(401)에 저장된 복수의 메모리 대역폭 사용량 상태들(402)로부터 사용량 레벨(406)이 결정된다. 또한, 메모리 대역폭 사용량 상태들(402)의 업데이트 이후 사전정의된 수의 클록 사이클 후에, 그리고 다음 데이터 액세스 요청(412)(예컨대, 제2 요청(404B))이 발행될 때까지, 크레디트 카운트(408)가 조정되고, 요청 발행 임계치와 주기적으로, 예컨대 각각의 후속 클록 사이클 동안 한 번 또는 5개 클록 사이클마다 한 번 비교된다.
일부 구현들에서, 메모리 대역폭 사용량 상태들(402)로부터 제1 클라이언트(224A)의 각자의 파티션 ID와 연관된 사용량 레벨(406)을 결정한 후에, 제어기(216)는 사용량 레벨(406)을 파티션 ID와 연관된 하나 이상의 사용량 임계치들(예컨대, 높은 사용량 임계치 High-SN 및 낮은 사용량 임계치 Low-SN)과 비교한다. 일부 구현들에서, 사용량 임계치 High-SN 또는 Low-SN은 상이한 클라이언트들(224)에 대해 가변한다. 대안적으로, 일부 구현들에서, 사용량 임계치 High-SN 또는 Low-SN은 상이한 클라이언트들(224)에 대해 동일하다. 사용량 레벨(406)이 제1 클라이언트(224A)의 높은 사용량 임계치 High-SN 이상이라는(418) 결정에 따라, 제어기(216)는, 제1 클라이언트(224A)의 각자의 파티션 ID에 대응하는 각자의 크레디트 단위(CU)만큼 크레디트 카운트(408)를 감소시킨다(420). 일부 구현들에서, 크레디트 카운트(408)는, 다음 데이터 액세스 요청(412)(예컨대, 제2 요청(404B))이 발행될 때까지 하나 이상의 클록 사이클들마다 주기적으로 각자의 크레디트 단위(CU)만큼 감소된다(422). 반대로, 사용량 레벨(406)이 제1 클라이언트의 낮은 사용량 임계치 Low-SN 이하라는(424) 결정에 따라, 제어기(216)는 파티션 ID에 대응하는 각자의 크레디트 단위만큼 크레디트 카운트(408)를 증가시킨다(426). 일부 구현들에서, 크레디트 카운트(408)는, 다음 데이터 액세스 요청(412)(예컨대, 제2 요청(404B))이 발행될 때까지 하나 이상의 클록 사이클들마다 주기적으로 각자의 크레디트 단위만큼 증가된다(428). 추가적으로, 사용량 레벨(406)이 높은 사용량 임계치 High-SN과 낮은 사용량 임계치 Low-SN 사이에 있다는 결정에 따라, 제어기(216)는 크레디트 카운트(408)를 유지한다.
각자의 클라이언트(224)(예컨대, 제1 클라이언트(224A))의 각각의 파티션 ID에 대해, 크레디트 카운트(408)는 제1 클라이언트(224A)의 데이터 액세스 요청들을 발행하기 위한 우선순위 레벨을 나타낸다. 일부 구현들에서, 제1 클라이언트의 사용량 레벨(406)은 높고(즉, 메모리 블록들(222)에 액세스하기 위한 그의 메모리 액세스 대역폭들에 실질적으로 가깝고), 실질적으로 높은 크레디트 카운트(408)는 여전히 제1 클라이언트(224A)와 연관된 다음 데이터 액세스 요청들(412)을 발행하는 상대적으로 높은 우선순위 레벨을 초래할 수 있다. 제1 클라이언트의 높은 사용량 레벨(406)에도 불구하고, 실질적으로 높은 크레디트 카운트(408) 때문에 다음 데이터 액세스(412)는 여전히 제1 클라이언트(224A)의 파티션 ID에 대해 발행된다. 반대로, 일부 구현들에서, 제1 클라이언트의 사용량 레벨(406)은 낮고(즉, 메모리 블록들(222)에 액세스하기 위한 그의 메모리 액세스 대역폭들로부터 실질적으로 더 멀고), 실질적으로 낮은 크레디트 카운트(408)는 여전히 제1 클라이언트(224A)와 연관된 다음 데이터 액세스 요청들(412)을 발행하는 상대적으로 낮은 우선순위 레벨을 초래할 수 있다. 제1 클라이언트의 낮은 사용량 레벨(406)에도 불구하고, 실질적으로 낮은 크레디트 단위(408) 때문에 다음 데이터 액세스 요청(412)은 여전히 제1 클라이언트(224A)의 파티션 ID에 대해 발행될 수 없다. 그러나, 일부 상황들 하에서, 제1 클라이언트의 낮은 사용량 레벨(406)에도 불구하고, 실질적으로 낮은 크레디트 단위(408)는 시간이 경과함에 따라 점차 증가하고, 다음 데이터 액세스 요청(412)이 제1 클라이언트(224A)의 파티션 ID에 대해 발행될 때까지 제1 클라이언트(224A)의 데이터 액세스 요청들을 발행하기 위한 상대적으로 낮은 우선순위 레벨도 마찬가지이다. 최악의 상황들에서, 제1 클라이언트의 사용량 레벨(406)은 높고(즉, 메모리 블록들(222)에 액세스하기 위한 그의 메모리 액세스 대역폭들에 실질적으로 가깝고), 실질적으로 낮은 크레디트 단위(408)는 제1 클라이언트(224A)와 연관된 다음 데이터 액세스 요청(412)을 발행하는 상대적으로 낮은 우선순위 레벨을 초래한다. 제어기(216)는, 다음 데이터 액세스 요청(412)이 제1 클라이언트(224A)의 파티션 ID에 대해 발행될 때까지 실질적으로 낮은 크레디트 카운트(408)가 시간 경과에 따라 점진적으로 증가하기를 대기한다. 그와 같이, 더 낮은 사용량 레벨(406) 및/또는 메모리 블록들의 낮은 사용량 레벨에 머무르는 더 긴 지속기간은 다음 데이터 액세스 요청(412)을 발행할 더 높은 가능성으로 이어진다.
제어기(216)가 각각의 요청(404)을 발행한 후에, 각자의 요청(404)은 캐시(220)에 의해 수신되고 메모리(104)의 대응하는 메모리 블록(222)으로 포워딩된다. 일부 구현들에서, 제1 클라이언트(224A)의 각자의 파티션 ID로부터 각자의 메모리 블록(222)으로 발행된 판독 요청(404)에 응답하여, 각자의 메모리 블록(222)은, 판독 요청에 의해 요청된 데이터 항목을 제공하는 것과 동시에, 각자의 메모리 블록(222)의 각자의 메모리 대역폭 사용량 상태(402)를 프로세싱 클러스터(202)에 직접 업데이트한다(430). 대안적으로, 일부 구현들에서, 제1 클라이언트(224A)의 각자의 파티션 ID로부터 발행된 판독 요청(404)에 응답하여, 각자의 메모리 블록(222)은 캐시(220)를 통해 각자의 메모리 블록(222)의 각자의 메모리 대역폭 사용량 상태(402)를 간접적으로 업데이트한다(432A). 추가적으로, 일부 구현들에서, 각자의 메모리 블록(222)의 각자의 메모리 대역폭 사용량 상태(402)는 메모리 블록 사용량 테이블(401)에서 두 번, 즉 메모리(104)로부터 직접적으로(430) 그리고 캐시(220)를 통해 간접적으로(432A) 업데이트된다. 판독 요청에 응답하여 제1 클라이언트(224A)와 연관된 메모리 대역폭 사용량 상태들(402)을 업데이트하는 것에 대한 더 상세한 내용들은 도 3a를 참조하여 상기에 논의된다.
또한, 일부 구현들에서, 제1 클라이언트(224A)의 각자의 파티션 ID로부터 각자의 메모리 블록(222)으로 발행된 각각의 기록 요청(404)에 응답하여, 각자의 메모리 블록(222)은 캐시(220)를 통해 각자의 메모리 블록(222)과 연관된 각자의 메모리 대역폭 사용량 상태(402)를 업데이트한다(432B). 기록 요청(404)에 대한 각자의 메모리 대역폭 사용량 상태(402)의 어떠한 직접적인 업데이트도 없다. 일부 구현들에서, 복수의 메모리 블록들(222)은, 캐시(220)에 의해 만족되지 않은, 하나 이상의 프로세싱 클러스터들(202)로부터 캐시(220)로 전송된 데이터 액세스 요청들을 수신하도록 구성된다. 기록 요청에 응답하여 제1 클라이언트(224A)와 연관된 메모리 대역폭 사용량 상태들(402)을 업데이트하는 것에 대한 더 상세한 내용들은 도 3b를 참조하여 상기에 논의된다.
일부 구현들에서, 메모리 블록들(222)과 연관된 메모리 대역폭 사용량 상태들(402) 각각은 다중비트 상태 번호로서 각자의 메모리 블록(222)에 의해 제공된다. 사용량 레벨(406)은, 메모리 대역폭 사용량 상태들(402)의 각자의 다중비트 상태 번호 중 몇 개가 사전정의된 값과 동일한지를 결정함으로써 결정된다. 예를 들어, 각자의 메모리 블록(222)의 각각의 메모리 대역폭 사용량 상태(402)는 2개의 비트들을 갖고, 사용량 레벨(406)은, 메모리 블록들(222)의 메모리 대역폭 사용량 상태들(402) 중 몇 개가 "11"과 동일한지에 기초하여 결정된다. 일부 구현들에서, 메모리 블록들(222)과 연관된 메모리 대역폭 사용량 상태들(402) 각각은 2개의 사전정의된 값들(예컨대, "Y", "N") 중 하나를 갖는 플래그이다.
도 5a 및 도 5b는 일부 구현들에 따른, 개별 메모리 블록(222)의 메모리 대역폭 사용량 상태(402) 및 메모리(104)의 현재 혼잡 레벨(504)을 추적하기 위해 메모리(104)에 의해 구현되는 예시적인 프로세스들(500, 550)을 예시한다. 메모리(104)는 복수의 메모리 블록들(222)을 포함한다. 메모리 제어기(110)는, 메모리(104)에 의해 수신된 데이터 액세스 요청들을 관리하고 메모리 대역폭 사용량 상태(402) 및 메모리(104)의 현재 혼잡 레벨(504)을 추적하기 위해 메모리 블록(222)에 커플링된다. 메모리 대역폭 사용량 상태(402)(즉, SN[0:1])는 제1 클라이언트(224A)의 각자의 파티션 ID와 연관되고, 제1 메모리 블록(222A)에 액세스하기 위해 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 적어도 어느 정도가 사용되는지를, 즉 제1 메모리 블록(222A)에 대한 제1 클라이언트(224A)의 파티션 ID의 평균 데이터 액세스 레벨을 나타낸다. 현재 혼잡 레벨(504)(즉, SN[2])은, 메모리(104)의 제2 요청 큐(510)에서 대기하고 있는 데이터 액세스 요청들의 제2 총 수(MCQ)가 외부 메모리 용량의 제2 사전정의된 부분(예컨대, 75%)을 초과하는지 여부를 나타낸다.
메모리 제어기(110)는, 프로세싱 클러스터(202)에 의해 발행된 데이터 액세스 요청들의 세트가 제1 메모리 블록(222A)과 연관되고, 제1 메모리 블록(222A)이 데이터 액세스 요청들의 세트를 수신한다고 결정한다. 데이터 액세스 요청들의 세트는 복수의 클라이언트들(224)과 연관되며, 여기서 이러한 제1 메모리 블록(222A)의 저장 능력을 포함하는 리소스들은 복수의 클라이언트들(224)에 의해 활용될 복수의 리소스 부분들로 파티셔닝된다. 각각의 리소스 부분은 각자의 클라이언트(224)에 배정되고, 각자의 클라이언트(224)의 각자의 파티션 ID를 갖는다. 제1 클라이언트(224A)의 경우, 제1 메모리 블록(222A)에 액세스하기 위한 데이터 액세스 요청들의 서브세트가 제1 클라이언트(224A)의 각자의 ID와 연관된 것으로서 식별된다. 제1 메모리 블록의 메모리 대역폭 사용량 상태(402) 중 하나가 제1 클라이언트(224A)의 각자의 파티션 ID에 대해 추적된다. 데이터 액세스 요청들의 세트 각각에 응답하여, 메모리 제어기(110)는 제1 메모리 블록(222A)을 대신하여 제1 클라이언트(224A)의 각자의 파티션 ID와 연관된 메모리 대역폭 사용량 상태(402)를 하나 이상의 프로세싱 클러스터(202)에 보고한다.
메모리 제어기(110)는 제1 클라이언트(224A)의 파티션 ID를 포함하는 각각의 파티션 ID에 대한 메모리 블록 사용량 윈도우(506)를 유지하고, 메모리 블록 사용량 윈도우(506)는 복수의 가장 최근의 연속적인 클록 사이클들에 대응한다. 메모리 블록 사용량 윈도우(506)에서, 제1 메모리 블록(222A) 내의 제3 수의 바이트들은 제2 수의 클록 사이클들 동안 제1 클라이언트(224A)의 각자의 파티션 ID에 의해 액세스되었다. 제1 클라이언트(224A)의 각자의 파티션 ID와 연관된 각각의 데이터 액세스 요청을 수신할 시에, 메모리 제어기(110)는 메모리 블록 사용량 윈도우(506)에서 제1 메모리 블록(222A) 내의 제1 클라이언트(224A)에 대해 프로세싱된 바이트들의 총 수(즉, 윈도우 바이트들)를 결정한다. 윈도우(506)는, 예컨대 16×128 클록 사이클들과 동일한 클록 사이클들의 이력 수를 포함한다. 이러한 바이트들의 총 수(즉, 윈도우 바이트들)는 윈도우(506) 내의 메모리 블록(222)에 대한 제1 클라이언트(224A)의 파티션 ID의 평균 데이터 액세스 레벨을 나타내고, 메모리 블록(222)에 액세스하기 위해 각자의 파티션 ID에 배정된 메모리 액세스 대역폭과 비교되어, 메모리 블록(222)에 액세스하기 위해 각각의 파티션 ID에 배정된 메모리 액세스 대역폭 중 어느 정도가 사용되는지를, 즉 제1 메모리 블록(222A)에 대한 제1 클라이언트(224A)의 평균 데이터 액세스 레벨을 나타내는 메모리 대역폭 사용량 상태(402)를 결정한다.
일부 구현들에서, 제1 클라이언트(224A)의 각자의 파티션 ID와 연관된 메모리 대역폭 사용량 상태(402)는 제2 다중비트 상태 번호(SN), 예컨대 3b 상태 번호 SN[0:2] 또는 2b 상태 번호 SN[0:1]의 2 비트들로 표현된다. 제1 메모리 블록(222A)에 액세스하기 위해 제1 클라이언트(224A)의 각자의 파티션 ID에 배정된 메모리 액세스 대역폭의 일부분이 사용되고 제1 사용량 조건(UC1)을 만족하는 경우, 2b 상태 번호 SN[0:1]은 "00"과 동일하다. 제1 메모리 블록(222A)에 액세스하기 위해 제1 클라이언트(224A)의 각자의 파티션 ID에 배정된 메모리 액세스 대역폭의 사용된 부분이 제2 사용량 조건(UC2)을 만족하는 경우, 2b 상태 번호 SN[0:1]은 "01"과 동일하다. 제1 메모리 블록(222A)에 액세스하기 위해 제1 클라이언트(224A)의 각자의 파티션 ID에 배정된 메모리 액세스 대역폭의 사용된 부분이 제3 사용량 조건(UC3)을 만족하는 경우, 2b 상태 번호 SN[0:1]은 "10"과 동일하다. 메모리 블록(222)에 액세스하기 위해 제1 클라이언트(224A)의 각자의 파티션 ID에 배정된 메모리 액세스 대역폭의 사용된 부분이 제4 사용량 조건(UC4)을 만족하는 경우(예컨대, 사용된 부분이 배정된 메모리 액세스 대역폭의 75%를 초과함), 2b 상태 번호 SN[0:1]은 "11"과 동일하다. 그와 같이, 제2 다중비트 상태 번호 SN[0:1]의 크기는, 메모리 블록에 액세스하기 위해 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 어느 정도가 사용되는지에 따라 증가하고, 메모리 대역폭 사용량 상태(402) 및 제1 메모리 블록(222A)에 대한 제1 클라이언트(224A)의 평균 데이터 액세스 레벨도 마찬가지이다. 일부 실시 형태들에서, 사용량 조건들(UC1, UC2, UC3, UC4)은 서로 배타적이다.
대안적으로, 일부 구현들에서, 제1 클라이언트(224A)의 각자의 파티션 ID와 연관된 메모리 대역폭 사용량 상태(예컨대, 2b 상태 번호 SN[0:1])는 또한 메모리 블록(222)의 대안적인 현재 혼잡 레벨 및/또는 사전정의된 메모리 액세스 대역폭이 실시되는지 여부(즉, HardLimit=1인지 여부)에 기초하여 추적된다. 메모리 제어기(110)는 메모리(104)의 제2 요청 큐(510)에서 대기하고 있는 데이터 액세스 요청들의 제2 총 수(MCQ), 및 데이터 액세스 요청들의 제2 총 수(MCQ)가 외부 메모리 용량의 대안적인 사전정의된 부분을 초과하는지 여부를 나타내는 대안적인 현재 혼잡 레벨을 모니터링한다.
일부 구현들에서, 제1 메모리 블록(222A)의 2b 상태 번호 SN[0:1]은 2개의 조건들 하에서 "11"과 동일하다. 구체적으로, 제1 조건에서, 제1 클라이언트(224A)에 대한 제1 메모리 블록(222A)의 할당이 실질적으로 사용되고, 메모리(104)는 전반적으로 지나친 비지 상태이다. 2b 상태 번호 SN[0:1]은, (a) 메모리 블록(222)에 액세스하기 위해 제1 클라이언트(224A)의 각자의 파티션 ID에 배정된 메모리 액세스 대역폭의 75% 초과가 사용될 때, 그리고 (b) 대안적인 현재 혼잡 레벨이, 데이터 액세스 요청의 제2 총 수(MCQ)가 외부 메모리 용량의 대안적인 사전정의된 부분(예컨대, x%, 여기서 x는 선택적으로 85와 동일함)을 초과함을 나타낼 때 "11"과 동일하다. 제2 조건에서, 제1 클라이언트(224A)에 대한 제1 메모리 블록(222A)의 할당이 실질적으로 사용되고, 그 할당은 엄격하게 실시된다. 2b 상태 번호 SN[0:1]은, (a) 메모리 블록(222)에 액세스하기 위해 제1 클라이언트(224A)의 각자의 파티션 ID에 배정된 메모리 액세스 대역폭의 75% 초과가 사용될 때, 즉 메모리 블록에 대한 평균 데이터 액세스 레벨이 사전정의된 임계치 부분(100%)을 초과했을 때; 그리고 (b) 사전정의된 메모리 액세스 대역폭이 실시될 때(즉, HarDLimit=1) "11"과 동일하다. 다르게 말하면, 메모리 대역폭 사용량 상태(402)는, (a) 제1 메모리 블록(222A)에 대한 제1 클라이언트의 평균 데이터 액세스 레벨이 사전정의된 메모리 액세스 대역폭의 사전정의된 임계치 부분을 초과했다는 결정 및 (b) 사전정의된 메모리 액세스 대역폭이 실시된다는 또는 메모리 블록(104)의 대안적인 현재 혼잡 레벨이 높다는 결정에 따라, 높은 사용량 상태와 연관된 사전정의된 값으로 설정된다.
일부 구현들에서, 메모리 제어기(110)는 메모리(104)의 제2 요청 큐(510)에서 대기하고 있는 데이터 액세스 요청들의 제2 총 수(MCQ)를 모니터링하고, 제2 요청 큐(510)는 선택적으로 다른 클라이언트(224)와 연관된 다른 파티션 ID들에 대한 요청들을 포함한다. 메모리(104)의 현재 혼잡 레벨(504)은, 데이터 액세스 요청들의 제2 총 수(MCQ)가 메모리 블록들(222)을 포함하는 메모리(104)의 외부 메모리 용량의 제2 사전정의된 부분(예컨대, 75%)을 초과하는지 여부를 나타낸다. 일부 구현들에서, 메모리(104)의 현재 혼잡 레벨(504)은 제2 다중비트 상태 번호의 비트 SN[2]로 표현된다. 일부 구현들에서, 메모리(104)의 제2 현재 혼잡 레벨(504)은 프리페치 요청들의 스로틀링을 제어하는 데 사용된다. 일부 구현들에서, 복수의 메모리 블록들(222)을 포함하는 메모리(104)의 제2 현재 혼잡 레벨(504)은 하나 이상의 프로세싱 클러스터들의 프리페치 요청들의 품질들을 제어하는 데 사용된다. 메모리(104)의 현재 혼잡 레벨(504)의 적용들에 대한 더 상세한 내용들은 도 8 및 도 9를 참조하여 하기에서 논의된다.
도 6a는 일부 구현들에 따른, 각각의 메모리 블록(222)의 메모리 대역폭 사용량 상태들(402) 및 메모리(104)의 현재 혼잡 레벨(504)을 추적하기 위해 캐시(220)에 의해 구현되는 예시적인 프로세스(600)를 예시한다. 캐시(220)는 하나 이상의 프로세싱 클러스터들(202) 및 복수의 메모리 블록들(222)을 포함하는 메모리(104)에 커플링된다. 캐시(220)는 복수의 클라이언트들(224)과 연관된 복수의 데이터 액세스 요청들을 프로세싱 클러스터(202)로부터 메모리(104)의 복수의 메모리 블록들(222)로 포워딩한다. 리소스들이 복수의 클라이언트들(224)에 의해 활용될 복수의 리소스 부분들로 파티셔닝된다는 것을 고려하면, 각각의 리소스 부분은 각자의 클라이언트(224)에게 배정되고 각자의 파티션 식별자(ID)를 갖는다. 캐시(220)는 메모리(104)의 모든 메모리 블록들(222)에 액세스하기 위한 모든 클라이언트들(224)의 메모리 대역폭 사용량 상태들(402) 및 메모리(104)의 현재 혼잡 레벨들을 추적한다. 편의상, 프로세스(600)의 설명은 각자의 파티션 ID를 갖는 각자의 리소스 부분과 연관된 제1 클라이언트(224A)에 초점을 맞춘다.
데이터 액세스 요청들의 서브세트 각각(예컨대, 제1 클라이언트(224A)와 연관된 판독 요청들의 서브세트 및 모든 기록 요청들)에 응답하여, 캐시(220)는 메모리 대역폭 사용량 상태(402)(예컨대, SN[0:1]) 및 메모리(104)의 현재 혼잡 레벨(504)(예컨대, SN[2])을 수신한다. 그에 의해, 캐시(220)는 제1 클라이언트(224A)에 대한 메모리 블록들(222)에 대응하는 복수의 메모리 대역폭 사용량 상태들(402)을 추적한다. 각각의 메모리 대역폭 사용량 상태는, 각자의 메모리 블록(222)과 연관되고, 각자의 메모리 블록(222)에 액세스하기 위해 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 적어도 어느 정도(예컨대, 75%)가 사용되는지를 나타낸다. 일부 구현들에서, 각각의 메모리 대역폭 사용량 상태는 각자의 메모리 블록(222)으로부터 수신된 제2 다중비트 상태 번호 SN(예컨대, "11", "00", "10" 및 "01")을 포함하고, 제1 다중비트 상태 번호 HN의 제1 단일 비트(예컨대, HN[0])로 저장된 플래그로 변환된다. 예를 들어, 일부 구현들에서, 각각의 메모리 블록(222)에 대해, 제1 클라이언트(224A)와 연관된 각자의 메모리 대역폭 사용량이 "11"과 동일한 경우, HN[0]은 "1"과 동일하고, 그렇지 않은 경우, HN[0]은 "0"과 동일하다. 캐시(220)는 또한 메모리(104)의 현재 혼잡 레벨(504)(예컨대, SN[2])을 추적하며, 이는 제1 다중비트 상태 번호 HN의 제2 단일 비트(예컨대, HN[1])로 변환된다. 일부 구현들에서, 캐시(220)는 각각의 메모리 블록(222)의 (예컨대, HN[0]로의) 가장 최근에 업데이트된 메모리 대역폭 사용량 상태(402) 및 제1 클라이언트(224A)와 연관되는 메모리(104)의 (예컨대, HN[1]로의) 현재 혼잡 레벨(504)의 레코드(602)를 유지한다.
캐시(220)에 의해 제1 클라이언트(224A)에 대한 메모리 블록(222)으로 포워딩된 데이터 액세스 요청들의 서브세트 각각에 응답하여, 캐시(220)는 메모리 대역폭 사용량 상태(402) 및/또는 메모리(104)의 현재 혼잡 레벨(504)에 관한 레코드(602)의 업데이트를 수신하고, 그들을 각자의 데이터 요청을 수행했던 프로세싱 클러스터(202)에 보고한다. 일부 구현들에서, 캐시(220)는, 각각의 데이터 액세스 요청에 응답하여 그리고 데이터 액세스 요청이 판독 요청인지 또는 기록 요청인지 여부에 관계없이, 메모리 블록(222)의 메모리 대역폭 사용량 상태(402) 및/또는 메모리(104)의 현재 혼잡 레벨(504)의 업데이트들을 수신하고 이를 프로세싱 클러스터(202)에 보고한다. 일부 구현들에서, 캐시(220)는 각각의 기록 요청에만 응답하여, 메모리 대역폭 사용량 상태(402) 및/또는 메모리(104)의 현재 혼잡 레벨(504)의 업데이트를 수신하고 이를 프로세싱 클러스터(202)에 보고한다.
도 6b는 일부 구현들에 따른, 캐시(220) 자체의 현재 혼잡 레벨(604)을 추적하기 위해 캐시(220)에 의해 구현되는 예시적인 프로세스(650)를 예시한다. 캐시(220)는 캐시(220)와 연관된 제1 요청 큐(610)에서 대기하고 있는 데이터 액세스 요청들의 제1 총 수(HNQ)를 모니터링하고, 제1 요청 큐(610)는 선택적으로 제1 클라이언트(224A)의 각자의 파티션 ID와는 다른 파티션 ID들에 대한 요청들을 포함한다. 캐시(220)의 현재 혼잡 레벨(604)은, 데이터 액세스 요청들의 제1 총 수(HNQ)가 이러한 캐시(220)의 시스템 캐시 용량의 제1 사전정의된 부분(예컨대, c%, 여기서 c는 선택적으로 75와 동일함)을 초과하는지 여부를 나타낸다. 일부 구현들에서, 현재 혼잡 레벨(604)은 제1 다중비트 상태 번호 HN의 비트 HN[2]로 표현된다. 일부 구현들에서, 캐시(220)의 제1 현재 혼잡 레벨(604)은 프리페치 요청들의 스로틀링을 제어하는 데 사용된다. 일부 구현들에서, 캐시(220)의 제1 현재 혼잡 레벨(604)은 하나 이상의 프로세싱 클러스터들(202)의 프리페치 요청들의 품질들을 제어하는 데 사용된다.
캐시(220)에 의해 메모리 블록(222)으로 포워딩된 데이터 액세스 요청들의 서브세트 각각에 응답하여, 캐시(220)는 메모리(104)의 현재 혼잡 레벨(504) 및/또는 각자의 메모리 블록(222)의 메모리 대역폭 사용량 상태(402)와 공동으로 각자의 데이터 요청을 수행했던 프로세싱 클러스터(202)에 제1 현재 혼잡 레벨(604)을 보고한다. 일부 구현들에서, 프로세싱 클러스터(202)는, 제1 현재 혼잡 레벨(604)이 스로틀링 조건을 만족하는지 여부를 결정한다. 제1 현재 혼잡 레벨(604)이 스로틀링 조건을 만족한다는 결정에 따라, 프로세싱 클러스터(202)는 복수의 리소스 부분들로부터의 복수의 프리페치 요청들을 스로틀링하는데, 즉 복수의 프리페치 요청들은 프로세싱 클러스터(202)의 하나 이상의 요청 큐들(214)에 입력되지 않는다. 일부 구현들에서, 제1 및 제2 현재 혼잡 레벨들(604, 504)이 프리페치 제어 조건을 만족한다는 결정에 따라, 프로세싱 클러스터(202)의 제어기(216)는 프리페치 제어 조건에 대응하는 임계 품질을 초과하는 품질들을 갖는 프리페치 요청들의 제1 서브세트를 선택하고, 프리페치 요청들의 서브세트를 메모리 액세스 요청 큐(214)에 포함하고, 임계 품질을 초과하지 않는 품질들을 갖는 프리페치 요청들의 제2 서브세트를 하나 이상의 요청 큐들(214)로부터 배제한다. 캐시(220)의 현재 혼잡 레벨(604)의 적용들에 대한 더 상세한 내용들은 도 8 및 도 9를 참조하여 하기에서 논의된다.
도 6c는 일부 구현들에 따른, 메모리 대역폭 사용량 상태들(402), 각각의 메모리 블록의 현재 혼잡 레벨(504), 및 캐시(220) 자체의 현재 혼잡 레벨(604)을 추적하기 위해 캐시(220)에 의해 구현되는 또 다른 예시적인 프로세스(680)를 예시한다. 캐시(220)는 메모리(104)의 모든 메모리 블록들(222)에 액세스하기 위한 모든 클라이언트들(224)의 메모리 대역폭 사용량 상태들(402) 및 메모리(104)의 현재 혼잡 레벨들을 추적한다. 편의상, 프로세스(680)의 설명은 각자의 파티션 ID를 갖는 각자의 리소스 부분과 연관된 제1 클라이언트(224A)에 초점을 맞춘다.
데이터 액세스 요청들의 서브세트 각각(예컨대, 제1 클라이언트(224A)와 연관된 판독 요청들의 서브세트 및 모든 기록 요청들)에 응답하여, 캐시(220)는 메모리 대역폭 사용량 상태(402)(예컨대, SN[0:1]) 및 메모리(104)의 현재 혼잡 레벨(504)(예컨대, SN[2])을 수신한다. 그에 의해, 캐시(220)는 제1 클라이언트(224A)에 대한 메모리 블록들(222)에 대응하는 복수의 메모리 대역폭 사용량 상태들(402)을 추적한다. 각각의 메모리 대역폭 사용량 상태는, 각자의 메모리 블록(222)과 연관되고, 각자의 메모리 블록(222)에 액세스하기 위해 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 적어도 어느 정도(예컨대, 75%)가 사용되는지를 나타낸다. 일부 구현들에서, 각각의 메모리 대역폭 사용량 상태(402)(예컨대, SN[0:1])는 각자의 메모리 블록(222)으로부터 수신된 제2 다중비트 상태 번호 SN(예컨대, "11", "00", "10" 및 "01")을 포함하고, 제1 다중비트 상태 번호 HN의 제1 단일 비트(예컨대, HN[2])로 저장된 플래그로 변환된다. 예를 들어, 일부 구현들에서, 각각의 메모리 블록(222)에 대해, 제1 클라이언트(224A)와 연관된 각자의 메모리 대역폭 사용량(402)이 "11"과 동일한 경우, 메모리(104)의 현재 혼잡 레벨(504)(예컨대, SN[2])이 "0"인지 또는 "1"인지에 관계없이, HN[2]는 "1"과 동일하다. 반대로, 제1 클라이언트(224A)와 연관된 각자의 메모리 대역폭 사용량(402)이 "11"과 동일하지 않은 경우, HN[2]는 "0"과 동일하다. 제1 클라이언트(402)에 대해, 메모리 블록들(222)의 메모리 대역폭 사용량 상태들(402)은 제1 다중비트 상태 번호 HN의 제1 단일 비트(예컨대, HN[2])를 통해 제어기(216)에 제공되며, 이는 메모리 블록들(222)에 저장된 데이터에 액세스하기 위한 제1 클라이언트(402)의 요청들을 제어하기 위해 제어기(216)에 의해 추가로 적용된다.
일부 구현들에서, 제1 다중비트 상태 번호 HN은 2개의 추가적인 비트들 HN[0] 및 HN[1]을 추가로 포함한다. 캐시(220)는 캐시(220)와 연관된 제1 요청 큐(610)에서 대기하고 있는 데이터 액세스 요청들의 제1 총 수(HNQ)를 모니터링하고, 제1 요청 큐(610)는 선택적으로 제1 클라이언트(224A)의 각자의 파티션 ID와는 다른 파티션 ID들에 대한 요청들을 포함한다. 캐시(220)의 현재 혼잡 레벨(604)은, 데이터 액세스 요청들의 제1 총 수(HNQ)에 기초하여 생성되고, 데이터 액세스 요청들의 제1 총 수(HNQ)가 이러한 캐시(220)의 시스템 캐시 용량의 제1 사전정의된 부분(예컨대, c%, 여기서 c는 선택적으로 75와 동일함)을 초과하는지 여부를 나타낸다. 일부 구현들에서, 캐시(220)의 이러한 현재 혼잡 레벨(604) 및 메모리(104)의 현재 혼잡 레벨(504)(예컨대, SN[2])은 제1 다중비트 상태 번호 HN의 2개의 추가적인 비트들 HN[0] 및 HN[1]로 표현된다. 일부 구현들에서, 캐시(220)의 제1 현재 혼잡 레벨(604) 및/또는 메모리(104)의 제2 현재 혼잡 레벨(504)(예컨대, SN[2])은 프리페치 요청들의 스로틀링을 제어하는 데 사용된다. 일부 구현들에서, 캐시(220)의 제1 현재 혼잡 레벨(604) 및/또는 메모리(104)의 제2 현재 혼잡 레벨(504)(예컨대, SN[2])은 하나 이상의 프로세싱 클러스터들(202)의 프리페치 요청들의 품질들을 제어하는 데 사용된다. 다르게 말하면, 캐시(220)는 HN[0:1]을 포함하는 제1 다중비트 상태 번호 HN을 제어기(216)로 반환하며, 이는 HN[0:1]을 사용하여 프리페치 요청들의 스로틀링 및/또는 품질들을 제어한다. 캐시(220)의 현재 혼잡 레벨(604)의 적용들에 대한 더 상세한 내용들은 도 8 및 도 9를 참조하여 하기에서 논의된다.
도 7a, 도 7b, 및 도 7c는 각각 일부 구현들에 따른, 복수의 리소스 파티션들의 데이터 액세스 요청들을 관리하기 위한 프로세싱 클러스터(202), 캐시(220), 및 메모리 블록들(222)에 저장된 데이터의 예시적인 데이터 구조들이다. 전자 디바이스(예컨대, 서버 또는 서버 시스템)는 다수의 클라이언트들(224)에 서비스를 제공하도록 구성되고, 따라서 전자 디바이스의 계산 및 저장 리소스들은 복수의 클라이언트들(224)에 의해 활용될 복수의 리소스 부분들로 파티셔닝된다. 각각의 리소스 부분은 각자의 클라이언트(224)에 배정되고, 각자의 클라이언트(224)와 연관된 각자의 파티션 ID를 갖는다. 프로세싱 클러스터(202)는, 복수의 클라이언트들(224)과 연관된 복수의 데이터 액세스 요청들을 메모리(104)의 복수의 메모리 블록들(222)에 저장하는 하나 이상의 요청 큐들(214)을 갖는다. 데이터 구조들(700, 740, 780)은 각각의 프로세싱 클러스터(202)의 하나 이상의 요청 큐들(214)에 저장된 데이터 액세스 요청들을 관리하도록 적용된다.
도 7a를 참조하면, 각자의 클라이언트(224)(예컨대, 제1 클라이언트(224A))의 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 프로세싱 클러스터(202)는 메모리(104)의 복수의 메모리 블록들(222)에 대한 복수의 메모리 대역폭 사용량 상태들(402)을 포함하는 메모리 블록 사용량 테이블(401)을 적용한다. 각각의 메모리 대역폭 사용량 상태(402)는, 각자의 메모리 블록(222)과 고유하게 연관되고, 각자의 메모리 블록에 액세스하기 위해 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 적어도 어느 정도가 사용되는지를 나타낸다. 프로세싱 클러스터(202)는 메모리 블록들(222)의 메모리 대역폭 사용량 상태들(402)에 기초하여 하나 이상의 요청 큐들(214)에 저장된 데이터 액세스 요청들을 동적으로 제어하기 위해 사용량 레벨(406), 크레디트 카운트(408), 및 요청 발행 임계치(410)를 적용한다. 구체적으로, 각각의 리소스 부분에 대해, 사용량 레벨(406)은 메모리 대역폭 사용량 상태들(402)의 조합이고, 크레디트 카운트(408)가 사용량 레벨(406)에 기초하여 조정된다(예컨대, 크레디트 단위(CU)만큼 증가되거나 또는 감소됨). 크레디트 카운트(408)가 요청 발행 임계치(410)보다 더 크다는 결정에 따라, 각자의 파티션 ID와 연관된 다음 데이터 액세스 요청(412)이 발행된다. 반대로, 크레디트 카운트(408)가 요청 발행 임계치(410)보다 크지 않다는 결정에 따라, 크레디트 카운트(408)는, 다음 데이터 액세스 요청(412)이 발행될 수 있을 때까지 계속 조정된다.
각각의 클라이언트(224)와 연관된 하나 이상의 사용량 임계치들(예컨대, 높은 사용량 임계치 High-SN 및 낮은 사용량 임계치 Low-SN) 및 사전정의된 수의 클록 사이클들이 크레디트 카운트(408)의 조정을 제어하도록 적용된다. 각자의 클라이언트(224)와 연관된 각각의 데이터 요청이 발행된 후에, 메모리 대역폭 사용량 상태들(402)의 서브세트가 업데이트되는 한편, 각자의 클라이언트(224)의 사용량 레벨(406)은, 사전정의된 수의 클록 사이클들이 경과할 때까지 업데이트되지 않는다. 사용량 레벨(406)이 하나 이상의 사용량 임계치들과 비교되어, 크레디트 카운트(408)가 크레디트 단위(CU)만큼 증가되는지, 크레디트 단위(CU)만큼 감소되는지, 또는 동일하게 유지되는지 여부를 결정한다. 그러한 조정은, 크레디트 카운트(408)의 크기가 다음 데이터 액세스 요청(412)의 발행을 트리거할 때까지 하나 이상의 클록 사이클마다 주기적으로 구현된다.
일부 구현들에서, 프로세싱 클러스터(202)는 또한 메모리(104)의 현재 혼잡 레벨(504) 및 캐시(220)의 현재 혼잡 레벨(604)을 추적한다. 프로세싱 클러스터의 제어기(216)는 캐시(220)의 획득된 현재 혼잡 레벨(604)을 포함하는 제1 혼잡 레벨 이력(예컨대, 도 9의 이력(902))을 유지하고, 메모리(104)의 현재 혼잡 레벨(504)을 포함하는 제2 혼잡 레벨 이력(예컨대, 도 9의 이력(904))을 유지한다. 일부 상황들에서, 캐시(220)에 의해 만족되지 않은 데이터 액세스 요청들이 메모리(104)로 추가로 전송되고, 따라서 캐시(220)로 전송된 데이터 액세스 요청들이 캐시(220)에 의해 만족되지 않은 정도에 기초하여 메모리(104)에 의해 수신된 미해결 진행 중 요청들의 수가 결정된다. 제어기(216)는, 프로세싱 클러스터(202)로 하여금, 캐시(220)의 현재 혼잡 레벨(604) 및 메모리(104)의 현재 혼잡 레벨(504) 중 적어도 하나에 기초하여 프로세싱 클러스터(202)로부터의 프리페치 요청들을 제한하게 한다. 일부 구현들에서, 프로세싱 클러스터(202)로부터의 프리페치 요청들은 제1 혼잡 레벨 이력 및/또는 제2 혼잡 레벨 이력에 기초하여 제한된다. 캐시(220) 및 메모리(104)의 시스템 혼잡 레벨들의 적용에 대한 더 상세한 내용들은 도 9를 참조하여 하기에서 설명된다.
도 7b를 참조하면, 캐시(220)는 프로세싱 클러스터(202)와 메모리(104)의 메모리 블록들(222) 사이에 커플링된다. 캐시(220)는 각각의 메모리 블록(222)에 대한 (예컨대, HN[0]으로의) 모든 클라이언트의 가장 최근에 업데이트된 메모리 대역폭 사용량 상태들(402) 및 (예컨대, HN[1]으로의) 메모리(104)의 현재 혼잡 레벨(504)의 레코드(602)를 유지한다. 캐시(220)는 캐시(220) 자체의 현재 혼잡 레벨(604)을 저장한다. 캐시(220)는 제1 요청 큐(610)를 갖고, 제1 요청 큐(610)에서 대기하고 있는 데이터 액세스 요청들의 제1 총 수(HNQ)를 모니터링한다. 캐시(220)의 현재 혼잡 레벨(604)은, 데이터 액세스 요청들의 제1 총 수(HNQ)가 이러한 캐시(220)의 시스템 캐시 용량의 제1 사전정의된 부분(예컨대, c%)을 초과하는지 여부를 나타낸다.
도 7c를 참조하면, 메모리 블록(222)은 프로세싱 클러스터(202) 및 캐시(220) 둘 모두에 커플링되고, 캐시(220)를 통해 프로세싱 클러스터(202)로부터 상이한 클라이언트들(224)의 데이터 액세스 요청들을 수신한다. 메모리 블록 사용량 윈도우(506)는 메모리 블록(222) 내의 각각의 클라이언트(224)에 대해 추적된다. 각각의 클라이언트(224)(예컨대, 제1 클라이언트(224A))에 대해 윈도우(506)에서 프로세싱된 바이트들의 총 수(즉, 윈도우 바이트들)가 결정되고, 메모리 블록(222)에 대한 각각의 클라이언트(224)의 파티션 ID의 평균 데이터 액세스 레벨을 도출하도록 적용된다. 이러한 평균 데이터 액세스 레벨은 각각의 클라이언트의 메모리 대역폭 사용량 상태(402), 즉 메모리 블록(222)에 액세스하기 위해 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 어느 정도가 사용되는지를 결정하는 데 사용된다.
메모리 블록(222)은 또한 제2 요청 큐(510), 큐(510)에서 대기 중인 데이터 액세스 요청의 제2 총 수(MCQ), 외부 메모리 용량의 제2 사전정의된 부분, 외부 메모리 용량의 대안적인 사전정의된 부분(예컨대, x%), 및 메모리(104)의 현재 혼잡 레벨(504)을 추적한다. 현재 혼잡 레벨(504)은, 제2 요청 큐(510)에서 대기하고 있는 데이터 액세스 요청들의 제2 총 수(MCQ)가 외부 메모리 용량의 제2 사전정의된 부분(예컨대, 75%)을 초과하는지 여부를 나타낸다. 프로세싱 클러스터(202)에서의 프리페치 요청들의 스로틀링은 메모리(104)의 현재 혼잡 레벨(504)에 의해 부분적으로 제어된다. 추가적으로, 일부 구현들에서, 각각의 클라이언트의 메모리 대역폭 사용량 상태(402)는, 제2 요청 큐(510)에서 대기하고 있는 데이터 액세스 요청들의 제2 총 수(MCQ)가 외부 메모리 용량의 대안적인 사전정의된 부분(예컨대, 75%)을 초과하는지 여부에 부분적으로 기초하여 결정된다. 예를 들어, 메모리 대역폭 사용량 상태(402)는, 이러한 특정 메모리 블록(222)에 대한 평균 데이터 액세스 레벨 및 제2 요청 큐(510)에서 대기 중인 데이터 액세스 요청들의 제2 총 수(MCQ) 둘 모두가 높을 때(예컨대, 이러한 특정 메모리 블록(222)에 대한 평균 데이터 액세스 레벨이 사전정의된 메모리 액세스 대역폭의 사전정의된 임계치 부분(예컨대, 100%)을 초과했고, 데이터 액세스 요청들의 제2 총 수(MCQ)가 외부 메모리 용량의 대안적인 사전정의된 부분(예컨대, 75%)을 초과할 때), "11"과 동일하다.
도 8은 일부 구현들에 따른, 프로세싱 클러스터(202)(예컨대, 도 2의 제1 프로세싱 클러스터(202-1))에서 캐시 프리페칭을 제어하기 위해 혼잡 레벨을 결정하는 예시적인 방법(800)을 예시한다. 이러한 프로세싱 클러스터(202)에서, 클러스터 캐시(212)의 제어기(216)는, 프로세싱 클러스터(202) 내의 프로세서들(204)로부터 클러스터 캐시(212)로 전송된 데이터 액세스 요청들이 클러스터 캐시(212)에 의해 만족되지 않은 정도에 기초하여 프로세싱 클러스터(202)의 혼잡 레벨을 결정하고, 프로세싱 클러스터(202) 내의 제1 각자의 프로세서(204-1)와 연관된 프리페처(208)로부터의 프리페치 요청들을 제어한다. 구체적으로, 프로세싱 클러스터(202)의 혼잡 레벨이, 프로세싱 클러스터(202)의 혼잡 레벨이 제1 클러스터 혼잡 임계치(802) 초과일 것을 요구하는 제1 혼잡 기준을 만족한다는 결정에 따라, 제어기(216)는, 하나 이상의 프로세서들(204) 중 제1 각자의 프로세서(204-1)로 하여금, 클러스터 캐시(212)에 대한 프리페치 요청들을 적어도 제1 임계 품질(804)의 프리페치 요청들로 제한하게 한다. 반대로, 프로세싱 클러스터(202)의 혼잡 레벨이 제1 혼잡 기준을 만족하지 않는다는 결정에 따라, 제어기(216)는, 하나 이상의 프로세서들(204)(제1 각자의 프로세서(204-1) 포함함)로 하여금, 클러스터 캐시(212)에 대한 프리페치 요청들을 적어도 제1 임계 품질(804)의 프리페치 요청들로 제한하게 하는 것을 보류한다(806). 다르게 말하면, 프로세싱 클러스터(202)의 혼잡 레벨이 제1 클러스터 혼잡 임계치(802) 미만일 때, 제어기(216)는 제1 프리페치 스로틀링 모드(M1)에서 프로세싱 클러스터(202)에 대한 프리페치 요청들을 제한하지 않고; 프로세싱 클러스터(202)의 혼잡 레벨이 클러스터 혼잡 임계치(802) 초과일 때, 제어기(216)는, 제1 각자의 프로세서(204-1)로 하여금, 프리페치 요청들을 적어도 제1 임계 품질(804)의 프리페치 요청들로 제한하게, 즉 프리페치 요청들을 제2 프리페치 스로틀링 모드(M2)에서 높은 품질의 프리페치들로 제한하게 한다.
일부 구현들에서, 프로세싱 클러스터(202)의 혼잡 레벨이, 프로세싱 클러스터(202)의 혼잡 레벨이 제1 클러스터 혼잡 임계치(802) 초과인 제2 클러스터 혼잡 임계치(808) 초과일 것을 요구하는, 제1 혼잡 기준과는 상이한 제2 혼잡 기준을 만족한다는 결정에 따라, 제어기(216)는, 제1 각자의 프로세서(204-1)로 하여금, 프리페치 요청들을 제1 임계 품질(804)보다 더 높은 적어도 제2 임계 품질(810)의 프리페치 요청들로 제한하게 한다. 일부 구현들에서, 프로세싱 클러스터(202)의 혼잡 레벨이 제2 클러스터 혼잡 임계치(808) 초과인(예컨대, 낮은 또는 중간 혼잡이 아닌 높은 혼잡을 나타냄) 경우, 제어기(216)는, 프로세싱 클러스터(202)의 적어도 각자의 프로세서(204)(예컨대, 제1 각자의 프로세서(204-1))로 하여금 제3 프리페치 스로틀링 모드(M3)에서 동작하게 하는데, 여기서 프리페칭은 적어도 제2 임계 품질(810)의 프리페치들로 제한된다(예컨대, 적어도 매우 높은 품질 프리페치들인 프리페치들만을 허용함). 대조적으로, 제1 프리페치 스로틀링 모드(M1)에서는 프리페칭이 제한되지 않고, 제2 프리페치 스로틀링 모드(M2)에서는 프리페칭이 제1 임계 품질(804)과 제2 임계 품질(810) 사이의 품질을 갖는 프리페치들로 제한된다(예컨대, 적어도 높은 품질 프리페치들인 프리페치들을 허용함).
일부 구현들에서, 프로세싱 클러스터(202)의 혼잡 레벨이 제3 혼잡 기준을 만족한다는 결정에 따라, 제어기(216)는, 제1 각자의 프로세서(204-1)로 하여금, 예컨대 요청된 프리페치의 품질에 상관없이, 프리페치 요청들을 캐시로 완전히 송신하는 것을 보류하게 한다(812). 일부 구현들에서, 제3 혼잡 기준은 (1) 프로세싱 클러스터(202)의 혼잡 레벨이 클러스터 혼잡 임계치(808) 초과라는 제1 요건 및 (2) 전자 디바이스(200)의 시스템 혼잡 레벨 이력(822)이 제1 시스템 혼잡 조건(816)을 만족한다(예컨대, 시스템 혼잡 레벨 이력의 75%가 높음)는 제2 요건을 포함한다. 시스템 혼잡 레벨 이력(822)은 캐시(220)로부터 수신된 시스템 비지 레벨 신호(즉, 현재 혼잡 레벨(604))에 기초하여 제어기(216)에 의해 모니터링되고, 그에 의해 캐시(220)의 혼잡 레벨을 나타낸다. 예를 들어, 시스템 혼잡 레벨 이력(822)은 시스템 비지 레벨 신호의 복수의 샘플링된 값들에 기초하여 "H" 또는 "L"로 채워진다. 제1 시스템 혼잡 조건(816)은, 시스템 혼잡 레벨 이력(822)의 75% 이상이 제4 프리페치 스로틀링 모드(M4)(즉, 스로틀 올 모드(throttle all mode))를 인에이블하도록 "H"로 채워질 것을 요구한다. 반대로, 일부 구현들에서, 제어기(216)는, 제2 시스템 혼잡 조건이 만족될 때, 예컨대 시스템 혼잡 레벨 이력(822)의 25% 이하가 "H"로 채워질 때, 제4 프리페치 스로틀링 모드(M4)를 디스에이블하고 재설정한다.
일부 구현들에서, 프로세싱 클러스터(202) 내의 프로세서들(204)로부터 클러스터 캐시(212)로 전송된 복수의 데이터 액세스 요청들이 클러스터 캐시(212)에 의해 만족되지 않은 정도는 프로세싱 클러스터(202)에 대한 하나 이상의 과거 혼잡 레벨(historical congestion level)들로 표현된다. 하나 이상의 과거 혼잡 레벨들은 프로세싱 클러스터(202)에 대한 혼잡 레벨 이력(818)에서 유지된다. 프로세싱 클러스터(202)의 혼잡 레벨은 혼잡 레벨 이력(818)에서의 하나 이상의 과거 혼잡 레벨들의 일부분 또는 전부에 기초하여 결정된다. 일례에서, 혼잡 레벨 이력(818)에서의 각각의 과거 혼잡 레벨은 별개의 각자의 기간에 대응하고, 데이터 액세스 요청들이 각자의 기간 동안 캐시에 의해 만족되지 않았던 정도를 나타낸다. 프로세싱 클러스터(202)의 과거 혼잡 레벨은 주기적으로 샘플링되었고, 혼잡 레벨 이력(818)에 저장되었을 수 있다. 일부 구현들에서, 각자의 과거 혼잡 레벨(또는 각각의 각자의 과거 혼잡 레벨)은 혼잡 레벨 값들의 사전결정된 세트로부터 선택된 값을 갖는다. 예를 들어, 2개의 혼잡 레벨들이 사용되는 경우, 각자의 과거 혼잡 레벨은, 예컨대 제1 클러스터 혼잡 임계치(802)에 기초하여 정의된 제1 혼잡 레벨 값(예컨대, "낮음") 또는 제2 혼잡 레벨 값(예컨대, "높음")을 갖는다. 다른 예에서, 3개의 혼잡 레벨들이 사용되는 경우, 각자의 과거 혼잡 레벨은, 예컨대 클러스터 혼잡 임계치들(802, 808)에 기초하여 정의된 제1 혼잡 레벨 값(예컨대, "낮음"), 또는 제2 혼잡 레벨 값(예컨대, "중간"), 또는 제3 혼잡 레벨 값(예컨대, "높음")을 갖는다. 당업자는, 임의의 수의 혼잡 레벨들이 사용될 수 있고, 그에 따라 임의의 수의 별개의 혼잡 레벨 값들이 사용된다는 것을 인식할 것이다.
일부 구현들에서, 프로세싱 클러스터(202)의 현재 클러스터 혼잡 레벨(818A)은 혼잡 임계치들(802, 808)과의 비교에 기초하여 결정되고, 혼잡 레벨 이력(818)에, 예컨대 그 안에 저장된 가장 오래된 과거 혼잡 레벨 대신에 저장된다. 프로세싱 클러스터(202)의 혼잡 레벨은 프로세싱 클러스터(202)의 현재 클러스터 혼잡 레벨(818A)을 포함하는 혼잡 레벨 이력(818)의 일부분 또는 전부에 기초하여 결정된다. 예를 들어, 현재 클러스터 혼잡 레벨(예컨대, "높음"과 동일함)(818A)이 프로세싱 클러스터(202)의 혼잡 레벨(예컨대, "중간"과 동일함)보다 더 크다는 결정에 따라, 프로세싱 클러스터(202)의 혼잡 레벨은 하나의 레벨만큼 또는 현재 클러스터 혼잡 레벨(818A)로 증가된다. 이력(818) 내의 모든 기존의 과거 혼잡 레벨들(예컨대, "중간" 또는 "낮음"과 동일함)이 프로세싱 클러스터(202)의 혼잡 레벨(예컨대, "높음"과 동일함)보다 더 낮다는 결정에 따라, 프로세싱 레벨(202)의 혼잡 레벨은 하나의 레벨만큼 감소된다. 그렇지 않은 경우, 프로세싱 레벨(202)의 혼잡 레벨은 변하지 않는다. 현재 클러스터 혼잡 레벨(818)은 클러스터 혼잡 임계치들(802, 808)에 기초하여 측정된 가장 최근의 클러스터 혼잡 레벨이다. 대안적으로, 일부 구현들에서, 제1 및 제2 클러스터 혼잡 임계치들(802, 808)은 과거 혼잡 임계치(예컨대, 혼잡 레벨 이력(818)의 10%)와 함께 적용된다. 예를 들어, 프로세싱 클러스터(202)의 혼잡 레벨은, 혼잡 레벨 이력(818)의 일부분(예컨대, 75%)이 제1 클러스터 혼잡 임계치(802) 초과이고(즉, "중간" 또는 "높음"의 값을 가짐) 과거 혼잡 임계치(예컨대, 10%)를 초과하는 경우, 제1 혼잡 기준을 만족한다.
일부 구현들에서, 프로세싱 클러스터(202)의 혼잡 레벨은, 하나 이상의 프로세서들(204) 중 어느 것이 복수의 데이터 액세스 요청들을 전송했는지에 상관없이, 프로세싱 클러스터(202) 내의 하나 이상의 프로세서들(204)로부터 클러스터 캐시(212)로 전송된 복수의 데이터 액세스 요청들이 캐시(212)에 의해 만족되지 않은 정도에 기초하여 결정된다는 것에 유의한다. 즉, 프로세싱 클러스터(202)의 혼잡 레벨은, 하나 이상의 프로세서들(204) 중 특정 프로세서로부터의 데이터 액세스 요청(들)이 클러스터 캐시(212)에 의해 만족되지 않은 정도에 상관없이 결정된다.
일부 구현들에서, 프로세싱 클러스터(202)의 혼잡 레벨을 결정하는 것은 프로세싱 클러스터(202) 내의 하나 이상의 프로세서들(204)로부터 클러스터 캐시(212)로 전송된, 클러스터 캐시(212)에 의해 만족되지 않은(예컨대, 캐시 미스(cache miss)들로도 불림) 데이터 액세스 요청들의 수를 하나 이상의 캐시 미스 임계치들과 비교하는 것을 포함한다. 각각의 클러스터 혼잡 임계치(802, 808)는 각자의 캐시 미스 임계치(802' 또는 808')를 포함한다. 일부 구현들에서, 프로세싱 클러스터(202)에 의한 캐시 미스들의 수는 하나 이상의 캐시 미스 임계치들(802' 또는 808')과 비교되어, 프로세싱 클러스터(202)의 혼잡 레벨을 결정할 때 고려되는 캐시 미스 값(예컨대, 낮음, 중간, 높음 등)을 결정한다. 예를 들어, 프로세싱 클러스터(202)에 의한 캐시 미스들의 수가 제1 캐시 미스 임계치(802') 미만인 경우, 프로세싱 클러스터(202)의 혼잡 레벨을 결정할 때, 제1 캐시 미스 값(예컨대, 낮은 값)이 고려된다. 다른 예에서, 프로세싱 클러스터(202)에 의한 캐시 미스들의 수가 제1 캐시 미스 임계치(802') 초과인 경우, 프로세싱 클러스터(202)의 혼잡 레벨을 결정할 때, 제2 캐시 미스 값(예컨대, 중간 또는 높은 값)이 고려된다. 또 다른 예에서, 프로세싱 클러스터(202)에 의한 캐시 미스들의 수가 제2 캐시 미스 임계치(808') 초과인 경우, 프로세싱 클러스터(202)의 혼잡 레벨을 결정할 때, 제3 캐시 미스 값(예컨대, 높은 값)이 고려된다. 일부 구현들에서, 캐시 미스 값은, 프로세싱 클러스터(202)에 대한 혼잡 레벨 이력(818)에서의 하나 이상의 과거 혼잡 레벨들의 맥락에서 고려된다. 일례에서, 캐시 미스 값은 프로세싱 클러스터(202)에 대해 혼잡 레벨 이력(818)에 저장된 과거 혼잡 레벨들을 정의한다.
또한, 일부 구현들에서, 하나 이상의 캐시 미스 임계치들(즉, 캐시 미스 임계치들(802', 808'))은 전자 디바이스(200)의 시스템 혼잡 레벨(예컨대, 도 9의 910)에 기초하여 결정된다. 일부 구현들에서, 시스템 혼잡 레벨이 제1 혼잡 값(826)이라는 결정에 따라 하나 이상의 캐시 미스 임계치들의 제1 세트(820)가 사용되고, 시스템 혼잡 레벨이 상이한 제2 혼잡 값(828)이라는 결정에 따라 하나 이상의 캐시 미스 임계치들의 상이한 제2 세트(820')가 사용된다. 필요한 경우, 하나 이상의 캐시 미스 임계치들의 추가적인 상이한 세트들이 임의의 수의 상이한 시스템 혼잡 값들에 대해 사용될 수 있다. 일부 구현들에서, 제2 혼잡 값(828)은 제1 혼잡 값(826)보다 더 낮고, 각각의 캐시 미스 임계치(802' 또는 808')는 제2 혼잡 값(828)과 연관하여 더 높은 값으로 조정되는데, 이는 시스템 혼잡이 낮은 경우, 더 많은 양들의 클러스터 혼잡이 용인될 수 있기 때문이다. 예를 들어, 제1 캐시 미스 임계치(802')는, 시스템 혼잡 레벨이 제1 혼잡 값(826)으로부터 제2 혼잡 값(828)으로 떨어질 때 30%에서 50%로 조정된다. 반면에, 시스템 혼잡 레벨이 높을수록, 세트(820)의 하나 이상의 캐시 미스 임계치들이 낮아지는데, 이는 시스템 혼잡이 이미 높은 경우, (예컨대, 프로세싱 클러스터(202)의) 더 적은 양들의 클러스터 혼잡이 시스템 혼잡이 낮은 경우보다 스로틀링을 보증할 수 있기 때문이다.
일부 구현들에서, 복수의 데이터 액세스 요청들은 사전정의된 기간 내에 하나 이상의 프로세서들(204)로부터 클러스터 캐시(212)로 전송된 모든 데이터 액세스 요청들을 포함하는데, 즉 모든 요구 요청들 및 모든 프리페치 요청들을 포함한다.
일부 구현들에서, 제어기(216)는, 프로세싱 클러스터(202)의 혼잡 레벨에 관계없이, 각자의 프로세서(204-1 또는 204-N)의 혼잡 레벨이 클러스터 캐시(212)에 사용된 혼잡 임계치(802 또는 808)와는 상이한 프로세서 혼잡 임계치(836) 미만이라고 결정하고, 각자의 프로세서(204-1 또는 204-N)로부터 클러스터 캐시(212)로의 프리페치 요청들을 제한하는 것을 보류한다. 즉, 이들 구현들에서, 각자의 프로세서의 혼잡 레벨이 프로세서 혼잡 임계치(836) 미만일 때(예컨대, "L"과 동일함), 각자의 프로세서(204-1 또는 204-N)로부터의 프리페치 요청들은 클러스터 혼잡 레벨 및 시스템 혼잡 레벨에 기초하여 제한되지 않는다. 반대로, 각자의 프로세서(204-1 또는 204-N)의 혼잡 레벨이 프로세서 혼잡 임계치(836)를 초과하는 경우(예컨대, "H"와 동일함), 각자의 프로세서(204-1 또는 204-N)로부터 클러스터 캐시(212)로의 프리페치 요청들은 프로세싱 클러스터 및 시스템의 혼잡 레벨들에 기초하여 제한되거나 또는 스로틀링된다. 각자의 프로세서(204-1 또는 204-N)의 혼잡 레벨은, 예컨대, 각자의 프로세서(204-1 또는 204-N) 이외의 임의의 프로세서들로부터 클러스터 캐시(212)로 전송된 데이터 액세스 요청들이 클러스터 캐시(212)에 의해 만족되는지 여부에 관계없이, 각자의 프로세서(204-1 또는 204-N)로부터 클러스터 캐시(212)로 전송된 데이터 액세스 요청들이 클러스터 캐시(212)에 의해 만족되지 않은 정도에 기초하여 결정된다.
다르게 말하면, 일부 구현들에서, 제1 혼잡 기준은, 제어기(216)가 각자의 프로세서로부터의 프리페치 요청들을 제한하기 위해 각자의 프로세서(204)의 혼잡 레벨이 프로세서 혼잡 임계치(836) 초과일 것을 추가로 요구한다. 일부 구현들에서, 각자의 프로세서의 혼잡 레벨이 프로세서 혼잡 임계치(836) 초과인지 여부에 기초하여 각자의 프로세서로부터의 프리페치 요청들을 제한할지 여부에 대한 결정은, (예컨대, 프로세싱 클러스터(202)의 혼잡 레벨에 관한 제1 혼잡 기준, 제2 혼잡 기준, 및/또는 제3 혼잡 기준과 관련하여) 프리페치 요청들을 제한할지 여부에 관한 다른 결정들보다 우선순위를 취한다.
일부 구현들에서, 제어기(216)는 각각의 프로세서(204)의 과거 혼잡 레벨들을 저장하기 위해 프로세서 혼잡 레벨 이력(834)을 유지한다. 각자의 프로세서로부터의 프리페치 요청들은 이러한 프로세서(204)의 혼잡 레벨 이력(834)의 적어도 일부분에 기초하여 결정되는 프로세서(204)의 혼잡 레벨에 기초하여 제한된다. 프로세서(204)의 현재 혼잡 레벨이 레코딩되고 프로세서 혼잡 임계치(836)와 비교되고, 복수의 값들(예컨대, "L" 및 "H") 중 하나가 비교 결과에 기초하여 결정되고 (예컨대, 이력(834)에서 가장 오래된 캐시 미스 레벨 대신에) 이러한 프로세서(204)의 혼잡 레벨 이력(834)에서 현재 혼잡 레벨(834A)로서 저장된다. 프로세서(204)의 현재 혼잡 레벨(834A)이 프로세서(202)의 혼잡 레벨보다 더 높은 혼잡 레벨을 나타낸다는 결정에 따라, 프로세서(202)의 혼잡 레벨은 하나의 레벨만큼 또는 현재 혼잡 레벨(834A)로 증가된다. 프로세서(204)의 전체 혼잡 레벨 이력(834)이 프로세서(202)의 혼잡 레벨보다 더 낮다는 결정에 따라, 프로세서(202)의 혼잡 레벨은 하나의 레벨만큼 또는 더 낮은 혼잡 레벨로, 예컨대 "H"로부터 "L"로 감소된다.
또한, 일부 구현들에서, 프로세서 혼잡 임계치(836)는 프로세서 캐시 미스 임계치(836')를 포함한다. 프로세서(204)의 혼잡 레벨을 결정하는 것은, 각자의 프로세서(204)로부터 클러스터 캐시(212)로 전송된, 클러스터 캐시(212)에 의해 만족되지 않은(즉, 캐시 미스들) 데이터 액세스 요청들의 수를 프로세서 캐시 미스 임계치(836)와 비교하는 것을 포함한다. 예를 들어, 프로세서(204)에 대한 캐시 미스들의 수가 캐시 미스 임계치(836') 미만인 경우, 프로세서(204)의 혼잡 레벨을 결정할 때, 제1 캐시 미스 값(예컨대, 낮은 값)이 고려되고; 프로세서(204)에 대한 캐시 미스들의 수가 캐시 미스 임계치(836') 초과인 경우, 프로세서(204)의 혼잡 레벨을 결정할 때, 제2 캐시 미스 값(예컨대, 중간 또는 높은 값)이 고려된다. 특히, 일부 구현들에서, 현재 캐시 미스는, 샘플 지속 시간 동안 클러스터 캐시(212)에 의해 만족되지 않은 데이터 액세스 요청들의 현재 수에 대해 결정된다. 현재 캐시 미스가 캐시 미스 임계치(836)와 비교되고, 복수의 캐시 미스 값들(예컨대, "L" 및 "H") 중 하나가 비교 결과에 기초하여 결정되고 (예컨대, 이력(834)에서 가장 오래된 캐시 미스 레벨 대신에) 이러한 프로세서(204)의 혼잡 레벨 이력(834)에서 현재 캐시 미스 레벨(834A)로서 저장된다. 프로세서(204)의 현재 캐시 미스 레벨(834A)이 프로세서(202)의 혼잡 레벨보다 더 높은 혼잡 레벨을 나타낸다는 결정에 따라, 프로세서(202)의 혼잡 레벨은 하나의 레벨만큼 또는 현재 캐시 미스 레벨(834A)로 증가된다. 프로세서(204)의 혼잡 레벨 이력(834)이 프로세서(202)의 혼잡 레벨보다 더 낮은 혼잡 레벨을 나타낸다는(예컨대, 혼잡 레벨 이력(834)에서의 모든 캐시 미스 레벨들이 프로세서(202)의 혼잡 레벨보다 더 낮음) 결정에 따라, 프로세서(202)의 혼잡 레벨은 하나의 레벨만큼 또는 더 낮은 혼잡 레벨로, 예컨대 "H"로부터 "L"로 감소된다.
일부 구현들에서, 전자 디바이스(200)는 프로세싱 클러스터(202-1)의 하나 이상의 프로세서들(204)과는 상이한 하나 이상의 제2 프로세서들(206)을 갖는 제2 프로세싱 클러스터(202-M)를 포함한다. 제어기(216-1)는, 제2 프로세싱 클러스터(202-M)의 하나 이상의 제2 프로세서들(206)로부터의 프리페치 요청들이 제한되는지 여부와 관계없이, 프로세싱 클러스터(202-1)에 의해 프리페치 요청들을 제한한다. 일부 구현들에서, 제2 프로세싱 클러스터(202-M)에 의한 프리페칭은 프로세싱 클러스터(202-1)와 관련하여 본 명세서에 설명된 프리페칭을 제어하기 위한 방법들 중 임의의 방법에 따라 제어된다. 일부 구현들에서, 제2 프로세싱 클러스터(202-M)에 의한 프리페칭은 시스템 혼잡에 간접적으로 영향을 줌으로써 프로세싱 클러스터(202-1)에 의한 프리페칭에 간접적으로 영향을 줄 수 있지만; 제2 프로세싱 클러스터(202-M)의 프리페칭 또는 프리페치 스로틀링은, 프로세싱 클러스터(202-1)에 의한 프리페칭을 제한할지 여부를 결정하는데 있어서 직접 고려되지는 않는다.
도 9는 일부 구현들에 따른, 개별 프로세싱 클러스터(202)(예컨대, 제1 프로세싱 클러스터(202-1))에서 캐시 프리페칭을 제어하기 위해 시스템 혼잡 레벨을 결정하는 예시적인 방법(900)을 예시한다. 프로세싱 클러스터(202)의 프로세서(204)의 데이터 액세스 요청이 클러스터 캐시(212)로 전송된다. 이러한 데이터 액세스 요청이 클러스터 캐시(212)에 의해 만족되지 않은 경우, 그것은 프로세싱 클러스터(202)에 의해 하나 이상의 다른 프로세싱 클러스터들과 공유되는 캐시(220)로 계속 전송된다. 데이터 액세스 요청이 캐시(220)에 의해 만족되지 않은 경우, 그것은 메모리(104)로 추가로 전송된다. 시스템 혼잡 레벨은, 프로세서들(204)로부터 얼마나 많은 데이터 액세스 요청들이 캐시(220) 또는 메모리(104)로 전송되는지를 나타낸다. 구체적으로, 제1 혼잡 레벨 이력(902) 및 제2 혼잡 레벨 이력(904)은 제어기(216)에 의해 유지된다. 캐시(220)의 현재 혼잡 레벨(604)은 캐시(220)에 의해 수신된 미해결 진행 중 요청들의 수에 기초하여 획득되고, 제1 혼잡 레벨 이력(902)에 저장된다. 메모리(104)의 현재 혼잡 레벨(504)은 메모리(104)에 의해 수신된 미해결 진행 중 요청들의 수에 기초하여 획득되고, 제2 혼잡 레벨 이력(904)에 저장된다. 일부 구현들에서, 캐시(220) 또는 메모리(104)에 의해 만족되지 않은 미해결 진행 중 요청들의 정보는, 캐시(220) 및 메모리(104)로 각각 전송된 데이터 액세스 요청들에 응답하여 캐시(220) 및 메모리(104)로부터 수신되는 시스템 비지 레벨 신호들(즉, 현재 혼잡 레벨들(504, 604))에 기초하여 결정된다.
메모리(104) 및 캐시(220)의 현재 혼잡 레벨들(504, 604)은 선택적으로 서로 동일하거나 또는 상이한 각자의 샘플링 레이트들로 모니터링된다. 제1 및 제2 혼잡 레벨 이력들(902, 904)은 각자의 제한된 수들의 과거 혼잡 레벨들까지를 저장할 수 있고, 각자의 제한된 수들은 선택적으로 서로 동일하거나 또는 상이할 수 있다. 일례에서, 제1 및 제2 혼잡 레벨 이력들(902, 904)은 캐시(220)의 과거 혼잡 레벨들의 제1 정수 및 메모리(104)의 과거 혼잡 레벨들의 제2 정수를 추적한다. 제1 정수 및 제2 정수는 선택적으로 서로 동일하거나 또는 서로 별개이다.
일부 구현들에서, 제어기(216)는, 프로세싱 클러스터(202)로 하여금, 캐시(220)의 획득된 현재 혼잡 레벨(604)을 포함하는 캐시(220)의 제1 혼잡 레벨 이력(902)에 기초하여 가장 높은 스로틀링 레벨(920)에 따라 프로세싱 클러스터(202)로부터의 프리페치 요청들을 제한하게 하도록 구성된다. 일부 상황들에서, 메모리(104)의 획득된 현재 혼잡 레벨(504)에 관계없이 가장 높은 스로틀링 레벨(920)이 결정된다. 일부 구현들에서, 프로세싱 클러스터(202)로부터의 프리페치 요청들이 가장 높은 스로틀링 레벨(920)에 따라 제한되는지 여부는, 캐시(220)의 획득된 현재 혼잡 레벨(604), 캐시(220)의 제1 혼잡 레벨 이력(902), 및/또는 캐시(220)의 제1 혼잡 레벨 이력(902)의 적어도 일부분에 기초하여 결정되는 캐시(220)의 제1 혼잡 레벨에 기초한다. 예를 들어, 가장 높은 스로틀링 레벨(920)은 제1 시스템 혼잡 조건(816)(예컨대, 제1 혼잡 레벨 이력(902)의 적어도 사전정의된 백분율은 "H"와 동일함)을 참조하여 결정될 수 있다. 일부 구현들에서, 메모리(104)의 혼잡이 아니라, 캐시(220)의 혼잡은 프로세싱 클러스터(202)로부터의 프리페치 요청들이 가장 높은 스로틀링 레벨(920)에 따라 제한되는지 여부를 결정한다. 추가적으로, 일부 구현들에서, 제어기(216)는, 프로세싱 클러스터(202)로 하여금, 프로세싱 클러스터(202) 및 캐시(220) 둘 모두의 혼잡 레벨들에 기초하여 가장 높은 스로틀링 레벨(920)에 따라 프리페치 요청들을 제한하게 하도록 구성된다. 예를 들어, 프로세싱 클러스터(202)의 혼잡 레벨이 클러스터 혼잡 임계치(808) 초과이고, 캐시(220)의 제1 혼잡 레벨 이력(902)이 제1 시스템 혼잡 조건(816)을 만족할 때, 가장 높은 스로틀링 레벨(920)이 프리페칭을 제한하기 위해 적용된다. 일부 구현들에서, 가장 높은 스로틀링 레벨(920)은, 어떠한 프리페칭도 허용되지 않는 스로틀 올 모드(M4)(812)에 대응한다.
또한, 일부 구현들에서, 제어기(216)는, 프로세싱 클러스터(202)로 하여금, 캐시(220)의 제1 혼잡 레벨 이력(902)에 기초하여, 예컨대 제1 혼잡 레벨 이력(902) 및/또는 제2 혼잡 레벨 이력(904)의 서브세트에 기초하여 가장 높은 스로틀링 레벨(920)에 따라 프로세싱 클러스터(202)로부터의 프리페치 요청들을 제한하게 하도록 구성된다. 제1 혼잡 레벨 이력(902)의 서브세트는 이력(902)에 저장된 전체 또는 전체 미만의 혼잡 레벨을 포함한다. 일례에서, 제어기(216)는, 프로세싱 클러스터(202)로 하여금, 캐시(220)의 하나 이상의 가장 최근에 결정된 그리고 레코딩된 혼잡 레벨들에 기초하여 프로세싱 클러스터(202)로부터의 프리페치 요청들을 제한하게 한다. 일부 구현들에서, 제1 혼잡 레벨 이력(902)의 서브세트는 제2 혼잡 레벨 이력(904)과 동일한 수의 레코딩된 과거 혼잡 레벨들(예컨대, 동일한 수의 샘플들 또는 엔트리들)을 갖는다.
일부 구현들에서, 제어기(216)는, 프로세싱 클러스터(202)로 하여금, 제1 혼잡 레벨 이력(902)이 캐시(220)의 각자의 혼잡 레벨(예컨대, 시스템 혼잡 임계치 초과인 높은 혼잡 레벨 "H")을 나타내는 제1 임계 수 초과의 결정된 혼잡 레벨들을 포함한다는 결정에 기초하여, 예컨대 가장 높은 스로틀링 레벨(920)을 활성화시키기 위해, 가장 높은 스로틀링 레벨(920)에 따라 프로세싱 클러스터(202)로부터의 프리페치 요청들을 제한하게 하도록 구성된다. 예를 들어, 제1 혼잡 레벨 이력(902)(또는 제1 혼잡 레벨 이력(902)의 서브세트)이, 높은 혼잡 레벨(예컨대, "H")이 캐시(220)에 대해 레코딩되었던 인스턴스들의 제1 임계 수(또는 대안적으로, 제1 임계 백분율)보다 큰 수의 인스턴스들을 포함하는 경우, 가장 높은 스로틀링 레벨(920)이 활성화된다.
일부 구현들에서, 제어기(216)는, 프로세싱 클러스터(202)로 하여금, 제1 혼잡 레벨 이력(902)이 캐시(220)의 각자의 혼잡 레벨(예컨대, 시스템 혼잡 임계치 초과인 높은 혼잡 레벨 "H")을 나타내는 제2 임계 수 미만의 결정된 혼잡 레벨들을 포함한다는 결정에 기초하여, 예컨대 가장 높은 스로틀링 레벨(920)을 비활성화시키기 위해, 가장 높은 스로틀링 레벨(920)에 따라 프로세싱 클러스터(202)로부터의 프리페치 요청들을 제한하는 것을 보류하게 하도록 구성된다. 예를 들어, 제1 혼잡 레벨 이력(902)(또는 제1 혼잡 레벨 이력(902)의 서브세트)이, 높은 혼잡 레벨(예컨대, "H")이 캐시(220)에 대해 레코딩되었던 제2 임계 수(또는 대안적으로, 제2 임계 백분율) 미만의 인스턴스들을 포함하는 경우, 가장 높은 스로틀링 레벨(920)이 비활성화된다. 일부 구현들에서, 제1 임계 수는 제2 임계 수와 동일하다(또는 대안적으로, 제1 임계 백분율은 제2 임계 백분율과 동일함). 일부 구현들에서, 제1 임계 수는 제2 임계 수와는 상이하다(예컨대, 그보다 더 큼)(또는 대안적으로, 제1 임계 백분율은 제2 임계 백분율과는 상이함). 일례에서, 제1 백분율 및 제2 임계 백분율 둘 모두는 50%이다. 다른 예에서, 제1 임계 백분율은 75%이고, 제2 임계 백분율은 25%이다.
일부 구현들에서, 가장 높은 스로틀링 레벨(920)에 따라 프로세싱 클러스터(202)로부터 프리페치 요청들을 제한하는 것은, 예컨대 스로틀 올 모드(M4)에서 프로세싱 클러스터(202)로부터의 모든 프리페치 요청들을 제한하는 것을 포함한다. 가장 높은 스로틀링 레벨(920)에 따라, 프로세싱 클러스터(202)로부터의 어떠한 프리페치 요청들도 허용되지 않는다.
일부 구현들에서, 제어기(216)는 캐시(220)의 제1 혼잡 레벨 및 메모리(104)의 제2 혼잡 레벨을 결정한다. 캐시(220)의 획득된 현재 혼잡 레벨(604)이 제1 혼잡 레벨보다 더 높은 혼잡 레벨을 나타낸다는 결정에 따라, 제어기(216)는 제1 혼잡 레벨을, 예컨대 가능한 혼잡 레벨들의 세트에서 다음으로 높은 레벨로 증가시킨다. 반대로, 제1 혼잡 레벨 이력(902)이 제1 혼잡 레벨보다 더 낮은 혼잡 레벨을 나타낸다는(예컨대, 전체 제1 혼잡 레벨 이력(902)이 제1 혼잡 레벨보다 더 낮음) 결정에 따라, 제어기(216)는 제1 혼잡 레벨을 감소시킨다. 예를 들어, 제1 혼잡 레벨 이력(902) 내의 어떠한 엔트리도 제1 혼잡 레벨의 현재 값보다 더 높은 혼잡 레벨을 나타내지 않는다는 결정에 따라, 제어기(216)는 제1 혼잡 레벨을, 예컨대 가능한 혼잡 레벨들의 세트에서 다음으로 낮은 레벨로 감소시킨다. 유사하게, 일부 구현들에서, 메모리(104)의 획득된 현재 혼잡 레벨(504)이 제2 혼잡 레벨(예컨대, 그의 현재 값)보다 더 높은 혼잡 레벨을 나타낸다는 결정에 따라, 제어기(216)는 제2 혼잡 레벨을, 예컨대 가능한 혼잡 레벨들의 세트에서 다음으로 높은 레벨로 증가시킨다. 제2 혼잡 레벨 이력(904)이 제2 혼잡 레벨보다 더 낮은 혼잡 레벨을 나타낸다는(예컨대, 전체 제2 혼잡 레벨 이력(904)이 제2 혼잡 레벨보다 더 낮음) 결정에 따라, 제어기(216)는 제2 혼잡 레벨을 감소시킨다. 예를 들어, 일부 구현들에서, 제2 혼잡 레벨 이력(904) 내의 어떠한 엔트리도 제2 혼잡 레벨의 현재 값보다 더 높은 혼잡 레벨을 나타내지 않는다는 결정에 따라, 제어기(216)는 제2 혼잡 레벨을, 예컨대 가능한 혼잡 레벨들의 세트에서 다음으로 낮은 레벨로 감소시킨다. 그와 같이, 제어기(216)는, 프로세싱 클러스터(202)로 하여금, 제1 혼잡 레벨 및 제2 혼잡 레벨에 기초하여 프로세싱 클러스터(202)로부터의 프리페치 요청들을 제한하게 하고, 가장 높은 스로틀링 레벨 미만인 각자의 스로틀링 레벨에 따라 프리페치 요청들을 제한할지 여부를 결정하는데 있어서, 제1 혼잡 레벨 및 제2 혼잡 레벨이 고려된다.
일부 구현들에서, 제1 시스템 혼잡 레벨(906)은 캐시(220)의 획득된 현재 혼잡 레벨(604), 캐시(220)의 제1 혼잡 레벨 이력(902), 및/또는 캐시(220)의 제1 혼잡 레벨 이력(902)의 적어도 일부분에 기초하여 결정되는 캐시(220)의 제1 혼잡 레벨에 기초하여 결정된다. 제2 시스템 혼잡 레벨(908)은 메모리(104)의 획득된 현재 혼잡 레벨(504), 메모리(104)의 제2 혼잡 레벨 이력(904), 및/또는 메모리(104)의 제2 혼잡 레벨 이력(904)의 적어도 일부분에 기초하여 결정되는 메모리(104)의 제2 혼잡 레벨에 기초하여 결정된다. 혼잡 레벨들(906, 908)이 조합되어, 상이한 캐시 미스 임계치들(즉, 캐시 미스 임계치들(802', 808'))을 결정하기 위해 적용되는, 제1 혼잡 값(826) 및 제2 혼잡 값(828)과 같은 2개 이상의 혼잡 값들을 갖는 조합된 시스템 혼잡 레벨(910)을 생성한다. 일부 구현들에서, 조합된 시스템 혼잡 레벨(910)은 캐시(220)의 혼잡 레벨(906) 및 메모리(104)의 혼잡 레벨(908) 중 더 큰 레벨과 동일하다. 예를 들어, 혼잡 레벨(906)이 "L"이고 혼잡 레벨(908)이 "H"인 경우, 조합된 시스템 혼잡 레벨(910)은 "H"이다. 혼잡 레벨(906)이 "H"이고 혼잡 레벨(908)이 "L"인 경우, 조합된 시스템 혼잡 레벨(910)은 여전히 "H"이다.
도 8 및 도 9에서의 동작들이 설명되었던 특정 순서는 단지 예시적일 뿐이며, 설명된 순서가 동작들이 수행될 수 있는 유일한 순서라는 것을 나타내도록 의도되지 않음을 이해해야 한다. 당업자는 본 명세서에 설명된 동작들을 재순서화하는 다양한 방식들을 인식할 것이다. 추가적으로, 방법들(800, 900)(예컨대, 도 8, 도 9)과 관련하여 본 명세서에 설명된 다른 프로세스들의 상세사항들이 또한 교환가능한 방식으로 적용가능하다는 것에 유의해야 한다. 간결함을 위해, 이들 세부사항들은 여기서 반복되지 않는다.
도 10은 일부 구현들에 따른, 전자 디바이스에 의해 메모리(104)에 대한 메모리 액세스들을 관리하는 방법(1000)의 흐름도이다. 전자 디바이스는 하나 이상의 프로세싱 클러스터들(202) 및 메모리(104)의 복수의 메모리 블록들(222)을 포함한다(1002). 각각의 프로세싱 클러스터(202)는 하나 이상의 각자의 프로세서들(204)을 포함하고, 메모리 블록들(222) 중 적어도 하나에 커플링된다. 일부 실시 형태들에서, 각각의 프로세싱 클러스터(202)는 방법(1000)을 구현하도록 구성된 제어기(216)를 갖는다. 일부 실시 형태들에서, 전자 디바이스는, 전자 디바이스의 제어기(216)에 의해 실행될 때 제어기로 하여금 방법(1000)을 구현하게 하는 명령들이 저장된 비일시적 컴퓨터 판독가능 매체를 포함한다.
방법(1000)에 따르면, 전자 디바이스는 전자 디바이스의 리소스들을 복수의 클라이언트들에 의해 활용될 복수의 리소스 부분들로 파티셔닝한다(1004). 각각의 리소스 부분은 각자의 클라이언트에 배정되고, 각자의 ID를 갖고 있다. 전자 디바이스는 복수의 메모리 블록들(222)에 대한 복수의 클라이언트들(224)과 연관된 복수의 데이터 액세스 요청들을 수신한다(1006). 일부 구현들에서, 데이터 액세스 요청들은 요구 요청들 및 프리페치 요청들 둘 모두를 포함한다. 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해(1008), 각각의 프로세싱 클러스터(202)는 메모리 블록들(222)에 대응하는 복수의 메모리 대역폭 사용량 상태들(402)을 추적한다(1010). 각각의 메모리 대역폭 사용량 상태(402)는 각자의 메모리 블록과 연관되고(1012), 각자의 메모리 블록(222)에 액세스하기 위해 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 적어도 어느 정도가 사용되는지를 나타낸다. 프로세싱 클러스터(202)는 복수의 메모리 대역폭 사용량 상태들(402)로부터 각자의 파티션 ID와 연관된 사용량 레벨(406)을 결정하고(1014), 사용량 레벨(406)에 기초하여 크레디트 카운트(408)를 조정하고(1016), 조정된 크레디트 카운트(408)를 요청 발행 임계치(410)와 비교하고(1018), 크레디트 카운트가 요청 발행 임계치보다 더 크다는 결정에 따라, 메모리 액세스 요청 큐(214)에서 각자의 파티션 ID와 연관된 다음 데이터 액세스 요청(412)을 발행한다(1020). 일부 상황들에서, 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 크레디트 카운트(408)가 요청 발행 임계치(410) 미만이라는 결정에 따라, 프로세싱 클러스터(202)는, 크레디트 카운트(408)가 요청 발행 임계치(410)보다 크도록 조정될 때까지 각자의 파티션 ID의 메모리 액세스 요청 큐(214)로부터 임의의 데이터 액세스 요청을 발행하는 것을 유보한다.
일부 구현들에서, 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 프로세싱 클러스터(202)는, 다음 데이터 액세스 요청(412) 직전에 발행되는 이전 데이터 액세스 요청(예컨대, 요청(404A))에 응답하여 복수의 메모리 대역폭 사용량 상태들(402) 중 하나 이상을 업데이트한다. 복수의 메모리 대역폭 사용량 상태들 중 하나 이상의 업데이트 이후 사전정의된 수의 클록 사이클들 후에, 사용량 레벨(406)은 복수의 메모리 대역폭 사용량 상태들(402)로부터 결정된다. 복수의 메모리 대역폭 사용량 상태들 중 하나 이상의 업데이트 이후 사전정의된 수의 클록 사이클들 후에, 그리고 다음 데이터 액세스 요청이 발행될 때까지, 크레디트 카운트(408)가 조정되고, 예컨대 각각의 후속 클록 사이클 내에서, 요청 발행 임계치(410)와 주기적으로 비교된다.
일부 구현들에서, 복수의 데이터 액세스 요청들 각각이 발행된 후에, 프로세싱 클러스터(202)는 발행된 데이터 액세스 요청과 연관된 각자의 메모리 블록으로부터 각자의 응답을 직접적으로 또는 간접적으로 수신하고, 발행된 데이터 액세스 요청과 연관된 각자의 메모리 블록(222)에 대응하는 각자의 메모리 대역폭 사용량 상태(502)를 업데이트한다.
일부 구현들에서, 사용량 레벨이 높은 사용량 임계치 이상이라는 결정에 따라, 프로세싱 클러스터(202)는 각자의 파티션 ID에 대응하는 각자의 크레디트 단위(CU)만큼 크레디트 카운트(408)를 감소시킨다. 사용량 레벨이 낮은 사용량 임계치 이하라는 결정에 따라, 프로세싱 클러스터(202)는 각자의 크레디트 단위(CU)만큼 크레디트 카운트(408)를 증가시킨다. 사용량 레벨이 높은 사용량 임계치와 낮은 사용량 임계치 사이에 있다는 결정에 따라, 프로세싱 클러스터(202)는 크레디트 카운트(408)를 유지한다.
일부 구현들에서, 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 복수의 메모리 대역폭 사용량 상태들(402) 각각은 각자의 다중비트 상태 번호를 포함한다. 프로세싱 클러스터(202)는, 메모리 대역폭 사용량 상태들의 각자의 다중비트 상태 번호들 중 몇 개가 사전정의된 값(예컨대, "11")과 동일한지를 결정한다.
일부 구현들에서, 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 복수의 메모리 대역폭 사용량 상태들(402) 각각은, 각자의 메모리 블록의 평균 데이터 액세스 레벨이 각자의 메모리 블록에 액세스하기 위해 각자의 파티션 ID에 배정된 사전정의된 메모리 액세스 대역폭의 사전정의된 임계치 부분을 초과했는지 여부를 나타내는 플래그에 의해 표현된다. 또한, 일부 구현들에서, 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 사용량 레벨(406)은, 각각에 대해 플래그가 제1 값(예컨대, "Y")을 갖는 메모리 블록들의 총 수에 의해 표현된다. 추가적으로, 일부 구현들에서, 제1 메모리 블록(222A)에 대해, 플래그는 제1 값을 갖는다. 제1 메모리 블록(222A)의 경우, 프로세싱 클러스터(202)는 복수의 메모리 블록들의 제2 요청 큐(510)에서 대기하고 있는 데이터 액세스 요청들의 제2 총 수를 모니터링한다. (a) 제1 평균 데이터 액세스 레벨이 제1 메모리 블록에 액세스하기 위해 각자의 파티션 ID에 배정된 제1 사전정의된 메모리 액세스 대역폭의 제1 사전정의된 임계치 부분을 초과한다는, 그리고 (b) 데이터 액세스 요청들의 제2 총 수(MCQ)가 외부 메모리 용량의 대안적인 사전정의된 부분을 초과한다는 결정에 따라, 프로세싱 클러스터(202)는, 제1 메모리 블록의 제1 메모리 대역폭 사용량 상태를 나타내는 플래그가 제1 값을 갖는다고 결정한다.
또한, 일부 구현들에서, 제1 메모리 블록(222A)에 대해, 플래그는 제1 값(예컨대, "Y")을 갖는다. 제1 메모리 블록(222A)에 대해, (a) 제1 평균 데이터 액세스 레벨이 제1 메모리 블록에 액세스하기 위해 각자의 파티션 ID에 배정된 제1 사전정의된 메모리 액세스 대역폭의 제1 사전정의된 임계치 부분을 초과한다는, 그리고 (b) 제1 사전정의된 메모리 액세스 대역폭이 실시된다는 결정에 따라, 프로세싱 클러스터(202)는, 제1 메모리 블록(222A)의 제1 메모리 대역폭 사용량 상태(402)를 나타내는 플래그가 제1 값(예컨대, "Y")을 갖는다고 결정한다.
일부 구현들에서, 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 프로세싱 클러스터(202)는 복수의 데이터 액세스 요청들 중 각각의 판독 또는 기록 요청을, 메모리 블록들(222)과는 별개인 그리고 하나 이상의 프로세싱 클러스터(202)와 연관된 제1 메모리(예컨대, 캐시(220))를 통해 각자의 메모리 블록(222)으로 전송한다. 각자의 파티션 ID로부터 각자의 메모리 블록(222)으로 발행된 각각의 판독 요청에 응답하여, 프로세싱 클러스터(202)는 각자의 메모리 블록(222)으로부터 각자의 메모리 블록(222)의 각자의 메모리 대역폭 사용량 상태(402)를, 판독 요청에 의해 요청된 데이터 항목을 이용하여 직접적으로 또는 제1 메모리를 통해 간접적으로 업데이트한다. 각자의 파티션 ID로부터 각자의 메모리 블록으로 발행된 각각의 기록 요청에 응답하여, 프로세싱 클러스터(202)는 제1 메모리로부터 각자의 메모리 블록(222)과 연관된 각자의 메모리 대역폭 사용량 상태(402)를 업데이트한다. 복수의 메모리 블록들은 하나 이상의 프로세싱 클러스터들(202)로부터 제1 메모리로 전송된, 제1 메모리에 의해 만족되지 않은 데이터 액세스 요청들을 수신하도록 구성된다.
일부 구현들에서, 전자 디바이스는 복수의 데이터 액세스 요청들을 수신하도록 그리고 만족되지 않은 데이터 액세스 요청들의 서브세트를 메모리 블록들(222)에 패스하도록 구성된 제1 메모리(예컨대, 캐시(220))를 추가로 포함한다. 프로세싱 클러스터(202)는, 제1 메모리의 제1 요청 큐(610)에서 대기하고 있는 데이터 액세스 요청들의 제1 총 수가 시스템 캐시 용량의 제1 사전정의된 부분을 초과하는지 여부를 나타내는 제1 메모리의 제1 현재 혼잡 레벨(604), 및 복수의 메모리 블록들의 제2 요청 큐(510)에서 대기하고 있는 데이터 액세스 요청들의 제2 총 수가 외부 메모리 용량의 제2 사전정의된 부분을 초과하는지 여부를 나타내는 복수의 메모리 블록들의 제2 현재 혼잡 레벨(504)을 획득한다. 또한, 일부 구현들에서, 복수의 데이터 액세스 요청들은 복수의 프리페치 요청들을 포함한다. 제1 현재 혼잡 레벨(604)이 스로틀링 조건을 만족한다는 결정에 따라, 복수의 프리페치 요청들은 복수의 리소스 부분들로부터 스로틀링된다. 추가적으로, 일부 구현들에서, 복수의 데이터 액세스 요청들은 복수의 프리페치 요청들을 포함한다. 제1 및 제2 현재 혼잡 레벨들이 프리페치 제어 조건을 만족한다는 결정에 따라, 프로세싱 클러스터(202)는, 프리페치 제어 조건에 대응하는 임계 품질을 초과하는 품질들을 갖는 프리페치 요청들의 제1 서브세트를 선택하고, 프리페치 요청들의 서브세트를 메모리 액세스 요청 큐에 포함하고, 임계 품질을 초과하지 않는 품질들을 갖는 프리페치 요청들의 제2 서브세트를 메모리 액세스 요청 큐(214)로부터 배제한다.
일부 구현들에서, 전자 디바이스는 제1 메모리(예컨대, 캐시(220))를 추가로 포함하고, 메모리 블록들(222)에 대응하는 복수의 메모리 대역폭 사용량 상태들(402)은 하나 이상의 프로세싱 클러스터들(202)에서 추적된다. 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 각각의 메모리 블록(222)에서, 각자의 메모리 블록(222)에 대한 각자의 파티션 ID의 평균 데이터 액세스 레벨이 실시간으로 추적되고, 각자의 메모리 블록(222)과 연관된 각자의 메모리 대역폭 사용량 상태(402)가 평균 데이터 액세스 레벨에 기초하여 결정된다. 각자의 메모리 대역폭 사용량 상태(402)는, 하나 이상의 프로세싱 클러스터들(202)로부터 수신된 데이터 액세스 요청들에 응답하여 제1 메모리 및 하나 이상의 프로세싱 클러스터들(202)에 보고된다. 제1 메모리는, 하나 이상의 프로세싱 클러스터들(202)로부터 수신된 복수의 데이터 액세스 요청들에 응답하여 복수의 메모리 블록들(222)에 의해 보고된 각자의 메모리 대역폭 사용량 상태(402)를 수신한다.
도 11은 일부 구현들에 따른, 하나 이상의 프로세싱 클러스터들(202) 및 복수의 메모리 블록들(222)에 커플링된 제1 메모리(예컨대, 캐시 220))에서 메모리 대역폭 사용량을 추적하는 방법(1100)의 흐름도이다. 방법(1100)은 제1 메모리에서 구현된다(1102). 제1 메모리는 전자 디바이스 내의 하나 이상의 프로세싱 클러스터들(202) 및 복수의 메모리 블록들(222)에 커플링된다. 제1 메모리는 복수의 클라이언트들(224)과 연관된 복수의 데이터 액세스 요청들을 복수의 메모리 블록들(222)로 포워딩한다(1104). 전자 디바이스의 리소스들은 복수의 클라이언트들에 의해 활용될 복수의 리소스 부분들로 파티셔닝되고(1106), 각각의 리소스 부분은 각자의 클라이언트에 배정되고 각자의 파티션 ID를 갖는다. 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해(1108), 제1 메모리는 메모리 블록들(222)에 액세스하기 위해 각자의 파티션 ID와 연관된 데이터 액세스 요청들의 서브세트를 식별하고(1110), 메모리 블록들(222)에 대응하는 복수의 메모리 대역폭 사용량 상태들(402)을 추적한다(1112). 각각의 메모리 대역폭 사용량 상태(402)는, 각자의 메모리 블록과 연관되고, 각자의 메모리 블록에 액세스하기 위해 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 적어도 어느 정도가 사용되는지를 나타낸다(1114). 데이터 액세스 요청들의 서브세트 각각에 응답하여(1116), 제1 메모리는, 각자의 데이터 액세스 요청이 대응하는 메모리 블록에 액세스하기 위한 것이라고 결정하고(1118), 대응하는 메모리 블록의 메모리 대역폭 사용량 상태를 수신하고(1120), 대응하는 메모리 블록의 메모리 대역폭 사용량 상태를 하나 이상의 프로세싱 클러스터들에 보고한다(1122).
일부 구현들에서, 제1 메모리는 제1 메모리의 제1 요청 큐(610)에서 대기하고 있는 데이터 액세스 요청들의 제1 총 수(HNQ)를 모니터링하고, 데이터 액세스 요청들의 제1 총 수가 시스템 캐시 용량의 제1 사전정의된 부분을 초과하는지 여부를 나타내는 제1 현재 혼잡 레벨(604)(즉, HN[2])을 결정한다. 데이터 액세스 요청들의 서브세트 각각에 응답하여, 제1 메모리는, 대응하는 메모리 블록의 메모리 대역폭 사용량 상태(502)와 공동으로 제1 현재 혼잡 레벨(604)(즉, HN[2])을 하나 이상의 프로세싱 클러스터들(202)에 보고한다. 또한, 일부 구현들에서, 하나 이상의 프로세싱 클러스터(202)에서, 제1 현재 혼잡 레벨(604)(즉, HN[2])이 스로틀링 조건을 만족한다는 결정에 따라, 복수의 리소스 부분들로부터의 복수의 프리페치 요청들이 스로틀링된다.
일부 구현들에서, 데이터 액세스 요청들의 서브세트 각각에 응답하여, 제1 메모리는, 대응하는 메모리 블록으로부터, 복수의 메모리 블록들의 제2 요청 큐에서 대기하고 있는 데이터 액세스 요청들의 제2 총 수가 외부 메모리 용량의 제2 사전정의된 부분을 초과하는지 여부를 나타내는 제2 현재 혼잡 레벨(504)(즉, SN[2])을 업데이트한다. 제1 메모리는, 대응하는 메모리 블록의 메모리 대역폭 사용량 상태(402) 및 제1 현재 혼잡 레벨(604)(즉, HN[2])과 공동으로 제2 현재 혼잡 레벨(504)(즉, SN[2])을 하나 이상의 프로세싱 클러스터들에 보고한다. 추가적으로, 일부 구현들에서, 제1 및 제2 현재 혼잡 레벨들(604, 504)이 프리페치 제어 조건을 만족한다는 결정에 따라, 하나 이상의 프로세싱 클러스터들(202)은 프리페치 제어 조건에 대응하는 임계 품질을 초과하는 품질들을 갖는 프리페치 요청들의 제1 서브세트를 선택하고, 프리페치 요청들의 서브세트를 메모리 액세스 요청 큐(214)에 포함하고, 임계 품질을 초과하지 않는 품질들을 갖는 프리페치 요청들의 제2 서브세트를 메모리 액세스 요청 큐(214)로부터 배제한다.
일부 구현들에서, 각자의 메모리 블록(222)과 연관된 각각의 메모리 대역폭 사용량 상태(402)는, (a) 각자의 메모리 블록(222)에 대한 평균 데이터 액세스 레벨이 사전정의된 메모리 액세스 대역폭의 사전정의된 임계치 부분을 초과했다는 결정 및 (b) 사전정의된 메모리 액세스 대역폭이 실시된다는 또는 메모리 블록의 대안의 혼잡 레벨이 높다는 결정에 따라 각자의 메모리 블록(222)에 의해 인에이블되도록 구성되는 각자의 플래그를 포함한다.
도 12는 일부 구현들에 따른, 메모리 시스템의 메모리 블록(222)의 메모리 대역폭 사용량을 추적하는 방법(1200)의 흐름도이다. 메모리 시스템은 메모리 제어기(예컨대, 메모리 제어기(110)) 및 메모리 블록(222)을 포함한다. 메모리 블록(222)은 전자 디바이스 내의 제1 메모리(예컨대, 캐시(220))를 통해 하나 이상의 프로세싱 클러스터들(202)에 커플링된다. 방법은 메모리 시스템에서 구현된다(1202). 메모리 시스템은 메모리 블록(222)에 대한 복수의 클라이언트들(224)과 연관된 데이터 액세스 요청들의 세트를 수신한다(1204). 리소스들은 복수의 클라이언트들(224)에 의해 활용될 복수의 리소스 부분들로 파티셔닝되고(1206), 각각의 리소스 부분은 각자의 클라이언트에 배정되고 각자의 파티션 ID를 갖는다. 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해(1208), 메모리 시스템(구체적으로, 메모리 제어기(110))은 메모리 블록(222)에 액세스하기 위해 각자의 파티션 ID와 연관된 데이터 액세스 요청들의 서브세트를 식별하고(1210), 각자의 파티션 ID와 연관된 메모리 대역폭 사용량 상태(402)를 추적한다(1212). 메모리 대역폭 사용량 상태(402)는, 메모리 블록에 액세스하기 위해 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 적어도 어느 정도가 사용되는지를 나타낸다(1214). 데이터 액세스 요청들의 세트 각각에 응답하여, 메모리 시스템은 메모리 대역폭 사용량 상태를 하나 이상의 프로세싱 클러스터들(202)에 보고한다(1216).
일부 구현들에서, 판독 요청을 수신하는 것에 응답하여, 메모리 시스템은, 메모리 대역폭 사용량 상태(402)를, 판독 요청에 의해 요청된 데이터 항목으로 직접적으로 또는 제1 메모리(예컨대, 캐시(220))를 통해 간접적으로 하나 이상의 프로세싱 클러스터들(202)에 보고한다. 기록 요청을 수신하는 것에 응답하여, 메모리 시스템은 메모리 블록(222)의 메모리 대역폭 사용량 상태(402)를 제1 메모리를 통해 간접적으로 하나 이상의 프로세싱 클러스터들(202)에 보고한다.
일부 구현들에서, 각자의 파티션 ID와 연관된 메모리 대역폭 사용량 상태(402)는 또한 메모리 블록(222)의 대안적인 현재 혼잡 레벨 및/또는 사전정의된 메모리 액세스 대역폭이 실시되는지 여부에 기초하여 추적된다. 메모리 블록(222)의 대안적인 현재 혼잡 레벨은, 데이터 액세스 요청들의 제2 총 수(MCQ)가 외부 메모리 용량의 대안적인 사전정의된 부분을 초과하는지 여부를 나타낸다.
일부 구현들에서, 각자의 파티션 ID에 대해, 메모리 시스템은, 메모리 블록(222)에 대한 평균 데이터 액세스 레벨이 메모리 블록(222)에 액세스하기 위해 각자의 파티션 ID에 배정된 사전정의된 메모리 액세스 대역폭의 사전정의된 임계치 부분을 초과했는지 여부를 결정한다. 또한, 일부 구현들에서, 메모리 시스템은 메모리 시스템의 제2 요청 큐(510)에서 대기하고 있는 데이터 액세스 요청들의 제2 총 수를 모니터링하고, 데이터 액세스 요청들의 제2 총 수가 외부 메모리 용량의 대안적인 사전정의된 부분(예컨대, x%)을 초과하는지 여부를 나타내는 대안적인 현재 혼잡 레벨을 결정한다. 추가적으로, 일부 구현들에서, 메모리 시스템은, 데이터 액세스 요청들의 제2 총 수 MCQ가 외부 메모리 용량의 제2 사전정의된 부분을 초과하는지 여부를 나타내는 메모리 시스템의 제2 현재 혼잡 레벨(504)을 결정한다. 제2 현재 혼잡 레벨(504)은 하나 이상의 프로세싱 클러스터들의 프리페치 요청들의 품질들 또는 스로틀링을 제어하는 데 사용된다. 선택적으로, 제2 및 대안적인 사전정의된 부분들은 서로 별개이거나 또는 동일하다. 또한, 일부 실시 형태들에서, 메모리 대역폭 사용량 상태(402)는 과도한 메모리 대역폭 사용량 상태를 나타내도록 구성된 플래그를 포함한다. 메모리 시스템은, (a) 메모리 블록(222)에 대한 평균 데이터 액세스 레벨이 사전정의된 메모리 액세스 대역폭의 사전정의된 임계치 부분을 초과했다는 결정 및 (b) 사전정의된 메모리 액세스 대역폭이 실시된다는 또는 메모리 블록(222)의 대안적인 현재 혼잡 레벨이 높다는 결정에 따라, 플래그를 인에이블한다.
일부 구현들에서, 각각의 파티션 ID에 대해, 각자의 파티션 ID와 연관된 메모리 대역폭 사용량 상태(402)는 다중비트 상태 번호(예컨대, SN[0:1])를 포함하고, 다중비트 상태 번호(예컨대, SN[0:1])의 크기는, 메모리 블록(222)에 액세스하기 위해 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 어느 정도가 사용되는지에 따라 증가한다.
도 10 내지 도 12에서의 동작들이 설명되었던 특정 순서는 단지 예시적일 뿐이며, 설명된 순서가 동작들이 수행될 수 있는 유일한 순서라는 것을 나타내도록 의도되지 않음을 이해해야 한다. 당업자는 본 명세서에 설명된 동작들을 재순서화하는 다양한 방식들을 인식할 것이다. 추가적으로, 방법들(1000, 1100, 1200)(예컨대, 도 10 내지 도 12)과 관련하여 본 명세서에 설명된 다른 프로세스들의 상세사항들이 또한 교환가능한 방식으로 적용가능하다는 것에 유의해야 한다. 간결함을 위해, 이들 세부사항들은 여기서 반복되지 않는다.
구현 예들은 적어도 아래의 넘버링된 조항들에서 설명된다:
조항 1. 메모리 액세스를 관리하기 위한 방법으로서, 하나 이상의 프로세싱 클러스터들 및 복수의 메모리 블록들을 포함하는 - 각각의 프로세싱 클러스터는 하나 이상의 각자의 프로세서들을 포함하고 상기 메모리 블록들 중 적어도 하나의 메모리 블록에 커플링됨 - 전자 디바이스에서, 전자 디바이스의 리소스들을 복수의 클라이언트들에 의해 활용될 복수의 리소스 부분들로 파티셔닝하는 단계 - 각각의 리소스 부분은 각자의 클라이언트에 배정되고 각자의 파티션 식별자(ID)를 가짐 -; 복수의 메모리 블록들에 대한 복수의 클라이언트들과 연관된 복수의 데이터 액세스 요청들을 수신하는 단계; 및 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해: 메모리 블록들에 대응하는 복수의 메모리 대역폭 사용량 상태들을 추적하고 - 각각의 메모리 대역폭 사용량 상태는 각자의 메모리 블록과 연관되고, 각자의 메모리 블록에 액세스하기 위해 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 적어도 어느 정도가 사용되는지를 나타냄 -; 복수의 메모리 대역폭 사용량 상태들로부터 각자의 파티션 ID와 연관된 사용량 레벨을 결정하고; 사용량 레벨에 기초하여 크레디트 카운트를 조정하고; 조정된 크레디트 카운트를 요청 발행 임계치와 비교하고; 크레디트 카운트가 요청 발행 임계치보다 더 크다는 결정에 따라, 메모리 액세스 요청 큐에서 각자의 파티션 ID와 연관된 다음 데이터 액세스 요청을 발행하는 단계를 포함하는, 방법.
조항 2. 조항 1에 있어서, 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 크레디트 카운트가 요청 발행 임계치 미만이라는 결정에 따라, 크레디트 카운트가 요청 발행 임계치보다 크도록 조정될 때까지 각자의 파티션 ID의 메모리 액세스 요청 큐로부터 임의의 데이터 액세스 요청을 발행하는 것을 유보하는 단계를 추가로 포함하는, 방법.
조항 3. 조항 1 또는 조항 2에 있어서, 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 다음 데이터 액세스 요청 직전에 발행되는 이전 데이터 액세스 요청에 응답하여, 복수의 메모리 대역폭 사용량 상태들 중 하나 이상을 업데이트하는 단계를 추가로 포함하고, 복수의 메모리 대역폭 사용량 상태들 중 하나 이상의 업데이트 이후 사전정의된 수의 클록 사이클들 후에, 사용량 레벨은 복수의 메모리 대역폭 사용량 상태들로부터 결정되고; 복수의 메모리 대역폭 사용량 상태들 중 하나 이상의 업데이트 이후 사전정의된 수의 클록 사이클들 후에 그리고 다음 데이터 액세스 요청이 발행될 때까지, 크레디트 카운트는 조정되고 요청 발행 임계치와 주기적으로 비교되는, 방법.
조항 4. 조항 1 내지 조항 3 중 어느 한 조항에 있어서, 복수의 데이터 액세스 요청들 각각이 발행된 후에, 발행된 데이터 액세스 요청과 연관된 각자의 메모리 블록으로부터 각자의 응답을 직접적으로 또는 간접적으로 수신하는 단계; 및 발행된 데이터 액세스 요청과 연관된 각자의 메모리 블록에 대응하는 각자의 메모리 대역폭 사용량 상태를 업데이트하는 단계를 추가로 포함하는, 방법.
조항 5. 조항 1 내지 조항 4 중 어느 한 조항에 있어서, 사용량 레벨에 기초하여 크레디트 카운트를 조정하는 단계는, 사용량 레벨이 높은 사용량 임계치 이상이라는 결정에 따라, 각자의 파티션 ID에 대응하는 각자의 크레디트 단위만큼 크레디트 카운트를 감소시키는 단계; 사용량 레벨이 낮은 사용량 임계치 이하라는 결정에 따라, 각자의 크레디트 단위만큼 크레디트 카운트를 증가시키는 단계; 및 사용량 레벨이 높은 사용량 임계치와 낮은 사용량 임계치 사이에 있다는 결정에 따라, 크레디트 카운트를 유지하는 단계를 추가로 포함하는, 방법.
조항 6. 조항 1 내지 조항 5 중 어느 한 조항에 있어서, 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 복수의 메모리 대역폭 사용량 상태들 각각은 각자의 다중비트 상태 번호를 포함하고; 사용량 레벨을 결정하는 것은 메모리 대역폭 사용량 상태들의 각자의 다중비트 상태 번호들 중 몇 개가 사전정의된 값과 동일한지를 결정하는 것을 포함하는, 방법.
조항 7. 조항 1 내지 조항 6 중 어느 한 조항에 있어서, 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 복수의 메모리 대역폭 사용량 상태들 각각은, 각자의 메모리 블록의 평균 데이터 액세스 레벨이 각자의 메모리 블록에 액세스하기 위해 각자의 파티션 ID에 배정된 사전정의된 메모리 액세스 대역폭의 사전정의된 임계치 부분을 초과했는지 여부를 나타내는 플래그에 의해 표현되는, 방법.
조항 8. 조항 7에 있어서, 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 사용량 레벨은, 각각에 대해 플래그가 제1 값을 갖는 메모리 블록들의 총 수에 의해 표현되는, 방법.
조항 9. 조항 8에 있어서, 제1 메모리 블록에 대해, 플래그는 제1 값을 갖고, 방법은 제1 메모리 블록에 대해, 복수의 메모리 블록들의 제2 요청 큐에서 대기하고 있는 데이터 액세스 요청들의 제2 총 수를 모니터링하는 단계; 및 (a) 제1 평균 데이터 액세스 레벨이 제1 메모리 블록에 액세스하기 위해 각자의 파티션 ID에 배정된 제1 사전정의된 메모리 액세스 대역폭의 제1 사전정의된 임계치 부분을 초과한다는, 그리고 (b) 데이터 액세스 요청들의 제2 총 수가 외부 메모리 용량의 대안적인 사전정의된 부분을 초과한다는 결정에 따라, 제1 메모리 블록의 제1 메모리 대역폭 사용량 상태를 나타내는 플래그가 제1 값을 갖는다고 결정하는 단계를 추가로 포함하는, 방법.
조항 10. 조항 8에 있어서, 제1 메모리 블록에 대해, 플래그는 제1 값을 갖고, 방법은 제1 메모리 블록에 대해, (a) 제1 평균 데이터 액세스 레벨이 제1 메모리 블록에 액세스하기 위해 각자의 파티션 ID에 배정된 제1 사전정의된 메모리 액세스 대역폭의 제1 사전정의된 임계치 부분을 초과한다는, 그리고 (b) 제1 사전정의된 메모리 액세스 대역폭이 실시된다는 결정에 따라, 제1 메모리 블록의 제1 메모리 대역폭 사용량 상태를 나타내는 플래그가 제1 값을 갖는다고 결정하는 단계를 추가로 포함하는, 방법.
조항 11. 조항 1 내지 조항 10 중 어느 한 조항에 있어서, 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 복수의 메모리 대역폭 사용량 상태들을 추적하는 단계는, 하나 이상의 프로세싱 클러스터들과 연관되고 메모리 블록들과는 별개인 제1 메모리를 통해, 복수의 데이터 액세스 요청들 중 각각의 판독 또는 기록 요청을 각자의 메모리 블록으로 전송하는 단계; 각자의 파티션 ID로부터 각자의 메모리 블록으로 발행된 각각의 판독 요청에 응답하여, 각자의 메모리 블록으로부터 각자의 메모리 블록의 각자의 메모리 대역폭 사용량 상태를, 판독 요청에 의해 요청된 데이터 항목을 이용하여 직접적으로 또는 제1 메모리를 통해 간접적으로 업데이트하는 단계; 및 각자의 파티션 ID로부터 각자의 메모리 블록으로 발행된 각각의 기록 요청에 응답하여, 제1 메모리로부터 각자의 메모리 블록과 연관된 각자의 메모리 대역폭 사용량 상태를 업데이트하는 단계를 추가로 포함하고, 복수의 메모리 블록들은 하나 이상의 프로세싱 클러스터들로부터 제1 메모리로 전송된, 제1 메모리에 의해 만족되지 않은 데이터 액세스 요청들을 수신하도록 구성되는, 방법.
조항 12. 조항 1 내지 조항 11 중 어느 한 조항에 있어서, 전자 디바이스는, 복수의 데이터 액세스 요청들을 수신하도록 그리고 만족되지 않은 데이터 액세스 요청들의 서브세트를 메모리 블록들로 패스하도록 구성된 제1 메모리를 추가로 포함하고, 방법은, 제1 메모리의 제1 요청 큐에서 대기하고 있는 데이터 액세스 요청들의 제1 총 수가 시스템 캐시 용량의 제1 사전정의된 부분을 초과하는지 여부를 나타내는 제1 메모리의 제1 현재 혼잡 레벨을 획득하는 단계; 및 복수의 메모리 블록들의 제2 요청 큐에서 대기하고 있는 데이터 액세스 요청들의 제2 총 수가 외부 메모리 용량의 제2 사전정의된 부분을 초과하는지 여부를 나타내는 복수의 메모리 블록들의 제2 현재 혼잡 레벨을 획득하는 단계를 추가로 포함하는, 방법.
조항 13. 조항 12에 있어서, 복수의 데이터 액세스 요청들은 복수의 프리페치 요청들을 포함하고, 방법은, 제1 현재 혼잡 레벨이 스로틀링 조건을 만족한다는 결정에 따라, 복수의 리소스 부분들로부터의 복수의 프리페치 요청들을 스로틀링하는 단계를 추가로 포함하는, 방법.
조항 14. 조항 12에 있어서, 복수의 데이터 액세스 요청들은 복수의 프리페치 요청들을 포함하고, 방법은, 제1 및 제2 현재 혼잡 레벨들이 프리페치 제어 조건을 만족한다는 결정에 따라, 프리페치 제어 조건에 대응하는 임계 품질을 초과하는 품질들을 갖는 프리페치 요청들의 제1 서브세트를 선택하고, 프리페치 요청들의 서브세트를 메모리 액세스 요청 큐에 포함하고, 임계 품질을 초과하지 않는 품질들을 갖는 프리페치 요청들의 제2 서브세트를 메모리 액세스 요청 큐로부터 배제하는 단계를 추가로 포함하는, 방법.
조항 15. 조항 1 내지 조항 14 중 어느 한 조항에 있어서, 전자 디바이스는 제1 메모리를 추가로 포함하고, 메모리 블록들에 대응하는 복수의 메모리 대역폭 사용량 상태들은 하나 이상의 프로세싱 클러스터들에서 추적되고, 방법은, 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 각각의 메모리 블록에서, 각자의 메모리 블록에 대한 각자의 파티션 ID의 평균 데이터 액세스 레벨을 실시간으로 추적하고, 평균 데이터 액세스 레벨에 기초하여 각자의 메모리 블록과 연관된 각자의 메모리 대역폭 사용량 상태를 결정하고, 하나 이상의 프로세싱 클러스터들로부터 수신된 데이터 액세스 요청에 응답하여 각자의 메모리 대역폭 사용량 상태를 제1 메모리 및 하나 이상의 프로세싱 클러스터들에 보고하는 단계; 및 제1 메모리에서, 하나 이상의 프로세싱 클러스터들로부터 수신된 복수의 데이터 액세스 요청들에 응답하여 복수의 메모리 블록들에 의해 보고된 각자의 메모리 대역폭 사용량 상태를 수신하는 단계를 추가로 포함하는, 방법.
조항 16. 메모리 액세스를 관리하기 위한 방법으로서, 전자 디바이스 내의 하나 이상의 프로세싱 클러스터들 및 복수의 메모리 블록들에 커플링된 제1 메모리에서, 복수의 클라이언트들과 연관된 복수의 데이터 액세스 요청들을 복수의 메모리 블록들로 포워딩하는 단계 - 전자 디바이스의 리소스들이 복수의 클라이언트들에 의해 활용될 복수의 리소스 부분들로 파티셔닝되고, 각각의 리소스 부분은 각자의 클라이언트에 배정되고 각자의 파티션 식별자(ID)를 가짐 -; 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해: 메모리 블록들에 액세스하기 위해 각자의 파티션 ID와 연관된 데이터 액세스 요청들의 서브세트를 식별하는 단계; 메모리 블록들에 대응하는 복수의 메모리 대역폭 사용량 상태들을 추적하는 단계 - 각각의 메모리 대역폭 사용량 상태는 각자의 메모리 블록과 연관되고, 각자의 메모리 블록에 액세스하기 위해 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 적어도 어느 정도가 사용되는지를 나타냄 -; 데이터 액세스 요청들의 서브세트 각각에 응답하여, 각자의 데이터 액세스 요청이 대응하는 메모리 블록에 액세스하기 위한 것이라고 결정하는 단계, 대응하는 메모리 블록의 메모리 대역폭 사용량 상태를 수신하는 단계, 및 대응하는 메모리 블록의 메모리 대역폭 사용량 상태를 하나 이상의 프로세싱 클러스터들에 보고하는 단계를 포함하는, 방법.
조항 17. 조항 16에 있어서, 제1 메모리의 제1 요청 큐에서 대기하고 있는 데이터 액세스 요청들의 제1 총 수를 모니터링하고, 데이터 액세스 요청들의 제1 총 수가 시스템 캐시 용량의 제1 사전정의된 부분을 초과하는지 여부를 나타내는 제1 현재 혼잡 레벨을 결정하는 단계; 및 데이터 액세스 요청들의 서브세트 각각에 응답하여, 대응하는 메모리 블록의 메모리 대역폭 사용량 상태와 공동으로 제1 현재 혼잡 레벨을 하나 이상의 프로세싱 클러스터들에 보고하는 단계를 추가로 포함하는, 방법.
조항 18. 조항 17에 있어서, 하나 이상의 프로세싱 클러스터들에서, 제1 현재 혼잡 레벨이 스로틀링 조건을 만족한다는 결정에 따라, 복수의 리소스 부분들로부터의 복수의 프리페치 요청들을 스로틀링하는 단계를 추가로 포함하는, 방법.
조항 19. 조항 17 또는 조항 18에 있어서, 데이터 액세스 요청들의 서브세트 각각에 응답하여, 대응하는 메모리 블록으로부터, 복수의 메모리 블록들의 제2 요청 큐에서 대기하고 있는 데이터 액세스 요청들의 제2 총 수가 외부 메모리 용량의 제2 사전정의된 부분을 초과하는지 여부를 나타내는 제2 현재 혼잡 레벨을 업데이트하는 단계; 및 대응하는 메모리 블록의 메모리 대역폭 사용량 상태 및 제1 현재 혼잡 레벨과 공동으로 제2 현재 혼잡 레벨을 하나 이상의 프로세싱 클러스터들에 보고하는 단계를 추가로 포함하는, 방법.
조항 20. 조항 19에 있어서, 하나 이상의 프로세싱 클러스터들에서, 제1 및 제2 현재 혼잡 레벨들이 프리페치 제어 조건을 만족한다는 결정에 따라, 프리페치 제어 조건에 대응하는 임계 품질을 초과하는 품질들을 갖는 프리페치 요청들의 제1 서브세트를 선택하고, 프리페치 요청들의 서브세트를 메모리 액세스 요청 큐에 포함하고, 임계 품질을 초과하지 않는 품질들을 갖는 프리페치 요청들의 제2 서브세트를 메모리 액세스 요청 큐로부터 배제하는 단계를 추가로 포함하는, 방법.
조항 21. 조항 16 내지 조항 20 중 어느 한 조항에 있어서, 각자의 메모리 블록과 연관된 각각의 메모리 대역폭 사용량 상태는, (a) 각자의 메모리 블록에 대한 평균 데이터 액세스 레벨이 사전정의된 메모리 액세스 대역폭의 사전정의된 임계치 부분을 초과했다는 결정 및 (b) 사전정의된 메모리 액세스 대역폭이 실시된다는 또는 메모리 블록의 대안의 혼잡 레벨이 높다는 결정에 따라, 각자의 메모리 블록에 의해 인에이블되도록 구성되는 각자의 플래그를 포함하는, 방법.
조항 22. 메모리 사용량을 추적하기 위한 방법으로서, 전자 디바이스 내의 제1 메모리를 통해 하나 이상의 프로세싱 클러스터들에 커플링되고 메모리 블록을 포함하는 메모리 시스템에서, 메모리 블록에 대한 복수의 클라이언트들과 연관된 데이터 액세스 요청들의 세트를 수신하는 단계 - 리소스들이 복수의 클라이언트들에 의해 활용될 복수의 리소스 부분들로 파티셔닝되고, 각각의 리소스 부분은 각자의 클라이언트에 배정되고 각자의 파티션 식별자(ID)를 가짐 -; 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해: 메모리 블록에 액세스하기 위해 각자의 ID와 연관된 데이터 액세스 요청들의 서브세트를 식별하는 단계; 각자의 파티션 ID와 연관된 메모리 대역폭 사용량 상태를 추적하는 단계 - 메모리 대역폭 사용량 상태는, 메모리 블록에 액세스하기 위해 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 적어도 어느 정도가 사용되는지를 나타냄 -; 및 데이터 액세스 요청들의 세트 각각에 응답하여, 메모리 대역폭 사용량 상태를 하나 이상의 프로세싱 클러스터들에 보고하는 단계를 포함하는, 방법.
조항 23. 조항 22에 있어서, 메모리 대역폭 사용량을 하나 이상의 프로세싱 클러스터들에 보고하는 단계는, 판독 요청을 수신하는 것에 응답하여, 메모리 대역폭 사용량 상태를, 판독 요청에 의해 요청된 데이터 항목으로 직접적으로 또는 제1 메모리를 통해 간접적으로 하나 이상의 프로세싱 클러스터들에 보고하는 단계; 및 기록 요청을 수신하는 것에 응답하여, 메모리 대역폭 사용량 상태를, 제1 메모리를 통해 간접적으로 하나 이상의 프로세싱 클러스터들에 보고하는 단계를 추가로 포함하는, 방법.
조항 24. 조항 22 또는 조항 23에 있어서, 각자의 파티션 ID와 연관된 메모리 대역폭 사용량 상태는 또한, 메모리 블록의 대안적인 현재 혼잡 레벨 및/또는 사전정의된 메모리 액세스 대역폭이 실시되는지 여부에 기초하여 추적되는, 방법.
조항 25. 조항 22 내지 조항 24 중 어느 한 조항에 있어서, 각자의 파티션 ID와 연관된 메모리 대역폭 사용량 상태를 추적하는 단계는, 각자의 파티션 ID에 대해, 메모리 블록에 대한 평균 데이터 액세스 레벨이 메모리 블록에 액세스하기 위해 각자의 파티션 ID에 배정된 사전정의된 메모리 액세스 대역폭의 사전정의된 임계치 부분을 초과했는지 여부를 결정하는 단계를 추가로 포함하는, 방법.
조항 26. 조항 25에 있어서, 각자의 파티션 ID와 연관된 메모리 대역폭 사용량 상태를 추적하는 단계는, 메모리 시스템의 제2 요청 큐에서 대기하고 있는 데이터 액세스 요청들의 제2 총 수를 모니터링하는 단계; 및 데이터 액세스 요청들의 제2 총 수가 외부 메모리 용량의 대안적인 사전정의된 부분을 초과하는지 여부를 나타내는 대안적인 현재 혼잡 레벨을 결정하는 단계를 추가로 포함하는, 방법.
조항 27. 조항 26에 있어서, 데이터 액세스 요청들의 제2 총 수가 외부 메모리 용량의 제2 사전정의된 부분을 초과하는지 여부를 나타내는 제2 현재 혼잡 레벨을 결정하는 단계를 추가로 포함하고, 제2 현재 혼잡 레벨은 하나 이상의 프로세싱 클러스터들의 프리페치 요청들의 품질들 또는 스로틀링을 제어하는 데 사용되는, 방법.
조항 28. 조항 26에 있어서, 메모리 대역폭 사용량 상태는 과도한 메모리 대역폭 사용량 상태를 나타내도록 구성된 플래그를 포함하고, 방법은 (a) 메모리 블록에 대한 평균 데이터 액세스 레벨이 사전정의된 메모리 액세스 대역폭의 사전정의된 임계치 부분을 초과했다는 결정 및 (b) 사전정의된 메모리 액세스 대역폭이 실시된다는 또는 메모리 블록의 대안적인 현재 혼잡 레벨이 높다는 결정에 따라, 플래그를 인에이블하는 단계를 추가로 포함하는, 방법.
조항 29. 조항 16 내지 조항 28 중 어느 한 조항에 있어서, 각각의 파티션 ID에 대해, 각자의 파티션 ID와 연관된 메모리 대역폭 사용량 상태는 다중비트 상태 번호를 포함하고, 다중비트 상태 번호의 크기는, 메모리 블록에 액세스하기 위해 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 어느 정도가 사용되는지에 따라 증가하는, 방법.
조항 30. 전자 디바이스로서, 하나 이상의 프로세싱 클러스터들; 및 각각의 프로세싱 클러스터에 커플링된 복수의 메모리 블록들을 포함하며; 각각의 프로세싱 클러스터는 하나 이상의 각자의 프로세서들 및 제어기를 포함하고, 제어기는 조항 1 내지 조항 29 중 어느 한 조항의 방법을 수행하도록 구성되는, 전자 디바이스,
조항 31. 명령들이 저장된 비일시적 컴퓨터 판독가능 매체로서, 명령들은, 전자 디바이스의 제어기에 의해 실행될 때, 제어기로 하여금, 조항 1 내지 조항 29 중 어느 한 조항의 방법을 수행하게 하는, 비일시적 컴퓨터 판독가능 매체.
조항 32. 하나 이상의 프로세싱 클러스터들 및 복수의 메모리 블록들을 포함하는 전자 디바이스에서 메모리 액세스를 관리하기 위한 장치로서, 각각의 프로세싱 클러스터는 하나 이상의 각자의 프로세서들을 포함하고 메모리 블록들 중 적어도 하나의 메모리 블록에 커플링되고, 장치는 조항 1 내지 조항 15 중 어느 한 조항의 방법의 동작들을 수행하기 위한 수단을 포함하는, 장치.
조항 33. 전자 디바이스의 하나 이상의 프로세싱 클러스터들 및 복수의 메모리 블록들에 커플링된 제1 메모리에서 메모리 액세스를 관리하기 위한 장치로서, 장치는 조항 16 내지 조항 21 중 어느 한 조항의 방법의 동작들을 수행하기 위한 수단을 포함하는, 장치.
조항 34. 전자 디바이스의 제1 메모리를 통해 하나 이상의 프로세싱 클러스터들에 커플링된 메모리 시스템에서 메모리 사용량을 추적하기 위한 장치로서, 메모리 시스템은 메모리 블록을 포함하고, 장치는 조항 22 내지 조항 29 중 어느 한 조항의 방법의 동작을 수행하기 위한 수단을 포함하는, 장치.
상기의 설명은 특정 구현들을 참조하여 제공되었다. 그러나, 상기의 예시적인 논의들은, 총망라하도록 또는 개시된 정확한 형태들로 제한하도록 의도되지 않는다. 많은 수정들 및 변형들이 위의 교시 내용들에 비추어 가능하다. 개시된 원리들 및 그들의 실제 응용들을 최선으로 설명하고, 그에 의해, 다른 사람들이 고려된 특정 사용에 적합하게 본 개시내용 및 다양한 구현들을 다양한 수정들과 함께 최선으로 활용할 수 있게 하기 위한 구현들이 선택 및 설명되었다.
본 명세서에서 다양한 설명된 구현들의 설명에서 사용된 용어는 단지 특정 구현들을 설명하기 위한 것이지 제한하려는 의도가 아니다. 다양한 설명된 구현들 및 첨부된 청구항들의 설명에서 사용된 바와 같이, 단수 형태들 "a", "an" 및 "the"는, 문맥상 명확하게 달리 표시되지 않으면, 복수 형태들을 또한 포함하도록 의도된다. 본 명세서에서 사용된 바와 같은 "및/또는"이라는 용어는 연관된 나열된 항목들 중 하나 이상의 임의의 및 모든 가능한 조합들을 지칭하고 포함함을 또한 이해할 것이다. 본 명세서에서 사용되는 경우, "포함하다(includes)", "포함하는(including)", "포함하다(comprises)" 및/또는 "포함하는(comprising)"이라는 용어들은, 언급된 특징들, 정수들, 단계들, 동작들, 엘리먼트들 및/또는 컴포넌트들의 존재를 특정하지만, 하나 이상의 다른 특징들, 정수들, 단계들, 동작들, 엘리먼트들, 컴포넌트들 및/또는 이들의 그룹들의 존재 또는 추가를 배제하지는 않음을 추가로 이해할 것이다. 추가적으로, 용어들 "제1", "제2" 등이 다양한 엘리먼트들을 설명하기 위해 본 명세서에서 사용될 수 있지만, 이러한 엘리먼트들이 이러한 용어들에 의해 제한되지 않아야 함을 이해할 것이다. 이러한 용어들은 하나의 엘리먼트를 다른 엘리먼트로부터 구별하기 위해서만 사용된다.
본 명세서에서 사용되는 바와 같이, "~ 인 경우"라는 용어는 선택적으로, 문맥에 따라, "~ 할 때" 또는 "~ 할 시에" 또는 "결정하는 것에 응답하여" 또는 "검출하는 것에 응답하여" 또는 "~ 다는 결정에 따라"를 의미하는 것으로 해석된다. 유사하게, 어구 "~ 라고 결정되는 경우" 또는 "[언급된 조건 또는 이벤트]가 검출되는 경우"는 문맥에 따라, "결정할 시에" 또는 "결정하는 것에 응답하여" 또는 "[언급된 조건 또는 이벤트]를 검출할 시에" 또는 "[언급된 조건 또는 이벤트]를 검출하는 것에 응답하여" 또는 "[언급된 조건 또는 이벤트]가 검출된다는 결정에 따라"를 의미하도록 선택적으로 해석된다.
상기 설명은, 설명의 목적을 위해, 특정 실시 형태들을 참조하여 설명되었다. 그러나, 위의 예시적인 논의들은, 총망라하거나 또는 청구항들을 개시된 정확한 형태들로 제한하도록 의도되지 않는다. 많은 수정들 및 변형들이 위의 교시 내용들에 비추어 가능하다. 실시 형태들은 동작 및 실제 애플리케이션들의 원리들을 가장 잘 설명하고, 그에 의해 다른 당업자가 사용할 수 있게 하기 위해 선정되고 설명되었다.
다양한 도면들은 특정 순서로 다수의 로직 스테이지들을 예시하지만, 순서 의존적이 아닌 스테이지들은 재순서화될 수 있고 다른 스테이지들이 조합되거나 분리될 수 있다. 일부 재순서화 또는 다른 그룹화들이 구체적으로 언급되지만, 다른 것들이 당업자들에게 자명할 것이어서, 본 명세서에 제시된 순서화 및 그룹화들은 대안들에 대해 총망라하는 리스트가 아니다. 또한, 스테이지들은 하드웨어, 펌웨어, 소프트웨어 또는 이들의 임의의 조합으로 구현될 수 있음을 인식해야 한다.

Claims (20)

  1. 메모리 액세스를 관리하기 위한 방법으로서,
    하나 이상의 프로세싱 클러스터들 및 복수의 메모리 블록들을 포함하는 전자 디바이스에서, 각각의 프로세싱 클러스터는 하나 이상의 각자의 프로세서들을 포함하고 상기 메모리 블록들 중 적어도 하나의 메모리 블록에 커플링되고,
    상기 전자 디바이스의 리소스들을 복수의 클라이언트들에 의해 활용될 복수의 리소스 부분들로 파티셔닝하는 단계로서, 각각의 리소스 부분은 각자의 클라이언트에 배정되고 각자의 파티션 식별자(identifier, ID)를 가지는, 상기 복수의 리소스 부분들로 파티셔닝 하는 단계;
    상기 복수의 메모리 블록들에 대한 상기 복수의 클라이언트들과 연관된 복수의 데이터 액세스 요청들을 수신하는 단계; 및
    상기 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해:
    상기 메모리 블록들에 대응하는 복수의 메모리 대역폭 사용량 상태들을 추적하는 단계로서, 각각의 메모리 대역폭 사용량 상태는 각자의 메모리 블록과 연관되고, 상기 각자의 메모리 블록에 액세스하기 위해 상기 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 적어도 어느 정도가 사용되는지를 나타내는, 상기 복수의 메모리 대역폭 사용량 상태들을 추적하는 단계;
    상기 복수의 메모리 대역폭 사용량 상태들로부터 상기 각자의 파티션 ID와 연관된 사용량 레벨을 결정하는 단계;
    상기 사용량 레벨에 기초하여 크레디트 카운트(credit count)를 조정하는 단계;
    조정된 상기 크레디트 카운트를 요청 발행 임계치와 비교하는 단계; 및
    상기 크레디트 카운트가 상기 요청 발행 임계치보다 더 크다는 결정에 따라, 메모리 액세스 요청 큐에서 상기 각자의 파티션 ID와 연관된 다음 데이터 액세스 요청(next data access request)을 발행하는 단계를 포함하는, 메모리 액세스를 관리하기 위한 방법.
  2. 제1항에 있어서, 상기 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해,
    상기 크레디트 카운트가 상기 요청 발행 임계치 미만이라는 결정에 따라, 상기 크레디트 카운트가 상기 요청 발행 임계치보다 크도록 조정될 때까지 상기 각자의 파티션 ID의 상기 메모리 액세스 요청 큐로부터 임의의 데이터 액세스 요청을 발행하는 것을 유보하는 단계를 추가로 포함하는, 메모리 액세스를 관리하기 위한 방법.
  3. 제1항에 있어서, 상기 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해,
    상기 다음 데이터 액세스 요청 직전에 발행되는 이전 데이터 액세스 요청에 응답하여, 상기 복수의 메모리 대역폭 사용량 상태들 중 하나 이상을 업데이트하는 단계를 추가로 포함하고,
    상기 복수의 메모리 대역폭 사용량 상태들 중 하나 이상의 업데이트 이후 사전정의된 수의 클록 사이클들 후에, 상기 사용량 레벨은 상기 복수의 메모리 대역폭 사용량 상태들로부터 결정되고;
    상기 복수의 메모리 대역폭 사용량 상태들 중 하나 이상의 업데이트 이후 상기 사전정의된 수의 클록 사이클들 후에 그리고 상기 다음 데이터 액세스 요청이 발행될 때까지, 상기 크레디트 카운트는 조정되고 상기 요청 발행 임계치와 주기적으로 비교되는, 메모리 액세스를 관리하기 위한 방법.
  4. 제1항에 있어서, 상기 복수의 데이터 액세스 요청들 각각이 발행된 후에,
    발행된 상기 데이터 액세스 요청과 연관된 각자의 메모리 블록으로부터 각자의 응답을 직접적으로 또는 간접적으로 수신하는 단계; 및
    발행된 상기 데이터 액세스 요청과 연관된 상기 각자의 메모리 블록에 대응하는 상기 각자의 메모리 대역폭 사용량 상태를 업데이트하는 단계를 추가로 포함하는, 메모리 액세스를 관리하기 위한 방법.
  5. 제1항에 있어서, 상기 사용량 레벨에 기초하여 크레디트 카운트를 조정하는 단계는,
    상기 사용량 레벨이 높은 사용량 임계치 이상이라는 결정에 따라, 상기 각자의 파티션 ID에 대응하는 각자의 크레디트 단위만큼 상기 크레디트 카운트를 감소시키는 단계;
    상기 사용량 레벨이 낮은 사용량 임계치 이하라는 결정에 따라, 상기 각자의 크레디트 단위만큼 상기 크레디트 카운트를 증가시키는 단계; 및
    상기 사용량 레벨이 상기 높은 사용량 임계치와 상기 낮은 사용량 임계치 사이에 있다는 결정에 따라, 상기 크레디트 카운트를 유지하는 단계를 추가로 포함하는, 메모리 액세스를 관리하기 위한 방법.
  6. 제1항에 있어서, 상기 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해,
    상기 복수의 메모리 대역폭 사용량 상태들 각각은 각자의 다중비트 상태 번호를 포함하고;
    상기 사용량 레벨을 결정하는 단계는 상기 메모리 대역폭 사용량 상태들의 각자의 다중비트 상태 번호들 중 몇 개가 사전정의된 값과 동일한지를 결정하는 단계를 포함하는, 메모리 액세스를 관리하기 위한 방법.
  7. 제1항에 있어서, 상기 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해,
    상기 복수의 메모리 대역폭 사용량 상태들 각각은, 상기 각자의 메모리 블록의 평균 데이터 액세스 레벨이 상기 각자의 메모리 블록에 액세스하기 위해 상기 각자의 파티션 ID에 배정된 사전정의된 메모리 액세스 대역폭의 사전정의된 임계치 부분을 초과했는지 여부를 나타내는 플래그에 의해 표현되는, 메모리 액세스를 관리하기 위한 방법.
  8. 제7항에 있어서, 상기 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 상기 사용량 레벨은, 각각에 대해 상기 플래그가 제1 값을 갖는 메모리 블록들의 총 수에 의해 표현되는, 메모리 액세스를 관리하기 위한 방법.
  9. 제8항에 있어서, 제1 메모리 블록에 대해, 상기 플래그는 상기 제1 값을 갖고, 상기 방법은 상기 제1 메모리 블록에 대해,
    상기 복수의 메모리 블록들의 제2 요청 큐에서 대기하고 있는 데이터 액세스 요청들의 제2 총 수를 모니터링하는 단계; 및
    (a) 제1 평균 데이터 액세스 레벨이 상기 제1 메모리 블록에 액세스하기 위해 상기 각자의 파티션 ID에 배정된 제1 사전정의된 메모리 액세스 대역폭의 제1 사전정의된 임계치 부분을 초과한다는, 그리고 (b) 상기 데이터 액세스 요청들의 제2 총 수가 외부 메모리 용량의 대안적인 사전정의된 부분을 초과한다는 결정에 따라, 상기 제1 메모리 블록의 제1 메모리 대역폭 사용량 상태를 나타내는 플래그가 상기 제1 값을 갖는다고 결정하는 단계를 추가로 포함하는, 메모리 액세스를 관리하기 위한 방법.
  10. 제8항에 있어서, 제1 메모리 블록에 대해, 상기 플래그는 상기 제1 값을 갖고, 상기 방법은 상기 제1 메모리 블록에 대해,
    (a) 제1 평균 데이터 액세스 레벨이 상기 제1 메모리 블록에 액세스하기 위해 상기 각자의 파티션 ID에 배정된 제1 사전정의된 메모리 액세스 대역폭의 제1 사전정의된 임계치 부분을 초과한다는, 그리고 (b) 상기 제1 사전정의된 메모리 액세스 대역폭이 실시된다는 결정에 따라, 상기 제1 메모리 블록의 제1 메모리 대역폭 사용량 상태를 나타내는 플래그가 상기 제1 값을 갖는다고 결정하는 단계를 추가로 포함하는, 메모리 액세스를 관리하기 위한 방법.
  11. 제1항에 있어서, 상기 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해, 상기 복수의 메모리 대역폭 사용량 상태들을 추적하는 단계는,
    상기 하나 이상의 프로세싱 클러스터들과 연관되고 상기 메모리 블록들과는 별개인 제1 메모리를 통해, 상기 복수의 데이터 액세스 요청들 중 각각의 판독 또는 기록 요청을 각자의 메모리 블록으로 전송하는 단계;
    상기 각자의 파티션 ID로부터 각자의 메모리 블록으로 발행된 각각의 판독 요청에 응답하여, 상기 각자의 메모리 블록으로부터 상기 각자의 메모리 블록의 각자의 메모리 대역폭 사용량 상태를, 상기 판독 요청에 의해 요청된 데이터 항목을 이용하여 직접적으로 또는 상기 제1 메모리를 통해 간접적으로 업데이트하는 단계; 및
    상기 각자의 파티션 ID로부터 상기 각자의 메모리 블록으로 발행된 각각의 기록 요청에 응답하여, 상기 제1 메모리로부터 상기 각자의 메모리 블록과 연관된 상기 각자의 메모리 대역폭 사용량 상태를 업데이트하는 단계를 추가로 포함하고,
    상기 복수의 메모리 블록들은 상기 하나 이상의 프로세싱 클러스터들로부터 상기 제1 메모리로 전송된, 상기 제1 메모리에 의해 만족되지 않은 데이터 액세스 요청들을 수신하도록 구성되는, 메모리 액세스를 관리하기 위한 방법.
  12. 제1항에 있어서, 상기 전자 디바이스는, 상기 복수의 데이터 액세스 요청들을 수신하도록 그리고 만족되지 않은 데이터 액세스 요청들의 서브세트를 상기 메모리 블록들로 패스하도록 구성된 제1 메모리를 추가로 포함하고, 상기 방법은,
    상기 제1 메모리의 제1 요청 큐에서 대기하고 있는 데이터 액세스 요청들의 제1 총 수가 시스템 캐시 용량의 제1 사전정의된 부분을 초과하는지 여부를 나타내는 상기 제1 메모리의 제1 현재 혼잡 레벨을 획득하는 단계; 및
    상기 복수의 메모리 블록들의 제2 요청 큐에서 대기하고 있는 데이터 액세스 요청들의 제2 총 수가 외부 메모리 용량의 제2 사전정의된 부분을 초과하는지 여부를 나타내는 상기 복수의 메모리 블록들의 제2 현재 혼잡 레벨을 획득하는 단계를 추가로 포함하는, 메모리 액세스를 관리하기 위한 방법.
  13. 제12항에 있어서, 상기 복수의 데이터 액세스 요청들은 복수의 프리페치 요청들을 포함하고, 상기 방법은,
    상기 제1 현재 혼잡 레벨이 스로틀링 조건(throttling condition)을 만족한다는 결정에 따라, 상기 복수의 리소스 부분들로부터의 상기 복수의 프리페치 요청들을 스로틀링하는 단계를 추가로 포함하는, 메모리 액세스를 관리하기 위한 방법.
  14. 제12항에 있어서, 상기 복수의 데이터 액세스 요청들은 복수의 프리페치 요청들을 포함하고, 상기 방법은,
    상기 제1 및 제2 현재 혼잡 레벨들이 프리페치 제어 조건을 만족한다는 결정에 따라, 상기 프리페치 제어 조건에 대응하는 임계 품질을 초과하는 품질들을 갖는 프리페치 요청들의 제1 서브세트를 선택하는 단계, 상기 프리페치 요청들의 서브세트를 상기 메모리 액세스 요청 큐에 포함하는 단계, 및 상기 임계 품질을 초과하지 않는 품질들을 갖는 프리페치 요청들의 제2 서브세트를 상기 메모리 액세스 요청 큐로부터 배제하는 단계를 추가로 포함하는, 메모리 액세스를 관리하기 위한 방법.
  15. 제1항에 있어서, 상기 전자 디바이스는 제1 메모리를 추가로 포함하고, 상기 메모리 블록들에 대응하는 상기 복수의 메모리 대역폭 사용량 상태들은 상기 하나 이상의 프로세싱 클러스터들에서 추적되고, 상기 방법은, 상기 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해,
    각각의 메모리 블록에서, 상기 각자의 메모리 블록에 대한 상기 각자의 파티션 ID의 평균 데이터 액세스 레벨을 실시간으로 추적하는 단계, 상기 평균 데이터 액세스 레벨에 기초하여 상기 각자의 메모리 블록과 연관된 상기 각자의 메모리 대역폭 사용량 상태를 결정하는 단계, 및 상기 하나 이상의 프로세싱 클러스터들로부터 수신된 데이터 액세스 요청들에 응답하여 상기 각자의 메모리 대역폭 사용량 상태를 상기 제1 메모리 및 상기 하나 이상의 프로세싱 클러스터들에 보고하는 단계; 및
    상기 제1 메모리에서, 상기 하나 이상의 프로세싱 클러스터들로부터 수신된 상기 복수의 데이터 액세스 요청들에 응답하여 상기 복수의 메모리 블록들에 의해 보고된 상기 각자의 메모리 대역폭 사용량 상태를 수신하는 단계를 추가로 포함하는, 메모리 액세스를 관리하기 위한 방법.
  16. 전자 디바이스로서,
    하나 이상의 프로세싱 클러스터들; 및
    각각의 프로세싱 클러스터에 커플링된 복수의 메모리 블록들을 포함하고,
    각각의 프로세싱 클러스터는 하나 이상의 각자의 프로세서들 및 제어기를 포함하고, 상기 제어기는,
    상기 전자 디바이스의 리소스들을 복수의 클라이언트들에 의해 활용될 복수의 리소스 부분들로 파티셔닝하는 것으로서, 각각의 리소스 부분은 각자의 클라이언트에 배정되고 각자의 파티션 식별자(ID)를 가지는, 상기 복수의 리소스 부분들로 파티셔닝하는 것;
    상기 복수의 메모리 블록들에 대한 상기 복수의 클라이언트들과 연관된 복수의 데이터 액세스 요청들을 수신하는 것; 및
    상기 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해:
    상기 메모리 블록들에 대응하는 복수의 메모리 대역폭 사용량 상태들을 추적하는 것으로서, 각각의 메모리 대역폭 사용량 상태는 각자의 메모리 블록과 연관되고, 상기 각자의 메모리 블록에 액세스하기 위해 상기 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 적어도 어느 정도가 사용되는지를 나타내는, 상기 복수의 메모리 대역폭 사용량 상태들을 추적하는 것;
    상기 복수의 메모리 대역폭 사용량 상태들로부터 상기 각자의 파티션 ID와 연관된 사용량 레벨을 결정하는 것;
    상기 사용량 레벨에 기초하여 크레디트 카운트를 조정하는 것;
    조정된 상기 크레디트 카운트를 요청 발행 임계치와 비교하는 것; 및
    상기 크레디트 카운트가 상기 요청 발행 임계치보다 더 크다는 결정에 따라, 메모리 액세스 요청 큐에서 상기 각자의 파티션 ID와 연관된 다음 데이터 액세스 요청을 발행하는 것을 수행하도록 구성되는, 전자 디바이스.
  17. 제16항에 있어서, 상기 제어기는, 상기 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해,
    상기 크레디트 카운트가 상기 요청 발행 임계치 미만이라는 결정에 따라, 상기 크레디트 카운트가 상기 요청 발행 임계치보다 크도록 조정될 때까지 상기 각자의 파티션 ID의 상기 메모리 액세스 요청 큐로부터 임의의 데이터 액세스 요청을 발행하는 것을 유보하는 것을 수행하도록 추가로 구성되는, 전자 디바이스.
  18. 제16항에 있어서, 상기 제어기는, 상기 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해,
    상기 다음 데이터 액세스 요청 직전에 발행되는 이전 데이터 액세스 요청에 응답하여, 상기 복수의 메모리 대역폭 사용량 상태들 중 하나 이상을 업데이트하는 것을 수행하도록 추가로 구성되고,
    상기 복수의 메모리 대역폭 사용량 상태들 중 하나 이상의 업데이트 이후 사전정의된 수의 클록 사이클들 후에, 상기 사용량 레벨은 상기 복수의 메모리 대역폭 사용량 상태들로부터 결정되고;
    상기 복수의 메모리 대역폭 사용량 상태들 중 하나 이상의 업데이트 이후 상기 사전정의된 수의 클록 사이클들 후에 그리고 상기 다음 데이터 액세스 요청이 발행될 때까지, 상기 크레디트 카운트는 조정되고 상기 요청 발행 임계치와 주기적으로 비교되는, 전자 디바이스.
  19. 명령들이 저장된 비일시적 컴퓨터 판독가능 저장 매체로서,
    상기 명령들은, 전자 디바이스의 제어기에 의해 실행될 때, 상기 제어기로 하여금 동작들을 수행하게 하고, 상기 동작들은,
    하나 이상의 프로세싱 클러스터들 및 각각의 프로세싱 클러스터에 커플링된 복수의 메모리 블록들을 갖는 전자 디바이스에서, 각각의 프로세싱 클러스터는 하나 이상의 각자의 프로세서들 및 상기 제어기를 포함하고,
    상기 전자 디바이스의 리소스들을 복수의 클라이언트들에 의해 활용될 복수의 리소스 부분들로 파티셔닝하는 것으로서, 각각의 리소스 부분은 각자의 클라이언트에 배정되고 각자의 파티션 식별자(ID)를 가지는, 상기 복수의 리소스 부분들로 파티셔닝하는 것;
    상기 복수의 메모리 블록들에 대한 상기 복수의 클라이언트들과 연관된 복수의 데이터 액세스 요청들을 수신하는 것; 및
    상기 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해:
    상기 메모리 블록들에 대응하는 복수의 메모리 대역폭 사용량 상태들을 추적하는 것으로서, 각각의 메모리 대역폭 사용량 상태는 각자의 메모리 블록과 연관되고, 상기 각자의 메모리 블록에 액세스하기 위해 상기 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 적어도 어느 정도가 사용되는지를 나타내는, 상기 복수의 메모리 대역폭 사용량 상태들을 추적하는 것;
    상기 복수의 메모리 대역폭 사용량 상태들로부터 상기 각자의 파티션 ID와 연관된 사용량 레벨을 결정하는 것;
    상기 사용량 레벨에 기초하여 크레디트 카운트를 조정하는 것;
    조정된 상기 크레디트 카운트를 요청 발행 임계치와 비교하는 것; 및
    상기 크레디트 카운트가 상기 요청 발행 임계치보다 더 크다는 결정에 따라, 메모리 액세스 요청 큐에서 상기 각자의 파티션 ID와 연관된 다음 데이터 액세스 요청을 발행하는 것을 포함하는, 명령들이 저장된 비일시적 컴퓨터 판독가능 저장 매체.
  20. 하나 이상의 프로세싱 클러스터들 및 복수의 메모리 블록들을 포함하는 전자 디바이스에서 메모리 액세스를 관리하기 위한 장치로서, 각각의 프로세싱 클러스터는 하나 이상의 각자의 프로세서들을 포함하고 상기 메모리 블록들 중 적어도 하나의 메모리 블록에 커플링되고, 상기 장치는,
    상기 전자 디바이스의 리소스들을 복수의 클라이언트들에 의해 활용될 복수의 리소스 부분들로 파티셔닝하기 위한 수단으로서, 각각의 리소스 부분은 각자의 클라이언트에 배정되고 각자의 파티션 식별자(ID)를 가지는, 상기 복수의 리소스 부분들로 파티셔닝하기 위한 수단;
    상기 복수의 메모리 블록들에 대한 상기 복수의 클라이언트들과 연관된 복수의 데이터 액세스 요청들을 수신하기 위한 수단; 및
    상기 각자의 파티션 ID를 갖는 각각의 리소스 부분에 대해:
    상기 메모리 블록들에 대응하는 복수의 메모리 대역폭 사용량 상태들을 추적하기 위한 수단으로서, 각각의 메모리 대역폭 사용량 상태는 각자의 메모리 블록과 연관되고, 상기 각자의 메모리 블록에 액세스하기 위해 상기 각자의 파티션 ID에 배정된 메모리 액세스 대역폭 중 적어도 어느 정도가 사용되는지를 나타내는, 상기 복수의 메모리 대역폭 사용량 상태들을 추적하기 위한 수단;
    상기 복수의 메모리 대역폭 사용량 상태들로부터 상기 각자의 파티션 ID와 연관된 사용량 레벨을 결정하기 위한 수단;
    상기 사용량 레벨에 기초하여 크레디트 카운트를 조정하기 위한 수단;
    상기 조정된 크레디트 카운트를 요청 발행 임계치와 비교하기 위한 수단; 및
    상기 크레디트 카운트가 상기 요청 발행 임계치보다 더 크다는 결정에 따라, 메모리 액세스 요청 큐에서 상기 각자의 파티션 ID와 연관된 다음 데이터 액세스 요청을 발행하기 위한 수단을 포함하는, 메모리 액세스를 관리하기 위한 장치.
KR1020247006319A 2021-09-01 2022-07-20 메모리 대역폭 제어를 위한 방법들 및 시스템들 KR20240048519A (ko)

Applications Claiming Priority (9)

Application Number Priority Date Filing Date Title
US202163239702P 2021-09-01 2021-09-01
US63/239,702 2021-09-01
US202163251518P 2021-10-01 2021-10-01
US202163251517P 2021-10-01 2021-10-01
US63/251,518 2021-10-01
US63/251,517 2021-10-01
US17/666,438 2022-02-07
US17/666,438 US11899964B2 (en) 2021-09-01 2022-02-07 Methods and systems for memory bandwidth control
PCT/US2022/073925 WO2023034661A1 (en) 2021-09-01 2022-07-20 Methods and systems for memory bandwidth control

Publications (1)

Publication Number Publication Date
KR20240048519A true KR20240048519A (ko) 2024-04-15

Family

ID=82899044

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020247006319A KR20240048519A (ko) 2021-09-01 2022-07-20 메모리 대역폭 제어를 위한 방법들 및 시스템들

Country Status (3)

Country Link
US (2) US11829637B2 (ko)
KR (1) KR20240048519A (ko)
WO (1) WO2023034661A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11899964B2 (en) 2021-09-01 2024-02-13 Qualcomm Incorporated Methods and systems for memory bandwidth control
KR20240048519A (ko) 2021-09-01 2024-04-15 퀄컴 인코포레이티드 메모리 대역폭 제어를 위한 방법들 및 시스템들

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10664306B2 (en) * 2017-01-13 2020-05-26 Arm Limited Memory partitioning
US11321257B2 (en) * 2019-12-31 2022-05-03 Micron Technology, Inc. Quality of service control of logical devices for a memory sub-system
US11442771B2 (en) * 2020-01-02 2022-09-13 Arm Limited Constraints on updating or usage of memory system component resource control parameters
US11899964B2 (en) 2021-09-01 2024-02-13 Qualcomm Incorporated Methods and systems for memory bandwidth control
KR20240048519A (ko) 2021-09-01 2024-04-15 퀄컴 인코포레이티드 메모리 대역폭 제어를 위한 방법들 및 시스템들

Also Published As

Publication number Publication date
WO2023034661A1 (en) 2023-03-09
US20230195364A1 (en) 2023-06-22
US20230195365A1 (en) 2023-06-22
US11829637B2 (en) 2023-11-28
US11789645B2 (en) 2023-10-17

Similar Documents

Publication Publication Date Title
US11899964B2 (en) Methods and systems for memory bandwidth control
US11829637B2 (en) Methods and systems for memory bandwidth control
CN110058786B (zh) 用于控制存储系统中的写请求的方法、装置和计算机程序产品
US7996623B2 (en) Read ahead storage control
US8972661B2 (en) Dynamically adjusted threshold for population of secondary cache
US7971074B2 (en) Method, system, and apparatus for a core activity detector to facilitate dynamic power management in a distributed system
US9418013B2 (en) Selective prefetching for a sectored cache
EP3507694B1 (en) Message cache management for message queues
WO2018017240A1 (en) Technologies for enhanced memory wear leveling
CN102334092B (zh) 存储系统及其控制方法
US7308539B2 (en) Concurrent read access and exclusive write access to data in shared memory architecture
US7752395B1 (en) Intelligent caching of data in a storage server victim cache
US20060112155A1 (en) System and method for managing quality of service for a storage system
JP4508608B2 (ja) 統合キャッシュを備えた記憶装置アダプタ
US10496550B2 (en) Multi-port shared cache apparatus
US11765250B2 (en) Devices and methods for managing network traffic for a distributed cache
US20230176977A1 (en) Throttling schemes in multicore microprocessors
EP4396686A1 (en) Methods and systems for memory bandwidth control
US11733757B2 (en) Hierarchical power management architecture for SoC-based electronic devices
CN117882058A (zh) 用于存储器带宽控制的方法和系统
US20170147517A1 (en) Direct memory access system using available descriptor mechanism and/or pre-fetch mechanism and associated direct memory access method
US20240220112A1 (en) Dynamic management of memory read requests
US20230012880A1 (en) Level-aware cache replacement
US11327909B1 (en) System for improving input / output performance
CA2832223C (en) Multi-port shared cache apparatus