Bug #5946
closedRemove too early and unnecessary calls to heaps_increment
Description
Too early call in lazy_sweep
slows down sweep phase, cause while loop breaks on if (has_free_object) { ... return TRUE;}
.
Heap expand in gc_clear_mark_on_sweep_slots
unnecessary expands number of heaps, which slows down iterations in rb_objspace_call_finalizer
, and gc_marks
(cause we often need to binary search heap for pointer).
Testing suit: https://gist.github.com/1702301
Before:
$ sh siege.sh
Transaction rate: 114.71 trans/sec
Transaction rate: 117.84 trans/sec
Transaction rate: 121.62 trans/sec
$ sh siege.sh
Transaction rate: 118.72 trans/sec
Transaction rate: 120.32 trans/sec
Transaction rate: 121.12 trans/sec
After:
$ sh siege.sh
Transaction rate: 121.62 trans/sec
Transaction rate: 122.12 trans/sec
Transaction rate: 123.12 trans/sec
$ sh siege.sh
Transaction rate: 123.25 trans/sec
Transaction rate: 121.94 trans/sec
Transaction rate: 123.52 trans/sec
Updated by authorNari (Narihiro Nakamura) almost 13 years ago
- Status changed from Open to Rejected
Hi.
I reject it because lazy sweeping would spent much time if heap is full.
https://github.com/funny-falcon/ruby/commit/f07354e714e4ee6e4b1c6805d4dc111cb434f50a#L0R2314
I reject it. Please see r32894.
https://github.com/funny-falcon/ruby/commit/f07354e714e4ee6e4b1c6805d4dc111cb434f50a#L0R2629
Thanks :)
Updated by funny_falcon (Yura Sokolov) almost 13 years ago
Could you make a benchmark, please?
My benchmark shows 1% improvement when patch is applied to ruby-trunk and 6% after other patch, which I want to introduce today's evening/tomorow .
Updated by funny_falcon (Yura Sokolov) almost 13 years ago
I remade benchmark. It seems that I was wrong.
Excuse me.