캐시

섬네일|upright=1|CPU 메모리 캐시 작동 다이어그램
컴퓨팅에서 **캐시**(cache, )는 데이터를 저장하여 나중에 해당 데이터에 대한 요청을 더 빠르게 처리할 수 있도록 하는 하드웨어 또는 소프트웨어 구성 요소이다. 캐시에 저장된 데이터는 이전 계산의 결과이거나 다른 곳에 저장된 데이터의 복사본일 수 있다. 요청된 데이터를 캐시에서 찾을 수 있을 때 **캐시 히트**가 발생하고, 찾을 수 없을 때 **캐시 미스**가 발생한다. 캐시 히트는 캐시에서 데이터를 읽어 처리되며, 이는 결과를 다시 계산하거나 더 느린 데이터 저장소에서 읽는 것보다 빠르다. 따라서 캐시에서 처리될 수 있는 요청이 많을수록 시스템 성능은 빨라진다.

비용 효율성을 위해 캐시는 상대적으로 작아야 한다. 그럼에도 불구하고 캐시는 일반적인 컴퓨터 애플리케이션이 높은 참조 국부성을 가지고 데이터에 접근하기 때문에 컴퓨팅의 많은 영역에서 효과적이다. 이러한 접근 패턴은 최근에 요청된 데이터를 요청하는 시간적 국부성과 이미 요청된 데이터 근처에 저장된 데이터를 요청하는 공간적 국부성을 보인다.

## 동기
메모리 설계에는 용량과 속도 사이에 본질적인 절충점이 있다. 더 큰 용량은 더 큰 크기를 의미하며, 이는 신호가 이동해야 하는 물리적 거리가 길어져 전달 지연을 유발하기 때문이다. 또한 SRAM과 같은 고성능 기술과 DRAM, 플래시, 또는 하드 디스크와 같은 더 저렴하고 대량 생산이 쉬운 상품 사이에도 절충점이 있다.

캐시가 제공하는 버퍼링은 레이턴시와 대역폭 중 하나 또는 둘 다에 이점을 제공한다.

더 큰 자원은 접근에 상당한 지연을 유발한다. 예를 들어, 최신 4&nbsp;GHz 프로세서가 DRAM에 도달하는 데 수백 클록 사이클이 걸릴 수 있다. 이는 큰 덩어리를 캐시로 읽어 들여 후속 읽기가 인접한 위치에서 발생하고 캐시에서 읽을 수 있기를 바라면서 완화된다. 예측 또는 명시적인 선인출은 미래의 읽기가 어디서 올지 추측하고 미리 요청하는 데 사용될 수 있다. 최적으로 수행되면 지연이 완전히 회피된다.

캐시를 사용하면 여러 미세한 전송을 더 크고 효율적인 요청으로 조합하여 기본 자원의 처리량을 높일 수도 있다. DRAM 회로의 경우, 더 넓은 데이터 버스를 사용하여 추가 처리량을 얻을 수 있다.

## 작동
하드웨어는 캐시를 다시 사용될 가능성이 있는 데이터를 임시 저장하는 메모리 블록으로 구현한다. 중앙 처리 장치(CPU), 솔리드 스테이트 드라이브(SSD) 및 하드 디스크 드라이브(HDD)는 종종 하드웨어 기반 캐시를 포함하며, 웹 브라우저와 웹 서버는 일반적으로 소프트웨어 캐싱에 의존한다.

캐시는 항목 풀로 구성된다. 각 항목은 관련 데이터를 가지며, 이는 일부 백킹 저장소에 있는 동일한 데이터의 복사본이다. 각 항목은 또한 태그를 가지며, 이는 항목이 복사본인 백킹 저장소의 데이터 식별자를 지정한다.

캐시 클라이언트(CPU, 웹 브라우저, 운영체제)가 백킹 저장소에 존재한다고 가정되는 데이터에 접근해야 할 때, 먼저 캐시를 확인한다. 원하는 데이터와 일치하는 태그를 가진 항목을 찾을 수 있으면 해당 항목의 데이터가 대신 사용된다. 이 상황을 **캐시 히트**라고 한다. 예를 들어, 웹 브라우저 프로그램은 특정 URL에 있는 웹 페이지 내용의 로컬 복사본이 있는지 확인하기 위해 디스크의 로컬 캐시를 확인할 수 있다. 이 예에서 URL은 태그이고 웹 페이지 내용은 데이터이다. 캐시 히트가 발생하는 접근의 백분율을 캐시의 **히트율** 또는 **히트 비율**이라고 한다.

