web-dev-qa-db-ja.com

コールドキャッシュとウォームキャッシュの概念とはどういう意味ですか?

論文を読んで、用語cold cachewarm cacheを使用しました。この用語についてはグーグルで検索しましたが、有用なものは見つかりませんでした(スレッドのみ here )。

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

48
Amir

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

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

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

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

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

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

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

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

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

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

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

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

79

enter image description here

背景:

Cacheは小さくて高速のmemoryです。これは、CPUmain memory(大きくて遅い)にアクセスして時間を節約するのを防ぐのに役立ちます(cache読み取り~100 xからの読み取りよりもmain memory高速です。ただし、これは、プログラムが必要とするデータがcachedmain memoryからcacheに読み込まれる)であり、有効である場合にのみ役立ちます。また、cacheには時間とともにデータが入力されます。したがって、cacheは次のようになります。
1。空、または
2。 無関係なデータを含めることができる、または
3。 関連するデータを含めることができます。


今、あなたの質問に:

コールドキャッシュ:cacheが空であるか、無関係なデータがあるため、CPUがプログラムデータ要件のためにmain memoryからの読み取りを遅くする必要がある場合。

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

そのため、ホットキャッシュは望ましく、コールドキャッシュは望ましくありません。

30
brokenfoot

@avdの非常に素晴らしい応答。

Cold Cacheは、空のキャッシュまたは古いデータを持つキャッシュです。

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

ホットキャッシュを作成するための1つの方法は、キャッシュのレイジーポピュレーションです。つまり、リクエストを受け取ったときにキャッシュにポピュレートするということです。その場合、最初のリクエストは遅くなりますが、その後のリクエストは速くなります。別のアプローチは、プロセスの起動時に(またはユーザーの要求が入る前に)データをロードし、プロセスが終了するまでキャッシュを維持することです。

3
cool_puns