KR20150036176A - 비휘발성 메모리에 코드를 캐싱하는 방법들, 시스템들 및 장치 - Google Patents

비휘발성 메모리에 코드를 캐싱하는 방법들, 시스템들 및 장치 Download PDF

Info

Publication number
KR20150036176A
KR20150036176A KR1020157001860A KR20157001860A KR20150036176A KR 20150036176 A KR20150036176 A KR 20150036176A KR 1020157001860 A KR1020157001860 A KR 1020157001860A KR 20157001860 A KR20157001860 A KR 20157001860A KR 20150036176 A KR20150036176 A KR 20150036176A
Authority
KR
South Korea
Prior art keywords
code
cache
ram
exemplary
machine
Prior art date
Application number
KR1020157001860A
Other languages
English (en)
Other versions
KR101701068B1 (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 KR20150036176A publication Critical patent/KR20150036176A/ko
Application granted granted Critical
Publication of KR101701068B1 publication Critical patent/KR101701068B1/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/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0888Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using selective caching, e.g. bypass
    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • CCHEMISTRY; METALLURGY
    • C09DYES; PAINTS; POLISHES; NATURAL RESINS; ADHESIVES; COMPOSITIONS NOT OTHERWISE PROVIDED FOR; APPLICATIONS OF MATERIALS NOT OTHERWISE PROVIDED FOR
    • C09KMATERIALS FOR MISCELLANEOUS APPLICATIONS, NOT PROVIDED FOR ELSEWHERE
    • C09K8/00Compositions for drilling of boreholes or wells; Compositions for treating boreholes or wells, e.g. for completion or for remedial operations
    • C09K8/50Compositions for plastering borehole walls, i.e. compositions for temporary consolidation of borehole walls
    • C09K8/504Compositions based on water or polar solvents
    • C09K8/506Compositions based on water or polar solvents containing organic compounds
    • C09K8/508Compositions based on water or polar solvents containing organic compounds macromolecular compounds
    • CCHEMISTRY; METALLURGY
    • C09DYES; PAINTS; POLISHES; NATURAL RESINS; ADHESIVES; COMPOSITIONS NOT OTHERWISE PROVIDED FOR; APPLICATIONS OF MATERIALS NOT OTHERWISE PROVIDED FOR
    • C09KMATERIALS FOR MISCELLANEOUS APPLICATIONS, NOT PROVIDED FOR ELSEWHERE
    • C09K8/00Compositions for drilling of boreholes or wells; Compositions for treating boreholes or wells, e.g. for completion or for remedial operations
    • C09K8/50Compositions for plastering borehole walls, i.e. compositions for temporary consolidation of borehole walls
    • EFIXED CONSTRUCTIONS
    • E21EARTH OR ROCK DRILLING; MINING
    • E21BEARTH OR ROCK DRILLING; OBTAINING OIL, GAS, WATER, SOLUBLE OR MELTABLE MATERIALS OR A SLURRY OF MINERALS FROM WELLS
    • E21B33/00Sealing or packing boreholes or wells
    • E21B33/10Sealing or packing boreholes or wells in the borehole
    • E21B33/12Packers; Plugs
    • E21B33/127Packers; Plugs with inflatable sleeve
    • EFIXED CONSTRUCTIONS
    • E21EARTH OR ROCK DRILLING; MINING
    • E21BEARTH OR ROCK DRILLING; OBTAINING OIL, GAS, WATER, SOLUBLE OR MELTABLE MATERIALS OR A SLURRY OF MINERALS FROM WELLS
    • E21B33/00Sealing or packing boreholes or wells
    • E21B33/10Sealing or packing boreholes or wells in the borehole
    • E21B33/12Packers; Plugs
    • E21B33/128Packers; Plugs with a member expanded radially by axial pressure
    • EFIXED CONSTRUCTIONS
    • E21EARTH OR ROCK DRILLING; MINING
    • E21BEARTH OR ROCK DRILLING; OBTAINING OIL, GAS, WATER, SOLUBLE OR MELTABLE MATERIALS OR A SLURRY OF MINERALS FROM WELLS
    • E21B33/00Sealing or packing boreholes or wells
    • E21B33/10Sealing or packing boreholes or wells in the borehole
    • E21B33/13Methods or devices for cementing, for plugging holes, crevices or the like
    • 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/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash 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/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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/4552Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Life Sciences & Earth Sciences (AREA)
  • Geology (AREA)
  • Mining & Mineral Resources (AREA)
  • Chemical & Material Sciences (AREA)
  • Fluid Mechanics (AREA)
  • Geochemistry & Mineralogy (AREA)
  • Environmental & Geological Engineering (AREA)
  • Materials Engineering (AREA)
  • Organic Chemistry (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

비휘발성 메모리에 코드를 캐싱하는 방법들 및 장치들이 개시된다. 개시된 예시적인 방법은 제1 코드에 대한 코드 요청의 인스턴스를 식별하는 단계, 상기 제1 코드가 비휘발성(NV) 랜덤 액세스 메모리(RAM) 캐시에 저장되어 있는지를 식별하는 단계, 및 상기 제1 코드가 상기 NV RAM 캐시에 없는 경우, 상기 제1 코드와 연관된 제1 조건이 충족되는 경우에는 상기 제1 코드를 상기 NV RAM 캐시에 추가하고 상기 제1 조건이 충족되지 않는 경우에는 상기 NV RAM 캐시로의 상기 제1 코드의 저장을 방지하는 단계를 포함한다.

Description

비휘발성 메모리에 코드를 캐싱하는 방법들, 시스템들 및 장치{METHODS, SYSTEMS AND APPARATUS TO CACHE CODE IN NON-VOLATILE MEMORY}
본 개시내용은 일반적으로 컴파일러에 관한 것이고, 더 상세하게는, 비휘발성 메모리에 코드를 캐싱하는 방법, 시스템 및 장치에 관한 것이다.
동적 컴파일러는 하나 이상의 플랫폼 프로그램이 실행하고 있는 실행 시간(runtime) 동안에 코드를 최적화하려고 시도한다. 컴파일러는 프로세서 성능을 개선하기 위해 코드를 최적화하려고 시도한다. 그러나, 컴파일러 코드 최적화 역시 프로세서 리소스들을 소비하고, 이는 그러한 최적화 노력들이 최적화된 코드 자체에 의해 절약될 수 있는 것보다 훨씬 더 많은 양의 프로세서 리소스들을 소비할 경우에는 결과적인 최적화된 코드의 하나 이상의 이점을 무효화할 수 있다.
도 1은 비휘발성 메모리에 코드를 캐싱하는 본 개시내용의 교시에 일치하는 프로세서 플랫폼의 예시적인 부분의 개략적 예시이다.
도 2는 도 1의 플랫폼에서 캐시 관리자에 의해 생성된 예시적인 코드 조건 점수 차트이다.
도 3은 도 1의 플랫폼에서 캐시 관리자에 의해 생성된 예시적인 코드 성능 차트이다.
도 4는 도 1의 예시적인 캐시 관리자의 개략적 예시이다.
도 5a, 도 5b 및 도 6은 비휘발성 메모리에 코드를 캐싱하기 위해 실행될 수 있는 예시적인 기계 판독가능 명령어들을 나타내는 흐름도들이다.
도 7은 도 1 내지 도 4의 예시적인 시스템들 및 장치들을 구현하기 위해 도 5a, 도 5b 및 도 6의 명령어들을 실행할 수 있는 예시적인 프로세서 플랫폼의 개략적 예시이다.
코드 최적화 기법들은 프로그램의 실행 성능을 최적화하고/하거나 달리 개선하기 위해 실행 시간에 동적 컴파일러들을 이용할 수 있다. 예를 들어, 인터프리트된 코드는 실행 동안에 JIT(just-in-time) 컴파일러를 통해 기계 코드로 컴파일되어 캐싱될 수 있으며, 따라서 컴파일된 코드는 캐시 메모리로부터 액세스되기 때문에 하나 이상의 함수(예컨대, 프로세스들, 서브루틴들 등)에 대한 프로세서의 차후의 요청들이 비교적 더 빠르게 행해진다. 다른 예들에서는, 동적 이진 변환기(dynamic binary translators)가 타겟 머신(예컨대, 프로세서)이 명령어들을 실행할 수 있게 하는 방식으로 소스 명령어를 타겟 명령어로 변환한다. 처음 프로세서가 코드를 요청할 때(예컨대, 함수 호출), 추가의 시간(예컨대, 프로세서 클록 사이클들)이 소스 코드를 프로세서가 다룰 수 있는 포맷으로 변환하는데 소비된다. 그러나, 변환된 코드는 프로세서가 차후의 시간에 타겟 코드를 검색할 수 있게 하기 위해 캐시 메모리에 저장될 수 있는데, 이 경우 캐시 메모리로의 액세스는 소스 코드를 재컴파일하는 것보다 더 빠를 수 있다.
일부 시스템들에서, 코드는 기동(startup)시에 컴파일되어 캐싱된다. 그러나, 이러한 기동시의 컴파일은 차후 사용을 위한 컴파일된 코드를 생성하기 위해 상당한 양의 프로세서 오버헤드를 소비한다. 이 오버헤드는 때때로 "예열 시간(warm-up time)", 또는 "지체 시간(lag time)"이라고 언급된다. 이러한 노력들은 프로그램이 비교적 긴 시간 기간 동안 동작하고/하거나 동일한 함수들을 비교적 자주 반복적으로 호출하는 경우에 결국에는 더 나은 결과를 만들어보려는 노력으로 프로그램 실행시 조기에 프로세서 성능을 희생시킨다. 최적화된 컴파일된 코드는 최초 코드의 재컴파일에 대한 추후의 필요를 방지하기 위해 하드 디스크(예컨대, 자기 하드 디스크, 솔리드 스테이트 디스크 등)에 저장될 수 있다. 그러나, 하드 디스크 액세스 시간은 동적 컴파일러가 최초 코드를 재컴파일하는 데 필요한 시간보다 더 느릴 수 있고, 이로 인해 프로그램이 시작될 때(예컨대, 플랫폼에 전원을 넣은 후) 처음에 기동 시간이 느려지는 결과로 나타난다(즉, 비교적 많은 지체 시간). 다시 말해서, 저장소로부터 최적화된 컴파일된 코드를 검색하는 시간량은 프로세서가 코드를 요청할 때 최초 코드를 재컴파일하고/하거나 재최적화하는 시간량보다 더 많은 시간이 걸릴 수 있다.
프로세서 캐시를 인에이블하고/하거나 DRAM에 액세스하는 것이 하드 디스크 액세스 레이턴시에 비해 이전에 최적화된 컴파일된 코드를 검색하는 시간량을 감소시키기는 하지만, 프로세서 캐시는, 플랫폼의 셧다운의 경우 동안과 같이 전원이 제거되는 경우 그의 메모리 콘텐츠를 상실하는 휘발성 메모리이다. 프로세서 캐시는 레벨-1(L1), 레벨-2(L2)(예컨대, 멀티-레벨 캐시)와 같은, 임의의 수의 캐시 계층을 포함할 수 있다. 멀티-레벨 캐시는 비교적 더 많은 시간이 걸리는 하드 디스크 저장소로부터의 코드 페치(fetch)를 시도하기에 앞서 프로세서가 캐시에 원하는 코드가 있는지 확인할 수 있게 함으로써 프로세서 페치 레이턴시를 단축시킨다. 캐시는 일반적으로 계층적 방식으로 구조화되어 있어 레벨 1(예컨대, L1)에서는 로우 레이턴시, 고비용, 더 작은 저장소를 가지며, 각각의 후속 레벨(예컨대, L2, L3 등)에서는 더 느리고, 더 크고, 비용이 덜 드는 저장소를 구현한다.
L1 및 L2 캐시, 및/또는 임의의 다른 캐시 레벨은 일반적으로 프로세서 및/또는 프로세서 플랫폼과 연관된 랜덤 액세스 메모리(RAM)보다 작지만, 일반적으로 더 빠르고 물리적으로 프로세서에 더 가까이 있어 페치 레이턴시를 단축시킨다. 캐시는 또한 RAM보다 상대적으로 작은데, 그 이유는 부분적으로 그것이 프로세서 풋프린트의 일부분을 소비할 수 있기 때문이다(예컨대, 온-다이 캐시). 게다가, 제1 레벨 캐시(L1)는 일반적으로 후속 계층 캐시 레벨들 및/또는 RAM을 능가하는 속도 성능 특성을 가지고 제조되며, 이로 인해 비교적 더 높은 기준 소매 가격(price point)을 요구한다. 후속의 캐시 계층들은 일반적으로 비교적 더 많은 양의 저장 용량을 포함하지만, 물리적으로 더 멀리 떨어져 있고/있거나 제1 계층 캐시보다 더 낮은 성능 특성을 포함한다. 프로세서가 원하는 코드(예컨대, 하나 이상의 명령어, 최적화된 코드 등)를 캐시의 제1 계층(예컨대, L1 캐시)에서 찾아내지 못하는 경우에는, 외부 저장소(예컨대, 하드 디스크, 플래시 메모리, 솔리드 스테이트 디스크 등)에 대한 프로세서 페치에 앞서 캐시의 제2 또는 후속 계층(예컨대, L2 캐시, DRAM)이 확인될 수 있다. 따라서, 대부분의 캐시는 주 메모리로의 액세스를 줄이기 위해 캐시의 제1 계층(예컨대, L1)에 기입된 데이터를 캐시의 모든 하위 레벨들(예컨대, L2, L3 등)에 중복되게 저장하도록 구조화되어 있다.
컴파일된 코드를 캐시에 저장하는 것이 재최적화, 재컴파일 및/또는 주 메모리 액세스 시도에 대한 필요를 줄임으로써 레이턴시 단축을 가능하게 하기는 하지만, 캐시는 휘발성이다. 플랫폼이 셧다운되고/되거나 달리 전력을 잃는 경우, 캐시의 모든 콘텐츠가 상실된다. 일부 예들에서, 캐시 메모리(예컨대, L1 캐시, L2 캐시 등)는 바이트 레벨 접근성(byte level accessibility)을 가능하게 하는 동적 RAM(DRAM)을 포함하는데, 이것도 전원이 제거될 때 그의 데이터를 상실한다. 바이트 레벨 접근성은 프로세서들 및/또는 이진 변환기들이 큰 메모리 블록들보다는 비교적 소량의 정보에 대해 신속하게 동작할 수 있게 한다. 일부 예들에서, 프로세서는 더 큰 코드 블록들보다는 바이트 레벨 코드 부분들로 동작하기만 하면 된다. 큰 코드 블록들이 페치되는 경우에는, 프로세서가 필요로 하지 않는 코드 부분들을 검색하기 위해 부가의 페치(전송) 시간이 낭비된다. 플래시 메모리가 전원이 제거된 후에 메모리를 유지하기는 하지만, 그것은 바이트 레벨 판독 및/또는 기입 동작들을 가능하게 할 수 없고, 대신에, 블록 단위로 메모리에 액세스한다. 따라서, 플래시 메모리는 바이트 레벨보다는 블록 레벨로 비교적 높은 레이턴시 액세스 시간들로 인해 가장 적합한 캐시 메모리 유형으로서 역할을 할 수 없다.
한편, 비휘발성(NV) RAM은 L1, L2 캐시 및/또는 동적 RAM(DRAM)과 비슷한 데이터 전송 레이턴시 특성을 나타낼 수 있다. 또한, 플랫폼이 전력을 잃는 경우(예컨대, 셧다운, 재부팅, 절전 모드 등 동안), NV RAM은 플랫폼 전력이 복구된 후에 사용을 위해 그의 메모리 콘텐츠를 유지한다. 더욱이, NV RAM은 바이트 레벨 접근성을 용이하게 한다. 그러나, NV RAM은 전통적인 L1 캐시 메모리, L2 캐시 메모리 및/또는 DRAM에 비하여 상대적으로 짧은 라이프 사이클을 가진다. NV RAM과 연관된 메모리 셀에 대한 라이프 사이클은 셀이 작동을 멈추기 전에 셀이 수행할 수 있는 메모리 기입 동작들의 수를 말한다. 본 명세서에 개시된 예시적인 방법들, 장치들, 시스템들 및/또는 제조 물품들은 전력 상실의 기간들 동안 메모리 콘텐츠를 유지하고, 전통적인 L1/L2 캐시들과 유사한 레이턴시 특성을 나타내고, NV RAM 캐시와 연관된 라이프 사이클 제약을 고려하여 메모리 수명을 연장하는 방식으로 기입 동작들을 관리하는 비휘발성 RAM 기반 지속적 코드 캐시를 이용한다.
도 1은 프로세서(102), RAM(104), 저장소(106)(예컨대, 하드 디스크), 캐시 관리자(108) 및 캐시 메모리 시스템(110)을 포함하는 예시적인 프로세서 플랫폼(100)의 부분을 보여준다. 예시적인 캐시 메모리 시스템(110)은 예시된 도 1의 예에서는 버스(122)를 통해 예시적인 프로세서(102)에 통신가능하게 접속되어 있는 것으로 도시되어 있기는 하지만, 예시적인 캐시 메모리 시스템(110)은 프로세서 다이와 통합되는 것과 같이, 프로세서(102)의 일부일 수 있다. 예시적인 캐시 메모리 시스템(110)은 제1 레벨 캐시(112)(예컨대, L1 캐시) 및 제2 레벨 캐시(114)(예컨대, L2 캐시)와 같은, 임의의 수의 캐시 디바이스들을 포함할 수 있다. 예시된 예에서는, L1 및 L2 캐시가 포함되어 있고, L2 캐시는 NV RAM 캐시이다. 도 1의 예시적인 플랫폼(100)은 컴파일러(116)도 포함하는데, 이 컴파일러(116)는 저장소(106)로부터 최초 코드 부분들(118)을 획득하여 최적화된 컴파일된 코드(120)를 생성할 수 있다. 도 1의 예시적인 컴파일러(116)는 동적 컴파일러(예컨대, JIT(just-in-time) 컴파일러) 또는 이진 변환기일 수 있다.
동작 중에, 예시적인 프로세서(102)는 레이턴시를 단축시키려는 노력으로 먼저 캐시 메모리 시스템(110)에 액세스하는 것에 의해 하나 이상의 코드 부분을 요청한다. 요청된 코드가 제1 레벨 캐시(112)에서 발견되는 경우에는, 코드는 추가 처리를 위해 제1 레벨 캐시(112)로부터 프로세서(102)에 의해 검색된다. 요청된 코드가 제1 레벨 캐시(112)에서 발견되지 않는 경우에는, 프로세서(102)는, 만약 있다면, 예시적인 제2 레벨 캐시(114)와 같은 계층적 캐시의 하나 이상의 부가 레벨을 탐색한다. 예시적인 제2 레벨 캐시(114) 내에서 발견된다면, 프로세서는 추가 처리를 위해 제2 레벨 캐시로부터 코드를 검색한다. 요청된 코드가 예시적인 캐시 메모리 시스템(110)의 캐시의 어떤 레벨(예컨대, 캐시 레벨(112, 114))에서도 발견되지 않는(예를 들어, "캐시 미스(cache miss)"가 발생하는) 경우에는, 프로세서는 예시적인 저장소(106)에 대한 페치 동작(들)을 개시한다. 저장소(예컨대, 주 메모리)(106)에 대한 페치 동작들은 예시적인 캐시 메모리 시스템(110)의 레벨들과 연관된 레이턴시 시간들보다 상대적으로 더 긴 레이턴시 시간들과 연관된다. DRAM 또는 캐시 메모리에 이미 저장되어 있지 않다면, 저장소(106)로부터 검색된 코드를 예시적인 컴파일러(116)를 통해 컴파일하고, 최적화하고/하거나 달리 변환함으로써 부가의 레이턴시가 발생할 수 있다.
캐시 미스에 응답하여, 예시적인 캐시 관리자(108)는 프로세서 코드 요청(들)을 분석하여 요청된 코드가 예시적인 컴파일러(116)에 의해 컴파일되고, 최적화되고/되거나 달리 변환된 후에 예시적인 제2 레벨 캐시(114)에 배치되어야 하는지를 판정할 수 있다. 일부 예들에서, 예시적인 제1 레벨 캐시(112)에 최저 사용 빈도(least recently used, LRU) 퇴출 정책 레벨이 이용될 수 있는데, 이 경우 거기에 저장된 코드 중 가장 오래된 그리고/또는 그렇지 않다면 가장 적게 액세스되는 코드가 예시적인 프로세서(102)에 의해 요청된 대안 코드에 대한 공간을 할당하기 위해 삭제할 후보로서 식별된다. 제1 레벨 캐시(112)로부터 퇴출된 코드는 캐시 관리 정책(예컨대, LRU 정책)과 일관된 방식으로 예시적인 제2 레벨 캐시(114)로 전송되고/되거나 달리 저장될 수 있기는 하지만, 도 1의 예시적인 캐시 관리자(108)는 대신에 그 코드와 연관된 하나 이상의 조건을 평가하여 그것이 예시적인 제2 레벨 캐시(114)에 저장되어야 하는지, 또는 임의의 현재의 캐시 정책 저장 조치들이 차단되고/되거나 달리 무효화되어야 하는지를 판정한다. 일부 예들에서, 캐시 관리자(108)는 전통적인 휘발성 RAM 디바이스(들)(예컨대, DRAM)에 대한 제한이 아닌, NV RAM과 연관된 비교적 제한된 기입-사이클들을 고려하여 제2 레벨 NV RAM 캐시(114)로의 코드의 저장을 방지한다.
예시적인 제2 레벨 NV RAM 캐시(114)에 저장하거나 저장을 방지하는 예시적인 캐시 관리자(108)에 의한 결정들에 영향을 줄 수 있는 조건들은 (1) 단위 시간당 예시적인 프로세서(102)에 의해 코드가 호출되는 빈도(액세스 빈도), (2) 후보 코드를 변환하고, 컴파일하고/하거나 달리 최적화하기 위해 플랫폼 리소스들(예컨대, 프로세서 사이클들)에 의해 소비되는 시간량, (3) 후보 코드의 사이즈, (4) 프로세서에 의해 후보 코드가 액세스될 수 있는 시간량(캐시 액세스 레이턴시), 그리고/또는 (5) 코드가 전원투입 활동들과 연관되어 있는지(예컨대, 부팅 관련 코드) 여부를 포함하지만, 이것으로 제한되는 것은 아니다. 일부 예들에서, 도 1의 캐시 관리자(108)는 하나 이상의 조건 값을 하나 이상의 임계값과 비교하여 후보 코드를 제2 레벨 캐시(114)에 저장할지를 판정한다. 예를 들어, 프로세서(102)가 단위 시간당 코드 샘플을 호출하는 횟수와 연관된 제1 조건에 응답하여, 예시적인 캐시 관리자는 코드 샘플이 제1 레벨 캐시에 저장되는 것은 허용하지만, 코드 샘플이 제2 레벨 캐시에 저장되는 것은 방지할 수 있다. 한편, 프로세서(102)가 코드 샘플을 호출하는 횟수와 연관된 예시적인 제2 조건이 예시적인 제1 조건보다 크다면(예컨대, 카운트 임계값을 초과한다면), 예시적인 캐시 관리자(108)는 차후 레이턴시가 단축된 검색을 위해 코드 샘플이 NV RAM 캐시(114)에 저장되는 것을 허용할 수 있다.
도 2의 예는 예시적인 코드 블록과 연관된 다섯(5) 개의 예시적인 조건들에 대해 캐시 관리자(108)에 의해 생성된 코드 조건 점수 차트(200)를 예시한다. 제1 예시적인 조건은 액세스 빈도 점수(202)를 포함하고, 제2 예시적인 조건은 변환 시간 점수(204)를 포함하고, 제3 예시적인 조건은 코드 사이즈 점수(206)를 포함하고, 제4 예시적인 조건은 액세스 시간 점수(208)를 포함하고, 제5 예시적인 조건은 기동 점수(210)를 포함한다. 예시된 도 2의 예의 각 점수는 예시적인 프로세서(102)에 의해 요청되고/되거나 예시적인 컴파일러(116)에 의해 컴파일된 대응 코드를 추적함으로써 전개된다. 일부 예들에서, 조건들 각각에 대한 점수들은 예시적인 플랫폼(100)에서 실행 중인 하나 이상의 프로그램 및/또는 예시적인 플랫폼(100)과 연관된 하나 이상의 프로파일링 반복들 동안에 예시적인 컴파일러(116)에 의해 결정되고/되거나 갱신된다. 도 2는 하나의 예시적인 코드 샘플에 대한 다섯(5) 개의 조건들을 보여주고 있지만, 다른 코드 샘플들에 대한 다른 차트들이 마찬가지로 유지된다. 일부 예들에서, 각 조건 타입에 대한 임계값들은 예를 들어 선정된 코드 샘플들에 걸쳐, 대응 코드 샘플에 대한 평균값에 기초한다.
도 2의 예시적인 액세스 빈도 점수(202)는 후보 코드 샘플이 프로세서에 의해 호출되는 빈도(예컨대, 단위 시간당 호출 수)를 나타낸다. 후보 코드 샘플이 플랫폼 및/또는 실행 프로그램과 연관된 다른 코드 샘플에 비해 상대적으로 자주 호출되는 경우에는, 예시적인 액세스 빈도 점수(202)는 상대적으로 더 높은 값을 나타낼 것이다. 예시적인 캐시 관리자(108)는 후보 코드 샘플의 상대적 성능을 고려하여 임계값을 확립할 수 있다. 한편, 후보 코드 샘플이 상대적으로 드물게(예컨대, 프로세서(102)에 호출되는 다른 코드 샘플에 비해) 호출된다면, 예시적인 액세스 빈도 점수(202)는 더 낮은 값을 나타낼 것이다. 일반적으로 말해서, 예시적인 차트(200)에서 더 높은 점수 값은 후보 코드 샘플을 예시적인 제2 레벨 NV RAM 캐시(114)에 저장할 더 많은 근거를 반영한다. 한편, 코드 샘플이 상대적으로 드물게 호출되는 경우에는, 예시적인 캐시 관리자(108)는 기입 동작의 수를 줄여서, NV RAM 캐시(114)의 사용가능 수명을 연장하려는 노력으로 후보 코드 샘플이 NV RAM 캐시(114)에 기입되는 것을 방지할 수 있다.
도 2의 예시적인 변환 시간 점수(204)는 대응 코드 샘플을 컴파일하고/하거나 달리 변환하기 위해 리소스(예컨대, 컴파일러, 변환기 등)가 얼마나 오래 필요한지에 대한 표시를 반영한다. 후보 코드 샘플이 컴파일하고, 최적화하고/하거나 변환하는 데 비교적 긴 시간량을 필요로 하는 경우에는, 대응하는 변환 시간 점수(204)는 더 높을 것이다. 일반적으로 말해서, 예시적인 변환 시간 점수(204)에 대한 더 높은 값은 예시적인 프로세서(102)에 의한 차후의 호출들 동안 코드 샘플을 재컴파일하고, 재최적화하고/하거나 재변환하는 것과 연관된 하나 이상의 레이턴시 효과를 줄이기 위해 후보 코드 샘플이 예시적인 NV RAM 캐시(114)에 저장되어야 함을 나타낸다. 한편, 후보 코드 샘플이 다른 코드 샘플들에 비해 상대적으로 더 빠르게 컴파일되고, 최적화되고/되거나 변환되는 경우에는, 예시적인 캐시 관리자(108)는 후보 코드 샘플에 상대적으로 낮은 변환 시간 점수(204)를 할당할 수 있다. 변환 시간 점수(204)가 대응 임계값보다 낮다면, 재컴파일 노력이 원치 않는 레이턴시를 도입하지 않을 것이기 때문에 캐시 관리자(108)는 후보 코드 샘플이 예시적인 NV RAM 캐시(114)에 저장되는 것을 방지할 것이다. 하나 이상의 임계값은, 예를 들어, 통계 분석에 기초할 수 있다. 일부 예들에서, 통계 분석은 다수의 코드 샘플들 및 도 2의 예시적인 차트(200)와 같은 다수의 차트들에 걸쳐서 행해질 수 있다.
도 2의 예시적인 코드 사이즈 점수(206)는 예시적인 컴파일러(116)에 의해 컴파일되는/되거나 예시적인 프로세서(102)에 의해 처리되는 다른 코드 샘플들에 비해 후보 코드 샘플에 의해 소비되는 저장 공간의 상대적 양에 대한 표시를 반영한다. 예시적인 캐시 관리자(108)는 예시적인 NV RAM 캐시(114)의 저장 공간을 아껴 쓰려는 노력으로 비교적 작은 사이즈의 코드 샘플에 더 높은 점수 값들을 할당한다. 예시적인 액세스 시간 점수(208)는 저장된 캐시가 얼마나 빠르게 액세스될 수 있는지에 대한 표시를 반영한다. 비교적 빠르게 액세스될 수 있는 코드 샘플들은 액세스하는 데 더 오래 걸리는 코드 샘플들에 비해 상대적으로 더 높은 점수를 갖도록 예시적인 캐시 관리자(108)에 의해 할당된다. 일부 예들에서, 코드 샘플을 액세스하는 시간량은 후보 코드 샘플의 대응 사이즈에 비례한다.
예시적인 기동 점수(210)는 후보 코드 샘플이 부팅 프로세스 프로그램(들)과 같은 기동 활동들과 연관되어 있는지에 대한 표시를 반영한다. 일부 예들에서, 기동 점수(210)는 코드 샘플이 기동 활동들에 관여하는 상황들에 더 큰 가중치가 적용되는 이진 값(예/아니오)일 수 있다. 따라서, 이전에 전원이 꺼진 상태에서 부팅하는 플랫폼은 대응하는 기동 코드가 저장소(106)로부터 검색되어, 예시적인 컴파일러(116)에 의해 처리되고/되거나 달리 컴파일되는 것보다는 예시적인 NV RAM 캐시(114)로부터 액세스되는 경우에 향상된 기동 시간을 경험할 수 있다.
도 3의 예는 후보 코드 샘플들 간의 상대적 차이들을 식별하기 위해 캐시 관리자(108)에 의해 생성된 예시적인 코드 성능 차트(300)를 예시한다. 도 3의 예시적인 코드 성능 차트(300)는 후보 코드 샘플들 A, B, C 및 D를 포함하고, 이들 각각은 대응 조건 값을 포함한다. 도 3의 예시적인 조건 값들(메트릭들(metrics))은 액세스 빈도 조건(302), 변환 시간 조건(304), 코드 사이즈 조건(306), 액세스 시간 조건(308), 및 기동 조건(310)을 포함하지만, 이것으로 한정되는 것은 아니다. 조건들 각각은 예시적인 컴파일러(116) 및/또는 캐시 관리자(108)의 하나 이상의 프로파일 동작(들)에 의해 대응 코드 샘플에 대한 대응 값들로 채워질 수 있다(populated).
예시된 도 3의 예에서, 액세스 빈도 조건(302)과 연관된 값들은 대응 후보 코드 샘플이 프로세서(102)에 의해 호출된 경우들의 카운트들을 나타내고, 변환 시간(304)과 연관된 값들은 대응 후보 코드 샘플을 변환하고, 컴파일하고/하거나 달리 최적화하기 위해 프로세서(102)에 의해 소비된 시간 또는 프로세서 사이클의 수를 나타낸다. 게다가, 코드 사이즈 조건(306)과 연관된 값들은 대응 후보 코드 샘플에 대한 바이트 값을 나타내고, 액세스 시간(308)과 연관된 값들은 대응 후보 코드 샘플에 액세스하기 위해 프로세서(102)에 의해 소비된 시간 또는 프로세서 사이클의 수를 나타내고, 기동 조건(310)과 연관된 값들은 대응 후보 코드 샘플이 플랫폼의 하나 이상의 기동 활동에 관여하는지에 대한 이진 표시를 나타낸다.
도 4는 도 1의 예시적인 캐시 관리자(108)의 예시적인 구현의 개략도이다. 예시된 도 4의 예에서, 캐시 관리자(108)는 프로세서 호출 모니터(402), 코드 통계 엔진(404), 캐시 인터페이스(406), 조건 임계값 엔진(408), NV RAM 우선 순위 프로파일(410) 및 경보 모듈(412)을 포함한다. 동작 중에, 예시적인 프로세서 호출 모니터(402)는 예시적인 프로세서(102)가 코드 샘플을 호출하려고 시도하는지를 판정한다. 예시적인 프로세서(102)가 코드 샘플에 대한 호출을 하고 있음을 검출하는 것에 응답하여, 예시적인 코드 통계 엔진(404)은 어느 코드 샘플이 호출되었는지를 기록하고 이러한 업데이트 통계값들을 도 1의 예시적인 저장소(106)와 같은 저장소에 그리고/또는 DRAM에 저장한다. 예시된 예에서, 예시적인 코드 통계 엔진(404)에 의해 통계 구축되고/되거나 달리 추적된 통계는 특정 코드 샘플(예컨대, 함수, 서브루틴 등)이 예시적인 프로세서(102)에 의해 호출되는 횟수의 카운트(예컨대, 호출 카운트, 단위 시간당 호출 등), 특정 코드 샘플을 컴파일하기 위해 플랫폼 리소스들에 의해 소비된 사이클의 수, 특정 코드 샘플의 사이즈, NV RAM 캐시(114)로부터 특정 코드 샘플을 검색하는 액세스 시간, 그리고/또는 특정 코드 샘플이 기동 활동들과 연관되어 있는지 여부를 포함한다.
예시적인 캐시 인터페이스(406)는 프로세서(102)에 의해 요청된 코드 샘플이 제1 레벨 캐시(112)에 있는지를 판정하고, 그렇다면, 요청된 코드 샘플을 프로세서(102)에 전송한다. 한편, 프로세서(102)에 의해 요청된 코드 샘플이 제1 레벨 캐시(112)에 없다면, 예시적인 캐시 인터페이스(406)는 요청된 코드 샘플이 NV RAM 캐시(114)에 있는지를 판정한다. 프로세서(102)에 의해 요청된 코드 샘플이 NV RAM 캐시(114)(제2 레벨 캐시)에 있다면, 예시적인 캐시 인터페이스(406)는 요청된 코드 샘플을 프로세서(102)에 전송한다. 한편, 요청된 코드 샘플이 NV RAM 캐시(114)에 없다면, 예시적인 캐시 관리자(108)는 요청된 코드 샘플이 차후의 액세스를 위해 NV RAM 캐시(114)에 배치되어야 하는지를 평가하도록 진행한다.
요청된 코드 샘플이 차후의 액세스를 위해 NV RAM 캐시(114)에 배치되어야 하는지를 평가하기 위해, 예시적인 코드 통계 엔진(404)은 저장소(106)에 이전에 저장된 요청된 코드 샘플에 관련된 통계에 액세스한다. 일부 예들에서, 코드 통계 엔진(404)은 마지막으로 콜드 부트(cold boot)로부터 플랫폼에 전원이 투입된 이후 수신된 코드 샘플 각각과 연관된 통계를 유지하는 한편, 플랫폼 전원 인가 이전에 수집된 코드 부분들의 임의의 통계는 소거하고/하거나 달리 무시한다. 다른 예들에서, 코드 통계 엔진(404)은 플랫폼이 시간 경과에 따라 각 코드 샘플을 특징화하도록 동작하기 시작한 이후 각각의 코드 샘플과 연관된 통계를 유지한다. 전술한 바와 같이, 각 코드 특징은 예시적인 프로세서(102)에 의해 처리되고/되거나 예시적인 컴파일러(116)에 의해 컴파일된 코드 부분들의 상대적 성능에 기초한 연관된 임계값(개별 임계값)을 가질 수 있다. 특정 조건에 대한 개별 임계값이 소정의 후보 코드 샘플에 대해 초과되면, 예시적인 캐시 인터페이스(406)는 그 소정의 후보 코드 샘플을 NV RAM 캐시(114)에 추가한다.
일부 예들에서, 개별 특징 임계값들 중 어느 것도 소정의 후보 코드 샘플에 대해 초과되지 않지만, 다양한 조건 타입들(예컨대, 기입 빈도 카운트, 변환 시간, 코드 사이즈, 액세스 시간 등)에 대한 값들의 합계(aggregate)가 합해져서 합계 점수(aggregate score)보다 높은 값이 될 수 있다. 그렇다면, 도 4의 예시적인 캐시 인터페이스(406)는 후보 코드를 NV RAM 캐시(114)에 추가한다. 각 조건 타입에 대한 개별 임계값들 중 어느 것도 초과되지 않고, 둘 이상의 예시적인 조건 타입들에 대한 합계 값이 합계 임계값을 충족시키지 않거나 초과하지 않는 경우에는, 예시된 예의 예시적인 NV RAM 우선 순위 프로파일 관리자(410)는 후보 코드 샘플이 기동 작업들과 연관되어 있는지를 판정한다. 그렇다면, 우선 순위 프로파일 관리자(410)는 플랫폼이 전력 사이클에 따라 더 빠르게 기동하도록 후보 코드 샘플을 NV RAM 캐시(114)에 추가하기 위해 캐시 인터페이스(406)를 호출할 수 있다. 예시적인 NV RAM 우선 순위 프로파일 관리자(410)는 각 조건 타입에 대한 개별 임계값들을 설정하고/하거나 조정하고, 둘 이상의 조건 타입들에 대한 합계 임계값을 설정하고/하거나 조정하고, 그리고/또는 모든 또는 일부 후보 코드가 하나 이상의 기동 작업(들)과 연관되어 있다면 그것이 예시적인 NV RAM 캐시(114)에 저장되어야 하는지를 판정하도록 구성되고/되거나 달리 맞춤화될 수 있다.
일부 예들에서, 캐시 관리자(108)는 NV RAM 캐시(114)를 그것의 유효 수명에 대해 모니터한다. 예를 들어, 일부 NV RAM 타입들은 10,000의 수명 기입 카운트를 갖는 반면, 다른 NV RAM 타입들은 100,000의 수명 기입 카운트를 가진다. 현재 그리고/또는 미래 NV RAM 타입들은 임의의 다른 기입 카운트 한계값(들)을 가질 수 있기는 하지만, 예시적인 캐시 관리자(108)는 이러한 기입 사이클들을 모니터하여 유효 수명 한계에 접근하고 있는지를 판정할 수 있다. 예를 들어, 하나 이상의 NV RAM 타입에 대한 특정한 유효 수명 한계 기대치들에 기초하여 하나 이상의 임계값들이 조정될 수 있다. 일부 예들에서, NV RAM은 사용자-서비스가능(user serviceable)할 수 있고, 기능 불량(malfunction), 라이프 사이클의 끝, 그리고/또는 업그레이드 활동의 경우에는, NV RAM이 교체될 수 있다. 일부 예들에서, 프로파일 관리자(410)는 NV RAM 캐시(114)에 대한 기대 수명 기입 값을 현재 기입 카운트 값과 비교한다. 기대 수명 기입 값들은 NV RAM 캐시의 하나 이상의 제조사들 및/또는 모델들 간에 차이가 있을 수 있다. 현재 카운트가 수명 카운트 값에 가깝고/가깝거나 수명 카운트 값을 초과하는 경우에는, 하나 이상의 경보가 발생될 수 있다. 다른 예들에서, 도 4의 NV RAM 우선 순위 프로파일 관리자(410)는 기입 사이클들의 레이트가 임계값 위로 증가하는지를 판정한다. 어떤 경우든, 잠재적인 고장들이 플랫폼 동작(들)에 영향을 주기 전에 사용자 서비스(user service)가 행해질 수 있도록 하나 이상의 플랫폼 경보를 발생시키기 위해 예시적인 경보 모듈(412)이 호출될 수 있다.
코드를 비휘발성 메모리에 캐싱하기 위해 예시적인 플랫폼(100) 및/또는 예시적인 캐시 관리자(108)을 구현하는 예시적인 방식이 도 1 내지 도 4에 예시되었지만, 도 1 내지 도 4에 예시된 요소들, 프로세스들 및/또는 디바이스들 중 하나 이상이 조합되고, 분할되고, 재배열되고, 생략되고, 제거되고/되거나 어떤 다른 방식으로 구현될 수 있다. 또한, 도 1 내지 도 4의 예시적인 캐시 관리자(108), 예시적인 제1 캐시(112), 예시적인 NV RAM 캐시(114), 예시적인 프로세서 호출 모니터(402), 예시적인 코드 통계 엔진(404), 예시적인 캐시 인터페이스(406), 예시적인 조건 임계값 엔진(408), 예시적인 NV RAM 우선 순위 프로파일 관리자(410) 및/또는 예시적인 경보 모듈(412) 중 임의의 것 또는 전부가 하드웨어, 소프트웨어, 펌웨어 그리고/또는 하드웨어, 소프트웨어, 및/또는 펌웨어의 임의의 조합으로 구현될 수 있다. 게다가, 그리고 후술하는 바와 같이, 도 1 내지 도 4의 예시적인 캐시 관리자(108), 예시적인 제1 캐시(112), 예시적인 NV RAM 캐시(114), 예시적인 프로세서 호출 모니터(402), 예시적인 코드 통계 엔진(404), 예시적인 캐시 인터페이스(406), 예시적인 조건 임계값 엔진(408), 예시적인 NV RAM 우선 순위 프로파일 관리자(410) 및/또는 예시적인 경보 모듈(412)은 하드웨어, 소프트웨어, 펌웨어 그리고/또는 하드웨어, 소프트웨어, 및/또는 펌웨어의 임의의 조합으로 구현될 수 있다. 따라서, 예를 들어, 도 1 내지 도 4의 예시적인 캐시 관리자(108), 예시적인 제1 캐시(112), 예시적인 NV RAM 캐시(114), 예시적인 프로세서 호출 모니터(402), 예시적인 코드 통계 엔진(404), 예시적인 캐시 인터페이스(406), 예시적인 조건 임계값 엔진(408), 예시적인 NV RAM 우선 순위 프로파일 관리자(410) 및/또는 예시적인 경보 모듈(412) 중 임의의 것이 하나 이상의 회로(들), 프로그램 가능 프로세서(들), ASIC(들)(application specific integrated circuit(s), PLD(들)(programmable logic device(s)) 그리고/또는 FPLD(들)(field programmable logic device(s)) 등으로 구현될 수 있다. 이 특허의 장치 또는 시스템 청구항들 중 임의의 것이 순전히 소프트웨어 및/또는 펌웨어 구현을 포함하는 것으로 이해될 때, 도 1 내지 도 4의 예시적인 캐시 관리자(108), 예시적인 제1 캐시(112), 예시적인 NV RAM 캐시(114), 예시적인 프로세서 호출 모니터(402), 예시적인 코드 통계 엔진(404), 예시적인 캐시 인터페이스(406), 예시적인 조건 임계값 엔진(408), 예시적인 NV RAM 우선 순위 프로파일 관리자(410) 및/또는 예시적인 경보 모듈(412)중 적어도 하나는 이에 의하여 그 소프트웨어 및/또는 펌웨어를 저장한 메모리, DVD, CD, 블루레이 등과 같은 유형의(tangible) 컴퓨터 판독가능 저장 매체를 포함하는 것으로 명백히 정의된다. 더욱이, 도 1의 예시적인 플랫폼(100) 및 도 4의 예시적인 캐시 관리자(108)는 도 1 내지 도 4에 예시된 것들에 더하여, 또는 그 대신에 하나 이상의 요소들, 프로세스들 및/또는 디바이스들을 포함할 수 있으며, 그리고/또는 예시된 요소들, 프로세스들 및 디바이스들 중 임의의 것 또는 전부를 둘 이상 포함할 수 있다.
도 1의 플랫폼(100) 및 도 1 내지 도 4의 예시적인 캐시 관리자(108)를 구현하기 위한 예시적인 기계 판독가능 명령어들을 나타내는 흐름도들이 도 5a, 도 5b 및 도 6에 도시되어 있다. 이 예에서, 기계 판독가능 명령어들은 도 7과 관련하여 아래에 논의되는 예시적인 컴퓨터(700)에 도시된 프로세서(712)와 같은 프로세서에 의해 실행되는 프로그램을 포함한다. 프로그램은 CD-ROM, 플로피 디스크, 하드 드라이브, 디지털 다용도 디스크(DVD), 블루레이 디스크, 또는 프로세서(712)와 연관된 메모리와 같은 유형의 컴퓨터 판독가능 저장 매체에 저장된 소프트웨어로 구현될 수 있지만, 전체 프로그램 및/또는 그의 부분들이 대안적으로 프로세서(712)가 아닌 디바이스에 의해 실행되고/되거나 펌웨어 또는 전용 하드웨어로 구현될 수도 있다. 또한, 예시적인 프로그램이 도 5a, 도 5b 및 도 6에 예시된 흐름도들을 참조하여 기술되어 있기는 하지만, 코드를 비휘발성 메모리에 캐싱하기 위해 예시적인 플랫폼(100) 및 예시적인 캐시 관리자(108)를 구현하는 많은 다른 방법들이 대안적으로 이용될 수 있다. 예를 들어, 블록들의 실행 순서는 변경될 수 있고, 그리고/또는 기술된 블록들 중 일부가 변경되거나, 제거되거나, 조합될 수 있다.
전술한 바와 같이, 도 5a, 도 5b 및 도 6의 예시적인 프로세스들은 하드 디스크 드라이브, 플래시 메모리, 판독 전용 메모리(ROM), 콤팩트 디스크(CD), 디지털 다용도 디스크(DVD), 캐시, 랜덤 액세스 메모리(RAM) 그리고/또는 정보가 임의의 지속 기간 동안(예컨대, 연장된 시간 기간 동안, 영구적으로, 짧은 인스턴스(brief instances), 일시적으로 버퍼링하기 위해, 그리고/또는 정보의 캐싱을 위해) 저장되는 임의의 다른 저장 디바이스 및/또는 저장 디스크와 같은 유형의 컴퓨터 판독가능 저장 매체에 저장된 코딩된 명령어들(예컨대, 컴퓨터 판독가능 명령어들)을 이용하여 구현될 수 있다. 본 명세서에서 사용될 때, 유형의 컴퓨터 판독가능 저장 매체라는 용어는 임의의 타입의 컴퓨터 판독가능 저장 디바이스 및/또는 저장 디스크를 포함하는 것으로 그리고 전파 신호들(propagating signals)을 제외하는 것으로 명백히 정의된다. 게다가 또는 대안적으로, 도 5a, 도 5b 및 도 6의 예시적인 프로세스들은 하드 디스크 드라이브, 플래시 메모리, 판독 전용 메모리, 콤팩트 디스크, 디지털 다용도 디스크, 캐시, 랜덤 액세스 메모리 그리고/또는 정보가 임의의 지속 기간 동안(예컨대, 연장된 시간 기간 동안, 영구적으로, 짧은 순간(brief instances), 일시적으로 버퍼링하기 위해, 그리고/또는 정보의 캐싱을 위해) 저장되는 임의의 다른 저장 매체와 같은 비일시적 컴퓨터 판독가능 저장 매체에 저장된 코딩된 명령어들(예컨대, 컴퓨터 판독가능 명령어들)을 이용하여 구현될 수 있다. 본 명세서에서 사용될 때, 비일시적 컴퓨터 판독가능 저장 매체라는 용어는 임의의 타입의 컴퓨터 판독가능 저장 디바이스 및/또는 저장 디스크를 포함하는 것으로 그리고 전파 신호들을 제외하는 것으로 명백히 정의된다. 본 명세서에서 사용될 때, "적어도"라는 어구는 청구항의 전제부(preamble)에 연결 어구(transition term)로서 이용될 때, 그것은 "포함하는"이라는 용어가 개방형(open ended)인 것과 마찬가지로 개방형이다. 따라서, 전제부에서 연결 어구로서 "적어도"를 이용하는 청구항은 청구항에 명백히 기재된 것들에 추가로 요소들을 포함할 수 있다.
도 5a의 프로그램(500)은 예시적인 프로세서 호출 모니터(402)가, 예시적인 프로세서(102)가 코드를 호출하는지를 판정하는 블록(502)에서 시작된다. 프로세서가 코드를 호출하지 않는다면, 예시적인 프로세서 호출 모니터(402)는 프로세서 호출을 기다리지만, 호출이 발생하면, 예시적인 코드 통계 엔진(404)이 코드 호출과 연관된 통계를 기록한다(블록(504)). 일부 예들에서, 프로세서 호출(들)의 하나 이상의 이전 반복(들) 이후까지는 하나 이상의 통계가 즉시 이용 가능하지 않을 수 있다. 전술된 바와 같이, 예시적인 플랫폼(100) 및/또는 플랫폼(100)에서 실행되는 예시적인 코드 부분들을 특징화하려는 노력으로 각 후보 코드 부분에 대한 통계가 모니터되어 저장된다. 코드 통계는 후보 코드가 프로세서(102)에 의해 요청되고/되거나 달리 호출되는 횟수, 후보 코드를 변환하고, 컴파일하고/하거나 최적화하는 것으로 소비되는 프로세서 사이클 또는 초의 수(예컨대, 밀리초), 코드의 사이즈 그리고/또는 캐시 메모리로부터의 후보 코드에 액세스하는 시간(예컨대, L1 캐시(112) 액세스 시간, NV RAM 캐시(114) 액세스 시간 등)을 포함할 수 있지만, 이것으로 한정되는 것은 아니다.
예시적인 캐시 인터페이스(406)가, 후보 코드가 제1 레벨 캐시(112)에 있다고 판정하는 경우에는(블록(506)), 후보 코드는 예시적인 프로세서(102)에 전달된다(블록(508)). 후보 코드가 제1 레벨 캐시(112)에 없다면(블록(506)), 예시적인 캐시 인터페이스(406)는 후보 코드가 이미 NV RAM 캐시(114)에 있는지를 판정한다(블록(510)). 그렇다면, 후보 코드는 예시적인 프로세서(102)에 전송되고(블록(508)), 그렇지 않다면 예시적인 캐시 관리자(108)는 후보 코드가 추후의 접근성을 위해 NV RAM 캐시(114)에 배치되어야 하는지를 판정한다(블록(512)).
도 5b의 프로그램(512)은 예시적인 코드 통계 엔진(404)이 도 1의 예시적인 저장소(106)와 같은 디스크에 저장된 후보 코드와 연관된 데이터에 액세스하고/하거나 그 데이터를 달리 로딩하는 블록(520)에서 시작된다. 일부 예들에서, 통계 데이터는 레이턴시 액세스 시간이 단축되도록 예시적인 저장소(106)로부터 로딩되어 RAM(104)에 저장된다. 예시적인 조건 임계값 엔진(408)은 예시적인 프로세서(102)에 의해 요청된 후보 코드와 연관된 통계를 식별하여 하나 이상의 개별 조건 임계값이 초과되는지를 판정한다(블록(522)). 전술한 바와 같이, 각 조건은 상이한 임계값을 가질 수 있는데, 이 임계값은 초과될 때, 후보 코드를 NV RAM 캐시(114)에 추가하기 위해(블록(524)) 예시적인 캐시 인터페이스(406)를 호출한다. 예를 들어, 후보 코드가 상대적으로 높은 빈도로(예컨대, 예시적인 프로세서(102)에 의해 요청된 다른 코드에 비해) 액세스된다면, 그것의 대응 액세스 카운트 값은 도 2의 예시적인 액세스 빈도 점수(202)와 연관된 임계값보다 더 높을 수 있다. 이러한 예시적인 상황에서, 후보 코드를 NV RAM 캐시(114)에 추가하는 것은 더 긴 레이턴시 디스크 액세스 시간 및/또는 재컴파일 노력들을 제거함으로써 더 빠른 코드 실행을 용이하게 한다.
후보 코드에 의해 어떤 개별 조건 임계값도 초과되지 않는다면(블록(522)), 예시적인 조건 임계값 엔진(408)은 합계 점수 임계값이 초과되는지를 판정한다(블록(526)). 그렇다면, 예시적인 캐시 인터페이스(406)는 후보 코드를 NV RAM 캐시(114)에 추가한다(블록(524)). 합계 점수 임계값이 초과되지 않는다면(블록 526), 예시적인 NV RAM 우선 순위 프로파일 관리자(410)는 후보 코드가 부트 시퀀스 코드와 같이 기동 작업(들)과 연관되어 있는지를 판정한다(블록(528)). 일부 예들에서, 후보 코드가 부트 시퀀스와 연관되어 있다는 지정은 재컴파일, 재최적화 및/또는 재변환 노력들을 제거함으로써 후속하는 기동 활동들이 더 빠르게 동작하도록 캐시 인터페이스(406)로 하여금 후보 코드를 NV RAM 캐시(114)에 추가하게 한다. 예시적인 NV RAM 우선 순위 프로파일 관리자(410)는 후보 코드가 기동 작업(들)과 연관되어 있을 때 후보 코드의 NV RAM 캐시(114)로의 자동 추가에 관한 사용자 제어 설정들을 용이하게 하기 위해 관심 있는 각 플랫폼과 연관된 하나 이상의 프로파일을 저장할 수 있다. 어떤 개별 조건 임계값도 초과되지 않고(블록(522)) 어떤 합계 점수 임계값도 초과되지 않고(블록 526), 후보 코드가 기동 작업(들)과 연관되어 있지 않은(블록(528)) 경우에는, 예시적인 캐시 관리자(108)는 LRU(least-recently used) 기법들, 기본(default) 재컴파일 및/또는 저장소(106) 액세스와 같은, 하나 이상의 기본 캐시 최적화 기법을 이용한다(블록(530)).
일부 예들에서, 캐시 관리자(108)는 예시적인 NV RAM 캐시(114)가 그의 유효 수명 기입 사이클 값에 가깝거나 이를 초과하는지를 판정한다. 전술한 바와 같이, NV RAM 캐시(114)는 디스크 저장소(106)와 연관된 비교적 긴 레이턴시 액세스 시간을 회피하기 위해 DRAM과 비슷한 유리한 레이턴시 특성을 나타내고 비휘발성이기는 하지만, NV RAM 캐시(114)는 작동을 멈추기 전에 제한된 수의 캐시 사이클들을 가진다. 도 6의 프로그램(600)은 예시적인 코드 통계 엔진(404)이 NV RAM 기입 카운트 값들을 검색하는 블록(602)에서 시작된다. 예시적인 NV RAM 우선 순위 프로파일 관리자(410)는 NV RAM 캐시(114)의 기입 카운트가 그의 수명 임계치보다 큰지를 판정하고(블록(604)), 그렇다면, 예시적인 경보 모듈(412)을 호출하여 하나 이상의 경보를 발생시킨다(블록(606)). 예시적인 경보 모듈(412)은, 예시적인 플랫폼(100)의 전원 인가 리셋 활동들 동안에 표시된 시스템 생성 메시지들 및/또는 프롬프트 메시지들과 같은, 임의의 타입의 경보를 호출하여 플랫폼 관리자에게 NV RAM 캐시(114)가 그의 유효 수명의 끝에 있거나 그에 접근하고 있음을 알려줄 수 있다.
NV RAM 우선 순위 프로파일 관리자(410)가, NV RAM 캐시(114)가 수명 임계값에 있지 않다고 판정하는 경우에는(블록(604)), 예시적인 NV RAM 우선 순위 프로파일 관리자(410)는 기입 사이클들의 레이트가 레이트 임계값보다 큰지를 판정한다(블록(608)). 일부 예들에서, 플랫폼(100) 동작은 단위 시간당 기입 동작의 수를 가속시키는 방식으로 변할 수 있고, 이는 비교적 더 짧은 시간 기간 동안에 NV RAM 캐시(114)의 유효 수명을 단축시킬 수 있다. 이러한 플랫폼 동작 및/또는 기입 사이클들의 레이트의 변화들은 예시적인 경보 모듈(412)에 의해 전달되고(블록(606)) 따라서 플랫폼 관리자들은 정정 조치를 취하고/취하거나 플랫폼 컴포넌트들의 교체를 위한 계획을 세울 수 있다. 도 6의 예시적인 플랫폼(600)은 기입 카운트 값들이 주기적으로, 비주기적으로 그리고/또는 수동으로 갱신될 수 있도록 지연을 이용할 수 있다(블록(610)).
도 7은 도 5a, 도 5b 및 도 6의 명령어들을 실행하여 도 1의 플랫폼(100) 및/또는 도 1 내지 도 4의 캐시 관리자(108)를 구현하는 것이 가능한 예시적인 프로세서 플랫폼(700)의 블록도이다. 프로세서 플랫폼(700)은, 예를 들어, 서버, 퍼스널 컴퓨터, 인터넷 어플라이언스(Internet appliance), 모바일 디바이스, 또는 임의의 다른 타입의 컴퓨팅 디바이스일 수 있다.
본 예의 시스템(700)은 프로세서(712)를 포함한다. 예를 들어, 프로세서(712)는 임의의 원하는 계열 또는 제조사로부터의 하나 이상의 마이크로프로세서 또는 컨트롤러로 구현될 수 있다.
프로세서(712)는 로컬 메모리(713)(예컨대, 캐시(112, 114)와 같은 캐시)를 포함하고 휘발성 메모리(714)와 비휘발성 메모리(716)를 포함하는 주 메모리와 버스(718)를 통해 통신한다. 휘발성 메모리(714)는 동기식 동적 랜덤 액세스 메모리(Synchronous Dynamic Random Access Memory, SDRAM), 동적 랜덤 액세스 메모리(DRAM), 램버스(RAMBUS) 동적 랜덤 액세스 메모리(RDRAM) 그리고/또는 임의의 다른 타입의 랜덤 액세스 메모리 디바이스로 구현될 수 있다. 비휘발성 메모리(716)는 플래시 메모리 및/또는 임의의 다른 원하는 타입의 메모리 디바이스로 구현될 수 있다. 주 메모리(714, 716)로의 액세스는 메모리 컨트롤러에 의해 제어된다.
프로세서 플랫폼(700)은 또한 인터페이스 회로(720)를 포함한다. 인터페이스 회로(720)는 이더넷 인터페이스, USB(universal serial bus), 및/또는 PCI 익스프레스 인터페이스와 같은, 임의의 타입의 인터페이스 표준으로 구현될 수 있다.
하나 이상의 입력 디바이스(722)가 인터페이스 회로(720)에 접속된다. 입력 디바이스(들)(722)는 사용자가 데이터 및 명령들을 프로세서(712)에 입력할 수 있게 한다. 입력 디바이스(들)는, 예를 들어, 키보드, 마우스, 터치스크린, 트랙-패드, 트랙볼, 이소포인트(isopoint) 및/또는 음성 인식 시스템으로 구현될 수 있다.
하나 이상의 출력 디바이스(724)가 또한 인터페이스 회로(720)에 접속된다. 출력 디바이스들(724)은, 예를 들어, 디스플레이 디바이스(예컨대, 액정 디스플레이, CRT(cathode ray tube) 디스플레이, 프린터 및/또는 스피커)로 구현될 수 있다. 인터페이스 회로(720)는, 따라서, 일반적으로 그래픽 드라이버 카드를 포함한다.
인터페이스 회로(720)는 또한 네트워크(726)(예컨대, 이더넷 접속, 디지털 가입자 회선(DSL), 전화 회선, 동축 케이블, 셀룰러 전화 시스템 등)를 통해 외부 컴퓨터들과의 데이터의 교환을 용이하게 하는 모뎀 또는 네트워크 인터페이스 카드와 같은 통신 디바이스를 포함한다.
프로세서 플랫폼(700)은 또한 소프트웨어와 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스(728)를 포함한다. 이러한 대용량 저장 디바이스들(728)의 예들은 플로피 디스크 드라이브, 하드 디스크 드라이브, 콤팩트 디스크 드라이브 및 디지털 다용도 디스크(DVD) 드라이브를 포함한다.
도 5a, 도 5b 및 도 6의 코딩된 명령어들(732)은 대용량 저장 디바이스(728)에, 휘발성 메모리(714)에, 비휘발성 메모리(716)에, 그리고/또는 CD 또는 DVD와 같은 이동식 저장 매체에 저장될 수 있다.
본 명세서에 개시된 비휘발성 메모리에 코드를 캐싱하는 방법들, 장치들, 시스템들 및 제조 물품들은 디스크 저장소에 대한 프로세서 페치 동작들과 연관된 레이턴시를 단축시킴으로써 플랫폼 동작을 개선한다. 특히, 프로세서 디스크 저장소 페치 동작들은 플랫폼 전원 리셋 후에 비교적 빈번한데, 그 이유는 전통적인 캐시 디바이스들에 저장된 이전에 컴파일되고, 최적화되고/되거나 달리 변환된 코드가 전력이 제거될 때 유지되지 않기 때문이다. 게다가, 본 명세서에 개시된 비휘발성 메모리에 코드를 캐싱하는 방법들, 장치들, 시스템들 및 제조 물품들은 제한된 수의 수명 기입 사이클들을 가질 수 있는 비휘발성 랜덤 액세스 메모리에 기입하려는 시도들을 현명하게 관리한다.
비휘발성 메모리에 코드를 캐싱하는 방법들, 장치들, 시스템들 및 제조 물품들이 개시된다. 일부 개시된 예시적인 방법들은 제1 코드에 대한 코드 요청의 인스턴스를 식별하는 단계, 상기 제1 코드가 비휘발성(NV) 랜덤 액세스 메모리(RAM) 캐시에 저장되어 있는지를 식별하는 단계, 및 상기 제1 코드가 상기 NV RAM 캐시에 없는 경우, 상기 제1 코드와 연관된 제1 조건이 충족되는 경우에는 상기 제1 코드를 상기 NV RAM 캐시에 추가하고 상기 제1 조건이 충족되지 않는 경우에는 상기 NV RAM 캐시로의 상기 제1 코드의 저장을 방지하는 단계를 포함한다. 다른 개시된 방법들은 상기 제1 조건이 충족되지 않는 경우 상기 제1 조건과 제2 조건에 대응하는 합계 임계값이 충족되는지를 판정하는 단계를 포함하고, 상기 코드 요청은 프로세서에 의해 개시된다. 다른 개시된 방법들에서, 상기 코드 요청은 컴파일러 또는 이진 변환기 중 적어도 하나에 의해 개시된다. 또 다른 개시된 방법들에서, 상기 NV RAM 캐시는 바이트 레벨 액세스를 허용하고, 일부 개시된 방법들에서 상기 제1 조건은 액세스 빈도 카운트가 임계값을 초과하는 것을 포함하고, 상기 액세스 빈도 카운트에 대한 임계값을 설정하는 것은 제2 코드의 액세스 빈도 카운트 값에 기초하고, 그리고/또는 상기 액세스 빈도 카운트에 대한 임계값을 설정하는 것은 복수의 다른 코드와 연관된 액세스 빈도 카운트 값에 기초한다. 일부 예시적인 방법들은 상기 제1 조건이 액세스 빈도 카운트, 변환 시간, 코드 사이즈, 또는 캐시 액세스 레이턴시 중 적어도 하나를 갖는 것을 포함한다. 다른 예시적인 방법들은 상기 제1 코드를 상기 NV RAM 캐시에 추가하기 전에 이진 변환기를 이용해 상기 제1 코드를 컴파일하는 것을 포함하고, 또 다른 예시적인 방법들은 상기 제1 코드에 대한 프로세서 요청들의 수를 추적하는 것을 포함하고, 상기 제1 코드는 상기 제1 코드에 대한 요청들의 수에 기초하여 상기 NV RAM 캐시에 추가된다. 또 다른 방법들은 상기 NV RAM 캐시에 대한 기입 동작들의 수를 추적하는 것을 포함하고, 상기 NV RAM 캐시에 대한 기입 동작들의 수가 수명 최대 기입 수와 연관된 임계 기입 값을 초과하는 경우 경보를 발생시킨다. 예시적인 개시된 방법들은 또한 상기 제1 코드가 제1 레벨 캐시에 없는 경우 상기 NV RAM 캐시로의 저장 시도를 무효화하는 것을 포함하고, 상기 NV RAM 캐시로의 저장 시도는 최저 사용 빈도(least recently used) 저장 정책과 연관되어 있다.
비휘발성 메모리에 코드를 캐싱하는 예시적인 장치는 컴파일된 코드를 저장하는 제1 레벨 캐시, 컴파일된 코드를 저장하는 제2 레벨 비휘발성(NV) 랜덤 액세스 메모리(RAM) 캐시, 및 컴파일된 코드가 임계값 빈도보다 더 큰 빈도로 액세스된다면 NV RAM에의 컴파일된 코드의 저장을 허용하고, 임계값 빈도가 충족되지 않는다면 NV RAM에의 컴파일된 코드의 저장을 차단하는 캐시 인터페이스를 포함한다. 일부 개시된 장치는 동적 랜덤 액세스 메모리를 갖는 제1 레벨 캐시를 포함한다. 다른 예시적인 개시된 장치는 NV RAM 캐시와 연관된 기대 수명 기입 카운트 값을 NV RAM 캐시의 기입 카운트 인스턴스들의 현재 개수와 비교하는 프로파일 관리자를 포함한다. 또 다른 개시된 장치는 NV RAM 캐시에 대한 기입 카운트 인스턴스들의 빈도를 줄이기 위해 제2 조건과 연관된 임계값을 설정하는 조건 임계값 엔진을 포함한다.
일부 개시된 예시적인 기계 판독가능 저장 매체들은, 실행될 때, 기계로 하여금, 제1 코드의 코드 요청의 인스턴스를 식별하고, 제1 코드가 비휘발성(NV) 랜덤 액세스 메모리(RAM) 캐시에 저장되어 있는지를 식별하고, 제1 코드가 NV RAM 캐시에 없는 경우, 제1 코드와 연관된 제1 코드가 충족되는 경우에는 제1 코드를 NV RAM 캐시에 추가하고 제1 조건이 충족되지 않는 경우에는 NV RAM 캐시로의 상기 제1 코드의 저장을 방지하게 하는 명령어들을 포함한다. 일부 예시적인 기계 판독가능 저장 매체들은 제1 조건이 충족되지 않는 경우 제1 조건과 제2 조건에 대응하는 합계 임계값이 충족되는지를 판정하는 것을 포함하는 반면, 다른 것들은 NV RAM 캐시를 통한 바이트 레벨 액세스를 허용하는 것을 포함한다. 다른 개시된 기계 판독가능 저장 매체들은 제1 조건이 임계값 카운트 액세스 빈도를 초과하는 때를 식별하는 것을 포함하고, 액세스 빈도 카운트에 대한 임계값을 설정하는 것은 제2 코드의 액세스 빈도 카운트 값에 기초한다. 또 다른 개시된 예시적인 기계 판독가능 저장 매체들은 복수의 다른 코드와 연관된 액세스 빈도 카운트 값에 기초하여 액세스 빈도 카운트에 대한 임계값을 설정하는 것을 포함하는 반면, 다른 것들은 제1 코드에 대한 프로세서 요청들의 수를 추적하는 것을 포함한다. 다른 개시된 기계 판독가능 저장 매체들은 제1 코드에 대한 요청들의 수에 기초하여 제1 코드를 상기 NV RAM 캐시에 추가하는 것을 포함하고, 다른 것들은 NV RAM 캐시에 대한 기입 동작들의 수를 추적하는 것을 포함하고, 기계는 NV RAM 캐시에 대한 기입 동작들의 수가 수명 최대 기입 수와 연관된 임계 기입 값을 초과하는 경우 경보를 발생시킨다. 일부 개시된 기계 판독가능 저장 매체들은 제1 코드가 제1 레벨 캐시에 없는 경우 NV RAM 캐시로의 저장 시도를 무효화하는 것을 포함한다.
특정 예시적인 방법들, 장치들 및 제조 물품들이 본 명세서에 기술되었지만, 이 특허의 적용 범위는 이들에 제한되지 않는다. 오히려, 이 특허는 명백히 이 특허의 특허청구범위 안에 있는 모든 방법들, 장치들 및 제조 물품들을 포함한다.

Claims (31)

  1. 코드를 캐싱하는 방법으로서,
    제1 코드에 대한 코드 요청의 인스턴스를 식별하는 단계;
    상기 제1 코드가 비휘발성(NV) 랜덤 액세스 메모리(RAM) 캐시에 저장되어 있는지를 식별하는 단계; 및
    상기 제1 코드가 상기 NV RAM 캐시에 없는 경우, 상기 제1 코드와 연관된 제1 조건이 충족되는 경우에는 상기 제1 코드를 상기 NV RAM 캐시에 추가하고 상기 제1 조건이 충족되지 않는 경우에는 상기 NV RAM 캐시로의 상기 제1 코드의 저장을 방지하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서, 상기 제1 조건이 충족되지 않는 경우 상기 제1 조건과 제2 조건에 대응하는 합계 임계값(aggregate threshold)이 충족되는지를 판정하는 단계를 더 포함하는 방법.
  3. 제1항에 있어서, 상기 코드 요청은 프로세서에 의해 개시되는 방법.
  4. 제1항에 있어서, 상기 코드 요청은 컴파일러 또는 이진 변환기 중 적어도 하나에 의해 개시되는 방법.
  5. 제1항에 있어서, 상기 NV RAM 캐시는 바이트 레벨 액세스를 허용하는 방법.
  6. 제1항에 있어서, 상기 제1 조건은 액세스 빈도 카운트가 임계값을 초과하는 것을 포함하는 방법.
  7. 제6항에 있어서, 제2 코드의 액세스 빈도 카운트 값에 기초하여 상기 액세스 빈도 카운트에 대한 임계값을 설정하는 단계를 더 포함하는 방법.
  8. 제6항에 있어서, 복수의 다른 코드와 연관된 액세스 빈도 카운트 값에 기초하여 상기 액세스 빈도 카운트에 대한 임계값을 설정하는 단계를 더 포함하는 방법.
  9. 제1항에 있어서, 상기 제1 조건은 액세스 빈도 카운트, 변환 시간, 코드 사이즈, 또는 캐시 액세스 레이턴시 중 적어도 하나를 포함하는 방법.
  10. 제1항에 있어서, 상기 제1 코드를 상기 NV RAM 캐시에 추가하기 전에 이진 변환기를 이용해 상기 제1 코드를 컴파일하는 단계를 더 포함하는 방법.
  11. 제1항에 있어서, 상기 제1 코드에 대한 프로세서 요청들의 수를 추적하는 단계를 더 포함하는 방법.
  12. 제11항에 있어서, 상기 제1 코드에 대한 요청들의 수에 기초하여 상기 제1 코드를 상기 NV RAM 캐시에 추가하는 단계를 더 포함하는 방법.
  13. 제1항에 있어서, 상기 NV RAM 캐시에 대한 기입 동작들의 수를 추적하는 단계를 더 포함하는 방법.
  14. 제13항에 있어서, 상기 NV RAM 캐시에 대한 기입 동작들의 수가 수명 최대 기입 수(lifetime maximum number of writes)와 연관된 임계 기입 값을 초과하는 경우 경보를 발생시키는 단계를 더 포함하는 방법.
  15. 제1항에 있어서, 상기 제1 코드가 제1 레벨 캐시에 없는 경우 상기 NV RAM 캐시로의 저장 시도를 무효화하는 단계를 더 포함하는 방법.
  16. 제15항에 있어서, 상기 NV RAM 캐시로의 저장 시도는 최저 사용 빈도(least recently used) 저장 정책과 연관되어 있는 방법.
  17. 동적으로 컴파일된 코드를 저장하는 장치로서,
    상기 컴파일된 코드를 저장하는 제1 레벨 캐시;
    상기 컴파일된 코드를 저장하는 제2 레벨 비휘발성(NV) 랜덤 액세스 메모리(RAM) 캐시; 및
    상기 컴파일된 코드가 임계값 빈도보다 더 큰 빈도로 액세스된다면 상기 NV RAM에의 상기 컴파일된 코드의 저장을 허용하고, 상기 임계값 빈도가 충족되지 않는다면 상기 NV RAM에의 상기 컴파일된 코드의 저장을 차단하는 캐시 인터페이스
    를 포함하는 장치.
  18. 제17항에 있어서, 상기 제1 레벨 캐시는 동적 랜덤 액세스 메모리를 포함하는 장치.
  19. 제17항에 있어서, 상기 NV RAM 캐시와 연관된 기대 수명 기입 카운트 값을 상기 NV RAM 캐시의 기입 카운트 인스턴스들의 현재 개수와 비교하는 프로파일 관리자를 더 포함하는 장치.
  20. 제19항에 있어서, 상기 NV RAM 캐시에 대한 기입 카운트 인스턴스들의 빈도를 줄이기 위해 제2 조건과 연관된 임계값을 설정하는 조건 임계값 엔진을 더 포함하는 장치.
  21. 명령어들을 포함하는 유형의(tangible) 기계 판독가능 저장 매체로서,
    상기 명령어들은, 실행될 때, 기계로 하여금, 적어도,
    제1 코드에 대한 코드 요청의 인스턴스를 식별하고;
    상기 제1 코드가 비휘발성(NV) 랜덤 액세스 메모리(RAM) 캐시에 저장되어 있는지를 식별하고;
    상기 제1 코드가 상기 NV RAM 캐시에 없는 경우, 상기 제1 코드와 연관된 제1 코드가 충족되는 경우에는 상기 제1 코드를 상기 NV RAM 캐시에 추가하고 상기 제1 조건이 충족되지 않는 경우에는 상기 NV RAM 캐시로의 상기 제1 코드의 저장을 방지하게 하는
    기계 판독가능 저장 매체.
  22. 제21항에 있어서, 상기 명령어들은, 실행될 때, 기계로 하여금 상기 제1 조건이 충족되지 않는 경우 상기 제1 조건과 제2 조건에 대응하는 합계 임계값이 충족되는지를 판정하게 하는 기계 판독가능 저장 매체.
  23. 제21항에 있어서, 상기 명령어들은, 실행될 때, 기계로 하여금 상기 NV RAM 캐시를 통한 바이트 레벨 액세스를 허용하게 하는 기계 판독가능 저장 매체.
  24. 제21항에 있어서, 상기 명령어들은, 실행될 때, 기계로 하여금 상기 제1 조건이 임계값 카운트 액세스 빈도를 초과하는 때를 식별하게 하는 기계 판독가능 저장 매체.
  25. 제24항에 있어서, 상기 명령어들은, 실행될 때, 기계로 하여금 제2 코드의 액세스 빈도 카운트 값에 기초하여 상기 액세스 빈도 카운트에 대한 임계값을 설정하게 하는 기계 판독가능 저장 매체.
  26. 제24항에 있어서, 상기 명령어들은, 실행될 때, 기계로 하여금 복수의 다른 코드와 연관된 액세스 빈도 카운트 값에 기초하여 상기 액세스 빈도 카운트에 대한 임계값을 설정하게 하는 기계 판독가능 저장 매체.
  27. 제21항에 있어서, 상기 명령어들은, 실행될 때, 기계로 하여금 상기 제1 코드에 대한 프로세서 요청들의 수를 추적하게 하는 기계 판독가능 저장 매체.
  28. 제27항에 있어서, 상기 명령어들은, 실행될 때, 기계로 하여금 상기 제1 코드에 대한 요청들의 수에 기초하여 상기 제1 코드를 상기 NV RAM 캐시에 추가하게 하는 기계 판독가능 저장 매체.
  29. 제21항에 있어서, 상기 명령어들은, 실행될 때, 기계로 하여금 상기 NV RAM 캐시에 대한 기입 동작들의 수를 추적하게 하는 기계 판독가능 저장 매체.
  30. 제29항에 있어서, 상기 명령어들은, 실행될 때, 기계로 하여금 상기 NV RAM 캐시에 대한 기입 동작들의 수가 수명 최대 기입 수와 연관된 임계 기입 값을 초과하는 경우 경보를 발생시키게 하는 기계 판독가능 저장 매체.
  31. 제21항에 있어서, 상기 명령어들은, 실행될 때, 기계로 하여금 상기 제1 코드가 제1 레벨 캐시에 없는 경우 상기 NV RAM 캐시로의 저장 시도를 무효화하게 하는 기계 판독가능 저장 매체.
KR1020157001860A 2012-09-28 2013-09-19 비휘발성 메모리에 코드를 캐싱하는 방법들, 시스템들 및 장치 KR101701068B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/630,651 2012-09-28
US13/630,651 US20140095778A1 (en) 2012-09-28 2012-09-28 Methods, systems and apparatus to cache code in non-volatile memory
PCT/US2013/060624 WO2014052157A1 (en) 2012-09-28 2013-09-19 Methods, systems and apparatus to cache code in non-volatile memory

Publications (2)

Publication Number Publication Date
KR20150036176A true KR20150036176A (ko) 2015-04-07
KR101701068B1 KR101701068B1 (ko) 2017-01-31

Family

ID=50386348

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157001860A KR101701068B1 (ko) 2012-09-28 2013-09-19 비휘발성 메모리에 코드를 캐싱하는 방법들, 시스템들 및 장치

Country Status (6)

Country Link
US (1) US20140095778A1 (ko)
EP (1) EP2901289A4 (ko)
JP (1) JP5989908B2 (ko)
KR (1) KR101701068B1 (ko)
CN (1) CN104662519B (ko)
WO (1) WO2014052157A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11164078B2 (en) * 2017-11-08 2021-11-02 International Business Machines Corporation Model matching and learning rate selection for fine tuning

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103581052B (zh) * 2012-08-02 2017-07-21 华为技术有限公司 一种数据处理方法、路由器及ndn系统
WO2015099756A1 (en) * 2013-12-27 2015-07-02 Mcafee, Inc. Frequency-based reputation
US9268543B1 (en) 2014-09-23 2016-02-23 International Business Machines Corporation Efficient code cache management in presence of infrequently used complied code fragments
JP2016170682A (ja) * 2015-03-13 2016-09-23 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US9811324B2 (en) * 2015-05-29 2017-11-07 Google Inc. Code caching system
US10282182B2 (en) * 2016-09-23 2019-05-07 Intel Corporation Technologies for translation cache management in binary translation systems
US10599985B2 (en) * 2017-09-01 2020-03-24 Capital One Services, Llc Systems and methods for expediting rule-based data processing
JP6881330B2 (ja) * 2018-01-24 2021-06-02 京セラドキュメントソリューションズ株式会社 電子機器及びメモリー制御プログラム
US11372764B2 (en) 2019-11-14 2022-06-28 International Business Machines Corporation Single-copy cache using heterogeneous memory types
US11210227B2 (en) * 2019-11-14 2021-12-28 International Business Machines Corporation Duplicate-copy cache using heterogeneous memory types
CN111258656B (zh) * 2020-01-20 2022-06-28 展讯通信(上海)有限公司 数据处理装置及终端
JPWO2023013649A1 (ko) * 2021-08-06 2023-02-09
CN114138333B (zh) * 2021-11-27 2023-04-18 深圳曦华科技有限公司 程序加载的方法及相关装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100023681A1 (en) * 2004-05-07 2010-01-28 Alan Welsh Sinclair Hybrid Non-Volatile Memory System
US20110145918A1 (en) * 2009-12-15 2011-06-16 Jaeyeon Jung Sensitive data tracking using dynamic taint analysis
US20110179219A1 (en) * 2004-04-05 2011-07-21 Super Talent Electronics, Inc. Hybrid storage device
US20120066439A1 (en) * 2010-09-09 2012-03-15 Fusion-Io, Inc. Apparatus, system, and method for managing lifetime of a storage device

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5175842A (en) * 1988-05-31 1992-12-29 Kabushiki Kaisha Toshiba Data storage control system capable of reading data immediately after powered on
JP3766181B2 (ja) * 1996-06-10 2006-04-12 株式会社東芝 半導体記憶装置とそれを搭載したシステム
WO2003042837A1 (fr) * 2001-11-16 2003-05-22 Renesas Technology Corp. Circuit integre semi-conducteur
JP3642772B2 (ja) * 2002-09-25 2005-04-27 三菱電機株式会社 コンピュータ装置及びプログラム実行方法
US7231497B2 (en) * 2004-06-15 2007-06-12 Intel Corporation Merging write-back and write-through cache policies
US7882499B2 (en) * 2005-10-24 2011-02-01 Microsoft Corporation Caching dynamically compiled code to storage
WO2007056669A2 (en) * 2005-11-04 2007-05-18 Sandisk Corporation Enhanced first level storage cache using nonvolatile memory
US7568189B2 (en) * 2006-05-03 2009-07-28 Sony Computer Entertainment Inc. Code translation and pipeline optimization
US7568068B2 (en) 2006-11-13 2009-07-28 Hitachi Global Storage Technologies Netherlands B. V. Disk drive with cache having volatile and nonvolatile memory
JP4575346B2 (ja) * 2006-11-30 2010-11-04 株式会社東芝 メモリシステム
US7975107B2 (en) * 2007-06-22 2011-07-05 Microsoft Corporation Processor cache management with software input via an intermediary
US8321850B2 (en) * 2008-06-06 2012-11-27 Vmware, Inc. Sharing and persisting code caches
US8433854B2 (en) * 2008-06-25 2013-04-30 Intel Corporation Apparatus and method for cache utilization
CN102473140B (zh) * 2009-07-17 2015-05-13 株式会社东芝 存储器管理装置
JP2011059777A (ja) * 2009-09-07 2011-03-24 Toshiba Corp タスクスケジューリング方法及びマルチコアシステム
JP5520747B2 (ja) * 2010-08-25 2014-06-11 株式会社日立製作所 キャッシュを搭載した情報装置及びコンピュータ読み取り可能な記憶媒体
KR101717081B1 (ko) * 2011-03-23 2017-03-28 삼성전자주식회사 비휘발성 램과 휘발성 램을 버퍼 메모리로 사용하는 저장 장치
US8539463B2 (en) * 2011-07-28 2013-09-17 Qualcomm Innovation Center, Inc. Apparatus and method for improving the performance of compilers and interpreters of high level programming languages

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110179219A1 (en) * 2004-04-05 2011-07-21 Super Talent Electronics, Inc. Hybrid storage device
US20100023681A1 (en) * 2004-05-07 2010-01-28 Alan Welsh Sinclair Hybrid Non-Volatile Memory System
US20110145918A1 (en) * 2009-12-15 2011-06-16 Jaeyeon Jung Sensitive data tracking using dynamic taint analysis
US20120066439A1 (en) * 2010-09-09 2012-03-15 Fusion-Io, Inc. Apparatus, system, and method for managing lifetime of a storage device

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11164078B2 (en) * 2017-11-08 2021-11-02 International Business Machines Corporation Model matching and learning rate selection for fine tuning

Also Published As

Publication number Publication date
EP2901289A1 (en) 2015-08-05
CN104662519B (zh) 2020-12-04
EP2901289A4 (en) 2016-04-13
CN104662519A (zh) 2015-05-27
WO2014052157A1 (en) 2014-04-03
US20140095778A1 (en) 2014-04-03
KR101701068B1 (ko) 2017-01-31
JP5989908B2 (ja) 2016-09-07
JP2015525940A (ja) 2015-09-07

Similar Documents

Publication Publication Date Title
KR101701068B1 (ko) 비휘발성 메모리에 코드를 캐싱하는 방법들, 시스템들 및 장치
Weiner et al. TMO: Transparent memory offloading in datacenters
US7707359B2 (en) Method and apparatus for selectively prefetching based on resource availability
US7502890B2 (en) Method and apparatus for dynamic priority-based cache replacement
US7934114B2 (en) Method of controlling information processing device, information processing device, program, and program converting method
CA2680601C (en) Managing multiple speculative assist threads at differing cache levels
CN112396172A (zh) 用于管理深度学习加速器系统的功率的方法与装置
US9218206B2 (en) Memory management model and interface for new applications
US20180300258A1 (en) Access rank aware cache replacement policy
US20220075736A1 (en) Dynamic application of software data caching hints based on cache test regions
JP2003196108A (ja) 動的コードキャッシングおよび変形を通してコンピュータシステムのエミュレーションをサポートするシステムおよび方法
KR20140035416A (ko) 강화된 어플리케이션 메타데이터를 갖는 메모리 매니저
US20120324197A1 (en) Memory management model and interface for unmodified applications
Liang et al. Acclaim: Adaptive memory reclaim to improve user experience in android systems
Kim et al. Application-aware swapping for mobile systems
KR20100005539A (ko) 캐시 메모리 시스템 및 캐시의 프리페칭 방법
WO2018125408A1 (en) Automatic identification and generation of non-temporal store and load operations in a dynamic optimization environment
US20230315627A1 (en) Cache line compression prediction and adaptive compression
CN112654965A (zh) 动态模块的外部分页和交换
Kim et al. Integrated {Host-SSD} Mapping Table Management for Improving User Experience of Smartphones
US20230297382A1 (en) Cache line compression prediction and adaptive compression
KR20130114023A (ko) 멀티 프로세서 시스템 온 칩에서의 메모리 관리 방법
US11971889B2 (en) Intelligent query plan cache size management
Liu et al. OKAM: A Linux Application Manager Based on Hierarchical Freezing Technology
CN114968076A (zh) 用于存储管理的方法、设备、介质和程序产品

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
X701 Decision to grant (after re-examination)
GRNT Written decision to grant