ディスクキャッシュ

コンピュータシステムのメモリ構成は大昔から階層化されていて、
高速で小さく高価なメモリを助けるように、
より遅くてより大きくより安いメモリが配置されていました。
最近ではCPU内部に1次キャッシュ、2次キャッシュ、3次キャッシュ、
内部メモリ(SRAM/DRAM)があって、
CPU外にDRAM、NAND Flash ROM、HDD(swap領域)なんて
すごい構成のシステムもあったりします。

そのメモリの階層構造とちょっと違うラインにあるのがディスクキャッシュです。
HDD上にあるファイルの内容を直接操作するより、
データをメモリに持ってきておいてそっちで操作した方が
高速にアクセスできるというアイディアです。
ただしメモリ上でいじくったデータは最終的にHDDに書き戻す必要があり、
このライトバックのタイミングこそが高速化の肝となります。
なるべく暇なときにやれば節約になりますから。

さてLinuxのディスクキャッシュではpdflushスレッドがライトバックを担当しますが、
そのタイミングを外部から調整することができます。
“/proc/sys/vm/dirty_background_ratio”では
バックグランドでライトバック処理を開始する条件
(物理メモリに占めるライトバック対象データの割合)を指定できます。
“/proc/sys/vm/dirty_ratio”では
フォアグランドでライトバック処理を開始する条件を指定できます。
“/proc/sys/vm/dirty_writeback_centisecs”(×10ms)は
pdflushスレッド起動間隔で、この周期でライトバック開始判定しているようです。
“/proc/sys/vm/dirty_expire_centisecs”(×10ms)は
強制的にライトバックを発動する周期のようです。
もしかしたら私の認識違いがあるかもしれませんが、そこはご容赦を。

ところで、長く続いてきたこのメモリ構成が
今後数年のうちに劇的に変わっていく可能性があります。
近年NAND Flash ROMの大容量化によりHDDからSSDへの趨勢が見られますが、
ソフトウェアをそれぞれに最適化してそれぞれの長所を生かす試みも続いていますし、
DRAMの行き詰まりも近いことから、
ソフトウェア的部分も含めDRAMの使い方に変化が起きそうで、
さらにはその代替メモリについても大々的に利用される時代が訪れそうな気配です。

まあコンピュータシステムの構成が大きく変わろうとも、
最後のところで付加価値を生み出すのはアプリケーションソフトウェアだったりしますから、
1ユーザとして興味があるのはgoogleの次の一手だったりするんですけど、
パーソナルコンピュータに黎明期から縁のある1エンジニアとしては
この手のことに今後も注目していきたいと思っています。