perf record -a:为什么我在每个样本上看不到每个核心的样本?

perf record -a:为什么我在每个样本上看不到每个核心的样本?

我向我提供了一些之前/之后的性能跟踪,我试图理解为什么它们在每个跟踪中具有完全不同的(大约 2 倍)数量的样本。这些痕迹是通过相同的脚本收集的,因此它们代表了所分析的相同的墙上时间。痕迹被记录下来perf record -ag

当跟踪到达我时,它们已经通过 perf 脚本运行,所以我有文本输出。我的第一个问题是如何解释每个“示例标题”的字段:

swapper     0 [000] 27324.824397: cycles: 

特别是我不确定 [000] 代表什么。

其次,有 12 个报告为 nrcpus 在线/可用,我不明白为什么我没有看到每个样本捕获的 12 个堆栈。在这个特定的示例中,我看到六个交换器堆栈 [000],然后是六个交换器堆栈 [001],持续一段时间,直到更有趣的进程启动。我想知道这是否是 cpu 停止的一个因素,而不是实际运行空闲进程(交换器)的 cpu 的一个因素?根据我的想法,同一台机器上相同挂机时间的两个带有 -ag 的配置文件应该具有大致相同数量的样本,因为所有核心都应该记录在每个样本上,无论系统有多忙。

任何帮助弄清楚我缺少什么的帮助将不胜感激!

谢谢,特里

如果有帮助的话,这是完整的标题信息:

# 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 个堆栈

这是因为处理器

英特尔(R) 至强(R) CPU E5-1650 v2 @ 3.50GHz

只有 6 个物理核心,能够运行 12 个线程(英特尔超线程技术)。

请帖子还详细说明您如何准确地报告记录中的结果。我以前只使用perf-stat,它给出了非常简单的结果。同样重要的是了解您运行的程序是什么,是否是多线程程序等等。性能也可能受到 Intel Turbo 的影响。

相关内容