Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Total time in GC counter #88699

Merged
merged 2 commits into from
Jul 14, 2023
Merged

Total time in GC counter #88699

merged 2 commits into from
Jul 14, 2023

Conversation

cshung
Copy link
Member

@cshung cshung commented Jul 11, 2023

Fixes #69324

This change exposes a new event counter for the total amount of time the process is paused by the GC.

Copy link
Member

@tommcdon tommcdon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thanks!

@davidfowl davidfowl requested a review from noahfalk July 11, 2023 22:54
Copy link
Member

@noahfalk noahfalk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suggested an adjusted name, otherwise LGTM!

Copy link
Member

@Maoni0 Maoni0 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@@ -115,6 +116,7 @@ protected override void OnEventCommand(EventCommandEventArgs command)
_committedCounter ??= new PollingCounter("gc-committed", this, () => ((double)GC.GetGCMemoryInfo().TotalCommittedBytes / 1_000_000)) { DisplayName = "GC Committed Bytes", DisplayUnits = "MB" };
_exceptionCounter ??= new IncrementingPollingCounter("exception-count", this, () => Exception.GetExceptionCount()) { DisplayName = "Exception Count", DisplayRateTimeScale = new TimeSpan(0, 0, 1) };
_gcTimeCounter ??= new PollingCounter("time-in-gc", this, () => GC.GetLastGCPercentTimeInGC()) { DisplayName = "% Time in GC since last GC", DisplayUnits = "%" };
_totalGcTimeCounter ??= new IncrementingPollingCounter("total-time-in-gc", this, () => GC.GetTotalPauseDuration().TotalMilliseconds) { DisplayName = "Time spent in GC", DisplayUnits = "ms" };
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is "Time spent in GC" the right description? I think of "pause duration" as being the time when nothing is making forward progress in the app other than GC work. Is it not that, and instead actually the total time spent doing any GC-related work, regardless of whether it's stop-the-world or not?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@cshung could you please change this as we discussed in the CR? the point @stephentoub brought up is exactly what I mentioned as well. this should be pause time, instead of "time" which is a vague term that doesn't say if it's the CPU time or pause time.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about this?

_totalGcPauseTimeCounter ??= new IncrementingPollingCounter("total-pause-time-in-gc", this, () => GC.GetTotalPauseDuration().TotalMilliseconds) { DisplayName = "Time paused by GC", DisplayUnits = "ms" };

@noahfalk

@ghost ghost locked as resolved and limited conversation to collaborators Aug 17, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

should expose the accumulative GC pause duration as a counter
7 participants