RFR: 8280139: Report more detailed statistics about task stealing in task queue stats [v2]
Kim Barrett
kbarrett at openjdk.java.net
Thu Jan 20 21:42:52 UTC 2022
On Thu, 20 Jan 2022 11:11:22 GMT, Thomas Schatzl <tschatzl at openjdk.org> wrote:
>> Hi all,
>>
>> can I have reviews that improves task queue statistics?
>>
>> This is a step to see problems with task queue in general and measure future task stealing improvements in GC; particularly contention on steal information has shown to be correlated to performance, so information about basic occurrences during stealing (how many empty, how many contended, how many contended in a row, max contended accesses in a row) in the task queue is very interesting for further performance work.
>>
>> Old output of `gc+tasks+stats=trace` after compiling in these statistics:
>>
>> thr qpush qpop qpop-s qattempt qsteal opush omax
>> --- ---------- ---------- ---------- ---------- ---------- ---------- ----------
>> 0 3777115 3776816 3872 17434 9630 0 0
>>
>> And new:
>>
>> thr push pop pop-slow st-attempt st-empty st-ctdd st-success st-ctdd-max st-biasdrop ovflw-push ovflw-max
>> --- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
>> 0 4616264 4616218 3608 12945 1 1650 11294 5 9405 0 0
>> [...]
>>
>> The first four columns stayed the same, then the `qsteal` has been split up into the various steal results (empty/contended/success). `st_ctdd_max` gives the maximum amount of contended steal attempts in a row. `st_biasdrop` shows how many times the steal bias has been dropped (reset).
>> `ovflw-push` and `ovfl-max` are the same as before, just renamed a bit to use the available space.
>>
>> There has been no intention to change anything about the algorithm, so there is no need for perf testing (I can see). Later changes will do that.
>>
>> Thanks,
>> Thomas
>
> Thomas Schatzl has updated the pull request incrementally with two additional commits since the last revision:
>
> - Some further cleanup
> - kbarrett review
Marked as reviewed by kbarrett (Reviewer).
src/hotspot/share/gc/shared/taskqueue.inline.hpp line 208:
> 206: // (4) Thief will discard the read value, because its cmpxchg of age will fail.
> 207: template<class E, MEMFLAGS F, unsigned int N>
> 208: typename GenericTaskQueue<E, F, N>::PopResult GenericTaskQueue<E, F, N>::pop_global(E& t) {
These are places that are just made for trailing return types, putting the return type in the scope of the function. That's still in the "undecided features" list in the style guide though.
template<class E, MEMFLAGS F, unsigned int N>
auto GenericTaskQueue<E, F, N>::pop_global(E& t) -> PopResult { ... }
-------------
PR: https://git.openjdk.java.net/jdk/pull/7143
More information about the hotspot-gc-dev
mailing list