23.2. perf mem를 사용하여 샘플링 메모리 액세스
이 절차에서는 perf mem
명령을 사용하여 시스템에서 메모리 액세스를 샘플하는 방법을 설명합니다. 이 명령은 perf 레코드 및
동일한 옵션을 사용하며 perf
보고서와mem
하위 명령에 독점적인 일부 옵션을 사용합니다. 기록된 데이터는 나중에 분석을 위해 현재 디렉터리에 있는 perf.data
파일에 저장됩니다.
사전 요구 사항
-
perf 설치에 설명된 대로
perf
사용자 공간 도구가 설치되어 있습니다.
절차
메모리 액세스 샘플:
# perf mem record -a sleep seconds
이 예제에서는
sleep
명령으로 지정된 대로 모든 CPU에서 몇 초 동안 메모리에 액세스합니다. 메모리 액세스 데이터를 샘플하려는 명령에 대해sleep
명령을 교체할 수 있습니다. 기본적으로perf mem
는 메모리가 로드 및 저장소를 모두 샘플링합니다.t
옵션을 사용하여 하나의 메모리 작업만 선택하고perf mem
와레코드
간에 "load" 또는 "store"를 지정할 수 있습니다. 로드의 경우 메모리 계층 수준, TLB 메모리 액세스, 버스 스노크 및 메모리 잠금에 대한 정보가 캡처됩니다.분석을 위해
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)
도움말 페이지