From: normalperson@... Date: 2014-08-29T23:10:55+00:00 Subject: [ruby-core:64664] [ruby-trunk - Feature #10185] [PATCH] iseq: free untranslated iseq->iseq at compile Issue #10185 has been updated by Eric Wong. File iseq-iseq-diet.patch added Patch #2: Subject: [PATCH] iseq (rb_iseq_t): remove iseq->iseq field It is unnecessary and reduces transient malloc/free during compile. For "ruby -e exit", valgrind reports over 300K reduction in overall allocations. before: total heap usage: 49,622 allocs, 20,492 frees, 8,697,493 bytes allocated after: total heap usage: 48,935 allocs, 19,805 frees, 8,373,773 bytes allocated ---------------------------------------- Feature #10185: [PATCH] iseq: free untranslated iseq->iseq at compile https://bugs.ruby-lang.org/issues/10185#change-48562 * Author: Eric Wong * Status: Open * Priority: Normal * Assignee: Eric Wong * Category: core * Target version: current: 2.2.0 ---------------------------------------- running "ruby -rpp -e 'pp GC.stat'", a reduction in malloc usage is shown: before: :malloc_increase=>118784, :oldmalloc_increase=>1178736, after: :malloc_increase=>99832, :oldmalloc_increase=>1031976, (numbers from x86-64) * compile.c (rb_iseq_translate_threaded_code): free iseq->iseq (rb_vm_addr2insn): new function for debug (rb_iseq_untranslate_threaded_code): ditto * iseq.c (iseq_memsize): support iseq->iseq == 0 (rb_iseq_disasm): untranslate for dump (iseq_data_to_ary): ditto (rb_iseq_line_trace_each): ditto * vm_dump.c (rb_vmdebug_debug_print_pre): ditto I think we can remove iseq->iseq field from the rb_iseq_t structure in the future and use transient allocation for the debug functions. rb_iseq_untranslate_threaded_code is an uncommon code path for debug and not a performance issue in normal code. ---Files-------------------------------- iseq-tc-diet.patch (4.43 KB) iseq-iseq-diet.patch (9.54 KB) -- https://bugs.ruby-lang.org/