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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
module One = struct
type witness = unit
let load () = ()
let unload () = ()
let make () = ()
let get () = 1.
let label () = "one"
let unit () = "one"
end
module Minor_allocated = struct
type witness = unit
let load () = ()
let unload () = ()
let make () = ()
let get () = (Gc.quick_stat ()).minor_words
let label () = "minor-allocated"
let unit () = "mnw"
end
module Major_allocated = struct
type witness = unit
let load () = ()
let unload () = ()
let make () = ()
let get () = (Gc.quick_stat ()).major_words
let label () = "major-allocated"
let unit () = "mjw"
end
module Promoted = struct
type witness = unit
let load () = ()
let unload () = ()
let make () = ()
let get () = (Gc.quick_stat ()).promoted_words
let label () = "promoted"
let unit () = "p"
end
module Compaction = struct
type witness = unit
let load () = ()
let unload () = ()
let make () = ()
let get () = float_of_int (Gc.quick_stat ()).compactions
let label () = "compaction"
let unit () = "compact"
end
module Minor_collection = struct
type witness = unit
let load () = ()
let unload () = ()
let make () = ()
let get () = float_of_int (Gc.quick_stat ()).minor_collections
let label () = "minor-collection"
let unit () = "mn-collect"
end
module Major_collection = struct
type witness = unit
let load () = ()
let unload () = ()
let make () = ()
let get () = float_of_int (Gc.quick_stat ()).major_collections
let label () = "major-collection"
let unit () = "mj-collect"
end
module Monotonic_clock = struct
type witness = unit
let load () = ()
let unload () = ()
let make () = ()
let get () = Int64.to_float (Monotonic_clock.now ())
let label () = "monotonic-clock"
let unit () = "ns"
end
module Extension = struct
type 'w t = 'w Measure.measure
let one = Measure.register (module One)
let minor_allocated = Measure.register (module Minor_allocated)
let major_allocated = Measure.register (module Major_allocated)
let promoted = Measure.register (module Promoted)
let compaction = Measure.register (module Compaction)
let minor_collection = Measure.register (module Minor_collection)
let major_collection = Measure.register (module Major_collection)
let monotonic_clock = Measure.register (module Monotonic_clock)
end
module Instance = struct
let one = Measure.instance (module One) Extension.one
let minor_allocated =
Measure.instance (module Minor_allocated) Extension.minor_allocated
let major_allocated =
Measure.instance (module Major_allocated) Extension.major_allocated
let promoted = Measure.instance (module Promoted) Extension.promoted
let compaction = Measure.instance (module Compaction) Extension.compaction
let major_collection =
Measure.instance (module Major_collection) Extension.major_collection
let minor_collection =
Measure.instance (module Minor_collection) Extension.minor_collection
let monotonic_clock =
Measure.instance (module Monotonic_clock) Extension.monotonic_clock
end