From: ko1@...
Date: 2014-09-09T01:47:52+00:00
Subject: [ruby-core:64885] [ruby-trunk - Feature #10185] [PATCH] iseq: free untranslated iseq->iseq at compile

Issue #10185 has been updated by Koichi Sasada.


Koichi Sasada wrote:
> - rename rb_iseq_untranslate_threaded_code to rb_iseq_decode_encoded_iseq() and fill iseq->iseq if iseq->iseq is not NULL.

decode is also strange.

const VALUE *rb_iseq_orignal_iseq() ?


----------------------------------------
Feature #10185: [PATCH] iseq: free untranslated iseq->iseq at compile
https://bugs.ruby-lang.org/issues/10185#change-48746

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