diff options
author | Takashi Kokubun <[email protected]> | 2022-11-17 12:59:59 -0800 |
---|---|---|
committer | GitHub <[email protected]> | 2022-11-17 12:59:59 -0800 |
commit | c80edc9f98f58826d6c6d4b5ee11a2886bbfb006 (patch) | |
tree | 9ecd1f170899f3fdacbd5c1dac3d29bf39023b3d | |
parent | 4b29eb17f2b01442198c81c5f62fcd3045aab659 (diff) |
YJIT: Add object shape count to stats (#6754)
Notes
Notes:
Merged-By: k0kubun <[email protected]>
-rw-r--r-- | yjit.c | 8 | ||||
-rw-r--r-- | yjit.rb | 6 |
2 files changed, 13 insertions, 1 deletions
@@ -1071,6 +1071,14 @@ rb_yjit_invalidate_all_method_lookup_assumptions(void) // method caches, so we do nothing here for now. } +// Number of object shapes, which might be useful for investigating YJIT exit reasons. +static VALUE +object_shape_count(rb_execution_context_t *ec, VALUE self) +{ + // next_shape_id starts from 0, so it's the same as the count + return ULONG2NUM((unsigned long)GET_VM()->next_shape_id); +} + // Primitives used by yjit.rb VALUE rb_yjit_stats_enabled_p(rb_execution_context_t *ec, VALUE self); VALUE rb_yjit_trace_exit_locations_enabled_p(rb_execution_context_t *ec, VALUE self); @@ -146,7 +146,10 @@ module RubyVM::YJIT # Return nil when option is not passed or unavailable. def self.runtime_stats stats = Primitive.rb_yjit_get_stats - return stats if stats.nil? || !Primitive.rb_yjit_stats_enabled_p + return stats if stats.nil? + + stats[:object_shape_count] = Primitive.object_shape_count + return stats unless Primitive.rb_yjit_stats_enabled_p side_exits = total_exit_count(stats) total_exits = side_exits + stats[:leave_interp_return] @@ -270,6 +273,7 @@ module RubyVM::YJIT $stderr.puts "freed_page_count: " + ("%10d" % stats[:freed_page_count]) $stderr.puts "code_gc_count: " + ("%10d" % stats[:code_gc_count]) $stderr.puts "num_gc_obj_refs: " + ("%10d" % stats[:num_gc_obj_refs]) + $stderr.puts "object_shape_count: " + ("%10d" % stats[:object_shape_count]) $stderr.puts "side_exit_count: " + ("%10d" % stats[:side_exit_count]) $stderr.puts "total_exit_count: " + ("%10d" % stats[:total_exit_count]) $stderr.puts "total_insns_count: " + ("%10d" % stats[:total_insns_count]) if stats.key?(:total_insns_count) |