Skip to content

Commit d1c4443

Browse files
committed
Converted Metrics to only counters.
Counters preserve their characteristics under sampling (ie they lose resolution but not accuracy) and counters can be used in pairs to simulate a gauge.
1 parent 5e55964 commit d1c4443

File tree

15 files changed

+136
-223
lines changed

15 files changed

+136
-223
lines changed

kernel/common/gc.rb

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ def self.count
66

77
def self.time
88
data = stat
9-
data[:"gc.young.total.ms"] +
10-
data[:"gc.immix.stop.total.ms"] +
11-
data[:"gc.large.sweep.total.ms"]
9+
data[:"gc.young.ms"] +
10+
data[:"gc.immix.stop.ms"] +
11+
data[:"gc.large.sweep.ms"]
1212
end
1313

1414
def self.stat
@@ -54,22 +54,22 @@ def self.result
5454
===================================
5555
5656
Collections
57-
Count Total time / concurrent (ms) Last time / concurrent (ms)
58-
Young #{sprintf("% 22d", stats[:'gc.young.count'])} #{sprintf("% 16d ", stats[:'gc.young.total.ms'])} #{sprintf("% 16d ", stats[:'gc.young.last.ms'])}
59-
Full #{sprintf("% 22d", stats[:'gc.immix.count'])} #{sprintf("% 16d / % 10d", stats[:'gc.immix.stop.total.ms'], stats[:'gc.immix.concurrent.total.ms'])} #{sprintf("% 16d / % 10d", stats[:'gc.immix.stop.last.ms'], stats[:'gc.immix.concurrent.last.ms'])}
57+
Count Total time / concurrent (ms)
58+
Young #{sprintf("% 22d", stats[:'gc.young.count'])} #{sprintf("% 16d ", stats[:'gc.young.ms'])}
59+
Full #{sprintf("% 22d", stats[:'gc.immix.count'])} #{sprintf("% 16d / % 10d", stats[:'gc.immix.stop.ms'], stats[:'gc.immix.concurrent.ms'])}
6060
6161
Allocation
6262
Objects allocated Bytes allocated
63-
Young #{sprintf("% 22d", stats[:'memory.young.objects.total'])} #{sprintf("% 22d", stats[:'memory.young.bytes.total'])}
64-
Promoted#{sprintf("% 22d", stats[:'memory.promoted.objects.total'])} #{sprintf("% 22d", stats[:'memory.promoted.bytes.total'])}
65-
Mature #{sprintf("% 22d", stats[:'memory.immix.objects.total'])} #{sprintf("% 22d", stats[:'memory.immix.bytes.total'])}
63+
Young #{sprintf("% 22d", stats[:'memory.young.objects'])} #{sprintf("% 22d", stats[:'memory.young.bytes'])}
64+
Promoted#{sprintf("% 22d", stats[:'memory.promoted.objects'])} #{sprintf("% 22d", stats[:'memory.promoted.bytes'])}
65+
Mature #{sprintf("% 22d", stats[:'memory.immix.objects'])} #{sprintf("% 22d", stats[:'memory.immix.bytes'])}
6666
6767
6868
Usage
6969
Bytes used
70-
Young #{sprintf("% 22d", stats[:'memory.young.bytes.current'])}
71-
Mature #{sprintf("% 22d", stats[:'memory.immix.bytes.current'])}
72-
Large #{sprintf("% 22d", stats[:'memory.large.bytes.current'])}
70+
Young #{sprintf("% 22d", stats[:'memory.young.bytes'])}
71+
Mature #{sprintf("% 22d", stats[:'memory.immix.bytes'])}
72+
Large #{sprintf("% 22d", stats[:'memory.large.bytes'])}
7373
Code #{sprintf("% 22d", stats[:'memory.code.bytes'])}
7474
Symbols #{sprintf("% 22d", stats[:'memory.symbols.bytes'])}
7575
OUT

vm/builtin/data.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ namespace rubinius {
4242
state->memory()->needs_finalization(data, (FinalizerFunction)&Data::finalize);
4343
}
4444

45-
state->vm()->metrics().m.ruby_metrics.memory_data_objects_total++;
45+
state->vm()->metrics().m.ruby_metrics.memory_data_objects++;
4646

4747
return data;
4848
}
@@ -76,7 +76,7 @@ namespace rubinius {
7676
state->memory()->needs_finalization(data, (FinalizerFunction)&Data::finalize);
7777
}
7878

79-
state->vm()->metrics().m.ruby_metrics.memory_data_objects_total++;
79+
state->vm()->metrics().m.ruby_metrics.memory_data_objects++;
8080

8181
return data;
8282
}

