【きゃっしゅみす】

キャッシュミス とは?

最終更新:
💡 手元にない…取りに行くしかない

キャッシュミスとは、キャッシュを探したときに目的のデータが見つからず、より低速なメモリやストレージ、データベースなどから取得しなければならない状態のことです。

📌 このページのポイント
キャッシュミス CPU 要求 キャッシュ データなし... × 取得要求 メインメモリ データ取得 低速... キャッシュにデータがない → メモリまで取りに行く(低速) = キャッシュミス
キャッシュミスのイメージ
ひよこ ひよこ
キャッシュミスって、キャッシュヒットの反対なの?
ペンギン先生 ペンギン先生
そのとおり!キャッシュを探したけどデータが見つからなかった状態のことだよ。図書館で言えば、手元の棚に本がなくて、倉庫まで取りに行かなきゃいけない感じだね。
ひよこ ひよこ
キャッシュミスにも種類があるって聞いたんだけど…
ペンギン先生 ペンギン先生
CPUキャッシュでは「3C」という分け方が定番だよ。初めて使うデータで起きる「コールドミス(初回参照ミス)」、キャッシュ全体が小さくて追い出されたデータで起きる「キャパシティミス」、置き場所の決まり方のせいで同じ場所を奪い合う「コンフリクトミス」だね。複数のコアがあると、他のコアの書き込みでデータが無効になって起きるミスを加えることもあるよ。
ひよこ ひよこ
どれが一番やっかいなの?
ペンギン先生 ペンギン先生
コールドミスは、キャッシュをどれだけ大きくしても初回には起きるから避けにくいね。キャパシティミスは容量を増やすか扱うデータを減らす、コンフリクトミスはキャッシュの「連想度」を上げると減らせる。ただ連想度を上げるとヒットしたときの速度が落ちることもあるから、最終的には実行時間で比べるんだ。
ひよこ ひよこ
キャッシュミスが起きるとどうなるの?
ペンギン先生 ペンギン先生
CPUの場合、L1キャッシュが1ナノ秒前後なのに対して、メインメモリは50〜100ナノ秒ほどかかるという目安があるよ。つまり数十倍から100倍くらい待たされることがあるんだ。Webサーバーのキャッシュだと、ミスのたびにデータベースへ問い合わせが飛ぶから、アクセスが集中するとデータベースの負荷が一気に上がる原因になるよ。
ひよこ ひよこ
キャッシュミスを減らすコツってあるの?
ペンギン先生 ペンギン先生
プログラミングでは「データの局所性」を意識することが大事だよ。近くのメモリを順番にアクセスする「空間的局所性」と、同じデータを短期間に繰り返し使う「時間的局所性」を高めると、ヒット率が上がりやすいんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「キャッシュミス」って出てきたら「キャッシュにデータがなくて遅い方に取りに行くこと」と思えればだいたいOK!
📖 おまけ:英語の意味
「Cache Miss」 = キャッシュ失敗
💬 cache(貯蔵庫)で miss(見逃す・外す)した、つまりデータが見つからなかったという意味だよ

参考資料

← 用語集にもどる