2009-05-24 4 views
2

본인의 논문에서이 문제를 다루었습니다. 목표는 특별히 Windows 2K8 서버용 .net 서버 모니터링 도구를 개발하는 것입니다. 지금까지 액세스 할 수있는 것은 소프트웨어 성능 카운터뿐입니다. perfmon 및 WMI 클래스를 통해 사용할 수있는 것을 의미합니다.하드웨어 성능 카운터를 프로그래밍하는 방법

하지만 TLB 누락 횟수 나 현재 메모리 대역폭 등을 모니터 할 수 있어야한다는 문제가 있습니다. 그리고 그게 내가 갇혀 있어요. 이러한 카운터를 얻는 표준 .net 방법이 없기 때문에 나는 Oprofile과 같은 오픈 소스 프로그램의 일부 코드를 읽었습니다. 그러나 내가 정확히 무엇을 찾고 있는지 알지 못하기 때문에 그 앞에서 많은 진전이 없었습니다.

나는 여기에 누군가가 있는지 겸손히 묻습니다. 이런 종류의 일을 가진 경험이 있고 조금 도와 줄 수 있습니다.

미리 감사드립니다.

답변

3

성능 카운터를 읽는 데 가장 널리 사용되는 라이브러리는 Performance API (PAPI)입니다. PAPI는 실제로 두 API (high-levellow-level)입니다. 나는 그것을 더 직관적이라고 생각하기 때문에 낮은 레벨의 것을 사용하는 경향이있다. 그러나 그것은 나 일 수있다.

PAPI에는 두 가지 유형의 이벤트가 있습니다. Preset events은 플랫폼에 독립적 인 것으로 가정되지만 내부적으로 계산되는 방식에 따라 미묘하게 다를 수 있습니다. 그들은 TLB 미스와 메모리 스톨을 포함하기 때문에 거기에서 시작할 수 있습니다. 이것이 사용자의 요구에 맞지 않는 경우, 특정 하드웨어에만 해당되는 고유 이벤트를 살펴보고 일반적으로 하드웨어가 셀 수있는 모든 이벤트를 포함 할 수 있습니다. papi_native_aval을 사용하여 이들의 목록을 얻으십시오.

PAPI는 Windows를 지원하지만 실제로 시도한 적이 없습니다. 필자는 Windows 2008을 특별히 언급 한 docs/readmes에서 아무 것도 찾을 수 없었습니다.하지만 적어도 소스를 통해 직접 액세스 할 수는 없더라도 필요한 카운터에 액세스하는 방법을 살펴볼 수 있습니다.

더 많은 정보가 필요하면 최신 버전의 PAPI가 사용 가능한 경우 perfmon2을 살펴보십시오.

+0

대단히 감사합니다.이 부분을 확실히 살펴 보겠습니다. 질문이 더 있으시면 ^^ –

+0

참고로, Linux는 버전 2.6.32 (약) 이후 PMC에 액세스하기위한 기본 구현 인 [perf] (https : //perf.wiki.kernel)을 제공합니다. .org/index.php/Tutorial). 커널을 패치 할 필요가 없습니다. – betabandido

관련 문제