Timestamp-Counter Scaling for Virtualization White Paper

将来の Intel x86 CPU に追加される機能を先出しで解説する Intel Architecture Instruction Set Extensions Programming Reference が Oct. 2015 に改定され -023 になったようだ。前回(id:nminoru:20150309:intelcpu)の -022 と比べると、MPX 機能が Software Developer's Manual へ移動され分量が減ったのと、微妙な修正が入った以外は変更がない。

https://software.intel.com/sites/default/files/managed/07/b7/319433-023.pdf

そのかわり「Timestamp-Counter Scaling for Virtualization White Paper」というドキュメントが公開されている。

http://www.intel.com/content/www/us/en/processors/timestamp-counter-scaling-virtualization-white-paper.html

CPU は温度の高低などによって周波数を上げたり下げたりするが、Intelx86 CPU の Timestamp-Counter(TSC) は暫く前から CPU の実周波数とは独立して常に一定の時間でサイクルを刻む Constant TSC になっている。さらに CPU が深いスリープ状態になった場合にも TSC は止めずに動く Invariant TSC だ。
さらに仮想マシン用の機能としてゲストが TSC を読む RDTSC 命令を読んだ場合、ホスト側の CPU のリアル TSC に対して仮想マシンごとに設定されたオフセット値を足した値を返す TSC offset 機能が実装されている。RDTSC 命令は頻出実行命令だが、TSC offsetting があれば性能を落とさずに、かつ仮想マシン毎に矛盾のない値を返すことができる。ただ異なるホスト間のマイグレーションを行う場合、サーバーに装着された CPU の世代や周波数が異なっているかもしれない。CPU 周波数が高い CPU と低い CPU では TSC の刻みが異なるため、TSC offsetting だけではこの差を吸収できない。
今回、提示された機能はゲストが RDTSC 命令を使った場合にリアル TSC に係数をかけた値を返す TSC multiplier という機能だ。TSC offsetting と TSC multiplier を組み合わせることで、仮想マシンに設定された仮想 CPU 周波数どおりの進み方をする TSC を、異なる性能サーバー間をマイグレーションする環境下でも手に入れることができるようだ。
ただ現在のところ詳細は記述されていない。