Source file async_kernel_scheduler.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
open! Core_kernel
open! Import
include Scheduler
let enqueue_job execution_context f a = enqueue (t ()) execution_context f a
let thread_safe_enqueue_job execution_context f a =
thread_safe_enqueue_external_job (t ()) execution_context f a
;;
let current_execution_context () = current_execution_context (t ())
let cycle_count () = cycle_count (t ())
let cycle_start_ns () = cycle_start (t ())
let cycle_start () = Time_ns.to_time_float_round_nearest (cycle_start_ns ())
let cycle_times_ns () = map_cycle_times (t ()) ~f:Fn.id
let cycle_times () = map_cycle_times (t ()) ~f:Time_ns.Span.to_span_float_round_nearest
let total_cycle_time () = total_cycle_time (t ())
let last_cycle_time () = last_cycle_time (t ())
let long_cycles ~at_least = long_cycles (t ()) ~at_least
let event_precision_ns () = event_precision (t ())
let event_precision () = Time_ns.Span.to_span_float_round_nearest (event_precision_ns ())
let set_max_num_jobs_per_priority_per_cycle i =
set_max_num_jobs_per_priority_per_cycle (t ()) i
;;
let max_num_jobs_per_priority_per_cycle () = max_num_jobs_per_priority_per_cycle (t ())
let set_record_backtraces bool = set_record_backtraces (t ()) bool
let force_current_cycle_to_end () = force_current_cycle_to_end (t ())
let yield () = yield (t ())
let yield_until_no_jobs_remain ?may_return_immediately () =
yield_until_no_jobs_remain ?may_return_immediately (t ())
;;
let yield_every ~n =
let yield_every = Staged.unstage (yield_every ~n) in
let t = t () in
stage (fun () -> yield_every t)
;;
let num_jobs_run () = num_jobs_run (t ())
let num_pending_jobs () = num_pending_jobs (t ())
module Expert = struct
let run_cycles_until_no_jobs_remain = run_cycles_until_no_jobs_remain
let set_on_start_of_cycle f = set_on_start_of_cycle (t ()) f
let set_on_end_of_cycle f = set_on_end_of_cycle (t ()) f
let last_cycle_num_jobs () = last_cycle_num_jobs (t ())
let run_every_cycle_start f = run_every_cycle_start (t ()) ~f
let run_every_cycle_end f = run_every_cycle_end (t ()) ~f
end
module Private = Scheduler