기술(IT)

CPU 캐시(CPU Cache) 정책

2019. 10. 6.
728x90

CPU 캐시는 컴퓨터의 중앙 처리 장치(CPU)가 주 메모리에서 데이터에 접근하는 데 드는 평균 시간을 줄이기 위해 사용하는 하드웨어 캐시다. 대부분의 CPU는 명령과 데이터 캐시를 포함한 서로 다른 독립 캐시를 가지고 있으며, 여기서 데이터 캐시는 일반적으로 더 많은 캐시 수준의 계층으로 구성된다. 캐시는 프로세서 코어에 더 가까운 곳에 위치하는 더 작고 빠른 메모리로, 자주 사용되는 메인 메모리 위치의 데이터 복사본을 저장한다. 모든 최신 CPU는 여러 수준의 CPU 캐시를 가지고 있다. 캐시를 사용하는 첫 번째 CPU는 캐시의 레벨이 한 개밖에 없었다. 이후 레벨 1 캐시와 달리 L1d(데이터용)와 L1i(지침용)로 분할되지 않았다. 캐시가 있는 거의 모든 현재 CPU에는 분할된 L1 캐시가 있다. 또한 캐시와 대형 프로세서의 경우 L3 캐시가 있다. L2 캐시는 일반적으로 분할되지 않으며 이미 분할된 L1 캐시의 공통 저장소 역할을 한다. 멀티 코어 프로세서의 모든 코어는 전용 L2 캐시를 가지고 있으며 보통 코어 간에 공유되지 않는다. L3 캐시와 상위 레벨 캐시는 코어 간에 공유되며 분할되지 않는다. L4 캐시는 현재 흔하지 않으며 일반적으로 별도의 다이 또는 칩에서 정적 RAM이 아닌 동적 RAM에 있다. 또한 L1의 경우도 그러했지만, 더 큰 칩은 마지막 수준을 제외하고 그것의 통합과 일반적으로 모든 캐시 레벨을 허용했다. 각 추가 캐시 레벨은 더 크고 다르게 최적화되는 경향이 있다. 대부분의 CPU가 가지고 있는 메모리 관리 유닛의 일부인 변환 룩사이드 버퍼와 같은 다른 유형의 캐시가 존재한다. 대부분의 최신 데스크톱 및 서버 CPU에는 실행 가능한 명령 가져오기 속도를 높이기 위한 명령 캐시, 데이터 가져오기 및 저장 속도를 높이기 위한 데이터 캐시, 실행 가능한 명령과 데이터에 대한 가상-물리적 주소 변환 속도를 높이는 데 사용되는 TLB(Transformation Lookaside Buffer) 등 적어도 세 개의 독립적인 캐시가 있다. 단일 TLB는 지침과 데이터에 모두 접근할 수 있도록 제공되거나 별도의 지침 TLB(ITLB)와 데이터 TLB(DTLB)가 제공될 수 있다. 데이터 캐시는 일반적으로 더 많은 캐시 수준의 계층으로 구성된다(L1, L2 등). 아래 다중 레벨 캐시도 참조하십시오. 그러나 TLB 캐시는 메모리 관리 장치(MMU)의 일부로서 CPU 캐시와 직접 관련이 없다. 메인 메모리의 위치에서 읽거나 쓰려고 할 때, 프로세서는 해당 위치의 데이터가 이미 캐시에 있는지 확인한다. 만일 그렇다면, 프로세서는 훨씬 느린 메인 메모리 대신 캐시에서 읽거나 쓸 것이다.

캐시 항목
데이터는 캐시 라인 또는 캐시 블록이라고 불리는 고정된 크기의 블록으로 메모리와 캐시 사이에 전송된다. 캐시 라인이 메모리에서 캐시로 복사되면 캐시 항목이 생성된다. 캐시 항목에는 복사된 데이터와 요청된 메모리 위치가 포함된다. 프로세서가 메모리의 위치를 읽거나 쓸 필요가 있을 때, 먼저 캐시에서 해당 항목을 확인한다. 캐시는 해당 주소를 포함할 수 있는 캐시 라인에서 요청된 메모리 위치의 내용을 확인한다. 프로세서가 메모리 위치가 캐시에 있는 것을 발견하면 캐시 적중 현상이 발생한 것이다. 그러나 프로세서가 캐시에서 메모리 위치를 찾지 못하면 캐시 누락 현상이 발생한 것이다. 캐시 적중 시 프로세서는 즉시 캐시 라인의 데이터를 읽거나 쓴다. 캐시 누락의 경우 캐시는 새 항목을 할당하고 메인 메모리에서 데이터를 복사한 다음 캐시의 내용에서 요청이 이행된다.

