Project

General

Profile

Actions

Feature #19571

closed

Add REMEMBERED_WB_UNPROTECTED_OBJECTS_LIMIT_RATIO to the GC

Added by peterzhu2118 (Peter Zhu) about 1 year ago. Updated 11 months ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:113088]

Description

GitHub PR: https://github.com/ruby/ruby/pull/7577

The proposed PR adds the environment variable RUBY_GC_HEAP_REMEMBERED_WB_UNPROTECTED_OBJECTS_LIMIT_RATIO which is used to calculate the remembered_wb_unprotected_objects_limit using a ratio of old_objects. This should improve performance by reducing major GC because, in a major GC, we mark all of the old objects, so we should have more uncollectible WB unprotected objects before starting a major GC. The default has been set to 0.01 (1% of old objects).

On one of Shopify's highest traffic Ruby apps, Storefront Renderer, we saw significant improvements after deploying this patch in production. In the graphs below, we have the tuned group which uses RUBY_GC_HEAP_REMEMBERED_WB_UNPROTECTED_OBJECTS_LIMIT_RATIO=0.01 (the default value), and an untuned group, which turns this feature off with RUBY_GC_HEAP_REMEMBERED_WB_UNPROTECTED_OBJECTS_LIMIT_RATIO=0. We see that the tuned group spends significantly less time in GC, on average 0.67x of the time compared to the untuned group and 0.49x for p99. We see this improvement in GC time translate to improvements in response times. The average response time is now 0.96x of the time compared to the untuned group and 0.86x for p99.


Files

Screenshot 2023-04-03 at 11.39.06 AM.png (554 KB) Screenshot 2023-04-03 at 11.39.06 AM.png peterzhu2118 (Peter Zhu), 04/03/2023 05:50 PM
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0