summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compile.c1
-rw-r--r--yjit.h1
-rw-r--r--yjit.rb1
-rw-r--r--yjit/src/stats.rs7
4 files changed, 9 insertions, 1 deletions
diff --git a/compile.c b/compile.c
index 5516f64f54..ab041e6e89 100644
--- a/compile.c
+++ b/compile.c
@@ -999,6 +999,7 @@ rb_iseq_translate_threaded_code(rb_iseq_t *iseq)
#if USE_YJIT
rb_yjit_live_iseq_count++;
+ rb_yjit_iseq_alloc_count++;
#endif
return COMPILE_OK;
diff --git a/yjit.h b/yjit.h
index 2f5317ad97..dde9f750aa 100644
--- a/yjit.h
+++ b/yjit.h
@@ -28,6 +28,7 @@
extern uint64_t rb_yjit_call_threshold;
extern uint64_t rb_yjit_cold_threshold;
extern uint64_t rb_yjit_live_iseq_count;
+extern uint64_t rb_yjit_iseq_alloc_count;
extern bool rb_yjit_enabled_p;
void rb_yjit_incr_counter(const char *counter_name);
void rb_yjit_invalidate_all_method_lookup_assumptions(void);
diff --git a/yjit.rb b/yjit.rb
index 50cb248398..eedd00c358 100644
--- a/yjit.rb
+++ b/yjit.rb
@@ -346,6 +346,7 @@ module RubyVM::YJIT
out.puts "bindings_set: " + format_number(13, stats[:binding_set])
out.puts "compilation_failure: " + format_number(13, compilation_failure) if compilation_failure != 0
out.puts "live_iseq_count: " + format_number(13, stats[:live_iseq_count])
+ out.puts "iseq_alloc_count: " + format_number(13, stats[:iseq_alloc_count])
out.puts "compiled_iseq_entry: " + format_number(13, stats[:compiled_iseq_entry])
out.puts "cold_iseq_entry: " + format_number_pct(13, stats[:cold_iseq_entry], stats[:compiled_iseq_entry] + stats[:cold_iseq_entry])
out.puts "compiled_iseq_count: " + format_number(13, stats[:compiled_iseq_count])
diff --git a/yjit/src/stats.rs b/yjit/src/stats.rs
index 621854d487..fb4ed03bd5 100644
--- a/yjit/src/stats.rs
+++ b/yjit/src/stats.rs
@@ -15,10 +15,14 @@ use crate::cruby::*;
use crate::options::*;
use crate::yjit::yjit_enabled_p;
-/// A running total of how many ISeqs are in the system.
+/// Running total of how many ISeqs are in the system.
#[no_mangle]
pub static mut rb_yjit_live_iseq_count: u64 = 0;
+/// Monotonically increasing total of how many ISEQs were allocated
+#[no_mangle]
+pub static mut rb_yjit_iseq_alloc_count: u64 = 0;
+
/// A middleware to count Rust-allocated bytes as yjit_alloc_size.
#[global_allocator]
static GLOBAL_ALLOCATOR: StatsAlloc = StatsAlloc { alloc_size: AtomicUsize::new(0) };
@@ -748,6 +752,7 @@ fn rb_yjit_gen_stats_dict(context: bool) -> VALUE {
hash_aset_usize!(hash, "vm_insns_count", rb_vm_insns_count as usize);
hash_aset_usize!(hash, "live_iseq_count", rb_yjit_live_iseq_count as usize);
+ hash_aset_usize!(hash, "iseq_alloc_count", rb_yjit_iseq_alloc_count as usize);
}
// If we're not generating stats, put only default counters