RFR: Off-by-one error in degen progress calculation

Roman Kennke rkennke at redhat.com
Thu Aug 30 18:26:27 UTC 2018


Ok

> Freeing up one region is enough, but it is not captured, because we have off-by-one error here:
> 
> diff -r cc8a1bd74e70 src/hotspot/share/gc/shenandoah/shenandoahMetrics.cpp
> --- a/src/hotspot/share/gc/shenandoah/shenandoahMetrics.cpp     Thu Aug 30 20:18:48 2018 +0200
> +++ b/src/hotspot/share/gc/shenandoah/shenandoahMetrics.cpp     Thu Aug 30 20:19:23 2018 +0200
> @@ -146,11 +146,11 @@
>    }
> 
>    // Freed up enough? Good! Declare victory.
>    size_t progress_actual   = (_used_before > _used_after) ? _used_before - _used_after : 0;
>    size_t progress_expected = ShenandoahHeapRegion::region_size_bytes();
> -  if (progress_actual > progress_expected) {
> +  if (progress_actual >= progress_expected) {
>      return true;
>    }
>    log_info(gc,ergo)("Not enough progress (" SIZE_FORMAT "M, need " SIZE_FORMAT "M) after %s",
>                      progress_actual / M, progress_expected / M, label);
> 
> 
> Testing: tier1_gc_shenandoah, eyeballing heavy degen workloads
> 
> Thanks,
> -Aleksey
> 




More information about the shenandoah-dev mailing list