diff options
author | k0kubun <k0kubun@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-03-03 04:07:02 +0000 |
---|---|---|
committer | k0kubun <k0kubun@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-03-03 04:07:02 +0000 |
commit | b7aae52851c8debe2792f44d77e7f6546efdf57a (patch) | |
tree | cf08d9c29ff7ec0cb4c48918398f54c01aaef068 /vm.c | |
parent | 8032b00f8e43be6e34f93005a17e26bc6d89f1c1 (diff) | |
download | ruby-b7aae52851c8debe2792f44d77e7f6546efdf57a.tar.gz |
vm.c: add mjit_enable_p flag
to count up total calls properly. Some places (especially CALL_METHOD)
invoke mjit_exec twice for one method call. It would be problematic when
debugging, or possibly it would result in a wrong profiling result.
This commit doesn't have impact for performance:
* Optcarrot benchmark
** before
fps: 59.37757770848619
fps: 56.49998488958699
fps: 59.07900362739362
fps: 58.924749807695996
fps: 57.667905665594894
fps: 57.540021018385254
fps: 59.5518055679647
fps: 55.93831555148311
fps: 57.82685112863262
fps: 59.22391754481736
checksum: 59662
** after
fps: 58.461881158098194
fps: 59.32685183081354
fps: 54.11334310279802
fps: 59.2281560439788
fps: 58.60495705318312
fps: 55.696478648491045
fps: 58.49003452654724
fps: 58.387771929393224
fps: 59.24156772816439
fps: 56.68804731968107
checksum: 59662
* Discourse
Your Results: (note for timings- percentile is first, duration is second in millisecs)
** before (without JIT)
categories_admin:
50: 16
75: 17
90: 24
99: 37
home_admin:
50: 20
75: 20
90: 24
99: 42
topic_admin:
50: 16
75: 16
90: 18
99: 28
categories:
50: 36
75: 37
90: 45
99: 68
home:
50: 38
75: 40
90: 53
99: 92
topic:
50: 14
75: 15
90: 17
99: 26
** after (without JIT)
categories_admin:
50: 16
75: 16
90: 24
99: 36
home_admin:
50: 19
75: 20
90: 23
99: 41
topic_admin:
50: 16
75: 16
90: 19
99: 33
categories:
50: 35
75: 36
90: 44
99: 61
home:
50: 38
75: 40
90: 52
99: 101
topic:
50: 14
75: 15
90: 15
99: 24
** before (with JIT)
categories_admin:
50: 19
75: 23
90: 29
99: 44
home_admin:
50: 24
75: 26
90: 32
99: 46
topic_admin:
50: 20
75: 22
90: 27
99: 44
categories:
50: 41
75: 43
90: 51
99: 66
home:
50: 46
75: 49
90: 56
99: 68
topic:
50: 18
75: 19
90: 22
99: 31
** after (with JIT)
categories_admin:
50: 18
75: 21
90: 28
99: 42
home_admin:
50: 23
75: 25
90: 31
99: 51
topic_admin:
50: 19
75: 20
90: 24
99: 31
categories:
50: 41
75: 44
90: 52
99: 69
home:
50: 45
75: 48
90: 61
99: 88
topic:
50: 19
75: 20
90: 24
99: 33
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62641 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm.c')
-rw-r--r-- | vm.c | 18 |
1 files changed, 11 insertions, 7 deletions
@@ -1006,7 +1006,7 @@ invoke_block(rb_execution_context_t *ec, const rb_iseq_t *iseq, VALUE self, cons ec->cfp->sp + arg_size, iseq->body->local_table_size - arg_size, iseq->body->stack_max); - return vm_exec(ec); + return vm_exec(ec, TRUE); } static VALUE @@ -1027,7 +1027,7 @@ invoke_bmethod(rb_execution_context_t *ec, const rb_iseq_t *iseq, VALUE self, co RUBY_DTRACE_METHOD_ENTRY_HOOK(ec, me->owner, me->def->original_id); EXEC_EVENT_HOOK(ec, RUBY_EVENT_CALL, self, me->def->original_id, me->called_id, me->owner, Qnil); VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_FINISH); - ret = vm_exec(ec); + ret = vm_exec(ec, TRUE); EXEC_EVENT_HOOK(ec, RUBY_EVENT_RETURN, self, me->def->original_id, me->called_id, me->owner, ret); RUBY_DTRACE_METHOD_RETURN_HOOK(ec, me->owner, me->def->original_id); return ret; @@ -1788,13 +1788,16 @@ hook_before_rewind(rb_execution_context_t *ec, const rb_control_frame_t *cfp, in VALUE *ep; // ep void *code; // }; + + If mjit_exec is already called before calling vm_exec, `mjit_enable_p` should + be FALSE to avoid calling `mjit_exec` twice. */ MJIT_FUNC_EXPORTED VALUE -vm_exec(rb_execution_context_t *ec) +vm_exec(rb_execution_context_t *ec, int mjit_enable_p) { enum ruby_tag_type state; - VALUE result; + VALUE result = Qundef; VALUE initial = 0; struct vm_throw_data *err; @@ -1802,7 +1805,8 @@ vm_exec(rb_execution_context_t *ec) _tag.retval = Qnil; if ((state = EC_EXEC_TAG()) == TAG_NONE) { - result = mjit_exec(ec); + if (mjit_enable_p) + result = mjit_exec(ec); vm_loop_start: if (result == Qundef) result = vm_exec_core(ec, initial); @@ -2047,7 +2051,7 @@ rb_iseq_eval(const rb_iseq_t *iseq) rb_execution_context_t *ec = GET_EC(); VALUE val; vm_set_top_stack(ec, iseq); - val = vm_exec(ec); + val = vm_exec(ec, TRUE); return val; } @@ -2058,7 +2062,7 @@ rb_iseq_eval_main(const rb_iseq_t *iseq) VALUE val; vm_set_main_stack(ec, iseq); - val = vm_exec(ec); + val = vm_exec(ec, TRUE); return val; } |