I. 서론
에 대해 다시 학습하도록 구성했다 volatile
는 CPU의 캐시가에서 자신에게 CPU 캐시를 생각 나게하는, 따라서 모두 분리의 이해를 보장하기 위해 재 배열 명령 스케줄링 및 데이터 가시성을 포함 원칙의 실현, 어떤 종이가있을 것입니다.
CPU 캐시 둘째, 왜 필요
무어의 법칙 (종료 최근 점점 더 많은 목소리를) 보여주는 CPU 개발, 개발의 빠른 속도, 모든 18-24개월 두 배 성능을 제공합니다. 반면 메모리의 개발은 매우 느린이며, CPU의 성능 차이는 성장하고있다. 속도 차이를두고 쿠션, L3 캐시 SRAM 캐시는 CPU의 연산 효율을 향상시키기 위해, (L1, L2, L3)을 수행하여 도입된다. 물론, 사실, 메모리는 균형 비용 및 용량에서 불가능 속도가 아닙니다.
1965 년 인텔의 공동 창업자 고든 무어 (Gordon Moore)는 "무어의 법칙"에 자신의 이름이 집적 회로는 이중마다 18-24개월, 성능도있을 것이다 것입니다 구성 요소의 수를 수용 할 수 있음을 의미했다 더블.
우리는 식료품 쇼핑, 종종 이렇게 몇몇 실제 쇼핑 시간에 구입 한 물건은 매우 짧은 이동하지만, 시간이 시간이 많이 소요 일반적으로 대부분의 시간을 점유 한 대기 지불 트래픽을 소비하는 것입니다. 비용상의 이유로, 슈퍼마켓 장착 된 셀은 명확하게 할 수 없습니다. 집의 도입 그래서 아래층 기계, 편의점 및 기타 지역 사회를 자동 판매기. 이러한 방법으로, 자연 쇼핑의 효율성을 향상시킬 수 있습니다.
세, L1, L2, L3 캐시 버퍼 구조 세
는 CPU 캐시, 다음과 같은 구성에 통합 된 세 개의 각 CPU는 자신의 핵심 L1 캐시, L2 캐시, L3 캐시를 가지고 있으며, 모든 코어를 공유 할 수 있습니다. 상기 거리 LL 실행 부 연산부 가까운, 계산 속도가 매우 근접 일반적이다 L2, L3를 각각 하였다. 또한, L1 캐시는 일반적으로 충돌을 줄이기 위해 L1i L1D 데이터 캐시 및 명령 캐시 세트, 멀티 코어 CPU 분할 / 멀티 스레드 캐시 경쟁 잡아 일으켰다.
데이터가 존재하는 경우, L1 실행 유닛 데이터에 액세스하는 순차적 인 액세스, 즉를 판독 할 때, 액세스 결국 L3 메모리 액세스 액세스 L1 L2, L2 L3 같지 않으며 경우.
세 가지 수준의 캐시 크기는 기본, 일반적으로 작은 i5-8259u
예를 들어 :
i5-8259u :
L1 데이터 캐시 : 32.0 KB × 4
L1 명령어 캐시 : 32.0 KB × 4
L2 캐시 : 246킬로바이트 × 4
L3 캐시 : 6.00 MB
L4 캐시 : 0.00 B
메모리 : 16.0 GB 2133MHz LPDDR3
네, 캐시 라인 : 가장 작은 단위의 메모리와 데이터 교환
캐시는 캐시 라인 N, 32byte 혹은 64 바이트의 통상 사이즈로 분할하고, 상기 메모리는 데이터 교환의 최소 단위이다. 적어도 캐시 라인이 유효한 태그 블록은 데이터의 유효성을 나타내는, 메모리 어드레스를 나타내는, 유효한 태그 데이터를 저장하기 위해 상기 세 블록 부.
CPU 코어가 데이터에 액세스 할 때, 데이터가 캐시 라인이며, 유효한 상태가 유효 함을 발견, 그것은 그렇지 않으면, 캐시 미스가, 캐시 히트가되었다. 일반적으로, 캐시 히트와 미스는 수백 코어 클럭의 차이의 효율성에 영향을 미친다. 따라서, 주문 캐시 적중률, 캐시 된 데이터 세트와 교체 정책의 합리적이고 효율적인 사용중인 CPU의 효율성의 계산을 위해 필수적이다. 편의 소비 제품의 높은 주파수를 가진 주민의 지역 사회의 쇼핑 습관에 따라 매장 및 고객 환경의 발전에 따라 조정처럼.
메인 CPU 캐시 데이터는 공간 지역성 시간적 지역성에 따라 제공된다.
공간 지역성 : 데이터의 저장 위치에 액세스하는 경우, 대형의 가까운 위치 데이터는 또한 액세스 될 수있다.
임시 지역 : 데이터의 저장 위치에 액세스 할 경우, 그것은 많은 시간을 액세스 할 미래에 반복 될 수있다.
일반적으로 캐시 교체 전략이 LRU 가장 최근에 사용 된 세 가지, FIFO FIFO,이며, LFU는 가장 자주 사용 :
FIFO는 : 선입는 캐시에 시간에 따라, 초기을 제거.
LRU는 : 최소 최근 사용 된 최소한의에서, 캐시 데이터 사용 통계를 사용합니다. 이 알고리즘은 가장을 사용합니다.
LFU는 : 최소 자주 사용되는 이상에서, 사용량에 따라, 시간이 지남에 사용됩니다.
(LUR 및 LFU 알고리즘 연습 : Leetcode - 더 LRU , Leetcode-LFU )
다섯, MEIS : 캐시 일관성
효과적인 데이터 세트와 교체 정책과 결합 된 멀티 레벨 캐시의 도입 후, 크게 CPU의 연산 효율을 향상뿐만 아니라 캐시 일관성 문제를 제공합니다.
5.1 기본 운영
무효화 및 업데이트를 쓰기 쓰기 : 일관성 캐시를 보장하기 위해, CPU의 층은 2 개 가지 작동 모드를 제공한다.
작업을 무효화 쓰기하는 것은 의미 핵심은 수정 된 데이터는,이 다른 커널 데이터 경우, 유효하지 않은 것으로 표시된 유효을 넣을 때.
쓰기 업데이트 작업 의미 : 다른 핵심 데이터가있는 경우 커널은 새로운 값으로 갱신되어, 데이터의 사본을 수정합니다.
쓰기 무효화 작업은 다른 코어는 데이터 변경을 수행 할 필요가 없습니다 함께 구현하는 간단하다. 단점은 캐시 라인이 방법을, 해당 유효한 식별자가 다른 유효한 데이터가 무효가 될 원래 세트 것입니다. 쓰기 업데이트 작업 업데이트 작업을 많이 생성,하지만 오히려 캐시 라인보다, 수정 된 데이터를 업데이트해야합니다. 대부분의 프로세서는 작동 쓰기이 Invalide에 사용됩니다.
이 두 작업 후 데이터 캐시를 수정, 캐시가 무효화하거나 직접 업데이트됩니다 우리의 공동 농업 코드 캐싱입니다. 물론,뿐만 아니라, 덜 까다로운 실시간 데이터 캐시, 우리는 또한 종종 정기적으로 시간을 사용, 자동으로 전략을 만료됩니다.
5.2 MESI 프로토콜
캐시 일관성을 무효화 작성하는 특정 구현은 종종 교과서 MESI 프로토콜로 사용되는 완전한 합의, 더 클래식, 필요, 간단한 솔루션 아이디어를 제공하는 프로토콜은 MESI 이후의 확장을 기반으로합니다.
그리고 캐시 라인은 전술 기존의 건설, MESI 프로토콜, 캐시 라인 헤드 비트는 네 개의 MESI 상태의 두 표현하기 위해 다른 언급 :
이 네 개의 상태는 다음과 같습니다
데이터가 수정 된 액티브 상태에 속해 있지만, 데이터는 캐시 메모리와 일치에만 존재한다 : M은 (변형).
E (전용) 액티브 상태에 속하는 전용 데이터를 상기 캐시에 데이터 일관성 전용 메모리.
S (공유) 액티브 상태에 속하는 비 독점적 데이터는 데이터 캐시의 다수의 일관성 메모리에 저장된다.
I (잘못된) : 데이터가 유효하지 않습니다.
이해하기 쉬운 개략도와 다음의 네 가지 상태는, 이미지는 "프로세서 거짓말"에서 발췌 :
그 주 : E / S의 상태가, 그 데이터 캐시에 일치 될 때. 다음은 코어 캐시 데이터를 수정하고, 즉시 다시 메모리에 기입되지 않지만, 데이터가 일관성이 때, I로 표시되는 캐시 라인 M 데이터 중 다른 코어 부품을 표시했다.
다음은 네 가지 상태의 변환의 개략도이다 :
다른 경우에는 물질 (수정 된 어떤 상태 캐시 라인 상태를 쓰기 --local이 조작 두 변형에 대한 현재의 캐시 라인이 변경되지 않고, 다른 캐시 라인이 무효가 통합 : 상태 천이도에서, 그 주목 S 핵), 메모리에 다시 기록 트리거 대기, 및 원격 쓰기 캐시 라인 상태가 상당 캐시 된 데이터를 다시 실패 무효로 변경 통합 데이터의 모든 부분이있을 것이다.
다음에, 네 가지 상태의 변화는 특히 각각 설명한다 :
때 상태가 잘못된 것입니다 :
현재 상태 | 행사 | 다음 상태 | 설명 |
---|---|---|---|
잘못된 | 현지 읽기 | 독특한 | 이 데이터는 다른 캐시에서 찾을 수 없습니다 |
잘못된 | 지역 쓰기 | 공유 | 데이터 캐시 라인 E가있는 경우 (2) 데이터가 판독되고, 두 캐시 라인으로 설정되고, 캐시 라인 M의 데이터가 존재하는 경우 (1), 메모리가 데이터를 업데이트 데이터가 판독되는 S 캐시 라인 데이터가있는 경우, 캐시 라인 S를 제공하도록 설정되어있다 (3).; S되고 |
잘못된 | 원격 읽기 | 잘못된 | 핵심은 다른 데이터를 읽지 않습니다 |
잘못된 | 원격 쓰기 | 잘못된 | 데이터를 기록하지 않는 다른 핵심 |
때 상태가 독점입니다 :
현재 상태 | 행사 | 다음 상태 | 설명 |
---|---|---|---|
독특한 | 현지 읽기 | 독특한 | 자신의 독점적 인 데이터를 읽고, 같은 자연 상태 |
독특한 | 지역 쓰기 | 수정 | 데이터는 라이트 - 백을 트리거로서, 메모리와 일치하기 때문에 그것은 M으로 설정된 |
독특한 | 원격 읽기 | 공유 | 핵심은 다른 데이터를 읽지 않습니다 |
독특한 | 원격 쓰기 | 잘못된 | 데이터를 기록하지 않는 다른 핵심 |
상태가 공유되는 경우 :
현재 상태 | 행사 | 다음 상태 | 설명 |
---|---|---|---|
공유 | 현지 읽기 | 공유 | 공유 데이터 읽기, 데이터가 변경되지 않으며, 변경되지 않은 자연 상태 |
공유 | 지역 쓰기 | 수정 | 데이터는 라이트 - 백을 트리거로서, 메모리와 일치하기 때문에 그것은 M으로 설정된 |
공유 | 원격 읽기 | 공유 | 공유 데이터 읽기, 데이터가 변경되지 않으며, 변경되지 않은 자연 상태 |
공유 | 원격 쓰기 | 잘못된 | 다른 수정은 핵 캐시, 통합 정책 실패를 보유하고 있지 않습니다 |
상태가 변경되었을 때 :
현재 상태 | 행사 | 다음 상태 | 설명 |
---|---|---|---|
수정 | 현지 읽기 | 수정 | 자신의 고유 한 데이터를 읽고, 같은 자연 상태 |
수정 | 지역 쓰기 | 수정 | 자신의 고유 한 데이터를 작성, 같은 상태 변경 |
수정 | 원격 읽기 | 공유 | 공유 데이터 읽기, 데이터가 변경되지 않으며, 변경되지 않은 자연 상태 |
수정 | 원격 쓰기 | 잘못된 | 다른 수정은 핵 캐시, 통합 정책 실패를 보유하고 있지 않습니다 |