캐시를 확인했지만 원하는 태그를 가진 항목이 없는 대체 상황을 **캐시 미스**라고 한다. 이는 백킹 저장소에서 데이터를 더 비용이 많이 드는 방식으로 접근해야 함을 의미한다. 요청된 데이터가 검색되면 일반적으로 다음 접근을 위해 캐시에 복사된다.

캐시 미스 중에 일반적으로 이전에 존재하던 다른 캐시 항목이 새로 검색된 데이터를 위한 공간을 만들기 위해 제거된다. 교체할 항목을 선택하는 데 사용되는 휴리스틱을 교체 정책이라고 한다. 인기 있는 교체 정책 중 하나인 LRU(가장 최근에 사용되지 않음)는 가장 오래된 항목, 즉 다른 항목보다 최근에 접근되지 않은 항목을 교체한다. 더 정교한 캐싱 알고리즘은 항목의 사용 빈도도 고려한다.

### 쓰기 정책
섬네일|380px|쓰기 할당이 없는 write-through 캐시
섬네일|500px|쓰기 할당이 있는 write-back 캐시

캐시 쓰기는 궁극적으로 백킹 저장소로 전파되어야 한다. 이에 대한 타이밍은 쓰기 정책에 의해 결정된다. 두 가지 주요 쓰기 정책은 다음과 같다:
* 쓰기-통과(Write-through): 쓰기가 캐시와 백킹 저장소 모두에 동기적으로 수행된다.
* 쓰기-백(Write-back): 초기에는 캐시에만 쓰기가 수행된다. 백킹 저장소로의 쓰기는 수정된 내용이 다른 캐시 블록으로 교체될 때까지 연기된다.

쓰기-백 캐시는 구현하기가 더 복잡하다. 왜냐하면 어떤 위치가 덮어쓰여졌는지 추적하고 나중에 백킹 저장소에 쓰기 위해 더티로 표시해야 하기 때문이다. 이 위치의 데이터는 캐시에서 제거될 때만 백킹 저장소로 다시 기록되며, 이 과정을 지연 쓰기라고 한다. 이러한 이유로 쓰기-백 캐시에서 읽기 미스는 백킹 저장소에 대한 두 번의 메모리 접근을 요구할 수 있다. 하나는 더티 데이터를 다시 쓰는 것이고 다른 하나는 요청된 데이터를 검색하는 것이다. 다른 정책들도 데이터 쓰기-백을 트리거할 수 있다. 클라이언트는 캐시의 데이터에 많은 변경을 가한 다음 캐시에 명시적으로 데이터를 다시 쓰도록 알릴 수 있다.

쓰기 작업은 데이터를 반환하지 않는다. 따라서 쓰기 미스에 대해 결정을 내려야 한다: 데이터를 캐시에 로드할지 여부. 이는 다음 쓰기 미스 정책에 의해 결정된다.
* 쓰기 할당(Write allocate, fetch on write라고도 함): 미스된 쓰기 위치의 데이터가 캐시에 로드된 다음 쓰기 히트 작업이 수행된다. 이 접근 방식에서는 쓰기 미스가 읽기 미스와 유사하다.
* 쓰기 할당 없음(No-write allocate, write-no-allocate 또는 write around라고도 함): 미스된 쓰기 위치의 데이터가 캐시에 로드되지 않고 백킹 저장소에 직접 기록된다. 이 접근 방식에서는 읽기 미스 시에만 데이터가 캐시에 로드된다.

두 가지 쓰기 정책 모두 두 가지 쓰기 미스 정책을 구현할 수 있지만, 일반적으로 다음과 같이 짝지어진다:
* 쓰기-백 캐시는 일반적으로 쓰기 할당을 사용하며, 동일한 위치에 대한 후속 쓰기 또는 읽기가 이미 캐시에 있는 데이터로부터 이점을 얻을 것이라고 예상한다.
* 쓰기-통과 캐시는 쓰기 할당 없음을 사용한다. 여기서는 후속 쓰기가 백킹 저장소에 직접 기록되어야 하므로 이점이 없다.

캐시 외의 다른 개체가 백킹 저장소의 데이터를 변경할 수 있으며, 이 경우 캐시의 복사본이 오래되거나 부실해질 수 있다. 또는 클라이언트가 캐시의 데이터를 업데이트할 때, 다른 캐시에 있는 해당 데이터의 복사본이 부실해질 수 있다. 데이터 일관성을 유지하는 캐시 관리자 간의 통신 프로토콜은 캐시 일관성과 관련이 있다.

### 프리페치

캐시 읽기 미스 시, 수요 페이징 정책을 사용하는 캐시는 백킹 저장소에서 최소한의 양을 읽는다. 일반적인 수요 페이징 가상 메모리 구현은 디스크에서 RAM의 디스크 캐시로 가상 메모리 페이지(종종 4KB) 하나를 읽는다. 일반적인 CPU는 DRAM에서 L2 캐시로 128바이트의 L2 캐시 라인 하나를 읽고, L2 캐시에서 L1 캐시로 64바이트의 L1 캐시 라인 하나를 읽는다.

선인출 입력 큐 또는 더 일반적인 예측 페이징 정책을 사용하는 캐시는 더 나아가 요청된 데이터뿐만 아니라 다음 데이터 덩어리 한두 개가 곧 필요할 것이라고 추측하여 해당 데이터를 미리 캐시로 선인출한다. 예측 페이징은 디스크 스토리지 및 DRAM과 같이 백킹 저장소가 첫 번째 덩어리를 읽는 데 긴 지연 시간이 걸리고 다음 몇 덩어리를 순차적으로 읽는 데 훨씬 짧은 시간이 걸릴 때 특히 유용하다.

일부 운영 체제는 로더가 항상 전체 실행 파일을 RAM으로 미리 로드하는 등 더 나아간다. 일부 캐시는 더 나아가 전체 파일을 미리 로드할 뿐만 아니라 곧 요청될 수 있는 다른 관련 파일(예: 프리페처와 관련된 버퍼 캐시 또는 링크 프리페칭과 관련된 웹 캐시) 로드도 시작한다.

## 하드웨어 캐시의 예
### CPU 캐시

CPU 상 또는 가까이에 있는 작은 메모리는 훨씬 더 큰 주 기억 장치보다 빠르게 작동할 수 있다. 1980년대 이후 대부분의 CPU는 하나 이상의 캐시를 사용했으며, 때로는 계층적으로 연결되었다. 현대의 고급 임베디드, 데스크톱 컴퓨터 및 서버 마이크로프로세서는 최대 6가지 유형의 캐시(레벨 및 기능별)를 가질 수 있다. 특정 기능을 가진 캐시의 몇 가지 예로는 D-캐시, I-캐시 및 메모리 관리 장치(MMU)용 변환 색인 버퍼가 있다.

### GPU 캐시
초기 그래픽 처리 장치(GPU)는 종종 제한적인 읽기 전용 텍스처 캐시를 가지고 있었고 2D 참조 국부성을 개선하기 위해 스와이즐링을 사용했다. 캐시 미스는 성능에 심각한 영향을 미쳤는데, 예를 들어 밉맵핑이 사용되지 않는 경우였다. 캐싱은 종종 픽셀당 4비트에 불과한 텍스처 데이터에 대해 32비트(및 그 이상) 전송을 활용하는 데 중요했다.

GPU가 발전하여 GPGPU 및 컴퓨트 커널을 지원하게 되면서, 셰이더용 명령어 캐시를 포함하여 점진적으로 더 크고 일반적인 캐시를 개발했으며, 이는 CPU 캐시에서 일반적으로 발견되는 기능을 보여주었다. 이러한 캐시는 스레드 간의 동기화 프리미티브 및 원자적 연산을 처리하고 CPU 스타일의 MMU와 인터페이스하도록 성장했다.

