eliminate unecessary index lookups from diskstats
Costa Tsaousis (ktsaou) committed
Oct 15, 2017 at 01:53 UTC
a40dabb6fa960feaecab63fbb6a8384927a05760
1 file changed
+63
-38
src/proc_diskstats.c
+63
-38
@@ -31,16 +31,41 @@ static struct disk {
31
32
int updated;
33
34
- RRDSET *st_avgsz;
35
- RRDSET *st_await;
36
- RRDSET *st_backlog;
34
RRDSET *st_io;
38
- RRDSET *st_iotime;
39
- RRDSET *st_mops;
35
+ RRDDIM *rd_io_reads;
36
+ RRDDIM *rd_io_writes;
37
+
38
RRDSET *st_ops;
39
+ RRDDIM *rd_ops_reads;
40
+ RRDDIM *rd_ops_writes;
41
+
42
RRDSET *st_qops;
42
- RRDSET *st_svctm;
43
+ RRDDIM *rd_qops_operations;
44
+
45
+ RRDSET *st_backlog;
46
+ RRDDIM *rd_backlog_backlog;
47
+
48
RRDSET *st_util;
49
+ RRDDIM *rd_util_utilization;
50
+
51
+ RRDSET *st_mops;
52
+ RRDDIM *rd_mops_reads;
53
+ RRDDIM *rd_mops_writes;
54
+
55
+ RRDSET *st_iotime;
56
+ RRDDIM *rd_iotime_reads;
57
+ RRDDIM *rd_iotime_writes;
58
+
59
+ RRDSET *st_await;
60
+ RRDDIM *rd_await_reads;
61
+ RRDDIM *rd_await_writes;
62
+
63
+ RRDSET *st_avgsz;
64
+ RRDDIM *rd_avgsz_reads;
65
+ RRDDIM *rd_avgsz_writes;
66
+
67
+ RRDSET *st_svctm;
68
+ RRDDIM *rd_svctm_svctm;
69
70
struct disk *next;
71
} *disk_root = NULL;
@@ -525,13 +550,13 @@ int do_proc_diskstats(int update_every, usec_t dt) {
550
, RRDSET_TYPE_AREA
551
);
552
528
- rrddim_add(d->st_io, "reads", NULL, d->sector_size, 1024, RRD_ALGORITHM_INCREMENTAL);
529
- rrddim_add(d->st_io, "writes", NULL, d->sector_size * -1, 1024, RRD_ALGORITHM_INCREMENTAL);
553
+ d->rd_io_reads = rrddim_add(d->st_io, "reads", NULL, d->sector_size, 1024, RRD_ALGORITHM_INCREMENTAL);
554
+ d->rd_io_writes = rrddim_add(d->st_io, "writes", NULL, d->sector_size * -1, 1024, RRD_ALGORITHM_INCREMENTAL);
555
}
556
else rrdset_next(d->st_io);
557
533
- last_readsectors = rrddim_set(d->st_io, "reads", readsectors);
534
- last_writesectors = rrddim_set(d->st_io, "writes", writesectors);
558
+ last_readsectors = rrddim_set_by_pointer(d->st_io, d->rd_io_reads, readsectors);
559
+ last_writesectors = rrddim_set_by_pointer(d->st_io, d->rd_io_writes, writesectors);
560
rrdset_done(d->st_io);
561
}
562
@@ -558,13 +583,13 @@ int do_proc_diskstats(int update_every, usec_t dt) {
583
584
rrdset_flag_set(d->st_ops, RRDSET_FLAG_DETAIL);
585
561
- rrddim_add(d->st_ops, "reads", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
562
- rrddim_add(d->st_ops, "writes", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
586
+ d->rd_ops_reads = rrddim_add(d->st_ops, "reads", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
587
+ d->rd_ops_writes = rrddim_add(d->st_ops, "writes", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
588
}
589
else rrdset_next(d->st_ops);
590
566
- last_reads = rrddim_set(d->st_ops, "reads", reads);
567
- last_writes = rrddim_set(d->st_ops, "writes", writes);
591
+ last_reads = rrddim_set_by_pointer(d->st_ops, d->rd_ops_reads, reads);
592
+ last_writes = rrddim_set_by_pointer(d->st_ops, d->rd_ops_writes, writes);
593
rrdset_done(d->st_ops);
594
}
595
@@ -591,11 +616,11 @@ int do_proc_diskstats(int update_every, usec_t dt) {
616
617
rrdset_flag_set(d->st_qops, RRDSET_FLAG_DETAIL);
618
594
- rrddim_add(d->st_qops, "operations", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
619
+ d->rd_qops_operations = rrddim_add(d->st_qops, "operations", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
620
}
621
else rrdset_next(d->st_qops);
622
598
- rrddim_set(d->st_qops, "operations", queued_ios);
623
+ rrddim_set_by_pointer(d->st_qops, d->rd_qops_operations, queued_ios);
624
rrdset_done(d->st_qops);
625
}
626
@@ -622,11 +647,11 @@ int do_proc_diskstats(int update_every, usec_t dt) {
647
648
rrdset_flag_set(d->st_backlog, RRDSET_FLAG_DETAIL);
649
625
- rrddim_add(d->st_backlog, "backlog", NULL, 1, 10, RRD_ALGORITHM_INCREMENTAL);
650
+ d->rd_backlog_backlog = rrddim_add(d->st_backlog, "backlog", NULL, 1, 10, RRD_ALGORITHM_INCREMENTAL);
651
}
652
else rrdset_next(d->st_backlog);
653
629
- rrddim_set(d->st_backlog, "backlog", backlog_ms);
654
+ rrddim_set_by_pointer(d->st_backlog, d->rd_backlog_backlog, backlog_ms);
655
rrdset_done(d->st_backlog);
656
}
657
@@ -653,11 +678,11 @@ int do_proc_diskstats(int update_every, usec_t dt) {
678
679
rrdset_flag_set(d->st_util, RRDSET_FLAG_DETAIL);
680
656
- rrddim_add(d->st_util, "utilization", NULL, 1, 10, RRD_ALGORITHM_INCREMENTAL);
681
+ d->rd_util_utilization = rrddim_add(d->st_util, "utilization", NULL, 1, 10, RRD_ALGORITHM_INCREMENTAL);
682
}
683
else rrdset_next(d->st_util);
684
660
- last_busy_ms = rrddim_set(d->st_util, "utilization", busy_ms);
685
+ last_busy_ms = rrddim_set_by_pointer(d->st_util, d->rd_util_utilization, busy_ms);
686
rrdset_done(d->st_util);
687
}
688
@@ -684,13 +709,13 @@ int do_proc_diskstats(int update_every, usec_t dt) {
709
710
rrdset_flag_set(d->st_mops, RRDSET_FLAG_DETAIL);
711
687
- rrddim_add(d->st_mops, "reads", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
688
- rrddim_add(d->st_mops, "writes", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
712
+ d->rd_mops_reads = rrddim_add(d->st_mops, "reads", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
713
+ d->rd_mops_writes = rrddim_add(d->st_mops, "writes", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
714
}
715
else rrdset_next(d->st_mops);
716
692
- rrddim_set(d->st_mops, "reads", mreads);
693
- rrddim_set(d->st_mops, "writes", mwrites);
717
+ rrddim_set_by_pointer(d->st_mops, d->rd_mops_reads, mreads);
718
+ rrddim_set_by_pointer(d->st_mops, d->rd_mops_writes, mwrites);
719
rrdset_done(d->st_mops);
720
}
721
@@ -717,13 +742,13 @@ int do_proc_diskstats(int update_every, usec_t dt) {
742
743
rrdset_flag_set(d->st_iotime, RRDSET_FLAG_DETAIL);
744
720
- rrddim_add(d->st_iotime, "reads", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
721
- rrddim_add(d->st_iotime, "writes", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
745
+ d->rd_iotime_reads = rrddim_add(d->st_iotime, "reads", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
746
+ d->rd_iotime_writes = rrddim_add(d->st_iotime, "writes", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
747
}
748
else rrdset_next(d->st_iotime);
749
725
- last_readms = rrddim_set(d->st_iotime, "reads", readms);
726
- last_writems = rrddim_set(d->st_iotime, "writes", writems);
750
+ last_readms = rrddim_set_by_pointer(d->st_iotime, d->rd_iotime_reads, readms);
751
+ last_writems = rrddim_set_by_pointer(d->st_iotime, d->rd_iotime_writes, writems);
752
rrdset_done(d->st_iotime);
753
}
754
@@ -753,13 +778,13 @@ int do_proc_diskstats(int update_every, usec_t dt) {
778
779
rrdset_flag_set(d->st_await, RRDSET_FLAG_DETAIL);
780
756
- rrddim_add(d->st_await, "reads", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
757
- rrddim_add(d->st_await, "writes", NULL, -1, 1, RRD_ALGORITHM_ABSOLUTE);
781
+ d->rd_await_reads = rrddim_add(d->st_await, "reads", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
782
+ d->rd_await_writes = rrddim_add(d->st_await, "writes", NULL, -1, 1, RRD_ALGORITHM_ABSOLUTE);
783
}
784
else rrdset_next(d->st_await);
785
761
- rrddim_set(d->st_await, "reads", (reads - last_reads) ? (readms - last_readms) / (reads - last_reads) : 0);
762
- rrddim_set(d->st_await, "writes", (writes - last_writes) ? (writems - last_writems) / (writes - last_writes) : 0);
786
+ rrddim_set_by_pointer(d->st_await, d->rd_await_reads, (reads - last_reads) ? (readms - last_readms) / (reads - last_reads) : 0);
787
+ rrddim_set_by_pointer(d->st_await, d->rd_await_writes, (writes - last_writes) ? (writems - last_writems) / (writes - last_writes) : 0);
788
rrdset_done(d->st_await);
789
}
790
@@ -784,13 +809,13 @@ int do_proc_diskstats(int update_every, usec_t dt) {
809
810
rrdset_flag_set(d->st_avgsz, RRDSET_FLAG_DETAIL);
811
787
- rrddim_add(d->st_avgsz, "reads", NULL, d->sector_size, 1024, RRD_ALGORITHM_ABSOLUTE);
788
- rrddim_add(d->st_avgsz, "writes", NULL, d->sector_size * -1, 1024, RRD_ALGORITHM_ABSOLUTE);
812
+ d->rd_avgsz_reads = rrddim_add(d->st_avgsz, "reads", NULL, d->sector_size, 1024, RRD_ALGORITHM_ABSOLUTE);
813
+ d->rd_avgsz_writes = rrddim_add(d->st_avgsz, "writes", NULL, d->sector_size * -1, 1024, RRD_ALGORITHM_ABSOLUTE);
814
}
815
else rrdset_next(d->st_avgsz);
816
792
- rrddim_set(d->st_avgsz, "reads", (reads - last_reads) ? (readsectors - last_readsectors) / (reads - last_reads) : 0);
793
- rrddim_set(d->st_avgsz, "writes", (writes - last_writes) ? (writesectors - last_writesectors) / (writes - last_writes) : 0);
817
+ rrddim_set_by_pointer(d->st_avgsz, d->rd_avgsz_reads, (reads - last_reads) ? (readsectors - last_readsectors) / (reads - last_reads) : 0);
818
+ rrddim_set_by_pointer(d->st_avgsz, d->rd_avgsz_writes, (writes - last_writes) ? (writesectors - last_writesectors) / (writes - last_writes) : 0);
819
rrdset_done(d->st_avgsz);
820
}
821
@@ -815,11 +840,11 @@ int do_proc_diskstats(int update_every, usec_t dt) {
840
841
rrdset_flag_set(d->st_svctm, RRDSET_FLAG_DETAIL);
842
818
- rrddim_add(d->st_svctm, "svctm", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
843
+ d->rd_svctm_svctm = rrddim_add(d->st_svctm, "svctm", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
844
}
845
else rrdset_next(d->st_svctm);
846
822
- rrddim_set(d->st_svctm, "svctm", ((reads - last_reads) + (writes - last_writes)) ? (busy_ms - last_busy_ms) / ((reads - last_reads) + (writes - last_writes)) : 0);
847
+ rrddim_set_by_pointer(d->st_svctm, d->rd_svctm_svctm, ((reads - last_reads) + (writes - last_writes)) ? (busy_ms - last_busy_ms) / ((reads - last_reads) + (writes - last_writes)) : 0);
848
rrdset_done(d->st_svctm);
849
}
850
}