キャッシュコヒーレンシ

キャッシュは、あるリソースにアクセスする際のパフォーマンスを向上させるために使用することができます。図のように、同じリソースに対してこのようなキャッシュが複数あると、問題が発生することがあります。キャッシュコヒーレンスまたはキャッシュコヒーレンシーとは、リソースのすべてのキャッシュが同じデータを持ち、キャッシュ内のデータが意味を持つようにするためのいくつかの方法を指します(データインテグリティと呼ばれます)。キャッシュコヒーレンスは、メモリコヒーレンスの特殊なケースです。

共通のメモリ資源のキャッシュが多数存在する場合、キャッシュ内のデータが意味をなさなくなったり、あるキャッシュが他のキャッシュと同じデータを持たなくなったりする問題が発生することがあります。この問題が発生する一般的なケースは、マルチプロセシングシステムのCPUのキャッシュです。図にあるように、トップクライアントが以前に読み込んだメモリブロックのコピーを持っていて、ボトムクライアントがそのメモリブロックを変更した場合、トップクライアントは知らないうちに無効なメモリのキャッシュを残してしまう可能性があります。キャッシュコヒーレンスは、このようなコンフリクトを管理し、キャッシュとメモリの間の一貫性を維持するためにあります。

共有資源のマルチキャッシュZoom
共有資源のマルチキャッシュ

定義

コヒーレントとは、同じメモリ位置への読み出しと書き込みの動作を定義するものです。以下の条件がすべて満たされていれば、キャッシュはコヒーレントです。

  1. プロセッサPが位置Xを読み出すとき、その位置に書き込んだ後、他のプロセッサがその位置に別の値を書き込まなければ、Pは自分が書き込んだ値を取得しなければなりません。これはモノプロセッサシステムでも同じで、メモリが書き込んだ値を保持できることを意味します。
  2. P1とPという2つのプロセッサ2があり、P1が値X1を書き込み、その後、P2が値X2を書き込んだとすると、P1が値を読み取る場合、その間に他の書き込みがなければ1、P2が書き込んだ値X2ではなく、自分が書き込んだ値Xを取得しなければなりません。これは、メモリの見方がコヒーレントであることを意味します。もしプロセッサが、Pが行った書き込みの後に、同じ古い値を読むことができる2ならば、記憶は首尾一貫していないことになる。
  3. メモリの特定の場所への書き込みは、一度に1回しかできません。複数の書き込みがある場合は、それらが次々と行われなければなりません。つまり、ある2つのプロセッサが、位置Xに2つの異なる値AとBをこの順番で受け取った場合、プロセッサは位置XをBと読んだ後、Aと読むことはできません。

これらの条件は、読み出しと書き込みが瞬時に行われると仮定して定義されています。しかし、コンピュータのハードウェアでは、メモリのレイテンシやその他のアーキテクチャの観点から、このようなことは起こりません。プロセッサXによる書き込みが行われた後、ごくわずかな時間内にプロセッサYからの読み出しが行われた場合、プロセッサXの書き込みがプロセッサYの読み出しによって確認されない可能性があります。メモリ一貫性モデルでは、書き込まれた値が、他のプロセッサが行う次の読み取り命令によって見られるべきタイミングを定義します。

キャッシュコヒーレンス機構

  • ディレクトリベースのコヒーレンスメカニズムは、キャッシュされたブロックの中央ディレクトリを維持します。
  • スヌーピングとは、各キャッシュがアドレスラインを監視して、自分のキャッシュ内にあるメモリロケーションへのアクセスを監視するプロセスです。あるキャッシュがコピーを持っている場所への書き込み操作が観測された場合、キャッシュコントローラは、スヌープされたメモリロケーションの自分のコピーを無効にする。
  • スナーフィングとは、キャッシュコントローラーがアドレスとデータの両方を監視し、セカンドマスターがメインメモリーのロケーションを変更したときに、自分のメモリーロケーションのコピーを更新しようとすることです。

分散型共有メモリシステムは、これらのメカニズムを模倣することで、疎結合システムのメモリブロック間の一貫性を維持することができます。

一般的に研究されているコヒーレンスのタイプは、スヌーピングとディレクトリベースの2つです。それぞれにメリットとデメリットがあります。スヌーピングプロトコルは、十分な帯域幅があれば、すべてのトランザクションがすべてのプロセッサで見られるリクエスト/レスポンスであるため、高速になる傾向があります。欠点は、スヌーピングはスケーラブルではないことです。すべてのリクエストは、システム内のすべてのノードにブロードキャストする必要があります。システムが大きくなると、(論理的または物理的)バスのサイズとそれが提供する帯域幅も大きくならざるを得ません。一方、ディレクトリは、(3ホップのリクエスト/フォワード/レスポンスで)レイテンシが長くなる傾向がありますが、メッセージはポイント・ツー・ポイントであり、ブロードキャストではないため、使用する帯域幅は非常に少なくなります。このため、大規模なシステム(64プロセッサ以上)の多くは、このタイプのキャッシュコヒーレンスを使用しています。

質問と回答

Q:キャッシュコヒーレンスとは何ですか?


A:キャッシュコヒーレンスとは、あるリソースのすべてのキャッシュが同じデータを持ち、キャッシュ内のデータが一貫していること(データインテグリティ)のことです。

Q: キャッシュコヒーレンスの目的は何ですか?


A: キャッシュコヒーレンスの目的は、共通のメモリリソースの複数のキャッシュ間の競合を管理し、キャッシュとメモリ間の整合性を維持することです。

Q: キャッシュコヒーレンシがない場合、どのような影響が考えられますか?


A: キャッシュコヒーレンシがないと、キャッシュ内のデータが意味をなさなくなったり、あるキャッシュが他のキャッシュと同じデータを持たなくなったりして、不整合やエラーが発生する可能性があります。

Q:キャッシュコヒーレンスに問題が発生する一般的なケースは何ですか?


A:キャッシュコヒーレンシの問題が発生する一般的なケースは、マルチプロセッシングシステムにおけるCPUのキャッシュです。

Q: キャッシュコヒーレンスはどのように機能するのですか?


A: キャッシュ・コヒーレンスは、あるリソースのすべてのキャッシュが同じデータを持ち、様々な方法でキャッシュ内のデータが一貫していることを保証することで機能します。

Q:メモリコヒーレンスとはどういう意味ですか?


A: メモリコヒーレンスとは、共有メモリリソース全体のデータの一貫性を意味します。

Q: キャッシュ・コヒーレンスはどのようにパフォーマンスを向上させることができますか?


A: キャッシュ・コヒーレンスは、与えられたリソースへのアクセスをより速く、より効率的にすることでパフォーマンスを向上させることができます。

AlegsaOnline.com - 2020 / 2023 - License CC3