[ruby-core:64895] [ruby-trunk - Feature #10187] minor iseq memory reductions

From: normalperson@...
Date: 2014-09-09 10:00:53 UTC
List: ruby-core #64895
Issue #10187 has been updated by Eric Wong.


 ko1@atdot.net wrote:
 > 
 > > +                if (newsize > INT_MAX) rb_memerror();
 > 
 > memerror?
 
 I took the hint from compile_data_alloc:
 
     if (size >= INT_MAX) rb_memerror();
     if (storage->pos + size > storage->size) {
 	unsigned int alloc_size = storage->size;
 
 	while (alloc_size < size) {
 	    if (alloc_size >= INT_MAX / 2) rb_memerror();
 	    alloc_size *= 2;
 
 Nobody hits the limit, so reusing rb_memerror keeps code size down.

----------------------------------------
Feature #10187: minor iseq memory reductions
https://bugs.ruby-lang.org/issues/10187#change-48754

* Author: Eric Wong
* Status: Open
* Priority: Low
* Assignee: Eric Wong
* Category: core
* Target version: current: 2.2.0
----------------------------------------
Pretty trivial and low impact, but I figure we might as well reduce
memory footprint a few kilobytes where we can and let the reductions
accumulate.  Feature #10185 has much bigger impact.

* [PATCH 1/2] iseq_inline_storage_entry: 24=>16 bytes on x86-64

We may tag the running_thread pointer to avoid making the "once" struct
bigger than "struct iseq_inline_cache_entry".

This only saves a small amount with "valgrind ruby -e exit"
before:
  total heap usage: 48,122 allocs, 19,248 frees, 8,110,149 bytes allocated
after:
  total heap usage: 48,122 allocs, 19,253 frees, 8,099,197 bytes allocated

* [PATCH 2/2] rb_call_info_t: 104=>96 bytes on x86-64

This keeps ci->flag and ci->aux.index consistent across 32-bit
and 64-bit platforms.

ci->flag: VM_CALL_* flags only use 9 bits, currently
ci->aux.index: 2 billion ivars per class should be enough for anybody

This saves around 50K allocations on "valgrind ruby -e exit"
before:
  total heap usage: 48,122 allocs, 19,253 frees, 8,099,197 bytes allocated
after:
  total heap usage: 48,069 allocs, 19,214 frees, 8,047,266 bytes allocated


---Files--------------------------------
inline_storage-16.patch (2.45 KB)
call_info-96.patch (8.24 KB)
call_info-96-v2.patch (8.01 KB)


-- 
https://bugs.ruby-lang.org/

In This Thread

Prev Next