### DSP
디지털 신호 처리 장치도 수년에 걸쳐 유사하게 일반화되었다. 초기 설계는 직접 메모리 접근으로 공급되는 스크래치패드 메모리를 사용했지만, 퀄컴 헥사곤과 같은 최신 DSP는 종종 CPU와 매우 유사한 캐시 세트(예: 공유 L2, 분할 L1 I-캐시 및 D-캐시가 있는 수정된 하버드 아키텍처)를 포함한다.

### 변환 색인 버퍼

주 메모리에서 페이지 테이블 항목을 가져오는 메모리 관리 장치(MMU)는 가상 주소를 물리 주소로 변환한 결과를 기록하는 데 사용되는 특수 캐시를 가지고 있다. 이 특수 캐시를 변환 색인 버퍼(TLB)라고 한다.

## 인네트워크 캐시
### 정보 중심 네트워킹
정보 중심 네트워킹(ICN)은 지속적인 연결성과 엔드 투 엔드 원칙을 기반으로 하는 호스트 중심 패러다임에서, 초점이 식별된 정보에 맞춰진 네트워크 아키텍처로 인터넷 인프라를 발전시키기 위한 접근 방식이다. ICN 노드의 내재적인 캐싱 기능 덕분에, 이는 느슨하게 연결된 캐시 네트워크로 볼 수 있으며, 이는 캐싱 정책에 대한 고유한 요구 사항을 가진다. 그러나 유비쿼터스 콘텐츠 캐싱은 무단 접근으로부터 콘텐츠를 보호해야 하는 과제를 제시하며, 이는 추가적인 주의와 솔루션을 필요로 한다.

프록시 서버와 달리, ICN에서 캐시는 네트워크 수준 솔루션이다. 따라서 캐시 상태가 빠르게 변하고 요청 도착률이 더 높다. 더욱이, 더 작은 캐시 크기는 콘텐츠 제거 정책에 다른 요구 사항을 부과한다. 특히 ICN을 위한 제거 정책은 빠르고 가벼워야 한다. 다양한 ICN 아키텍처 및 애플리케이션을 위한 다양한 캐시 복제 및 제거 방식이 제안되었다.

#### 정책
##### 시간 인식 LRU
시간 인식 LRU(TLRU)는 캐시에 저장된 콘텐츠가 유효 수명을 가지는 상황을 위해 설계된 LRU의 변형이다. 이 알고리즘은 ICN, 콘텐츠 전송 네트워크(CDN) 및 일반적으로 분산 네트워크와 같은 네트워크 캐시 애플리케이션에 적합하다. TLRU는 새로운 용어인 TTU(time to use)를 도입한다. TTU는 콘텐츠의 지역성과 콘텐츠 게시자의 정보를 기반으로 콘텐츠의 사용 가능 시간을 규정하는 콘텐츠의 타임스탬프이다. 이 지역성 기반 타임스탬프 덕분에 TTU는 지역 관리자가 인네트워크 저장소를 규제하는 데 더 많은 제어를 제공한다.

TLRU 알고리즘에서 콘텐츠가 도착하면 캐시 노드는 콘텐츠 게시자가 할당한 TTU 값을 기반으로 로컬 TTU 값을 계산한다. 로컬 TTU 값은 로컬로 정의된 함수를 사용하여 계산된다. 로컬 TTU 값이 계산되면 캐시 노드에 저장된 전체 콘텐츠의 하위 집합에서 콘텐츠 교체가 수행된다. TLRU는 덜 인기 있고 수명이 짧은 콘텐츠가 들어오는 콘텐츠로 교체되도록 보장한다.

##### 최소 빈도 최근 사용(LFRU)
최소 빈도 최근 사용(LFRU) 캐시 교체 방식은 LFU와 LRU 방식의 장점을 결합한다. LFRU는 ICN, CDN 및 일반적으로 분산 네트워크와 같은 네트워크 캐시 애플리케이션에 적합하다. LFRU에서 캐시는 권한 있는 파티션과 권한 없는 파티션이라는 두 개의 파티션으로 나뉜다. 권한 있는 파티션은 보호된 파티션으로 볼 수 있다. 콘텐츠가 매우 인기가 많으면 권한 있는 파티션으로 푸시된다. 권한 있는 파티션의 교체는 먼저 권한 없는 파티션에서 콘텐츠를 제거하고, 그런 다음 권한 있는 파티션의 콘텐츠를 권한 없는 파티션으로 푸시하고, 마지막으로 새로운 콘텐츠를 권한 있는 파티션에 삽입함으로써 이루어진다. 위 절차에서 LRU는 권한 있는 파티션에 사용되고 근사 LFU(ALFU) 방식은 권한 없는 파티션에 사용된다. 기본 아이디어는 ALFU 방식으로 로컬에서 인기 있는 콘텐츠를 캐시하고 인기 있는 콘텐츠를 권한 있는 파티션으로 푸시하는 것이다.

