Age | Commit message (Collapse) | Author |
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11953
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11932
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11932
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11932
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11932
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11932
|
|
If there's a crash after rb_gc_obj_free, it's hard to debug because the
flags have been cleared out already.
Notes:
Merged: https://github.com/ruby/ruby/pull/11925
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11904
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11870
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11857
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11857
|
|
Shared GC might not use the private functions in gc/gc.h, so they will
show up as warnings for unused functions. This commit disables
-Wunused-function for these functions when building as shared GC.
Notes:
Merged: https://github.com/ruby/ruby/pull/11808
|
|
Now that we've inlined the eden_heap into the size_pool, we should
rename the size_pool to heap. So that Ruby contains multiple heaps, with
different sized objects.
The term heap as a collection of memory pages is more in memory
management nomenclature, whereas size_pool was a name chosen out of
necessity during the development of the Variable Width Allocation
features of Ruby.
The concept of size pools was introduced in order to facilitate
different sized objects (other than the default 40 bytes). They wrapped
the eden heap and the tomb heap, and some related state, and provided a
reasonably simple way of duplicating all related concerns, to provide
multiple pools that all shared the same structure but held different
objects.
Since then various changes have happend in Ruby's memory layout:
* The concept of tomb heaps has been replaced by a global free pages list,
with each page having it's slot size reconfigured at the point when it
is resurrected
* the eden heap has been inlined into the size pool itself, so that now
the size pool directly controls the free_pages list, the sweeping
page, the compaction cursor and the other state that was previously
being managed by the eden heap.
Now that there is no need for a heap wrapper, we should refer to the
collection of pages containing Ruby objects as a heap again rather than
a size pool
Notes:
Merged: https://github.com/ruby/ruby/pull/11771
|
|
After the individual tomb_heaps were removed in favour of a global list
of empty pages, the only instance of rb_heap_t left is the eden_heap
within each size pool.
This PR inlines the heap fields directly into rb_size_pool_t to remove
indirection and remove the SIZE_POOL_EDEN_HEAP macro
Notes:
Merged: https://github.com/ruby/ruby/pull/11771
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11778
|
|
the mark_function_data callback was moved from the ractor to the VM.
Notes:
Merged: https://github.com/ruby/ruby/pull/11770
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11764
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11740
|
|
Instead of calling rb_gc_event_hook inside of rb_gc_obj_free, it should
be up to the GC implementation to call the event.
Notes:
Merged: https://github.com/ruby/ruby/pull/11742
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11739
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11654
|
|
Otherwise trying to deref the pointer can cause an ASAN crash, even
though the only reason we're dereferencing it is so that we can assert
on it.
Notes:
Merged: https://github.com/ruby/ruby/pull/11660
|
|
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11646
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11638
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11637
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11639
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11639
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11639
|
|
Fixes the following warning on WebAssembly:
gc/default.c:7306:1: warning: unused function 'desired_compaction_pages_i' [-Wunused-function]
desired_compaction_pages_i(struct heap_page *page, void *data)
Notes:
Merged: https://github.com/ruby/ruby/pull/11607
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11623
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11623
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11623
|
|
If we are during heap traversal, we don't want to call rb_gc_impl_mark_weak.
This commit moves that check from rb_gc_impl_mark_weak to rb_gc_mark_weak.
Notes:
Merged: https://github.com/ruby/ruby/pull/11606
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11606
|
|
|
|
|
|
This adds keys heap_empty_pages and heap_allocatable_slots to GC.stat.
|
|
[Bug #20710]
This commit introduces moves allocatable slots and empty pages from per
size pool to global. This allows size pools to grow globally and allows
empty pages to move between size pools.
For the benchmark in [Bug #20710], this signficantly improves performance:
Before:
new_env 2.563 (± 0.0%) i/s - 26.000 in 10.226703s
new_rails_env 0.293 (± 0.0%) i/s - 3.000 in 10.318960s
After:
new_env 3.781 (±26.4%) i/s - 37.000 in 10.302374s
new_rails_env 0.911 (± 0.0%) i/s - 9.000 in 10.049337s
In the headline benchmarks on yjit-bench, we see the performance is
basically on-par with before, with ruby-lsp being signficantly faster
and activerecord and erubi-rails being slightly slower:
-------------- ----------- ---------- ----------- ---------- -------------- -------------
bench master (ms) stddev (%) branch (ms) stddev (%) branch 1st itr master/branch
activerecord 452.2 0.3 479.4 0.4 0.96 0.94
chunky-png 1157.0 0.4 1172.8 0.1 0.99 0.99
erubi-rails 905.4 0.3 967.2 0.4 0.94 0.94
hexapdf 3566.6 0.6 3553.2 0.3 1.03 1.00
liquid-c 88.9 0.9 89.0 1.3 0.98 1.00
liquid-compile 93.4 0.9 89.9 3.5 1.01 1.04
liquid-render 224.1 0.7 227.1 0.5 1.00 0.99
lobsters 1052.0 3.5 1067.4 2.1 0.99 0.99
mail 197.1 0.4 196.5 0.5 0.98 1.00
psych-load 2960.3 0.1 2988.4 0.8 1.00 0.99
railsbench 2252.6 0.4 2255.9 0.5 0.99 1.00
rubocop 262.7 1.4 270.1 1.8 1.02 0.97
ruby-lsp 275.4 0.5 242.0 0.3 0.97 1.14
sequel 98.4 0.7 98.3 0.6 1.01 1.00
-------------- ----------- ---------- ----------- ---------- -------------- -------------
|
|
|
|
|
|
|
|
|
|
|
|
This commit removes the need for the GC implementation to implement heap
walking and instead Ruby will implement it.
Notes:
Merged: https://github.com/ruby/ruby/pull/11511
|
|
This commit moves checks to RB_SPECIAL_CONST_P out of the GC implmentation
and into gc.c.
Notes:
Merged: https://github.com/ruby/ruby/pull/11478
|
|
The counter for total allocated objects may not be accurate when there are
multiple Ractors since it is not atomic so there could be race conditions
when it is incremented.
Notes:
Merged: https://github.com/ruby/ruby/pull/11462
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11462
|
|
When we move an object in compaction, we do not decrement the total_freed_objects
of the original size pool or increment the total_allocated_objects of the
new size pool. This means that when this object dies, it will appear as
if the object was never freed from the original size pool and the new
size pool will have one more free than expected. This means that the new
size pool could appear to have a negative number of live objects.
Notes:
Merged: https://github.com/ruby/ruby/pull/11444
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/11444
|