기술(IT)

CPU 캐시(CPU Cache) 주소번역

2019. 10. 7.
728x90

CPU 캐시 주소번역
대부분의 범용 CPU는 어떤 형태의 가상 메모리를 구현한다. 프로그램은 물리적 주소 공간의 주소가 아닌 가상 주소 공간의 주소로 계산, 비교, 읽기 및 쓰기를 수행하여 프로그램을 더 단순하고 쉽게 만든다. 요약하자면, 시스템에서 실행 중인 각 프로그램은 해당 프로그램에 대한 코드와 데이터만 포함하는 자체적인 단순화된 주소 공간을 보거나 모든 프로그램이 공통 가상 주소 공간에서 실행된다. 가상 메모리를 사용하려면 프로세서가 프로그램에서 생성한 가상 주소를 메인 메모리의 물리적 주소로 변환해야 한다. 이 번역을 하는 프로세서의 부분은 메모리 관리 장치(MMU)로 알려졌다. MMU를 통과하는 빠른 경로는 운영 체제의 페이지 테이블, 세그먼트 테이블 또는 둘 모두의 매핑 캐시인 변환 룩사이드 버퍼(TLB)에 저장된 번역을 수행할 수 있다.


본 토론의 목적상, 주소 변환의 세 가지 중요한 특징이 있다.
- 대기 시간: 물리적 주소는 주소 생성기에서 가상 주소를 사용할 수 있는 후 MMU에서 일정 시간, 아마도 몇 주기 후에 사용할 수 있다.
- 세분성: 가상 주소 공간은 페이지로 구분된다. 일부 초기 가상 메모리 시스템은 프로그래밍된 모든 메인 메모리에 액세스하기 전에 페이지 테이블(메인 메모리에 저장)에 대한 액세스가 필요했기 때문에 매우 느렸다. 캐시 없이, 이것은 효과적으로 메모리 접속 속도를 반으로 줄였다. 

- 별칭: 여러 개의 가상 주소가 단일 물리적 주소에 매핑될 수 있다. 대부분 프로세서는 그 단일 물리적 주소에 대한 모든 업데이트가 프로그램 순서에 따라 수행될 것을 보장한다. 이 보증을 이행하기 위해 프로세서는 주어진 시간에 하나의 물리적 주소 사본만 캐시에 저장되도록 해야 한다. 

 