#### 일기 예보
2011년, 일기 예보 옵션이 있는 스마트폰 사용은 아큐웨더 서버에 과도한 부담을 주었다. 같은 지역에서 온 두 요청은 별도의 요청을 생성했다. 엣지 서버에서 GPS 좌표를 더 적은 소수점 자리로 잘라내는 최적화를 통해 가까운 쿼리의 캐시된 결과를 사용할 수 있게 되었다. 하루에 서버로의 조회 수가 절반으로 줄었다.

## 소프트웨어 캐시
### 디스크 캐시
CPU 캐시는 일반적으로 하드웨어에 의해 전적으로 관리되지만, 다양한 소프트웨어가 다른 캐시를 관리한다. 주 메모리의 버퍼 캐시는 운영체제 커널에 의해 관리된다.

하드 디스크 드라이브 또는 솔리드 스테이트 드라이브의 통합 부분인 디스크 버퍼는 때때로 오해의 소지가 있게 디스크 캐시라고 불리지만, 그 주된 기능은 쓰기 순서 지정과 읽기 선인출이다. 고급 디스크 컨트롤러는 종종 하드 디스크 드라이브의 데이터 블록을 위한 자체 온보드 캐시를 가지고 있다.

마지막으로, 빠른 로컬 하드 디스크 드라이브는 원격 서버(웹 캐시) 또는 로컬 테이프 드라이브나 광학 주크박스와 같이 훨씬 느린 데이터 저장 장치에 저장된 정보를 캐시할 수도 있다. 이러한 방식이 계층적 스토리지 관리의 주요 개념이다. 또한, 빠른 플래시 기반 솔리드 스테이트 드라이브(SSD)는 더 느린 회전 매체 하드 디스크 드라이브를 위한 캐시로 사용되어 하이브리드 드라이브로 함께 작동할 수 있다.

### 웹 캐시

웹 브라우저와 웹 프록시 서버는 로컬 또는 인터넷 서비스 제공자(ISP)에서 웹 캐시를 사용하여 웹 페이지 및 이미지와 같은 웹 서버의 이전 응답을 저장한다. 웹 캐시는 네트워크를 통해 전송해야 하는 정보의 양을 줄인다. 왜냐하면 이전에 캐시에 저장된 정보를 종종 재사용할 수 있기 때문이다. 이는 웹 서버의 대역폭과 처리 요구 사항을 줄이고, 웹 사용자를 위한 응답성을 향상시키는 데 도움이 된다.

또 다른 형태의 캐시는 P2P 캐싱으로, 피어 투 피어 애플리케이션에서 가장 많이 찾는 파일을 ISP 캐시에 저장하여 P2P 전송 속도를 높이는 것이다. 유사하게, 탈중앙화된 형태도 존재하며, 이를 통해 커뮤니티가 P2P 트래픽에 대해 동일한 작업을 수행할 수 있다. 예를 들어 코렐리(Corelli)가 있다.

### 메모이제이션

캐시는 백킹 저장소에서 검색하는 대신 필요할 때 계산되는 데이터를 저장할 수 있다. 메모이제이션은 자원 소모적인 함수 호출 결과를 룩업 테이블 내에 저장하여 후속 호출이 저장된 결과를 재사용하고 반복적인 계산을 피할 수 있도록 하는 최적화 기법이다. 이는 동적 계획법 알고리즘 설계 방법론과 관련이 있으며, 캐싱의 한 형태로도 생각할 수 있다.

### 콘텐츠 전송 네트워크

