diff --git a/base/timing.jl b/base/timing.jl index 64d2a0a6f054e..0860f588d8b3c 100644 --- a/base/timing.jl +++ b/base/timing.jl @@ -75,6 +75,10 @@ function cumulative_compile_time_ns() return comp, recomp end +# Time spent JIT-compiling Julia method instances, a subset of +# `cumulative_compile_time_ns` +fptr_compile_time_ns() = ccall(:jl_fptr_compile_time_ns, UInt64, ()) + function cumulative_compile_timing(b::Bool) if b ccall(:jl_cumulative_compile_timing_enable, Cvoid, ()) diff --git a/src/jitlayers.cpp b/src/jitlayers.cpp index 3c90ddf915cde..fa449b6aef657 100644 --- a/src/jitlayers.cpp +++ b/src/jitlayers.cpp @@ -534,6 +534,7 @@ jl_code_instance_t *jl_generate_fptr_impl(jl_method_instance_t *mi JL_PROPAGATES jl_atomic_fetch_add_relaxed(&jl_cumulative_recompile_time, t_comp); } jl_atomic_fetch_add_relaxed(&jl_cumulative_compile_time, t_comp); + jl_atomic_fetch_add_relaxed(&jl_fptr_compile_time, t_comp); } ct->reentrant_timing &= ~1ull; } diff --git a/src/jlapi.c b/src/jlapi.c index 670408d2260fb..8ba48a6bf577f 100644 --- a/src/jlapi.c +++ b/src/jlapi.c @@ -509,6 +509,11 @@ JL_DLLEXPORT uint64_t jl_cumulative_recompile_time_ns(void) return jl_atomic_load_relaxed(&jl_cumulative_recompile_time); } +JL_DLLEXPORT uint64_t jl_fptr_compile_time_ns(void) +{ + return jl_atomic_load_relaxed(&jl_fptr_compile_time); +} + /** * @brief Enable per-task timing. */ diff --git a/src/julia_internal.h b/src/julia_internal.h index e03690d4323e6..133fdc457cf56 100644 --- a/src/julia_internal.h +++ b/src/julia_internal.h @@ -307,6 +307,7 @@ static inline uint64_t cycleclock(void) JL_NOTSAFEPOINT extern JL_DLLEXPORT _Atomic(uint8_t) jl_measure_compile_time_enabled; extern JL_DLLEXPORT _Atomic(uint64_t) jl_cumulative_compile_time; extern JL_DLLEXPORT _Atomic(uint64_t) jl_cumulative_recompile_time; +extern JL_DLLEXPORT _Atomic(uint64_t) jl_fptr_compile_time; // Global *atomic* integer controlling *process-wide* task timing. extern JL_DLLEXPORT _Atomic(uint8_t) jl_task_metrics_enabled; diff --git a/src/threading.c b/src/threading.c index 875b9f6b8aa57..0254ded69a58c 100644 --- a/src/threading.c +++ b/src/threading.c @@ -51,6 +51,8 @@ JL_DLLEXPORT _Atomic(uint64_t) jl_cumulative_recompile_time = 0; JL_DLLEXPORT _Atomic(uint8_t) jl_task_metrics_enabled = 0; +JL_DLLEXPORT _Atomic(uint64_t) jl_fptr_compile_time = 0; + JL_DLLEXPORT void *jl_get_ptls_states(void) { // mostly deprecated: use current_task instead