RFR: 8342818: Implement CPU Time Profiling for JFR

Erik Gahlin egahlin at openjdk.org
Tue Oct 29 11:00:24 UTC 2024


On Sun, 22 Sep 2024 18:05:27 GMT, Johannes Bechberger <jbechberger at openjdk.org> wrote:

> > > The queue size is pre-computed to a large value that shouldn't lead to many dropped samples. I don't think that making the queue size settable is really useful. Please ignore, therefore, my mentioning of the queue size for throttling; the real throttling is by setting the interval. There is no other way that is also understandable by the user.
> > 
> > 
> > Recording files could be filled with CPU Time Sample events, flushing out important data, making the feature not usable for continuous profiling. We can't demand that users set a period every time they use JFR.
> 
> That is a valid point, so I see three options:
> 
> 1. The event is experimental and mostly meant for profiling. So we might just ignore it, till we see any problems and don't fix problems before they arise.
> 2. We replace `period` with a `rate` property which states the maximum number of emitted CPUTimeSample events per second. We then use the rate to compute the interval internally as `period=(number of cores) / rate`. This alleviates the issues with having to set the interval every time to not get swamped by events. As an example, the standard rate in the profiling configuration could be `500 events/second` which produces at maximum the same number of events as the current JFR sampler (assuming >= 5 cores). This rate would result in a period of 10ms on a 5 core machine and 20ms on a 10 core machine. This effectively allows us to use the feature in continuous profiling.
> 3. Combine the period setting and the rate setting. We take the rate as the maximum rate, calculating the period as `period=max(user-period, (number of cores) / rate)`. This has the advantage of effectively having a similar as the current JFR sampler, by adding a lower bound for the interval.
> 
> Personally, I would the 3. option, because it should be least surprising to the users of the existing JFR sampler. I would suggest calling the rate property `maxRate` and setting the following values in the configurations.
> 
> configuration	interval	maxRate
> default.jfc	20ms	500 events/second
> profile.jfc	10ms	1000 events/second

How does maxRate differs from today's "throttle" and why is an additional setting needed?

-------------

PR Comment: https://git.openjdk.org/jdk/pull/20752#issuecomment-2379682254


More information about the hotspot-dev mailing list