Get-Process
GPU 사용량과 GPU 메모리를 얻으려고 노력 했지만 Get-CimInstance Win32_Process
둘 다 해당 정보를 제공할 수 없습니다.
Windows 작업 관리자에서는 GPU 메모리를 표시할 수 있습니다.
그렇다면 Powershell에서 이를 얻을 수 있는 방법이 있습니까?
답변1
Windows에서는성능 카운터이런 종류의 것을 추적합니다. 를 통해 powershell에서 값을 얻을 수 있습니다 Get-Counter
. GPU 및 드라이버에 따라 더 구체적인 카운터를 사용할 수 있지만 다음 예는 항상 사용할 수 있어야 합니다.
# Example to get GPU usage counters for a specific process:
$p = Get-Process dwm
((Get-Counter "\GPU Process Memory(pid_$($p.id)*)\Local Usage").CounterSamples | where CookedValue).CookedValue |
foreach {Write-Output "Process $($P.Name) GPU Process Memory $([math]::Round($_/1MB,2)) MB"}
((Get-Counter "\GPU Engine(pid_$($p.id)*engtype_3D)\Utilization Percentage").CounterSamples | where CookedValue).CookedValue |
foreach {Write-Output "Process $($P.Name) GPU Engine Usage $([math]::Round($_,2))%"}
# Outputs:
Process dwm GPU Process Memory 259.36 MB
Process dwm GPU Engine Usage 0.47%
# Example to get total GPU usage counters:
$GpuMemTotal = (((Get-Counter "\GPU Process Memory(*)\Local Usage").CounterSamples | where CookedValue).CookedValue | measure -sum).sum
Write-Output "Total GPU Process Memory Local Usage: $([math]::Round($GpuMemTotal/1MB,2)) MB"
$GpuUseTotal = (((Get-Counter "\GPU Engine(*engtype_3D)\Utilization Percentage").CounterSamples | where CookedValue).CookedValue | measure -sum).sum
Write-Output "Total GPU Engine Usage: $([math]::Round($GpuUseTotal,2))%"
# Outputs:
Total GPU Process Memory Local Usage: 511.36 MB
Total GPU Engine Usage: 0.77%
Get-Counter -ListSet 'GPU*'
를 실행 하고 Counter
거기에서 값을 가져옴 으로써 이러한 카운터 이름을 찾았습니다 . GPU 엔진 사용량은 4가지 유형으로 분류됩니다.
engtype_3D
engtype_VideoDecode
engtype_Copy
engtype_VideoProcessing
engtype_3D
내 시스템에서 사용되는 유일한 예이기 때문에 예를 요약하는 것뿐입니다 . 이 값은 모두 Windows 작업 관리자에 표시되는 내용과 일치하므로 충분히 정확해야 합니다.