kawasin73のブログ

技術記事とかいろんなことをかくブログです

OS はキャッシュのライトスルーを選ぶのか

メモリとキャッシュと整合性。どうも、かわしんです。

最近「詳解 LINUX カーネル」という分厚い本を読んでいるのですが、割と序盤の第 2 章で気になったことがあったので調べてみました。

ライトスルーとライトバック

ご存知の通り、CPU にはキャッシュがあってメモリアクセスの遅延を高速化しています。 メモリの内容への書き込みではキャッシュとメモリを同時に書き換える「ライトスルー」方式とキャッシュの中身だけ書き換えてメモリへの書き込みは遅延させる「ライトバック」方式があります。

ライトスルーは書き込みのたびにメモリアクセスが発生し遅くなってしまうが簡単に実装できるし、複数段キャッシュの L1 キャッシュで使えばその書き込み遅延も軽減することができます。 一方で、ライトバック方式は高速に書き込みができるけど整合性を保つために実装が複雑になりがちだし、バグが起きやすいかもしれません。

とここまでは Wikipedia にも載っている話です。

ja.wikipedia.org

世の中の文献ではこの二つの方式を比較して両方には一長一短があるよねという話を CPU を作るハードウェアベンダの視点から論じています。

OS がライトスルー方式を選ぶ理由はあるのか

ところが、「詳解 LINUX カーネル」によるとページテーブルエントリには PWT (Page Write-Through) フラグがあり、Pentium では OS がライトスルー方式かライトバック方式かを選ぶことができるらしいです。

僕の認識ではメモリのキャッシュは透過的なモノです。ライトバック方式のデメリットは CPU の実装上のデメリットであり、CPU の利用者である OS の立場からは、ライトバック方式のデメリットはなく高速なライトバック方式を採用しない理由がないです。 実際に Linux では全てのページフレームでキャッシュは有効であり書き込みの際には常にライトバック方式が設定されるそうです。

では逆に、なぜPentium などの CPU はライトバック方式のみではなくライトスルー方式も選択可能な形で実装しているのか、OS がわざわざライトスルー方式を採用するケースがあるのかどうかが気になります。

ということでざっくり調べてみましたが、軽く調べてみた限り CPU を作る立場から比較する記事が多かったです。

論点

結論

はっきりとはわからなかったですが、いい線いってるんじゃないかなと思います。詳しい人いたら教えてください。