diff options
author | Alan Wu <XrXr@users.noreply.github.com> | 2021-04-06 16:28:41 -0400 |
---|---|---|
committer | Alan Wu <XrXr@users.noreply.github.com> | 2021-10-20 18:19:33 -0400 |
commit | 7f4b9e8e6103c039f1f73e6d51f956f8c662b49a (patch) | |
tree | 144689dacec94a5ca7d7dbee9aee0c013ae37f93 /yjit_iface.c | |
parent | 42af04efee38de4435a04ea0487fce483db10dee (diff) |
YJIT: make ratio_in_yjit more accurate
Don't count instructions that take exit to the interpreter.
Diffstat (limited to 'yjit_iface.c')
-rw-r--r-- | yjit_iface.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/yjit_iface.c b/yjit_iface.c index 989f7f9a56..32b9c52da5 100644 --- a/yjit_iface.c +++ b/yjit_iface.c @@ -791,9 +791,17 @@ print_insn_count_buffer(const struct insn_count *buffer, int how_many, int left_ total_exit_count += buffer[i].count; } + // Number of instructions that finish executing in YJIT. See :count-placement:. + int64_t retired_in_yjit = yjit_runtime_counters.exec_instruction - total_exit_count; + // Average length of instruction sequences executed by YJIT double avg_len_in_yjit = (double)yjit_runtime_counters.exec_instruction / total_exit_count; + // Proportion of instructions that retire in YJIT + double total_insns_count = retired_in_yjit + vm_insns_count; + double ratio = retired_in_yjit / total_insns_count; + + fprintf(stderr, "ratio_in_yjit: %9.1f%%\n", ratio * 100); fprintf(stderr, "avg_len_in_yjit: %10.1f\n", avg_len_in_yjit); fprintf(stderr, "total_exit_count: %10ld\n", total_exit_count); fprintf(stderr, "most frequent exit op:\n"); @@ -817,15 +825,11 @@ print_yjit_stats(void) const struct insn_count *sorted_exit_ops = sort_insn_count_array(exit_op_count); - double total_insns_count = vm_insns_count + yjit_runtime_counters.exec_instruction; - double ratio = yjit_runtime_counters.exec_instruction / total_insns_count; - fprintf(stderr, "compiled_iseq_count: %10" PRId64 "\n", rb_compiled_iseq_count); fprintf(stderr, "inline_code_size: %10d\n", cb->write_pos); fprintf(stderr, "outlined_code_size: %10d\n", ocb->write_pos); fprintf(stderr, "vm_insns_count: %10" PRId64 "\n", vm_insns_count); fprintf(stderr, "yjit_exec_insns_count: %10" PRId64 "\n", yjit_runtime_counters.exec_instruction); - fprintf(stderr, "ratio_in_yjit: %9.1f%%\n", ratio * 100); print_insn_count_buffer(sorted_exit_ops, 10, 4); } #endif // if RUBY_DEBUG |