66

ある論文を読んだところ、コールド キャッシュウォーム キャッシュという用語が使用されていました。この用語についてグーグルで検索しましたが、役に立つものは見つかりませんでした (スレッドのみがここにあります)。

これらの用語はどういう意味ですか?

4

5 に答える 5

113

TL;DR車の冷たいエンジンと暖かいエンジンには類似点があります。コールド キャッシュ - 値がなく、空であるため、高速化できません。ウォーム キャッシュにはいくつかの値があり、そのスピードアップを実現できます。

キャッシュは、ルックアップを高速化するためにいくつかの値 (inode、メモリ ページ、ディスク ブロックなど) を保持する構造です。

キャッシュは、高速検索データ構造 (ハッシュ テーブル、B+ ツリー) または高速アクセス メディア (RAM メモリと HDD、SSD と HDD) にある種の短い参照を格納することで機能します。

この高速検索を行うには、キャッシュに値を保持する必要があります。例を見てみましょう。

いくつかのファイルシステムを備えた Linux システムがあるとします。ファイルシステム内のファイルにアクセスするには、ファイルがディスクのどこから始まるかを知る必要があります。この情報は inode に保存されます。簡単にするために、inode テーブルはディスク上のどこかに格納されているとします (いわゆる「スーパーブロック」部分)。

ここで、ファイル /etc/fstab を読み取る必要があるとします。これを行うには、ディスクから inode テーブルを読み取り (10 ミリ秒)、それを解析してファイルの開始ブロックを取得し、ファイル自体を読み取る必要があります (10 ミリ秒)。合計 ~20ms

これはあまりにも多くの操作です。したがって、RAM にハッシュ テーブルの形式でキャッシュを追加します。RAM アクセスは 10ns で、1000 倍 (!) 高速です。そのハッシュ テーブルの各行には 2 つの値が保持されます。

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

しかし問題は、最初はキャッシュが空であることです。このようなキャッシュはコールド キャッシュと呼ばれます。キャッシュの利点を活用するには、キャッシュにいくつかの値を入力する必要があります。それはどのように起こりますか?ファイルを探しているときは、i ノード キャッシュを調べます。キャッシュ内に i ノードが見つからない場合 (キャッシュ ミス)、「わかりました」と言って、i ノード テーブルの読み取り、解析、およびファイル自体の読み取りで完全な読み取りサイクルを実行します。しかし、部分を解析した後、iノード番号を保存し、キャッシュ内の開始ディスクブロックを解析しています。そして、それは延々と続いています - 別のファイルを読み込もうとして、キャッシュを調べ、キャッシュミス (キャッシュがコールド) になり、ディスクから読み込んで、キャッシュに行を追加します。

したがって、まだディスクから読み取りを行っているため、コールド キャッシュでは速度が向上しません。場合によっては、キャッシュをウォームアップするために余分な作業 (テーブルを検索する余分な手順) を行うため、コールド キャッシュによってシステムが遅くなります。

しばらくすると、キャッシュにいくつかの値が格納され、ファイルを読み込もうとすると、キャッシュと BAM が検索されます。inode が見つかりました (キャッシュ ヒット)! これで、ディスク ブロックの開始が完了したので、スーパーブロックの読み取りをスキップして、ファイル自体の読み取りを開始します。10 ミリ秒節約できました。

そのキャッシュはウォームキャッシュと呼ばれます-キャッシュヒットを与えるいくつかの値を持つキャッシュ。

于 2014-03-31T08:34:37.377 に答える
39

ここに画像の説明を入力

バックグラウンド:

Cacheは小さくて高速です。これにより、 (大きくて低速な)アクセスmemoryを回避して時間を節約できます (読み取りはからの読み取りよりも高速です)。ただし、これは、プログラムが必要とするデータが(から読み込まれ) 有効である場合にのみ役立ちます。また、時間の経過とともにデータが取り込まれます。1. 空、または 2.無関係なデータを含むことができます。または3. 関連するデータを含むことができますCPUmain memorycache~100 xmain memorycachedmain memorycachecachecache



さて、あなたの質問に:

コールド キャッシュ:cacheが空であるか、無関係なデータを持っている場合、プログラム データ要件に対してCPUより遅い読み取りを行う必要があります。main memory

ホット キャッシュ:に関連データがcache含まれており、プログラムのすべての読み取りがcacheそれ自体から満たされる場合。

したがって、ホット キャッシュは望ましいものですが、コールド キャッシュはそうではありません。

于 2014-04-01T00:58:43.623 に答える
5

非常に良い応答@avd。

コールド キャッシュは、空のキャッシュまたは古いデータを含むキャッシュです。

一方、ホット キャッシュは、システムが必要とする有用なデータを維持します。より高速な処理を実現するのに役立ちます。ほとんどの場合、リクエストのほぼリアルタイムの処理に使用されます。ユーザー要求へのケータリングを開始する前に、特定の情報が手元に必要なシステム/プロセスがあります。ユーザー要求を処理する前に市場データ/リスク情報/セキュリティ情報などを必要とする取引プラットフォームなど。この重要な情報を取得するために、リクエストごとにプロセスが DB/サービスにクエリを実行する必要がある場合、時間がかかります。したがって、キャッシュすることをお勧めします。これは、ホット キャッシュによって実現可能です。このキャッシュは定期的に維持する必要があります (更新/削除など)。そうしないと、期間中に不要なデータでキャッシュのサイズが大きくなり、パフォーマンスが低下する可能性があります。

ホット キャッシュを作成する方法の 1 つは、キャッシュの遅延入力です。これは、リクエストを受け取ったときにキャッシュを入力するということです。その場合、最初のリクエストは遅くなりますが、後続のリクエストはより速くなります。もう 1 つのアプローチは、プロセスの起動時 (またはユーザー リクエストが受信される前) にデータをロードし、プロセスが存続するまでキャッシュを維持することです。

于 2015-11-19T12:23:29.407 に答える