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 エントリのフラッシュを免れることができた。