25.2. perf mem을 사용한 메모리 액세스 샘플링
다음 절차에서는 perf mem
명령을 사용하여 시스템의 메모리 액세스를 샘플하는 방법을 설명합니다. 명령은 perf 레코드 및 perf
보고서
와 동일한 옵션은 물론 mem
하위 명령에 배타적인 일부 옵션을 사용합니다. 기록된 데이터는 나중에 분석을 위해 현재 디렉터리의 perf.data
파일에 저장됩니다.
사전 요구 사항
-
perf 설치에 설명된 대로
perf
사용자 공간 도구가 설치되어 있습니다.
절차
메모리 액세스 샘플:
# perf mem record -a sleep seconds
이 예제에서는
sleep
명령으로 지정된 시간 동안 모든 CPU에서 메모리 액세스를 샘플링합니다. 메모리 액세스 데이터를 샘플링하려는 모든 명령에 대해sleep
명령을 교체할 수 있습니다. 기본적으로perf mem
은 메모리 로드 및 저장소를 모두 샘플링합니다.t
옵션을 사용하고mem
과레코드
간에 "로드" 또는 "저장소"를 지정하여 하나의 메모리 작업만 선택할 수 있습니다. 로드의 경우 메모리 계층 구조 수준, TLB 메모리 액세스, 버스 snoops 및 메모리 잠금에 대한 정보가 캡처됩니다.분석을 위해
perf.data
파일을 엽니다.# perf mem report
예제 명령을 사용한 경우 출력은 다음과 같습니다.
Available samples 35k cpu/mem-loads,ldlat=30/P 54k cpu/mem-stores/P
cpu/mem-loads,ldlat=30/P
행은 메모리 로드를 통해 수집된 데이터를 나타내며cpu/mem-stores/P
행은 메모리 저장소를 통해 수집된 데이터를 나타냅니다. 관심 범주를 강조 표시하고 Enter 키를 눌러 데이터를 확인합니다.Samples: 35K of event 'cpu/mem-loads,ldlat=30/P', Event count (approx.): 4067062 Overhead Samples Local Weight Memory access Symbol Shared Object Data Symbol Data Object Snoop TLB access Locked 0.07% 29 98 L1 or L1 hit [.] 0x000000000000a255 libspeexdsp.so.1.5.0 [.] 0x00007f697a3cd0f0 anon None L1 or L2 hit No 0.06% 26 97 L1 or L1 hit [.] 0x000000000000a255 libspeexdsp.so.1.5.0 [.] 0x00007f697a3cd0f0 anon None L1 or L2 hit No 0.06% 25 96 L1 or L1 hit [.] 0x000000000000a255 libspeexdsp.so.1.5.0 [.] 0x00007f697a3cd0f0 anon None L1 or L2 hit No 0.06% 1 2325 Uncached or N/A hit [k] pci_azx_readl [kernel.kallsyms] [k] 0xffffb092c06e9084 [kernel.kallsyms] None L1 or L2 hit No 0.06% 1 2247 Uncached or N/A hit [k] pci_azx_readl [kernel.kallsyms] [k] 0xffffb092c06e8164 [kernel.kallsyms] None L1 or L2 hit No 0.05% 1 2166 L1 or L1 hit [.] 0x00000000038140d6 libxul.so [.] 0x00007ffd7b84b4a8 [stack] None L1 or L2 hit No 0.05% 1 2117 Uncached or N/A hit [k] check_for_unclaimed_mmio [kernel.kallsyms] [k] 0xffffb092c1842300 [kernel.kallsyms] None L1 or L2 hit No 0.05% 22 95 L1 or L1 hit [.] 0x000000000000a255 libspeexdsp.so.1.5.0 [.] 0x00007f697a3cd0f0 anon None L1 or L2 hit No 0.05% 1 1898 L1 or L1 hit [.] 0x0000000002a30e07 libxul.so [.] 0x00007f610422e0e0 anon None L1 or L2 hit No 0.05% 1 1878 Uncached or N/A hit [k] pci_azx_readl [kernel.kallsyms] [k] 0xffffb092c06e8164 [kernel.kallsyms] None L2 miss No 0.04% 18 94 L1 or L1 hit [.] 0x000000000000a255 libspeexdsp.so.1.5.0 [.] 0x00007f697a3cd0f0 anon None L1 or L2 hit No 0.04% 1 1593 Local RAM or RAM hit [.] 0x00000000026f907d libxul.so [.] 0x00007f3336d50a80 anon Hit L2 miss No 0.03% 1 1399 L1 or L1 hit [.] 0x00000000037cb5f1 libxul.so [.] 0x00007fbe81ef5d78 libxul.so None L1 or L2 hit No 0.03% 1 1229 LFB or LFB hit [.] 0x0000000002962aad libxul.so [.] 0x00007fb6f1be2b28 anon None L2 miss No 0.03% 1 1202 LFB or LFB hit [.] __pthread_mutex_lock libpthread-2.29.so [.] 0x00007fb75583ef20 anon None L1 or L2 hit No 0.03% 1 1193 Uncached or N/A hit [k] pci_azx_readl [kernel.kallsyms] [k] 0xffffb092c06e9164 [kernel.kallsyms] None L2 miss No 0.03% 1 1191 L1 or L1 hit [k] azx_get_delay_from_lpib [kernel.kallsyms] [k] 0xffffb092ca7efcf0 [kernel.kallsyms] None L1 or L2 hit No
또는 데이터를 표시할 때 관심 있는 다양한 측면을 조사하기 위해 결과를 정렬할 수 있습니다. 예를 들어 샘플링 기간 중 발생하는 메모리 액세스 유형별로 메모리 로드를 통한 데이터를 고려하는 오버헤드 순서의 내림차순으로 정렬하려면 다음을 수행합니다.
# perf mem -t load report --sort=mem
예를 들어 출력은 다음과 같습니다.
Samples: 35K of event 'cpu/mem-loads,ldlat=30/P', Event count (approx.): 40670 Overhead Samples Memory access 31.53% 9725 LFB or LFB hit 29.70% 12201 L1 or L1 hit 23.03% 9725 L3 or L3 hit 12.91% 2316 Local RAM or RAM hit 2.37% 743 L2 or L2 hit 0.34% 9 Uncached or N/A hit 0.10% 69 I/O or N/A hit 0.02% 825 L3 miss
추가 리소스
-
perf-mem(1)
도움말 페이지.