Intel PMU를 사용하여 코어 당 읽기/쓰기 메모리 대역폭 사용량을 측정 할 수 있습니까? 여기에서 "메모리"는 DRAM (즉, 임의의 캐시 레벨에서 타격하지 않음)을 의미한다.인텔 성능 모니터 카운터를 사용하여 메모리 대역폭을 측정 할 수 있습니까?
답변
보통 PMU 카운터를 프로그래밍하는 것만 큼 간단하지는 않지만 그래, 가능합니다.
하나의 접근법은 PCI 공간을 통해 액세스되는 프로그램 가능 메모리 컨트롤러 카운터를 사용하는 것입니다. 시작하기 좋은 곳은 pcm-memory
에 Intel 자체 구현을 조사하여 pcm-memory.cpp입니다. 이 응용 프로그램은 소켓 별 또는 메모리 컨트롤러 당 처리량을 보여 주며 일부 용도에 적합합니다. 특히 대역폭은 모든 코어에서 공유되므로 조용한 시스템에서는 대역폭의 대부분이 테스트중인 프로세스와 관련되어 있다고 가정하거나 소켓 수준에서 모니터링하고 싶다면 정확히 원하는 것입니다.
다른 대안은 "offcore repsonse"카운터를 신중하게 프로그래밍하는 것입니다. 이들은 내가 아는 한 L2 (마지막 코어 - 개인 캐시)와 나머지 시스템 사이의 트래픽과 관련이 있습니다. 오프 코어 응답의 결과로 필터링 할 수 있으므로 다양한 "L3 miss"이벤트 조합을 사용하고 캐시 라인 크기를 곱하여 읽기 및 쓰기 대역폭을 얻을 수 있습니다. 이벤트는 꽤 세분화되어 있기 때문에 처음부터 액세스를 유발 한 원인 (명령어 가져 오기, 데이터 요청 요청, 프리 페치 등)을 더 자세히 분석 할 수 있습니다.
오프 코어 응답 카운터는 일반적으로 perf
및 likwid
과 같은 도구로 지원되지만 적어도 최근 버전에서는 SKL과 같은 클라이언트 부품에 대해서도 합리적인 지원을받는 것으로 보입니다.
Intel PMU에 대해 확실하지 않지만 Intel VTune Amplifier (https://software.intel.com/en-us/intel-vtune-amplifier-xe)를 사용할 수 있다고 생각합니다. 이것은 성능 모니터링 (메모리, cpu 캐시, cpu)을위한 많은 도구를 가지고 있습니다. 어쩌면 이것은 당신을 위해 작동 할 것입니다.
예 (ish)입니다 (간접적으로). 카운터 간의 관계 (시간 소인 포함)를 사용하여 다른 숫자를 추론 할 수 있습니다. 예를 들어, 1 초 간격으로 샘플링하고 N 개의 마지막 레벨 (3) 캐시 미스가있는 경우 초당 N * CacheLineSize 바이트를 차지한다는 확신을 가질 수 있습니다. 그 미스 등의 CPU 프리 페치, 인터럽트 활동을 반영 하듯
그것은, 정확하게 프로그램 활동에 관련하는 조금 더 끈끈한 도착
'이 CPU는 계산하지 않습니다의 소택지도 있습니다(MMX, SSE, AVX, ..)이 설정 비트가이 상태에 있지 않으면 '; 따라서 자신을 압연하는 것은 번거롭고 ....
VTune은 하드웨어 성능 카운터 (PMU = 성능 모니터링 장치)를 사용하기위한 도구입니다. VTune이 메모리 대역폭을 측정하는 방법을 설명 할 수있는 방법이 아니라면이 방법은 유용하지 않습니다. (VTune은 유용한 도구이며 캐시 미스 핫스팟과 같은 것을 발견하는 데 도움이 될 수 있으며 성능 카운터를 단순히 기록하는 것 이상의 기능을 수행 할 수 있습니다. 그러나이 질문은 요구하지 않습니다.) –