x86 に Persistent Memory 用の命令が追加予定

将来の Intel x86 CPU に追加される機能を先出しで解説する Intel Architecture Instruction Set Extensions Programming Reference が Oct. 2014 に改定され -022 になったようだ。前回は -019 の日記を書いている(id:nminoru:20140703:intelcpu)。

https://software.intel.com/sites/default/files/managed/0d/53/319433-022.pdf

またリビジョンを取りこぼしてしまったため -022 で入ったのかそれ以前に入ったのか定かではないが、MRAM や PCM のような byte-addressable な persistent memory のための新命令とメモリアクセス規定の追加が行われる予定。

CLWB(Cache Line Write Back) 命令

x86 にはキャッシュをフラッシュする命令がすでにいくつかあるが、CLWB 命令は指定したキャッシュラインが dirty つまりメインメモリへの書き込み待ちの場合にメモリに反映する。ただしキャッシュラインをフラッシュはせずキャッシュ内に留めておく。

PCOMMIT(Persistent Commit) 命令

x86 にはメモリアクセス命令の順序付けのために SFENCE や MFENCE 命令が用意されていが、これらの命令はあくまでも MOB(Memory Order Buffer)内で順序付けを制御していただけで、実際にメモリバスへデータを書き出すことを保証していなかった。このため persistent memory へ STORE を発行した後に MFENCE 命令を実行しても CPU 内のストアバッファ(MOB)に留まっている時間は実際の書き込みは行われない。

PCOMMIT 命令は SFENCE 命令と似たセマンティクスの命令だが、PCOMMIT 命令の実行が完了した時には persistent memory range 領域に対する先行するストアが全てメモリ上に書き出されたことが保証される。Persistent memory range 領域をどのようにして与えるかは今のところかかれていないが、特別なレジスタで領域を指定するか、ページテーブルエントリあたりにフラグを追加するか、問答無用で全メモリアドレス空間で PCOMMIT 命令が利くようにするのだろう。