Forum: Ruby-core [PATCH] iseq: free untranslated iseq->iseq at compile

18813f71506ebad74179bf8c5a136696?d=identicon&s=25 unknown (Guest)
on 2014-08-30 01:11
(Received via mailing list)
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.

total heap usage: 49,622 allocs, 20,492 frees, 8,697,493 bytes allocated

total heap usage: 48,935 allocs, 19,805 frees, 8,373,773 bytes allocated

Feature #10185: [PATCH] iseq: free untranslated iseq->iseq at compile

* 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:



(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.

iseq-tc-diet.patch (4.43 KB)
iseq-iseq-diet.patch (9.54 KB)
18813f71506ebad74179bf8c5a136696?d=identicon&s=25 Eric Wong (Guest)
on 2014-09-09 00:58
(Received via mailing list)
> ---Files--------------------------------
> iseq-tc-diet.patch (4.43 KB)
> iseq-iseq-diet.patch (9.54 KB)

Ping?  I hope to commit these two soon.
This topic is locked and can not be replied to.