GNU/Linux >> Linux の 問題 >  >> Linux

clock_gettime() はサブマイクロ秒のタイミングに適していますか?

いいえ。これを行うには、プラットフォーム固有のコードを使用する必要があります。 x86 および x86-64 では、'rdtsc' を使用してタイム スタンプ カウンターを読み取ることができます。

使用している rdtsc アセンブリを移植するだけです。

__inline__ uint64_t rdtsc(void) {
  uint32_t lo, hi;
  __asm__ __volatile__ (      // serialize
  "xorl %%eax,%%eax \n        cpuid"
  ::: "%rax", "%rbx", "%rcx", "%rdx");
  /* We cannot use "=A", since this would use %rax on x86_64 and return only the lower 32bits of the TSC */
  __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
  return (uint64_t)hi << 32 | lo;
}

<ブロック引用>

アプリケーションの Linux ビルドに組み込まれたプロファイラー用の高解像度タイマーが必要です。私たちのプロファイラーは、個々の関数と同じくらい小さいスコープを測定するため、25 ナノ秒よりも優れたタイマー精度が必要です。

oprofile を検討しましたか または perf ? CPU のパフォーマンス カウンター ハードウェアを使用して、コード自体にインストルメンテーションを追加せずにプロファイリング データを取得できます。関数ごと、またはコード行ごとにデータを表示できます。 「唯一の」欠点は、消費されたウォール クロック時間を測定しないことです。消費された CPU 時間を測定するため、すべての調査には適していません。


Linux
  1. 初心者向けのLinuxタイムコマンドチュートリアル(例付き)

  2. ジュニアシステム管理者向けのテクノロジーを知る必要がある

  3. 技術認定試験の準備に役立つ5つのヒント

  1. Rsyncの完了までの時間または残りの作業を見積もりますか?

  2. Kalendar –効率的な時間管理のための最小限のカレンダーアプリ

  3. Linux シェル スクリプトまたは変数の日付と時刻の書式設定

  1. プッシュするたびに Git がユーザー名を要求する

  2. c プログラムの Linux での経過時間の測定

  3. 特定の時間の「tail -f」