콘텐츠 전송 네트워크(CDN)는 사용자의 지리적 위치, 웹 페이지의 원본 및 콘텐츠 전송 서버를 기반으로 페이지 및 기타 웹 콘텐츠를 사용자에게 전달하는 분산 서버 네트워크이다.

CDN은 1990년대 후반에 HTML 페이지, 이미지, 비디오와 같은 정적 콘텐츠의 전달 속도를 높이는 방법으로 도입되었다. 전 세계 여러 서버에 콘텐츠를 복제하고 사용자의 위치에 따라 콘텐츠를 전달함으로써 CDN은 웹 사이트 또는 애플리케이션의 속도와 가용성을 크게 향상시킬 수 있다. 사용자가 콘텐츠를 요청하면 CDN은 캐시에 해당 콘텐츠의 복사본이 있는지 확인한다. 있다면 CDN은 캐시에서 사용자에게 콘텐츠를 전달한다.

### 클라우드 스토리지 게이트웨이

클라우드 스토리지 게이트웨이는 로컬 네트워크를 하나 이상의 클라우드 스토리지 서비스 (일반적으로 오브젝트 스토리지 서비스인 아마존 S3 등)에 연결하는 하이브리드 클라우드 스토리지 장치이다. 이 장치는 자주 접근하는 데이터를 위한 캐시를 제공하여 클라우드 스토리지 서비스의 자주 접근하는 데이터에 대한 고속 로컬 접근을 가능하게 한다. 클라우드 스토리지 게이트웨이는 또한 전통적인 파일 서비스 프로토콜을 통한 클라우드 오브젝트 스토리지 접근 및 연결 중단 시 캐시된 데이터에 대한 지속적인 접근과 같은 추가적인 이점을 제공한다.

### 기타 캐시
BIND DNS 데몬은 도메인 이름과 IP 주소 간의 매핑을 캐시하며, DNS 리졸버 라이브러리도 마찬가지다.

쓰기-통과(write-through) 작업은 신뢰할 수 없는 네트워크에서 작업할 때 일반적이다. 통신이 신뢰할 수 없을 때 여러 쓰기-백 캐시 간에 필요한 일관성 프로토콜이 엄청나게 복잡하기 때문이다. 예를 들어, 웹 페이지 캐시와 분산 파일 시스템(NFS 또는 SMB와 같은)을 위한 클라이언트 사이드 캐시는 네트워크 프로토콜을 간단하고 신뢰할 수 있게 유지하기 위해 일반적으로 읽기 전용 또는 쓰기-통과 방식이다.

웹 검색 엔진도 색인된 웹 페이지를 자체 캐시에서 사용할 수 있도록 자주 제공한다. 이는 웹 서버의 웹 페이지를 일시적으로 또는 영구적으로 접근할 수 없을 때 유용할 수 있다.

데이터베이스 캐싱은 예를 들어 인덱스 (데이터베이스), 데이터 사전 및 자주 사용되는 데이터의 하위 집합 처리에 있어서 데이터베이스 애플리케이션의 처리량을 실질적으로 향상시킬 수 있다.

분산 캐시는 네트워크로 연결된 호스트를 사용하여 애플리케이션에 확장성, 신뢰성 및 성능을 제공한다. 호스트는 함께 위치할 수도 있고 다른 지리적 지역에 분산될 수도 있다.

## 버퍼 vs. 캐시

'버퍼'와 '캐시'의 의미는 완전히 다르지 않지만, 캐싱 과정과 버퍼링 과정 사이에는 근본적인 의도상의 차이가 있다.

근본적으로 캐싱은 반복적으로 전송되는 데이터 전송에 대한 성능 향상을 실현한다. 캐싱 시스템이 데이터 항목의 초기(일반적으로 쓰기) 전송 시 성능 향상을 실현할 수 있지만, 이러한 성능 향상은 캐싱 시스템 내에서 발생하는 버퍼링으로 인한 것이다.

