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