ウィキペディアには、11のキャッシュ置換アルゴリズムがリストされています。私が開発しようとしているアプリケーションについてほとんど何も知らないと仮定すると、「デフォルト」のキャッシュ置換アルゴリズムとして何を使うべきでしょうか?
私のOSコースから正しく思い出せば、LRUは最高の汎用キャッシュ置換アルゴリズムです。しかし、多分私は間違っています。
また、これは一般に、メインメモリが安価で豊富であり、キャッシュサイズについてあまり心配する必要がないため、学術的な問題です。
ウィキペディアには、11のキャッシュ置換アルゴリズムがリストされています。私が開発しようとしているアプリケーションについてほとんど何も知らないと仮定すると、「デフォルト」のキャッシュ置換アルゴリズムとして何を使うべきでしょうか?
私のOSコースから正しく思い出せば、LRUは最高の汎用キャッシュ置換アルゴリズムです。しかし、多分私は間違っています。
また、これは一般に、メインメモリが安価で豊富であり、キャッシュサイズについてあまり心配する必要がないため、学術的な問題です。
回答:
最良の答えはそれが依存するということだと思います。私の経験では、キャッシングアルゴリズムの選択には多くの要因があります。
考慮すべき要素
さまざまな要因をすべて検討したら、その最適な処理を行うキャッシュアルゴリズムを見つける必要があります。たとえば、多数の書き込み、いくつかの書き換え、最近書き込まれたデータの読み取り、ある種の回転メディアがあるアプリケーションがあるとします。この場合、一種のハイブリッドキャッシングアルゴリズムが必要になります。書き込みデータを処理するには、Wise order of Writes(WOW)やディスクから読み取られたデータのLRUアルゴリズムなどが必要になる場合があります。これは、ディスクアクセスが非常に高価であり、WOWアルゴリズムによりデータの書き込みがより効率的になり、LRUが頻繁にアクセスされるデータを常にキャッシュに保持するためです。
アクセス時間が非常に速いSSDディスクがあるとします。ディスクアクセスは比較的安価であるため、LRUアルゴリズムを選択することをお勧めします。
本当に言いたいのは、「ベスト」な答えはないということです。最良の答えは、あなたに当てはまる要因を知り、それらを最もよく処理するアルゴリズムを選択することです。
アルゴリズムを見つける方法
システムのプロファイルを作成します。これには通常、メモリアクセスの統計を保持するコードを追加する必要があります。プロファイリングにより、どの要素が最も重要であるかを確認できます。
過去に、一定期間にわたるすべてのメモリアクセスを追跡するコードを追加しました。その後、パターンを探します。再読み込み、再書き込み、シーケンシャルアクセス、ランダムアクセスなどを探します。
重要なものを特定したら、どの種類のキャッシングアルゴリズムをすべて調べて、どの処理が最適かを確認する必要があります。
あなたが開発しようとしているアプリケーションについてほとんど何も知らないと仮定すると、実際にキャッシュシステムを選択して実装する前に、それについてもっと知る必要があります。言い換えれば、デフォルトの実装はありません:いくつかの目的に適しているものもあれば、まったく悪いものもあります。
たとえば、Least Recent UsedおよびLeast Frequently Usedの2つの実装のみを取り上げます。どちらを先に使用するかを決定する方法は?
LRUは、ユーザーが最新のアイテムに頻繁にアクセスし、古いアイテムに戻らないか、めったに戻らないことが確実な場合に適しています。例:電子メールクライアントの一般的な使用法。ほとんどの場合、ユーザーは常に最新のメールにアクセスしています。彼らはそれらを読んで、延期し、数分、数時間または数日で戻ってきます。2年前に受け取ったメールを探していることに気づくことができますが、最後の2時間に受け取ったメールにアクセスするよりも頻繁に起こりません。
一方、LRUは、ユーザーが他のアイテムよりも頻繁にいくつかのアイテムにアクセスするというコンテキストでは意味がありません。例:好きな音楽を頻繁に聴いていますが、400曲で、少なくとも週に1回は同じ5曲を聴きますが、1年に1回しか聴かないのが嫌いな曲ですずっと。この場合、LFUの方がはるかに適切です。
実装を2つだけ使用すると、どちらが優れているかを考えたくない場合や、アプリケーションに関する十分な情報がない場合に使用できる「デフォルト」アルゴリズムはありません。それは、デフォルトで、何も知らないときに計算の結果を見つけるために2つの数値を加算、減算、乗算、または除算する必要があるかどうかを尋ねるようなものです。
なぜウィキペディアだけに選択を制限するのですか?ACMデジタルライブラリなどの研究データベースにアクセスできる場合は、さらに多くのアルゴリズムが見つかります。また、特許をいじることについても注意してください。たとえば、ARCは優れたアルゴリズムですが、残念ながら特許取得済みです。
完全なキャッシュアルゴリズムはありません。非常に悪い動作をするケースを常に見つけることができます。
したがって、最も悪い振る舞いをするものを判別するために、キャッシュされている問題を知ることが重要です。
また、あなたはどのくらい考慮されなければならない必要なものをキャッシュすると、どのくらいあなたができる事をキャッシュし...