第11章(パフォーマンスとスケーラビリティ)および JCIPブック のContext Switchingというセクションから:
新しいスレッドがスイッチインされると、必要なデータがローカルプロセッサキャッシュにある可能性が低いため、コンテキストスイッチによって大量のキャッシュミスが発生するため、最初にスケジュールされたときにスレッドの実行が少し遅くなります。
キャッシュミスの概念とその逆の可能性(キャッシュヒット)について、誰かがわかりやすい方法で説明できますか?
キャッシュmissは、一般的に、キャッシュ内で何かが検索され、見つからない場合です。キャッシュには、検索されるアイテムが含まれていませんでした。キャッシュhitは、キャッシュ内で何かを検索するときであり、それはwasアイテムを保存し、クエリを満たすことができます。
コンテキストの切り替えが多くのキャッシュミスを引き起こすのはなぜですか?
メモリに関しては、各プロセッサには メモリキャッシュ –メインメモリの小さな部分の高速コピーがあります。新しいスレッドがコンテキストをプロセッサに切り替えると、ローカルキャッシュメモリが空になるか、スレッドに必要なデータに対応しません。つまり、必要なデータはローカルメモリに保存されているnotであるため、その新しいスレッドによって行われたすべての(またはほとんどの)メモリルックアップはキャッシュミスになります。キャッシュ。その後、ハードウェアはmainメモリに対して多くの要求を行って、ローカルメモリキャッシュをいっぱいにしなければなりません。これにより、スレッドの初期実行が遅くなります。
プロセッサがメインメモリからデータを取得する場合は、まずキャッシュバッファを調べて、対応するアドレスがバッファに存在するかどうかを確認します。存在する場合、キャッシュを使用して操作を実行します。メインメモリから取得する必要はありません。これは「キャッシュヒット」と呼ばれます。
アドレスがキャッシュに存在しない場合、「キャッシュミス」と呼ばれます。キャッシュミスが発生した場合は、プロセッサがアドレスをフェッチするためにメインメモリにアクセスしているため、さらに時間がかかることを意味します。
また、コンテキストスイッチによって、以前に実行されたスレッドがキャッシュされたデータにアクセスできるプロセッサでアクティブ状態に戻る場合、必要な「ワーキングセット」がキャッシュに残っている可能性があることに注意してください。これが当てはまる確率は、キャッシュサイズ(および構造)によって異なります。また、ワークロードにも依存します。スレッドのアイドルまたは待機期間中にキャッシュに対する要求がどれだけあったか、およびアイドルまたは待機期間がどれだけ続くか。
プロセッサがメモリロケーションがキャッシュにあることを検出した場合、キャッシュヒットと言います。それ以外の場合、キャッシュミスと言います。