From: normalperson@... Date: 2014-09-19T17:58:51+00:00 Subject: [ruby-core:65127] [ruby-trunk - Feature #10256] [PATCH] reduce rb_call_info_t 96 => 88 bytes on 64-bit Issue #10256 has been updated by Eric Wong. File 0001-make-rb_method_definition_t-smaller-via-rb_method_cf.patch added Similar patch for rb_method_definition_t, tested on a different system due to power outages. Not much change, but minor improvements probably due to better locality (method definitions are the same size as method entries, now). http://80x24.org/bmlog-20140919-090128.6921 rb_method_definition_t is now 32 bytes (from 64) on a 64-bit system and may be cache-aligned in the future to occupy half a 64-byte cache line. Saves around 20K of allocations at startup with "valgrind ruby -e exit" before: total heap usage: 49,445 allocs, 20,027 frees, 8,492,836 bytes allocated after: total heap usage: 49,445 allocs, 20,040 frees, 8,472,372 bytes allocated ---------------------------------------- Feature #10256: [PATCH] reduce rb_call_info_t 96 => 88 bytes on 64-bit https://bugs.ruby-lang.org/issues/10256#change-48978 * Author: Eric Wong * Status: Open * Priority: Normal * Assignee: Koichi Sasada * Category: core * Target version: current: 2.2.0 ---------------------------------------- Instead of using an 8-byte function pointer, use a small index (may be <=1 byte, but currently 2 bytes for alignment) as array offset and pack it next to flags (where only 9 bits are used). Unfortunately, we cannot rely on C99, yet, so maintenance might be a little uglier (but I think our test suite is good enough to cover). Every word saved on rb_call_info_t seems to result in over 50K in startup savings ("valgrind ruby -e exit"). before: total heap usage: 49,111 allocs, 19,776 frees, 8,444,054 bytes allocated after: total heap usage: 49,057 allocs, 19,721 frees, 8,390,916 bytes allocated Performance does not seem bad on Xeon E3-1230 v3 (8MB cache), (minor +/- across the board): http://80x24.org/bmlog-20140918-035740.9493 ---Files-------------------------------- 0001-rb_call_info_t-reduce-from-96-88-bytes-on-64-bit.patch (10.5 KB) 0001-make-rb_method_definition_t-smaller-via-rb_method_cf.patch (5.4 KB) -- https://bugs.ruby-lang.org/