vm/builtin/thread.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,7 @@ namespace rubinius {
9393
state->memory()->needs_finalization(thr, (FinalizerFunction)&Thread::finalize,
9494
FinalizeObject::eUnmanaged);
9595

96-
state->vm()->metrics().system_metrics.vm_threads++;
97-
state->vm()->metrics().system_metrics.vm_threads_total++;
96+
state->vm()->metrics().system_metrics.vm_threads_created++;
9897

9998
return thr;
10099
}

vm/gc/immix.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ namespace rubinius {
1919
#endif
2020

2121
if(object_memory_) {
22-
object_memory_->state()->metrics().m.ruby_metrics.memory_immix_chunks_total++;
22+
object_memory_->state()->metrics().m.ruby_metrics.memory_immix_chunks++;
2323

2424
if(gc_->dec_chunks_left() <= 0) {
2525
gc_->reset_chunks_left();

vm/gc/immix_marker.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,7 @@ namespace rubinius {
8181
if(data_) {
8282
{
8383
timer::StopWatch<timer::milliseconds> timer(
84-
state->vm()->metrics().m.ruby_metrics.gc_immix_conc_last_ms,
85-
state->vm()->metrics().m.ruby_metrics.gc_immix_conc_total_ms
86-
);
84+
state->vm()->metrics().m.ruby_metrics.gc_immix_concurrent_ms);
8785

8886
// Allow for a young stop the world GC to occur
8987
// every bunch of marks. 100 is a fairly arbitrary
@@ -100,9 +98,7 @@ namespace rubinius {
10098

10199
{
102100
timer::StopWatch<timer::milliseconds> timer(
103-
state->vm()->metrics().m.ruby_metrics.gc_immix_stop_last_ms,
104-
state->vm()->metrics().m.ruby_metrics.gc_immix_stop_total_ms
105-
);
101+
state->vm()->metrics().m.ruby_metrics.gc_immix_stop_ms);
106102

107103
// Finish and pause
108104
while(!state->stop_the_world()) {

vm/gc/mark_sweep.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,6 @@ namespace rubinius {
5656
object_memory_->state()->metrics().m.ruby_metrics.memory_large_objects++;
5757
object_memory_->state()->metrics().m.ruby_metrics.memory_large_bytes += bytes;
5858

59-
object_memory_->state()->metrics().m.ruby_metrics.memory_large_objects_total++;
60-
object_memory_->state()->metrics().m.ruby_metrics.memory_large_bytes_total += bytes;
61-
6259
next_collection_bytes -= bytes;
6360
if(next_collection_bytes < 0) {
6461
*collect_now = true;
@@ -126,8 +123,7 @@ namespace rubinius {
126123
metrics::MetricsData& metrics = object_memory_->state()->metrics();
127124

128125
timer::StopWatch<timer::milliseconds> timer(
129-
metrics.m.ruby_metrics.gc_large_sweep_last_ms,
130-
metrics.m.ruby_metrics.gc_large_sweep_total_ms);
126+
metrics.m.ruby_metrics.gc_large_sweep_ms);
131127

132128
last_freed = 0;
133129

vm/instruments/timing.hpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,22 +64,19 @@ namespace timer {
6464

6565
template <int factor=milliseconds>
6666
class StopWatch {
67-
uint64_t& lap_;
6867
uint64_t& total_;
6968
uint64_t start_;
7069

7170
public:
72-
StopWatch(uint64_t& lap, uint64_t& total)
73-
: lap_(lap)
74-
, total_(total)
71+
StopWatch(uint64_t& total)
72+
: total_(total)
7573
{
7674
start_ = get_current_time();
7775
}
7876

7977
~StopWatch() {
8078
uint64_t now = get_current_time();
81-
lap_ = (now - start_) / ((uint64_t)factor);
82-
total_ += lap_;
79+
total_ += (now - start_) / ((uint64_t)factor);
8380
}
8481
};
8582

vm/llvm/state.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -293,8 +293,7 @@ namespace rubinius {
293293

294294
{
295295
timer::StopWatch<timer::microseconds> timer(
296-
metrics().m.jit_metrics.time_last_us,
297-
metrics().m.jit_metrics.time_total_us);
296+
metrics().m.jit_metrics.time_us);
298297

299298
jit.compile(compile_request);
300299

vm/metrics.cpp

Lines changed: 34 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -227,56 +227,36 @@ namespace rubinius {
227227
metrics_map_.push_back(new MetricsItem(
228228
"jit.methods.failed", metrics_collection_.jit_metrics.methods_failed));
229229
metrics_map_.push_back(new MetricsItem(
230-
"jit.time.last.us", metrics_collection_.jit_metrics.time_last_us));
231-
metrics_map_.push_back(new MetricsItem(
232-
"jit.time.total.us", metrics_collection_.jit_metrics.time_total_us));
230+
"jit.time.us", metrics_collection_.jit_metrics.time_us));
233231

234232
// Object memory metrics
235233
metrics_map_.push_back(new MetricsItem(
236-
"memory.young.bytes.current",
234+
"memory.young.bytes",
237235
metrics_collection_.ruby_metrics.memory_young_bytes));
238236
metrics_map_.push_back(new MetricsItem(
239-
"memory.young.bytes.total",
240-
metrics_collection_.ruby_metrics.memory_young_bytes_total));
241-
metrics_map_.push_back(new MetricsItem(
242-
"memory.young.objects.current",
237+
"memory.young.objects",
243238
metrics_collection_.ruby_metrics.memory_young_objects));
244239
metrics_map_.push_back(new MetricsItem(
245-
"memory.young.objects.total",
246-
metrics_collection_.ruby_metrics.memory_young_objects_total));
240+
"memory.young.occupancy",
241+
metrics_collection_.ruby_metrics.memory_young_occupancy));
247242
metrics_map_.push_back(new MetricsItem(
248-
"memory.young.percent_used",
249-
metrics_collection_.ruby_metrics.memory_young_percent_used));
250-
metrics_map_.push_back(new MetricsItem(
251-
"memory.immix.bytes.current",
243+
"memory.immix.bytes",
252244
metrics_collection_.ruby_metrics.memory_immix_bytes));
253245
metrics_map_.push_back(new MetricsItem(
254-
"memory.immix.bytes.total",
255-
metrics_collection_.ruby_metrics.memory_immix_bytes_total));
256-
metrics_map_.push_back(new MetricsItem(
257-
"memory.immix.objects.current",
246+
"memory.immix.objects",
258247
metrics_collection_.ruby_metrics.memory_immix_objects));
259248
metrics_map_.push_back(new MetricsItem(
260-
"memory.immix.objects.total",
261-
metrics_collection_.ruby_metrics.memory_immix_objects_total));
262-
metrics_map_.push_back(new MetricsItem(
263-
"memory.immix.chunks.current",
249+
"memory.immix.chunks",
264250
metrics_collection_.ruby_metrics.memory_immix_chunks));
265251
metrics_map_.push_back(new MetricsItem(
266-
"memory.immix.chunks.total",
267-
metrics_collection_.ruby_metrics.memory_immix_chunks_total));
268-
metrics_map_.push_back(new MetricsItem(
269-
"memory.large.bytes.current",
252+
"memory.large.bytes",
270253
metrics_collection_.ruby_metrics.memory_large_bytes));
271254
metrics_map_.push_back(new MetricsItem(
272-
"memory.large.bytes.total",
273-
metrics_collection_.ruby_metrics.memory_large_bytes_total));
274-
metrics_map_.push_back(new MetricsItem(
275-
"memory.large.objects.current",
255+
"memory.large.objects",
276256
metrics_collection_.ruby_metrics.memory_large_objects));
277257
metrics_map_.push_back(new MetricsItem(
278-
"memory.large.objects.total",
279-
metrics_collection_.ruby_metrics.memory_large_objects_total));
258+
"memory.symbols",
259+
metrics_collection_.ruby_metrics.memory_symbols));
280260
metrics_map_.push_back(new MetricsItem(
281261
"memory.symbols.bytes",
282262
metrics_collection_.ruby_metrics.memory_symbols_bytes));
@@ -285,25 +265,22 @@ namespace rubinius {
285265
metrics_map_.push_back(new MetricsItem(
286266
"memory.jit.bytes", metrics_collection_.ruby_metrics.memory_jit_bytes));
287267
metrics_map_.push_back(new MetricsItem(
288-
"memory.promoted.bytes.total",
289-
metrics_collection_.ruby_metrics.memory_promoted_bytes_total));
268+
"memory.promoted.bytes",
269+
metrics_collection_.ruby_metrics.memory_promoted_bytes));
290270
metrics_map_.push_back(new MetricsItem(
291-
"memory.promoted.objects.total",
292-
metrics_collection_.ruby_metrics.memory_promoted_objects_total));
271+
"memory.promoted.objects",
272+
metrics_collection_.ruby_metrics.memory_promoted_objects));
293273
metrics_map_.push_back(new MetricsItem(
294-
"memory.slab.refills.total",
295-
metrics_collection_.ruby_metrics.memory_slab_refills_total));
274+
"memory.slab.refills",
275+
metrics_collection_.ruby_metrics.memory_slab_refills));
296276
metrics_map_.push_back(new MetricsItem(
297277
"memory.slab.refills.fails",
298278
metrics_collection_.ruby_metrics.memory_slab_refills_fails));
299279
metrics_map_.push_back(new MetricsItem(
300-
"memory.data_objects.total",
301-
metrics_collection_.ruby_metrics.memory_data_objects_total));
280+
"memory.data_objects",
281+
metrics_collection_.ruby_metrics.memory_data_objects));
302282
metrics_map_.push_back(new MetricsItem(
303-
"memory.capi_handles.total",
304-
metrics_collection_.ruby_metrics.memory_capi_handles_total));
305-
metrics_map_.push_back(new MetricsItem(
306-
"memory.capi_handles.current",
283+
"memory.capi_handles",
307284
metrics_collection_.ruby_metrics.memory_capi_handles));
308285
metrics_map_.push_back(new MetricsItem(
309286
"memory.inflated_headers",
@@ -313,33 +290,22 @@ namespace rubinius {
313290
metrics_map_.push_back(new MetricsItem(
314291
"gc.young.count", metrics_collection_.ruby_metrics.gc_young_count));
315292
metrics_map_.push_back(new MetricsItem(
316-
"gc.young.last.ms", metrics_collection_.ruby_metrics.gc_young_last_ms));
317-
metrics_map_.push_back(new MetricsItem(
318-
"gc.young.total.ms", metrics_collection_.ruby_metrics.gc_young_total_ms));
293+
"gc.young.ms", metrics_collection_.ruby_metrics.gc_young_ms));
319294
metrics_map_.push_back(new MetricsItem(
320295
"gc.young.lifetime", metrics_collection_.ruby_metrics.gc_young_lifetime));
321296
metrics_map_.push_back(new MetricsItem(
322297
"gc.immix.count", metrics_collection_.ruby_metrics.gc_immix_count));
323298
metrics_map_.push_back(new MetricsItem(
324-
"gc.immix.stop.last.ms",
325-
metrics_collection_.ruby_metrics.gc_immix_stop_last_ms));
326-
metrics_map_.push_back(new MetricsItem(
327-
"gc.immix.stop.total.ms",
328-
metrics_collection_.ruby_metrics.gc_immix_stop_total_ms));
299+
"gc.immix.stop.ms",
300+
metrics_collection_.ruby_metrics.gc_immix_stop_ms));
329301
metrics_map_.push_back(new MetricsItem(
330-
"gc.immix.concurrent.last.ms",
331-
metrics_collection_.ruby_metrics.gc_immix_conc_last_ms));
332-
metrics_map_.push_back(new MetricsItem(
333-
"gc.immix.concurrent.total.ms",
334-
metrics_collection_.ruby_metrics.gc_immix_conc_total_ms));
302+
"gc.immix.concurrent.ms",
303+
metrics_collection_.ruby_metrics.gc_immix_concurrent_ms));
335304
metrics_map_.push_back(new MetricsItem(
336305
"gc.large.count", metrics_collection_.ruby_metrics.gc_large_count));
337306
metrics_map_.push_back(new MetricsItem(
338-
"gc.large.sweep.last.ms",
339-
metrics_collection_.ruby_metrics.gc_large_sweep_last_ms));
340-
metrics_map_.push_back(new MetricsItem(
341-
"gc.large.sweep.total.ms",
342-
metrics_collection_.ruby_metrics.gc_large_sweep_total_ms));
307+
"gc.large.sweep.ms",
308+
metrics_collection_.ruby_metrics.gc_large_sweep_ms));
343309

