Intel64 and IA-32 アーキテクチャ仕様書が改訂

久しぶりの Intel64 命令セットアーキテクチャ仕様書の変更(id:nminoru:20110409:intelcpu)。AVX2の追加内容(id:nminoru:20110613:avx2)も含まれている。

  • AVX2 系
    • いろいろ、いろいろ追加
    • RDRAND retrieves a random number generated from hardware
    • 16-bit の Half-precision floating-pointer型
  • Process-context identifiers(PCIDs)
  • VM-x の強化
  • RDFSBASE/RDGSBASE/WRFSBASE/WRGSBASE FS/GSセグメントのベースアドレスを読んだり・書いたりする。

PCID は TLB を効率的に動かす仕組みのようだ。
UNIX だと同じ 0x123456000 というアドレスでも、それがプロセスAのアドレス空間に属するのかプロセスBのアドレス空間に属するのかで別々のメモリを指している。一般的な RISC CPU には仮想アドレス空間に +α する形では空間を区別できる識別子がある。例えば IA-64 だと TLB は 85 ビットでアドレスを記録しているので、64ビットのアドレス空間を2^21まで区別することができる(c.f. 「仮想メモリ方式の分類」)。
しかし IA-32 は過去にそのような機構がなかったため、コンテキストスイッチの度に TLB をフラッシュしていた*1

今回導入された Process-context identifiers(PCIDs) は TLB 上でプロセスを区別することができる機構のようで、論理プロセッサ毎に 2^12 まで空間を区別できるようだ。このためコンテキストスイッチの度に TLB をフラッシュするという馬鹿みたいな動作が改善される。無論、OS が修正されれば。

*1:カーネル空間は TLB エントリのグローバルビットを立てることで、コンテキストスイッチ時に TLB エントリのフラッシュを免れることができた。