KeSetHardwareCounterConfiguration 함수(ntddk.h)
KeSetHardwareCounterConfiguration 루틴은 스레드 프로파일링에 사용할 하드웨어 카운터 목록을 지정합니다.
구문
NTSTATUS KeSetHardwareCounterConfiguration(
[in] PHARDWARE_COUNTER CounterArray,
[in] ULONG Count
);
매개 변수
[in] CounterArray
스레드 프로파일링에 사용할 하드웨어 카운터 구성을 설명하는 HARDWARE_COUNTER 배열에 대한 포인터입니다. 각 배열 요소는 하드웨어 카운터를 설명하는 구조체입니다. 루틴이 반환되기 전에 이 배열의 내용을 내부 데이터 구조로 복사합니다.
[in] Count
CounterArray 매개 변수가 가리키는 배열의 요소 수를 지정합니다.
반환 값
호출에 성공하면 KeSetHardwareCounterConfiguration 은 STATUS_SUCCESS 반환합니다. 가능한 오류 반환 값에는 다음이 포함됩니다.
반환 코드 | 설명 |
---|---|
STATUS_INVALID_PARAMETER | Count 매개 변수의 값은 Ntddk.h 헤더 파일에 정의된 MAX_HW_COUNTERS 상수로 지정된 최대 카운터 수를 초과합니다. |
STATUS_WMI_ALREADY_ENABLED | CounterArray 배열에 지정된 하나 이상의 카운터가 이미 활성화되어 있습니다. |
STATUS_NOT_IMPLEMENTED | 이 루틴은 호출자가 실행 중인 프로세서 아키텍처에 대해 구현되지 않습니다. |
설명
Windows 7에서 이 루틴은 x86 기반, x64 기반 및 Itanium 기반 아키텍처에 대해서만 구현됩니다. 호출자가 지원되지 않는 프로세서 아키텍처에서 실행 중인 경우 루틴은 STATUS_NOT_IMPLEMENTED 반환합니다.
이 루틴은 스레드 프로파일링에 사용할 하드웨어 카운터를 운영 체제에 알려줍니다. 스레드 프로파일링을 사용하지 않도록 설정한 경우에만 이 루틴을 호출합니다. CounterArray 배열이 현재 사용 중인 하드웨어 카운터를 지정하면 루틴이 실패하고 STATUS_WMI_ALREADY_ENABLED 반환합니다.
애플리케이션 스레드는 스레드 프로파일링을 사용하여 로컬 프로세서의 PMU(성능 모니터링 단위)에 있는 하드웨어 카운터에서 성능 측정 집합을 가져올 수 있습니다. 운영 체제는 한 번에 하나의 프로파일링 애플리케이션만 지원합니다. 스레드 프로파일링 애플리케이션의 동시 인스턴스는 지원되지 않습니다. 스레드는 자체 스레드 프로파일링을 사용하도록 설정할 수 있지만 다른 스레드에는 사용할 수 없습니다.
스레드 프로파일링을 사용하도록 설정하면 운영 체제는 KeSetHardwareCounterConfiguration에 대한 마지막 호출에서 지정된 하드웨어 카운터를 사용합니다. 성공한 각 KeSetHardwareCounterConfiguration 호출은 이전 KeSetHardwareCounterConfiguration 호출에서 설정되었을 수 있는 모든 하드웨어 카운터 구성을 대체합니다.
Count = 0을 설정하여 빈 하드웨어 카운터 구성을 지정합니다. 이 구성은 스레드 프로파일링에 하드웨어 카운터를 효과적으로 사용하지 못하게 합니다. 시스템 시작 후 및 초기 KeSetHardwareCounterConfiguration 호출 전에 존재하는 기본 하드웨어 카운터 구성은 빈 구성입니다.
성공적인 KeSetHardwareCounterConfiguration 호출의 효과는 전역입니다. 모든 프로세스의 스레드를 프로파일하는 경우 프로파일러는 KeSetHardwareCounterConfiguration에 대한 마지막 호출에 의해 설정된 하드웨어 카운터 구성을 사용합니다. 다중 프로세서 시스템에서 KeSetHardwareCounterConfiguration 호출은 각 프로세서가 자체 하드웨어 카운터 집합을 사용하지만 시스템의 모든 프로세서에서 스레드 프로파일링에 사용할 하드웨어 카운터 구성을 설정합니다.
리소스 충돌을 방지하려면 카운터 리소스를 사용하는 모든 드라이버는 HalAllocateHardwareCounters 및 HalFreeHardwareCounters 루틴을 사용하여 이러한 리소스의 공유를 조정해야 합니다.
지정된 스레드에 대해 스레드 프로파일링을 사용할 수 있는지 확인하려면 QueryThreadProfiling 함수를 호출합니다 .
현재 스레드 프로파일링에 적용되는 하드웨어 카운터 구성에 대한 운영 체제를 쿼리하려면 KeQueryHardwareCounterConfiguration 루틴을 호출합니다.
가상화 소프트웨어는 일반적으로 하드웨어 성능 카운터를 가상화하지 않습니다. 따라서 하드웨어 성능 카운터는 가상 머신에서 사용할 수 없을 것입니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 7부터 사용할 수 있습니다. |
대상 플랫폼 | 유니버설 |
헤더 | ntddk.h(Ntddk.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |