Project

General

Profile

Actions

Feature #6199

closed

Organize gc.c a bit

Added by funny_falcon (Yura Sokolov) about 12 years ago. Updated over 11 years ago.

Status:
Closed
Target version:
[ruby-core:43592]

Description

  1. 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.
  2. Embed bitmap into struct heaps_slot
  3. 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

Updated by mame (Yusuke Endoh) about 12 years ago

  • Status changed from Open to Assigned

Updated by authorNari (Narihiro Nakamura) over 11 years ago

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!

Actions #3

Updated by funny_falcon (Yura Sokolov) over 11 years ago

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 :)

Actions #4

Updated by authorNari (Narihiro Nakamura) over 11 years ago

  • 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]
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0