PresentMon icon indicating copy to clipboard operation
PresentMon copied to clipboard

GPU busy reporting issue in v0.6 beta

Open AlexUnwinder opened this issue 2 years ago • 6 comments

Tried new 0.6 beta and noticed some weird issue with GPU busy metric in this version. Under certain conditions new PresentMonService.exe seem to start reporting that GPU busy is always equal to present-to-present frametime even when it is not the case (e.g. if I limit framerate, i.e. make present-to-present time artificially higher). But no matter what, once the issue occurs reported GPU busy becomes equal to present-to-present frametime.

First I noticed it in my RTSS implementation of PresentMonService client and initially believed that it was my implementation specific issue, but later I confirmed that v0.6 overlay displays exactly the same wrong GPU busy in this case. Happily, in RTSS I have both console PresentMon based and PresentMonService based PresentMon integration implementations, and once I switch to console 1.9.2 based implementation, I see expected GPU busy readings. Downgrade from 0.6 to 0.5 beta also fixes GPU busy readings. The screenshot demonstrates native 0.6 overlay, which shows almost equal GPU busy and frametime values (roughly 16.7ms) and RTSS overlay next to it, which I configured to get GPU busy from console PresentMon 1.9.2 instead of PresentMonService and which shows expected GPU busy (12.2ms). The same scene with unlimited framerate gives around 80FPS, so 12.2ms is closer to correct and expected GPU busy value.

But I see no changes related to GPU busy monitoring implementation in 0.6 beta release notes, probably there were undocumented changes in this area?

image

AlexUnwinder avatar Oct 22 '23 15:10 AlexUnwinder

Also, I noticed that GPU busy in 0.6 is reported properly if I start application with active framerate limtier then start PresentMon streaming session after that, but once I toggle the framerate limtier off then on again on the fly - GPU busy becomes equal to frametime and stays in such state till restarting the application.

The following video demonstrates the issue:

  • Framerate limiter is set to 60 FPS. Both PresentMonService 0.6 based overlay (left) and console PresentMon 1.9.2 based overlay (right) report correct GPU busy (~5-7ms) and 16.7ms frametime. Unlimited framerate for this scene is floating in 150-200 FPS range, so it is what I expect to see for GPU busy.
  • Framerate limiter is disabled with hotkey, both PresentMonService 0.6 based overlay (left) and console PresentMon 1.9.2 based overlay (right) correctly reflect that.
  • Framerate limiter is reenabled and set to 60 FPS. PresentMonService 0.6 based overlay (left) starts reporting abnormal GPU busy (equal to frametime), while console PresentMon 1.9.2 based overlay (right) report correct GPU busy.

https://youtu.be/asQxANQb8vw

AlexUnwinder avatar Oct 22 '23 16:10 AlexUnwinder

Thanks for reporting the issue. We will start investigating what's going on. There were no changes on the service side with regards to GPU Busy but there must be a bad interaction happening. We'll update this thread with progress.

markgalvan-intel avatar Oct 23 '23 17:10 markgalvan-intel

Thanks! I peeked inside GpuTrace.cpp and see a change labeled "Add support for out-of-order monitored fence completion", which was committed after 1.9.2. Probably that's the reason.

AlexUnwinder avatar Oct 23 '23 19:10 AlexUnwinder

To verify that I tried to rebuild console 1.9.2 with the latest versions of GpuTrace.cpp/h and confirmed that it introduced the problem too.

AlexUnwinder avatar Oct 23 '23 19:10 AlexUnwinder

Oh wow!! Thanks for the detective work! Really appreciate it! We'll dive into the change more and see the best way to fix.

Again, thank you for information!

markgalvan-intel avatar Oct 23 '23 21:10 markgalvan-intel

I believe this is now fixed in the main branch.