On Sat, 31 May 2025 10:28:03 GMT, Markus Grönlund <mgron...@openjdk.org> wrote:

>> src/hotspot/share/jfr/periodic/sampling/jfrCPUTimeThreadSampler.cpp line 363:
>> 
>>> 361: }
>>> 362: 
>>> 363: void JfrCPUTimeThreadSampler::stackwalk_thread_in_native(JavaThread* 
>>> thread) {
>> 
>> I still don't understand what the purpose is for this routine.
>> 
>> I understand that this is to handle the situation where a thread is in state 
>> _thread_in_native, and cannot be handled immediately. But what problem are 
>> you trying to solve?
>> 
>> It seems there is some convoluted logic to only locate and process those 
>> requests that correspond to samples where the thread would be in native? But 
>> what purpose does that serve?
>> 
>> In JFR Cooperative Sampling, we allow the sampler thread to drain the entire 
>> sample request queue for a thread when it is found to be running in state 
>> _thread_in_native, on the premise that we cannot know or guarantee if or 
>> when a thread will return to the VM.
>> 
>> This seems to be some kind of semi-solution that does not solve anything:
>> 
>> 1. If you don't care about samples being processed and delivered swiftly, 
>> you don't even need the sampler thread to process "native" sample requests - 
>> do nothing and let the thread itself process everything on return from 
>> native (those native requests are still valid (the ljf is still valid).
>> 2. If you want swift delivery of samples, you drain the entire queue, not 
>> just some native samples.
>
> Secondly, if you only want to process native requests that are equal to or 
> correspond to a specific native site, you should only need to call 
> stacktrace.record() inner for one of the sample requests, not all, and reuse 
> the sid for all the requests.

You're right, I'll be just draining the whole queue.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/25302#discussion_r2117831282

Reply via email to