Project

General

Profile

Actions

Feature #19730

closed

Remove transient heap

Added by peterzhu2118 (Peter Zhu) over 1 year ago. Updated over 1 year ago.

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

Description

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

I'm proposing to remove the transient heap because Variable Width Allocation now supports all the types that were on the transient heap.

Arrays, objects, hashes, and structs were on the transient heap. After Variable Width Allocation:

  • Arrays: allocated on the transient heap for very large arrays (>78 elements) or when elements are added and is too big for embedded.
  • Objects: allocated on the transient heap for very large objects (>78 instance variables) or when new instance variables are added and is too big for embedded. However, classes store an estimate of the number of instance variables objects will have, which means that objects are usually allocated with the correct capacity.
  • Hashes: no longer on the transient heap.
  • Structs: allocated on the transient heap for very large structs (>78 elements).

As such, the cases where allocations are on the transient heap become rarer and thus no longer provide the performance benefits it once did. This is supported by the benchmark results below, where we see no performance change with the transient heap removed. However, we do see around a 5-10% decrease in memory usage for most benchmarks.

--------------  -----------  ----------  ---------  ----------------------  ----------  ---------  -------------------------  ------------------------
bench           master (ms)  stddev (%)  RSS (MiB)  no transient heap (ms)  stddev (%)  RSS (MiB)  no transient heap 1st itr  master/no transient heap
activerecord    71.9         2.4         58.2       71.9                    2.2         53.4       1.00                       1.00
chunky_png      822.7        0.2         45.7       837.0                   0.2         47.4       0.98                       0.98
erubi_rails     20.5         13.5        95.1       20.3                    13.3        90.6       1.00                       1.01
hexapdf         2525.8       0.7         173.1      2546.9                  0.8         162.4      1.00                       0.99
liquid-c        66.2         0.8         38.4       65.9                    0.2         34.3       1.01                       1.00
liquid-compile  60.2         1.7         36.6       60.4                    1.4         32.6       1.02                       1.00
liquid-render   165.0        0.2         37.2       164.7                   0.2         33.1       1.01                       1.00
mail            138.4        0.1         50.4       136.6                   0.2         46.5       1.03                       1.01
optcarrot       5232.2       0.7         62.9       5151.2                  0.7         58.6       1.00                       1.02
psych-load      2082.8       0.1         37.1       2059.4                  0.1         32.2       1.01                       1.01
railsbench      2066.2       0.1         103.6      2051.7                  0.4         99.3       1.01                       1.01
ruby-lsp        6.4          6.5         45.8       6.4                     6.2         41.4       1.01                       0.99
sequel          73.0         1.1         40.5       73.1                    1.0         36.1       1.00                       1.00
--------------  -----------  ----------  ---------  ----------------------  ----------  ---------  -------------------------  ------------------------
Actions

Also available in: Atom PDF

Like1
Like0Like0Like0