15

Linuxの世界では、ナノ秒の精度のタイマー/クロックティックを取得するには、次を使用できます。

#include <sys/time.h>

int foo()
{
   timespec ts;

   clock_gettime(CLOCK_REALTIME, &ts); 
   //--snip--      
}

この回答asmは、命令でCPUクロックを直接照会するアプローチを提案していRDTSCます。

マルチコア、マルチプロセッサ アーキテクチャでは、このクロック ティック/タイマー値は複数のコア/プロセッサ間でどのように同期されますか? 私の理解では、固有のフェンシングが行われているということです。この理解は正しいでしょうか?

これを詳細に説明するドキュメントを提案できますか? Intel Nehalem と Sandy Bridge のマイクロアーキテクチャに興味があります。

編集

プロセスを単一のコアまたは CPU に制限することはオプションではありません。プロセスは (消費されるリソースの点で) 非常に巨大であり、すべてのコアとプロセッサを含むマシン内のすべてのリソースを最適に利用したいからです。

編集

TSC がコアとプロセッサ間で同期されていることを確認していただきありがとうございます。しかし、私の最初の質問は、この同期はどのように行われるのですか? それはある種のフェンシングですか?公的文書を知っていますか?

結論

すべての入力に感謝します。この議論の結論は次のとおりです。TSC は、マルチ プロセッサ/マルチ コア システムのコアとプロセッサ全体で発生する RESET を使用して、初期化時に同期されます。その後、すべてのコアは独立しています。TSC は、周波数の変動を正規化するフェーズ ロック ループによって不変に保たれ、その結果、特定のコア内のクロック変動が発生します。これにより、TSC がコアとプロセッサ間で同期を維持します。

4

4 に答える 4

25

インテルから直接、最近のプロセッサが一定の速度で動作する TSC を維持し、マルチソケット マザーボード上のコアとパッケージ間で同期し、プロセッサがディープ スリープ C ステートに入ったときに動作し続ける方法についての説明があります。 、特に Vipin Kumar EK (Intel) による説明を参照してください。

http://software.intel.com/en-us/articles/best-timing-function-for-measuring-ipp-api-timing/

コア間での TSC の同期について議論している Intel からの別のリファレンスを次に示します。この場合、rdtscp を使用すると、TSC とプロセッサ ID の両方をアトミックに読み取ることができるという事実に言及しています。これは、アプリケーションのトレースにおいて重要です...トレースしたいとします。あるコアから別のコアに移行する可能性のあるスレッドの実行。これを 2 つの別々の命令 (非アトミック) で実行すると、スレッドがクロックを読み取った時点でスレッドがどのコアにあったかが確実にわかりません。

http://software.intel.com/en-us/articles/intel-gpa-tip-cannot-sychronize-cpu-timestamps/

マザーボード上のすべてのソケット/パッケージは、2 つの外部共通信号を受信します。

  1. リセット
  2. 基準時計

マザーボードに電源を供給すると、すべてのソケットが同時に RESET を認識し、すべてのプロセッサ パッケージが外部の水晶発振器から基準クロック信号を受信し、プロセッサの内部クロックの位相が維持されます (ただし、通常は 25x などの高い倍率が使用されます)。 Phase Locked Loop (PLL) と呼ばれる回路。最近のプロセッサは、温度または電力管理のスロットリング (いわゆる不変 TSC) のために個々のコアが使用している可能性のある乗数に関係なく、プロセッサが定格されている最高の周波数 (乗数) で TSC をクロックします (いわゆる定数 TSC)。2008 年にリリースされた X5570 などの Nehalem プロセッサ (およびそれ以降の Intel プロセッサ) は、ディープ パワー ダウン C ステート (C6) で電力を節約している場合でも、カチカチ音をたて続ける「ノンストップ TSC」をサポートしています。

http://www.anandtech.com/show/2199

さらに調査したところ、Intel が 2009 年 12 月 22 日に提出し、2011 年 6 月 23 日に公開された「複数のコアとスレッドのタイムスタンプ カウンター (TSC) オフセットの制御」というタイトルの特許に出会いました。

