perf Record -a: 모든 샘플에서 코어당 샘플을 볼 수 없는 이유는 무엇입니까?

perf Record -a: 모든 샘플에서 코어당 샘플을 볼 수 없는 이유는 무엇입니까?

성능 추적 전/후에 대한 몇 가지 정보가 제공되었으며 각 추적에서 샘플 수가 완전히 다른(약 2x) 수의 이유를 이해하려고 노력하고 있습니다. 이러한 추적은 동일한 스크립트를 통해 수집되었으므로 분석된 동일한 벽 시간을 나타냅니다. 흔적이 기록됩니다 perf record -ag.

추적이 나에게 도달하면 perf 스크립트를 통해 실행되었으므로 텍스트가 출력됩니다. 첫 번째 질문은 각 "예제 제목"의 필드를 해석하는 방법입니다.

swapper     0 [000] 27324.824397: cycles: 

특히 [000]이 무엇을 의미하는지 잘 모르겠습니다.

둘째, nrcpus 온라인/사용 가능에 대한 12개의 보고서가 있는데 왜 샘플당 캡처된 12개의 스택이 표시되지 않는지 이해할 수 없습니다. 이 특정 예에서는 보다 흥미로운 프로세스가 시작될 때까지 잠시 동안 6개의 스위치 스택[000]과 6개의 스위치 스택[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

12개의 스레드를 실행할 수 있는 물리적 코어는 6개뿐입니다(Intel 하이퍼스레딩 기술).

기록에 결과를 정확하게 보고하는 방법도 자세히 게시해 주세요. 나는 이전에 이것을 사용해 본 적이 perf-stat있으며 매우 간단한 결과를 얻었습니다. 또한 어떤 프로그램을 실행하고 있는지, 멀티스레드 프로그램인지 등을 이해하는 것도 중요합니다. 성능은 Intel Turbo의 영향을 받을 수도 있습니다.

관련 정보