Feature #6199
closed
Added by funny_falcon (Yura Sokolov) over 12 years ago.
Updated about 12 years ago.
Description
- Move immutable fields from struct heaps_slot and struct sorted_heaps_slot into struct heaps_header.
One exception is limit field, but it starts to be mutable just before freeing a heaps_header, so that it is not big issue.
- Embed bitmap into struct heaps_slot
- Change
free_unused_heaps
to free_unused_heap
, so that it will not be called on every GC round, but only when page should be freed.
While free_unused_heaps
does not consume much time (it is invisible in profiler), but regular application has no need in calling this function every time.
https://github.com/ruby/ruby/pull/108
https://github.com/ruby/ruby/pull/108.patch
- Status changed from Open to Assigned
Hi,
I'm sorry for late reply. I've just reviewed these.
I'm not sure that 3. improves a performance, because it's using binary search each one slot.
I don't like 2.
I will accept 1.
Thank you!
I'm not sure that 3. improves a performance, because it's using binary search each one slot.
Well, free_unused_heaps
runs on each GC and does linear scan, and free_unused_heap
runs only on heap's freeing.
Heap freeing occurs rare in typical long running application, so that it is possibly that linear scan for each GC is overkill.
But I could not prove it :)
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
This issue was solved with changeset r37613.
Yura, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
- gc.c: move immutable fields from struct heaps_slot and struct
sorted_heaps_slot into struct heaps_header.
Based on a patch from Sokolov Yura [Feature #6199][ruby-core:43592]
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0