읽기 캐시의 경우, 데이터 항목은 캐시의 (더 빠른) 중간 저장소에서 가져올 수 있는 덕분에 데이터 항목에 대한 후속 읽기가 성능 향상을 실현하기 위해 해당 데이터 항목이 적어도 한 번은 상주 위치에서 가져와야 한다. 쓰기 캐시의 경우, 데이터 항목의 첫 쓰기 시 데이터 항목이 즉시 캐시의 중간 저장소에 저장되고 나중에 데이터 항목을 상주 저장소로 전송하거나 백그라운드 프로세스로 발생하는 덕분에 쓰기 성능 향상이 실현될 수 있다. 엄격한 버퍼링과 달리 캐싱 프로세스는 캐시의 중간 저장소와 데이터가 상주하는 위치 간의 일관성을 유지하기 위해 (잠재적으로 분산된) 캐시 일관성 프로토콜을 준수해야 한다. 반면에 버퍼링은 다음과 같다.

* 그렇지 않으면 새로운 데이터를 통신 프로세스 간에 전송하는 횟수를 줄여 여러 작은 전송에 관련된 오버헤드를 더 적고 더 큰 전송으로 상쇄한다.
* 서로 직접 전송할 수 없는 통신 프로세스를 위한 중개자 역할을 한다.
* 전송에 관련된 통신 프로세스 중 적어도 하나가 요구하는 최소 데이터 크기 또는 표현을 보장한다.

일반적인 캐싱 구현에서 처음 읽거나 쓰는 데이터 항목은 효과적으로 버퍼링되며, 쓰기의 경우 대부분 쓰기가 시작된 애플리케이션에 대한 성능 향상을 실현한다. 또한 개별 쓰기가 일괄 쓰기로 지연되는 캐싱 프로토콜의 부분은 버퍼링의 한 형태이다. 개별 읽기가 일괄 읽기로 지연되는 캐싱 프로토콜의 부분도 버퍼링의 한 형태이지만, 이 형태는 최소한 초기 읽기의 성능에 부정적인 영향을 미칠 수 있다(개별 읽기의 합계 성능에는 긍정적인 영향을 미칠 수 있더라도). 실제로 캐싱은 거의 항상 어떤 형태의 버퍼링을 포함하는 반면, 엄격한 버퍼링은 캐싱을 포함하지 않는다.

버퍼는 CPU 명령어가 주변 장치에 저장된 데이터를 직접 처리할 수 없기 때문에 전통적으로 사용되는 임시 메모리 위치이다. 따라서 주소 지정 가능한 메모리가 중간 단계로 사용된다. 또한, 이러한 버퍼는 대량의 데이터가 조립 또는 분해될 때(저장 장치에 의해 요구되는 대로) 또는 데이터가 생성된 순서와 다른 순서로 전달될 때 실현 가능하다. 또한 전체 데이터 버퍼는 일반적으로 순차적으로 전송되므로(예: 하드 디스크로), 버퍼링 자체는 때때로 전송 성능을 높이거나 전송 지연 시간의 변화 또는 지터를 줄인다. 이는 캐싱이 지연 시간을 줄이는 것을 목적으로 하는 것과 대조된다. 이러한 이점은 버퍼링된 데이터가 버퍼에 한 번 기록되고 버퍼에서 한 번 읽히더라도 존재한다.

캐시도 전송 성능을 향상시킨다. 성능 향상의 일부는 여러 개의 작은 전송이 하나의 큰 블록으로 결합될 가능성에서 비롯된다. 그러나 주요 성능 향상은 동일한 데이터가 캐시에서 여러 번 읽히거나 기록된 데이터가 곧 읽힐 가능성이 높기 때문에 발생한다. 캐시의 유일한 목적은 기본적으로 느린 저장소에 대한 접근을 줄이는 것이다. 캐시는 또한 일반적으로 인접 계층의 관점에서 보이지 않도록 설계된 추상화 계층이다.

## 같이 보기

* 캐시 컬러링
* 캐시 계층 구조
* 캐시-블라인드 알고리즘
* 캐시 스탬피드
* 캐시 언어 모델
* HTML5의 캐시 매니페스트
* 더티 비트
* 5분 규칙
* 구체화 뷰
* 메모리 계층 구조
* 파이프라인 버스트 캐시
* 임시 파일

## 각주

## 추가 자료
* "모든 프로그래머가 메모리에 대해 알아야 할 것"
* "분산 환경에서의 캐싱"


분류:컴퓨터 구조