KR20190105507A - 부채널 공격으로부터 캐시를 보호하는 시스템 - Google Patents
부채널 공격으로부터 캐시를 보호하는 시스템 Download PDFInfo
- Publication number
- KR20190105507A KR20190105507A KR1020190022577A KR20190022577A KR20190105507A KR 20190105507 A KR20190105507 A KR 20190105507A KR 1020190022577 A KR1020190022577 A KR 1020190022577A KR 20190022577 A KR20190022577 A KR 20190022577A KR 20190105507 A KR20190105507 A KR 20190105507A
- Authority
- KR
- South Korea
- Prior art keywords
- cache
- cache line
- access
- memory
- index value
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1416—Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1458—Protection against unauthorised use of memory or access to memory by checking the subject access rights
- G06F12/1483—Protection against unauthorised use of memory or access to memory by checking the subject access rights using an access-table, e.g. matrix or list
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1458—Protection against unauthorised use of memory or access to memory by checking the subject access rights
- G06F12/1466—Key-lock mechanism
- G06F12/1475—Key-lock mechanism in a virtual system, e.g. with translation means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/084—Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0891—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
- G06F12/0897—Caches characterised by their organisation or structure with two or more cache hierarchy levels
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
- G06F12/1045—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/78—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1052—Security improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/68—Details of translation look-aside buffer [TLB]
- G06F2212/683—Invalidation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
Abstract
데이터에 액세스하는 방법에 개시된다. 액세스하는 방법은, 캐시에 저장된 캐시 라인에 대한 액세스 허용을 버퍼에 저장하는 단계, 액세스 허용의 적어도 일부에 기초하여, 캐시 라인에 대한 메모리 명령의 캐시 라인에 대한 액세스가 허용되는지를 결정하는 단계, 및 메모리 명령의 캐시 라인에 대한 액세스가 거절되면, 캐시의 변경을 차단하는 것을 포함한다.
Description
본 개시의 기술적 사상은 데이터에 액세스 하는 시스템에 관한 것으로, 구체적으로는 캐시들의 보안성을 향상시키는 메커니즘 및 기술에 관한 것이다.
오늘날의 프로세서는 종종 대용량 메모리에 저장된 데이터 및 명령어의 사본을 저장할 수있는 캐시를 갖추고 있다. 이러한 대용량 메모리의 보편적 인 예는 다이나믹 랜덤 액세스 메모리 (DRAM)이다. 여기서, "메모리"라는 용어는 모든 기존 및 미래의 메모리 구현을 집합 적으로 지칭하는데 사용된다. 캐시 메모리(간략하게 "캐시")는 다른 메모리 구현보다 훨씬 작고 훨씬 빠른 메모리로 만들어지며 이후에는 주 메모리 또는 보조 저장 장치에 저장된 데이터의 일부만을 특정 시점에 저장할 수 있다. 오늘날 캐시는 종종 SRAM을 사용하여 구현되며 대용량 캐시는 DRAM을 사용하여 구현 될 수 있다. 여기에 설명 된 캐시는 임의의 기존 및 미래의 메모리 기술을 사용하여 구현 될 수 있다. 프로세서의 아키텍쳐적 정의는 보안 공격으로부터 안전하도록 향상된 보고 기능을 제공하는 것이 포함될 수 있으나, 캐시 구현과 같은 많은 종속된 기능들(예를 들어, 마이크로 아키텍쳐)에는 보호 기능이 포함되지 않아 공격으로부터 취약할 수 있다.
본 개시의 기술적 사상이 해결하려는 과제는, 보안 공격으로부터 안전할 수 있도록 보안성이 향상된 멀티 프로세서 시스템을 제공하는 데에 있다.
상기와 같은 목적을 달성하기 위하여, 본 개시의 기술적 사상의 일측면에 따른 데이터에 액세스하는 방법은, 캐시에 저장된 캐시 라인에 대한 액세스 허용을 버퍼에 저장하는 단계, 액세스 허용의 적어도 일부에 기초하여, 캐시 라인에 대한 메모리 명령의 캐시 라인에 대한 액세스가 허용되는지를 결정하는 단계, 및 메모리 명령의 캐시 라인에 대한 액세스가 거절되면, 캐시의 변경을 차단하는 것을 포함할 수 있다.
본 개시의 기술적 사상의 일측면에 따른 시스템은, 캐시 라인을 저장하는 캐시, 및 적어도 하나의 프로세서를 포함하고, 적어도 하나의 프로세서는 캐시 라인에 대한 액세스 허용을 버퍼에 저장하고, 액세스 허용의 적어도 일부에 기초하여, 캐시 라인에 대한 메모리 명령의 캐시 라인에 대한 액세스가 허용되는지를 결정하고, 메모리 명령의 캐시 라인에 대한 액세스가 거절되면 캐시의 변경을 차단할 수 있다.
본 개시의 기술적 사상의 일측면에 따른 프로세서에 의해 수행되는 명령들이 기록된 비일시적 컴퓨터 판독 가능한 기록 매체에 있어서, 명령들이 수행될 때 프로세서가 수행하는 동작들은, 캐시에 저장된 캐시 라인에 대한 액세스 허용을 버퍼에 저장하고, 액세스 허용의 적어도 일부에 기초하여 캐시 라인에 대한 메모리 명령의 캐시 라인에 대한 액세스가 허용되는지를 결정하고, 메모리 명령의 캐시 라인에 대한 액세스가 거절되면, 캐시의 변경을 차단하는 것을 포함할 수 있다.
본 개시의 기술적 사상에 따른 시스템은, 캐시 라인에 대한 액세스 허용을 버퍼에 저장함으로써, 캐시 라인에 대한 메모리 명령에 의한 액세스를 허용할 지를 판단할 수 있고 캐시를 보호할 수 있다. 또한, 버퍼에 랜덤 인덱스 값을 도입함으로써, 추측적으로 로드된 데이터에 히트하는 것을 감소시키거나 추측성 로드들로부터 야기된 축출로부터 배우는 것을 어렵게 할 수 있고, 외부의 공격으로부터 캐시를 보호할 수 있다.
캐시 시스템을 설계할 때, 부채널 공격과 같은 보안 공격에 대한 취약점을 회피하는 것이 중요할 수 있다. 이하에 제시된 실시예는 보안 공격에 대해 안전할 수 있도록 하는 아키텍쳐를 만드는 솔루션을 제공할 수 있다.
도 1은 멀티-프로세서 시스템의 일 예를 나타내는 블록도이다.
도 2는 캐시 계층을 포함하는 단일-프로세서 시스템의 예를 나타내는 단면도이다.
도 3은 셋 연관 데이터 변환 주위 버퍼(translation look-aside buffer, TLB) 및 셋 연관 캐시를 포함하는 2-레벨 캐시 계층의 종래의 구성을 나타내는 블록도이다.
도 4는 2-레벨 캐시 계층 및 2-레벨 캐시 위치 버퍼(cache location buffer, CLB) 계층을 포함하는시스템의 일 예를 도시한 블록도이다.
도 5는 본 개시의 일 실시예에 따라 2-레벨 캐시 계층 및 2-레벨 캐시 위치 버퍼(cache location buffer, CLB)와 연결되는 2개의 CPU들을 포함하는 시스템의 일 예를 나타내는 블록도이다.
도 6은 도 4의 캐시 위치 버퍼(CLB)의 확장된 일 구현 예를 도시한 블록도이다.
도 7은 도 3의 변환 주위 버퍼(TLB)의 확장된 일 구현 예를 도시한 블록도이다.
도 2는 캐시 계층을 포함하는 단일-프로세서 시스템의 예를 나타내는 단면도이다.
도 3은 셋 연관 데이터 변환 주위 버퍼(translation look-aside buffer, TLB) 및 셋 연관 캐시를 포함하는 2-레벨 캐시 계층의 종래의 구성을 나타내는 블록도이다.
도 4는 2-레벨 캐시 계층 및 2-레벨 캐시 위치 버퍼(cache location buffer, CLB) 계층을 포함하는시스템의 일 예를 도시한 블록도이다.
도 5는 본 개시의 일 실시예에 따라 2-레벨 캐시 계층 및 2-레벨 캐시 위치 버퍼(cache location buffer, CLB)와 연결되는 2개의 CPU들을 포함하는 시스템의 일 예를 나타내는 블록도이다.
도 6은 도 4의 캐시 위치 버퍼(CLB)의 확장된 일 구현 예를 도시한 블록도이다.
도 7은 도 3의 변환 주위 버퍼(TLB)의 확장된 일 구현 예를 도시한 블록도이다.
이하, 첨부한 도면을 참조하여 본 발명의 실시예에 대해 상세히 설명한다.
종종, 컴퓨터 시스템의 메모리 시스템은 메인 메모리에 가까우며, 용량이 크고 느린 캐시(이하, 하이 레벨 캐시) 및 프로세서에 가까우며, 용량이 작고 빠른 캐시(이하, 로우 레벨 캐시)를 포함할 수 있다. 이러한 캐시의 구성은 일반적으로 캐시 계층, 메모리 계층 또는 메모리 시스템이라고 지칭할 수 있다. 캐시 계층의 각 레벨은 캐시 레벨로 지칭할 수 있다.
하기의 실시예들은 첨부된 도면들을 참조할 수 있다. 상이한 도면에서 동일한 참조 번호는 동일하거나 유사한 요소를 지시할 수 있다. 이하의 상세한 설명들은 본 개시를 제한하지 않는다. 이하의 실시예들 중 일부는 설명의 간략화를 위해 특정 캐시 계층 구조의 용어 및 구조, 및 이러한 계층 구조에서 룩업을 수행하는 방법과 관련하여 설명될 수 있다. 다만, 이하의 실시예들은 이러한 구성에 한정되지 않고, 다른 구성으로 확장될 수 있다.
본 명세서에 설명된 실시예는 하나의 실시예와 관련하여 설명된 특정 특징들이 포함될 수 있음을 의미할 수 있다. 따라서, 명세서 전체에 걸쳐 설명되는 “실시예”의 문구는 동일한 실시예를 설명하는 것은 아니며, 특정한 특징들이 하나 이상의 실시예에서 임의의 적절한 방식으로 결합될 수 있다.
캐시 시스템을 설계할 때, 부채널 공격(side-channel attack)과 같은 보안 공격에 대한 취약점을 회피하는 것이 중요할 수 있다. 이하에 제시된 실시예는 보안 공격에 대해 안전할 수 있도록 하는 아키텍쳐를 만드는 솔루션을 제공할 수 있다.
도 1은 멀티-프로세서 시스템의 일 예를 나타내는 블록도이다. 도 1에 예시적으로 도시된 컴퓨터 시스템은 각의 CPU(101)가 자신의 제1 레벨 프라이빗 캐시(102, L1 cache)를 할당받는 멀티 프로세서 시스템이다. CPU(101) 및 L1 캐시(102)에 대한 구체적인 실시예는 도 2를 참조하여, 후술하겠다.
도 1을 참조하면, 프라이빗 캐시는 데이터 유닛을 위한 공간이 있으며, 프라이빗 캐시가 할당된 CPU(또는 캐시와 동일한 노드에 있는 CPU, 프라이빗 캐시는 해당 노드에 대해 전용)의 CPU 활동들에 의해서 응답할 수 있는 캐시이다. 일 예로, 제2 레벨 캐시(103)는 모든 CPU(101)에 의해 공유되고 모든 CPU(101)에 의해 액세스되는 데이터 및 커맨드를 포함할 수 있다. 제2 레벨 캐시(103)는 글로벌 캐시로서 모든 CPU(101)의 활동들에 의해 응답하여 데이터 유닛을 위한 공간이 생성될 수 있다. 게다가, 제2 레벨 캐시(103)는 공유된 캐시이기 때문에 각각의 데이터 유닛은 하나의 공유된 카피(copy)에 존재할 수 있다. 반면 각 프라이빗 캐시는 각각 자신의 복제 카피를 가질 수 있다. 또한, 메모리(105)(또는, 메인 메모리)는 모든 CPU(101)에 액세스되는 데이터 및 커맨드를 저장할 수 있다. CPU(101)에 의해 생성된 어드레스는 가상 어드레스일 수 있으며, 메모리(105)는 물리적 어드레스에 의해 액세스될 수 있다.
도 1에 도시된 바와 같이, 복수의 CPU(101) 및 프라이빗 캐시를 갖는 컴퓨터 시스템은 복수의 캐시들(102, 103) 중 어느 하나에서 요청된 데이터 유닛을 찾고, 상이한 노드들에 저장된 데이터의 다수의 카피들을 일관성있게 유지하기 위한 효율적인 메커니즘을 필요로 할 수 있다.
CPU(101)는 일반적으로 캐시 및 메모리에 액세스할 수 있는 것보다 더 빠르게 명령들(instructions)을 실행할 수 있다. 이를 보완하기 위해 CPU(101)는 일반적으로 추측 동작을 수행한다. 일 예로, 추측 동작은 잘못된 경로일 수 있는 실행 경로 중에서 명령의 실행이 시작되거나, 프로그램 순서와 다른 순서로 인스트럭선을 실행하거나 데이터에 대한 첫번째 요청 이전에 캐시로 데이터를 프리페치하는 것을 포함할 수 있다.
현대의 프로세서는 사용 중인 기능 유닛 또는 메모리 액세스 레이턴시로 인한 레이턴시를 숨시기 위해 순서에 관계없이 독립적인 명령을 실행할 수 있다. 스톨보다는, 프로세서는 사용 가능한 기능 단위에 대한 명령 스트림의 연속적인 동작들을 스케쥴링하는 것을 시도할 수 있다. 완료 시에, 명령들은 리오더 버퍼(reorder buffer, ROB)에 인큐될 수 있다. 명령들은 공식적으로 수행되고, 명령들이 ROB에서 중단될 때, 시스템의 다른 코어들이 외부에서 보이게 될 수 있다. 모든 요청된 이전 명령들이 중단될 때 명령들은 단지 ROB에서 중단될 수 있다.
프로세서는 또한 프로그램에서 페치하기 위한 다음 명령 또는 로드에 의해 리턴되어야 하는 값을 추측할 수 있다. 때때로 프로세서는 프로그램의 다음 명령을 실행해야하는지 여부를 즉시 판별하지 못할 수 있다. 이는 가상 어드레스를 물리적 어드레스로 변환할 때, 및 연속적으로 위치의 액세스 허용을 체크할 때의 지연으로 인해 발생될 수 있다. 예를 들어, 프로그램의 다음 명령이 읽기 동작을 통해 메모리 위치 A에 엑세스하려고 시도할 때, 프로그램에 권한이 있는지 여부를 확인하는 데에 약간의 시간이 소요될 수 있다. 프로세서가 A를 읽을 수 있는 권한이 있는지 기다리는 동안, 첫번째 위치가 불법적인 것으로 결국 판단되면, 소프트웨어의 가시적인 효과를 소거(erase)하는 한 읽기 동작이 수행될 수 있다.
추측은 또한 잘못 예측된 브랜치(branch)로부터 야기될 수 있다. 브랜치 예측은 프로세서가 스쿼시된(squashed) 추측 명령들의 수를 감소시키기 위해 사용하는 기술일 수 있다. 최소한 브랜치들은 브랜치 타겟을 계산하는 것을 요구할 수 있다. 조건부 브랜치들은 브랜치 조건을 평가하고, 브랜치를 가져올지 여부를 결정할 수 있다. 관련성 있는 구성인 하드 웨어 중 하나인 브랜치 타겟 버퍼(branch target buffer, BTB)는 브랜치 타겟 어드레스들에서 최근에 수행된 브랜치 명령들의 어드레스들의 매핑을 저장할 수 있다. 최근 브렌치의 결과에 대한 기록을 유지하는 다른 하드웨어 구성은 브랜치의 실행 여부를 결정하는데에 사용될 수 있다.
CPU(101)가 디스크(104)에 저장된 데이터에 액세스하기를 원할 경우, 가상 메모리 시스템(미도시)은 페이지(page)라 불리는 데이터 청크(chunk)를 해당 페이지에 해당하는 가상 주소로부터 물리 주소로 변환할 수 있다. 일반적으로 "translation look-aside buffer" 또는 TLB라고하는 특별한 종류의 변환 캐시(미도시)는 가상 페이지에서 물리 페이지로의 변환 매핑을 캐시할 수 있다. 가상 메모리 시스템은 디스크(104)에 위치된 데이터의 일부를 메모리(105)에 저장하는 캐싱 시스템에 해당할 수 있다.
도 2는 캐시 계층을 포함하는 단일-프로세서 시스템의 일 예를 나타내는 블록도이다. 도 2는 CPU가 CPU 코어와 함께 커맨드 TLB 및 데이터 TLB와 같은 캐시형 구조를 포함하는 것으로 도 1에서 도시된 캐시의 구성보다 상세하게 나타낸 도면이다.
도 2를 참조하면, 도 1의 제1 레벨 캐시(102)는 CPU(204)와 제2 레벨 캐시들(207) 사이에 위치된 커맨드 캐시(200) 및 데이터 캐시(206)를 포함할 수 있다. 도 2의 컴퓨터 시스템은 유니-프로세서(하나의 프로세서)로서 도시되었으나, 도 2의 컴퓨터 시스템은 멀티 프로세서 시스템의 일부일 수 있다.
CPU(204)가 캐시 히트(cache hit)인 경우, 캐시에 존재하는 데이터를 요청할 때의 상기 요청은 캐시 미스(cache miss)인 경우, 캐시에 존재하지 않는 데이터에 대한 액세스보다 훨씬 빠르게 서비스 될 수 있다. CPU (204)에 의해 실행되는 애플리케이션들 중 캐시 미스가 더 적게 발생하는 애플리케이션은 캐시 미스가 더 많은 애플리케이션보다 더 신속하게 실행되고 에너지를 덜 소비할 수 있다. 따라서, 컴퓨터 시스템에서 캐시 미스를 피하기 위한 기술이 연구되고 있으며, 액세스 지연과 메모리 트랜잭션에 의해 소모되는 에너지를 줄이기 위해 캐시 히트 및 캐시 미스를 효율적으로 구현할 수있는 구현을 설계에 관하여도 연구가 진행되고 있다.
일반적으로 데이터는 캐시 라인으로 알려진 프로세서의 워드 크기보다 큰 고정 청크로서 캐시에 설치될 수 있다. 오늘날의 일반적인 캐시 라인 크기는 예를 들어 32, 64 및 128 바이트(byte)이지만, 이에 국한되지 않고, 보다 많은 캐시 라인 크기 및 더 작은 캐시 라인 크기가 다양하게 구현될 수 있다. 또한, 캐시 라인 크기는 캐시 구현 방식에 따라 가변적일 수 있다.
메모리(208)에서 데이터 배치(placement)를 조직하는(organize) 방법은 각각의 데이터 워드가 하나의 특정 캐시 라인에 상주(reside)하도록 정적으로 매핑되는 방식이다. 각 캐시는 일반적으로 세트로 알려진 각 캐시 라인이 상주할 수 있는 캐시 부분을 식별하는 인덱싱 기능을 가질 수 있다. 세트는 동시에 하나 이상의 캐시 라인을 저장할 공간을 포함할 수 있다. 세트가 보유할 수 있는 캐시 라인의 개수는 연관성(associativity)이라 정의될 수 있다. 하나의 캐시의 모든 세트에 대한 연관성은 동일할 수 있다. 이러한 캐시는 종종 세트 연관 캐시라고 지칭될 수 있다. 연관성은 세트 간에 다를 수 있으며, 캐시 라인을 보유할 수 있는 세트의 각 공간을 웨이라고 정의할 수 있다.
각 세트에 저장된 각 캐시 라인의 신원(또는, 식별 정보)을 결정하기 위해 캐시의 캐시 라인에는 각각 연관된 일부 식별자가 있을 수 있다. 이러한 식별자의 일반적인 예로는 어드레스 태그가 있을 수 있다. 캐시에서 특정 캐시 라인을 찾을 때 캐시의 어드레스를 사용하여 캐시 세트를 결정할 수 있다. 대응하는 세트의 캐시 라인의 어드레스 태그는 캐시 라인을 식별하는데 사용되는 어드레스의 태그 부분(예를 들어, 후술될 도 3에 도시되고 아래에 설명된 TAG 및 ATAG를 참조)과 비교되어 원하는 캐시 라인이 어느 캐시에 상주하는지를 결정할 수 있다. 또한, 어드레스 태그는 어떤 방식으로 캐시 라인이 캐시에 상주하는지, 즉, 캐시 라인을 보유할 수 있는 세트의 공간 중 어느 공간에 있는지를 나타낼 수 있다. 일반적으로 이러한 ADDR 어드레스 태그의 크기는 상대적으로 클 수 있고, 30~40 비트 범위에 포함될 수 있으며, 일반적인 캐시 라인 크기의 6~10%일 수 있다.
각 캐시에는 세트에 유지할 캐시 라인과 축출(evict)(또는, 재배치)시킬 캐시 라인을 결정하여 기본 캐시 라인을 재배치 세트로 가져올 공간을 결정하는 빌트-인 전략들을 가질 수 있다. 재배치된 캐시 라인은 희생된 캐시 라인으로 지칭될 수 있다. 캐시 메모리와 함께 사용되는 재배치 정책에는 LRU(least-recently used), 의사 LRU 및 무작위 대체 정책이 포함될 수 있으며, 다만, 이에 국한되지는 않는다.
상기 포괄적 캐시 계층은 하나의 캐시 레벨(예를 들어 L1 캐시)의 데이터 블록에 존재하는 데이터 블록(예를 들어, 캐시 라인)의 카피는 L1 캐시보다 더 높은 하이 캐시 레벨(예를 들 L2 및 L3 캐시)의 데이터 블록에도 존재할 수 있다. 배타적 캐시 계층은 전체 캐시 계층에 존재하는 데이터 블록(예를 들면, 캐시 라인)의 카피를 하나만 가지며 비포괄적 캐시 계층는 상기 두 가지 전략이 혼합될 수 있다. 배타적이고 비포괄적 캐시 계층에서는 주어진 캐시 레벨에서 캐시 라인이 축출될 때, 축출되는 캐시 라인의 카피는 더 높은 캐시 레벨의 캐시 라인이 설치될 수 있다.
캐시 및 캐시 라인에 관한이 위의 서술 내용을 기반으로 도 1 및 도 2에 도시된 캐시 계층 내에서 특정 캐시 위치를 식별하는 방법을 이하 서술한다.
도 3은 셋 연관 데이터 변환 주위 버퍼(translation look-aside buffer, TLB) 및 셋 연관 캐시를 포함하는 2-레벨 캐시 계층의 종래의 구성을 나타내는 블록도이다. 도 3은 CPU(301), DTLB(303), L1 캐시(307) 및 L2 캐시(311)를 포함하는 컴퓨터 시스템의 노드의 구현 예를 나타내는 도면이다.
도 3을 참조하면, CPU(301)는 DTLB(303)에서 연관 룩업을 수행하는데 사용되는 가상 어드레스(VADDR, 302)를 포함하는 메모리 요청을 생성할 수 있다. 가상 어드레스(302)는 P-오프셋(P-OFFSET)(예를 들어, 가상 어드레스(302)의 하위 레벨 비트들로 구성), 태그(TAG) 및 인덱스(INDEX)로 구분될 수 있다. 가상 어드레스(302)의 인덱스(INDEX) 부분은 어드레스 변환이 저장될 수 있는 DTLB(303) 내의 세트를 식별하는데 사용될 수 있다.
도 3에서는 도시된 DTLB(303)는 식별된 세트의 2개의 엔트리를 나타내는 양방향 연관 구성을 가질 수 있다. 각 엔트리는 어드레스 태그(ATAG, 304) 및 물리적 페이지 프레임(PPF, 305)으로 구성될 수 있다. 가상 어드레스(302)의 태그(TAG) 부분은 식별된 세트의 각 엔트리의 ATAG(304)와 비교될 수 있다. 로직 (318)은 엔트리들 중 어느 하나에 대하여 태그(TAG) 부분과 ATAG(304)의 일치가 존재하는지를 결정하고, 일치하는 경우에는 일치하는 ATAG(304)에 대응하는 PPF(305)를 선택하도록 MUX(306)를 제어할 수 있다. 물리 어드레스(PADDR) (316)는 MUX(306)에 의해 선택된 PPF(305)를 가상 어드레스(302)의 P-오프셋(P-OFFSET) 부분과 연결함으로써 구성될 수 있다. 식별된 세트의 엔트리들 중 모든 엔트리들이 가상 어드레스(302)의 태그(TAG) 부분과 일치하지 않으면, TLB 필(fill) 동작이 수행되고, 필요한 변환 엔트리가 DTLB(303)로 제공될 수 있다.
PADDR(316)은 L1 캐시(307)에서 룩업을 수행하는데 사용될 수 있다. 구체적으로, PADDR(316)의 인덱스(INDEX) 부분은 요청된 데이터를 포함하는 캐시 라인이 저장될 수있는 세트를 식별하는데 사용될 수 있다. 도시된 L1 캐시 (307)는 식별된 세트 내의 2 개의 엔트리를 갖는 2-웨이 연관 구조를 가질 수 있다. 각각의 엔트리는 어드레스 태그(ATAG, 308) 및 대응하는 캐시 라인의 데이터 (309)로 구성될 수 있다. PADDR(316)의 태그(TAG) 부분은 식별된 세트의 각 엔트리의 ATAG와 비교된다. 로직(319)은 엔트리들 중 어느 하나에 대한 매칭이 있는지를 결정하고, 대응하는 데이터를 선택하도록 MUX(310)를 제어할 수 있다. 엔트리들 중 어느 것도 일치하지 않으면(예를 들면, L1 MISS(317)인 때에), L2 캐시 (311)에서 룩업은 제3 멀티플렉서(MUX, 314)에 제공된 로직(320)에 의해 수행될 수 있고, CPU 코어(301)로 데이터가 리턴(315)될 수 있다.
L2 캐시 인덱싱을 위한 인덱스(INDEX) 및 태그(TAG) 부분으로의 PADDR(316)의 분할은 L1 캐시 인덱싱을 위한 분할과 다를 수 있지만 L2 캐시 인덱싱의 나머지 단계는 일반적으로 L1 캐시의 룩업을 위해 수행 된 것과 유사할 수 있다. L2 캐시의 미스가 결정되면 상위 캐시 또는 메모리 액세스에 대한 새로운 조회가 필요할 수 있다. L1 캐시에 의해 사용되는 PADDR (316)의 인덱스(INDEX) 부분이 P 오프셋(P_OFFSET) 비트들로 구성되면, MUX (306)로부터 출력되는 PPF 정보가 이용 가능하기 전에 L1 캐시(307)에 대한 액세스가 시작될 수 있음을 알 수 있다. 이는 종종 가상적으로 인덱싱된 물리적 태그 캐시(VIPT)라고 지칭될 수 있다. 일반적으로 L2(또한 상위 레벨) 캐시는 L1 캐시보다 많은 수의 셋들이 포함되고, TBL로 변환된 어드레스 비트들의 일부를 인덱스 비트로 사용할 수 있다.
통상의 기술자는 도 3에 도시된 것과 유사한 메모리 계층을 각각 갖는 다수의 "노드들"이 함께 접속되어 일관성있는(coherent) 멀티 프로세서 시스템을 형성할 수 있음을 이해할 것이다. 멀티 프로세서의 또 다른 예가 도 1에 나와 있으며 각 CPU에는 자체 L1 캐시가 있을 수 있다. 이것은 더 높은 다음 캐시 레벨에서 항상 데이터를 검색하는 것이 더 이상 충분하지 않기 때문에 요청된 데이터가 상주하는 위치를 찾는 작업을 더욱 복잡하게 만들 수 있다. 다른 노드의 캐시를 검색하고 다른 노드에 저장된 데이터의 복수의 카피들을 일관성있게 유지하는 메커니즘은 이러한 동작들을 수행하는 데에 사용될 수 있다.
도 4는 태그리스 캐시의 구현 예를 나타내는 블록도이다. 도 4에 도시된 태그리스 캐시의 일 구현 예는 2-레벨 캐시 계층 및 2-레벨 캐시 위치 버퍼(cache location buffer, CLB) 계층을 포함한다. 이 때, 제1 레벨은 가상으로 액세스되고, 제2 레벨은 물리적으로 액세스된다.
상기 캐시는, 요청된 캐시 라인이 속하는 캐시 라인 및 캐시 라인 내의 위치를 지시하는 매칭 캐시 테이블 엔트리(matching cache table entry, CTE, 때때로 영역 위치라고 불림)의 요청된 캐시 라인에 대응하는 위치 정보(location information, LI)에 의존한다. 위치 정보는 때때로 캐시 라인 포인터(cache line pointers, CP)로서 불릴 수 있다. 이는 컴퓨터 시스템이 적절한 캐시에서 직접 캐시 룩업을 수행한다.
예를 들면, 도 4의 시스템(시스템은 멀티 프로세서 시스템 내의 노드)에서의 위치 정보는 L1 캐시와 L2 캐시 사이에서 구별될 수 있으며, 더 나아가, 도 4에 도시되지 않은 멀티 프로세서 시스템 내의 나머지 캐시들 사이에서도 구별될 수 있다. 또한, 요청된 데이터가 제장되는 캐시 내에서 연관 웨이(way)을 식별할 수도 있다. 도 4는 본 개시의 일 실시예에 따라 멀티 캐시 시스템의 다른 노드에 연결될 수 있는 태그리스(tag-less) 노드를 나타내는 도면이다. 멀티 캐시 시스템은 세트-연관 캐시들로 구성된 2-레벨 캐시 계층 및 L0 캐시가 구비된 CPU(401)를 포함할 수 있다. 일 실시예에서, ADDR(402)는 가상 어드레스 일 수 있고, 또는 다른 일 실시예에서 ADDR(402)는 물리적 어드레스일 수 있다.
도 4에는 셋-연관 CLB들로 구성된 2-레벨 CLB 계층이 도시되어 있으며, 제1 레벨 CLB(410)와 제2 레벨 CLB(420)는 CPU(401)에 의해 생성되는 어드레스(402)에 의해 인덱싱될 수 있다. 본 명세서에서 사용되는 CLB1은 제1 레벨 CLB를 의미할 수 있고, CLB2는 제2 레벨 CLB를 의미할 수 있다.
CLB1(410)은 적어도 하나의 어드레스 태그(AT, 411) 및 캐시 위치 테이블(CLT, 412)을 포함할 수 있다. 일 실시예에서, AT(411)는 가상 어드레스 중 일부를 포함할 수 있고, 다른 일 실시예에서, AT(411)는 물리적 어드레스 중 일부를 포함할 수 있다. CLT(412)는 영역(또는, 마이크로 페이지) 정보(Region Information, RI, 413)와 같은 부가적인 정보를 저장할 수 있다. 도 4에서는 일 실시예로서 영역당 4개의 LI들을 도시하고 있으며, 연구에 따르면, 영역당 8 내지 16개의 LI(즉, 영역 당 8 내지 16개의 데이터 유닛들(캐시 라인들))가 저비용, 고효율의 동작 성능을 가질 수 있을 것이다. LI는 멀티 프로세서 시스템에서 해당 캐시 라인을 찾을 수 있는 위치가 인코딩되어 생성된 것일 수 있다. 예를 들어, LI는 데이터 유닛이 발견될 수 있는 캐시의 식별 정보(identity)를 포함할 수 있다. 또한, LI는 데이터 유닛이 발견될 수 있는 캐시 내의 위치(연관된 캐시에서 웨이 정보로 알려진)를 포함할 수 있다. 대안적으로, LI는 데이터 유닛이 발견될 수 있는 노드의 식별 정보를 포함하거나 노드의 위치에 관한 정보를 나타내는 심볼을 포함할 수도 있다. 예를 들어, 심볼 "MEM"은 데이터 유닛이 메모리에서 발견될 수 있음을 나타낼 수 있다. 적어도 일부의 실시예들에서, "don’t know"라는 심볼은 데이터 유닛의 위치가 해당 영역에 대응하는 CLT(412)에 저장되어 있지 않음을 나타낼 수 있다.
RI(413)는 영역에 적용 가능한 속성을 저장할 수 있다. 이는 예를 들어, 영역(또는 그 일부)의 물리적 어드레스 및 일부 영역 분류 정보(예를 들어, 영역이 CLB에만 있고, 다른 CLB들에는 없는 경우에 인코딩함)일 수 있다.
MUX(416)는 ADDR(402)의 TAG 부분과 매칭되는 AT(411)를 갖는 캐시 위치 테이블(cache location table, CLT)를 선택하고, MUX(415)는 ADDR(402)의 LI-OFFSET 부분에 기초하여 요청된 캐시 라인에 대응하는 LI를 선택할 수 있다. 선택된 LI에 저장된 캐시 식별 정보가 L2 캐시(440)에 대응하는 경우에, L2 캐시(440) 내의 요청된 데이터 유닛을 액세스하기 위한 어드레스(417)는 어드레스(402)의 인덱스 부분 및 LI의 일부에 기초하여 생성될 수 있다. 일 예로, 세트 연관 L2 캐시(440)의 부분은 요청된 데이터 유닛이 저장되는 연관 웨이(associative way)에 대응하는 정보를 포함할 수 있다. 일 실시예에서, L2 인덱스는 ADDR(402)의 일부 및 RI(413)에 저장된 물리적 어드레스의 일부를 사용하여 형성될 수 있다. 선택된 LI에 저장된 캐시 식별 정보가 L1 캐시(430)에 대응하는 경우에, 요청된 데이터 유닛에 액세스하기 위한 어드레스(418)는 다른 어드레스(417)와 유사한 방식으로 생성될 수 있다.
동일한 연관성을 갖는 셋 연관 캐시로 구성된 캐시 계층의 경우에, 각 LI의 비트 수는 CLB가 처리하는 캐시 계층의 웨이의 수 및 캐시의 수에 의존한다. 하나의 LI 값은 유효하지 않은 패턴(“MEM”)을 위해 남겨진다. 일 실시예로, LI 비트의 수는 CLB에 의해 커버된 캐시의 개수의 로그 베이스 2에 +1한 값(즉, log2 (way)+log2(levels)+1))와 동일할 수 있다. 상이한 캐시 레벨의 웨이의 개수가 변하는 경우 또는 세트 연관 캐시 이외의 캐시가 사용되는 경우, 통상의 기술자는 다른 LI 표현이 가능하다는 것을 알 것이다. 일반적으로 LI의 크기는 일반적인 어드레스 태그의 크기보다 작다. 각 레벨에서 16 웨이 연관 캐시를 갖는 2-레벨 캐시 계층은 6개의 LI 비트를 사용하여 인코드될 수 있다.
도 4의 일 실시예에 따라 L1 캐시(430) 및 L2 캐시(440)의 각각의 엔트리가 그 캐시 라인과 관련된 역방향(backwards) 포인터(BP, 432, 442) 및 데이터(431, 441)를 포함할 수 있다. 다른 일 실시예로, 역방향 포인터는 CLB1(410) 또는 CLB2(420)의 CLE(Cache Location Entry)들 중에서 연관된 CTE를 지시할 수 있다. CLB2(420)의 각각의 CTE는 어드레스 태그(AT, 421), CLT(422) 및 CLB1 포인터(CIP, 423), 및 영역 정보(region information, RI, 425)를 포함할 수 있다. CLB2 엔트리가 CLT1(410)에 대응하는 CLT를 포함하는 경우에, 그 CIP(423)는 해당 CLT가 포함된 엔트리를 가리킬 것이다. 위와 같은 경우, CLB1(410)는 해당 영역에 대한 최신 정보를 포함할 수 있다. 또한, CLB2(420) 내의 영역에 대한 CLB 엔트리는 패시브 CLB 엔트리(또는, 패시브 엔트리)로 정의될 수 있는 반면, CLB1(410) 내의 영역에 대한 CLB 엔트리는 액티브 CLB 엔트리(액티브 엔트리)라고 정의될 수 있다. CLB2(420)는 하나 이상의 멀티플렉서(MUX, 424)에 레벨 및 웨이 정보를 제공할 수 있다. 일 실시예에서, CLB1(410)이 영역에 대한 액티브 엔트리를 포함한다면, CLB2 (420)는 영역에 대한 패시브 엔트리를 포함할 수 있다.
본 개시의 적어도 하나의 일 실시예에서, CLB1(410)에서 어드레스(402)와 일치하는 CTE가 발견되지 않으면, 어드레스(402)에 대응하는 CTE가 CLB2(420)에서 검색되어 CLB1(410)에 카피(copy)되는 반면, CLB1(410) 내의 오래된 CTE는 CLB2(420)에 카피될 수 있으며, 이는 필(PILL) 및 스필(SPILL) 동작으로 지칭될 수 있다. 일 예로, 스필(SPILL)은 소정의 캐시가 데이터 유닛을 상이한 레벨 캐시로 축출(evict)하고, 상이한 레벨 캐시에서 가져올 수 있는 데이터 유닛을 위한 공간을 만들 때 수행될 수 있다. 캐시 계층과 유사하게 CLB 레벨도 포괄적인 계층 구조를 형성하기 때문에 CLB 레벨 간에 CLB 엔트리가 이동할 때에 데이터 유닛에 대한 필/스필 동작과 유사한 필/스필 동작이 수행될 수 있다. 일 실시예에서, 디렉토리(DIR)는 CLB 계층 구조의 루트(root)에 있으며, 최상위 레벨 CLB로 필/스필할 수 있다.
필/스필 동작과 동시에 요청된 데이터 유닛에 대한 액세스를 시작할 수 있다.
일 실시예에서, CLB 계층 구조는 포괄적이지만, 캐시 계층 L1(430), L2(440) 및 상위 레벨 캐시들을 모두 포함할 필요는 없다. 하나 이상의 캐시가 데이터를 CPU(401)로 리턴(450)할 수 있다.
멀티-레벨 CLB 구현 예에서 CLB들의 내용은 그들이 포함된 멀티- 레벨 캐시 시스템의 데이터 유닛들의 위치들과 일관되게 유지(또는, 관리)될 수 있다. 일 예로, CPU로부터 데이터 유닛 요청에 의한 데이터 유닛의 이동, 데이터 유닛의 축출, 데이터 유닛의 프리 페치 및 데이터 유닛에 대한 일관성 동작에 의한 캐시 계층에서 이동되는 데이터 유닛은 이에 대응하는 하나 또는 복수의 CLB들에서의 LI에 대한 업데이트를 야기할 수 있다. 예를 들어, 도 4에서, L2 캐시(440)로부터 데이터 유닛(441)을 축출시키는 단계는 데이터 유닛(441)과 대응되는 CLE(예를 들면, CLB2(420) 내에 포함된 CLE)를 찾기 위해 데이터 유닛(441)과 연관된 역방향 포인터(442)를 따르는 동작 및 데이터 유닛의 새로운 위치를 가르키는 LI를 업데이트하는 동작을 포함할 수 있다. 만약 CLB2(420)의 CLE에 포함된 CIP 포인터(423)가 유효한 경우에는, CLB1(410)의 데이터 유닛과 대응하는 CLE를 찾기 위해 CIP 포인터(423)를 따르고, 캐시 라인과 연관된 데이터 유닛의 LI를 업데이트할 수 있다. 일 실시예로, 유효한 CIP 포인터가 존재하면 CLB2(420)의 CLE는 업데이트되지 않으며, 액티브 CLT들만이 업데이트될 수 있다.
전술한 바와 같이, 이들 실시 예에 따른 태그리스(tag-less) 캐시 시스템, 즉 캐시에 저장된 데이터 유닛이 캐시와 연관된 어드레스 태그를 갖지 않는 캐시 시스템을 사용하면, 다른 저장 장치에 위치한 다양한 캐시 라인들이 CPU(401)에 의해 요청될 때 발생하는 다양한 종류의 트랜잭션들(transactions)을 야기할 수 있다. 도 4에 도시된 노드는 복수의 캐시 노드들로 구성된 보다 큰 멀티 프로세서 시스템의 서브 시스템(또는 노드)일 수있다. 복수의 노드들에서 캐시의 데이터를 일관성있게 유지하려면 캐시 일관성 프로토콜이 필요할 수 있다. 예를 들면, 캐시 일관성 프로토콜은 스누핑(snooping) 또는 디렉토리 기반 일관성으로 구현될 수 있다. 캐시 일관성 프로토콜은 도 4의 노드에 일관성 요청 또는 외부 요청(EXTERNAL REQUEST)을 전송할 수 있다. 이러한 외부 요청(EXTERNAL REQUEST)은 통상적으로 CLB2(420)로 우선적으로 전송될 것이며, CLB2(420)는 소정의 조건(예를 들면, CLB2 미스된 때 또는 인액티브(inactive)된 CIP 포인터 및 메모리 패턴 값을 홀딩하는 요청된 캐시 라인의 위치 정보를 포함하는 엔트리에 CLB2 히트된 때)에서 캐시 시스템이 요청한 캐시 라인을 갖지 않는다고 결정할 수 있다. L1 캐시 및 L2 캐시에 대하여 더 이상의 동작(예를 들면, 일관성 필터링(coherence filtering))이 필요하지 않은 경우에도 액티브 CLT에 대응하는 위치 정보(LI)는 데이터 유닛과 관련된 새로운 위치를 추적하기 위해 업데이트될 필요가 있다. 그렇지 않으면, CLB2 룩업은 요청된 위치 정보를 제공하거나 CLB1(410)가 관련된 위치 정보를 저장하는 것으로 결정할 수 있다. 후자의 경우에, 요청된 캐시 라인의 위치 또는 캐시 라인이 캐시 서브 시스템에 존재하지 않는다는 것을 결정하기 위해 CLB1(410)의 룩업이 필요할 수 있다. CLB1(410)의 해당 위치 정보는 메모리 패턴을 포함할 수 있다. 무효화 요청, 읽기 요청 또는 독점적 읽기 요청과 같은 일관성 요청의 성격에 따라, 일관성 프로토콜은 요청된 데이터 유닛에 대해 일부 작업을 수행하고 상태를 변경할 수 있다. 액티브 CLT 내의 대응하는 위치 정보(LI)는 데이터 유닛과 관련된 새로운 위치를 추적하기 위해 업데이트 될 필요가 있을 수 있다.
비록 도 4에 도시된 노드가 2개의 캐시 레벨로 구성된 것을 개시하고 있으나, 이는 예시적 실시예로서 이에 국한되지 않으며, 노드는 다양한 개수의 캐시 레벨로 구성될 수 있으며, 하나 이상의 CPU를 포함 할 수 있다. 또한, 노드의 캐시 레벨 개수와 CLB 레벨 개수가 동일 또는 상이할 수 있다.
도 5는 2-레벨 캐시 계층 및 2-레벨 캐시 위치 버퍼(cache location buffer, CLB)와 연결되는 2개의 CPU들을 포함하는 컴퓨터 시스템의 일 예를 나타내는 블록도이다. 본 개시는 CLB들에 의해 관리되는 캐시를 공유하는 복수의 CPU들을 포함하는 시스템에 적용될 수 있다. 예를 들어, 도 5의 컴퓨터 시스템은 하나의 CLB(CLB1A(503), CLB1B(513))과 프라이빗 캐시 L1 캐시(504, 514)를 가진 자체 1-레벨 캐시 계층 내에 있는 두 개의 CPU 노드들(580, 590)을 포함할 수 있다. 컴퓨터 시스템은 또한 2개의 CPU(501, 511) 사이에서 공유되는 글로벌 공유 L2 캐시(523)(또는, 최종 레벨 캐시(Last-Level Cache, LLC)라 함)를 포함할 수 있다. 도 5의 예시적 시스템에서, 공유된 L2 캐시(523)는 데이터(505) 및 역방향 포인터(BP, 506)를 특징으로 하는 엔트리를 포함할 수 있다.
CLB1(513 또는 503)의 룩업은 전술한 CLB1(도4, 410)과 유사한 기술을 사용하여 각각의 CPU(501, 511)에 의해 생성된 어드레스를 기반으로 하나의 위치 정보(LI)를 선택할 수 있다. 도 5에 도시된 CLB1A(503) 및 CLB1B(513) 내의 2 개의 CLT 엔트리들에 의해 시작된 3개의 화살표들(517을 포함하여)에 의해 지시된 바와 같이, 선택된 위치 정보(LI)는 L1 캐시(504, 514), L2 캐시(523) 또는 다른 노드(570, 571) 중 어느 하나가 될 위치를 식별할 수 있다. 이러한 예시에서, CLB1A(503)는 공유된 L2 캐시(523)의 데이터(505)를 액세스된 데이터로 식별하는 반면, CLB1B(513)는 자신의 L1 캐시(514)의 데이터를 액세스된 데이터로 식별할 수 있다. 다른 노드가 데이터를 저장하도록 식별되면, 프라이빗 캐시에서 요청된 캐시 라인의 정확한 위치를 결정하기 위해 CLB에서의 룩업이 필요할 수 있다.
새로운 컴퓨터 시스템을 설계할 때 디자인의 성능과 전력 소비에 중점을 둘 필요가 있는 동시에, 보안 역시 중점을 둘 필요가 있다. 예를 들어, 하드웨어가 Spectre, Meltdown 및 다른 부채널 공격과 같은 보안 공격을 허용하는 어떤 측면 공격을 허용하지 않도록 구성할 수 있다.
arXiv에서, 2월 11일자 1082.03802v1에서 Caroline Trippel은 Spectre and Meltdown 공격에 대해 다음과 같이 기술한다. “부채널 공격은 구현된 특정 기능들을 악용하여 기밀성을 위협한다.”
CPU 캐시들은 정보 유출의 주요한 소스가 되는 하드웨어 중 하나가 될 수 있다. 캐시 기반의 부채널 공격은 공격자가 캐시 동작을 악용하여, 대상 프로그램이 실행될 때 대상 프로그램에 대한 지식을 얻은 후, 해당 지식을 기초로하여 호스트 시스템을 공격하는 것일 수 있다. 특히, 이러한 시나리오는 공격자가 캐시 히트와 미스를 구별할 수 있는지에 의존할 수 있다.
대부분의 캐시 기반 공격은 타이밍 채널을 주요 공격 벡터로 이용할 수 있다. 이러한 타이밍 채널은 측정 가능한 메모리 또는 페이지 테이블 엑세스 레이턴시 차이에 의해 피해자의 동작을 모니터링할 수 있다. 타이밍 동작의 주목할만한 2가지 카테고리는 Prime+Probe 및 Flush+Reload이다.
전통적인 Prime+Probe 공격에서, 공격자는 먼저 하나 또는 하나 이상의 세트에 자체 라인을 채움으로써 캐시를 준비시키고(prime) 이어서 희생자가 실행할 수 있도록 할 수 있다. 희생자가 실행한 후, 공격자는 이전에 준비된 라인을 다시 액세스하고 이러한 액세스를 타이밍함으로써, 검사를 할 수 있다. 엑세스 타임이 길어지는 것(예를 들어, 캐시 미스)은 희생자가 동일한 셋으로 매핑하고 공격자의 라인을 내보내는 어드레스를 터치해야 한다는 것을 의미할 수 있다.
전통적인 Flush+Reload 공격은 Prime+Probe 공격과 유사한 목적을 가지지만, 공격자와 희생자 간의 공유 가상 메모리(예를 들어, 공유된 읽기 전용 라이브러리 또는 페이지 중복제거) 및 가상 어드레스로 플러시하는 능력에 의존할 수 있다. 이점은 공격자가 캐시 셋이 아닌 특정 라인을 식별할 수 있다는 데에 있다. Flush+Reload 공격에서, 공격자는 관심있는 공유 라인들을 플러싱(flushing)하고 이어서 희생자가 실행할 수 있도록 할 수 있다. 희생자가 실행한 후, 공격자는 이전에 축출된 캐시 라인을 리로드하고 해당 캐시 라인이 희생자에 의해 프리 로드되었는지를 결정하기 위한 엑세스 기간을 측정할 수 있다.
Meltdown 및 Spectre 공격은 최근에 발견된 캐시 타이밍 부채널 공격(cache timing side-channel attacks)의 일종으로서, 캐시 상태(state)에 대한 불량 및 추측 실행의 효과를 이용할 수 있다. Meltdown은 응용 프로그램이 임의의 시스템 메모리에 엑세스 하지 못하도록 하는 메커니즘을 파괴할 수 있다. Spectre는 최신 프로세서에서 브랜치 예측자(predictor)를 잘못 훈련시켜, 메모리의 임의의 위치에 엑세스하도록 응용 프로그램을 속일 수 있다. 추측 실행을 유도한 후, 두 공격(특히, Flush+Reload)은 차이밍 부채널을 이용하여 프로세서에서 추측된 어드레스를 식별할 수 있다. 이전의 권한이 있는 읽기 액세스에 종속적인(어드레스 계산을 통해) 권한이 없는 읽기 액세스의 추측 실행을 유도함으로써, 공격자는 권한있는 커널 메모리를 누출시킬 수 있다.
Meltdown 및 Spectre 공격은 몇가지 주요 통찰력을 제공할 수 있다. 첫째로, CPU 캐시가 추론적으로 실행된 명령에 의해 오염될 수 있음을 알 수 있다. 추측된 명령의 모든 소프트웨어적 가시 효과가 지워지더라도 여전히 남아 있는 마이크로 아키텍쳐 효과가 있다. 두번째는, 공격자는 희생자 메모리 액세스에서 공격자 메모리 액세스에 이르는 소프트웨어 종속성을 활용함으로써, 기존의 Flush+Reload 공격이 공유 메모리가 아닌 메모리 위치를 포함하도록 수행될 수 있는 어드레스의 범위를 확장할 수 있음을 알 수 있다.
도 1 내지 도 5의 설명을 보안 공격에 비추어 요약하면, 도 1 내지 도 5에 도시된 다양한 캐시의 구현은 보안 공격에 취약할 수 있다. 마이크로 아키텍처 상태가 변경됨에 따라(예를 들어, 추후에 실행되지 않을 명령들의 추측적 실행에 의해) 자체 프로세스 및 경우에 따라 합법적으로 데이터에 액세스 할 수 있는 다른 프로세스에서도 문제가 발생될 수 있다. 따라서, 마이크로 아키텍서 상태의 변화를 쉽게 관찰할 수 있는 방식으로 캐시를 설계할 수 있다.
부채널 공격과 같은 보안 공격에 대한 취약성을 감소시키기 위해 캐시 시스템을 설계할 수 있다. 일부 캐시 시스템에서는, “액세스된 어드레스에 대해 메모리 명령을 실행하도록 허용된 메모리 명령을 실행하는 프로세스인지 여부”를 검사하는 액세스 허용 검사를 수행할 수 있다. 일 실시예에서, 메모리 명령이 이슈될 때 액세스 허용 검사가 수행되지 않을 수 있다. 예를 들어, 메모리 명령이 이슈될 때 액세스 허용 검사를 수행하지 않아도 되는 ARM 아키텍쳐에 대한 설명이 제시될 수 있다. 대신에, 액세스 허용 검사는 명령이 커밋될 때 적어도 일부 메모리 명령에 대해 수행될 수 있다. 액세스 허용은 일반적으로 TLB(예를 들어, 도 3의 303)에 의해 검사될 수 있다. 액세스 허용은 시간 경과(예를 들어, 하나 또는 하나 이상의 엔트리를 무효화하고 TLB(303)가 다음 액세스에 리로드되는 것을 무효화하는 TLB 무효화를 통해)에 달라질 수 있다. 또한, 실제로 중요한 커밋 타임(commit time)에서의 액세스 허용일 수 있다. 따라서, 아키텍쳐 관점에서 늦은 액세스 허용 검사가 정확해질 수 있다. 그러나, 이는 불법적인 추측 명령이 상태를 변경하도록 허용하여, 프로세서 간에 비밀 정보가 유출될 수 있다.
이하에서는, 도 3 및 도 4에서 도시된 시스템이 캐시 시스템 보안과 관련된 실시예를 구현하기 위해 추가 필드로 확장되도록 하는 방법이 논의될 것이다.
일 실시예에서, 도 4의 영역 정보(RI, 413)는 또한 영역으로의 액세스에 대한 액세스 허용을 인코딩하도록 확장될 수 있다. CLB(410)는 임의의 프로세스 ID(즉, 주소 공간 식별자(address space identifier, ASID)), 가상 머신 ID(virtual machine ID), 및 가상 어드레스에 대한 다른 특정 확장자를 포함하여, 어드레스(402)에 대한 전체 가상 어드레스를 이용하여 액세스될 수 있다. 어드레스 태그(411)는 또한 전체 가상 어드레스의 대응하는 비트를 저장하도록 확장될 수 있다. 메모리 명령이 이슈되면, CLB의 액세스 허용이 검사될 수 있다. 액세스 허용 위반으로 인해 계층 구조에서 캐시 라인 이동이나 상태의 변경이 발생하지 않으며, CPU가 액세스 허용을 위반하는 메모리 명령에 대해 알릴 수 있다.
일 실시예에서, 도 3의 TLB(303)의 각 엔트리의 페이로드는 영역으로의 액세스에 대한 액세스 허용을 인코딩하도록 확장될 수 있다. TLB(303)은 프로세스 ID(즉, ASID), 가상의 머신 ID(VMID), 및 가상 어드레스의 가능한 다른 특정 확장자들을 포함하는 어드레스(302)에 대한 전체 가상 어드레스를 이용하여 액세스될 수 있다. 또한, 어드레스 태그(311)는 전체 가상 어드레스에 대응하는 비트를 저장하도록 확장될 수 있다. CLB의 액세스 허용은 메모리 명령이 이슈될 때 확인될 수 있다. 엑세스 허용 위반으로 인해 계층 구조에서 캐시 라인 이동이나 상태 변경이 발생하지 않으며, CPU가 액세스 허용을 위반하는 메모리 명령에 대해 알릴 수 있다.
이러한 변화는 이하에서 설명과 같이, 도 3 및 도 4에 도시된 시스템이 메모리 명령이 이슈될 때, 액세스 허용 검사가 조기에 수행될 수 있도록 할 수 있다.
일 실시예에서, 영역 또는 페이지에 대한 엑세스 허용 변화(예를 들어, TLB 무효화)를 수행하는 것은 또한, CLB1(410) 내의 엔트리에 대응하는 것을 삭제하는 것(또는, 일부 다른 수단을 무효화하는 것에 의하여)을 의미할 수 있다. 그러나, 이것은 또한, CLT(412)에 저장된 위치 정보에 의해 지시된 L1 캐시(430) 및 L2 캐시(440)의 캐시 라인들은 축출될 것을 의미할 수 있다. 때때로 강제 축출이라고도 지칭될 수 있다.
일 실시예에서, 태그된 캐시를 갖는 시스템에 대한 액세스 허용 변경(예를 들어, TLB의 무효화)을 수행하는 것은 또한, 도 3에 도시된 TLB(303) 내에 대응하는 엔트리를 제거(또는 일부 다른 무효화를 의미)하는 것을 포함할 수 있다. 도 3 및 도 4에서 설명된 것의 확장이자 접근 허가의 효율적인 변경을 가능하게 하는 방법은 도 6 및 도 7에 각각 도시되고 설명된다.
일 실시예에서, CLB2(420)로부터 CLB1(410)의 엔트리를 채우는 것(도 4의 FILL 화살표)은 또한, TLB(도 4에 미도시)에 액세스 하는 단계를 포함할 수 있다. TLB로부터 독출된 액세스 허용은 확장된 영역 정보에 액세스 허용(access permission, AP)으로서 저장될 수 있다. 영역 정보는 또한, TLB 리로드 비트(TR)를 저장하도록 확장될 수 있다. CLB1(410)은 액세스 허용 변경(예를 들어, TLB의 무효화)을 수신하면, 대응하는 영역에 대한 TR을 설정하거나, CLB 엔트리를 무효화하지 않거나 또는 축출하지 않을 수 있다. 이는 새로운 TLB 리로드(CLB1(410) 채우기(FILL) 동안 사용된 TLB에 액세스하는 것)가 (가능하도록 수정된) 액세스 허용 비트를 읽도록 할 수 있다. 그러나, CLB1(410) 엔트리는 CLB1(410)으로부터 제거되거나, 무효화되지 않기 때문에, 캐시 라인들은 제거될 필요가 없을 수 있다.
일 실시예에서, 태그된 캐시를 갖는 시스템에 대한 액세스 허용 변경(예를 들어, TLB 무효화)을 수행하는 것은 또한, 도 3에 도시된 TLB(303) 내의 엔트리에 대응하는 것을 제거하는 것(또는, 일부 다른 수단을 무효화하는 것에 의해)의미할 수 있다. 앞서 설명된 도 3 및 도 4로부터 확장되어 액세스 허용의 효율적인 변경을 가능하게 하는 시스템은 이하의 도 6 및 도 7에 각각 도시되고, 상술될 것이다.
메모리 명령이 이슈되고, 후에 커밋되는 시간 사이에 액세스 허용 변경을 처리하기 위해, 몇몇의 추가적인 메커니즘이 필요할 수 있다. 일 실시예에서, 액세스 허용이 변경되면, (초기 캐시 액세스 허용이 검사되고 명령이 커밋되는 시간 사이에 TLB 무효화를 수신하는 것에 의해)파이프 라인은 액세스 허용을 다시 확인할 수 있다. 이는 도 3의 태그가 추가된 캐시 및 도 4의 태그리스 캐시에 모두 적용될 수 있다. 일 실시예에서, 이는 CLB1(410) 및 TLB(303) 각각으로의 액세스 허용 변경이 발생할 때, 각각의 수행 중인(in-flight) 명령(즉, 이슈와 커밋 사이의 명령)에 대한 RECHECK 비트를 설정함으로써, 구현될 수 있다. RECHECK 비트가 설정된 경우에만, 커밋 시간에 액세스 허용을 재검사(recheck)(예를 들어, 도 3의 TLB(303) 룩업 또는 도 4의 CLB1(410)의 룩업을 각각 수행함으로써)할 수 있다. 다른 일 실시예에서, 액세스 허용 변경에 의해 영향을 받는 수행 중인 명령들이 식별될 수 있고, 상기 명령들은 커밋 시간에서 액세스 허용이 재검사될 수 있다.
일 실시예에서, 캐시의 일부는 캐시에 저장된 캐시 라인과 관련된 랜덤 인덱스 값(random index value, RIV)을 포함할 수 있고, 장치의 메모리에서 캐시 라인의 위치를 식별하는 데에 사용될 수 있다. 일 실시예에서, 영역 정보(RI, 413)는 랜덤 인덱스 값(random index value, RIV)의 필드를 저장하도록 확장될 수 있다. 이 필드에 저장된 RIV 비트의 수는 예를 들어, 단일 비트부터 시스템의 캐시를 색인(index)하는데에 필요한 최대 비트 수까지 다양하게 구성될 수 있다. 일 실시예에서, RIV는 어플리케이션에 알려지지 않은 랜덤 값을 저장하도록 초기화될 수 있다. 예를 들어, RIV는 캐시에 액세스 할 때, 사용될 인덱스를 결정하는데 사용될 수 있다. 이런 랜덤화된 인덱스 함수는 예를 들어, 일부 어드레스 비트와 RIV를 배타적 논리합 연산(XOR 연산)을 수행하여, 캐시 인덱스 또는 비트의 일부 다른 논리 변환을 계산함으로써 형성될 수 있다. RIV 비트는 또한, 논리 변환 없이 캐시에 대한 인덱스 비트로 직접 사용될수도 있다. 시스템은 다른 캐시들은 랜덤 인덱스가 생성되는 다른 캐시들에 반해, 인덱스를 생성하기 위해 어드레스 비트에 의존하는 일부 캐시들을 포함할 수 있다.
일 실시예에서, TLB(303)는 또한, 페이로드에 랜덤 인덱스 값(RIV)을 갖는 필드를 추가할 수 있다. 이는 해당 페이지의 캐시 라인이 RIV를 사용하여 인덱스를 계산할 수 있음을 의미할 수 있다. (4kB의 페이지 크기와 64Byte의 캐시 라인의 크기를 가정할 때, 각각의 페이지는 64개의 캐시 라인들을 포함할 수 있다.) 또한, TLB(303) 페이로드에는 존재 비트(presence bit, PB) 필드가 추가될 수 있고, 페이지 상에 캐시 라인들이 존재하는 것과 동일한 수의 비트수가 저장될 수 있다. 예를 들어, 페이지에 64개의 캐시 라인들이 포함될 ?, 64비트들이 저장될 수 있다.
이제 RIV 인덱스가 하나의 캐시 레벨(예를 들어, L1)에만 적용된다고 가정하면, 캐시 라인이 그 캐시에 인스톨될 때마다 대응하는 PB 비트가 설정될 수 있고, 축출될 때마다 비트가 클리어될 수 있다. 그렇게 되면, TLB는 셋에 마지막 캐시 라인이 언제 축출되었는지 알 수 있다. 일 실시예에서, TLB 엔트리가 축출될 때, L1 캐시에 존재하는 임의의 캐시 라인들은 축출될 수 있다. 유효한 L1 캐시 라인을 가지고 있는 TLB 엔트리를 아는 것은, TLB의 대체 로직이 L1 캐시에 존재하는 캐시 라인으로 엔트리를 대체 하는 것을 피할 수 있고, 대신 축출을 위한 TLB 엔트리를 선택하여 전반적인 성능을 실질적으로 향상시킬 수 있다.
도 6은 도 4의 캐시 위치 버퍼(CLB)의 확장된 일 구현 예를 도시한 블록도이다. 도 6의 CLB1(610)는 도 4의 CLB1(410)에서 확장된 일 실시예로서, 상술한 바와 같이 더 많은 영역 정보를 포함하도록 확장된 실시예이다. 도 4에서 변경되지 않은 일부 구성 요소는 중복 설명을 생략하겠다.
도 6을 참조하면, VA+ASID+VMID를 포함하는 가상 어드레스는 CPU(601)에 의해 생성될 수 있다. 가상 어드레스의 일부(CI)는 CLB1(610)를 색인하는 데에 사용될 수 있고, 가상 어드레스의 일부는 색인된 셋에 저장된 CLB1(610)의 엔트리의 모든 어드레스 태그들(VAT, 611)과 비교될 수 있다. 도 6의 CLB1(610)에는 하나의 엔트리만 도시되었으나, 이에 한정되는 것은 아니다. 각 엔트리는 영역의 캐시 라인들에 대한 LI을 저장하는 필드의 캐시 위치 테이블(cache location table, CLT, 612), 물리적 어드레스(PA, 614), 영역 분류 비트(P, 615), 랜덤 인덱스 값(RIV, 616), TLB 재로드 비트(TR, 617) 및 액세스 허용(access permission, AP, 618)를 포함할 수 있다. 프로세서에 의해 생성된 가상 어드레스의 일부는 셋 내의 모든 엔트리의 VAT(611)와 비교될 수 있다. 만약 일치된다면, 그 엔트리의 필드는 메모리 계층에 액세스하는 데에 사용될 수 있다. 대응하는 영역의 RIV(616)는 적어도 부분적으로 L1 캐시를 색인하기 위해 사용될 수 있고, 대응하는 캐시 라인의 LI는 정확한 캐시 레벨(L1) 및 그 캐시 내의 연관 방법을 찾는 데에 사용될 수 있다.
미스가 있는 경우(프로세서(601)에 의해 생성된 어드레스와 매칭된 인덱싱된 CLB1(610) 셋의 VAT(611)가 없는 경우), 물리적 어드레스(622) 및 액세스 허용(access permission, AP, 623)를 검색하기 위해 TLB(620)에서의 룩업이 개시될 수 있다. TLB(620)에 일치가 있으면, 일치하는 TLB(620) 엔트리의 PA(622)는 CLB2(630)에서 룩업을 수행하고, PA(622) 및 AP(623)와 함께, 일치하는 CLB2(630) 엔트리로부터 정보를 사용하고, 새로운 CLB1(610)의 엔트리를 생성할 수 있다. 동시에, 시스템에 CLB1(610) 엔트리만이 포함되는 경우, 새로운 랜덤 숫자가 RIV(616)에 기록될 수 있고, TR(617)은 설정되지 않은 상태가 될 수 있으며, 영역 분류 비트(615)는 설정된 상태가 될 수 있다.
도 7은 도 3의 변환 주위 버퍼(TLB)의 확장된 일 구현 예를 도시한 블록도이다. 도 7의 TLB(707)는 도 3의 TLB(303)에서 엔트리 각각에 대해 더 많은 필드로 확장된 일 실시예를 도시한 것이다.
도 7을 참조하면, VA+ASID+VMID를 포함하는 가상 어드레스는 CPU(701)에 의해 생성될 수 있다. 가상 어드레스의 일부(TI)는 TLB(710)를 색인하는데 사용될 수 있고, 가상 어드레스의 일부는 색인된 셋에 저장된 TLB(710)의 엔트리의 모든 어드레스 태그들(VAT, 711)과 비교될 수 있다. 도 7의 TLB(710)에는 하나의 엔트리만 도시되었으나, 이에 한정되는 것은 아니다. 각 엔트리는 필드 존재 비트(PB, 712)(페이지의 캐시 라인 당 1 비트를 저장함), 물리적 어드레스(PA, 714), 랜덤 인덱스 값(RIV, 716), TLB 재로드 비트(TR, 717) 및 액세스 허용(access permission, AP, 718)을 포함할 수 있다. 프로세서에 의해 생성된 가상 어드레스의 일부는 셋 내의 모든 엔트리의 VAT(711)와 비교될 수 있다. 만약 일치된다면, 그 엔트리의 필드는 메모리 계층에 액세스하는 데에 사용될 수 있다. RIV(716)는 적절한 셋을 찾기 위해 L1 캐시를 색인하는 데에 사용될 수 있고, 상기 셋의 모든 캐시 라인들의 어드레스 태그(AT)는 물리적인 부분과 비교될 수 있다.
도 7에 도시된 TLB(710)은 PA, RIV, AT, TR을 저장한다는 점에서, 도 6의 CLB1(610)와 기능적으로 유사하며, 또한, 도 7에 도시된 TLB(710)은 각 캐시 라인 위치 정보(즉, L1 캐시에 저장된 페이지의 캐시 라인들에 대한 정보를 저장하는 PB(712))를 저장할 수 있다. 따라서, TLB(710)는 캐시 위치 버퍼(CLB)의 형태로서 간주될 수 있다.
이하의 설명은 전술한 실시예의 특징들이 다양한 보안 공격을 피하는 방법에 대해 개략적으로 설명한다. 이하의 설명은 도 6 및 도 7에 설명된 실시예 및 다른 실시예에 모두 적용이 가능하다.
전술한 바와 같이 meltdown 공격은 프로세스 간의 공격을 포함할 수 있다. 즉, 공격자 프로세스는 희생자의 프로세스를 속여서 공격자의 어드레스 공간에 추측적으로 액세스하고, 비밀 정보를 얻을 수 있는 마이크로 아키텍처 상태에서 흔적을 남길 수 있다. meltdown 공격은 부분적으로는 추측성 불법적인 명령이 마이크로 아키텍처 상태에 영향을 미칠 수 있도록 하는 사실에 의존한다. 도 6 및 도 7에서 제안된 확장 실시예에서와 같이 이슈 타임에 수행되는 초기 허용 검사는 이러한 공격을 회피할 수 있다.
Spectre 공격은 하나는 프로세스의 자체 어드레스 공간에 대한 추측성 액세스의 부작용을 포함하여, 프로세스의 한 부분으로부터 데이터를 액세스할 수 없도록 고안된 프로세스 코드의 일부까지를 나타낼 수 있다. 일 실시예는 JIT(just-in-time) 실행 샌드 박스와 같은 보안 격리 구성에서 코드를 지우고, 보안 격리 구성으로 인해 범위를 벗어나는 데이터에 엑세스할 수 있다. 이러한 보안 구멍은, 추측성 액세스(또한, 이후에 수행되지 않는 액세스)에 의해 야기되는 마이크로 아키텍쳐 부작용을, 캐시에 데이터가 저장되었는지를 결정하기 위한 타이밍을 측정하는 것과 같이 (수행된) 비추측 액세스에 의해 관찰될 수 있게 함으로써 가능해질 수 있다.
이러한 유형의 추측을 활용할 수 있는 공격의 예로는, 추측적으로 로드된 데이터에 대해 추측할 수 없는 공격에 의존하는 flush+reload, 및 비추측적으로 로드된 데이터를 축출하는 추측적으로 로드된 데이터에 의존하는 prime+probe가 있을 수 있다.
flush+reload에서 공격자는 선택된 데이터 셋의 캐시를 비운 후, 제어하는 데이터가 추측성 로드로부터 간접적인 수행을 통해 캐시로 추측적으로 로드(예를 들어, 로드 제어된 데이터, 추측성 데이터)되도록 할 수 있다. 이후 공격자는 제어된 데이터의 모든 요소에 액세스하여 캐시된 데이터를 확인하고, 추측성 데이터의 값을 추론할 수 있다. 이러한 공격은 추측적으로 로드된 데이터가 비추측성 로드에 액세스 할 수 있는 경우에 성공할 수 있다.
Prime+probe에서는 반대의 접근법이 사용될 수 있다. 먼저, 제어된 데이터가 각 제어된 데이터 요소의 캐시에 있는 인덱스 비트 중 일부를 알려진 방식으로 캐시에 로드될 수 있다. 이후에 공격자는 추측성 데이터를 캐시에 로드하여 제어된 데이터 요소 중 하나를 제거할 수 있다. 이후에 공격자는 추측성 데이터의 요소들 각각을 로드하여, 제거된 요소를 결정함으로써, 추측성 정보를 얻을 수 있다. 이러한 공격은 추측적으로 로드된 데이터가 비추측적으로 로드된 데이터를 축출하는 경우에 성공할 수 있다.
이러한 공격은 추측성 로드를 방지하는 수행 비용을 선택적으로 감소시키면서, 추측적으로 로드된 데이터와 비추측성 데이터를 서로 구분함으로써 감소될 수 있다. 즉, 추측성 데이터는 추측에 따라 DRAM에서 가져올 수 있으나, 캐시 계층에서의 이러한 효과는 더 이상 추측적이지 않을 때에 표시될 수 있다.
Prime+probe 공격의 일부는 공격자가 특정 캐시 레벨에 관련된 각각의 캐시 라인의 캐시 인덱스를 알고 있다는 사실을 포함할 수 있다. 이러한 공격자는 공격 전에 셋들 중 하나 또는 다수를 완전히 채운 다음 공격 후 기존의 캐시 라인에 액세스하여, 캐시에 대한 일부 비밀 정보를 추론할 수 있다. 그러나, 캐시 라인에 대한 랜덤 인덱스 값이 알려지지 않은 경우, 셋을 채우거나 공격 후 특정 액세스 타이밍에 기초하여 비밀 정보를 추론하는 것이 더 어려워질 수 있다. 여기에 설명된 예시적인 실시예들은, CLB1 영역의 랜덤 인덱스 값(RIV) 필드 및 TLB 엔트리를 각각 사용하여 이러한 공격을 감소시킬 수 있다. 랜덤 인덱스 값은 (공격자를 포함하여) 어플리케이션에 알려지지 않은 랜덤 숫자를 포함할 수 있고, 캐시 액세스를 위한 인덱스 비트를 생성하기 위해 적어도 부분적으로 생성될 수 있다.
도 6 및 도 7에서는 랜덤 인덱스 값(RIV, 616, 716)를 이용하여 랜텀 캐시 인덱스를 생성하는 캐시 시스템을 도시한다. 전술한 바와 같이, CLB1(610) 및 TLB(710)의 랜덤 인덱스 값(616, 716) 각각은 임의의 어플리케이션의 알려지지 않은 랜덤 숫자로 초기 설정될 수 있다. 이하의 설명들은 도 6 및 도 7를 기초로 한 설명이다.
랜덤 인덱스 값을 주기적으로 변경하면 prime+probe 공격이 감소될 수 있다. 랜덤 인덱싱 동작은 악의적인 프루빙 액세스들뿐만 아니라, 데이터에 대한 스파이 인덱싱이 쉽게 알려지지 않으므로, prime+probe 보안 공격의 부채널을 고안하는 것을 어렵게 할 수 있다. 이러한 공격은 공격이 설정되기 전에 셋을 채우기에 충분한 영역들의 동적인 인덱싱을 결정하는 것을 포함한다. 동적인 인덱싱 동작은 공격자가 캐시 라인에 액세스할 수 있는 속도보다 빠른 속도로 캐시 라인의 동적인 인덱싱을 적극적으로 변경하는 것을 포함하여, 공격(예를 들어, 시간을 증가시킴)을 어렵게 할 수 있다.
일 실시예에서, CLB 및 TLB의 영역에 대한 랜덤 인덱스 값은 선택된 비율로 동적으로 변화될 수 있다. 랜덤 인덱스 값이 변경되면, 영역의 위치 정보(LI)에 의해 지시된 캐시 라인은 새로운 랜덤 인덱스 값에 의해 식별된 새로운 셋으로 복사될 수 있다.
일 실시예에서, 영역 위치 정보들(LI)에 의해 지시되거나 존재 비트들(presence bit, PB)에 의해 기록되는 마지막 캐시 라인이 랜덤 인덱스 값을 계산하기 위해 랜덤 인덱스 값을 사용하는 캐시로부터 제거될 때, 영역에 대한 랜덤 인덱스 값은 새로운 랜덤 수로 변경될 수 있다. 이 경우, 랜덤 인덱스 값을 임의의 캐시 라인으로 이동하지 않고, 새로운 임의의 값으로 변경할 수 있다. 예를 들어, 도 6에 도시된 바에 따르면, CLB1(610)의 인덱스 값 필드가 L1 캐시에 대한 랜덤 인덱스 값(616)을 계산하는 데에만 사용되고, CLT(612)가 영역의 마지막 캐시 라인이 L1 캐시에서 축출되었다고 결정하면, CLT(612)의 영역에 대한 랜덤 인덱스 값(616)이 L1 캐시의 어떤 캐시 라인의 이동 없이 새로운 랜덤 수로 변경될 수 있다. 도 7의 유사한 예는 효과적인 랜덤 인덱스 값(716)의 업데이트를 허용하기 위해 페이지들 중 하나의 마지막 캐시 라인이 언제 축출되는지를 결정하는 PB(712)에 의존할 수 있다.
일 실시예에서, 시스템은, 캐시 라인들 중 일부가 랜덤 인덱스 값의 변경 결과로서 재배치될 수 있음에도, 랜덤 인덱스 값이 변경되는 선택된 시간 구간에서 랜덤 인덱스 값이 변하지 않은 영역을 검출할 수 있다. 이는 선택된 랜덤 인덱스 값 변경 기간을 허용하면서, 더 오랜 기간 동안 L1에 저장된 데이터를 갖는 영역들/페이지들로 캐시 라인들을 재배치하는 것을 제한할 수 있다.
태그 리스 캐시는 연관성에 대한 비용이 LI의 크기를 대수적으로 증가시키므로, 더 높은 연관성을 나타낼 수 있다. 예를 들어, 모든 캐시의 연관성을 두배로하는 것은 LI 비트를 하나 더 사용하여 수행될 수 있다. 높은 연관성은 prime+probe 부채널 공격이 선형적으로 더 높은 비용이 요구되도록 만들 수 있다.
높은 연관성의 캐시 구성에 있어서, 재배치 알고리즘은 영향을 덜 미치므로, 태그 리스 캐시들이 랜덤 재배치를 쉽게 지원할 수 있다. 많은 부채널 공격이 재배치 알고리즘(예를 들어, LRU(least-recently used))에 대한 지식을 이용하여 공격을 설정하므로, 랜덤 재배치로 전환하는 것은 공격자가 통계적으로 예측이 힘들게 하여 공격 시간이 길어지게 만들 수 있다. 데이터를 랜덤하게 재배치할 뿐만 아니라 랜덤하게 데이터를 보호하는 접근 방식은 랜덤 인덱스 값을 결정하기 어렵게 만들 수 있다. 랜덤 재배치는 캐시 동작의 효율성을 감소시킬 수 있으나, 큰 연관성은 최적의 재배치와 비교하여 성능의 차이를 상대적으로 적게 만들 수 있다.
포함하지 않음으로써 태그 리스 캐시들이 캐시 계층에 추측성 데이터를 저장하는 것을 감소시킬 수 있다. 컴퓨터 시스템의 일 실시예에서, 추측성 로드들은 데이터가 입력될 때 각 레벨에서 데이터를 저장하거나/제거되는 흔적을 남길 수 있다. 태그 리스 캐시들은 임의의 데이터 캐싱 정책을 허용하여, 다른 캐시들에 영향을 주지 않고, 캐시에 추측성 데이터를 쉽게 배치할 수 있다. 이러한 배치는 유출되는 데이터의 양을 감소시킬 수 있고, 그 효과를 쉽게 제어하고 검출할 수 있는 방식으로 융통성을 촉진할 수 있다.
캐시 설계의 이러한 특성들은 상기 공격들을 감소시키는 데에 도움이 될 수 있고, 일 실시예는 비추측성 데이터를 축출함으로써(prime+probe), 및/또는 비추측성 액세스(fluch+reload)로부터 히트(hit)함으로써 추측성 액세스가 볼 수 있게 되는 것을 방지하면서, 퍼포먼스 데이터의 추측성 프리페치를 가능하게 하는 방식으로 결합될 수 있다.
멀티 레벨에서 데이터를 추적할 수 있는 태그-리스 캐시들의 용이성 및 포함하지 않음으로써, 추측성 액세스를 감소시킬 수 있는 추측성 개별적인 캐시를 사용하여 태그 리스 캐시들을 활성화할 수 있다.
일 실시예에서, 추측성 로드들은 추측성 캐시에만 독점적으로 저장될 수 있고, 나머지 메모리 계층으로부터의 비추측적인 데이터의 축출을 감소(prime+probe)시킬 수 있다. 다른 로드들에서 추측성 캐시의 데이터에 대한 히트(hits)이 감소되어 비추측성 액세스에 의한 검출이 감소(flush+reload)될 수 있다. 파이프 라인이 로드를 커밋(commit)/ 또는 리타이어(retire)하고 비추측성으로 보장될 때, 추측성 캐시로부터의 데이터가 레귤러 계층으로 안전하게 이동될 수 있고, 추측성 프리페치의 성능이 향상될 수 있다. 일부 구현에서, 비추측성으로의 변환은 명령이 커밋되기 전에 행해질 수 있다. 일 실시예에서, 명령이 더 이상 추측적이지 않고 수행될 것으로 결정될 때, 비추측성으로의 변환이 수행될 수 있다.
CLB 및 TLB에 각각 랜덤 인덱스 값을 도입함에 따라, 추측적으로 로드된 데이터에 히트하는 것을 감소시키거나(prime+probe) 추측성 로드들로부터 야기된 축출로부터 배우는 것을 어렵게 함으로써, 이러한 공격으로부터 캐시 계층을 보호할 수 있다. 이러한 접근법은 높은 연관성, 랜덤 인덱싱, 및 강제된 포함의 결핍의 영향을 결합할 수 있고, 추측성 데이터의 저장 및 로딩을 위한 안전 영역 캐시를 제공할 수 있다. 추측성 로드는 안전한 캐시에 저장될 수 있고, 추측성으로 표시될 수 있다. 잘못 추측되면, 일단 추측이 해결된 후 데이터가 축출될 수 있다. 그밖에, 추측성 획득이 설정되니 않은 상태에서 이 지점으로부터의 표시는 캐시 계층의 나머지 부분에도 저장될 수 있다.
일 실시예에서, L1 캐시는 부채널 공격들을 감소시키도록 설계될 수 있다. 일 실시예에서, L1 캐시는 추측적으로 로드된 데이터를 추적, 랜덤 재배치, 랜덤 인덱싱, 및 32 웨이 연관성을 나타낼 수 있다. 추측적으로 로드된 데이터를 추적하면 추측성 데이터의 히트가 감소되어, flush+reload 공격이 감소될 수 있다. Prime+prove 공격을 감소시키는 것은 결정되기 어려운 랜덤 인덱스 값을 선택하는 것을 포함할 수 있고, 연관성을 높이고, 캐시에 저장된 데이터 위치를 모호하기 위해 랜덤 인덱스 비트를 사용하는 것을 허용할 수 있다.
일 실시예에서, 영역의 랜덤 인덱스 값은 때때로 변경될 수 있다. 예를 들어, 공격자가 영역의 인덱스를 결정하면, 공격자가 영역에 접근하기 전에 랜덤 인덱스 값이 변경될 수 있다. 일 실시예에서, 하나 이상의 랜덤 인덱스 값은 선택된 주기 및/또는 선택된 빈도에서 변경될 수 있다. 일 실시예에서, 랜덤 인덱스 값이 변경되는 주기 및/또는 빈도는 공격의 속도 및/또는 보안의 레벨에 따라 선택될 수 있다. 일 실시예에서, 영역이 처음 도입되거나, 영역 내의 마지막 캐시 라인이 추축될 때마다 인덱스 비트는 자유롭게 변경될 수 있고, 영역의 서브 셋은 때때로 변경되는 랜덤 인덱스 값을 가질 수 있다. 만약 캐시에 데이터가 저장되어 있는 동안 영역의 동적 인덱스 비트가 변경되면, 해당 캐시 라인들이 축출되고 재저장될 수 있으나, L1 캐시에 있는 데이터를 포함하는 CLB 엔트리 볼 때 이러한 캐시 라인들이 L1 캐시에서 검색되지 않을 수 있다.
일 실시예에서, 메모리 요청을 위해 리턴된 캐시 라인은 비 포함 캐시 계층으로 인해 L1 캐시에 인스톨될 때, L2 캐시에는 인스톨되지 않을 수 있다. 캐시 라인은 L1 캐시 축출 시에 L2 캐시에 인스톨될 수 있고, 적절하다고 판단되는 경우 (예를 들어, 일부 캐시 배치 휴리스틱(heuristics)에 의해 가이드 되는 경우)에 L2 캐시에 인스톨될 수 있다. 추측성 액세스의 경우, 캐시 라인은 안전한 L1 캐시에 인스톨되거나, 추측성으로 표시될 수 있고, 비추측성 액세스를 감소시킬 수 있다. 또한, 추측성 프리페치를 향상시키기 위해 프로세서 및/또는 프로세서 코어에 가깝게 유지될 수 있다. 추측이 완료되고, 명령이 수행될 것으로 결정되면, 캐시 라인들은 미래의 재사용을 위해 적절한 위치로 이동될 수 있다.
일 실시예에서, 스테이트 머신(state machine, SM)은 데이터를 안전 캐시로부터 가져올 수 있고, 또는 추측성 캐시로 가져갈 수 있다. 일 실시예에서, 스테이트 머신은 어떤 캐시 라인을 L1 캐시 및/또는 L2 캐시에 인스톨할지를 결정할 수 있고, 또한 언제 촉진시킬지를 결정할 수 있다. 일 실시예에서, 프로세서는 메모리 요청이 비추측적일 때를 스테이트 머신에 알릴 수 있다. 예를 들어, 메모리 요청이 악의적인 부채널 공격의 일부가 될 수 없다는 것이 알려졌을 때 스테이트 머신에 알릴 수 있다. 만약 스테이트 머신이 긴 레이턴시의 DRAM 액세스를 처리하고, 선행하는 브랜치들(branches)이 모두 해결된 경우(예를 들어, 추측적인 명령을 수행하지 않는 다른 잠재적인 원인), 프로세서는 메모리 요청이 더 이상 추측적이지 않으며, 다른 캐시에 안전하게 설치될 수 있음을 스테이트 머신에 알릴 수 있다. 만약 데이터가 DRAM으로 리턴될 때 캐시 라인이 여전이 추측적인 것으로 간주되면, 메모리 요청은 L1 캐시에서 만족되고, 캐시 라인은 추측성으로 표시될 수 있다.
명확성을 위해, 본 명세서의 일부 설명은 캐시 라인이 요청하는 CPU에 리턴되거나 위치될 수 있는 방법에 대한 기술을 설명한다. 일 실시예는 캐시 라인 내에 포함된 요청된 단어가 선택되거나 CPU로 리턴되는 다양한 방식을 상술하게 기술하지는 않으나, 이러한 세부 사항은 당업자에게 명백할 수 있다.
명확성을 위해, 본 명세서의 일부 설명은 캐시 계층 구조의 데이터 처리가 배타적 캐시 계층 구조를 기술한다고 설명한다. 통상의 기술자는 기술된 실시 예가 포괄적 메모리 계층을 커버하도록 확장될 수 있다는 것을 이해할 수 있다.
전술한 예시적 실시예는 각각 도 1 및 도 2와 관련하여 도시되고 설명된 바와 같이 단일 프로세서 시스템 및 멀티 프로세서 시스템과 관련하여 유용할 수 있고, 본 개시의 예시적 실시예에 따른 도 6의 CLB1(610) 및 CLB2(630)은 단일 프로세서와 관련하여 설명될 수 있으나, 멀티 프로세스 시스템에서 이용될 수도 있다.
도면들에서 논의되고 제시된 예시적 실시예들을 포함하는 본 개시의 주요 특징은 다양한 아키텍쳐로 구현될 수 있다. 일 실시 예에서, 캐시는 하나 이상의 프로세서상에서 실행되는 스레드 또는 프로세스와 같은 하나 이상의 소프트웨어 구성 요소에 의해 제어되거나 액세스 되거나 저장될 수 있다. 일 실시예에서, 메모리에 저장되는 명령 셋과 같은 소프트웨어 라이브러리는 메모리에 저장되고, 프로세스 및/ 또는 운영 시스템의 스레드 및/또는 어플리케이션에 의해 액세스될 수 있다. 일 실시예에서, 비일시적인 컴퓨터 판독 가능 매체에 저장된 명령 셋은 프로세서에 의해 수행될 수 있다. 일 실시예에서, 캐시는 하나 이상의 하드웨어 장치에 의해 제어되거나 액세스되거나 저장될 수 있다. 일 실시에ㅖ에서, 이러한 하드웨어 장치는, 하나 이상의 프로세서 코어를 각각 갖는 하나 이상의 프로세서와 같으나, 이에 한정되지 않는, 프로세싱 회로를 포함할 수 있다. 이러한 프로세서는 중앙 처리 장치(central processing unit, CPU), 그래픽 처리 장치(graphics processing unit, GPU), 멀티 코어 CPU 또는 멀티 코어 GPU의 코어, 산술 로직 유닛(arithmetic logic unit, ALU), 디지털 신호 프로세서, 마이크로 컨트롤러, 시스템 온 칩(System-on-Chip, SoC), 필드 프로그램어블 게이트 어레이(field programmable gate array, FPGA), 프로그램어블 로직 어레이(programmable logic array, PLA), 주문형 집적 회로(application specific integrated circuit, ASIC), 모듈러 로직 장치, 패키지 로직 칩, 및/또는 정의된 방식으로 명령에 응답하고 명령을 실행할 수 있는 임의의 다른 장치 중 적어도 하나 일 수 있다. 일 실시예에서, 캐시는 동일한 타입 또는 상이한 타입의 구성의 조합의 의해 저장되거나, 액세스 되거나, 저장될 수 있다. 예를 들어, 상기 구성은, 복수의 프로세서들, 단일 프로세서의 프로세싱 코어들, 멀티 프로세서 컴퓨터의 프로세싱 코어들, 직렬로 동작하는 2개 이상의 프로세서(예를 들어, CPU 및 GPU, ASIC를 이용하는 CPU), 및/또는 프로세서에 의해 실행되는 소프트웨어일 수 있다. 예시적 실시예들은 캐시를 저장, 액세스, 및 관리하는 하나 이상의 CPU들을 포함하는 컴퓨터와 같은 단일 장치의 구성을 포함할 수 있다. 일 실시예는 캐시를 액세스 및/또는 관리하기 위해 통신하는 CPU를 포함하는 2개 이상의 장치와 같은 다수의 장치의 구성 요소를 포함할 수 있다. 일 실시예는 서버 컴퓨팅 장치, 서버 컴퓨터, 서버 컴퓨터의 연결, 서버 팜, 클라우드 컴퓨터, 컨텔츠 플랫폼, 모바일 컴퓨팅 장치, 스마트 폰, 태블릭, 또는 셋탑박스를 포함할 수 있다. 일 실시예는 직접적으로 통신하는 구성 요소(예를 들어, 멀티 코어 프로세서의 2개 이상의 코어) 및/또는 간접적으로 통신하는 구성 요소(예를 들어, 버스를 통해, 유선 또는 무선 채널 또는 네트워크를 통해, 마이크로 컨트롤러 또는 아비터(arbiter)와 같은 중간(intermediate) 구성을 통해)을 포함할 수 있다. 일 실시예는 장치 또는 구성에 의해 각각 수행되는 캐시 관리자의 다수의 인스턴스들을 특징으로 할 수 있고, 이러한 인스턴스들은 동시에, 연속적으로, 및/또는 인터리빙된 방식으로 실행될 수 있다. 일 실시예는 2개 이상의 장치 또는 컴포넌트에 대한 캐시 관리자의 인스턴스의 분포를 특징으로 할 수 있다.
일 실시예는 메모리에 저장되는 캐시 및 컴퓨터 판독 가능 명령어들을 포함하는 컴포넌트들을 포함할 수 있다. 이하의 설명에 한정되지는 않으나, 메모리의 비 한정적인 예시는 재기록 가능한 비휘발성 메모리 장치(예를 들어, 플래시 메모리 장치, 소거 가능 프로그램어블 판독 전용 메모리 장치, 또는 마스크 판독 전용 메모리 장치), 휘발성 메모리 장치(예를 들어, 정적 랜덤 액세스 메모리 장치(SRAM), 동적 랜덤 액세스 메모리 장치(DRAM)), 자기 저장 매체(예를 들어, 아날로그 또는 디지털 자기 테이프, 하드 디스크 드라이브) 및 광 저장 매체(예를 들어, CD, DVD, 또는 블루레이 디스크)를 포함할 수 있다. 재기록 가능 비휘발성 메모리 장치가 내장된 메모리의 예로는 메모리 카드, 판독 전용 메모리(read only memory, ROM)가 내장된 매체가 있을 수 있으나, 이에 한정되는 것은 아니다. 일 실시예는 랜덤 액세스 메모리(randoem access memory, RAM), ROM, 영구 대용양 저장 장치(예를 들어, 디스트 드라이브) 및/또는 데이터를 저장하고 기록할 수 있는 임의의 다른 유사한 데이터 저장 메커니즘을 포함할 수 있다. 메모리는 하나 이상의 운영 체제 및/또는 여기에 설명된 예시적인 실시예를 구현하기 위해 컴퓨터 프로그램, 프로그램 코드, 명령 또는 이들의 조합을 저장하도록 구성될 수 있다. 메모리는 USB(universal serial bus) 플래시 드라이브, 메모리 스틱, 블루레이/DVD/CD-ROM 드라이브, 메모리 카드 및/또는 다른 유사한 컴퓨터 판독 가능 저장 매체를 포함할 수 있다. 일 실시예에서, 캐시, 컴퓨터 프로그램, 프로그램 코드, 명령들 및/또는 이들의 조합은 네트워크 인터페이스를 통해 원격 데이터 저장 장치들로부터 하나 이상의 로컬 메모리들 및/또는 하나 이상의 로컬 프로세서들로 로딩될 수 있다. 일 실시예에서, 캐시, 컴퓨터 프로그램, 프로그램 코드, 명령 및/또는 이들의 조합은 다른 로컬 메모리 및/또는 다른 로컬 프로세서 또는 다른 구성 요소로부터 로딩될 수 있다.
특정 예시적인 컴퓨터 아키텍쳐와 관련하여 상술하였으나, 캐싱은 컴퓨터 시스템 내부뿐만 아니라 외부의 많은 다른 설정들에 존재할 수 있고, 상기 실시예뜰은 이러한 다른 상황들에 동등하게 적용될 수 있다. 이러한 용도의 예로는 디스크 또는 플래시 메모리와 같은 저속 대용량 저장 장치의 데이터를, DRAM을 사용하여 구현할 수 있는 더 빠르고 더 작은 대용량 저장 장치로 캐시하는 가상 메모리 시스템이 있다. 컴퓨터 시스템에서 캐싱의 다른 예는, 디스크 캐싱, 웹 캐싱 및 네임 캐싱을 포함할 수 있으나, 이에 한정되지는 않는다. 이러한 캐시의 조직 및 캐싱 메커니즘은 상기 논의된 캐시의 구성 및 캐싱 메커니즘, 예를 들어, 세트의 크기 차이, 세트 및 연관성의 구현 등과 다를 수 있다. 캐싱 메커니즘 그 자체의 구현에 관계없이, 다양한 캐싱 방식을 구현하는 데 동등하게 적용될 수 있다.
개시된 실시예들은 예를 들어, 다양한 캐시 계층 구조와 관련된 시스템 및 방법을 설명하나, 본 개시의 실시예들은 설명에 한정되지 않으며, 설명된 실시예들은 본 발명의 사상 및 범위에 포함되는 대안, 수정 및 등가물을 포함할 수 있다. 본 실시 예의 특징 및 요소가 실시 예에서 특정 조합으로 기술되었지만, 각 특징 또는 요소는 실시 예의 다른 특징 및 요소없이 단독으로 또는 본원에 개시된 다른 특징 및 요소가 있거나 없는 다양한 조합으로 사용될 수 있다. 본 출원에 제공된 방법 또는 흐름도는 범용 컴퓨터 또는 프로세서에 의한 실행을 위해 컴퓨터 읽기 가능 저장 매체에 유형적으로 구현된 컴퓨터 프로그램, 소프트웨어 또는 펌웨어로 구현 될 수 있다.
본 발명은 도면에 도시된 실시예를 참고로 설명되었으나 이는 예시적인 것에 불과하며, 본 기술 분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 다른 실시예가 가능하다는 점을 이해할 것이다. 따라서, 본 발명의 진정한 기술적 보호 범위는 첨부된 특허청구범위의 기술적 사상에 의하여 정해져야 할 것이다.
Claims (20)
- 장치의 캐시 내의 데이터에 액세스하는 방법에 있어서, 상기 방법은,
상기 캐시에 저장된 캐시 라인에 대한 액세스 허용을 버퍼에 저장하는 단계;
상기 액세스 허용의 적어도 일부에 기초하여, 상기 캐시 라인에 대한 메모리 명령의 상기 캐시 라인에 대한 액세스가 허용되는지를 결정하는 단계; 및
상기 메모리 명령의 상기 캐시 라인에 대한 액세스가 거절되면, 상기 캐시의 변경을 차단하는 단계; 를 포함하는 방법. - 제1항에 있어서,
상기 방법은,
상기 캐시 라인에 대한 액세스 허용이 변경되면 상기 캐시 내의 상기 캐시 라인을 무효화하는 단계를 더 포함하는 것을 특징으로 하는 방법. - 제1항에 있어서,
상기 버퍼는 상기 장치의 메모리 내의 상기 캐시 라인의 영역을 식별하는 캐시 테이블 엔트리를 포함하는 캐시 테이블을 포함하고,
상기 캐시 라인에 대한 액세스 허용을 저장하는 단계는, 상기 캐시 라인에 대한 상기 캐시 테이블 엔트리에 상기 액세스 허용을 저장하는 것을 포함하는 것을 특징으로 하는 방법. - 제1항에 있어서,
상기 버퍼는 상기 장치의 메모리 내의 상기 캐시 라인의 영역을 식별하는 캐시 테이블 엔트리를 포함하는 캐시 테이블 및 상기 캐시 테이블에 대한 위치 정보을 포함하고,
상기 캐시 라인에 대한 액세스 허용을 저장하는 단계는, 상기 캐시 테이블에 대한 상기 위치 정보에 상기 액세스 허용을 저장하는 것을 포함하는 것을 특징으로 하는 방법. - 제1항에 있어서,
상기 방법은,
계류 중인 상기 메모리 명령의 상기 캐시 라인에 대한 액세스가 허용되는 것으로 결정된 후에 상기 캐시 라인에 대한 액세스가 변경되면, 상기 변경된 액세스 허용의 적어도 일부에 기초하여, 상기 계류 중인 메모리 명령의 상기 캐시 라인에 대한 액세스가 허용되는지를 재결정하는 단계를 더 포함하는 것을 특징으로 하는 방법. - 제1 항에 있어서,
상기 방법은,
상기 버퍼에 랜덤 인덱스 값을 저장하는 단계;
상기 랜덤 인덱스 값의 적어도 일부에 기초하여 위치하도록 상기 캐시에 상기 캐시 라인을 저장하는 단계; 및
상기 메모리 명령의 상기 캐시 라인에 대한 액세스가 허용되면, 상기 랜덤 인덱스 값의 적어도 일부에 기초하여 상기 새키 라인의 위치를 결정함으로써, 상기 캐시 라인에 액세스하는 단계; 를 더 포함하는 것을 특징으로 하는 방법. - 제6항에 있어서,
상기 방법은,
선택된 주기로 주기적으로 상기 랜덤 인덱스 값을 변경하는 단계를 더 포함하는 것을 특징으로 하는 방법. - 제7항에 있어서,
상기 방법은,
상기 랜덤 인덱스 값이 새로운 랜덤 인덱스 값으로 변경되면, 상기 새로운 랜덤 인덱스 값의 적어도 일부에 기초하는 새로운 위치로 상기 캐시 라인을 이동하는 단계를 더 포함하는 것을 특징으로 하는 방법. - 제6항에 있어서,
상기 방법은,
상기 캐시로부터 상기 캐시 라인이 제거되면, 상기 랜덤 인덱스 값을 변경하는 단계를 더 포함하는 것을 특징으로 하는 방법. - 제1항에 있어서,
상기 방법은,
상기 메모리 명령에 대한 추측성 로드로써 상기 캐시 라인을 저장하는 경우 상기 캐시 라인을 추측성으로 마킹하는 단계;
비추측을 통해 상기 메모리 명령에 대한 상기 추측성 로드를 해결하는 경우, 상기 캐시 라인을 비추측성으로 마킹하는 단계; 및
잘못된 추측을 통해 상기 메모리 명령에 대한 추측성 로드를 해결하는 경우, 상기 캐시로부터 상기 캐시 라인을 제거하는 단계;를 더 포함하는 것을 특징으로 하는 방법. - 캐시 라인을 저장하는 캐시; 및
적어도 하나의 프로세서; 를 포함하고,
상기 적어도 하나의 프로세서는,
상기 캐시 라인에 대한 액세스 허용을 버퍼에 저장하고,
상기 액세스 허용의 적어도 일부에 기초하여, 상기 캐시 라인에 대한 메모리 명령의 상기 캐시 라인에 대한 액세스가 허용되는지를 결정하고,
상기 메모리 명령의 상기 캐시 라인에 대한 액세스가 거절되면, 상기 캐시의 변경을 차단하는 것을 특징으로 하는 시스템. - 제11항에 있어서,
상기 버퍼는 메모리 내의 상기 캐시 라인의 영역을 식별하는 캐시 테이블 엔트리를 포함하는 캐시 테이블을 포함하고,
상기 적어도 하나의 프로세서는 상기 캐시 라인에 대한 상기 캐시 테이블 엔트리에 상기 액세스 허용을 저장하는 것을 특징으로 하는 시스템. - 제11항에 있어서,
상기 버퍼는 메모리 내의 상기 캐시 라인의 영역을 식별하는 캐시 테이블 엔트리를 포함하는 캐시 테이블 및 상기 캐시 테이블에 대한 위치 정보을 포함하고,
상기 적어도 하나의 프로세서는 상기 캐시 테이블에 대한 상기 위치 정보에 상기 액세스 허용을 저장하는 것을 특징으로 하는 시스템. - 제11항에 있어서,
상기 적어도 하나의 프로세서는, 상기 캐시 라인에 대한 액세스 허용이 변경되면 상기 캐시 내의 상기 캐시 라인을 무효화하는 것을 특징으로 하는 시스템. - 제11항에 있어서,
상기 적어도 하나의 프로세서는,
버퍼에 랜덤 인덱스 값을 저장하고,
상기 랜덤 인덱스 값의 적어도 일부에 기초하여 위치하도록 상기 캐시에 상기 캐시 라인을 저장하고,
상기 메모리 명령의 상기 캐시 라인에 대한 액세스가 허용되면, 상기 랜덤 인덱스 값의 적어도 일부에 기초하여 상기 캐시 라인의 위치를 결정함으로써, 상기 캐시 라인에 액세스하는 것을 특징으로 하는 시스템. - 제15항에 있어서,
상기 적어도 하나의 프로세서는 선택된 주기로 주기적으로 상기 랜덤 인덱스 값을 변경하는 것을 특징으로 하는 시스템. - 제16항에 있어서,
상기 적어도 하나의 프로세서는 상기 랜덤 인덱스 값을 새로운 랜덤 인덱스 값으로 변경하면, 상기 새로운 랜덤 인덱스 값의 적어도 일부에 기초하는 새로운 위치로 상기 캐시 라인을 이동하는 것을 특징으로 하는 시스템. - 제15항에 있어서,
상기 적어도 하나의 프로세서는 상기 캐시로부터 상기 캐시 라인이 제거되면, 상기 랜덤 인덱스 값을 변경하는 단계를 더 포함하는 것을 특징으로 하는 방법. - 제11항에 있어서,
상기 적어도 하나의 프로세서는,
상기 메모리 명령에 대한 추측성 로드로써 상기 캐시 라인을 저장하는 경우 상기 캐시 라인을 추측성으로 마킹하고
비추측을 통해 상기 메모리 명령에 대한 상기 추측성 로드를 해결하는 경우, 상기 캐시 라인을 비추측성으로 마킹하고,
잘못된 추측을 통해 상기 메모리 명령에 대한 추측성 로드를 해결하는 경우, 상기 캐시로부터 상기 캐시 라인을 제거하는 것을 특징으로 하는 시스템. - 프로세서에 의해 수행되는 명령들이 기록된 비일시적 컴퓨터 판독 가능 저장 매체에 있어서,
상기 명령들이 수행될 때, 상기 프로세서가 수행하는 동작들은,
캐시에 저장된 캐시 라인에 대한 액세스 허용을 버퍼에 저장하고,
상기 액세스 허용의 적어도 일부에 기초하여, 상기 캐시 라인에 대한 메모리 명령의 상기 캐시 라인에 대한 액세스가 허용되는지를 결정하고,
상기 메모리 명령의 상기 캐시 라인에 대한 액세스가 거절되면, 상기 캐시의 변경을 차단하는 것을 포함하는 것을 특징으로 하는 컴퓨터 판독 가능 저장 매체.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201862638450P | 2018-03-05 | 2018-03-05 | |
US62/638,450 | 2018-03-05 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20190105507A true KR20190105507A (ko) | 2019-09-17 |
KR102287758B1 KR102287758B1 (ko) | 2021-08-09 |
Family
ID=65685221
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020190022577A KR102287758B1 (ko) | 2018-03-05 | 2019-02-26 | 부채널 공격으로부터 캐시를 보호하는 시스템 |
Country Status (5)
Country | Link |
---|---|
US (1) | US10915466B2 (ko) |
EP (1) | EP3537305B1 (ko) |
KR (1) | KR102287758B1 (ko) |
CN (1) | CN110232031B (ko) |
TW (1) | TWI798370B (ko) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20210072342A (ko) | 2019-12-09 | 2021-06-17 | 충남대학교산학협력단 | 소스코드 내 cpu 취약점 탐색 방법 |
KR20220044094A (ko) * | 2020-09-28 | 2022-04-06 | 고려대학교 산학협력단 | Fpga 기반 캐시 무효화 방법 및 이를 수행하는 장치 |
WO2022092499A1 (ko) * | 2020-10-30 | 2022-05-05 | 재단법인대구경북과학기술원 | 신뢰가능한 실행 환경을 이용한 캐시 부 채널 공격 탐지 방법 및 장치 |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10116436B1 (en) * | 2017-09-26 | 2018-10-30 | Intel Corporation | Techniques for preventing memory timing attacks |
US11372972B2 (en) * | 2018-03-19 | 2022-06-28 | Intel Corporation | Side-channel exploit detection |
US11169805B2 (en) * | 2018-04-30 | 2021-11-09 | Hewlett Packard Enterprise Development Lp | Dynamic processor cache to avoid speculative vulnerability |
US20190332384A1 (en) * | 2018-04-30 | 2019-10-31 | Hewlett Packard Enterprise Development Lp | Processor architecture with speculative bits to prevent cache vulnerability |
US11055226B2 (en) * | 2018-06-29 | 2021-07-06 | Intel Corporation | Mitigation of cache-latency based side-channel attacks |
US10929535B2 (en) * | 2018-06-29 | 2021-02-23 | Intel Corporation | Controlled introduction of uncertainty in system operating parameters |
US20200034152A1 (en) * | 2018-07-30 | 2020-01-30 | Cavium, Llc | Preventing Information Leakage In Out-Of-Order Machines Due To Misspeculation |
US11068612B2 (en) * | 2018-08-01 | 2021-07-20 | International Business Machines Corporation | Microarchitectural techniques to mitigate cache-based data security vulnerabilities |
US11221957B2 (en) * | 2018-08-31 | 2022-01-11 | International Business Machines Corporation | Promotion of ERAT cache entries |
US11635965B2 (en) * | 2018-10-31 | 2023-04-25 | Intel Corporation | Apparatuses and methods for speculative execution side channel mitigation |
US20210081575A1 (en) * | 2019-09-12 | 2021-03-18 | Microsoft Technology Licensing, Llc | Hybrid mitigation of speculation based attacks based on program behavior |
CN111241599B (zh) * | 2019-09-19 | 2022-08-23 | 中国科学院信息工程研究所 | 一种处理器芯片安全依赖的动态识别及维护方法 |
CN111638913B (zh) * | 2019-09-19 | 2023-05-12 | 中国科学院信息工程研究所 | 一种基于随机化索引的处理器芯片分支预测器安全增强方法及电子装置 |
CN111274573B (zh) * | 2019-09-19 | 2022-09-09 | 中国科学院信息工程研究所 | 一种基于访存请求序列的处理器芯片假安全依赖冲突的识别方法 |
US11210102B2 (en) * | 2019-11-26 | 2021-12-28 | Arm Limited | Speculative buffer for speculative memory accesses with entries tagged with execution context identifiers |
KR20210079637A (ko) * | 2019-12-20 | 2021-06-30 | 에스케이하이닉스 주식회사 | 데이터 저장 장치 및 그 동작 방법 |
CN111274198B (zh) * | 2020-01-17 | 2021-11-19 | 中国科学院计算技术研究所 | 一种微架构 |
CN111274584B (zh) * | 2020-01-17 | 2022-07-15 | 中国科学院计算技术研究所 | 一种基于缓存回滚以防御处理器瞬态攻击的装置 |
CN111259384B (zh) * | 2020-01-17 | 2022-06-14 | 中国科学院计算技术研究所 | 一种基于缓存随机无效的处理器瞬态攻击防御方法 |
CN111414321B (zh) * | 2020-02-24 | 2022-07-15 | 中国农业大学 | 一种基于动态映射机制的cache防护方法及装置 |
US11029957B1 (en) | 2020-03-27 | 2021-06-08 | Intel Corporation | Apparatuses, methods, and systems for instructions to compartmentalize code |
CN111898127A (zh) * | 2020-07-02 | 2020-11-06 | 中国科学院信息工程研究所 | 一种可抵抗基于flush操作的Spectre攻击的方法及系统 |
US11868469B2 (en) | 2020-08-27 | 2024-01-09 | Ventana Micro Systems Inc. | Processor that mitigates side channel attacks by preventing all dependent instructions from consuming architectural register result produced by instruction that causes a need for an architectural exception |
US11797673B2 (en) | 2020-08-27 | 2023-10-24 | Ventana Micro Systems Inc. | Processor that mitigates side channel attacks by expeditiously initiating flushing of instructions dependent upon a load instruction that causes a need for an architectural exception |
US11733972B2 (en) | 2020-10-06 | 2023-08-22 | Ventana Micro Systems Inc. | Processor that mitigates side channel attacks by providing random load data as a result of execution of a load operation that does not have permission to access a load address |
US11907369B2 (en) | 2020-08-27 | 2024-02-20 | Ventana Micro Systems Inc. | Processor that mitigates side channel attacks by preventing cache memory state from being affected by a missing load operation by inhibiting or canceling a fill request of the load operation if an older load generates a need for an architectural exception |
US11734426B2 (en) | 2020-10-06 | 2023-08-22 | Ventana Micro Systems Inc. | Processor that mitigates side channel attacks by prevents cache line data implicated by a missing load address from being filled into a data cache memory when the load address specifies a location with no valid address translation or no permission to read from the location |
US11853424B2 (en) * | 2020-10-06 | 2023-12-26 | Ventana Micro Systems Inc. | Processor that mitigates side channel attacks by refraining from allocating an entry in a data TLB for a missing load address when the load address misses both in a data cache memory and in the data TLB and the load address specifies a location without a valid address translation or without permission to read from the location |
CN113779649B (zh) * | 2021-09-08 | 2023-07-14 | 中国科学院上海高等研究院 | 一种针对投机执行攻击的防御方法 |
CN114244581B (zh) * | 2021-11-29 | 2024-03-29 | 西安四叶草信息技术有限公司 | 缓存中毒漏洞检测方法、装置、电子设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6519684B1 (en) * | 1999-11-23 | 2003-02-11 | Motorola, Inc. | Low overhead method for selecting and updating an entry in a cache memory |
US20070250666A1 (en) * | 2006-04-19 | 2007-10-25 | Thomas Andrew Sartorius | Virtually-Tagged Instruction Cache with Physically-Tagged Behavior |
US20110167222A1 (en) * | 2010-01-05 | 2011-07-07 | Samsung Electronics Co., Ltd. | Unbounded transactional memory system and method |
JP4886682B2 (ja) * | 2005-05-26 | 2012-02-29 | パナソニック株式会社 | データ処理装置 |
KR20120130004A (ko) * | 2010-02-24 | 2012-11-28 | 어드밴스드 마이크로 디바이시즈, 인코포레이티드 | 하드웨어 트랜잭션 메모리에서의 자동 중지 및 재개 |
US20170286421A1 (en) * | 2016-03-31 | 2017-10-05 | Arm Limited | Indexing entries of a storage structure shared between multiple threads |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6412043B1 (en) * | 1999-10-01 | 2002-06-25 | Hitachi, Ltd. | Microprocessor having improved memory management unit and cache memory |
US6470437B1 (en) * | 1999-12-17 | 2002-10-22 | Hewlett-Packard Company | Updating and invalidating store data and removing stale cache lines in a prevalidated tag cache design |
US8359453B2 (en) * | 2010-09-13 | 2013-01-22 | International Business Machines Corporation | Real address accessing in a coprocessor executing on behalf of an unprivileged process |
US8682877B2 (en) * | 2012-06-15 | 2014-03-25 | International Business Machines Corporation | Constrained transaction execution |
WO2015075673A1 (en) * | 2013-11-21 | 2015-05-28 | Green Cache AB | Systems and methods for reducing first level cache energy by eliminating cache address tags |
CN104679669B (zh) * | 2014-11-27 | 2018-04-27 | 华为技术有限公司 | 高速缓存cache存储器系统及访问缓存行cache line的方法 |
US9940287B2 (en) * | 2015-03-27 | 2018-04-10 | Intel Corporation | Pooled memory address translation |
-
2019
- 2019-02-26 KR KR1020190022577A patent/KR102287758B1/ko active IP Right Grant
- 2019-02-27 US US16/286,821 patent/US10915466B2/en active Active
- 2019-03-04 TW TW108107018A patent/TWI798370B/zh active
- 2019-03-04 EP EP19160463.6A patent/EP3537305B1/en active Active
- 2019-03-05 CN CN201910164064.8A patent/CN110232031B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6519684B1 (en) * | 1999-11-23 | 2003-02-11 | Motorola, Inc. | Low overhead method for selecting and updating an entry in a cache memory |
JP4886682B2 (ja) * | 2005-05-26 | 2012-02-29 | パナソニック株式会社 | データ処理装置 |
US20070250666A1 (en) * | 2006-04-19 | 2007-10-25 | Thomas Andrew Sartorius | Virtually-Tagged Instruction Cache with Physically-Tagged Behavior |
US20110167222A1 (en) * | 2010-01-05 | 2011-07-07 | Samsung Electronics Co., Ltd. | Unbounded transactional memory system and method |
KR20120130004A (ko) * | 2010-02-24 | 2012-11-28 | 어드밴스드 마이크로 디바이시즈, 인코포레이티드 | 하드웨어 트랜잭션 메모리에서의 자동 중지 및 재개 |
US20170286421A1 (en) * | 2016-03-31 | 2017-10-05 | Arm Limited | Indexing entries of a storage structure shared between multiple threads |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20210072342A (ko) | 2019-12-09 | 2021-06-17 | 충남대학교산학협력단 | 소스코드 내 cpu 취약점 탐색 방법 |
KR20220044094A (ko) * | 2020-09-28 | 2022-04-06 | 고려대학교 산학협력단 | Fpga 기반 캐시 무효화 방법 및 이를 수행하는 장치 |
WO2022092499A1 (ko) * | 2020-10-30 | 2022-05-05 | 재단법인대구경북과학기술원 | 신뢰가능한 실행 환경을 이용한 캐시 부 채널 공격 탐지 방법 및 장치 |
Also Published As
Publication number | Publication date |
---|---|
US20190272239A1 (en) | 2019-09-05 |
CN110232031B (zh) | 2024-09-20 |
KR102287758B1 (ko) | 2021-08-09 |
EP3537305A1 (en) | 2019-09-11 |
US10915466B2 (en) | 2021-02-09 |
EP3537305B1 (en) | 2021-04-28 |
TW201945941A (zh) | 2019-12-01 |
TWI798370B (zh) | 2023-04-11 |
CN110232031A (zh) | 2019-09-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102287758B1 (ko) | 부채널 공격으로부터 캐시를 보호하는 시스템 | |
US4775955A (en) | Cache coherence mechanism based on locking | |
US7793067B2 (en) | Translation data prefetch in an IOMMU | |
US10031849B2 (en) | Tracking alternative cacheline placement locations in a cache hierarchy | |
US10402344B2 (en) | Systems and methods for direct data access in multi-level cache memory hierarchies | |
JP2021525416A (ja) | 投機制限メモリ領域タイプ | |
CN112753024B (zh) | 基于外部存储器的转换后备缓冲器 | |
US11762566B2 (en) | Programmable mapping of guard tag storage locations | |
WO2021032943A1 (en) | Capability write address tracking | |
KR102478766B1 (ko) | 디스크립터 링 관리 | |
KR20180122969A (ko) | 멀티 프로세서 시스템 및 이에 포함된 프로세서의 데이터 관리 방법 | |
Singh et al. | SPX64: A scratchpad memory for general-purpose microprocessors | |
EP0220451B1 (en) | A cache coherence mechanism based on locking | |
US11494300B2 (en) | Page table walker with page table entry (PTE) physical address prediction | |
Lipp | Cache attacks on arm | |
US11822652B1 (en) | Prime and probe attack mitigation | |
Jaamoum | Strategies for securing cache memories against software side-channel attacks | |
Zhang | Software-only Rowhammer Attacks and Countermeasures | |
CN117807588A (zh) | 基于备份缓存的一级数据缓存侧信道攻击防御方法及系统 | |
Mangard | Cache Attacks and Rowhammer on ARM |
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 |