http://www.freepatentsonline.com/y2011/0154090.html

この特許出願に関する Google のページ (USPTO ページへのリンクあり)

http://www.google.com/patents/US20110154090

私が収集したものから、Vipin Kumar によって指定されたマシン固有レジスタのフィールドの値によって、すべての外部バス クロックでインクリメントされるアンコア (コアを囲むパッケージ内のロジック) に 1 つの TSC があります。上記のリンク (MSR_PLATFORM_INFO[15:8])。外部バス クロックは 133.33MHz で動作します。さらに、各コアには独自の TSC レジスタがあり、すべてのコアで共有され、1 つのコアのクロックとは異なる可能性があるクロック ドメインによってクロックされます。したがって、コア TSC が RDTSC によって読み取られるときに、何らかの種類のバッファが必要です。 (または RDTSCP) 命令がコアで実行されます。たとえば、パッケージで MSR_PLATFORM_INFO[15:8] を 25 に設定すると、アンコア TSC がバス クロックごとに 25 ずつインクリメントします。バス クロックを 25 倍し、このクロックを各コアに提供してローカル TSC レジスタにクロックを供給し、すべての TSC レジスタの同期を保つ PLL があります。用語を実際のハードウェアにマッピングするには

  • 定数 TSC は、MSR_PLATFORM_INFO[15:8] で指定された定数乗数で乗算される 133.33 MHz で動作する外部バス クロックを使用して実装されます。
  • インバリアント TSC は、各コアの TSC を個別のクロック ドメインに保持することで実装されます。
  • ノンストップ TSC は、すべてのバス クロックで MSR_PLATFORM_INFO[15:8] ティックによってインクリメントされるアンコア TSC を持つことによって実装されます。これにより、マルチコア パッケージはディープ パワー ダウン (C6 状態) になり、PLL をシャットダウンできます。 .. クロックをより高い乗数に保つ必要はありません。コアが C6 状態から再開されると、その内部 TSC は、ソフトウェアが TSC に値を書き込んだ場合にオフセット調整を使用して、アンコア TSC (スリープ状態にならなかったもの) の値に初期化されます。これは特許にあります。ソフトウェアが TSC に書き込む場合、そのコアの TSC は他のコアとは位相がずれますが、一定のオフセットになります (TSC クロックの周波数はすべて定数乗数によってバス基準クロックに結び付けられます)。
于 2012-06-16T03:45:01.787 に答える
5

RTDSCは CPU 間で同期されません。したがって、マルチプロセッサ システムでは信頼できません。Linux で考えられる唯一の回避策は、アフィニティを設定して、プロセスを単一の CPU で実行するように実際に制限することです。これは、ユーティリティを使用して外部的に行うか、 sched_setaffinityまたはpthread_setaffinity_np関数tasksetを使用して「内部的に」行うことができます。

于 2012-06-06T20:05:23.383 に答える
5

このマニュアルの 17.12 章では、最新のプロセッサで使用される不変 TSC について説明しています。Nehalem で利用可能なこのタイムスタンプは、rtscp 命令と共に、1 つのアトミック操作でタイムスタンプ (待機状態などの影響を受けない) とプロセッサ署名を読み取ることができます。

ウォールクロック時間の計算に適していると言われていますが、プロセッサ間で値が同じであることを期待していないことは明らかです。述べられている考えは、連続した読み取りが同じ CPU のクロックに対するものであるかどうか、または複数の CPU 読み取りを調整するかどうかを確認できるということです。「NUMA システムで TSC 値の CPU ごとの違いを調整するためにも使用できます。」

CPU コア全体での rdtsc 精度も参照してください。

ただし、受け入れられた回答の最終的な一貫性の結論が、tsc を壁時計時間に使用できるというステートメントから導かれるかどうかはわかりません。一貫性がある場合、時間の CPU ソースをアトミックに決定する理由は何でしょうか。

注意: TSC 情報は、Intel マニュアルの第 11 章から第 17 章に移動しました。

于 2012-06-14T00:56:43.333 に答える