KR102043886B1 - 프로파일링 캐시 대체 - Google Patents

프로파일링 캐시 대체 Download PDF

Info

Publication number
KR102043886B1
KR102043886B1 KR1020187011277A KR20187011277A KR102043886B1 KR 102043886 B1 KR102043886 B1 KR 102043886B1 KR 1020187011277 A KR1020187011277 A KR 1020187011277A KR 20187011277 A KR20187011277 A KR 20187011277A KR 102043886 B1 KR102043886 B1 KR 102043886B1
Authority
KR
South Korea
Prior art keywords
pages
memory
page
main memory
cache memory
Prior art date
Application number
KR1020187011277A
Other languages
English (en)
Other versions
KR20180056736A (ko
Inventor
치-청 창
Original Assignee
구글 엘엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 구글 엘엘씨 filed Critical 구글 엘엘씨
Publication of KR20180056736A publication Critical patent/KR20180056736A/ko
Application granted granted Critical
Publication of KR102043886B1 publication Critical patent/KR102043886B1/ko

Links

Images

Classifications

    • 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/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/122Replacement control using replacement algorithms of the least frequently used [LFU] type, e.g. with individual count value
    • 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/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0284Multiple user address space allocation, e.g. using different base addresses
    • 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
    • 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/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
    • 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/0855Overlapped cache accessing, e.g. pipeline
    • G06F12/0859Overlapped cache accessing, e.g. pipeline with reload from main memory
    • 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/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • 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/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • 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/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/123Replacement control using replacement algorithms with age lists, e.g. queue, most recently used [MRU] list or least recently used [LRU] list
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • G06F3/0605Improving or facilitating administration, e.g. storage management by facilitating the interaction with a user or administrator
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • 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/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0647Migration mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0662Virtualisation aspects
    • G06F3/0665Virtualisation aspects at area level, e.g. provisioning of virtual or logical volumes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/12Replacement control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1021Hit rate improvement
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/251Local memory within processor subsystem
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/253Centralized memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/601Reconfiguration of cache memory

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

본 문서는 프로파일링 캐시 대체를 설명한다. 프로파일링 캐시 대체는 전체 시스템 성능을 개선시키기 위해 메인 메모리와 캐시 메모리 사이의 데이터 이송을 관리하기 위한 기법이다. 종래의 캐시 대체 기법들과는 달리, 프로파일링 캐시 대체는 캐시 메모리에 유지되는 페이지들뿐만 아니라 메인 메모리에 유지되는 페이지들로의 액세스에 대한 메모리 요청들을 카운트하는 카운터들을 유지하기 위한 프로파일러를 채용한다. (예를 들어, 메모리 액세스 요청들에 관한) 프로파일러에 의해 수집된 정보에 기초하여, 무버는 메인 메모리와 캐시 메모리 사이에서 페이지들을 이동시킨다. 예로서, 무버는, 메인 메모리의 가장 많이 요청된 페이지와 같은 메인 메모리의 고도로 요청된 페이지들을, 캐시 메모리의 가장 적게 요청된 페이지와 같은 캐시 메모리의 거의 요청되지 않은 페이지들과 스와핑할 수 있다. 예를 들어, 카운터들이 메인 메모리의 고도로 요청된 페이지들에 대한 페이지 액세스 요청들의 개수가 캐시 메모리의 거의 요청되지 않은 페이지들에 대한 페이지 액세스 요청들의 개수보다 더 크다는 것을 표시할 때, 무버가 그렇게 할 수 있다. 따라서, 메모리 사용자들(예를 들어, 클라이언트 애플리케이션들)의 동작들을 지연시키지 않도록, 무버는 페이지 스와핑을 백그라운드에서 수행한다. 그렇게 하기 위해, 무버는 미리 결정된 시간 간격들에서, 예컨대 매 마이크로초(㎲)마다 1 회, 페이지들을 스와핑하는 것으로 제한된다.

Description

프로파일링 캐시 대체
관련 출원
[0001] 본 출원은 2016 년 4 월 12 일자로 출원된 미국 특허 출원 제15/097,177호를 우선권으로 주장하고, 이 미국 특허 출원은 2016 년 2 월 10 일자로 출원되고 발명의 명칭이 "Profiling Cache Replacement"인 가출원 제62/293,688호에 대한 35 U.S.C. § 119 하의 우선권을 주장한다. 이들 개시내용들은 본 명세서에 그 전체가 참조로 포함된다.
[0002] 컴퓨팅에 있어서, 캐시는 빈번하게 액세스된 데이터의 임시 저장을 위해 사용되는 메모리 블록이고, 캐싱된 데이터에 대한 장래의 요청들이 캐싱되지 않은 데이터에 대한 요청들보다 더 신속하게 서비스되게 한다. 요청된 데이터가 캐시에 포함되는 경우("캐시 히트(cache hit)"로서 알려져 있는 시나리오), 캐시를 단순히 판독하는 것만으로 요청이 서비스될 수 있는데, 이는 메인 메모리로부터의 데이터에 액세스하는 것보다 비교적 더 빠르다. 반대로, 요청된 데이터가 캐시에 포함되지 않은 경우("캐시 미스(cache miss)"로서 알려져 있는 시나리오), 데이터는 재컴퓨팅되거나 또는, 종래의 기법들에서, 그것의 원래의 저장 위치로부터 캐시에 충전(fill)되는데, 이는 캐시로부터의 데이터를 단순히 판독하는 것보다 더 느리다. 따라서, 데이터 요청들의 보다 큰 부분이 캐시 메모리로부터 서비스될 때, 속도 관점에서, 전체 시스템 성능이 개선된다.
[0003] 캐시 메모리는 전형적으로 메인 메모리보다 더 작기 때문에, 캐시에 이전에 충전된 데이터는 더 최근에 사용된 데이터로 대체될 필요가 있을 수 있다. 그렇게 하기 위해, 캐시 대체 알고리즘들이 채용된다. 종래의 캐시 대체 알고리즘들은 최소 최근 사용(least recently used)(LRU) 알고리즘들, 가장 최근 사용(most recently used)(MRU) 알고리즘들, 최소 사용 빈도(least frequently used)(LFU) 알고리즘들, 랜덤 대체 알고리즘들 등을 포함한다. 대체적으로 말하면, 캐시 대체 알고리즘들은 컴퓨터 프로그램 또는 하드웨어 유지 구조체가 캐시 메모리를 관리하기 위해 구현하는 최적화 명령어들의 세트이다. 특히, 캐시 대체 알고리즘들은 메인 메모리로부터의 정보를 위한 공간을 만들기 위해 캐시 메모리에서 어떤 정보를 축출할지를 선택한다.
[0004] 종래의 캐시 대체 알고리즘들의 대부분은 캐시 메모리에 현재 없는 데이터 블록들에 관한 정보를 유지하지 않는다. 그 결과, 데이터의 작업 세트의 사이즈가 캐시 메모리의 사이즈를 초과할 때, 과도한 충전 및 축출 트래픽이 생성될 수 있다. 이러한 과도한 충전 및 축출 트래픽은 "스래싱(thrashing)"으로서 알려져 있는 상태를 초래할 수 있는데, 여기서 다수의 캐시 미스들이 급격히 증가하고 미스들의 결과로서 캐시 충전 및 축출을 수행하기 위해 소비되는 시간이 데이터의 작업 세트에 대해 원래 요청한 컴퓨팅 동작들을 수행하기 위해 소비된 시간을 초과할 수 있다. 따라서, 종래의 캐시 대체 알고리즘들은 컴퓨팅 동작들을 방해할 수 있는 결점들을 갖는다.
[0005] 본 문서는 프로파일링 캐시 대체(profiling cache replacement)를 설명한다. 프로파일링 캐시 대체는 전체 시스템 성능을 개선시키기 위해 메인 메모리와 캐시 메모리 사이의 데이터 이송을 관리하기 위한 기법이다. 캐시 메모리와 메인 메모리 양측 모두는 데이터의 페이지들을 저장하도록 구성된다 ― 캐시 메모리는 메인 메모리보다 더 작고 그에 따라 메인 메모리보다 더 적은 페이지들을 유지하는 것이 가능하다. 그러나, 메인 메모리에 비해, 캐시 메모리는 더 낮은 레이턴시(latency), 더 높은 대역폭, 또는 더 낮은 전력 사용량 중 적어도 하나를 갖는다. 결과적으로, 데이터 액세스 요청들의 더 큰 부분이 캐시 메모리로부터 서비스될 수 있을 때 시스템 성능이 개선된다. 캐시 메모리로부터 서비스되는 데이터 액세스 요청들의 부분을 증가시키기 위해, 프로파일링 캐시 대체는 캐시 메모리에 고도로 요청된 페이지들을 캐싱하고 메인 메모리에 덜 요청된 페이지들을 이송한다(또는 남겨둔다).
[0006] 종래의 캐시 대체 기법들과는 달리, 프로파일링 캐시 대체는 캐시 메모리에 유지되는 페이지들뿐만 아니라 메인 메모리에 유지되는 페이지들로의 액세스에 대한 메모리 요청들을 카운트하는 카운터들을 유지하기 위한 프로파일러(profiler)를 채용한다. (예를 들어, 메모리 액세스 요청들에 관한) 프로파일러에 의해 수집된 정보에 기초하여, 무버(mover)는 메인 메모리와 캐시 메모리 사이에서 페이지들을 이동시킨다. 예로서, 무버는, 메인 메모리의 가장 많이 요청된 페이지와 같은 메인 메모리의 고도로 요청된 페이지들을, 캐시 메모리의 가장 적게 요청된 페이지와 같은 캐시 메모리의 거의 요청되지 않은 페이지들과 스와핑할 수 있다. 예를 들어, 카운터들이 메인 메모리의 고도로 요청된 페이지들에 대한 페이지 액세스 요청들의 개수가 캐시 메모리의 거의 요청되지 않은 페이지들에 대한 페이지 액세스 요청들의 개수보다 더 크다는 것을 표시할 때, 무버가 그렇게 할 수 있다.
[0007] 따라서, 메모리 사용자들(예를 들어, 클라이언트 애플리케이션들)의 동작들을 지연시키지 않도록, 메모리 사용자들에 의해 행해지는 요청들이 캐시 미스들에 대해 차단되지 않고, 무버가 페이지 스와핑을 백그라운드에서 수행한다. 비차단 거동과 관련하여, 페이지 액세스 요청이 캐시 미스를 발생시킬 때, 요청이 캐시 메모리로부터 서비스될 수 있도록 요청된 페이지가 캐시 메모리에 즉시 로딩되지 않는다. 그 대신에, 요청은 메인 메모리로부터 직접 서비스된다. 백그라운드에서 페이지 스와핑을 수행하는 것과 관련하여, 무버에 의해 수행되는 페이지 스와핑보다 메모리 사용자들에 의해 행해지는 서비싱 요청(servicing request)들에 대해 우선순위가 부여된다. 그렇게 하기 위해, 무버는 미리 결정된 시간 간격들에서, 예컨대 매 마이크로초(㎲)마다 1 회, 페이지들을 스와핑하는 것으로 제한된다. 미리 결정된 시간 간격에서, 무버는 메인 메모리의 고도로 요청된 페이지에 대한 페이지 액세스 요청들의 개수가 캐시 메모리의 적게 요청된 페이지에 대한 페이지 액세스 요청들의 개수를 초과하는지 여부를 결정한다. 그러한 경우, 무버는 메인 메모리의 고도로 요청된 페이지를 캐시 메모리의 거의 요청되지 않은 페이지와 스와핑한다. 그렇게 함에 있어서, 프로파일링 캐시 대체는 캐시 메모리가 충전되는 페이지들을 최적화하고, 메모리 사용자들의 동작들과 간섭하는 일 없이 그렇게 하여, 시스템 성능을 개선시키는 결과로 된다.
[0008] 이 개요는 상세한 설명에서 추가로 후술되는 기법들에 관한 단순화된 개념들을 도입하기 위해 제공된다. 이 개요는 청구된 요지의 본질적인 피처(feature)들을 식별하도록 의도된 것도 아니고, 청구된 요지의 범주를 결정함에 있어서의 사용을 위해 의도된 것도 아니다.
[0009] 프로파일링 캐시 대체를 위한 기법들 및 디바이스들의 실시예들이 다음의 도면들을 참조하여 설명된다. 동일한 번호들은 동일한 피처들 및 컴포넌트들을 지칭하도록 도면들 전반에 걸쳐 사용된다:
도 1은 기법들이 구현될 수 있는 예시적인 환경을 예시한다.
도 2는 제1 시간에서의 메인 및 캐시 메모리들에 대한 예시적인 페이지 카운터 값들을 도시하는 다이어그램을 예시한다.
도 3은 제1 시간에 후속하는 제2 시간에서의 메인 및 캐시 메모리들에 대한 예시적인 페이지 카운터 값들을 도시하는 다이어그램을 예시한다.
도 4는 도 1의 예시적인 메모리-프로파일링 컴퓨팅 디바이스를 예시한다.
도 5는 프로파일링 알고리즘에 따라 캐시 메모리 내의 페이지들을 대체시키는 방법을 예시한다.
도 6은 감소된 공간 카운터들을 사용하여 프로파일링 캐시 대체를 위한 페이지 액세스들을 카운트하는 방법을 예시한다.
도 7은 메모리의 페이지 당 하나보다 더 적은 카운터를 사용하여 프로파일링 캐시 대체를 위한 페이지 액세스들을 카운트하는 방법을 예시한다.
도 8은 프로파일링 캐시 대체를 구체화하거나 또는 그 프로파일링 캐시 대체의 사용을 가능하게 하는 기법들이 구현될 수 있는 예시적인 컴퓨팅 시스템을 예시한다.
개관
[0010] 본 문서는 프로파일링 캐시 대체를 사용하는 기법들, 및 그 프로파일링 캐시 대체를 가능하게 하는 디바이스들을 설명한다. 이러한 기법들 및 디바이스들의 사용을 통해, 메인 메모리와 캐시 메모리 사이의 데이터 이송은 최소 최근 사용(LRU) 알고리즘들, 가장 최근 사용(MRU) 알고리즘들, 최소 사용 빈도(LFU) 알고리즘들, 랜덤 대체 알고리즘들 등과 같은 종래의 캐시 대체 기법들보다 시스템 성능을 개선시키는 방식으로 관리된다. 개선된 성능은, 적어도 부분적으로, 메인 메모리와 캐시 메모리 사이에서 데이터를 이송하는 것과 관련하여, 종래의 기법들에 비해, 발생하는 "스래싱"의 양을 감소시키는 결과를 가져온다. "스래싱"이라는 용어는 데이터의 작업 세트의 사이즈가 캐시 메모리의 사이즈를 초과할 때 생성될 수 있는 과도한 충전 및 축출 트래픽에 의해 초래되는 상태를 지칭한다. 스래싱은 다수의 캐시 미스들의 급격한 증가를 초래할 수 있는데, 이는 시스템이 데이터의 작업 세트에 대해 원래 요청한 컴퓨팅 동작들을 수행하는 것보다 결과적 미스들에 대해 캐시 충전 및 축출을 수행하는 데 더 많은 시간을 소비하게 한다. 프로파일링 캐시 대체의 적용을 통해, 스래싱을 감소시키고 전체 시스템 성능을 개선시키는 방식으로 캐시 및 메인 메모리들 내의 데이터가 관리될 수 있다.
[0011] 예로서, 클라이언트 애플리케이션과 같은 메모리 사용자는 메모리에 로딩된 특정 페이지로의 액세스를 요청할 수 있다. 이 예에서는, 클라이언트 애플리케이션이 초기화 프로세스의 부분으로서 메모리로부터의 특정 페이지로의 액세스를 요청한다고 가정한다. 초기화 프로세스 동안, 클라이언트 애플리케이션은 특정 페이지로의 액세스를 다수 회 요청할 수 있다. 클라이언트 애플리케이션의 요청들을 가장 효율적으로 서비스하기 위해, 예를 들어, 특정 페이지에 대한 요청들이 메인 메모리로부터 서비스되는 경우보다 더 신속하게 서비스될 수 있도록, 특정 페이지가 캐시 메모리에 로딩될 수 있다. 초기화 프로세스의 완료 후에, 클라이언트 애플리케이션은 특정 페이지에 액세스할 필요가 없을 수도 있거나, 또는 다른 페이지들에 비해 그것을 거의 액세스하지 않을 수도 있다. 정상 동작 동안, 클라이언트 애플리케이션이 그 대신에 다른 페이지들로의 액세스를 더 많이 요청할 수 있어서, ― 초기화 프로세스가 완료되었고 특정 페이지가 더 이상 요청되지 않기 때문에 ― 다른 페이지들로의 액세스를 위한 요청들이 결국 특정 페이지에 대한 요청들을 초과한다.
[0012] 따라서, 예를 들어, 캐시 메모리는, 메인 메모리보다 사이즈가 더 작지만, 메인 메모리보다 더 낮은 레이턴시, 더 높은 대역폭, 또는 더 낮은 전력 사용량을 갖기 때문에, 클라이언트 애플리케이션의 정상 동작의 효율성은 캐시 메모리로부터 다른 페이지들에 대한 요청들을 서비스함으로써 개선될 수 있다. 다시 말해, 다른 페이지들 중 하나를 특정 페이지와 스와핑함으로써 효율성이 개선될 수 있다. 본 명세서에서 사용되는 바와 같이, "스와핑"은 하나의 다른 페이지에 대응하는 데이터가 캐시 메모리에 충전되는 것을 가능하게 하고 캐시 메모리로부터 특정 페이지에 대응하는 데이터를 축출하는 액션 또는 일련의 액션들을 지칭한다. 일부 시나리오들에서, 하나의 다른 페이지에 대응하는 데이터는 특정 페이지에 대응하는 데이터와 단순히 교환되어, 하나의 다른 페이지의 데이터가 캐시 메모리 내의 특정 페이지의 데이터를 대신하고 특정 페이지의 데이터가 메인 메모리 내의 하나의 다른 페이지의 데이터를 대신한다. 그러한 시나리오들에서, 페이지가 캐싱될 때, 그의 데이터는 메인 메모리에서가 아니라 캐시 메모리에서만 오직 상주한다.
[0013] 그러나, 다른 시나리오들에서는, 데이터에 대응하는 페이지가 캐싱되는지 아닌지의 여부에 관계없이 메모리 내의 각각의 페이지에 대한 적어도 일부의 데이터가 메인 메모리에 존재한다. 이러한 시나리오들에서, 페이지가 캐싱될 때, 캐시 메모리 내의 페이지 및 메인 메모리 내의 페이지가 함께 페이지의 유효한 데이터를 제공한다. 그러나, 일부 경우들에서, 캐시 메모리 내의 페이지들 중 일부가 유효한 데이터를 포함하지 않을 수도 있는데, 이는 이러한 페이지들이 충전되지 않기 때문이다. 또한, 메인 메모리 내의 페이지들 중 일부가 캐시 메모리에서 이러한 페이지들의 데이터 전체가 수정되었을 때와 같이 유효한 데이터를 포함하지 않을 수도 있다. 이러한 시나리오들에서, 특정 페이지의 데이터를 하나의 다른 페이지에 대응하는 데이터와 스와핑하는 것은 첫 번째로 설명된 시나리오에서처럼 단순히 데이터의 교환이 아니다. 오히려, 스와핑은 캐시 메모리로부터의 특정 페이지에 대응하는 데이터를 메인 메모리 내의 개개의 페이지로 축출하는 것을 수반한다. 개개의 페이지에서, 캐시 메모리에 있는 동안 수정된 데이터의 부분들이 메인 메모리 내의 개개의 페이지에 복사된다 ― 복사는 수정된 블록들로 제한되는데, 이는 개개의 페이지가 수정되지 않은 블록들에 대해서는 동일한 데이터를 여전히 유지하기 때문이다. 축출 후에, 데이터가 축출되게 된 캐시 메모리의 페이지는 메인 메모리로부터의 하나의 다른 페이지의 데이터로 충전된다. 그러나, 개개의 페이지(예를 들어, 축출된 데이터가 배치된 페이지) 및 하나의 다른 페이지(예를 들어, 이용가능한 캐시 메모리 페이지를 충전하기 위해 사용된 메인 메모리 데이터)는 동일한 페이지들에 대응하지 않는다.
[0014] 메인 및 캐시 메모리들이 구성되는 방식 그리고 그에 따라 이들의 페이지들이 스와핑되는 방식에 관계없이, 스와핑 후에 하나의 다른 페이지에 대한 요청들이 캐시 메모리로부터 서비스될 수 있다. 메인 및 캐시 메모리들 사이에서 페이지들이 언제 스와핑되는지 그리고 어떤 페이지들이 스와핑되는지를 결정하기 위해, 프로파일링 캐시 대체는 메인 및 캐시 메모리들 양측 모두에 유지되는 데이터의 페이지들로의 액세스들을 카운트한다. 특히, "어드레싱가능 메모리" 내의 페이지들로의 액세스들은 카운터들로 추적된다. "어드레싱가능 메모리"라는 용어는 메모리 사용자들에 의해 인식되는 메모리의 부분들을 지칭한다. 바로 위에서 설명된 첫 번째 시나리오에서, 어드레싱가능 메모리의 사이즈는 메인 메모리의 사이즈 플러스 캐시 메모리의 사이즈에 대응한다. 그러나, 다른 시나리오들에서는, 어드레싱가능 메모리의 사이즈가 단지 메인 메모리의 사이즈에 대응한다. 따라서, 메인 메모리 내의 페이지들의 개수에 대응하는 개수의 카운터들이 유지된다. 그렇게 하기 위해, 프로파일러는 어드레싱가능 메모리 내의 페이지들 각각에 대한 카운터들을 유지할 수 있고, 이러한 페이지들 중 하나로의 액세스가 요청될 때, 페이지에 대한 카운터를 증분시킬 수 있다. 상기에 논의된 다른 메모리 구성 및 스와핑 시나리오들에서, 카운터는 어드레싱가능 메모리 내의 각각의 페이지에 대해 유지되는데, 예를 들어, 카운터는 캐싱된 페이지들이 메인 메모리 내의 데이터에 의해 또한 나타내어지기 때문에 메인 메모리 내의 각각의 페이지에 대해 유지된다.
[0015] 초기화 동안 특정 페이지로의 액세스를 다수 회 요청하는 클라이언트 애플리케이션의 논의로 돌아가면, 초기화 후에 특정 페이지로의 액세스를 요청하지 않거나 또는 액세스를 거의 요청하지 않고, 정상 동작 동안 다른 페이지들로의 액세스를 더 많이 요청한다. 어떤 포인트에서 프로파일러에 의해 유지되는 카운터들은 다른 페이지들 중 적어도 하나로의 액세스가 특정 페이지로의 액세스보다 더 많이 요청되었음을 표시할 수 있다. 일단 이러한 경우라면, 메인 메모리로부터 캐시 메모리로, 또는 그 반대로 페이지들을 이동시키도록 구성되는 무버는 특정 페이지보다 더 많이 요청된 다른 페이지들 중 하나를 특정 페이지와 스와핑할 수 있다. 특히, 무버는 메인 메모리로부터의 더 많이 요청된 페이지를 캐시 메모리로 이동시킬 수 있고, 캐시 메모리로부터의 특정 페이지를 메인 메모리로 이동시킬 수 있다. 클라이언트 애플리케이션의 동작이 중단되지 않도록 하기 위해, 클라이언트 애플리케이션에 의해 행해진 요청들이 차단되지 않고, 캐시 메모리에 유지되는 데이터를 최적화하기 위해 페이지들을 스와핑하는 동작이 백그라운드에서 수행된다. 특히, 페이지 액세스 요청이 캐시 미스를 발생시킬 때, 요청이 캐시 메모리로부터 서비스될 수 있도록 요청된 페이지가 캐시 메모리에 즉시 로딩되지 않는다. 그 대신에, 요청은 메인 메모리로부터 직접 서비스된다. 추가로, 무버는 미리 결정된 시간 간격들에서, 예를 들어, 매 마이크로초(㎲)마다 1 회, 페이지 스왑들을 개시하는 것으로 제한된다. 그 결과, 무버는 다른 시간들에서 메인 또는 캐시 메모리들로의 액세스를 위해 클라이언트 애플리케이션과 경쟁하지 않는다. 그러한 기법들을 사용하면, 컴퓨팅 동작들의 중단이 회피되고 스래싱이 감소되어, 그에 의해 시스템의 전체 성능을 개선시킬 수 있다.
[0016] 이는 프로파일링 캐시 대체가 수행될 수 있는 방법들의 단지 하나의 단순한 예이고, 다른 예들 및 세부사항들이 하기에 제공된다. 이제 본 문서는 페이지 카운터 값들을 도시하는 다이어그램들을 참조하는 예시적인 환경으로 돌아가고, 그 후에 디바이스들 및 방법들, 및 예시적인 컴퓨팅 시스템이 설명된다.
예시적인 환경
[0017] 도 1은 프로파일링 캐시 대체가 채용될 수 있는 예시적인 환경(100)의 예시이다. 환경(100)은 프로파일링된 메모리(104)를 갖는 메모리-프로파일링 컴퓨팅 디바이스(102)를 예시한다. 도 1의 특정 예에서, 메모리-프로파일링 컴퓨팅 디바이스(102)는 스마트폰으로서 구성되지만, 다른 구성들이 고려된다. 프로파일링 캐시 대체를 사용하여 메모리를 최적화하는 것이 가능한 메모리-프로파일링 컴퓨팅 디바이스(102)의 다른 구성들이 추후의 도면들에 예시된다.
[0018] 환경(100)은 또한 프로파일링된 메모리(104)의 컴포넌트들을 예시한다. 프로파일링된 메모리(104)는 캐시 메모리(106) 및 메인 메모리(108)를 포함한다. 캐시 메모리(106) 및 메인 메모리(108)는 운영 체제, 클라이언트 애플리케이션들 등과 같은 메모리 사용자들에 의한 액세스를 위한 데이터를 저장하는 것이 가능하다. 예를 들어, 캐시 메모리(106) 및 메인 메모리(108)는 데이터의 페이지들을 저장하는 것이 가능하다. 본 명세서에서 사용되는 바와 같이, "페이지들"이라는 용어는 데이터의 동일한 사이즈의 블록들, 예를 들어, 데이터의 4 킬로바이트(KB) 블록들을 지칭한다. 메인 메모리(108)에 비해, 캐시 메모리(106)는 더 작다 ― 그것은 더 적은 스토리지를 가지며 그에 따라 메인 메모리(108)보다 더 적은 데이터의 페이지들을 저장하는 것이 가능하다. 스토리지의 관점에서 메인 메모리(108)보다 더 작지만, 캐시 메모리는 메인 메모리(108)보다 더 낮은 레이턴시, 더 높은 대역폭, 또는 더 낮은 전력 사용량 중 적어도 하나를 갖는다. 캐시 메모리(106)의 이러한 특성들로 인해, 캐싱되지 않은 데이터로보다는 캐싱된 데이터로 데이터 액세스 요청들의 더 큰 부분을 서비스하는 것은 메모리-프로파일링 컴퓨팅 디바이스(102)에 대해, 속도, 전력, 또는 시스템 효율성의 일부 다른 척도의 관점에서, 더 효율적인 요청 서비싱을 발생시킨다.
[0019] 프로파일링된 메모리(104)는 또한 맵퍼(mapper)(110), 프로파일러(112), 및 무버(114)를 포함한다. 맵퍼(110), 프로파일러(112), 및 무버(114)는 고도로 사용된 페이지들을 캐싱하고 덜 사용된 페이지들을 메인 메모리(108)에 남겨둠으로써 프로파일링된 메모리(104)의 성능을 최적화하는 기능을 나타낸다. 맵퍼(110)는 각각의 메모리 액세스를 위해 사용된다. 맵퍼(110)는 입력 어드레스를 캐시 메모리(106) 내의 어드레스(예를 들어, 캐시 히트)에 또는 메인 메모리(108) 내의 어드레스(예를 들어, 캐시 미스)에 맵핑시킨다. 종래의 기법들과는 대조적으로, 페이지 액세스 요청이 캐시 미스를 발생시킬 때, 요청이 캐시 메모리(106)로부터 서비스될 수 있도록 요청된 페이지가 캐시 메모리(106)에 즉시 로딩되지 않는다. 그 대신에, 요청은 메인 메모리(108)로부터 직접 서비스되는데, 예를 들어, 요청된 페이지는 메인 메모리(108)로부터 직접 페이지로의 액세스를 요청한 메모리 사용자에게 제공된다.
[0020] 프로파일러(112)는 메모리 액세스들에 관한 정보를 수집하는 기능을 나타낸다. 예로서, 프로파일러(112)는 프로파일링된 메모리(104) 내의 페이지들에 액세스하기 위한 요청들의 개수와 같은 페이지 액세스들의 개수들을 추적한다. 기법들이 본 명세서에서 각각의 페이지에 액세스하라는 요청들의 개수가 추적되는 예를 사용하여 설명되지만, 프로파일러(112)는 본 명세서에서 설명되는 기법의 사상 또는 범주로부터 벗어남이 없이 상이한 방법들로 메모리 액세스를 추적할 수 있다. 예를 들어, 일부 요청들이 64 B에 대한 것이고 다른 요청들이 128 B에 대한 것일 때와 같이, 요청들의 사이즈들이 각각의 요청에 걸쳐 균일하지 않을 때, 프로파일러(112)는 요청들의 개수 대신에 바이트들을 카운트할 수 있다. 대안적으로, 프로파일러(112)는 메모리 내의 페이지들에 액세스하라는 더 큰 요청들을 다수의 요청들로서 처리할 수 있다. 다른 예들에서, 메모리 액세스는 페이지에 액세스하라는 각각의 요청을 카운트하는 일 없이 추적될 수 있다. 오히려, 페이지에 대한 판독 요청들은 추적될 수 있지만 기입 요청들은 추적되지 않는다. 마찬가지로, 페이지에 대한 기입 요청들은 추적될 수 있지만 판독 요청들은 추적되지 않는다.
[0021] 페이지들로의 메모리 액세스를 추적하는 데 사용되는 유닛과 관계없이, 프로파일러(112)는 캐시 메모리(106) 내의 각각의 페이지 및 메인 메모리(108) 내의 각각의 페이지에 대한 카운터를 유지할 수 있다. 페이지로의 액세스가 요청될 때, 프로파일러(112)는 그 페이지에 대한 카운터를 증분시켜서 그에 의해 페이지 액세스들을 추적할 수 있다. 그러나, 하나 또는 그 초과의 구현들에서, 프로파일러(112)는 메모리의 페이지 당 하나보다 더 적은 카운터들을 유지한다. 그렇게 함에 있어서, 프로파일러(112)는 프로파일링된 메모리(104)의 페이지 액세스들을 설명하는 추적 정보를 저장하는 데 사용되는 메모리의 양을 감소시킬 수 있다. 프로파일러(112)가 메모리의 각각의 페이지에 대해 하나보다 더 적은 카운터를 사용하는 방식의 세부사항들이 본 명세서에서 하기에 논의된다.
[0022] 무버(114)는 캐시 메모리(106)와 메인 메모리(108) 사이에서 페이지들을 이동시키는 기능을 나타낸다. 예를 들어, 무버(114)는 메인 메모리(108)의 고도로 요청된 페이지들을 캐시 메모리(106)의 거의 요청되지 않은 페이지들과 스와핑하는 것이 가능하다. 본 명세서에서 사용되는 바와 같이, "고도로" 요청된 페이지 또는 페이지들이라는 용어는 고려 중인 메모리의 부분에서 다른 것들보다 더 많이 요청되는 페이지들을 지칭하고, 고려 중인 부분에서 가장 많이 요청된 페이지, 그 부분에서 상위 10 퍼센트의 요청된 페이지 등에 대응할 수 있다. 예를 들어, 메인 메모리(108) 내의 고도로 요청된 페이지는 메인 메모리(108) 내의 페이지들 중에서의 상위 10 퍼센트 내에서 요청들의 개수가 랭크되는 페이지일 수 있거나, 또는 그것은 메인 메모리(108) 내에서 가장 많이 요청된 페이지일 수 있다. 유사하게, 본 명세서에서 사용되는 바와 같이, "거의" 요청되지 않은 페이지 또는 페이지들이라는 용어는 고려 중인 메모리의 부분에서 다른 것들보다 더 적게 요청되는 페이지들을 지칭하고, 고려 중인 부분에서 가장 적게 요청된 페이지, 그 부분에서 하위 10 퍼센트의 요청된 페이지 등에 대응할 수 있다. 예로서, 캐시 메모리(106) 내의 적게 요청된 페이지는 캐시 메모리(106) 내의 페이지들 중에서의 하위 10 퍼센트 내에서 요청들의 개수가 랭크되는 페이지일 수 있거나, 또는 그것은 캐시 메모리 내에서 가장 적게 요청된 페이지일 수 있다. 그러나, 페이지들에 대응하는 메모리의 부분과 관련하여 "고도로" 및 "적게"가 사용된다는 것에 유의해야 한다. 따라서, 메인 메모리(108) 내의 고도로 요청된 페이지는 캐시 메모리(108) 내의 적게 요청된 페이지보다 더 적은 개수의 액세스를 위한 요청들을 가질 수 있거나, 또는 유사한 개수의 요청들을 가질 수 있다. 그러나, 메인 메모리(108) 내의 고도로 요청된 페이지는 메인 메모리(108) 내의 적게 요청된 페이지보다 더 큰 개수의 액세스를 위한 요청들을 갖는다. 추가적으로, 프로파일링된 메모리(104) 내의(예를 들어, 메인 메모리(108) 및 캐시 메모리(106) 내의 페이지들 중에서의) 고도로 요청된 페이지는 프로파일링된 메모리(104) 내의 거의 요청되지 않은 페이지들보다 더 큰 개수의 액세스를 위한 요청들을 갖는다.
[0023] 어느 경우에도, 메인 메모리(108)의 고도로 요청된 페이지들이 캐시 메모리(106)의 거의 요청되지 않은 페이지들보다 더 많이 액세스를 위해 요청된다는 결정에 응답하여, 무버(114)는 메인 메모리(108)의 고도로 요청된 페이지들을 캐시 메모리(106)의 거의 요청되지 않은 페이지들과 스와핑할 수 있다. 캐시 메모리(106)와 메인 메모리(108) 사이에서 페이지들을 이동시키는 것에 추가적으로, 무버(114)는 또한 메인 메모리(108) 내의 페이지들이 캐시 메모리(106) 내의 페이지들보다 더 많이 액세스되는지 여부에 관한 결정들을 행하는 기능을 나타낸다. 무버(114)는 프로파일러(112)에 의해 수집된 정보, 예를 들어, 카운터들을 체크함으로써 그렇게 할 수 있다. 일단 무버(114)가 페이지들을 이동시킨다면(예를 들어, 캐시 메모리(106) 내의 페이지를 메인 메모리(108) 내의 페이지와 스와핑한다면), 무버(114)는 맵퍼(110)에 의해 사용된 어드레스 정보를 업데이트하여, 장래의 메모리 액세스 요청들이 캐시 메모리(106) 또는 메인 메모리(108) 내의 올바른 어드레스에 맵핑되도록 한다. 메인 메모리(108)의 고도로 요청된 페이지들이 캐시 메모리(106)의 거의 요청되지 않은 페이지들보다 더 많이 액세스를 위해 요청되지 않는다는 결정에 응답하여, 무버(114)는 페이지들을 스와핑하지 않는다는 것에 유의해야 한다.
[0024] 맥락에 따라, 메인 및 캐시 메모리들에 대한 예시적인 페이지 카운터 값들의 다이어그램들을 예시하는 도 2 및 도 3을 고려한다. 도 2의 다이어그램(200)은 제1 시간에서의 메인 및 캐시 메모리들에 대한 예시적인 페이지 카운터 값들을 도시하고, 도 3의 다이어그램(300)은 제1 시간에 후속하는 제2 시간에서의 메인 및 캐시 메모리들에 대한 예시적인 페이지 카운터 값들을 도시한다. 하기에 더 상세히 논의되는 바와 같이, 무버(114)는 요청된 페이지 액세스들에 관한 정보를 체크한다. 또한, 무버(114)는 미리 결정된 시간 간격에서, 예컨대 매 마이크로초(㎲)마다 1 회, 페이지 스왑들을 개시한다. 미리 결정된 시간 간격을 참조하여, 다이어그램(200)에 대응하는 제1 시간은 특정된 그러한 미리 결정된 시간 간격의 발생 이전에 있을 수 있는 한편, 다이어그램(300)에 대응하는 제2 시간은 특정된 미리 결정된 시간 간격의 발생 이후에 있다.
[0025] 다이어그램(200)은 페이지 액세스들의 개수를 표시하는 카운터 값들에 대응하는 제1 축(202)을 포함한다. 다이어그램(200)의 제2 축(204)은 메모리에 유지되는 페이지들을 나타낸다. 또한, 다이어그램(200)은 분할 라인(206)을 포함한다. 분할 라인(206)의 좌측에 예시된 바(bar)들은 제1 시간에서의 캐시 메모리(106) 내의 페이지들의 카운터 값들을 나타내는 한편, 분할 라인의 우측에 예시된 바들은 제1 시간에서의 메인 메모리(108) 내의 페이지들의 카운터 값들을 나타낸다. 도 2 및 도 3에 예시된 특정 예에서, 캐시 메모리(106)는 128 메가바이트(128 MB)이고, 메인 메모리(108)는 4 기가바이트(4 GB)이고, 데이터의 각각의 페이지는 4 킬로바이트(4 KB)이다. 따라서, 분할 라인(206)의 좌측에 있는 바들은 128 MB 상당의 4-KB 페이지들을 나타내는 한편, 분할 라인(206)의 우측에 있는 바들은 4 GB 상당의 4-KB 페이지들(100 만 페이지들)을 나타낸다. 이들은 단지 예시적인 사이즈들이고, 본 명세서에서 설명되는 기법들의 사상 또는 범주로부터 벗어남이 없이 캐시 메모리(106), 메인 메모리(108), 및 그 내부에 유지되는 페이지들의 사이즈들이 예에서 사용된 사이즈들과는 달라질 수 있다는 것을 이해해야 한다.
[0026] 설명된 개념들을 더 쉽게 이해하기 위해, 도 2 및 도 3은, 페이지가 캐싱될 때, 그의 데이터가 캐시 메모리(106)에 있지만 메인 메모리(108)에는 없도록, 메인 메모리(108) 내의 페이지들에 대응하는 데이터가 캐시 메모리(106) 내의 페이지들에 대응하는 데이터와 단순히 교환되는 상술된 시나리오를 나타내기 위해 예시되었다. 이러한 시나리오들에서, 메모리 사용자들은 어드레싱가능 메모리를 4 GB와 128 MB의 조합(예를 들어, 메인 메모리(108)와 캐시 메모리(106)의 조합)으로서 인식한다. 그러나, 구현에 있어서, 캐시 메모리(106)가 메인 메모리(108)에 비해 작을 때(128 MB 대 4 GB), 메인 메모리(108) 및 캐시 메모리(106)는 상술된 다른 메모리 구성 및 스와핑 시나리오들에 따라 구성될 수 있다.
[0027] 상술된 다른 메모리 구성 및 스와핑 시나리오들에서, 캐시 메모리(106) 내의 페이지 및 메인 메모리(108) 내의 페이지가 함께 캐싱된 페이지의 유효한 데이터를 제공한다. 이러한 다른 시나리오들에서, 페이지들이 캐싱될 때, 캐싱된 페이지들에 대응하는 적어도 일부의 데이터는 캐시 메모리(106)에 있을 수 있고, 캐싱된 페이지들에 대응하는 적어도 일부의 데이터가 또한 메인 메모리(108)에 있을 수 있다. 그러나, 일부 경우들에서, 캐시 메모리(106) 내의 페이지들 중 일부가 유효한 데이터를 포함하지 않을 수도 있는데, 이는 이러한 페이지들이 충전되지 않기 때문이다. 또한, 메인 메모리(108) 내의 페이지들 중 일부가 캐시 메모리(106)에서 이러한 페이지들의 데이터 전체가 수정되었을 때와 같이 유효한 데이터를 포함하지 않을 수도 있다. 이러한 다른 구성 및 스와핑 시나리오들에 따르면, 그리고 메인 메모리(108)가 4 GB이고 캐시 메모리가 128 MB인 예가 주어진다면, 메모리 사용자들은 어드레싱가능 메모리를 단순히 4 GB(예를 들어, 오직 메인 메모리(108))로서 인식한다. 메인 메모리(108)로부터의 4-KB 페이지의 데이터를 캐시 메모리(106)에 충전할 때, 무버(114)는 페이지의 4 KB의 데이터의 각각의 부분을 캐시 메모리(106)에 충전하지 않을 수도 있다. 예를 들어, 무버(114)는 그 대신에 페이지의 데이터 중 1 KB를 캐시 메모리(106)에 충전할 수 있다. 예컨대 다른 3 KB가 심지어 사용될 것인지 여부에 관한 일부 불확실성이 있는 경우, 무버는 요청 어드레스에 가까운 1 KB의 데이터를 충전할 수 있다. 페이지에 대한 요청들의 대부분이 기입 요청들일 것으로 예상될 때, 무버(114)는 캐시 메모리(106)에 오버라이트(overwrite)될 페이지의 데이터를 충전하지 않을 수도 있다. 오히려, 무버(114)는 페이지의 각각의 64-바이트 부분을 어디에서 찾을지를 표시하기 위한 정보를 캐시 메모리(106)에 충전할 수 있다.
[0028] 도 2 및 도 3의 예시된 예로 돌아가면, 페이지들을 나타내는 바들은 내림차순 카운터 값 순서로 좌측에서부터 우측으로, 그리고 또한 캐시 메모리(106) 및 메인 메모리(108)의 경계들 내에서 순서화된다. 따라서, 캐시 메모리(106)에서 가장 많이 액세스된 페이지의 페이지 액세스들의 개수를 나타내는 바(208)는 바(210)보다 더 큰 카운터 값에 대응하는데, 이 바(210)는 캐시 메모리(106)에서 두 번째로 가장 많이 액세스된 페이지에 대한 페이지 액세스들의 개수를 나타낸다. 유사하게, 메인 메모리(108)에서 두 번째로 가장 적게 액세스된 페이지의 페이지 액세스들의 개수를 나타내는 바(212)는 바(214)보다 더 큰 카운터 값에 대응하는데, 이 바(214)는 메인 메모리(108)에서 가장 적게 액세스된 페이지의 페이지 액세스들의 개수를 나타낸다.
[0029] 특히 유의해야 할 것은, 제1 시간에서의, 캐시 메모리(106) 내의 가장 적게 요청된 페이지 및 메인 메모리(108) 내의 가장 많이 요청된 페이지를 각각 나타내는 바들(216, 218)이다. 예시된 예에서, 바(216)는 바(218)보다 더 작고, 그에 따라 캐시 메모리(106) 내의 가장 적게 요청된 페이지로의 액세스가, 제1 시간에서, 메인 메모리(108) 내의 가장 많이 요청된 페이지로의 액세스보다 더 적게 요청되었음을 나타낸다.
[0030] 다이어그램(300)은 다이어그램(200)과 유사하고, 그것은 메모리에 유지되는 페이지들 및 카운터 값들을 나타내는 축들, 캐시 메모리(106) 및 메인 메모리(108)에 유지되는 페이지들 사이의 분할 라인 등을 포함한다. 그러나, 다이어그램(300)은 주목할 만한 점에서 다이어그램(200)과는 상이하다. 다이어그램(300)에서, 바들(216, 218)이 스와핑되어, 캐시 메모리(106)와 메인 메모리(108) 사이의 대응하는 페이지들의 스왑을 나타낸다. 다시 말해, 다이어그램(300)은 바(216)에 의해 나타내어진 페이지가 메인 메모리(108)로 (예를 들어, 무버(114)에 의해) 이동되고 바(218)에 의해 나타내어진 페이지가 캐시 메모리(106)로 (예를 들어, 무버(114)에 의해) 이동되는 시나리오를 예시한다.
[0031] 상기에 언급된 바와 같이, 다이어그램(200)은 제1 시간에 대응하고 다이어그램(300)은 제1 시간에 후속하는 제2 시간에 대응한다. 명료성의 목적을 위해, 도 2 및 도 3에서는, 예시된 바들에 의해 나타내어진 페이지들에 액세스하라는 요청들은 제1 및 제2 시간들 사이에 행해지지 않았다고 가정될 수 있다. 다시 말해, 다이어그램들(200, 300)에 나타내어진 페이지들에 대한 카운터 값들은 이들 양측 모두의 시간들에서 동일하다. 그러나, 제1 시간과 제2 시간 사이에는, 이동 주기, 즉, 무버(114)가 캐시 메모리(106)와 메인 메모리(108) 사이에서 페이지들을 스와핑하는 시간이 발생하였다고 가정된다. 따라서, 제1 시간 및 제2 시간은 각각 이동 주기의 직전 및 직후의 시간의 슬라이스들을 나타낼 수 있다. 그에 따라, 제1 및 제2 시간들 사이에는, 메모리-프로파일링 컴퓨팅 디바이스(102)에 대한 캐싱된 페이지들을 최적화하기 위해 프로파일링 캐시 대체 기법들이 무버(114)에 의해 적용된다.
[0032] 도 1의 예시적인 메모리-프로파일링 컴퓨팅 디바이스(102)와 관련하여, 도 4의 상세한 예시를 고려한다. 메모리-프로파일링 컴퓨팅 디바이스(102)는 다양한 디바이스들 중 하나 또는 조합일 수 있는데, 여기서는 6 개의 예들: 스마트폰(102-1), 컴퓨팅 워치(102-2), 디지털 카메라(102-3), 랩톱(102-4), 태블릿 컴퓨터(102-5), 및 데스크톱 컴퓨터(102-6)로 예시되지만, 넷북, 게이밍 콘솔, 또는 셋톱 박스와 같은 다른 컴퓨팅 디바이스들 및 시스템들이 또한 사용될 수 있다. 상기에 언급된 바와 같이, 일부 실시예들에서, 기법들은, 적어도 부분적으로, 원격 컴퓨팅 디바이스를 통해 동작한다. 원격 컴퓨팅 디바이스는, 예를 들어, 서버로서 구성될 수 있다. 그러한 경우들에서, 일부 컴퓨팅은, 예를 들어, 제한된 컴퓨팅 동작들을 갖는 통신 디바이스를 통해 컴퓨팅을 가능하게 하는 데이터를 통신하거나 또는 심지어 직접적으로 메모리-프로파일링 컴퓨팅 디바이스들(102)로부터 서버로 컴퓨팅을 가능하게 하는 데이터를 통신하는 것에 의해, 로컬로 선행될 수 있다.
[0033] 메모리-프로파일링 컴퓨팅 디바이스(102)는 디스플레이(402)(도 4에는 5 개가 도시됨), 트랜시버(404), 하나 또는 그 초과의 프로세서들(406) 및 컴퓨터 판독가능 저장 매체(408)(CRM(408))를 포함하거나 또는 이들과 통신하는 것이 가능하다. 트랜시버(404)는 데이터를 직접적으로 또는 통신 네트워크를 통해, 예컨대 클라이언트 애플리케이션 데이터를 디바이스들(102)로부터 로컬 영역, 광역, 개인 영역, 셀룰러, 또는 근접장(near-field) 네트워크를 통해, 전송 및 수신하는 것이 가능하다.
[0034] 하나 또는 그 초과의 구현들에서, 캐시 메모리(106), 메인 메모리(108), 프로파일러(112), 맵퍼(110), 및 무버(114)는 CRM(408) 상에서 구체화된다. 캐시 메모리(106)는 캐싱된 페이지들(410)을 포함하고 메인 메모리는 메인-메모리 로딩된 페이지들(412)(MM-로딩된 페이지들(412))을 포함한다. 프로파일러(112)는 메모리 액세스들에 관해 프로파일러(112)에 의해 수집되는 메모리 액세스 정보(414)를 포함한다. 예로서, 메모리 액세스 정보(414)는 캐싱된 페이지들(410) 및 MM-로딩된 페이지들(412)에 액세스하라는 요청들의 개수들을 표시하는 카운터들을 포함한다. CRM(408)은 또한 입력 어드레스들(예컨대 캐시 또는 메인 메모리들 내의 정보의 페이지들에 액세스하기 위해 메모리 사용자에 의해 제공된 것들)을 캐시 메모리(106) 내의 캐싱된 페이지들(410) 중 하나의 캐싱된 페이지(캐시 히트), 또는 메인 메모리(108) 내의 MM-로딩된 페이지들(412) 중 하나의 MM-로딩된 페이지(캐시 미스)의 어드레스에 맵핑시키는 입력 어드레스 맵핑(416)을 포함한다.
[0035] 상기에 논의된 바와 같이, 맵퍼(110)는 각각의 메모리 액세스에 대해 사용되고, 입력 어드레스를 캐시 메모리(106) 또는 메인 메모리(108) 내의 어드레스에 맵핑시키는 기능을 나타낸다. (예를 들어, 메모리로부터의 데이터의 페이지로의 액세스를 요청하기 위해) 맵퍼(110)가 입력 어드레스를 수신할 때, 맵퍼(110)는 입력 어드레스 맵핑(416)을 참조하고 캐시 메모리(106)의 또는 메인 메모리(108)의 대응하는 어드레스를 리턴할 수 있다.
[0036] 프로파일러(112)는 또한 각각의 메모리 액세스와 함께 채용된다. 특히, 프로파일러는 캐싱된 페이지들(410) 및 MM-로딩된 페이지들(412)로의 액세스들의 개수를 추적한다. 하나 또는 그 초과의 구현들에서, 프로파일러(112)는, 메모리 액세스 정보(414)의 부분으로서, 캐싱된 페이지들(410) 각각 그리고 MM-로딩된 페이지들(412) 각각에 대한 개개의 카운터들을 유지한다. 이 시나리오에서, 캐싱된 페이지들(410) 중 하나 또는 MM-로딩된 페이지들(412) 중 하나가 액세스될 때, 프로파일러(112)는 액세스를 표시하기 위해 개개의 카운터를 증분시킨다. 그러나, 일부 구현들에서, 캐싱된 페이지들(410) 각각 그리고 MM-로딩된 페이지들(412) 각각에 대한 증분가능한 카운터를 유지하는 것은 너무 많은 저장 공간을 소비할 수 있다. 예를 들어, 프로파일러(112)가 8-비트 카운터들을 사용하고, 메인 메모리가 4 GB이고, MM-로딩된 페이지들(412) 각각이 4 KB인 경우, 그러면 메모리의 1 MB는 100 만 페이지들에 대한 카운터들을 저장하기 위해 단순히 사용된다 ― 이는, 예를 들어, 메모리 액세스 정보(414)가 정적 랜덤 액세스 메모리(SRAM)에 저장될 때, 일부 구현들에서는 적합하지 않을 수도 있다. 따라서, 프로파일러(112)는 더 적은 스토리지를 활용하는 방식들로 메모리 액세스 정보(414)를 추적 및 유지할 수 있다. 프로파일러(112)는, 예를 들어, 카운터들의 범위의 동적 확장을 통해 총 카운터 스토리지를 감소시키는 카운터들을 구현할 수 있거나, 또는 메모리의 각각의 페이지에 대해 하나보다 더 적은 카운터들이 있도록 카운터들을 구현할 수 있다.
[0037] 동적 확장을 통해 총 카운터 스토리지를 감소시키는 것과 관련하여, 프로파일러(112)는 하나 또는 그 초과의 디폴트 구현들에서 8-비트 카운터들을 사용할 수 있고, 하나 또는 그 초과의 다른 구현들에서 동적으로 확장되는 카운터들을 사용할 수 있다. 범위가 동적으로 확장되는 카운터들을 구현하기 위해, 부동 소수점 표현들이 사용될 수 있다. 대체적으로 말하면, 캐시 메모리(106) 및 메인 메모리(108) 내의 페이지들의 액세스 카운트들은 높은 동적 범위를 갖는데, 예를 들어, 고도로 액세스된 페이지들은 거의 액세스되지 않은 페이지들보다 상당히 더 많이 액세스될 수 있고, 고도로 액세스된 페이지들의 액세스들의 개수는 시스템 동작 동안 계속 증가할 수 있다.
[0038] 동적으로 확장되는 카운터들이 채용되는 구현들을 포함하는 하나 또는 그 초과의 구현들에서, 메모리 내의 데이터는 세트들로 분할될 수 있다. 다시 말해, 캐싱된 페이지들(410) 및 MM-로딩된 페이지들(412)은 페이지들의 세트들로 분할될 수 있어서, 각각의 세트가 캐싱된 페이지들(410) 중 일부 및 MM-로딩된 페이지들(412) 중 일부를 포함한다. 예를 들어, 캐시 메모리(106)가 128 MB이고, 메인 메모리(108)가 4 GB이고, 각각의 페이지가 4 KB인 연속된 예에서, 페이지들은 세트들로 분할될 수 있어서 각각의 세트가 MM-로딩된 페이지들(412) 중 512 개 및 캐싱된 페이지들(410) 중 16 개를 포함한다. 메모리 내의 데이터가 세트들로 분할될 때, 무버(114)는 세트 내의 캐싱된 페이지들(410)을 세트에 또한 있는 MM-로딩된 페이지들(412)과 스와핑할 수 있다. 결과적으로, 카운터들을 체크할 때, 이 예에서, 무버(114)는 512 개의 카운터들을 체크하여 가장 많이 요청된 페이지 및 가장 적게 요청된 페이지를 결정할 수 있다. 그러나, 무버(114)는 세트 내의 캐싱된 페이지들(410)을 다른 세트들로부터의 MM-로딩된 페이지들(412)과 스와핑하지 않는다.
[0039] 동적으로 확장되는 카운터 구현들에서, 프로파일러(112)는 페이지들의 각각의 세트에 대한 공통 스케일(common scale) S, 및 세트 내의 각각의 페이지에 대한 N-비트 카운터 C를 유지할 수 있다. 예로서, 프로파일러는 6 비트들을 사용하여 페이지들의 세트에 대한 공통 스케일 S를 구현할 수 있다. 대체적으로 말하면, 프로파일러(112)는 카운터 값들이 세트 내에서 비교되기 때문에, 예를 들어, 동일한 세트의 메인 메모리(108) 및 캐시 메모리(106) 내의 페이지들만이 오직 스와핑되기 때문에, 페이지들이 세트들로 분할될 때 공통 스케일을 사용할 수 있다. 공통 스케일 S 및 N-비트 카운터 C를 갖는다면, 프로파일러(112)는 이들의 값들이
Figure 112018039712140-pct00001
와 동일하도록 카운터들을 유지할 수 있다.
[0040] 프로파일러(112)가 페이지의 각각의 액세스에 대해 카운터 값을 1 만큼 증분시키는 프로파일링 캐시 대체의 디폴트 구현들과는 대조적으로, 동적으로 확장되는 카운터들이 사용되는 구현들에서, 프로파일러(112)는
Figure 112018039712140-pct00002
의 확률로 페이지의 카운터 C를 증가시킨다. 이는 프로파일러(112)가 S개의 랜덤 비트들을 생성하게 하고, 그 후에 S개의 비트들 각각이 제로일 때에만 오직 카운터를 증가시키게 한다. 페이지의 카운터 C가 오버플로우할 때(예를 들어, 이전의 N-비트들이 페이지 액세스들을 나타내기에 충분하지 않을 때), 프로파일러(112)는 페이지의 세트에 대한 공통 스케일 S를 1 만큼 증가시킬 수 있고, 세트의 다른 페이지들에 대한 것뿐만 아니라 오버플로우를 야기하는 특정 페이지에 대한 카운터 값들 각각을 2 로 분할할 수 있다.
[0041] 동적으로 확장되는 카운터들에 대한 이 스킴이 채용되는 시나리오를 고려한다. 프로파일러(112)는 다양한 상이한 방법들로 각각의 카운터 값을 저장할 수 있다. 예를 들어, 프로파일러(112)는 C와 동일한 카운터 값을 저장할 수 있는데, 여기서 C는 단순히 이진 정수이다. 프로파일러(112)는 또한
Figure 112018039712140-pct00003
와 동일한 카운터 값을 저장할 수 있는데, 여기서 C는 다시 이진 정수이다. 프로파일러(112)는 또한 C에 대한 단순한 부동 소수점 표현을 사용하여 개별 카운터들의 동적 범위를 증가시킬 수 있다. 프로파일러(112)에 의해 저장된 카운터 값은 여전히
Figure 112018039712140-pct00004
와 동일할 수 있지만, 프로파일러(112)는 다음과 같이 C를 인코딩할 수 있다:
Figure 112018039712140-pct00005
[0042] 여기서, K라는 용어는 유효 숫자들로 구성되는 부동 소수점 숫자의 부분인 유효부(significand)를 나타내고, E라는 용어는 기저(2 가 기저이다)의 지수를 나타낸다. 이것이 주어진다면, 최종 카운터 값은 다음과 같다:
Figure 112018039712140-pct00006
[0043] 이 시나리오에서, 프로파일러(112)가 (그것이 0 내지 15의 값의 범위에 있을 수 있도록) 4-비트 유효부 K, 그리고 (그것이 0 내지 7의 값의 범위에 있을 수 있도록) 지수에 대한 3 비트들을 사용한다고 가정되는 경우, 7-비트 카운터 C는 [0, 15×27]의 범위 내의 페이지 액세스 값들을 나타낼 수 있다.
[0044] 동적으로 확장되는 카운터들을 채용하기 위한 대안적인 시나리오를 고려한다. 이 대안적인 시나리오에서, 프로파일러(112)는 개별 카운터 C를 상이한 방식으로 인코딩한다. 특히, 인코딩은 본 명세서에서 nK로서 나타내어지는 유효부 K에 대해 할당된 비트수, 및 본 명세서에서 nE로서 나타내어지는 지수 E에 대해 할당된 비트수에 의존한다. 지수 E가 제로와 동일한 경우, 그러면 프로파일러(112)는 카운터 C의 값을 단순히 인코딩하여 그것이 유효부 K와 동일해지도록 하여, C=K이도록 한다. 그러나, 지수 E가 제로보다 더 큰 경우, 프로파일러(112)는 다음과 같이 카운터 C의 값을 인코딩한다:
Figure 112018039712140-pct00007
[0045] 이 대안적인 시나리오에서, 유효부 nK에 할당된 비트수가 4 비트들이고 지수 nE에 대해 할당된 비트수가 3 비트들이라고 가정되는 경우, 그러면 카운터는 [0, 1984]의 범위 내의 값들을 저장할 수 있다. 상기에 언급된 바와 같이, (비트수의 관점에서) 개별 카운터들의 사이즈를 감소시키는 것에 추가적으로, 카운터들의 개수는 또한 일부 저장-민감성 구현들에서, 예를 들어, 메모리의 페이지 당 하나의 카운터로부터 메모리의 페이지 당 하나보다 더 적은 카운터로 감소될 수 있다.
[0046] 메모리의 페이지 당 하나보다 더 적은 카운터를 사용하는 것과 관련하여, 그렇게 하는 것은 공통 작업부하들과 관련하여 메모리 사용자들(예를 들어, 클라이언트 애플리케이션들)에 의해 사용되는 데이터의 작업 세트들이 메인 메모리(108)의 사이즈와 동일할 가능성이 없거나 또는 이를 초과할 가능성이 없다는 관측에 기초한다. 게다가, 프로파일링 캐시 대체는 단순히 페이지들로의 액세스가 요청되기 때문에 단순히 페이지들을 캐시 메모리(106)에 캐싱하기보다는 메인 메모리(108)의 고도로 요청된 페이지들을 캐시 메모리(106)에 캐싱하는 것을 수반하기 때문에, 메인 메모리(108) 내의 거의 요청되지 않은 페이지들의 액세스들의 개수들은 본 명세서에서 설명되는 기법들에 대해 크게 관련성이 없다. 따라서, 프로파일러(112)는 더 자주 액세스되는 페이지들에 대한 카운터들을 유지할 수 있다.
[0047] 캐시 메모리(106) 및 메인 메모리(108) 내의 페이지들을 추적하는 데 사용되는 카운터들의 개수를 감소시키기 위해, 태그들이 사용되어 카운터들 각각이 연관된 페이지를 식별할 수 있다. 카운터와 연관되는 페이지로의 액세스가 요청될 때, 프로파일러(112)는 액세스를 표시하기 위해 상술된 방식들 중 하나의 방식으로 카운터를 업데이트한다. 그러나, 카운터와 연관되지 않는 페이지(예를 들어, 카운터에 의해 액세스들이 현재 추적되지 않는 페이지)로의 액세스가 요청될 때, 상이한 페이지로의 액세스들을 추적하는 데 이미 사용된 카운터들 중 하나가 상이한 페이지와는 연관해제(disassociate)될 수 있고, 요청되었지만 이전에는 연관되지 않은 페이지와는 연관될 수 있다.
[0048] 카운터들을 추적된 페이지들과 연관해제하고 이들을 요청되었지만 이전에 연관되지 않은 페이지들과 연관시키기 위한 일부의 종래의 기법들은 스래싱을 초래할 수 있다. 하나 또는 그 초과의 구현들에서, 프로파일링 캐시 대체는 카운터들을 추적된 페이지들과 연관해제하고 이들을 요청되었지만 이전에 연관되지 않은 페이지들과 연관시키기 위해 하나 또는 그 초과의 수정된 카운터 태깅 기법들을 적용하는 것을 수반한다. 이러한 수정된 카운터 태깅 기법들은 종래 기법들과 비교하여 스래싱을 감소시킬 수 있다.
[0049] 프로파일러(112)는 다수의 카운터들 N을 메모리 액세스 정보(414)의 부분으로서 유지함으로써 수정된 카운터 태깅 기법들을 적용한다. 각각의 카운터는, 예를 들어, 형태 {페이지, 카운트}로, 카운터가 연관되는 페이지 및 그 페이지와 연관된 카운트를 식별하는 페이지 태그를 나타내는 데이터 쌍을 포함한다. 특정 페이지 X로의 액세스가 요청될 때, 프로파일러(112)는 특정 페이지 X와 연관되는 카운터 {X, C}가 있는지를 확인하기 위해 체크한다. 특정 페이지 X와 연관된 카운터가 있는 경우, 예를 들어, {X, C}가 존재하는 경우, 그러면 프로파일러(112)는 카운트 C를 1 만큼 증분시킨다. 특정 페이지 X와 연관된 카운터가 없는 경우, 프로파일러(112)는 가장 작은 카운트 C를 갖는 페이지 Y에 대한 카운터 {Y, C}를 찾는다. 그 후에, 프로파일러(112)는 카운터의 값을 대체하여 그것이 특정 페이지 X와 연관되도록 하고 특정 페이지 X의 하나의 액세스를 표시하도록 하는데, 예를 들어, 프로파일러는 {Y, C}의 값들의 쌍을 {X, 1}로 조정한다. 이는 이전 카운트를 상속하는 종래의 기법들과는 상이하다. 다시 말해, 수정된 카운터 태깅 기법들이 하는 것처럼 C를 1로 대체하는 것 대신에, 종래의 기법들은 CC+1로 대체한다. 수정된 카운터 태깅 기법들로 페이지 액세스들을 카운트함으로써, 가장 큰 카운트들을 갖는 카운터들의 개수 N이 상위 n개의 페이지들에 대응한다.
[0050] 카운터들이 구현되는 방법에 관계없이, 무버(114)는 메인 메모리(108)와 캐시 메모리(106) 사이에서 페이지들을 스와핑할지 여부를 결정하기 위해 메모리 액세스 정보(414)에 유지되는 카운터들을 체크하는 기능을 나타낸다. 상기에 언급된 바와 같이, 무버(114)는 이러한 체크들을 수행하여 매 마이크로초(1 ㎲)와 같은 미리 결정된 시간 간격에서 페이지 스왑들을 개시하기 위한 결정들을 행한다. 본 명세서에서 논의된 예들은 시간 간격이 미리 결정된 것이고 1 ㎲에 대응하는 것으로 지칭하지만, 시간 간격은 본 명세서에서 설명되는 기법들의 사상 또는 범주로부터 벗어남이 없이 상이할 수 있다. 예로서, 미리 결정된 간격은 또한 랜덤하게, 하기에 더 상세히 논의되는 바와 같은 액세스들의 개수(예를 들어, 프로파일링된 메모리(104)로부터의 페이지들에 대해 요청된 액세스들의 총 개수)에 기초하여 등으로 결정될 수 있다.
[0051] 미리 결정된 시간 간격(각각의 마이크로초)에서, 무버(114)는 본 명세서에서 설명되는 기법들에 따라 결정들을 행할 수 있다. 절대 시간(예를 들어, 미리 결정된 시간 간격)을 사용하기보다는, 무버(114)는 페이지들의 세트 당 매 N개의 메모리 액세스들마다 결정들을 교호로 행할 수 있다. 이러한 방법으로, 본 명세서에서 설명되는 기법들은 사용된 백그라운드 대역폭의 절대 값 대신에 사용된 백그라운드 대역폭의 퍼센티지를 제어할 수 있다.
[0052] 빈도에 관계없이, 이동 주기 동안, 무버(114)는 메인 메모리(108)의 고도로 요청된 페이지들이 캐시 메모리(106) 내의 거의 요청되지 않은 페이지들보다 더 많이 요청되는지 여부를 결정하도록 구성된다. 메인 메모리(108)의 고도로 요청된 페이지는 MM-로딩된 페이지들(412)에 비해 고도로 요청되고, 캐시 메모리(106) 내의 거의 요청되지 않은 페이지들은 캐싱된 페이지들(410)에 비해 거의 요청되지 않는다. 그러나, 고도로 요청된 메인 메모리 페이지들에 대한 요청들의 개수는 거의 요청되지 않은 캐시 메모리 페이지들에 대한 요청들의 개수와 실질적으로 유사할 수 있다.
[0053] 메인 메모리(108) 내의 고도로 요청된 페이지들이 캐시 메모리(106) 내의 거의 요청되지 않은 페이지들보다 더 많이 요청되는 경우, 무버(114)는 메인 메모리(108)의 고도로 요청된 페이지들을 캐시 메모리(106)의 거의 요청되지 않은 페이지들과 스와핑한다. 그렇게 하기 위해, 무버(114)는 캐시 메모리(106)로부터 거의 요청되지 않은 페이지들을 축출하고 메인 메모리의 고도로 요청된 페이지들을 캐시 메모리(106)에 충전한다. 무버(114)의 동작은 메모리 사용자들(예를 들어, 클라이언트 애플리케이션들)로부터의 디맨드 요청들과 경쟁하기 때문에, 무버(114)의 결정 및 스와핑 동작들의 성능을 이동 주기로 제한하는 것은 메모리 사용자들에 대한 무버(114)의 영향을 감소시킨다 ― 메모리-프로파일링 컴퓨팅 디바이스(102)에 대한 메모리 액세스의 레이턴시를 감소시킨다. 따라서, 무버(114)는 백그라운드에서 동작하는 한편, 메모리 사용자들은 캐시 메모리(106) 및 메인 메모리(108)로부터의 데이터의 페이지들에 액세스한다.
[0054] 무버(114)의 동작을 백그라운드로 제한하는 것에 추가적으로, 메모리 사용자들에 의해 행해진 페이지 액세스 요청들은 메모리를 최적화할 목적으로 행해진 페이지 액세스 요청들, 예를 들어, 무버(114)에 의해 요청된 페이지 스왑들보다 우선순위가 부여된다. 캐시 메모리(106) 및 메인 메모리(108)로부터의 데이터의 페이지들에 액세스하도록 행해진 요청들은 일반적으로 2 개의 타입들 ― 디맨드 요청들 및 백그라운드 요청들 ― 로 분할될 수 있다. "디맨드 요청"이라는 용어는 캐시 메모리(106) 또는 메인 메모리(108)로부터의 데이터의 페이지에 대해 클라이언트 애플리케이션과 같은 메모리 사용자에 의해 행해진 요청을 지칭한다. "백그라운드 요청"이라는 용어는, 메인 메모리(108)와 캐시 메모리(106) 사이의 페이지들을 스와핑하는 것과 관련하여 무버(114)에 의해 행해진 충전 및 축출 요청들과 같은, 디맨드 요청에 의해 간접적으로 트리거되는 충전 또는 축출 요청을 지칭한다.
[0055] 본 명세서에서 설명되는 기법들은 몇 가지 방법들로 백그라운드 요청들을 이행하는 것보다 디맨드 요청들을 이행하는 것에 우선순위를 부여한다. 첫 번째로, 기법들은, 예컨대 제한된 개수의 보류 중인 백그라운드 요청들을 홀딩하도록 구성된 큐에 보류 중인 요청들을 유지함으로써, 제한된 개수의 보류 중인 백그라운드 요청들을 허용할 수 있다. 백그라운드 요청이 있을 때 큐가 가득 찬 경우, 요청은 단순히 드롭되는데, 예를 들어, 요청이 큐에 추가되지 않는다. 실제로, 전체 큐 내의 보류 중인 백그라운드 요청들 중 적어도 하나가 서비스될 때까지 다른 백그라운드 요청들이 큐에 추가되지 않는다.
[0056] 본 명세서에서 설명되는 기법들이 백그라운드 요청들을 이행하는 것보다 디맨드 요청들을 이행하는 것에 우선순위를 부여하는 두 번째 방법은, 동적 랜덤 액세스 메모리(DRAM) 요청 큐가 사용되고 백그라운드 요청들이 DRAM 요청 큐의 제한된 양(예를 들어, 절반)을 충전하도록 허용되는 구현을 수반한다. 예를 들어, DRAM 요청 큐의 충전 레벨이 큐의 최대 충전 레벨의 절반보다 더 큰 경우, 그러면 본 명세서에서 설명되는 기법들은 인커밍 요청들을 디맨드 요청들로 제한한다. 여기서, DRAM 요청 큐의 충전 레벨이 큐의 최대 충전 레벨의 절반보다 더 클 때 백그라운드 요청들이 지연될 수 있다. 예를 들어, 보류 중인 너무 많은 무버-요청된 백그라운드 요청들이 있는 경우, 무버(114)에 의해 개시된 백그라운드 요청은 드롭된다. 그럼에도 불구하고, 드롭되지 않은 무버(114)에 의해 개시된 백그라운드 요청들은 DRAM 요청들로 분해되고 DRAM 요청 큐에 전송된다. DRAM 요청 큐가 인커밍 DRAM 요청들을 현재 핸들링하기에는 너무 바쁨을 표시하는, DRAM 요청 큐가 특정 임계치(예를 들어, 큐의 최대 충전 레벨의 절반)을 초과하는 경우, DRAM 요청 큐로 추가의 백그라운드 요청들이 전송되지 않는다. 그 대신에, DRAM 요청 큐 레벨이 임계치보다 더 낮아질 때까지 백그라운드 DRAM 요청들이 홀딩된다. 일단 DRAM 요청 큐가 백그라운드 DRAM 요청들을 다시 핸들링하는 것이 가능해진다면, 홀딩된 요청들이 DRAM 요청 큐로 전송된다.
[0057] 동작 동안, 메모리 사용자들이 프로파일링된 메모리(104)에 부과하는 작업부하는 시간이 경과함에 따라 변경될 수 있다. 변경되는 작업부하들과 관련하여, 고도로 요청된 페이지들도 또한 변경될 수 있다. 다시 말해, 하나의 클라이언트 애플리케이션이 동작하는 동안 메인 메모리(108)에서 캐싱되고 고도로 요청되는 페이지들은 다른 클라이언트 애플리케이션이 동작하는 동안 메인 메모리(108)에서 캐싱되고 고도로 요청되는 페이지들과는 동일하지 않을 수도 있다. 캐시 메모리(106)가 메모리-프로파일링 컴퓨팅 디바이스(102)의 현재 동작들에 대응하는 페이지들로 충전된다는 것을 보장하기 위해, 프로파일러(112)는 페이지 카운터들의 값들을 감쇠시킬 수 있다. 일부 감소 간격에서 카운터 값들을 자동으로 감쇠시킴으로써, 한 번에 심하게 액세스된 페이지들은 이들의 사용이 적어질 때 캐시 메모리(106)로부터 축출될 수 있다.
[0058] 하나 또는 그 초과의 구현들에서, 프로파일러(112)는 감쇠 간격에서 세트의 카운터 값들 각각을 절반으로 단순히 분할할 수 있다. 감쇠 간격이 세트 내의 페이지들에 대해 요청된 총 개수의 액세스들, 예를 들어, 214 개의 액세스들에 대해 미리 결정된 임계치에 대응하는 예를 고려한다. 이 예에서, 세트 내의 페이지들에 대한 총 개수의 액세스들이 214 개의 액세스들을 초과할 때, 프로파일러(112)는 세트의 카운터 값들을 2로 분할한다. 공통 스케일 S를 사용하는 구현들을 다시 참조하면, 프로파일러(112)는 세트의 공통 스케일 S가 제로보다 더 클 때 세트의 공통 스케일 S를 1만큼 감소시킴으로써 카운터들을 감쇠시킨다. 그러나, 세트의 공통 스케일 S가 이미 제로인 경우, 프로파일러(112)는 세트의 카운터들 각각을 2로 분할한다. 또 다른 구현들에서, 감쇠 간격은 미리 정의된 개수의 액세스들보다는 어떤 미리 결정된 절대 시간에 대응한다. 카운터들은 본 명세서에서 설명되는 기법들의 사상 또는 범주로부터 벗어남이 없이 2로 분할되는 것 이외의 방식들로 감쇠될 수 있다는 것을 이해해야 한다. 예로서, 2로 분할되는 것보다는 카운터들은 3 분의 2(⅔)와 같은 인수로 곱해질 수 있다.
[0059] 메모리-프로파일링 컴퓨팅 디바이스(102)의 동작 동안 발생하는 추가의 시나리오들과 추가로 관련하여, 일부 경우들에서는 캐시 메모리(106)의 거의 요청되지 않은 페이지들 및 메인 메모리(108)의 고도로 요청된 페이지들에 대한 카운터들은 동일 또는 매우 유사한 값들을 가질 수 있다. 페이지들의 세트를 참조하면, (다른 캐싱된 페이지들에 비해) 거의 요청되지 않은 세트의 캐싱된 페이지들 및 메인 메모리(108)의 세트의 고도로 요청된 페이지들은 동일 또는 매우 유사한 값들을 가질 수 있다. 캐싱된 페이지들이 캐싱될 후보들인 페이지들과 유사한 카운터 값들을 가질 때 무버(114)가 어떤 페이지들을 캐싱할지를 결정할 때 어려움들이 발생할 수 있다. 세트의 제1 페이지가 세트의 다른 페이지들보다 약간 더 많이 액세스되는 예를 고려한다. 더 많은 액세스들을 갖는 결과로서, 무버(114)는 제1 페이지를 캐싱할 수 있다. 그러나, 추후에 세트의 제2 페이지가 제1 페이지보다 약간 더 많이 액세스되는 것을 또한 고려한다. 후속 액세스들의 결과로서, 무버(114)는 제1 페이지를 제2 페이지로 대체시켜서, 그에 의해 캐시 메모리(106)로부터 제1 페이지를 축출시킨다. 순환적으로 참조되는 페이지들의 세트에서, 제1 페이지의 약간 더 많은 액세스들은 다시 무버(114)로 하여금 캐시 메모리 내의 제2 페이지를 대체시키게 하는 것 등을 할 수 있다. 이 시나리오는 이러한 페이지들에 대한 스래싱을 초래할 수 있고, 감쇠 카운터들이 사용되고 감쇠 간격이 짧을 때 특히 문제가 될 수 있다.
[0060] 그러한 스래싱을 방지하기 위해, 무버(114)는 메인 메모리(108)의 고도로 요청된 페이지들을 캐시 메모리(106)의 거의 요청되지 않은 페이지들과 스와핑하는 것으로 결정하기 전에 진입 장벽을 추가할 수 있다. 따라서, 고도로 요청된 메인 메모리 페이지들의 요청된 액세스들의 개수가 거의 요청되지 않은 캐싱된 페이지들의 요청된 액세스들의 개수보다 더 클 때마다 메인 메모리(108)의 고도로 요청된 페이지들을 캐시 메모리(106)의 거의 요청되지 않은 페이지들과 스와핑하는 대신에, 무버(114)는 그 대신에 고도로 요청된 메인 메모리 페이지들의 요청된 액세스들의 개수가 거의 요청되지 않은 캐싱된 페이지들의 액세스들의 개수 및 진입 장벽보다 더 클 때 페이지들을 스와핑하는 것으로 결정할 수 있다. 예로서, 무버(114)는 다음이 참일 때 페이지들을 스와핑하는 것으로 결정할 수 있다:
액세스카운트(높은 MM 페이지) > (액세스카운트(적은 CM 페이지) + Δ)
[0061] 이 표현식에서, Δ는 진입 장벽을 나타내고, 페이지들을 스와핑하기 위해 리소스 비용(예를 들어, 시간, 전력 등)을 오프셋시키는 정수와 같은 미리 결정된 정수에 대응할 수 있다.
[0062] 프로파일링 캐시 대체는 본 명세서에서 설명되는 기법들의 사상 또는 범주로부터 벗어남이 없이 또 다른 방법들로 구현될 수 있다. 대안적인 구현의 일 예는 시간 다중화된 카운터들을 사용하는 것이다. 오직 가장 많이 액세스되는 페이지들에 대해서만 카운터들을 유지하는 대신에, 프로파일러(112)는 페이지들 각각에 대한 카운터들을 유지할 수 있다. 그러나, 임의의 주어진 시간에, 프로파일러(112)는 제한된 개수의 카운터들로의 액세스를 가질 수 있다. 카운터들 중 16 분의 1이 SRAM에 유지되고 다른 16 분의 15가 DRAM에 유지되는 시나리오를 고려한다. 카운터가 SRAM에 있는 페이지로의 액세스가 요청될 때, 프로파일러(112)는 단순히 카운터를 증분시킨다. 그러나, 카운터가 DRAM에 있는 페이지로의 액세스가 요청될 때, 프로파일러(112)는 요청을 무시한다. 주기적으로, 이러한 시간 다중화된 카운터 기법들은 SRAM 내의 카운터들을 DRAM으로 다시 플러싱하고, DRAM으로부터의 카운터들의 다른 16 분의 1을 SRAM에 로딩한다. 어느 정도의 시간 주기에 걸쳐 그렇게 함으로써 각각의 카운터는 실제 액세스 카운트 값의 대략 16 분의 1을 가질 것이라고 가정된다. 무버(114)는 DRAM 및 SRAM 양측 모두에서 카운터들을 체크하도록 구성될 수 있다.
[0063] 대안적인 실시예의 다른 예는 카운터들을 페이지 테이블 데이터 구조체에 번들링하는 것이다. 따라서, 별개의 카운터들을 유지하는 대신에, 프로파일러(112)는 카운터들을 페이지 테이블 데이터 구조체에 번들링할 수 있다. 그렇게 함에 있어서, 카운터들의 관리는 페이지 테이블 및 변환 색인 버퍼(translation lookaside buffer)(TLB)와 동일한 흐름을 따를 수 있다. 대안적인 실시예의 또 다른 예에서, 공통 스케일 S를 점진적으로 감소시킴으로써 카운터 감쇠가 구현되어, 결과적으로 분수의 S가 생성될 수 있다. 미리 결정된 감쇠 간격에서 각각의 카운터 값을 감쇠시키는 대신에, 공통 스케일 S를 점진적으로 감소시킴으로써 나타내어진 카운터 값들은 점진적으로 감쇠될 수 있다.
[0064] 이러한 그리고 다른 능력들뿐만 아니라, 도 1 및 도 4의 엔티티들이 작용하고 상호작용하는 방법들이 하기에 더 상세히 제시된다. 이러한 엔티티들은 추가로 분할, 결합 등이 될 수 있다. 도 1의 환경(100) 및 도 4의 상세한 예시들은 설명된 기법들을 채용하는 것이 가능한 많은 가능한 환경들 중 일부를 예시한다.
예시적인 방법들
[0065] 도 5 내지 도 7은 프로파일링 캐시 대체를 가능하게 하거나 또는 사용하는 방법들을 도시한다. 이러한 방법들은 수행되는 동작들을 특정하는 블록들의 세트들로서 도시되지만, 개개의 블록들에 의해 동작들을 수행하기 위해 도시된 순서 또는 조합들로 반드시 제한되지는 않는다. 다음의 논의의 부분들에서, 도 1의 환경(100) 및 도 4에서 상세화된 엔티티들이 참조될 수 있는데, 그에 대한 참조는 단지 예로서만 이루어진다. 기법들은 하나의 디바이스 상에서 동작하는 하나의 엔티티 또는 다수의 엔티티들에 의한 성능으로 제한되지 않는다.
[0066] 도 5는 캐시 메모리와 메인 메모리 사이의 데이터 이송을 관리하기 위해 사용되는 프로파일링 알고리즘에 따라 캐시 메모리 내의 페이지들을 대체시키는 방식들을 설명하는 방법(500)을 도시한다.
[0067] 502에서, 메인 및 캐시 메모리들에 유지되는 데이터의 페이지들과 연관되어 유지되는 카운터들이 업데이트된다. 카운터들은 메인 및 캐시 메모리들에 유지되는 페이지들에 액세스하라는 요청들의 개수를 표시하도록 구성된다. 예로서, 프로파일러(112)는 카운터들을 메모리 액세스 정보(414)에 유지한다. 이러한 카운터들은 캐싱된 페이지들(410) 및 MM-로딩된 페이지들(412)에 액세스하라는 요청들의 개수를 표시한다. 예를 들어, 캐싱된 페이지들(410) 중 하나 또는 MM-로딩된 페이지들(412) 중 하나에 액세스하라는 요청들에 응답하여, 프로파일러(112)는 메모리 액세스 정보(414) 내의 대응하는 카운터들을 증분시킨다.
[0068] 따라서, 클라이언트 애플리케이션들과 같은 메모리 사용자들의 메모리 액세스들과 간섭하지 않도록, 프로파일링 메모리 대체는 캐시 메모리(106) 및 메인 메모리(108)에 유지되는 페이지들에 대해 메모리에 의해 행해지는 서비싱 요청들의 백그라운드에서 수행된다. 그렇게 함에 있어서, 방법 단계들 504 및 506의 성능은 미리 결정된 시간 간격에서, 예컨대 매 마이크로초(㎲)마다 수행되는 것으로 제한될 수 있다. 504에서, 메인 메모리의 고도로 요청된 페이지에 대한 페이지 액세스 요청들의 개수가 캐시 메모리의 적게 요청된 페이지에 대한 페이지 액세스 요청들의 개수보다 더 큰지 여부에 관한 결정이 카운터들에 따라 미리 결정된 시간 간격에서 행해진다. 메인 메모리의 고도로 요청된 페이지는 메인 메모리에 로딩된 페이지들에 비해 고도로 요청되고, 캐시 메모리의 적게 요청된 페이지는 캐시 메모리에 로딩된 페이지들에 비해 거의 요청되지 않는다. 그러나, 고도로 요청된 메인 메모리 페이지에 대한 요청들의 개수는 적게 요청된 캐시 메모리 페이지에 대한 요청들의 개수와 실질적으로 유사할 수 있다.
[0069] 예로서, 무버(114)는 메모리 액세스 정보(414)에서 프로파일러(112)에 의해 유지되는 카운터들을 체크한다. 예를 들어, 매 마이크로초마다, 무버(114)는 카운터들에 따라 (예를 들어, 캐시 메모리(106) 내의 다른 페이지들보다 더 적게 요청되는) 적게 요청된 캐싱된 페이지(410) 및 (예를 들어, 메인 메모리(108) 내의 다른 페이지들보다 더 많이 요청되는) 고도로 요청된 MM-로딩된 페이지(412)를 결정한다. 무버(114)는 개개의 카운터 값들을 비교하여 메인 메모리(108)의 고도로 요청된 페이지가 캐시 메모리(106)의 적게 요청된 페이지보다 더 많이 요청되는지 여부를 결정한다.
[0070] 고도로 요청된 메인 메모리 페이지에 대한 페이지 액세스 요청들의 개수가 적게 요청된 캐시 메모리 페이지에 대한 페이지 액세스 요청들의 개수보다 더 크다는 결정에 응답하여, 506에서, 고도로 요청된 메인 메모리 페이지 및 적게 요청된 캐시 메모리 페이지가 스와핑된다. 예로서, 무버(114)는 단계 504에서 메인 메모리(108)로부터의 고도로 요청된 페이지가 캐시 메모리(106)의 적게 요청된 페이지보다 더 많이 요청된다고 결정한다. 이 결정에 응답하여, 무버(114)는 메인 메모리(108)로부터의 고도로 요청된 페이지를 캐시 메모리(106)의 적게 요청된 페이지와 스와핑한다. 다시 말해, 무버(114)는 캐시 메모리(106)로부터 적게 요청된 캐시 메모리 페이지를 축출하고 그 페이지를 메인 메모리(108)에 로딩한다. 또한, 무버(114)는 고도로 요청된 메인 메모리 페이지를 캐싱한다.
[0071] 도 6은 감소된 공간 카운터들을 사용하여 프로파일링 캐시 대체를 위해 페이지 액세스들이 카운트되는 방식들을 설명하는 방법(600)을 도시한다.
[0072] 602에서, 메모리 내의 페이지들의 세트들에 대해 공통 스케일들이 유지된다. 예로서, 프로파일링된 메모리(104)에 유지되는 데이터는 페이지들의 세트들로 분할되어, 각각의 세트가 캐시 메모리(106)로부터의 복수의 페이지들 및 메인 메모리(108)로부터의 복수의 페이지들을 포함한다. 특히, 페이지들은 더 상세히 상술된 바와 같이 세트들로 분할될 수 있다. 데이터의 각각의 세트에 대해, 프로파일러(112)는 세트의 페이지들에 대한 액세스들의 기본 카운트 또는 기본 개수를 표시하는 공통 스케일 S를 유지한다. 하나 또는 그 초과의 구현들에서, 프로파일러(112)는 페이지들의 각각의 세트에 대해 4-비트 공통 스케일들을 유지한다. 본 명세서에서 설명되는 기법들의 사상 또는 범주로부터 벗어남이 없이 (비트수의 관점에서) 상이한 사이즈의 공통 스케일들이 사용될 수 있다는 것을 이해해야 한다.
[0073] 604에서, 카운터는 세트 내의 페이지들 각각에 대해 유지되고, 그것은 세트 내의 다른 페이지들에 대한 페이지 액세스들의 개수를 표시한다. 예로서, 프로파일러(112)는, 더 상세히 상술된 바와 같이, 세트 내의 각각의 페이지에 대한 N-비트 카운터를 유지한다. 페이지에 대한 N-비트 카운터는, 그 페이지의 세트의 공통 스케일 S와 함께, 페이지에 대한 액세스들의 개수를 표시한다. 페이지에 액세스하라는 요청에 응답하여, 606에서, 대응하는 카운터 및 공통 스케일이 액세스에 따라 업데이트된다. 예로서, 페이지에 액세스하라는 요청에 응답하여, 프로파일러(112)는 요청된 페이지와 연관된 N-비트 카운터를 업데이트하고 요청된 페이지의 세트와 연관된 공통 스케일 S를 또한 업데이트한다. 프로파일러(112)는 더 상세히 상술된 바와 같이 N-비트 카운터들 및 공통 스케일들 S를 업데이트한다. 본 명세서에서 설명되는 기법들은, 예를 들어, 메모리 액세스 정보(414)가 SRAM에 저장될 때, 하나 또는 그 초과의 저장-민감성 구현들에서 방법(600)을 활용할 수 있다는 것을 이해해야 한다.
[0074] 도 7은 메모리의 페이지 당 하나보다 더 적은 카운터를 사용하여 프로파일링 캐시 대체를 위해 페이지 액세스들이 카운트되는 방식들을 설명하는 방법(700)을 도시한다. 방법(600)과 마찬가지로, 방법(700)은 또한 하나 또는 그 초과의 저장-민감성 구현들을 위해 활용될 수 있다.
[0075] 702에서, n개의 카운터들은 메모리 내의 상위 n개의 액세스된 페이지들과 연관된다. 예로서, 프로파일러(112)는 n개의 카운터들을 프로파일링된 메모리(104) 내의 상위 n개의 액세스된 페이지들과 연관시킨다. 특히, 카운터들은 캐싱되는 프로파일링된 메모리(104)의 페이지들과 연관되어, 나머지 카운터들을 메인 메모리(108) 내의 다음으로 가장 많이 액세스된 페이지들과 연관시키게 한다.
[0076] 704에서, 메모리에 유지된 페이지에 액세스하라는 요청이 수신된다. 예로서, 캐싱된 페이지들(410) 중 하나 또는 MM-로딩된 페이지들(412) 중 하나에 액세스하라는 것과 같은, 프로파일링된 메모리(104)에 유지되는 데이터의 페이지에 액세스하라는 요청이 수신된다. 706에서, 요청된 페이지가 카운터들 중 하나와 연관되는지 여부, 예를 들어, 카운터들 중 하나가 요청된 페이지를 식별하는 속성을 갖는지 여부에 관한 결정이 행해진다. 예로서, 프로파일러(112)는 요청된 페이지가 메모리 액세스 정보(414)의 부분으로서 유지되는 카운터들 중 하나와 연관되는지 여부를 결정한다.
[0077] 요청된 페이지가 카운터들 중 하나와 연관된다는 결정이 행해지는 경우(예를 들어, 706에서 "예"), 그러면 708에서, 요청된 페이지와 연관된 카운터가 업데이트된다. 예로서, 프로파일러(112)는 요청된 페이지와 연관된 카운터에 대한 카운터 값 CC로부터 C+1로 증분시킨다. 그러나, 요청된 페이지가 카운터들 중 하나와 연관되지 않는다는 결정이 행해지는 경우(예를 들어, 706에서 "아니오"), 그러면 710에서, 카운터와 연관된 가장 적게 액세스된 페이지가 결정된다. 예로서, 프로파일러(112)는 요청된 페이지와 동일한 세트의 페이지들에서 카운터와 연관된 가장 적게 액세스된 페이지를 결정한다. 대안적으로, 프로파일러(112)는 카운터들과 연관된 페이지들 중 가장 적게 액세스된 페이지를 단순히 결정한다. 프로파일러(112)는 카운터들의 카운터 값들을 체크함으로써 가장 적게 액세스된 페이지를 결정할 수 있다.
[0078] 712에서, 가장 적게 액세스된 페이지의 카운터는 요청된 페이지와 연관된다. 예로서, 프로파일러(112)는 가장 적게 액세스된 페이지를 카운터와 연관해제한 후에, 예를 들어, 요청된 페이지를 식별하기 위한 카운터의 태그를 변경함으로써, 카운터를 요청된 페이지와 연관시킨다. 714에서, 카운터의 카운터 값은 액세스 요청을 반영하도록 조정된다. 예로서, 프로파일러(112)는 카운터 값을 1로 설정함으로써 (카운터와 이전에 연관된 페이지의 액세스들의 개수를 표시하는) 카운터 값 C를 조정한다. 카운터 값을 1로 설정하는 것은 카운터 값 CC+1로 설정하는 것을 수반하는 일부의 종래의 기법들과 대조된다. 그렇게 함에 있어서, 방법(700)은 스래싱을 감소시킬 수 있다.
[0079] 앞선 논의는 프로파일링 캐시 대체와 관련된 방법들을 설명한다. 이러한 방법들의 양태들은 하드웨어(예를 들어, 고정 로직 회로부), 펌웨어, 소프트웨어, 수동 프로세싱, 또는 이들의 임의의 조합으로 구현될 수 있다. 이러한 기법들은 도 1, 도 4, 및 도 8에 도시된 엔티티들 중 하나 또는 그 초과의 엔티티(컴퓨팅 시스템(800)이 도 8에서 후술된다) 상에서 구체화될 수 있는데, 이는 추가로 분할, 결합 등이 될 수 있다. 따라서, 이러한 도면들은 설명된 기법들을 채용하는 것이 가능한 많은 가능한 시스템들 또는 장치들 중 일부를 예시한다. 이러한 도면들의 엔티티들은 일반적으로 소프트웨어, 펌웨어, 하드웨어, 전체 디바이스들 또는 네트워크들, 또는 이들의 조합을 나타낸다.
예시적인 컴퓨팅 시스템
[0080] 도 8은 프로파일링 캐시 대체를 구현하기 위해 이전의 도 1 내지 도 7을 참조하여 설명된 바와 같은 임의의 타입의 클라이언트, 서버, 및/또는 컴퓨팅 디바이스로서 구현될 수 있는 예시적인 컴퓨팅 시스템(800)의 다양한 컴포넌트들을 예시한다. 실시예들에서, 컴퓨팅 시스템(800)은 유선 및/또는 무선 착용가능 디바이스, 시스템-온-칩(System-on-Chip)(SoC) 중 하나 또는 조합으로서, 및/또는 다른 타입의 디바이스 또는 그 부분으로서 구현될 수 있다. 컴퓨팅 시스템(800)은 또한, 디바이스가 사용자들, 소프트웨어, 펌웨어를 포함하는 논리 디바이스들, 및/또는 디바이스들의 조합을 설명하도록 디바이스를 동작시키는 엔티티 및/또는 사용자(예를 들어, 사람)와 연관될 수 있다.
[0081] 컴퓨팅 시스템(800)은 디바이스 데이터(804)(예를 들어, 수신된 데이터, 수신되고 있는 데이터, 방송을 위해 스케줄링된 데이터, 데이터의 데이터 패킷들 등)의 유선 및/또는 무선 통신을 가능하게 하는 통신 디바이스들(802)을 포함한다. 디바이스 데이터(804) 또는 다른 디바이스 콘텐츠는 디바이스의 구성 설정들, 디바이스 상에 저장된 미디어 콘텐츠, 및/또는 디바이스의 사용자와 연관된 정보를 포함할 수 있다. 컴퓨팅 시스템(800) 상에 저장된 미디어 콘텐츠는, 프로파일링 캐시 대체 동작들의 복잡하거나 또는 상세한 결과들을 포함하여, 임의의 타입의 오디오, 비디오, 및/또는 이미지 데이터를 포함할 수 있다. 컴퓨팅 시스템(800)은, 인간 발언들, 사용자 선택가능 입력들(명시적 또는 암시적), 메시지들, 음악, 텔레비전 미디어 콘텐츠, 레코딩된 비디오 콘텐츠, 및 임의의 콘텐츠 및/또는 데이터 소스로부터 수신되는 임의의 다른 타입의 오디오, 비디오, 및/또는 이미지 데이터와 같은, 임의의 타입의 데이터, 미디어 콘텐츠, 및/또는 입력들이 수신될 수 있게 하는 하나 또는 그 초과의 데이터 입력들(806)을 포함한다.
[0082] 또한, 컴퓨팅 시스템(800)은 직렬 및/또는 병렬 인터페이스, 무선 인터페이스, 임의의 타입의 네트워크 인터페이스, 모뎀 중 임의의 하나 또는 그 초과로서, 그리고 임의의 다른 타입의 통신 인터페이스로서 구현될 수 있는 통신 인터페이스들(808)을 포함한다. 통신 인터페이스들(808)은 다른 전자, 컴퓨팅, 및 통신 디바이스들이 데이터를 컴퓨팅 시스템(800)과 통신하게 하는 통신 네트워크와 컴퓨팅 시스템(800) 사이의 연결 및/또는 통신 링크들을 제공한다.
[0083] 컴퓨팅 시스템(800)은 컴퓨팅 시스템(800)의 동작을 제어하기 위해 그리고 프로파일링 캐시 대체를 위한, 또는 프로파일링 캐시 대체가 구체화될 수 있는 기법들을 가능하게 하기 위해 다양한 컴퓨터 실행가능 명령어들을 프로세싱하는 하나 또는 그 초과의 프로세서들(810)(예를 들어, 마이크로프로세서들, 제어기들 등 중의 임의의 것)을 포함한다. 대안적으로 또는 추가적으로, 컴퓨팅 시스템(800)은 812에서 일반적으로 식별되는 프로세싱 및 제어 회로들과 관련하여 구현되는 하드웨어, 펌웨어, 또는 고정 로직 회로부 중 임의의 하나 또는 조합으로 구현될 수 있다. 도시되지 않았지만, 컴퓨팅 시스템(800)은 디바이스 내의 다양한 컴포넌트들을 커플링하는 시스템 버스 또는 데이터 전송 시스템을 포함할 수 있다. 시스템 버스는 메모리 버스 또는 메모리 제어기, 주변 버스, 범용 직렬 버스, 및/또는 다양한 버스 아키텍처들 중 임의의 것을 활용하는 프로세서 또는 로컬 버스와 같은 상이한 버스 구조체들 중 임의의 하나 또는 조합을 포함할 수 있다.
[0084] 또한, 컴퓨팅 시스템(800)은 영구적 및/또는 비일시적 데이터 저장을 가능하게 하는(즉, 단순한 신호 송신과는 대조적으로) 프로파일링된 메모리(104) 이외의 하나 또는 그 초과의 메모리 디바이스들과 같은 컴퓨터 판독가능 매체(814)를 포함하는데, 그 예들로는 랜덤 액세스 메모리(RAM), 비휘발성 메모리(예를 들어, 판독 전용 메모리(ROM), 플래시 메모리, EPROM, EEPROM 등 중의 임의의 하나 또는 그 초과), 및 디스크 저장 디바이스를 포함한다. 디스크 저장 디바이스는 하드 디스크 드라이브, 레코딩가능 및/또는 재기입가능 콤팩트 디스크(CD), 임의의 타입의 디지털 다기능 디스크(DVD) 등과 같은 임의의 타입의 자기 또는 광학 저장 디바이스로서 구현될 수 있다. 컴퓨팅 시스템(800)은 또한 대용량 저장 매체 디바이스(816)를 포함할 수 있다. 이 예에서, 컴퓨터 판독가능 매체(814)는 또한 프로파일링된 메모리(104)를 포함한다.
[0085] 컴퓨터 판독가능 매체(814)는 디바이스 데이터(804)뿐만 아니라, 다양한 디바이스 애플리케이션들(818) 및 컴퓨팅 시스템(800)의 동작 양태들과 관련된 임의의 다른 타입들의 정보 및/또는 데이터를 저장하기 위한 데이터 저장 메커니즘들을 제공한다. 예를 들어, 운영 체제(820)는 컴퓨터 판독가능 매체(814)를 갖는 컴퓨터 애플리케이션으로서 유지되고 프로세서들(810) 상에서 실행될 수 있다. 디바이스 애플리케이션들(818)은 제어 애플리케이션, 소프트웨어 애플리케이션, 신호 프로세싱 및 제어 모듈, 특정 디바이스에 고유한 코드, 특정 디바이스에 대한 하드웨어 추상화 계층 등의 임의의 형태와 같은 디바이스 관리자를 포함할 수 있다.
[0086] 디바이스 애플리케이션들(818)은 또한 기법들을 구현하기 위한 임의의 시스템 컴포넌트들, 엔진들, 또는 관리자들을 포함한다.
결론
[0087] 프로파일링 캐시 대체를 사용하는 기법들, 및 프로파일링 캐시 대체를 가능하게 하는 장치들의 실시예들이 피처들 및/또는 방법들에 특정된 언어로 설명되었지만, 첨부된 청구범위의 요지는 설명된 특정 피처들 또는 방법들로 반드시 제한되지는 않는다는 것을 이해해야 한다. 오히려, 특정 피처들 및 방법들은 이러한 기법들의 예시적인 구현들로서 개시된다.

Claims (27)

  1. 메인 메모리와 캐시 메모리 사이의 데이터 이송을 관리하기 위한 방법으로서,
    상기 메인 메모리 및 상기 캐시 메모리에 유지되는 상기 데이터의 페이지들과 연관되어 카운터들을 유지하는 단계 ― 상기 카운터들은 상기 페이지들에 액세스하라는 요청들의 개수들을 표시하고, 상기 메인 메모리 및 상기 캐시 메모리에 유지되는 상기 데이터의 페이지들은 페이지들의 세트들로 분할되고, 페이지들의 각각의 세트는 상기 캐시 메모리로부터의 복수의 페이지들 및 상기 메인 메모리로부터의 복수의 페이지들을 포함함 ―;
    상기 유지하는 단계에 기초하여 상기 카운터들에 의해 나타내어질 수 있는 값들의 범위들을 동적으로 확장하는 단계; 및
    미리 결정된 시간 간격에서:
    주어진 세트에서의 상기 메인 메모리의 고도로 요청된(highly-requested) 페이지에 대한 페이지 액세스 요청들의 개수가 상기 카운터들에 따른 상기 주어진 세트에서의 상기 캐시 메모리의 적게 요청된 페이지에 대한 페이지 액세스 요청들의 개수보다 더 큰지 여부를 결정하는 단계; 및
    상기 주어진 세트에서의 상기 메인 메모리의 고도로 요청된 페이지에 대한 페이지 액세스 요청들의 개수가 상기 주어진 세트에서의 상기 캐시 메모리의 적게 요청된 페이지에 대한 페이지 액세스 요청들의 개수보다 더 크다는 결정에 응답하여, 상기 메인 메모리의 고도로 요청된 페이지를 상기 주어진 세트 내의 상기 캐시 메모리의 적게 요청된 페이지와 스와핑하는 단계
    를 포함하는, 메인 메모리와 캐시 메모리 사이의 데이터 이송을 관리하기 위한 방법.
  2. 제1항에 있어서,
    상기 캐시 메모리의 적게 요청된 페이지는 상기 캐시 메모리의 가장 적게 요청된 페이지에 대응하고, 상기 메인 메모리의 고도로 요청된 페이지는 상기 메인 메모리의 가장 많이 요청된 페이지에 대응하는, 메인 메모리와 캐시 메모리 사이의 데이터 이송을 관리하기 위한 방법.
  3. 제1항 또는 제2항에 있어서,
    상기 유지하는 단계는, 주어진 페이지에 액세스하라는 요청에 응답하여 상기 주어진 페이지와 연관된 카운터를 증분시키는 단계를 포함하는, 메인 메모리와 캐시 메모리 사이의 데이터 이송을 관리하기 위한 방법.
  4. 제1항 또는 제2항에 있어서,
    상기 결정하는 단계 및 상기 스와핑하는 단계는, 상기 메인 메모리 및 상기 캐시 메모리에 유지되는 상기 페이지들에 액세스하기 위해 메모리 사용자들에 의해 행해지는 서비싱 요청(servicing request)들의 백그라운드에서 수행되는, 메인 메모리와 캐시 메모리 사이의 데이터 이송을 관리하기 위한 방법.
  5. 제1항 또는 제2항에 있어서,
    상기 메인 메모리에 유지되는 상기 페이지들 중 적어도 하나에 액세스하라는 요청을 수신하는 단계; 및
    적어도 하나의 요청된 페이지를 상기 캐시 메모리에 먼저 충전(fill)하는 일 없이 상기 메인 메모리로부터의 상기 적어도 하나의 요청된 페이지에 대한 요청을 서비스하는 단계를 더 포함하는, 메인 메모리와 캐시 메모리 사이의 데이터 이송을 관리하기 위한 방법.
  6. 삭제
  7. 제1항 또는 제2항에 있어서,
    상기 메인 메모리의 페이지들은 상이한 세트들 내의 상기 캐시 메모리의 페이지들과 스와핑되지 않는, 메인 메모리와 캐시 메모리 사이의 데이터 이송을 관리하기 위한 방법.
  8. 삭제
  9. 삭제
  10. 제1항 또는 제2항에 있어서,
    상기 미리 결정된 시간 간격은 1 마이크로초(1 ㎲)인, 메인 메모리와 캐시 메모리 사이의 데이터 이송을 관리하기 위한 방법.
  11. 시스템으로서,
    데이터의 페이지들을 유지하도록 구성된 메인 메모리 및 캐시 메모리 ― 상기 캐시 메모리는 상기 메인 메모리보다 더 적은 페이지들을 유지하도록 구성되고, 상기 캐시 메모리는 상기 메인 메모리보다 더 낮은 레이턴시(latency), 더 높은 대역폭, 또는 더 낮은 전력 사용량 중 적어도 하나를 가지고, 상기 메인 메모리 및 상기 캐시 메모리에 유지되는 상기 데이터의 페이지들은 페이지들의 세트들로 분할되고, 페이지들의 각각의 세트는 상기 캐시 메모리로부터의 복수의 페이지들 및 상기 메인 메모리로부터의 복수의 페이지들을 포함함 ―;
    프로파일러(profiler) ― 상기 프로파일러는,
    상기 메인 메모리 및 상기 캐시 메모리에 유지되는 상기 페이지들과 연관되어 카운터들을 유지하고, 상기 카운터들은 상기 페이지들에 액세스하라는 요청들의 개수들을 표시하도록 구성되며; 그리고
    상기 유지하는 것에 기초하여 상기 카운터들에 의해 나타내어질 수 있는 값들의 범위들을 동적으로 확장하도록 구성됨 ―; 및
    무버(mover)를 포함하고, 상기 무버는,
    미리 결정된 시간 간격에서 주어진 세트에서의 상기 메인 메모리 내의 고도로 요청된 페이지에 대한 페이지 액세스 요청들의 개수가 상기 카운터들에 따른 상기 주어진 세트에서의 상기 캐시 메모리 내의 적게 요청된 페이지에 대한 페이지 액세스 요청들의 개수보다 더 큰지 여부에 관한 결정을 행하고 ― 상기 결정을 행하는 것은 페이지들의 모든 세트들보다 더 적은 상기 미리 결정된 시간 간격에서 체크하도록 구성되는 것을 포함함 ―, 그리고
    상기 주어진 세트에서의 상기 메인 메모리 내의 고도로 요청된 페이지에 대한 페이지 액세스 요청들의 개수가 상기 주어진 세트에서의 상기 캐시 메모리 내의 적게 요청된 페이지에 대한 페이지 액세스 요청들의 개수보다 더 크다는 결정에 응답하여, 상기 메인 메모리 내의 고도로 요청된 페이지를 상기 주어진 세트 내의 상기 캐시 메모리 내의 적게 요청된 페이지와 스와핑하도록 구성되는, 시스템.
  12. 제11항에 있어서,
    상기 프로파일러는 추가로, 상기 메인 메모리에 상기 페이지들 각각에 대한 개개의 카운터를 유지하도록 구성되는, 시스템.
  13. 제11항에 있어서,
    상기 프로파일러는 추가로, 상기 메인 메모리에 유지되는 데이터의 페이지 당 하나의 카운터보다 더 적은 카운터들을 유지하도록 구성되는, 시스템.
  14. 제11항 내지 제13항 중 어느 한 항에 있어서,
    상기 미리 결정된 시간 간격은 1 마이크로초(1 ㎲)인, 시스템.
  15. 삭제
  16. 제11항 내지 제13항 중 어느 한 항에 있어서,
    메모리 액세스 요청과 연관된 입력 어드레스를, 상기 메모리 액세스 요청을 서비스하는데 효과적인 상기 캐시 메모리 또는 상기 메인 메모리 내의 대응하는 페이지에 맵핑시키도록 구성된 맵퍼(mapper)를 더 포함하는, 시스템.
  17. 삭제
  18. 하나 또는 그 초과의 컴퓨터 판독가능 저장 매체로서,
    데이터의 페이지들을 유지하도록 구성된 메인 메모리 및 캐시 메모리 ― 상기 캐시 메모리는 상기 메인 메모리보다 더 적은 페이지들을 유지하도록 구성되고, 그리고 상기 캐시 메모리는 상기 메인 메모리보다 더 낮은 레이턴시, 더 높은 대역폭, 또는 더 낮은 전력 사용량 중 적어도 하나를 가짐 ―; 및
    하나 이상의 프로세서들에 의한 실행에 응답하여, 동작들을 수행하는 것에 의해 프로파일링 캐시 대체 기법(profiling cache replacement technique)에 따라 상기 캐시 메모리에 페이지들을 충전하는 명령들
    을 포함하며, 상기 동작들은:
    상기 페이지들에 액세스하라는 요청들의 개수들을 표시하기 위해 상기 메인 메모리 및 상기 캐시 메모리의 상기 페이지들과 연관되어 카운터들을 유지하는 동작;
    상기 유지하는 동작에 기초하여 상기 카운터들에 의해 나타내어질 수 있는 값들의 범위들을 동적으로 확장하는 동작;
    미리 결정된 시간 간격에서 상기 메인 메모리의 고도로 요청된 페이지에 대한 페이지 액세스 요청들의 개수가 상기 카운터들에 따른 상기 캐시 메모리의 적게 요청된 페이지에 대한 페이지 액세스 요청들의 개수보다 더 큰지 여부에 관한 결정을 행하는 동작; 및
    상기 메인 메모리의 고도로 요청된 페이지에 대한 페이지 액세스 요청들의 개수가 상기 캐시 메모리의 적게 요청된 페이지에 대한 페이지 액세스 요청들의 개수보다 더 크다는 결정에 응답하여, 상기 메인 메모리의 고도로 요청된 페이지를 상기 캐시 메모리의 적게 요청된 페이지와 스와핑하는 동작을 포함하는, 컴퓨터 판독가능 저장 매체.
  19. 제18항에 있어서,
    상기 캐시 메모리는 적어도 128 메가바이트(MB)의 사이즈를 갖는, 컴퓨터 판독가능 저장 매체.
  20. 제18항 또는 제19항에 있어서,
    상기 메인 메모리는 적어도 4 기가바이트(GB)의 사이즈를 갖는, 컴퓨터 판독가능 저장 매체.
  21. 삭제
  22. 제18항에 있어서,
    상기 동적으로 확장하는 동작은 부동 소수점 표현 또는 공통 스케일(common scale) 중 적어도 하나를 사용하여 상기 카운터들을 구현하는 동작을 포함하는, 컴퓨터 판독가능 저장 매체.
  23. 제18항 또는 제19항에 있어서,
    상기 카운터들을 유지하는 동작은 데이터의 상기 페이지들의 페이지 당 하나의 카운터 미만인 카운터들의 양을 유지하는 동작을 포함하는, 컴퓨터 판독가능 저장 매체.
  24. 제23항에 있어서,
    상기 카운터들을 유지하는 동작은 상기 카운터들의 각각의 카운터와 연관되는 페이지를 식별하기 위한 태그를 사용하는 동작을 포함하는, 컴퓨터 판독가능 저장 매체.
  25. 제18항 또는 제19항에 있어서,
    상기 동작들은, 상기 스와핑하는 동작에 응답하여 상기 카운터들을 업데이트하는 동작을 더 포함하는, 컴퓨터 판독가능 저장 매체.
  26. 제1항 또는 제2항에 있어서,
    상기 동적으로 확장하는 단계는 부동 소수점 표현 또는 공통 스케일 중 적어도 하나를 사용하여 상기 카운터들을 구현하는 단계를 포함하는, 메인 메모리와 캐시 메모리 사이의 데이터 이송을 관리하기 위한 방법.
  27. 제11항 내지 제13항 중 어느 한 항에 있어서,
    상기 프로파일러는, 부동 소수점 표현 또는 공통 스케일 중 적어도 하나를 사용하여 상기 카운터들을 구현함으로써 상기 값들의 범위들을 동적으로 확장하도록 구성되는, 시스템.
KR1020187011277A 2016-02-10 2016-12-26 프로파일링 캐시 대체 KR102043886B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201662293688P 2016-02-10 2016-02-10
US62/293,688 2016-02-10
US15/097,177 2016-04-12
US15/097,177 US10387329B2 (en) 2016-02-10 2016-04-12 Profiling cache replacement
PCT/US2016/068625 WO2017139037A1 (en) 2016-02-10 2016-12-26 Profiling cache replacement

Publications (2)

Publication Number Publication Date
KR20180056736A KR20180056736A (ko) 2018-05-29
KR102043886B1 true KR102043886B1 (ko) 2019-12-02

Family

ID=57799876

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187011277A KR102043886B1 (ko) 2016-02-10 2016-12-26 프로파일링 캐시 대체

Country Status (9)

Country Link
US (1) US10387329B2 (ko)
EP (1) EP3414665B1 (ko)
JP (1) JP6613375B2 (ko)
KR (1) KR102043886B1 (ko)
CN (1) CN107066397B (ko)
DE (2) DE102016225545A1 (ko)
GB (1) GB2547306B (ko)
TW (1) TWI684099B (ko)
WO (1) WO2017139037A1 (ko)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10387329B2 (en) 2016-02-10 2019-08-20 Google Llc Profiling cache replacement
US9826932B2 (en) 2016-04-19 2017-11-28 Google Llc Automated abdominojugular reflux testing
CN107992434A (zh) * 2017-11-24 2018-05-04 郑州云海信息技术有限公司 用于分布式分层存储系统的下刷方法、装置及存储介质
CN108089998A (zh) * 2017-12-13 2018-05-29 郑州云海信息技术有限公司 一种Linux分页替换方法及系统
CN108829344A (zh) * 2018-05-24 2018-11-16 北京百度网讯科技有限公司 数据存储方法、装置及存储介质
US11475014B2 (en) * 2018-12-20 2022-10-18 AVAST Software s.r.o. Updating a toplist for a continuous data stream
KR20200091199A (ko) * 2019-01-22 2020-07-30 에스케이하이닉스 주식회사 저장 장치, 저장 장치를 포함하는 컴퓨팅 시스템 및 그 동작 방법
US11106609B2 (en) 2019-02-28 2021-08-31 Micron Technology, Inc. Priority scheduling in queues to access cache data in a memory sub-system
US10970222B2 (en) 2019-02-28 2021-04-06 Micron Technology, Inc. Eviction of a cache line based on a modification of a sector of the cache line
US10908821B2 (en) 2019-02-28 2021-02-02 Micron Technology, Inc. Use of outstanding command queues for separate read-only cache and write-read cache in a memory sub-system
US11288199B2 (en) 2019-02-28 2022-03-29 Micron Technology, Inc. Separate read-only cache and write-read cache in a memory sub-system
US11526290B2 (en) * 2019-06-29 2022-12-13 Intel Corporation System and method to track physical address accesses by a CPU or device
US11237981B1 (en) 2019-09-30 2022-02-01 Amazon Technologies, Inc. Memory scanner to accelerate page classification
US12093189B1 (en) * 2019-09-30 2024-09-17 Amazon Technologies, Inc. Memory-side page activity recorder
US11899589B2 (en) 2021-06-22 2024-02-13 Samsung Electronics Co., Ltd. Systems, methods, and devices for bias mode management in memory systems
CN113489572B (zh) * 2021-08-23 2022-12-20 杭州安恒信息技术股份有限公司 一种请求发送方法、装置、设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110320754A1 (en) * 2010-02-23 2011-12-29 Hitachi, Ltd Management system for storage system and method for managing storage system
US20120017039A1 (en) * 2010-07-16 2012-01-19 Plx Technology, Inc. Caching using virtual memory
US20150278091A1 (en) * 2014-03-28 2015-10-01 Intel Corporation Method and apparatus for implementing a heterogeneous memory subsystem

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3226525B2 (ja) 1988-10-07 2001-11-05 株式会社日立製作所 主記憶管理方法
US5247687A (en) 1990-08-31 1993-09-21 International Business Machines Corp. Method and apparatus for determining and using program paging characteristics to optimize system productive cpu time
US6134602A (en) 1997-09-24 2000-10-17 Microsoft Corporation Application programming interface enabling application programs to group code and data to control allocation of physical memory in a virtual memory system
US6457102B1 (en) * 1999-11-05 2002-09-24 Emc Corporation Cache using multiple LRU's
US6829679B2 (en) * 2001-11-09 2004-12-07 International Business Machines Corporation Different caching treatment of memory contents based on memory region
EP1505506A1 (en) 2003-08-05 2005-02-09 Sap Ag A method of data caching
US20050108478A1 (en) 2003-11-13 2005-05-19 International Business Machines Corporation Dynamic frequent instruction line cache
JP2008090554A (ja) 2006-09-29 2008-04-17 Toshiba Corp 情報処理装置、制御装置およびメモリ管理方法
US8271729B2 (en) * 2009-09-18 2012-09-18 International Business Machines Corporation Read and write aware cache storing cache lines in a read-often portion and a write-often portion
JP5183650B2 (ja) * 2010-02-17 2013-04-17 株式会社日立製作所 計算機システム,計算機システムにおけるバックアップ方法及びプログラム
US10169087B2 (en) * 2011-01-28 2019-01-01 International Business Machines Corporation Technique for preserving memory affinity in a non-uniform memory access data processing system
EP2677432A1 (en) 2011-02-16 2013-12-25 Fujitsu Limited Memory management program, memory management method, information processing device, and computer-readable recording medium upon which memory management program has been recorded
JP5376681B2 (ja) 2011-02-28 2013-12-25 エヌイーシーコンピュータテクノ株式会社 情報処理装置及びエラー訂正支援方法
US20130091331A1 (en) * 2011-10-11 2013-04-11 Iulian Moraru Methods, apparatus, and articles of manufacture to manage memory
US8832411B2 (en) * 2011-12-14 2014-09-09 Microsoft Corporation Working set swapping using a sequentially ordered swap file
US9098406B2 (en) * 2012-01-23 2015-08-04 Empire Technology Development Llc Managing addressable memory in heterogeneous multicore processors
US9116792B2 (en) * 2012-05-18 2015-08-25 Silicon Motion, Inc. Data storage device and method for flash block management
WO2014057521A1 (en) * 2012-10-12 2014-04-17 Hitachi, Ltd. Storage apparatus and data management method
US9940286B2 (en) 2013-03-14 2018-04-10 Nvidia Corporation PCIE traffic tracking hardware in a unified virtual memory system
KR102094163B1 (ko) 2013-08-28 2020-03-27 삼성전자 주식회사 하이브리드 캐시 기반의 메모리 시스템에서 캐시를 관리하는 장치 및 방법과, 그 메모리 시스템
GB2527788A (en) * 2014-07-02 2016-01-06 Ibm Scheduling applications in a clustered computer system
US9727466B2 (en) * 2014-08-26 2017-08-08 Arm Limited Interconnect and method of managing a snoop filter for an interconnect
US10387329B2 (en) 2016-02-10 2019-08-20 Google Llc Profiling cache replacement

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110320754A1 (en) * 2010-02-23 2011-12-29 Hitachi, Ltd Management system for storage system and method for managing storage system
US20120017039A1 (en) * 2010-07-16 2012-01-19 Plx Technology, Inc. Caching using virtual memory
US20150278091A1 (en) * 2014-03-28 2015-10-01 Intel Corporation Method and apparatus for implementing a heterogeneous memory subsystem

Also Published As

Publication number Publication date
TW201732603A (zh) 2017-09-16
KR20180056736A (ko) 2018-05-29
CN107066397A (zh) 2017-08-18
EP3414665A1 (en) 2018-12-19
US20170228322A1 (en) 2017-08-10
JP2018537770A (ja) 2018-12-20
GB201620880D0 (en) 2017-01-25
DE102016225545A1 (de) 2017-08-10
EP3414665B1 (en) 2021-11-10
WO2017139037A1 (en) 2017-08-17
US10387329B2 (en) 2019-08-20
GB2547306A (en) 2017-08-16
CN107066397B (zh) 2020-12-04
JP6613375B2 (ja) 2019-11-27
DE202016107157U1 (de) 2017-06-06
GB2547306B (en) 2019-10-09
TWI684099B (zh) 2020-02-01

Similar Documents

Publication Publication Date Title
KR102043886B1 (ko) 프로파일링 캐시 대체
CN105740164B (zh) 支持缓存一致性的多核处理器、读写方法、装置及设备
KR102665339B1 (ko) 변환 색인 버퍼 축출 기반 캐시 교체
EP3229142B1 (en) Read cache management method and device based on solid state drive
US8176258B2 (en) System and method for cache management
US10007614B2 (en) Method and apparatus for determining metric for selective caching
US9104327B2 (en) Fast translation indicator to reduce secondary address table checks in a memory device
EP3388935B1 (en) Cache management method, cache controller and computer system
CN111344684A (zh) 多层缓存安置机制
US20080168236A1 (en) Performance of a cache by detecting cache lines that have been reused
CN111382089B (zh) 用于专用最末级高速缓存器的旁路预测器
JP2014154138A (ja) 改善されたi/o性能のためのデータ・キャッシングのレートを制御する方法
CN109074320B (zh) 一种缓存替换方法,装置和系统
US20160103765A1 (en) Apparatus, systems, and methods for providing a memory efficient cache
US20110320720A1 (en) Cache Line Replacement In A Symmetric Multiprocessing Computer
US11507519B2 (en) Data compression and encryption based on translation lookaside buffer evictions
US20180113815A1 (en) Cache entry replacement based on penalty of memory access
EP3115904A1 (en) Method for managing a distributed cache
US10733114B2 (en) Data cache performance
CN109002400B (zh) 一种内容感知型计算机缓存管理系统及方法
US20190095330A1 (en) Preemptive cache writeback with transaction support
CN115080459A (zh) 缓存管理方法及装置、计算机可读存储介质
KR101976320B1 (ko) 라스트 레벨 캐시 메모리 및 이의 데이터 관리 방법
KR101704936B1 (ko) 블록의 우선성에 기반한 ssd의 블록 교체방법 및 이를 적용하는 하이브리드 저장 시스템
CN116069719A (zh) 处理器、内存控制器、片上系统芯片和数据预取方法

Legal Events

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