Add CPU frequency chart to FreeBSD plugin
Vladimir Kobal committed
Oct 9, 2017 at 21:58 UTC
3c8049dae31c5ac00e342917f0cf8628cbfb1e2b
3 files changed
+45
src/freebsd_sysctl.c
+43
@@ -442,6 +442,49 @@ int do_dev_cpu_temperature(int update_every, usec_t dt) {
442
return 0;
443
}
444
445
+// --------------------------------------------------------------------------------------------------------------------
446
+// dev.cpu.0.freq
447
+
448
+int do_dev_cpu_0_freq(int update_every, usec_t dt) {
449
+ (void)dt;
450
+ static int mib[4] = {0, 0, 0, 0};
451
+ int cpufreq;
452
+
453
+ if (unlikely(GETSYSCTL_SIMPLE("dev.cpu.0.freq", mib, cpufreq))) {
454
+ error("DISABLED: cpu.scaling_cur_freq chart");
455
+ error("DISABLED: dev.cpu.0.freq module");
456
+ return 1;
457
+ } else {
458
+
459
+ // --------------------------------------------------------------------
460
+
461
+ static RRDSET *st = NULL;
462
+ static RRDDIM *rd = NULL;
463
+
464
+ if (unlikely(!st)) {
465
+ st = rrdset_create_localhost("cpu",
466
+ "scaling_cur_freq",
467
+ NULL,
468
+ "cpufreq",
469
+ NULL,
470
+ "Current CPU Scaling Frequency",
471
+ "MHz",
472
+ 5003,
473
+ update_every,
474
+ RRDSET_TYPE_LINE
475
+ );
476
+
477
+ rd = rrddim_add(st, "frequency", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
478
+ }
479
+ else rrdset_next(st);
480
+
481
+ rrddim_set_by_pointer(st, rd, cpufreq);
482
+ rrdset_done(st);
483
+ }
484
+
485
+ return 0;
486
+}
487
+
488
// --------------------------------------------------------------------------------------------------------------------
489
// hw.intrcnt
490
src/plugin_freebsd.c
+1
@@ -37,6 +37,7 @@ static struct freebsd_module {
37
// CPU metrics
38
{ .name = "kern.cp_times", .dim = "cp_times", .enabled = 1, .func = do_kern_cp_times },
39
{ .name = "dev.cpu.temperature", .dim = "cpu_temperature", .enabled = 1, .func = do_dev_cpu_temperature },
40
+ { .name = "dev.cpu.0.freq", .dim = "cpu_frequency", .enabled = 1, .func = do_dev_cpu_0_freq },
41
42
// disk metrics
43
{ .name = "kern.devstat", .dim = "kern_devstat", .enabled = 1, .func = do_kern_devstat },
src/plugin_freebsd.h
+1
@@ -18,6 +18,7 @@ extern int do_vm_vmtotal(int update_every, usec_t dt);
18
extern int do_kern_cp_time(int update_every, usec_t dt);
19
extern int do_kern_cp_times(int update_every, usec_t dt);
20
extern int do_dev_cpu_temperature(int update_every, usec_t dt);
21
+extern int do_dev_cpu_0_freq(int update_every, usec_t dt);
22
extern int do_hw_intcnt(int update_every, usec_t dt);
23
extern int do_vm_stats_sys_v_intr(int update_every, usec_t dt);
24
extern int do_vm_stats_sys_v_soft(int update_every, usec_t dt);