diff options
Diffstat (limited to 'yjit')
-rw-r--r-- | yjit/bindgen/src/main.rs | 4 | ||||
-rw-r--r-- | yjit/src/cruby_bindings.inc.rs | 2 | ||||
-rw-r--r-- | yjit/src/stats.rs | 14 |
3 files changed, 13 insertions, 7 deletions
diff --git a/yjit/bindgen/src/main.rs b/yjit/bindgen/src/main.rs index b6f4c4b7c4..e8f88cef64 100644 --- a/yjit/bindgen/src/main.rs +++ b/yjit/bindgen/src/main.rs @@ -317,7 +317,6 @@ fn main() { .allowlist_function("rb_yjit_get_page_size") .allowlist_function("rb_yjit_iseq_builtin_attrs") .allowlist_function("rb_yjit_iseq_inspect") - .allowlist_function("rb_yjit_vm_insns_count") .allowlist_function("rb_yjit_builtin_function") .allowlist_function("rb_set_cfp_(pc|sp)") .allowlist_function("rb_yjit_multi_ractor_p") @@ -381,6 +380,9 @@ fn main() { .allowlist_function("rb_ivar_get") .allowlist_function("rb_mod_name") + // From internal/vm.h + .allowlist_var("rb_vm_insns_count") + // From include/ruby/internal/intern/vm.h .allowlist_function("rb_get_alloc_func") diff --git a/yjit/src/cruby_bindings.inc.rs b/yjit/src/cruby_bindings.inc.rs index b8d115b488..4213a20452 100644 --- a/yjit/src/cruby_bindings.inc.rs +++ b/yjit/src/cruby_bindings.inc.rs @@ -1060,6 +1060,7 @@ extern "C" { elts: *const VALUE, ) -> VALUE; pub fn rb_vm_top_self() -> VALUE; + pub static mut rb_vm_insns_count: u64; pub fn rb_method_entry_at(obj: VALUE, id: ID) -> *const rb_method_entry_t; pub fn rb_callable_method_entry(klass: VALUE, id: ID) -> *const rb_callable_method_entry_t; pub fn rb_callable_method_entry_or_negative( @@ -1139,7 +1140,6 @@ extern "C" { pub fn rb_jit_cont_each_iseq(callback: rb_iseq_callback, data: *mut ::std::os::raw::c_void); pub fn rb_yjit_mark_writable(mem_block: *mut ::std::os::raw::c_void, mem_size: u32) -> bool; pub fn rb_yjit_mark_executable(mem_block: *mut ::std::os::raw::c_void, mem_size: u32); - pub fn rb_yjit_vm_insns_count() -> u64; pub fn rb_yjit_mark_unused(mem_block: *mut ::std::os::raw::c_void, mem_size: u32) -> bool; pub fn rb_yjit_array_len(a: VALUE) -> ::std::os::raw::c_long; pub fn rb_yjit_icache_invalidate( diff --git a/yjit/src/stats.rs b/yjit/src/stats.rs index d04f2836ef..b737153062 100644 --- a/yjit/src/stats.rs +++ b/yjit/src/stats.rs @@ -789,7 +789,9 @@ fn rb_yjit_gen_stats_dict(key: VALUE) -> VALUE { set_stat_usize!(hash, "context_cache_bytes", crate::core::CTX_ENCODE_CACHE_BYTES + crate::core::CTX_DECODE_CACHE_BYTES); // VM instructions count - set_stat_usize!(hash, "vm_insns_count", rb_yjit_vm_insns_count() as usize); + if rb_vm_insns_count > 0 { + set_stat_usize!(hash, "vm_insns_count", rb_vm_insns_count as usize); + } set_stat_usize!(hash, "live_iseq_count", rb_yjit_live_iseq_count as usize); set_stat_usize!(hash, "iseq_alloc_count", rb_yjit_iseq_alloc_count as usize); @@ -859,11 +861,13 @@ fn rb_yjit_gen_stats_dict(key: VALUE) -> VALUE { set_stat_double!(hash, "avg_len_in_yjit", avg_len_in_yjit); // Proportion of instructions that retire in YJIT - let total_insns_count = retired_in_yjit + rb_yjit_vm_insns_count(); - set_stat_usize!(hash, "total_insns_count", total_insns_count as usize); + if rb_vm_insns_count > 0 { + let total_insns_count = retired_in_yjit + rb_vm_insns_count; + set_stat_usize!(hash, "total_insns_count", total_insns_count as usize); - let ratio_in_yjit: f64 = 100.0 * retired_in_yjit as f64 / total_insns_count as f64; - set_stat_double!(hash, "ratio_in_yjit", ratio_in_yjit); + let ratio_in_yjit: f64 = 100.0 * retired_in_yjit as f64 / total_insns_count as f64; + set_stat_double!(hash, "ratio_in_yjit", ratio_in_yjit); + } // Set method call counts in a Ruby dict fn set_call_counts( |