RFR (S): Proper divide-n-conquer in array handling
Roman Kennke
rkennke at redhat.com
Fri Oct 28 17:39:25 UTC 2016
I like it. Please go.
Roman
Am Freitag, den 28.10.2016, 18:46 +0200 schrieb Aleksey Shipilev:
> Hi,
>
> It bugs me our GC workers are following the odd HS tradition of
> forking
> out the piece of work, and pushing the rest of the work back on
> queue.
> This effectively serializes the balancing work: with N workers, there
> should be N consecutive cutout-submit-steal interactions. Worse, this
> only gets amortized if the chunk work takes more time than queue
> stealing (which is a dangerous assumption to make).
>
> In fork/join world, we know how to seed the work queues more
> efficiently: you divide in half, and let others steal the largest
> half.
> Then you keep dividing until you hit the leaf task, which you can
> then
> execute. The upside of this is that stealers always get "larger"
> chunks
> of work, which they break down for themselves.
>
> This is what this patch does:
> http://cr.openjdk.java.net/~shade/shenandoah/concmark-proper-dnc/web
> rev.01/
> (also did a few renames and comments)
>
> There are no clear performance improvements on our workloads, because
> mark costs are completely dominated by cache misses on "marked"
> bitset.
> But there is a chicken-and-egg problem: optimizing for faster marks
> would trim down the chunk work size, and run into task disbalance
> because of this issue. So I prefer to nail this down before it hits
> us.
>
> Testing: hs_gc_sheneandoah, SPECjvm2008, some microbenchmarks
>
> Thanks,
> -Aleksey
>
>
More information about the shenandoah-dev
mailing list