교체 정책
캐시 누락에 대한 새 항목을 저장할 공간을 확보하기 위해 캐시는 기존 항목 중 하나를 제거해야 할 수 있다. 퇴출할 항목을 선택할 때 사용하는 휴리스틱을 대체 정책이라고 한다. 모든 대체 정책의 근본적인 문제는 어떤 기존 캐시 엔트리가 미래에 가장 적게 사용될 것인지를 예측해야 한다는 것이다. 미래를 예측하는 것은 어렵기 때문에 이용 가능한 다양한 대체 정책 중에서 선택할 수 있는 완벽한 방법은 없다. 가장 최근에 액세스하지 않은 항목(LRU)을 대체하는 인기 있는 교체 정책. 일부 메모리 범위를 캐시 불가능한 것으로 표시하면 거의 다시 액세스하지 않는 메모리 영역의 캐싱을 방지하여 성능을 향상시킬 수 있다. 이를 통해 재사용 없이 캐시에 무언가를 로드하는 오버헤드를 방지할 수 있다. 컨텍스트에 따라 캐시 항목을 비활성화하거나 잠글 수도 있다.

정책 쓰기
데이터가 캐시에 기록될 경우, 어느 시점에는 메인 메모리에 기록되어야 한다. 이 쓰기의 타이밍을 쓰기 정책이라고 한다. 쓰기-스루 캐시에서는 캐시에 대한 모든 쓰기가 메인 메모리에 쓰기를 유발한다. 또는, 쓰기-백 또는 복사 캐시에서 쓰기는 주 메모리에 즉시 미러링되지 않으며, 캐시는 대신 어떤 위치가 덮어쓰여졌는지를 추적하여 더럽게 표시한다. 이 위치의 데이터는 해당 데이터가 캐시에서 제거될 때만 메인 메모리에 다시 기록된다. 이러한 이유로, 쓰기-백 캐시의 읽기 누락은 때때로 두 개의 메모리 액세스를 요구할 수 있다. 하나는 먼저 더러운 위치를 메인 메모리에 쓰고, 다른 하나는 메모리에서 새 위치를 읽어야 한다. 또한, 아직 쓰기백 캐시에 매핑되지 않은 메인 메모리 위치에 쓰기는 이미 더러운 위치를 제거하여 새로운 메모리 위치를 위한 캐시 공간을 확보할 수 있다. 중간 정책도 있다. 캐시는 쓰기-스루일 수 있지만, 쓰기는 일시적으로 스토어 데이터 큐에 보관될 수 있으며, 대개 여러 스토어를 함께 처리할 수 있다. 메인 메모리에서 캐시된 데이터는 다른 엔티티(예: 직접 메모리 액세스(DMA)를 사용하는 주변장치 또는 멀티 코어 프로세서의 다른 코어에 의해 변경될 수 있으며, 이 경우 캐시의 복사본이 오래되거나 오래된 것이 될 수 있다. 또는 다중 프로세서 시스템의 CPU가 캐시의 데이터를 업데이트할 때 다른 CPU와 관련된 캐시의 데이터 복사본이 오래된 상태가 된다. 데이터를 일관적으로 유지하는 캐시 관리자 간의 통신 프로토콜을 캐시 일관성 프로토콜이라고 한다.

캐시 성능
캐시 성능 측정은 메모리 성능과 프로세서 성능 사이의 속도 차이가 기하급수적으로 증가하고 있는 최근에 중요해졌다. 이 속도 차이를 줄이기 위해 캐시가 도입되었다. 따라서 캐시가 프로세서와 메모리의 속도 차이를 얼마나 잘 메울 수 있는지 아는 것은 특히 고성능 시스템에서 중요해진다. 캐시 적중률과 캐시 누락률은 이 성능을 결정하는 데 중요한 역할을 한다. 캐시 성능을 향상시키기 위해, 누락율을 줄이는 것은 다른 단계들 중에서 필요한 단계들 중 하나가 된다. 캐시에 대한 액세스 시간을 줄이는 것도 캐시의 성능을 향상시킨다.

CPU 스톨
캐시 라인을 기다리는 동안 CPU가 할 일이 부족하기 때문에 한 캐시 라인을 메모리로부터 가져오는 데 걸리는 시간(캐시 누락으로 인한 읽기 지연 시간)이 중요하다. CPU가 이 상태에 이르면 이를 스톨이라고 한다. CPU가 메인 메모리에 비해 빨라짐에 따라 캐시 누락으로 인해 정지된 CPU는 더 많은 잠재적 계산을 대체한다. 현대 CPU는 메인 메모리에서 단일 캐시 라인을 가져오는 데 걸리는 시간에 수백 개의 명령을 실행할 수 있다. 이 기간 동안 CPU(Pentium Pro 및 이후 Intel 설계)가 캐시 누락 데이터를 기다리는 지침 이후 독립적인 명령을 실행하려고 시도하는 순서 이탈 실행을 포함하여 CPU를 바쁘게 유지하기 위해 다양한 기법이 사용되어 왔다. 많은 프로세서가 사용하는 또 다른 기술은 동시 멀티스레딩(SMT) 또는 Intel의 용어로, 첫 번째 스레드가 필요한 CPU 리소스가 사용되기를 기다리는 동안 대체 스레드가 CPU 코어를 사용할 수 있도록 허용하는 HT(Hyper-threading)이다.

연관성
연관성의 올바른 가치를 선택하는 것은 절충을 수반한다. 교체 정책이 메모리 위치를 매핑할 수 있는 위치가 10개 있는 경우 해당 위치가 캐시에 있는지 확인하려면 캐시 항목 10개를 검색해야 한다. 더 많은 장소를 확인하는 것은 더 많은 전력 및 칩 영역과 잠재적으로 더 많은 시간을 필요로 한다. 반면에 연상성이 높은 캐시는 누락 횟수가 적기 때문에 CPU가 느린 메인 메모리에서 읽는 시간을 덜 낭비하게 된다. 연관성을 직접 매핑한 것에서 양방향 또는 양방향에서 4방향으로 2배 증가시키는 것은 캐시 크기를 2배로 늘리는 것과 거의 같은 효과를 보인다는 것이 일반적인 지침이다. 대체 정책이 캐시에서 복사본을 보관할 항목을 자유롭게 선택할 수 있는 경우 캐시를 완전 연관성이라고 한다. 다른 극단적인 경우, 메인 메모리의 각 항목이 캐시의 한 곳에만 들어갈 수 있다면 캐시는 직접 매핑된다. 많은 캐시는 메인 메모리의 각 항목이 캐시의 N개 장소 중 어느 곳으로든 이동할 수 있는 절충을 구현하며, N-way 집합 연상이라고 설명된다. 예를 들어 AMD Athlon의 레벨 1 데이터 캐시는 양방향 집합 연관성이 있으며, 이는 메인 메모리의 특정 위치가 레벨 1 데이터 캐시의 두 위치 중 하나에 캐시될 수 있음을 의미한다. 그러나 연관성을 4개 이상으로 늘린다고 해서 히트율이 그만큼 향상되지는 않으며, 일반적으로 다른 이유로 이루어진다(아래 가상 별칭 참조). 일부 CPU는 저전력 상태에서 캐시의 연관성을 동적으로 감소시킬 수 있으며, 이는 절전 대책으로 작용한다.

직접 매핑된 캐시
이 캐시 조직에서는 메인 메모리의 각 위치가 캐시의 한 항목에만 들어갈 수 있다. 따라서 직접 매핑된 캐시는 "일방향 집합 연상" 캐시라고도 할 수 있다. 어떤 캐시 엔트리의 콘텐츠를 퇴출시킬 수 있는 선택권이 없기 때문에 대체 정책을 가지고 있지 않다. 이는 두 위치가 동일한 항목으로 매핑될 경우, 서로 지속해서 충돌할 수 있다는 것을 의미한다. 더 간단하지만, 직접 매핑된 캐시는 유사한 성능을 제공하기 위해 연관 캐쉬보다 훨씬 더 커야 하며, 더 예측하기 어렵다. x를 캐시에서 블록 번호로, y를 블록 메모리 수로, n을 캐시에서 블록 수로 설정한 다음, 매핑은 x = y mod n이라는 방정식의 도움을 받아 수행된다.

쌍방향 집합 연관 캐시
메인 메모리의 각 위치를 캐시의 두 위치 중 하나에 캐시할 수 있는 경우, 한 가지 논리적인 질문은 다음과 같다: 둘 중 어떤 위치인가 위의 오른쪽 다이어그램에서 볼 수 있는 가장 간단하고 가장 보편적으로 사용되는 계획은 메모리 위치 지수의 가장 작은 비트를 캐시 메모리의 인덱스로 사용하고 각 인덱스에 대해 두 개의 항목을 갖는 것이다. 이 체계의 한 가지 장점은 캐시에 저장된 태그가 캐시 메모리의 인덱스에 의해 암시되는 메인 메모리 주소의 해당 부분을 포함하지 않아도 된다는 것이다. 캐시 태그는 비트가 적기 때문에 트랜지스터가 적게 필요하며 프로세서 회로 보드나 마이크로프로세서 칩의 공간을 덜 차지하며 읽기 및 비교를 더 빨리 할 수 있다. 또한 LRU는 한 쌍에 한 비트만 저장하면 되기 때문에 특히 간단하다.

투기적 실행
직접 매핑된 캐시의 장점 중 하나는 간단하고 빠른 투기를 허용한다는 것이다. 주소가 계산되면 메모리에 해당 위치의 복사본이 있을 수 있는 하나의 캐시 인덱스가 알려져 있다. 캐시 항목은 읽을 수 있으며 프로세서는 태그가 실제로 요청된 주소와 일치하는지 확인을 마치기 전에 해당 데이터로 계속 작업할 수 있다. 태그 매치가 완료되기 전에 프로세서가 캐시된 데이터를 사용하도록 하는 아이디어는 연관 캐쉬에도 적용될 수 있다. 힌트라고 불리는 태그의 서브셋을 사용하여 요청된 주소에 매핑되는 가능한 캐시 항목 중 하나만 선택할 수 있다. 힌트가 선택한 항목은 전체 태그를 확인하는 것과 동시에 사용할 수 있다. 힌트 기법은 아래 설명과 같이 주소 번역의 맥락에서 사용할 때 가장 잘 작동한다.

양방향 치우침 연관 캐시
0번 경로의 지표가 위와 같이 직접인 왜곡 캐시 등의 다른 계획이 제시되었지만, 1번 경로의 지표가 해시함수로 형성된다. 좋은 해시함수는 해시함수와 매핑할 때 직접 매핑과 충돌하는 경향이 있는 속성을 가지고 있기 때문에, 프로그램이 병리접근 패턴으로 인해 예기치 않게 많은 수의 충돌누락으로 고생할 가능성이 작다. 단점은 해시함수를 계산할 때의 추가 대기시간이다. 또한, 새 라인을 로드하고 이전 라인을 퇴출할 시간이 되면, 새로운 라인이 각 면에서 서로 다른 인덱스의 데이터와 충돌하기 때문에 가장 최근에 사용된 기존 라인을 결정하기가 어려울 수 있다. 비-스켈 캐시에 대한 LRU 추적은 대개 설정 단위로 이루어진다. 그럼에도 불구하고, 왜곡된 연관 캐시는 기존의 세트 연관 캐시에 비해 큰 이점을 가지고 있다.

유사 연관 캐시
진정한 설정 연관 캐시는 콘텐츠 주소 지정 가능한 메모리와 같은 것을 사용하여 가능한 모든 방법을 동시에 테스트한다. 의사 연관 캐시는 한 번에 하나씩 가능한 한 각각의 방법을 시험한다. 해시-재해시 캐시와 칼럼-합동 캐시는 사이비-합동 캐시의 예다. 흔히 시험한 첫 번째 방법으로 히트를 찾는 경우 의사 연관 캐시는 직접 매핑 캐시만큼 빠르지만 직접 매핑된 캐시보다 훨씬 낮은 충돌 누락률을 가지고 있어 완전 연관 캐시의 누락률에 가깝다.

 

주소변역과 프로세서의 계층은 다음에 이어서 작성합니다.

LIST

댓글

추천 글