Project

General

Profile

Actions

Bug #5946

closed

Remove too early and unnecessary calls to heaps_increment

Added by funny_falcon (Yura Sokolov) over 10 years ago. Updated over 10 years ago.

Status:
Rejected
Priority:
Normal
Target version:
ruby -v:
ruby 2.0.0dev (2012-01-29 trunk 34394) [i686-linux]
Backport:
[ruby-core:42258]

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

https://github.com/ruby/ruby/pull/89

Updated by authorNari (Narihiro Nakamura) over 10 years ago

  • Status changed from Open to Rejected

Updated by funny_falcon (Yura Sokolov) over 10 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) over 10 years ago

I remade benchmark. It seems that I was wrong.

Excuse me.

Actions

Also available in: Atom PDF