perf Record -a:すべてのサンプルでコアあたりのサンプルを見ることができないのはなぜですか?

perf Record -a:すべてのサンプルでコアあたりのサンプルを見ることができないのはなぜですか?

パフォーマンストレースの前後にいくつかの情報が提供されており、各トレースでサンプル数が完全に異なる(約2倍)数の理由を理解しようとしています。これらのトレースは同じスクリプトで収集されたため、分析された同じ壁時間を表します。痕跡が記録されますperf record -ag

トレースが私に到達すると、perfスクリプトを介して実行されたため、テキストが出力されます。最初の質問は、各「例題」のフィールドを解釈する方法です。

swapper     0 [000] 27324.824397: cycles: 

特に、[000]が何を意味するのか分かりません。

第二に、nrcpusのオンライン/使用可能に関する12のレポートがあり、なぜサンプルごとにキャプチャされた12のスタックが表示されないのか理解できません。この特定の例では、より興味深いプロセスが開始されるまでしばらくの間、6つのスイッチスタック[000]と6つのスイッチスタック[001]を見ることができます。これが実際にアイドルプロセス(スイッチ)を実行しているCPUではなく、CPU停止の要因であると思います。私の考えでは、同じシステムで同じ停止時間に-agを使用する2つのプロファイルは、ほぼ同じ数のサンプルを持つ必要があります。これは、システム使用量に関係なく、すべてのコアをすべてのサンプルに記録する必要があるためです。

私が何を見逃しているのかを理解するのに役立つことを本当に感謝しています!

ありがとう、テリー

役に立つ場合は、完全なヘッダー情報は次のとおりです。

# captured on: Tue Feb 23 06:17:04 2016
# hostname : du76-tip-EC-1
# os release : 3.13.0-66-generic
# perf version : 3.13.11-ckt27
# arch : x86_64
# nrcpus online : 12
# nrcpus avail : 12
# cpudesc : Intel(R) Xeon(R) CPU E5-1650 v2 @ 3.50GHz
# cpuid : GenuineIntel,6,62,4
# total memory : 65813064 kB
# cmdline : /usr/lib/linux-tools-3.13.0-66/perf record -g --output /var/log/cpu_profile/record --all-cpus 
# event : name = cycles, type = 0, config = 0x0, config1 = 0x0, config2 = 0x0, excl_usr = 0, excl_kern = 0, excl_host = 0, excl_gu
est = 1, precise_ip = 0, attr_mmap2 = 0, attr_mmap  = 1, attr_mmap_data = 0
# HEADER_CPU_TOPOLOGY info available, use -I to display
# HEADER_NUMA_TOPOLOGY info available, use -I to display
# pmu mappings: cpu = 4, software = 1, uncore_irp = 24, uncore_pcu = 13, tracepoint = 2, uncore_imc_0 = 16, uncore_imc_1 = 17, unc
ore_imc_2 = 18, uncore_imc_3 = 19, uncore_imc_4 = 20, uncore_imc_5 = 21, uncore_imc_6 = 22, uncore_imc_7 = 23, uncore_qpi_0 = 25, 
uncore_qpi_1 = 26, uncore_qpi_2 = 27, uncore_cbox_0 = 7, uncore_cbox_1 = 8, uncore_cbox_2 = 9, uncore_cbox_3 = 10, uncore_cbox_4 =
 11, uncore_cbox_5 = 12, uncore_r2pcie = 28, uncore_r3qpi_0 = 29, uncore_r3qpi_1 = 30, breakpoint = 5, uncore_ha_0 = 14, uncore_ha
_1 = 15, uncore_ubox = 6
# ========

答え1

サンプルごとにキャプチャされた12個のスタックが表示されない理由はわかりません。

その理由はプロセッサによるものです。

Intel(R)Xeon(R)CPU E5-1650 v2 @ 3.50GHz

12個のスレッドを実行できる物理コアは6個だけです(Intelハイパースレッディング技術)。

記録に結果を正確に報告する方法も詳しく投稿してください。私は以前これを使ったことがperf-statあり、非常に単純な結果を得ました。また、どのプログラムを実行しているのか、マルチスレッドプログラムなのかなどを理解することも重要です。パフォーマンスはIntel Turboの影響を受ける可能性があります。

関連情報