344310
// I/O metrics
345311
metrics_map_.push_back(new MetricsItem(
@@ -360,19 +326,16 @@ namespace rubinius {
360326
"vm.inline_cache.resets",
361327
metrics_collection_.system_metrics.vm_inline_cache_resets));
362328
metrics_map_.push_back(new MetricsItem(
363-
"vm.threads.current",
364-
metrics_collection_.system_metrics.vm_threads));
329+
"vm.threads.created",
330+
metrics_collection_.system_metrics.vm_threads_created));
365331
metrics_map_.push_back(new MetricsItem(
366-
"vm.threads.total",
367-
metrics_collection_.system_metrics.vm_threads_total));
332+
"vm.threads.destroyed",
333+
metrics_collection_.system_metrics.vm_threads_destroyed));
368334

369335
// Lock metrics
370336
metrics_map_.push_back(new MetricsItem(
371-
"locks.stop_the_world.last.ns",
372-
metrics_collection_.system_metrics.locks_stop_the_world_last_ns));
373-
metrics_map_.push_back(new MetricsItem(
374-
"locks.stop_the_world.total.ns",
375-
metrics_collection_.system_metrics.locks_stop_the_world_total_ns));
337+
"locks.stop_the_world.ns",
338+
metrics_collection_.system_metrics.locks_stop_the_world_ns));
376339
}
377340

378341
void Metrics::init_ruby_metrics(STATE) {

0 commit comments

Comments
 (0)