タイマーカウンタ その3

あれからもうちょっと深追いしてみました。

昔ながらのTSCのタイプ

  • PentiumM(family[06H],models[09H, 0Dh])
  • Pentium4 Xeon(family[0FH], models[00H,01H, 02H])
  • Pentium(P6)

これらは、タイムスタンプカウンタ(TSC)は内部プロセッサクロックで増加する。
この内部プロセッサクロックとは、コアの現在のクロックで決定されるものである。
ただし、Intel SpeedStep Technologyがクロック可変をもたらすので、TSCのカウンティングに悪影響を及ぼすことになる。

・・・なるほど、そこで次のTSCが出てきたわけですね

Constant TSCのタイプ

  •  Pentium4 Xeon (family[0FH], models[03H以降]
  •  CoreSolo CoreDuo(family[06H],models[0EH]
  •  Xeon 5100, Core2Duo(family [06H], model [0FH])
  •  Core2, Xeon (family[06H], DisplayModel[17H])
  •  Atom (family[06H],DisplayModel[1CH])

タイムスタンプカウンタは一定の割合で増加する。この増分はコアクロックの最大値から設定されるものである。
この機能は、コアの周波数可変に対応するために導入された。

あくまで、コアの周波数可変に対応までが目的です。
プロセッサの電源管理に対して、まったく対処されていないので、さらに次のTSC特性が出てきたというわけです。

Invariant TSCのタイプ

これは現在の Intel Core i シリーズから 搭載されているようです。

CPUID.80000007H:EDX[8] によってプロセッサがサポートしているかを判定します。
Invariant-TSCは、CPUのどのステートによっても一定割合で増加するTSCである。
つまりディープスリープに陥っていてもカウンタが止まらない。
このInvariant TSCを備える場合には、HPETやACPI Timerの代わりとして高精度なタイマーとして使うことが可能となる。

AMD CPUの場合

上記のはすべてIntel CPUだったので、AMD CPUではどうなのかを調べてみました。

  • AMD K8 Coreまで(すなわちAthlon64, Athlon64X2シリーズ)
    TSCは各クロックで増加する。パワーマネジメントにより悪影響を及ぼされ、1秒あたりの増分が変わる。さらに、コアごとに TSCの同期は行われていない。
  • AMD Barcelona/Phenom(それと Athlon64X2 kumaコードネームのもの)
    Constant TSCを搭載している。

“AMD Athlon™ 64 X2 Dual Core Processor Driver”というものをインストールすれば、TSCの同期問題はひとまず対処される模様。
AMDのConstant TSCという部分においては、 AMD64 Architecture Programmer’s Manual を参照すると以下のように書いてあり、Intelの Invariant TSCに近いものになるのではないかと思う。

The TSC counts at a constant rate, but may be affected by power management events (such as frequency changes), depending on the processor implementation. If CPUID 8000_0007.edx[8] = 1, then the TSC rate is ensured to be invariant across all P-States, C-States, and stop-grant transitions (such as STPCLK Throttling); therefore, the TSC is suitable for use as a source of time. Consult the BIOS and Kernel Developer’s Guide applicable to your product for information concerning the effect of power management on the TSC.

上記の参考文献

  • “Intel 64 and IA-32 Architectures Software Developer’s Manual” (2012March版) の記載事項より
    17.12 TIME-STAMP COUNTER  節
  • http://en.wikipedia.org/wiki/Time_Stamp_Counter の部分
  • AMD64 Architecture Programmer’s Manual

シェアする

  • このエントリーをはてなブックマークに追加

フォローする