2014-03-31 1 views
30

필자는 종이를 읽고 "콜드 캐시"및 "웜 캐시"이라는 용어를 사용했습니다. 나는 검색하지만 유용한 것을 찾지 못했습니다. "콜드 캐시"과 "웜 캐시"의 개념은 무엇을 의미합니까?콜드 캐시 및 웜 캐시 개념은 무엇을 의미합니까?

나는 또한 this을 방문한다. 그러나 나는 더 많은 것이 필요하다.

답변

55

TL : DR 차가운 엔진과 따뜻한 엔진으로 비유 할 수 있습니다. 콜드 캐시 - 값이 없으며 비어 있기 때문에 속도가 향상되지 않습니다. 웜 캐시에는 몇 가지 값이 있으며 속도를 높일 수 있습니다.

캐시는 빠른 조회를 위해 일부 값 (inode, 메모리 페이지, 디스크 블록 등)을 보유하는 구조입니다.

캐시는 빠른 검색 데이터 구조 (해시 테이블, B + 트리) 또는 빠른 액세스 미디어 (RAM 메모리 대 HDD, SSD 대 HDD)에 짧은 참조를 저장하여 작동합니다.

빠른 검색을 수행하려면 캐시에 값을 저장해야합니다. 예를 봅시다.

일부 파일 시스템이있는 Linux 시스템이 있다고 가정 해보십시오. 파일 시스템의 파일에 액세스하려면 파일이 디스크에서 시작하는 위치를 알아야합니다. 이 정보는 inode에 저장됩니다. 간단히하기 위해 inode 테이블은 디스크의 어딘가에 저장됩니다 ("수퍼 블록"부분).

이제/etc/fstab 파일을 읽을 필요가 있다고 상상해보십시오. 이렇게하려면 디스크에서 inode 테이블을 읽은 다음 (10ms) 파싱하고 파일의 시작 블록을 얻은 다음 파일 자체 (10ms)를 읽어야합니다. 총계 ~ 20ms

이것은 너무 많은 연산입니다. 따라서 RAM에 해시 테이블 형식의 캐시를 추가하려고합니다. RAM 액세스는 10ns - 1000 배 (!) 배 빠릅니다. 해시 테이블의 각 행에는 2 개의 값이 저장됩니다.

(inode number or filename) : (starting disk block) 

는 그러나 문제는 시작에 캐시가 비어 있다는 것입니다 - 같은 캐시 차가운 캐시라고합니다. 캐시의 이점을 활용하려면 값을 입력해야합니다. 어떻게됩니까? 파일을 찾을 때 inode 캐시를 살펴 봅니다. 캐시에서 inode (캐시 미스)를 찾지 못한다면 '좋아요'라고 말하고 inode 테이블 읽기, 파싱 및 파일 읽기와 함께 전체 읽기주기를 수행하십시오. 그러나 부분을 구문 분석 한 후에는 inode 번호를 저장하고 캐시에서 시작 디스크 블록을 구문 분석합니다. 그리고 계속 진행 중입니다. 다른 파일을 읽으려고 시도하고, 캐시를 살펴보고, 캐시 미스 (캐시가 차갑습니다.)를 얻고, 디스크에서 읽고, 캐시에 행을 추가합니다.

그래서 차가운 캐시는 디스크에서 계속 읽으므로 속도가 향상되지 않습니다. 경우에 따라 콜드 캐시는 캐시를 워밍업하기 위해 추가 작업 (테이블을 찾는 추가 단계)을 수행하기 때문에 시스템 속도가 느려집니다.

시간이 지나면 캐시에 값이 생겨서 파일을 읽으려고하면 캐시와 BAM을 검색합니다. inode (캐시 히트)를 발견했습니다! 이제 디스크 블록을 시작 했으므로 수퍼 블록 읽기를 건너 뛰고 파일 자체 읽기를 시작합니다! 방금 10ms를 절약했습니다!

그 캐시는 웜 캐시 - 캐시에 캐시 값을 제공하는 캐시를 캐시했습니다.

배경
+2

이것은 매우 잘 설명되어 있습니다. 정말 고맙습니다! –

25

enter image description here

:

Cache가 작고 memory 빠르고, main memory (더 크고 더 느린) 저장 시간에 액세스 할 수 CPU을 방지 할 수 있습니다 (cache 읽기는 main memory에서 읽어보다 ~100 x 빠르다). 그러나 이는 프로그램에 필요한 데이터가 cached (main memory에서 cache으로 읽음)이며 유효한 경우에만 도움이됩니다. 또한 cache은 시간이 지남에 따라 데이터로 채워집니다. 그래서, cache은 다음과 같습니다
1. 빈, 또는
2. 관련 데이터를 포함 할 수 관련이없는 데이터 또는
(3)를 포함 할 수 있습니다.


지금, 당신의 질문에 :

콜드 캐시 :cache이 비어 있거나 프로그램의 데이터 요구 사항에 대한 CPU 필요 main memory에서 느린 읽어을 할 수 있도록, 관련없는 데이터가있는 경우 .

핫 캐시 :cache 관련 데이터를 포함, 모든 당신의 프로그램에 읽는 cache 자체에서 만족하고 있습니다.

따라서 핫 캐시가 바람직하며 콜드 캐시는 바람직하지 않습니다.

2

아주 좋은 응답 @avd.

콜드 캐시은 단지 공백 캐시이거나 부실 데이터입니다.

핫 캐시 다른 한편으로는 시스템에 필요한 유용한 데이터를 유지 관리합니다. 처리 속도를 높이는 데 도움이됩니다. 대부분 요청에 가까운 실시간 처리에 사용됩니다. 사용자 요청을 처리하기 전에 특정 정보가 필요한 시스템/프로세스가 있습니다. 사용자 요청을 처리하기 전에 시장 데이터/위험 정보/보안 정보 등을 요구하는 거래 플랫폼과 같은 각 요청에 대해 프로세스가이 중요한 정보를 얻기 위해 DB/서비스를 쿼리해야하는 경우 많은 시간이 소요됩니다. 따라서 캐시하는 것이 좋습니다. 그것은 Hot Cache를 통해 가능할 것입니다. 이 캐시는 정기적으로 유지되어야합니다 (업데이트/제거 등). 그렇지 않으면 캐시가 불필요한 데이터로 인해 커질 수 있으며 성능이 저하 될 수 있습니다.

핫 캐시를 만들려면 한 가지 방법은 캐시의 게으른 인구수 일 것입니다. 즉, 요청할 때 캐시를 채우는 것입니다. 이 경우 초기 요청은 느리지 만 후속 요청은 더 빠를 것입니다. 또 다른 접근법은 프로세스 시작시 (또는 사용자 요청이 들어 오기 전에) 데이터를로드하고 프로세스가 살아있을 때까지 캐시를 유지하는 것입니다.