캐시는 인덱스 또는 태그가 물리적 주소에 해당하는지 또는 가상 주소에 따라 네 가지 유형으로 나눌 수 있다.
물리적으로 인덱싱된 물리적으로 태그된 캐시는 인덱스와 태그 모두에 대해 물리적 주소를 사용한다. 이것은 간단하고 앨리어싱과 관련된 문제를 피할 수 있지만, 캐시에서 주소를 조회하기 전에 물리적 주소를 검색해야 하므로(TLB 누락 및 메인 메모리에 대한 액세스 포함) 또한 느리다. VIVT(Virtually Indexed, 가상 주소를 인덱스와 태그 모두에 사용한다. 이 캐싱 체계는 주어진 가상 주소의 물리적 주소를 결정하기 위해 MMU를 먼저 참조할 필요가 없기 때문에 훨씬 더 빠르게 조회할 수 있다. 그러나 VIVT는 여러 개의 다른 가상 주소가 동일한 물리적 주소를 나타낼 수 있는 앨리어싱 문제를 겪고 있다. 그 결과 그러한 주소들은 같은 메모리를 참조했음에도 불구하고 따로 캐슁되어 일관성 문제를 야기하게 된다. 이 문제에 대한 해결책이 존재하지만, 그것들은 표준 일관성 프로토콜에서는 작동하지 않는다. 또 다른 문제는 동음이의어인데, 동일한 가상 주소가 여러 다른 물리적 주소에 매핑된다. 잠재적인 솔루션으로는 컨텍스트 전환 후 캐시 플러시, 주소 공간 비 오버랩 강제, 주소 공간 ID(ASID)로 가상 주소 태그 지정 등이 있지만 이러한 매핑 자체를 가상 인덱스 자체만으로 구별할 수 없다. 또한 VA가 더 이상 유효하지 않기 때문에 캐시 라인을 플러싱해야 하는 가상-물리적 매핑이 변경될 수 있는 문제가 있다. 태그가 물리적 주소(VIPT)를 사용하는 경우 이러한 모든 문제는 존재하지 않는다. 실제로, 일관성 문제를 피하기 위해 VIPT 캐시는 그러한 인덱스 비트가 없도록 설계되었기 때문에 이것은 문제가 되지 않는다. 그러나 TLB 슬라이스는 캐시를 인덱싱하는 데 필요하며 태그를 사용하지 않는 가상 주소 비트만 변환하므로 가상 주소에 태그를 지정하면 해결되는 잘못된 캐시 적중 현상이 발생할 수 있다. 이러한 반복 속도는 CPU 성능에 매우 중요하므로 대부분의 최신 레벨 1 캐시는 사실상 인덱싱되어 최소한 캐쉬 RAM에서 데이터를 가져오는 것과 병행하여 MMU의 TLB 조회가 진행될 수 있다. 그러나 가상 인덱싱이 모든 캐시 수준에서 최선의 선택은 아니다. 가상 별칭을 처리하는 데 드는 비용은 캐시 크기에 따라 증가하며, 그 결과 대부분의 레벨 2와 더 큰 캐시는 물리적으로 인덱싱된다. 캐시는 이전에는 가상 태그가 흔하지 않지만 캐시 태그에 대해 가상 주소와 물리적 주소를 모두 사용했다. 캐쉬 RAM 조회 전에 TLB 조회가 완료될 수 있는 경우 태그 비교에 맞춰 물리적 주소를 사용할 수 있으므로 가상 태그를 지정할 필요가 없다. 그러면 큰 캐시는 물리적으로 태그를 붙이는 경향이 있고, 매우 짧은 지연 시간 캐시는 사실상 태그가 붙는다. 최근 범용 CPU에서는 가상 태그가 아래에 설명된 바와 같이 Hint로 대체되었다.

동음이의어 및 동의어 문제
가상 인덱싱 및 태그 지정에 의존하는 캐시는 동일한 가상 주소를 서로 다른 물리적 주소(호명)로 매핑한 후 일관성이 없어지는데, 태그를 위해 물리적 주소를 사용하거나 캐시 라인에 주소 공간 식별자를 저장하여 해결할 수 있다. 그러나 후자의 접근방식은 여러 캐시 라인이 동일한 물리적 주소에 대한 데이터를 저장하게 되는 동의어 문제에 대해서는 도움이 되지 않는다. 이러한 위치에 기록하면 캐시의 한 위치만 업데이트되어 다른 위치에는 일관성이 없는 데이터가 남게 된다. 이 문제는 서로 다른 주소 공간에 대해 겹치지 않는 메모리 레이아웃을 사용함으로써 해결될 수도 있고, 그렇지 않으면 매핑이 변경될 때 캐시(또는 캐시 일부)를 플러시해야 한다.

가상 태그 
가상 태그의 가장 큰 장점은 연관 캐시의 경우 가상에서 물리적 변환이 완료되기 전에 태그 일치를 진행하도록 허용한다는 것이다. 그러나 일관성 탐색 및 제거는 실제 행동을 위한 주소를 제시한다. 하드웨어는 일반적으로 가상 태그뿐만 아니라 물리적 태그를 저장하여 물리적 주소를 캐시 색인으로 변환할 수 있는 어떤 수단이 있어야 한다. 비교를 위해 물리적으로 태그가 지정된 캐시는 가상 태그를 보관할 필요가 없으며, 이는 더 간단하다. 가상에서 물리적 매핑을 TLB에서 삭제할 때 이러한 가상 주소를 가진 캐시 항목은 어떻게든 플러시해야 한다. 또는 TLB가 매핑하지 않은 페이지에서 캐시 항목이 허용될 경우 페이지 테이블에서 해당 페이지의 액세스 권한이 변경될 때 해당 항목을 플러시해야 한다.
또한 운영 체제는 가상 별칭이 캐시에 동시에 상주하지 않도록 보장할 수 있다. 운영체제는 아래 설명된 페이지 색칠을 시행함으로써 이러한 보장을 한다. 일부 초기 RISC 프로세서는 이 접근방식을 취했다. 가상의 가명을 탐지·제거하는 하드웨어 비용이 떨어지고, 완벽한 페이지 색칠의 소프트웨어 복잡성과 성능 저하가 높아져 최근에는 사용되지 않고 있다.
연관 캐시에서 태그의 두 가지 기능을 구별하는 데 유용할 수 있다. 즉, 이 기능은 선택할 항목 세트를 결정하는 데 사용되며 캐시가 적중 또는 누락되었는지 결정하는 데 사용된다. 두 번째 기능은 항상 정확해야 하지만, 첫 번째 기능이 추측할 수 있고, 때때로 틀린 답을 얻을 수 있다. 일부 프로세서에는 가상 태그와 물리적 태그가 모두 포함된 캐시가 있다. 가상 태그는 way 선택에 사용되며 물리적 태그는 hit 또는 miss를 결정하는 데 사용된다. 이러한 종류의 캐시는 사실상 태그가 지정된 캐시의 대기 시간 이점과 물리적으로 태그가 지정된 캐시의 단순한 소프트웨어 인터페이스를 즐긴다. 그러나, 그것은 복제된 태그의 추가 비용을 부담한다. 또한, 누락 처리 중, 인덱싱된 캐시 라인의 대체 방법은 가상 별칭 및 모든 일치 항목에 대해 조사되어야 한다. 가상 태그 대신 각 캐시 항목에 대한 가상 힌트를 유지함으로써 추가 영역(그리고 일부 지연 시간)을 줄일 수 있다. 이러한 힌트는 가상 태그의 하위 집합 또는 해시이며, 데이터 및 물리적 태그를 가져오는 캐시의 방법을 선택하는 데 사용된다. 사실상 태그가 지정된 캐시처럼 가상 힌트 매치가 있을 수 있지만 물리적 태그 불일치가 있을 수 있으며, 이 경우 일치하는 힌트를 가진 캐시 엔트리를 제거해야 이 주소의 캐시 채우기 후 캐쉬 액세스가 하나의 힌트만 일치할 수 있다. 가상 힌트는 가상 태그보다 비트가 적기 때문에, 가상으로 암시된 캐시는 가상 태그 캐시보다 더 많은 충돌 누락을 겪는다.

페이지 배색
이 문제를 이해하려면 물리적으로 인덱싱된 직접 매핑 수준-2 캐시와 4개의 KiB 가상 메모리 페이지가 있는 CPU를 고려하십시오. 순차적 실제 페이지는 256페이지 이후까지 캐시의 순차적 위치에 매핑된다. 각 물리적 페이지에 0–255의 색상으로 레이블을 지정하여 캐시 내 위치를 나타낼 수 있다. 다른 색상의 물리적 페이지 내의 위치는 캐시에서 충돌할 수 없다. 물리적으로 색인된 대형 캐시는 문제가 발생한다. 즉, 애플리케이션보다는 운영체제가 캐시 내에서 어떤 페이지가 서로 충돌하는지를 제어한다. 한 프로그램 실행에서 다음 프로그램 실행까지의 페이지 할당 차이는 캐시 충돌 패턴의 차이로 이어져 프로그램 성능의 차이가 매우 클 수 있다. 이러한 차이는 벤치마크 실행에 대해 일관되고 반복 가능한 타이밍을 얻는 것을 매우 어렵게 할 수 있다. 캐시를 최대한 활용하려는 프로그래머는 프로그램의 액세스 패턴을 배열하여 주어진 시간에 1 MiB의 데이터만 캐싱하면 되므로 용량 누락을 방지할 수 있다. 그러나 그들은 또한 접속 패턴이 충돌 누락되지 않도록 해야 한다. 이 문제에 대해 생각해 볼 수 있는 한 가지 방법은 프로그램이 사용하는 가상 페이지를 나누어 이전에 물리적 색상이 물리적 페이지에 할당되었던 것과 같은 방식으로 가상 색상을 할당하는 것이다. 그런 다음 프로그래머는 코드의 접근 패턴을 배열하여 동일한 가상 색상을 가진 두 페이지가 동시에 사용되지 않도록 할 수 있다. 그러한 최적화에 관한 광범위한 문헌이 있으며, 주로 고성능 컴퓨팅(HPC) 커뮤니티에서 나왔다. 단점은 어떤 순간에 사용 중인 모든 페이지가 서로 다른 가상 색을 가질 수 있지만, 어떤 페이지는 동일한 물리적 색을 가질 수 있다는 것이다. 실제로 운영체제가 가상 페이지에 물리적 페이지를 임의적이고 균일하게 할당한다면, 일부 페이지는 동일한 물리적 색상을 갖게 될 가능성이 매우 높고, 그 페이지들의 위치는 캐시에서 충돌하게 된다. 그 해결책은 운영체제가 다른 물리적 색상을 다른 가상 색상에 할당하도록 하는 것인데, 이것은 페이지 색채화라고 불리는 기법이다. 가상에서 물리적 색상으로의 실제 매핑은 시스템 성능과 무관하지만, 홀수 매핑은 추적하기가 어렵고 이득이 거의 없기 때문에 페이지 색상에 대한 대부분의 접근방식은 물리적 페이지 색상과 가상 페이지 색상을 같게 유지하려고 노력한다.
운영 체제가 각 물리적 페이지가 하나의 가상 색상에만 매핑되도록 보장할 수 있는 경우, 가상 별칭은 없으며 프로세서는 누락 처리 중 추가 가상 별칭 프로브를 사용하지 않고도 가상 색인 캐시를 사용할 수 있다. 또는 OS는 한 가상 색에서 다른 가상 색으로 변할 때마다 캐시에서 페이지를 플러시할 수 있다. 

LIST

댓글

추천 글