web-dev-qa-db-ja.com

キャッシュラインとメモリページの関係

  1. 正しければ、メインメモリのページは、メインメモリとハードディスクなどの外部ストレージデバイスとの間でデータを転送するための最小の単位単位です。メインメモリのキャッシュラインは、メインメモリとCPUキャッシュ間のデータ転送の最小単位です。

  2. ページサイズが常に、またはキャッシュラインサイズの自然数になるのが最善かどうかは疑問です。キャッシュラインサイズが64バイトで、メモリページサイズが4KBの場合、各ページには4KB/64バイト== 64キャッシュラインがあります。

  3. ページとキャッシュラインはどちらもメモリ内の固定オブジェクトですか?それとも、特定のサイズのメモリの連続したブロックだけで、メモリ内のどこからでも開始して浮動させることができますか?

  4. キャッシュラインが複数のページにまたがることは常に可能ですか?つまり、キャッシュラインの一部がページにあり、キャッシュラインの他の部分が別のページにあるのですか?

ありがとう。

9
Tim
  1. キャッシュラインは、物理メモリにアクセスできる最小単位です。 1バイトの読み取り/書き込みを行うと、それを含む完全なキャッシュラインがCPUキャッシュに読み込まれ、書き戻されます。キャッシュをバイパスして書き込む命令(エフェメラルストリーミング命令)でも、キャッシュラインサイズで書き込むことに注意してください。 CPUによって異なりますが、キャッシュラインのサイズは通常32/64/128バイトです。メモリページがディスクに書き込まれると、全体が書き込まれます。これは、メモリの負荷が高すぎる場合、または休止状態のプロセスで(そしておそらく他の用途で)発生します。また、必要に応じて全体を読み上げます。これは主に、ページが部分的または完全に使用されているかどうかをカーネルが知る方法がないためです。他の外部ストレージの読み取り/書き込み操作は、任意の粒度を持つことができます(例:fwrite(..))。

  2. ページサイズはCPU/GPUに依存します。ほとんどのCPUでは、ページサイズは少なくとも4KBであり、通常4KB/64KB/2MB/4MB/16MB/1GBの組み合わせをサポートします(必ずしもすべてが同時にサポートされるとは限りません)。サイズは常に2の累乗になります。

  3. ページとキャッシュラインの両方が隣接しており、それぞれのサイズに合わせる必要があります。 64バイトのキャッシュラインは常に64バイトにアラインされ、2MBのページは常に2MBにアラインされます。

  4. #3のため、ページサイズは常にキャッシュラインよりも大きく、常にキャッシュラインのサイズの倍数になるため、キャッシュラインが2ページにまたがることはありません。

メモリに関する豊富な情報については、この優れた情報源を参照してください。 http://lwn.net/Articles/250967/

8