RFR: 8285416: [LOOM] Some nsk/jdi tests fail due to needing too many virtual threads [v2]
Chris Plummer
cjplummer at openjdk.org
Thu Dec 22 06:03:48 UTC 2022
On Tue, 20 Dec 2022 05:21:21 GMT, David Holmes <dholmes at openjdk.org> wrote:
>> Chris Plummer has updated the pull request incrementally with one additional commit since the last revision:
>>
>> Better comments.
>
> The JEP defines pinning as expected:
>> There are two scenarios in which a virtual thread cannot be unmounted during blocking operations because it is pinned to its carrier:
>>
>> When it executes code inside a synchronized block or method, or
>> When it executes a native method or a [foreign function](https://openjdk.java.net/jeps/424).
>>
>> Pinning does not make an application incorrect, but it might hinder its scalability. If a virtual thread performs a blocking operation such as I/O or BlockingQueue.take() while it is pinned, then its carrier and the underlying OS thread are blocked for the duration of the operation. Frequent pinning for long durations can harm the scalability of an application by capturing carriers.
>
> But then also says:
>> The scheduler does not compensate for pinning by expanding its parallelism.
>
> which contradicts what you quoted from Alan above - though I prefer that behaviour as the JEP's behaviour seems a design flaw to me.
@dholmes-ora I initially took the approach of making sure each test that was ever running short of carrier threads explicitly requested the minimum it needed. It resulted in quite a few changes, and I still had one test that was occasionally failing. Possibly I just came up one short in the carrier thread calculation. I abandoned it for this PR because it's much simpler. Here's a PR I just created for those changes in case you want to have a look at what was involved: #11762.
-------------
PR: https://git.openjdk.org/jdk/pull/11735
More information about the serviceability-dev
mailing list