@cryptotaxi247 / netdata-1 / commits / e1f805f85

eliminated even more unecessary index lookups

Costa Tsaousis (ktsaou) committed Oct 14, 2017 at 23:43 UTC e1f805f85dad60bb8fd3ed660fde452cf88573f2
4 files changed +682 -578
src/ipc.c
+16 -15
@@ -167,7 +167,8 @@ int do_ipc(int update_every, usec_t dt) {
167 static struct ipc_limits limits;
168 static struct ipc_status status;
169 static RRDVAR *arrays_max = NULL, *semaphores_max = NULL;
170 - static RRDSET *semaphores = NULL, *arrays = NULL;
170 + static RRDSET *st_semaphores = NULL, *st_arrays = NULL;
171 + static RRDDIM *rd_semaphores = NULL, *rd_arrays = NULL;
172
173 if(unlikely(!initialized)) {
174 initialized = 1;
@@ -191,8 +192,8 @@ int do_ipc(int update_every, usec_t dt) {
192 if(semaphores_max) rrdvar_custom_host_variable_set(semaphores_max, limits.semmns);
193
194 // create the charts
194 - if(unlikely(!semaphores)) {
195 - semaphores = rrdset_create_localhost(
195 + if(unlikely(!st_semaphores)) {
196 + st_semaphores = rrdset_create_localhost(
197 "system"
198 , "ipc_semaphores"
199 , NULL
@@ -206,11 +207,11 @@ int do_ipc(int update_every, usec_t dt) {
207 , localhost->rrd_update_every
208 , RRDSET_TYPE_AREA
209 );
209 - rrddim_add(semaphores, "semaphores", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
210 + rd_semaphores = rrddim_add(st_semaphores, "semaphores", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
211 }
212
212 - if(unlikely(!arrays)) {
213 - arrays = rrdset_create_localhost(
213 + if(unlikely(!st_arrays)) {
214 + st_arrays = rrdset_create_localhost(
215 "system"
216 , "ipc_semaphore_arrays"
217 , NULL
@@ -224,7 +225,7 @@ int do_ipc(int update_every, usec_t dt) {
225 , localhost->rrd_update_every
226 , RRDSET_TYPE_AREA
227 );
227 - rrddim_add(arrays, "arrays", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
228 + rd_arrays = rrddim_add(st_arrays, "arrays", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
229 }
230 }
231
@@ -236,8 +237,8 @@ int do_ipc(int update_every, usec_t dt) {
237 if(arrays_max) rrdvar_custom_host_variable_set(arrays_max, limits.semmni);
238 if(semaphores_max) rrdvar_custom_host_variable_set(semaphores_max, limits.semmns);
239
239 - arrays->red = limits.semmni;
240 - semaphores->red = limits.semmns;
240 + st_arrays->red = limits.semmni;
241 + st_semaphores->red = limits.semmns;
242
243 read_limits_next = 60 / update_every;
244 }
@@ -250,13 +251,13 @@ int do_ipc(int update_every, usec_t dt) {
251 return 0;
252 }
253
253 - if(semaphores->counter_done) rrdset_next(semaphores);
254 - rrddim_set(semaphores, "semaphores", status.semaem);
255 - rrdset_done(semaphores);
254 + if(st_semaphores->counter_done) rrdset_next(st_semaphores);
255 + rrddim_set_by_pointer(st_semaphores, rd_semaphores, status.semaem);
256 + rrdset_done(st_semaphores);
257
257 - if(arrays->counter_done) rrdset_next(arrays);
258 - rrddim_set(arrays, "arrays", status.semusz);
259 - rrdset_done(arrays);
258 + if(st_arrays->counter_done) rrdset_next(st_arrays);
259 + rrddim_set_by_pointer(st_arrays, rd_arrays, status.semusz);
260 + rrdset_done(st_arrays);
261
262 return 0;
263 }
src/proc_net_rpc_nfs.c
+168 -154
@@ -4,127 +4,133 @@ struct nfs_procs {
4 char name[30];
5 unsigned long long value;
6 int present;
7 + RRDDIM *rd;
8 };
9
10 struct nfs_procs nfs_proc2_values[] = {
10 - { "null", 0ULL, 0 },
11 - { "getattr", 0ULL, 0 },
12 - { "setattr", 0ULL, 0 },
13 - { "root", 0ULL, 0 },
14 - { "lookup", 0ULL, 0 },
15 - { "readlink", 0ULL, 0 },
16 - { "read", 0ULL, 0 },
17 - { "wrcache", 0ULL, 0 },
18 - { "write", 0ULL, 0 },
19 - { "create", 0ULL, 0 },
20 - { "remove", 0ULL, 0 },
21 - { "rename", 0ULL, 0 },
22 - { "link", 0ULL, 0 },
23 - { "symlink", 0ULL, 0 },
24 - { "mkdir", 0ULL, 0 },
25 - { "rmdir", 0ULL, 0 },
26 - { "readdir", 0ULL, 0 },
27 - { "fsstat", 0ULL, 0 },
28 -
29 - /* termination */
30 - { "", 0ULL, 0 }
11 + { "null" , 0ULL, 0, NULL}
12 + , {"getattr" , 0ULL, 0, NULL}
13 + , {"setattr" , 0ULL, 0, NULL}
14 + , {"root" , 0ULL, 0, NULL}
15 + , {"lookup" , 0ULL, 0, NULL}
16 + , {"readlink", 0ULL, 0, NULL}
17 + , {"read" , 0ULL, 0, NULL}
18 + , {"wrcache" , 0ULL, 0, NULL}
19 + , {"write" , 0ULL, 0, NULL}
20 + , {"create" , 0ULL, 0, NULL}
21 + , {"remove" , 0ULL, 0, NULL}
22 + , {"rename" , 0ULL, 0, NULL}
23 + , {"link" , 0ULL, 0, NULL}
24 + , {"symlink" , 0ULL, 0, NULL}
25 + , {"mkdir" , 0ULL, 0, NULL}
26 + , {"rmdir" , 0ULL, 0, NULL}
27 + , {"readdir" , 0ULL, 0, NULL}
28 + , {"fsstat" , 0ULL, 0, NULL}
29 + ,
30 +
31 + /* termination */
32 + { "" , 0ULL, 0, NULL}
33 };
34
35 struct nfs_procs nfs_proc3_values[] = {
34 - { "null", 0ULL, 0 },
35 - { "getattr", 0ULL, 0 },
36 - { "setattr", 0ULL, 0 },
37 - { "lookup", 0ULL, 0 },
38 - { "access", 0ULL, 0 },
39 - { "readlink", 0ULL, 0 },
40 - { "read", 0ULL, 0 },
41 - { "write", 0ULL, 0 },
42 - { "create", 0ULL, 0 },
43 - { "mkdir", 0ULL, 0 },
44 - { "symlink", 0ULL, 0 },
45 - { "mknod", 0ULL, 0 },
46 - { "remove", 0ULL, 0 },
47 - { "rmdir", 0ULL, 0 },
48 - { "rename", 0ULL, 0 },
49 - { "link", 0ULL, 0 },
50 - { "readdir", 0ULL, 0 },
51 - { "readdirplus", 0ULL, 0 },
52 - { "fsstat", 0ULL, 0 },
53 - { "fsinfo", 0ULL, 0 },
54 - { "pathconf", 0ULL, 0 },
55 - { "commit", 0ULL, 0 },
56 -
57 - /* termination */
58 - { "", 0ULL, 0 }
36 + { "null" , 0ULL, 0, NULL}
37 + , {"getattr" , 0ULL, 0, NULL}
38 + , {"setattr" , 0ULL, 0, NULL}
39 + , {"lookup" , 0ULL, 0, NULL}
40 + , {"access" , 0ULL, 0, NULL}
41 + , {"readlink" , 0ULL, 0, NULL}
42 + , {"read" , 0ULL, 0, NULL}
43 + , {"write" , 0ULL, 0, NULL}
44 + , {"create" , 0ULL, 0, NULL}
45 + , {"mkdir" , 0ULL, 0, NULL}
46 + , {"symlink" , 0ULL, 0, NULL}
47 + , {"mknod" , 0ULL, 0, NULL}
48 + , {"remove" , 0ULL, 0, NULL}
49 + , {"rmdir" , 0ULL, 0, NULL}
50 + , {"rename" , 0ULL, 0, NULL}
51 + , {"link" , 0ULL, 0, NULL}
52 + , {"readdir" , 0ULL, 0, NULL}
53 + , {"readdirplus", 0ULL, 0, NULL}
54 + , {"fsstat" , 0ULL, 0, NULL}
55 + , {"fsinfo" , 0ULL, 0, NULL}
56 + , {"pathconf" , 0ULL, 0, NULL}
57 + , {"commit" , 0ULL, 0, NULL}
58 + ,
59 +
60 + /* termination */
61 + { "" , 0ULL, 0, NULL}
62 };
63
64 struct nfs_procs nfs_proc4_values[] = {
62 - { "null", 0ULL, 0 },
63 - { "read", 0ULL, 0 },
64 - { "write", 0ULL, 0 },
65 - { "commit", 0ULL, 0 },
66 - { "open", 0ULL, 0 },
67 - { "open_conf", 0ULL, 0 },
68 - { "open_noat", 0ULL, 0 },
69 - { "open_dgrd", 0ULL, 0 },
70 - { "close", 0ULL, 0 },
71 - { "setattr", 0ULL, 0 },
72 - { "fsinfo", 0ULL, 0 },
73 - { "renew", 0ULL, 0 },
74 - { "setclntid", 0ULL, 0 },
75 - { "confirm", 0ULL, 0 },
76 - { "lock", 0ULL, 0 },
77 - { "lockt", 0ULL, 0 },
78 - { "locku", 0ULL, 0 },
79 - { "access", 0ULL, 0 },
80 - { "getattr", 0ULL, 0 },
81 - { "lookup", 0ULL, 0 },
82 - { "lookup_root", 0ULL, 0 },
83 - { "remove", 0ULL, 0 },
84 - { "rename", 0ULL, 0 },
85 - { "link", 0ULL, 0 },
86 - { "symlink", 0ULL, 0 },
87 - { "create", 0ULL, 0 },
88 - { "pathconf", 0ULL, 0 },
89 - { "statfs", 0ULL, 0 },
90 - { "readlink", 0ULL, 0 },
91 - { "readdir", 0ULL, 0 },
92 - { "server_caps", 0ULL, 0 },
93 - { "delegreturn", 0ULL, 0 },
94 - { "getacl", 0ULL, 0 },
95 - { "setacl", 0ULL, 0 },
96 - { "fs_locations", 0ULL, 0 },
97 - { "rel_lkowner", 0ULL, 0 },
98 - { "secinfo", 0ULL, 0 },
99 - { "fsid_present", 0ULL, 0 },
100 -
101 - /* nfsv4.1 client ops */
102 - { "exchange_id", 0ULL, 0 },
103 - { "create_session", 0ULL, 0 },
104 - { "destroy_session", 0ULL, 0 },
105 - { "sequence", 0ULL, 0 },
106 - { "get_lease_time", 0ULL, 0 },
107 - { "reclaim_comp", 0ULL, 0 },
108 - { "layoutget", 0ULL, 0 },
109 - { "getdevinfo", 0ULL, 0 },
110 - { "layoutcommit", 0ULL, 0 },
111 - { "layoutreturn", 0ULL, 0 },
112 - { "secinfo_no", 0ULL, 0 },
113 - { "test_stateid", 0ULL, 0 },
114 - { "free_stateid", 0ULL, 0 },
115 - { "getdevicelist", 0ULL, 0 },
116 - { "bind_conn_to_ses", 0ULL, 0 },
117 - { "destroy_clientid", 0ULL, 0 },
118 -
119 - /* nfsv4.2 client ops */
120 - { "seek", 0ULL, 0 },
121 - { "allocate", 0ULL, 0 },
122 - { "deallocate", 0ULL, 0 },
123 - { "layoutstats", 0ULL, 0 },
124 - { "clone", 0ULL, 0 },
125 -
126 - /* termination */
127 - { "", 0ULL, 0 }
65 + { "null" , 0ULL, 0, NULL}
66 + , {"read" , 0ULL, 0, NULL}
67 + , {"write" , 0ULL, 0, NULL}
68 + , {"commit" , 0ULL, 0, NULL}
69 + , {"open" , 0ULL, 0, NULL}
70 + , {"open_conf" , 0ULL, 0, NULL}
71 + , {"open_noat" , 0ULL, 0, NULL}
72 + , {"open_dgrd" , 0ULL, 0, NULL}
73 + , {"close" , 0ULL, 0, NULL}
74 + , {"setattr" , 0ULL, 0, NULL}
75 + , {"fsinfo" , 0ULL, 0, NULL}
76 + , {"renew" , 0ULL, 0, NULL}
77 + , {"setclntid" , 0ULL, 0, NULL}
78 + , {"confirm" , 0ULL, 0, NULL}
79 + , {"lock" , 0ULL, 0, NULL}
80 + , {"lockt" , 0ULL, 0, NULL}
81 + , {"locku" , 0ULL, 0, NULL}
82 + , {"access" , 0ULL, 0, NULL}
83 + , {"getattr" , 0ULL, 0, NULL}
84 + , {"lookup" , 0ULL, 0, NULL}
85 + , {"lookup_root" , 0ULL, 0, NULL}
86 + , {"remove" , 0ULL, 0, NULL}
87 + , {"rename" , 0ULL, 0, NULL}
88 + , {"link" , 0ULL, 0, NULL}
89 + , {"symlink" , 0ULL, 0, NULL}
90 + , {"create" , 0ULL, 0, NULL}
91 + , {"pathconf" , 0ULL, 0, NULL}
92 + , {"statfs" , 0ULL, 0, NULL}
93 + , {"readlink" , 0ULL, 0, NULL}
94 + , {"readdir" , 0ULL, 0, NULL}
95 + , {"server_caps" , 0ULL, 0, NULL}
96 + , {"delegreturn" , 0ULL, 0, NULL}
97 + , {"getacl" , 0ULL, 0, NULL}
98 + , {"setacl" , 0ULL, 0, NULL}
99 + , {"fs_locations" , 0ULL, 0, NULL}
100 + , {"rel_lkowner" , 0ULL, 0, NULL}
101 + , {"secinfo" , 0ULL, 0, NULL}
102 + , {"fsid_present" , 0ULL, 0, NULL}
103 + ,
104 +
105 + /* nfsv4.1 client ops */
106 + { "exchange_id" , 0ULL, 0, NULL}
107 + , {"create_session" , 0ULL, 0, NULL}
108 + , {"destroy_session" , 0ULL, 0, NULL}
109 + , {"sequence" , 0ULL, 0, NULL}
110 + , {"get_lease_time" , 0ULL, 0, NULL}
111 + , {"reclaim_comp" , 0ULL, 0, NULL}
112 + , {"layoutget" , 0ULL, 0, NULL}
113 + , {"getdevinfo" , 0ULL, 0, NULL}
114 + , {"layoutcommit" , 0ULL, 0, NULL}
115 + , {"layoutreturn" , 0ULL, 0, NULL}
116 + , {"secinfo_no" , 0ULL, 0, NULL}
117 + , {"test_stateid" , 0ULL, 0, NULL}
118 + , {"free_stateid" , 0ULL, 0, NULL}
119 + , {"getdevicelist" , 0ULL, 0, NULL}
120 + , {"bind_conn_to_ses", 0ULL, 0, NULL}
121 + , {"destroy_clientid", 0ULL, 0, NULL}
122 + ,
123 +
124 + /* nfsv4.2 client ops */
125 + { "seek" , 0ULL, 0, NULL}
126 + , {"allocate" , 0ULL, 0, NULL}
127 + , {"deallocate" , 0ULL, 0, NULL}
128 + , {"layoutstats" , 0ULL, 0, NULL}
129 + , {"clone" , 0ULL, 0, NULL}
130 + ,
131 +
132 + /* termination */
133 + { "" , 0ULL, 0, NULL}
134 };
135
136 int do_proc_net_rpc_nfs(int update_every, usec_t dt) {
@@ -264,13 +270,14 @@ int do_proc_net_rpc_nfs(int update_every, usec_t dt) {
270 }
271 }
272
267 - RRDSET *st;
268 -
273 // --------------------------------------------------------------------
274
275 if(do_net == 2) {
272 - st = rrdset_find_bytype_localhost("nfs", "net");
273 - if(!st) {
276 + static RRDSET *st = NULL;
277 + static RRDDIM *rd_udp = NULL,
278 + *rd_tcp = NULL;
279 +
280 + if(unlikely(!st)) {
281 st = rrdset_create_localhost(
282 "nfs"
283 , "net"
@@ -288,25 +295,29 @@ int do_proc_net_rpc_nfs(int update_every, usec_t dt) {
295
296 rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
297
291 - rrddim_add(st, "udp", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
292 - rrddim_add(st, "tcp", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
298 + rd_udp = rrddim_add(st, "udp", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
299 + rd_tcp = rrddim_add(st, "tcp", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
300 }
301 else rrdset_next(st);
302
303 // ignore net_count, net_tcp_connections
297 - if(net_count) {};
298 - if(net_tcp_connections) {};
304 + (void)net_count;
305 + (void)net_tcp_connections;
306
300 - rrddim_set(st, "udp", net_udp_count);
301 - rrddim_set(st, "tcp", net_tcp_count);
307 + rrddim_set_by_pointer(st, rd_udp, net_udp_count);
308 + rrddim_set_by_pointer(st, rd_tcp, net_tcp_count);
309 rrdset_done(st);
310 }
311
312 // --------------------------------------------------------------------
313
314 if(do_rpc == 2) {
308 - st = rrdset_find_bytype_localhost("nfs", "rpc");
309 - if(!st) {
315 + static RRDSET *st = NULL;
316 + static RRDDIM *rd_calls = NULL,
317 + *rd_retransmits = NULL,
318 + *rd_auth_refresh = NULL;
319 +
320 + if(unlikely(!st)) {
321 st = rrdset_create_localhost(
322 "nfs"
323 , "rpc"
@@ -323,24 +334,23 @@ int do_proc_net_rpc_nfs(int update_every, usec_t dt) {
334 );
335 rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
336
326 - rrddim_add(st, "calls", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
327 - rrddim_add(st, "retransmits", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
328 - rrddim_add(st, "auth_refresh", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
337 + rd_calls = rrddim_add(st, "calls", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
338 + rd_retransmits = rrddim_add(st, "retransmits", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
339 + rd_auth_refresh = rrddim_add(st, "auth_refresh", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
340 }
341 else rrdset_next(st);
342
332 - rrddim_set(st, "calls", rpc_calls);
333 - rrddim_set(st, "retransmits", rpc_retransmits);
334 - rrddim_set(st, "auth_refresh", rpc_auth_refresh);
343 + rrddim_set_by_pointer(st, rd_calls, rpc_calls);
344 + rrddim_set_by_pointer(st, rd_retransmits, rpc_retransmits);
345 + rrddim_set_by_pointer(st, rd_auth_refresh, rpc_auth_refresh);
346 rrdset_done(st);
347 }
348
349 // --------------------------------------------------------------------
350
351 if(do_proc2 == 2) {
341 - unsigned int i;
342 - st = rrdset_find_bytype_localhost("nfs", "proc2");
343 - if(!st) {
352 + static RRDSET *st = NULL;
353 + if(unlikely(!st)) {
354 st = rrdset_create_localhost(
355 "nfs"
356 , "proc2"
@@ -355,14 +365,16 @@ int do_proc_net_rpc_nfs(int update_every, usec_t dt) {
365 , update_every
366 , RRDSET_TYPE_STACKED
367 );
358 -
359 - for(i = 0; nfs_proc2_values[i].present ; i++)
360 - rrddim_add(st, nfs_proc2_values[i].name, NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
368 }
369 else rrdset_next(st);
370
364 - for(i = 0; nfs_proc2_values[i].present ; i++)
365 - rrddim_set(st, nfs_proc2_values[i].name, nfs_proc2_values[i].value);
371 + size_t i;
372 + for(i = 0; nfs_proc2_values[i].present ; i++) {
373 + if(unlikely(!nfs_proc2_values[i].rd))
374 + nfs_proc2_values[i].rd = rrddim_add(st, nfs_proc2_values[i].name, NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
375 +
376 + rrddim_set_by_pointer(st, nfs_proc2_values[i].rd, nfs_proc2_values[i].value);
377 + }
378
379 rrdset_done(st);
380 }
@@ -370,9 +382,8 @@ int do_proc_net_rpc_nfs(int update_every, usec_t dt) {
382 // --------------------------------------------------------------------
383
384 if(do_proc3 == 2) {
373 - unsigned int i;
374 - st = rrdset_find_bytype_localhost("nfs", "proc3");
375 - if(!st) {
385 + static RRDSET *st = NULL;
386 + if(unlikely(!st)) {
387 st = rrdset_create_localhost(
388 "nfs"
389 , "proc3"
@@ -387,14 +398,16 @@ int do_proc_net_rpc_nfs(int update_every, usec_t dt) {
398 , update_every
399 , RRDSET_TYPE_STACKED
400 );
390 -
391 - for(i = 0; nfs_proc3_values[i].present ; i++)
392 - rrddim_add(st, nfs_proc3_values[i].name, NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
401 }
402 else rrdset_next(st);
403
396 - for(i = 0; nfs_proc3_values[i].present ; i++)
397 - rrddim_set(st, nfs_proc3_values[i].name, nfs_proc3_values[i].value);
404 + size_t i;
405 + for(i = 0; nfs_proc3_values[i].present ; i++) {
406 + if(unlikely(!nfs_proc3_values[i].rd))
407 + nfs_proc3_values[i].rd = rrddim_add(st, nfs_proc3_values[i].name, NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
408 +
409 + rrddim_set_by_pointer(st, nfs_proc3_values[i].rd, nfs_proc3_values[i].value);
410 + }
411
412 rrdset_done(st);
413 }
@@ -402,9 +415,8 @@ int do_proc_net_rpc_nfs(int update_every, usec_t dt) {
415 // --------------------------------------------------------------------
416
417 if(do_proc4 == 2) {
405 - unsigned int i;
406 - st = rrdset_find_bytype_localhost("nfs", "proc4");
407 - if(!st) {
418 + static RRDSET *st = NULL;
419 + if(unlikely(!st)) {
420 st = rrdset_create_localhost(
421 "nfs"
422 , "proc4"
@@ -419,14 +431,16 @@ int do_proc_net_rpc_nfs(int update_every, usec_t dt) {
431 , update_every
432 , RRDSET_TYPE_STACKED
433 );
422 -
423 - for(i = 0; nfs_proc4_values[i].present ; i++)
424 - rrddim_add(st, nfs_proc4_values[i].name, NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
434 }
435 else rrdset_next(st);
436
428 - for(i = 0; nfs_proc4_values[i].present ; i++)
429 - rrddim_set(st, nfs_proc4_values[i].name, nfs_proc4_values[i].value);
437 + size_t i;
438 + for(i = 0; nfs_proc4_values[i].present ; i++) {
439 + if(unlikely(!nfs_proc4_values[i].rd))
440 + nfs_proc4_values[i].rd = rrddim_add(st, nfs_proc4_values[i].name, NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
441 +
442 + rrddim_set_by_pointer(st, nfs_proc4_values[i].rd, nfs_proc4_values[i].value);
443 + }
444
445 rrdset_done(st);
446 }
src/proc_net_rpc_nfsd.c
+439 -375
@@ -4,208 +4,217 @@ struct nfsd_procs {
4 char name[30];
5 unsigned long long value;
6 int present;
7 + RRDDIM *rd;
8 };
9
10 struct nfsd_procs nfsd_proc2_values[] = {
10 - { "null", 0ULL, 0 },
11 - { "getattr", 0ULL, 0 },
12 - { "setattr", 0ULL, 0 },
13 - { "root", 0ULL, 0 },
14 - { "lookup", 0ULL, 0 },
15 - { "readlink", 0ULL, 0 },
16 - { "read", 0ULL, 0 },
17 - { "wrcache", 0ULL, 0 },
18 - { "write", 0ULL, 0 },
19 - { "create", 0ULL, 0 },
20 - { "remove", 0ULL, 0 },
21 - { "rename", 0ULL, 0 },
22 - { "link", 0ULL, 0 },
23 - { "symlink", 0ULL, 0 },
24 - { "mkdir", 0ULL, 0 },
25 - { "rmdir", 0ULL, 0 },
26 - { "readdir", 0ULL, 0 },
27 - { "fsstat", 0ULL, 0 },
28 -
29 - /* termination */
30 - { "", 0ULL, 0 }
11 + { "null" , 0ULL, 0, NULL}
12 + , {"getattr" , 0ULL, 0, NULL}
13 + , {"setattr" , 0ULL, 0, NULL}
14 + , {"root" , 0ULL, 0, NULL}
15 + , {"lookup" , 0ULL, 0, NULL}
16 + , {"readlink", 0ULL, 0, NULL}
17 + , {"read" , 0ULL, 0, NULL}
18 + , {"wrcache" , 0ULL, 0, NULL}
19 + , {"write" , 0ULL, 0, NULL}
20 + , {"create" , 0ULL, 0, NULL}
21 + , {"remove" , 0ULL, 0, NULL}
22 + , {"rename" , 0ULL, 0, NULL}
23 + , {"link" , 0ULL, 0, NULL}
24 + , {"symlink" , 0ULL, 0, NULL}
25 + , {"mkdir" , 0ULL, 0, NULL}
26 + , {"rmdir" , 0ULL, 0, NULL}
27 + , {"readdir" , 0ULL, 0, NULL}
28 + , {"fsstat" , 0ULL, 0, NULL}
29 + ,
30 +
31 + /* termination */
32 + { "" , 0ULL, 0, NULL}
33 };
34
35 struct nfsd_procs nfsd_proc3_values[] = {
34 - { "null", 0ULL, 0 },
35 - { "getattr", 0ULL, 0 },
36 - { "setattr", 0ULL, 0 },
37 - { "lookup", 0ULL, 0 },
38 - { "access", 0ULL, 0 },
39 - { "readlink", 0ULL, 0 },
40 - { "read", 0ULL, 0 },
41 - { "write", 0ULL, 0 },
42 - { "create", 0ULL, 0 },
43 - { "mkdir", 0ULL, 0 },
44 - { "symlink", 0ULL, 0 },
45 - { "mknod", 0ULL, 0 },
46 - { "remove", 0ULL, 0 },
47 - { "rmdir", 0ULL, 0 },
48 - { "rename", 0ULL, 0 },
49 - { "link", 0ULL, 0 },
50 - { "readdir", 0ULL, 0 },
51 - { "readdirplus", 0ULL, 0 },
52 - { "fsstat", 0ULL, 0 },
53 - { "fsinfo", 0ULL, 0 },
54 - { "pathconf", 0ULL, 0 },
55 - { "commit", 0ULL, 0 },
56 -
57 - /* termination */
58 - { "", 0ULL, 0 }
36 + { "null" , 0ULL, 0, NULL}
37 + , {"getattr" , 0ULL, 0, NULL}
38 + , {"setattr" , 0ULL, 0, NULL}
39 + , {"lookup" , 0ULL, 0, NULL}
40 + , {"access" , 0ULL, 0, NULL}
41 + , {"readlink" , 0ULL, 0, NULL}
42 + , {"read" , 0ULL, 0, NULL}
43 + , {"write" , 0ULL, 0, NULL}
44 + , {"create" , 0ULL, 0, NULL}
45 + , {"mkdir" , 0ULL, 0, NULL}
46 + , {"symlink" , 0ULL, 0, NULL}
47 + , {"mknod" , 0ULL, 0, NULL}
48 + , {"remove" , 0ULL, 0, NULL}
49 + , {"rmdir" , 0ULL, 0, NULL}
50 + , {"rename" , 0ULL, 0, NULL}
51 + , {"link" , 0ULL, 0, NULL}
52 + , {"readdir" , 0ULL, 0, NULL}
53 + , {"readdirplus", 0ULL, 0, NULL}
54 + , {"fsstat" , 0ULL, 0, NULL}
55 + , {"fsinfo" , 0ULL, 0, NULL}
56 + , {"pathconf" , 0ULL, 0, NULL}
57 + , {"commit" , 0ULL, 0, NULL}
58 + ,
59 +
60 + /* termination */
61 + { "" , 0ULL, 0, NULL}
62 };
63
64 struct nfsd_procs nfsd_proc4_values[] = {
62 - { "null", 0ULL, 0 },
63 - { "read", 0ULL, 0 },
64 - { "write", 0ULL, 0 },
65 - { "commit", 0ULL, 0 },
66 - { "open", 0ULL, 0 },
67 - { "open_conf", 0ULL, 0 },
68 - { "open_noat", 0ULL, 0 },
69 - { "open_dgrd", 0ULL, 0 },
70 - { "close", 0ULL, 0 },
71 - { "setattr", 0ULL, 0 },
72 - { "fsinfo", 0ULL, 0 },
73 - { "renew", 0ULL, 0 },
74 - { "setclntid", 0ULL, 0 },
75 - { "confirm", 0ULL, 0 },
76 - { "lock", 0ULL, 0 },
77 - { "lockt", 0ULL, 0 },
78 - { "locku", 0ULL, 0 },
79 - { "access", 0ULL, 0 },
80 - { "getattr", 0ULL, 0 },
81 - { "lookup", 0ULL, 0 },
82 - { "lookup_root", 0ULL, 0 },
83 - { "remove", 0ULL, 0 },
84 - { "rename", 0ULL, 0 },
85 - { "link", 0ULL, 0 },
86 - { "symlink", 0ULL, 0 },
87 - { "create", 0ULL, 0 },
88 - { "pathconf", 0ULL, 0 },
89 - { "statfs", 0ULL, 0 },
90 - { "readlink", 0ULL, 0 },
91 - { "readdir", 0ULL, 0 },
92 - { "server_caps", 0ULL, 0 },
93 - { "delegreturn", 0ULL, 0 },
94 - { "getacl", 0ULL, 0 },
95 - { "setacl", 0ULL, 0 },
96 - { "fs_locations", 0ULL, 0 },
97 - { "rel_lkowner", 0ULL, 0 },
98 - { "secinfo", 0ULL, 0 },
99 - { "fsid_present", 0ULL, 0 },
100 -
101 - /* nfsv4.1 client ops */
102 - { "exchange_id", 0ULL, 0 },
103 - { "create_session", 0ULL, 0 },
104 - { "destroy_session", 0ULL, 0 },
105 - { "sequence", 0ULL, 0 },
106 - { "get_lease_time", 0ULL, 0 },
107 - { "reclaim_comp", 0ULL, 0 },
108 - { "layoutget", 0ULL, 0 },
109 - { "getdevinfo", 0ULL, 0 },
110 - { "layoutcommit", 0ULL, 0 },
111 - { "layoutreturn", 0ULL, 0 },
112 - { "secinfo_no", 0ULL, 0 },
113 - { "test_stateid", 0ULL, 0 },
114 - { "free_stateid", 0ULL, 0 },
115 - { "getdevicelist", 0ULL, 0 },
116 - { "bind_conn_to_ses", 0ULL, 0 },
117 - { "destroy_clientid", 0ULL, 0 },
118 -
119 - /* nfsv4.2 client ops */
120 - { "seek", 0ULL, 0 },
121 - { "allocate", 0ULL, 0 },
122 - { "deallocate", 0ULL, 0 },
123 - { "layoutstats", 0ULL, 0 },
124 - { "clone", 0ULL, 0 },
125 -
126 - /* termination */
127 - { "", 0ULL, 0 }
65 + { "null" , 0ULL, 0, NULL}
66 + , {"read" , 0ULL, 0, NULL}
67 + , {"write" , 0ULL, 0, NULL}
68 + , {"commit" , 0ULL, 0, NULL}
69 + , {"open" , 0ULL, 0, NULL}
70 + , {"open_conf" , 0ULL, 0, NULL}
71 + , {"open_noat" , 0ULL, 0, NULL}
72 + , {"open_dgrd" , 0ULL, 0, NULL}
73 + , {"close" , 0ULL, 0, NULL}
74 + , {"setattr" , 0ULL, 0, NULL}
75 + , {"fsinfo" , 0ULL, 0, NULL}
76 + , {"renew" , 0ULL, 0, NULL}
77 + , {"setclntid" , 0ULL, 0, NULL}
78 + , {"confirm" , 0ULL, 0, NULL}
79 + , {"lock" , 0ULL, 0, NULL}
80 + , {"lockt" , 0ULL, 0, NULL}
81 + , {"locku" , 0ULL, 0, NULL}
82 + , {"access" , 0ULL, 0, NULL}
83 + , {"getattr" , 0ULL, 0, NULL}
84 + , {"lookup" , 0ULL, 0, NULL}
85 + , {"lookup_root" , 0ULL, 0, NULL}
86 + , {"remove" , 0ULL, 0, NULL}
87 + , {"rename" , 0ULL, 0, NULL}
88 + , {"link" , 0ULL, 0, NULL}
89 + , {"symlink" , 0ULL, 0, NULL}
90 + , {"create" , 0ULL, 0, NULL}
91 + , {"pathconf" , 0ULL, 0, NULL}
92 + , {"statfs" , 0ULL, 0, NULL}
93 + , {"readlink" , 0ULL, 0, NULL}
94 + , {"readdir" , 0ULL, 0, NULL}
95 + , {"server_caps" , 0ULL, 0, NULL}
96 + , {"delegreturn" , 0ULL, 0, NULL}
97 + , {"getacl" , 0ULL, 0, NULL}
98 + , {"setacl" , 0ULL, 0, NULL}
99 + , {"fs_locations" , 0ULL, 0, NULL}
100 + , {"rel_lkowner" , 0ULL, 0, NULL}
101 + , {"secinfo" , 0ULL, 0, NULL}
102 + , {"fsid_present" , 0ULL, 0, NULL}
103 + ,
104 +
105 + /* nfsv4.1 client ops */
106 + { "exchange_id" , 0ULL, 0, NULL}
107 + , {"create_session" , 0ULL, 0, NULL}
108 + , {"destroy_session" , 0ULL, 0, NULL}
109 + , {"sequence" , 0ULL, 0, NULL}
110 + , {"get_lease_time" , 0ULL, 0, NULL}
111 + , {"reclaim_comp" , 0ULL, 0, NULL}
112 + , {"layoutget" , 0ULL, 0, NULL}
113 + , {"getdevinfo" , 0ULL, 0, NULL}
114 + , {"layoutcommit" , 0ULL, 0, NULL}
115 + , {"layoutreturn" , 0ULL, 0, NULL}
116 + , {"secinfo_no" , 0ULL, 0, NULL}
117 + , {"test_stateid" , 0ULL, 0, NULL}
118 + , {"free_stateid" , 0ULL, 0, NULL}
119 + , {"getdevicelist" , 0ULL, 0, NULL}
120 + , {"bind_conn_to_ses", 0ULL, 0, NULL}
121 + , {"destroy_clientid", 0ULL, 0, NULL}
122 + ,
123 +
124 + /* nfsv4.2 client ops */
125 + { "seek" , 0ULL, 0, NULL}
126 + , {"allocate" , 0ULL, 0, NULL}
127 + , {"deallocate" , 0ULL, 0, NULL}
128 + , {"layoutstats" , 0ULL, 0, NULL}
129 + , {"clone" , 0ULL, 0, NULL}
130 + ,
131 +
132 + /* termination */
133 + { "" , 0ULL, 0, NULL}
134 };
135
136 struct nfsd_procs nfsd4_ops_values[] = {
131 - { "unused_op0", 0ULL, 0},
132 - { "unused_op1", 0ULL, 0},
133 - { "future_op2", 0ULL, 0},
134 - { "access", 0ULL, 0},
135 - { "close", 0ULL, 0},
136 - { "commit", 0ULL, 0},
137 - { "create", 0ULL, 0},
138 - { "delegpurge", 0ULL, 0},
139 - { "delegreturn", 0ULL, 0},
140 - { "getattr", 0ULL, 0},
141 - { "getfh", 0ULL, 0},
142 - { "link", 0ULL, 0},
143 - { "lock", 0ULL, 0},
144 - { "lockt", 0ULL, 0},
145 - { "locku", 0ULL, 0},
146 - { "lookup", 0ULL, 0},
147 - { "lookup_root", 0ULL, 0},
148 - { "nverify", 0ULL, 0},
149 - { "open", 0ULL, 0},
150 - { "openattr", 0ULL, 0},
151 - { "open_confirm", 0ULL, 0},
152 - { "open_downgrade", 0ULL, 0},
153 - { "putfh", 0ULL, 0},
154 - { "putpubfh", 0ULL, 0},
155 - { "putrootfh", 0ULL, 0},
156 - { "read", 0ULL, 0},
157 - { "readdir", 0ULL, 0},
158 - { "readlink", 0ULL, 0},
159 - { "remove", 0ULL, 0},
160 - { "rename", 0ULL, 0},
161 - { "renew", 0ULL, 0},
162 - { "restorefh", 0ULL, 0},
163 - { "savefh", 0ULL, 0},
164 - { "secinfo", 0ULL, 0},
165 - { "setattr", 0ULL, 0},
166 - { "setclientid", 0ULL, 0},
167 - { "setclientid_confirm", 0ULL, 0},
168 - { "verify", 0ULL, 0},
169 - { "write", 0ULL, 0},
170 - { "release_lockowner", 0ULL, 0},
171 -
172 - /* nfs41 */
173 - { "backchannel_ctl", 0ULL, 0},
174 - { "bind_conn_to_session", 0ULL, 0},
175 - { "exchange_id", 0ULL, 0},
176 - { "create_session", 0ULL, 0},
177 - { "destroy_session", 0ULL, 0},
178 - { "free_stateid", 0ULL, 0},
179 - { "get_dir_delegation", 0ULL, 0},
180 - { "getdeviceinfo", 0ULL, 0},
181 - { "getdevicelist", 0ULL, 0},
182 - { "layoutcommit", 0ULL, 0},
183 - { "layoutget", 0ULL, 0},
184 - { "layoutreturn", 0ULL, 0},
185 - { "secinfo_no_name", 0ULL, 0},
186 - { "sequence", 0ULL, 0},
187 - { "set_ssv", 0ULL, 0},
188 - { "test_stateid", 0ULL, 0},
189 - { "want_delegation", 0ULL, 0},
190 - { "destroy_clientid", 0ULL, 0},
191 - { "reclaim_complete", 0ULL, 0},
192 -
193 - /* nfs42 */
194 - { "allocate", 0ULL, 0},
195 - { "copy", 0ULL, 0},
196 - { "copy_notify", 0ULL, 0},
197 - { "deallocate", 0ULL, 0},
198 - { "ioadvise", 0ULL, 0},
199 - { "layouterror", 0ULL, 0},
200 - { "layoutstats", 0ULL, 0},
201 - { "offload_cancel", 0ULL, 0},
202 - { "offload_status", 0ULL, 0},
203 - { "read_plus", 0ULL, 0},
204 - { "seek", 0ULL, 0},
205 - { "write_same", 0ULL, 0},
206 -
207 - /* termination */
208 - { "", 0ULL, 0 }
137 + { "unused_op0" , 0ULL, 0, NULL}
138 + , {"unused_op1" , 0ULL, 0, NULL}
139 + , {"future_op2" , 0ULL, 0, NULL}
140 + , {"access" , 0ULL, 0, NULL}
141 + , {"close" , 0ULL, 0, NULL}
142 + , {"commit" , 0ULL, 0, NULL}
143 + , {"create" , 0ULL, 0, NULL}
144 + , {"delegpurge" , 0ULL, 0, NULL}
145 + , {"delegreturn" , 0ULL, 0, NULL}
146 + , {"getattr" , 0ULL, 0, NULL}
147 + , {"getfh" , 0ULL, 0, NULL}
148 + , {"link" , 0ULL, 0, NULL}
149 + , {"lock" , 0ULL, 0, NULL}
150 + , {"lockt" , 0ULL, 0, NULL}
151 + , {"locku" , 0ULL, 0, NULL}
152 + , {"lookup" , 0ULL, 0, NULL}
153 + , {"lookup_root" , 0ULL, 0, NULL}
154 + , {"nverify" , 0ULL, 0, NULL}
155 + , {"open" , 0ULL, 0, NULL}
156 + , {"openattr" , 0ULL, 0, NULL}
157 + , {"open_confirm" , 0ULL, 0, NULL}
158 + , {"open_downgrade" , 0ULL, 0, NULL}
159 + , {"putfh" , 0ULL, 0, NULL}
160 + , {"putpubfh" , 0ULL, 0, NULL}
161 + , {"putrootfh" , 0ULL, 0, NULL}
162 + , {"read" , 0ULL, 0, NULL}
163 + , {"readdir" , 0ULL, 0, NULL}
164 + , {"readlink" , 0ULL, 0, NULL}
165 + , {"remove" , 0ULL, 0, NULL}
166 + , {"rename" , 0ULL, 0, NULL}
167 + , {"renew" , 0ULL, 0, NULL}
168 + , {"restorefh" , 0ULL, 0, NULL}
169 + , {"savefh" , 0ULL, 0, NULL}
170 + , {"secinfo" , 0ULL, 0, NULL}
171 + , {"setattr" , 0ULL, 0, NULL}
172 + , {"setclientid" , 0ULL, 0, NULL}
173 + , {"setclientid_confirm" , 0ULL, 0, NULL}
174 + , {"verify" , 0ULL, 0, NULL}
175 + , {"write" , 0ULL, 0, NULL}
176 + , {"release_lockowner" , 0ULL, 0, NULL}
177 + ,
178 +
179 + /* nfs41 */
180 + { "backchannel_ctl" , 0ULL, 0, NULL}
181 + , {"bind_conn_to_session", 0ULL, 0, NULL}
182 + , {"exchange_id" , 0ULL, 0, NULL}
183 + , {"create_session" , 0ULL, 0, NULL}
184 + , {"destroy_session" , 0ULL, 0, NULL}
185 + , {"free_stateid" , 0ULL, 0, NULL}
186 + , {"get_dir_delegation" , 0ULL, 0, NULL}
187 + , {"getdeviceinfo" , 0ULL, 0, NULL}
188 + , {"getdevicelist" , 0ULL, 0, NULL}
189 + , {"layoutcommit" , 0ULL, 0, NULL}
190 + , {"layoutget" , 0ULL, 0, NULL}
191 + , {"layoutreturn" , 0ULL, 0, NULL}
192 + , {"secinfo_no_name" , 0ULL, 0, NULL}
193 + , {"sequence" , 0ULL, 0, NULL}
194 + , {"set_ssv" , 0ULL, 0, NULL}
195 + , {"test_stateid" , 0ULL, 0, NULL}
196 + , {"want_delegation" , 0ULL, 0, NULL}
197 + , {"destroy_clientid" , 0ULL, 0, NULL}
198 + , {"reclaim_complete" , 0ULL, 0, NULL}
199 + ,
200 +
201 + /* nfs42 */
202 + { "allocate" , 0ULL, 0, NULL}
203 + , {"copy" , 0ULL, 0, NULL}
204 + , {"copy_notify" , 0ULL, 0, NULL}
205 + , {"deallocate" , 0ULL, 0, NULL}
206 + , {"ioadvise" , 0ULL, 0, NULL}
207 + , {"layouterror" , 0ULL, 0, NULL}
208 + , {"layoutstats" , 0ULL, 0, NULL}
209 + , {"offload_cancel" , 0ULL, 0, NULL}
210 + , {"offload_status" , 0ULL, 0, NULL}
211 + , {"read_plus" , 0ULL, 0, NULL}
212 + , {"seek" , 0ULL, 0, NULL}
213 + , {"write_same" , 0ULL, 0, NULL}
214 + ,
215 +
216 + /* termination */
217 + { "" , 0ULL, 0, NULL}
218 };
219
220
@@ -487,13 +496,15 @@ int do_proc_net_rpc_nfsd(int update_every, usec_t dt) {
496 }
497 }
498
490 - RRDSET *st;
491 -
499 // --------------------------------------------------------------------
500
501 if(do_rc == 2) {
495 - st = rrdset_find_bytype_localhost("nfsd", "readcache");
496 - if(!st) {
502 + static RRDSET *st = NULL;
503 + static RRDDIM *rd_hits = NULL,
504 + *rd_misses = NULL,
505 + *rd_nocache = NULL;
506 +
507 + if(unlikely(!st)) {
508 st = rrdset_create_localhost(
509 "nfsd"
510 , "readcache"
@@ -509,23 +520,29 @@ int do_proc_net_rpc_nfsd(int update_every, usec_t dt) {
520 , RRDSET_TYPE_STACKED
521 );
522
512 - rrddim_add(st, "hits", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
513 - rrddim_add(st, "misses", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
514 - rrddim_add(st, "nocache", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
523 + rd_hits = rrddim_add(st, "hits", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
524 + rd_misses = rrddim_add(st, "misses", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
525 + rd_nocache = rrddim_add(st, "nocache", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
526 }
527 else rrdset_next(st);
528
518 - rrddim_set(st, "hits", rc_hits);
519 - rrddim_set(st, "misses", rc_misses);
520 - rrddim_set(st, "nocache", rc_nocache);
529 + rrddim_set_by_pointer(st, rd_hits, rc_hits);
530 + rrddim_set_by_pointer(st, rd_misses, rc_misses);
531 + rrddim_set_by_pointer(st, rd_nocache, rc_nocache);
532 rrdset_done(st);
533 }
534
535 // --------------------------------------------------------------------
536
537 if(do_fh == 2) {
527 - st = rrdset_find_bytype_localhost("nfsd", "filehandles");
528 - if(!st) {
538 + static RRDSET *st = NULL;
539 + static RRDDIM *rd_stale = NULL,
540 + *rd_total_lookups = NULL,
541 + *rd_anonymous_lookups = NULL,
542 + *rd_dir_not_in_dcache = NULL,
543 + *rd_non_dir_not_in_dcache = NULL;
544 +
545 + if(unlikely(!st)) {
546 st = rrdset_create_localhost(
547 "nfsd"
548 , "filehandles"
@@ -542,27 +559,30 @@ int do_proc_net_rpc_nfsd(int update_every, usec_t dt) {
559 );
560 rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
561
545 - rrddim_add(st, "stale", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
546 - rrddim_add(st, "total_lookups", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
547 - rrddim_add(st, "anonymous_lookups", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
548 - rrddim_add(st, "dir_not_in_dcache", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
549 - rrddim_add(st, "non_dir_not_in_dcache", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
562 + rd_stale = rrddim_add(st, "stale", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
563 + rd_total_lookups = rrddim_add(st, "total_lookups", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
564 + rd_anonymous_lookups = rrddim_add(st, "anonymous_lookups", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
565 + rd_dir_not_in_dcache = rrddim_add(st, "dir_not_in_dcache", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
566 + rd_non_dir_not_in_dcache = rrddim_add(st, "non_dir_not_in_dcache", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
567 }
568 else rrdset_next(st);
569
553 - rrddim_set(st, "stale", fh_stale);
554 - rrddim_set(st, "total_lookups", fh_total_lookups);
555 - rrddim_set(st, "anonymous_lookups", fh_anonymous_lookups);
556 - rrddim_set(st, "dir_not_in_dcache", fh_dir_not_in_dcache);
557 - rrddim_set(st, "non_dir_not_in_dcache", fh_non_dir_not_in_dcache);
570 + rrddim_set_by_pointer(st, rd_stale, fh_stale);
571 + rrddim_set_by_pointer(st, rd_total_lookups, fh_total_lookups);
572 + rrddim_set_by_pointer(st, rd_anonymous_lookups, fh_anonymous_lookups);
573 + rrddim_set_by_pointer(st, rd_dir_not_in_dcache, fh_dir_not_in_dcache);
574 + rrddim_set_by_pointer(st, rd_non_dir_not_in_dcache, fh_non_dir_not_in_dcache);
575 rrdset_done(st);
576 }
577
578 // --------------------------------------------------------------------
579
580 if(do_io == 2) {
564 - st = rrdset_find_bytype_localhost("nfsd", "io");
565 - if(!st) {
581 + static RRDSET *st = NULL;
582 + static RRDDIM *rd_read = NULL,
583 + *rd_write = NULL;
584 +
585 + if(unlikely(!st)) {
586 st = rrdset_create_localhost(
587 "nfsd"
588 , "io"
@@ -578,115 +598,148 @@ int do_proc_net_rpc_nfsd(int update_every, usec_t dt) {
598 , RRDSET_TYPE_AREA
599 );
600
581 - rrddim_add(st, "read", NULL, 1, 1000, RRD_ALGORITHM_INCREMENTAL);
582 - rrddim_add(st, "write", NULL, -1, 1000, RRD_ALGORITHM_INCREMENTAL);
601 + rd_read = rrddim_add(st, "read", NULL, 1, 1000, RRD_ALGORITHM_INCREMENTAL);
602 + rd_write = rrddim_add(st, "write", NULL, -1, 1000, RRD_ALGORITHM_INCREMENTAL);
603 }
604 else rrdset_next(st);
605
586 - rrddim_set(st, "read", io_read);
587 - rrddim_set(st, "write", io_write);
606 + rrddim_set_by_pointer(st, rd_read, io_read);
607 + rrddim_set_by_pointer(st, rd_write, io_write);
608 rrdset_done(st);
609 }
610
611 // --------------------------------------------------------------------
612
613 if(do_th == 2) {
594 - st = rrdset_find_bytype_localhost("nfsd", "threads");
595 - if(!st) {
596 - st = rrdset_create_localhost(
597 - "nfsd"
598 - , "threads"
599 - , NULL
600 - , "threads"
601 - , NULL
602 - , "NFS Server Threads"
603 - , "threads"
604 - , "proc"
605 - , "net/rpc/nfsd"
606 - , 5003
607 - , update_every
608 - , RRDSET_TYPE_LINE
609 - );
614 + {
615 + static RRDSET *st = NULL;
616 + static RRDDIM *rd_threads = NULL;
617 +
618 + if(unlikely(!st)) {
619 + st = rrdset_create_localhost(
620 + "nfsd"
621 + , "threads"
622 + , NULL
623 + , "threads"
624 + , NULL
625 + , "NFS Server Threads"
626 + , "threads"
627 + , "proc"
628 + , "net/rpc/nfsd"
629 + , 5003
630 + , update_every
631 + , RRDSET_TYPE_LINE
632 + );
633 +
634 + rd_threads = rrddim_add(st, "threads", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
635 + }
636 + else rrdset_next(st);
637
611 - rrddim_add(st, "threads", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
638 + rrddim_set_by_pointer(st, rd_threads, th_threads);
639 + rrdset_done(st);
640 }
613 - else rrdset_next(st);
614 -
615 - rrddim_set(st, "threads", th_threads);
616 - rrdset_done(st);
641
618 - st = rrdset_find_bytype_localhost("nfsd", "threads_fullcnt");
619 - if(!st) {
620 - st = rrdset_create_localhost(
621 - "nfsd"
622 - , "threads_fullcnt"
623 - , NULL
624 - , "threads"
625 - , NULL
626 - , "NFS Server Threads Full Count"
627 - , "ops/s"
628 - , "proc"
629 - , "net/rpc/nfsd"
630 - , 5004
631 - , update_every
632 - , RRDSET_TYPE_LINE
633 - );
642 + {
643 + static RRDSET *st = NULL;
644 + static RRDDIM *rd_full_count = NULL;
645 +
646 + if(unlikely(!st)) {
647 + st = rrdset_create_localhost(
648 + "nfsd"
649 + , "threads_fullcnt"
650 + , NULL
651 + , "threads"
652 + , NULL
653 + , "NFS Server Threads Full Count"
654 + , "ops/s"
655 + , "proc"
656 + , "net/rpc/nfsd"
657 + , 5004
658 + , update_every
659 + , RRDSET_TYPE_LINE
660 + );
661 +
662 + rd_full_count = rrddim_add(st, "full_count", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
663 + }
664 + else rrdset_next(st);
665
635 - rrddim_add(st, "full_count", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
666 + rrddim_set_by_pointer(st, rd_full_count, th_fullcnt);
667 + rrdset_done(st);
668 }
637 - else rrdset_next(st);
669
639 - rrddim_set(st, "full_count", th_fullcnt);
640 - rrdset_done(st);
641 -
642 - st = rrdset_find_bytype_localhost("nfsd", "threads_histogram");
643 - if(!st) {
644 - st = rrdset_create_localhost(
645 - "nfsd"
646 - , "threads_histogram"
647 - , NULL
648 - , "threads"
649 - , NULL
650 - , "NFS Server Threads Usage Histogram"
651 - , "percentage"
652 - , "proc"
653 - , "net/rpc/nfsd"
654 - , 5005
655 - , update_every
656 - , RRDSET_TYPE_LINE
657 - );
658 -
659 - rrddim_add(st, "0%-10%", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
660 - rrddim_add(st, "10%-20%", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
661 - rrddim_add(st, "20%-30%", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
662 - rrddim_add(st, "30%-40%", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
663 - rrddim_add(st, "40%-50%", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
664 - rrddim_add(st, "50%-60%", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
665 - rrddim_add(st, "60%-70%", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
666 - rrddim_add(st, "70%-80%", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
667 - rrddim_add(st, "80%-90%", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
668 - rrddim_add(st, "90%-100%", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
670 + {
671 + static RRDSET *st = NULL;
672 + static RRDDIM *rd_th_hist10 = NULL,
673 + *rd_th_hist20 = NULL,
674 + *rd_th_hist30 = NULL,
675 + *rd_th_hist40 = NULL,
676 + *rd_th_hist50 = NULL,
677 + *rd_th_hist60 = NULL,
678 + *rd_th_hist70 = NULL,
679 + *rd_th_hist80 = NULL,
680 + *rd_th_hist90 = NULL,
681 + *rd_th_hist100 = NULL;
682 +
683 + if(unlikely(!st)) {
684 + st = rrdset_create_localhost(
685 + "nfsd"
686 + , "threads_histogram"
687 + , NULL
688 + , "threads"
689 + , NULL
690 + , "NFS Server Threads Usage Histogram"
691 + , "percentage"
692 + , "proc"
693 + , "net/rpc/nfsd"
694 + , 5005
695 + , update_every
696 + , RRDSET_TYPE_LINE
697 + );
698 +
699 + rd_th_hist10 = rrddim_add(st, "0%-10%", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
700 + rd_th_hist20 = rrddim_add(st, "10%-20%", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
701 + rd_th_hist30 = rrddim_add(st, "20%-30%", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
702 + rd_th_hist40 = rrddim_add(st, "30%-40%", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
703 + rd_th_hist50 = rrddim_add(st, "40%-50%", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
704 + rd_th_hist60 = rrddim_add(st, "50%-60%", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
705 + rd_th_hist70 = rrddim_add(st, "60%-70%", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
706 + rd_th_hist80 = rrddim_add(st, "70%-80%", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
707 + rd_th_hist90 = rrddim_add(st, "80%-90%", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
708 + rd_th_hist100 = rrddim_add(st, "90%-100%", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
709 + }
710 + else rrdset_next(st);
711 +
712 + rrddim_set_by_pointer(st, rd_th_hist10, th_hist10);
713 + rrddim_set_by_pointer(st, rd_th_hist20, th_hist20);
714 + rrddim_set_by_pointer(st, rd_th_hist30, th_hist30);
715 + rrddim_set_by_pointer(st, rd_th_hist40, th_hist40);
716 + rrddim_set_by_pointer(st, rd_th_hist50, th_hist50);
717 + rrddim_set_by_pointer(st, rd_th_hist60, th_hist60);
718 + rrddim_set_by_pointer(st, rd_th_hist70, th_hist70);
719 + rrddim_set_by_pointer(st, rd_th_hist80, th_hist80);
720 + rrddim_set_by_pointer(st, rd_th_hist90, th_hist90);
721 + rrddim_set_by_pointer(st, rd_th_hist100, th_hist100);
722 + rrdset_done(st);
723 }
670 - else rrdset_next(st);
671 -
672 - rrddim_set(st, "0%-10%", th_hist10);
673 - rrddim_set(st, "10%-20%", th_hist20);
674 - rrddim_set(st, "20%-30%", th_hist30);
675 - rrddim_set(st, "30%-40%", th_hist40);
676 - rrddim_set(st, "40%-50%", th_hist50);
677 - rrddim_set(st, "50%-60%", th_hist60);
678 - rrddim_set(st, "60%-70%", th_hist70);
679 - rrddim_set(st, "70%-80%", th_hist80);
680 - rrddim_set(st, "80%-90%", th_hist90);
681 - rrddim_set(st, "90%-100%", th_hist100);
682 - rrdset_done(st);
724 }
725
726 // --------------------------------------------------------------------
727
728 if(do_ra == 2) {
688 - st = rrdset_find_bytype_localhost("nfsd", "readahead");
689 - if(!st) {
729 + static RRDSET *st = NULL;
730 + static RRDDIM *rd_ra_hist10 = NULL,
731 + *rd_ra_hist20 = NULL,
732 + *rd_ra_hist30 = NULL,
733 + *rd_ra_hist40 = NULL,
734 + *rd_ra_hist50 = NULL,
735 + *rd_ra_hist60 = NULL,
736 + *rd_ra_hist70 = NULL,
737 + *rd_ra_hist80 = NULL,
738 + *rd_ra_hist90 = NULL,
739 + *rd_ra_hist100 = NULL,
740 + *rd_ra_none = NULL;
741 +
742 + if(unlikely(!st)) {
743 st = rrdset_create_localhost(
744 "nfsd"
745 , "readahead"
@@ -702,42 +755,45 @@ int do_proc_net_rpc_nfsd(int update_every, usec_t dt) {
755 , RRDSET_TYPE_STACKED
756 );
757
705 - rrddim_add(st, "10%", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
706 - rrddim_add(st, "20%", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
707 - rrddim_add(st, "30%", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
708 - rrddim_add(st, "40%", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
709 - rrddim_add(st, "50%", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
710 - rrddim_add(st, "60%", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
711 - rrddim_add(st, "70%", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
712 - rrddim_add(st, "80%", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
713 - rrddim_add(st, "90%", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
714 - rrddim_add(st, "100%", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
715 - rrddim_add(st, "misses", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
758 + rd_ra_hist10 = rrddim_add(st, "10%", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
759 + rd_ra_hist20 = rrddim_add(st, "20%", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
760 + rd_ra_hist30 = rrddim_add(st, "30%", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
761 + rd_ra_hist40 = rrddim_add(st, "40%", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
762 + rd_ra_hist50 = rrddim_add(st, "50%", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
763 + rd_ra_hist60 = rrddim_add(st, "60%", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
764 + rd_ra_hist70 = rrddim_add(st, "70%", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
765 + rd_ra_hist80 = rrddim_add(st, "80%", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
766 + rd_ra_hist90 = rrddim_add(st, "90%", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
767 + rd_ra_hist100 = rrddim_add(st, "100%", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
768 + rd_ra_none = rrddim_add(st, "misses", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
769 }
770 else rrdset_next(st);
771
772 // ignore ra_size
720 - if(ra_size) {};
721 -
722 - rrddim_set(st, "10%", ra_hist10);
723 - rrddim_set(st, "20%", ra_hist20);
724 - rrddim_set(st, "30%", ra_hist30);
725 - rrddim_set(st, "40%", ra_hist40);
726 - rrddim_set(st, "50%", ra_hist50);
727 - rrddim_set(st, "60%", ra_hist60);
728 - rrddim_set(st, "70%", ra_hist70);
729 - rrddim_set(st, "80%", ra_hist80);
730 - rrddim_set(st, "90%", ra_hist90);
731 - rrddim_set(st, "100%", ra_hist100);
732 - rrddim_set(st, "misses", ra_none);
773 + (void)ra_size;
774 +
775 + rrddim_set_by_pointer(st, rd_ra_hist10, ra_hist10);
776 + rrddim_set_by_pointer(st, rd_ra_hist20, ra_hist20);
777 + rrddim_set_by_pointer(st, rd_ra_hist30, ra_hist30);
778 + rrddim_set_by_pointer(st, rd_ra_hist40, ra_hist40);
779 + rrddim_set_by_pointer(st, rd_ra_hist50, ra_hist50);
780 + rrddim_set_by_pointer(st, rd_ra_hist60, ra_hist60);
781 + rrddim_set_by_pointer(st, rd_ra_hist70, ra_hist70);
782 + rrddim_set_by_pointer(st, rd_ra_hist80, ra_hist80);
783 + rrddim_set_by_pointer(st, rd_ra_hist90, ra_hist90);
784 + rrddim_set_by_pointer(st, rd_ra_hist100,ra_hist100);
785 + rrddim_set_by_pointer(st, rd_ra_none, ra_none);
786 rrdset_done(st);
787 }
788
789 // --------------------------------------------------------------------
790
791 if(do_net == 2) {
739 - st = rrdset_find_bytype_localhost("nfsd", "net");
740 - if(!st) {
792 + static RRDSET *st = NULL;
793 + static RRDDIM *rd_udp = NULL,
794 + *rd_tcp = NULL;
795 +
796 + if(unlikely(!st)) {
797 st = rrdset_create_localhost(
798 "nfsd"
799 , "net"
@@ -754,25 +810,29 @@ int do_proc_net_rpc_nfsd(int update_every, usec_t dt) {
810 );
811 rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
812
757 - rrddim_add(st, "udp", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
758 - rrddim_add(st, "tcp", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
813 + rd_udp = rrddim_add(st, "udp", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
814 + rd_tcp = rrddim_add(st, "tcp", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
815 }
816 else rrdset_next(st);
817
818 // ignore net_count, net_tcp_connections
763 - if(net_count) {};
764 - if(net_tcp_connections) {};
819 + (void)net_count;
820 + (void)net_tcp_connections;
821
766 - rrddim_set(st, "udp", net_udp_count);
767 - rrddim_set(st, "tcp", net_tcp_count);
822 + rrddim_set_by_pointer(st, rd_udp, net_udp_count);
823 + rrddim_set_by_pointer(st, rd_tcp, net_tcp_count);
824 rrdset_done(st);
825 }
826
827 // --------------------------------------------------------------------
828
829 if(do_rpc == 2) {
774 - st = rrdset_find_bytype_localhost("nfsd", "rpc");
775 - if(!st) {
830 + static RRDSET *st = NULL;
831 + static RRDDIM *rd_calls = NULL,
832 + *rd_bad_format = NULL,
833 + *rd_bad_auth = NULL;
834 +
835 + if(unlikely(!st)) {
836 st = rrdset_create_localhost(
837 "nfsd"
838 , "rpc"
@@ -789,27 +849,26 @@ int do_proc_net_rpc_nfsd(int update_every, usec_t dt) {
849 );
850 rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
851
792 - rrddim_add(st, "calls", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
793 - rrddim_add(st, "bad_format", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
794 - rrddim_add(st, "bad_auth", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
852 + rd_calls = rrddim_add(st, "calls", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
853 + rd_bad_format = rrddim_add(st, "bad_format", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
854 + rd_bad_auth = rrddim_add(st, "bad_auth", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
855 }
856 else rrdset_next(st);
857
858 // ignore rpc_bad_client
799 - if(rpc_bad_client) {};
859 + (void)rpc_bad_client;
860
801 - rrddim_set(st, "calls", rpc_calls);
802 - rrddim_set(st, "bad_format", rpc_bad_format);
803 - rrddim_set(st, "bad_auth", rpc_bad_auth);
861 + rrddim_set_by_pointer(st, rd_calls, rpc_calls);
862 + rrddim_set_by_pointer(st, rd_bad_format, rpc_bad_format);
863 + rrddim_set_by_pointer(st, rd_bad_auth, rpc_bad_auth);
864 rrdset_done(st);
865 }
866
867 // --------------------------------------------------------------------
868
869 if(do_proc2 == 2) {
810 - unsigned int i;
811 - st = rrdset_find_bytype_localhost("nfsd", "proc2");
812 - if(!st) {
870 + static RRDSET *st = NULL;
871 + if(unlikely(!st)) {
872 st = rrdset_create_localhost(
873 "nfsd"
874 , "proc2"
@@ -824,14 +883,16 @@ int do_proc_net_rpc_nfsd(int update_every, usec_t dt) {
883 , update_every
884 , RRDSET_TYPE_STACKED
885 );
827 -
828 - for(i = 0; nfsd_proc2_values[i].present ; i++)
829 - rrddim_add(st, nfsd_proc2_values[i].name, NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
886 }
887 else rrdset_next(st);
888
833 - for(i = 0; nfsd_proc2_values[i].present ; i++)
834 - rrddim_set(st, nfsd_proc2_values[i].name, nfsd_proc2_values[i].value);
889 + size_t i;
890 + for(i = 0; nfsd_proc2_values[i].present ; i++) {
891 + if(unlikely(!nfsd_proc2_values[i].rd))
892 + nfsd_proc2_values[i].rd = rrddim_add(st, nfsd_proc2_values[i].name, NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
893 +
894 + rrddim_set_by_pointer(st, nfsd_proc2_values[i].rd, nfsd_proc2_values[i].value);
895 + }
896
897 rrdset_done(st);
898 }
@@ -839,9 +900,8 @@ int do_proc_net_rpc_nfsd(int update_every, usec_t dt) {
900 // --------------------------------------------------------------------
901
902 if(do_proc3 == 2) {
842 - unsigned int i;
843 - st = rrdset_find_bytype_localhost("nfsd", "proc3");
844 - if(!st) {
903 + static RRDSET *st = NULL;
904 + if(unlikely(!st)) {
905 st = rrdset_create_localhost(
906 "nfsd"
907 , "proc3"
@@ -856,14 +916,16 @@ int do_proc_net_rpc_nfsd(int update_every, usec_t dt) {
916 , update_every
917 , RRDSET_TYPE_STACKED
918 );
859 -
860 - for(i = 0; nfsd_proc3_values[i].present ; i++)
861 - rrddim_add(st, nfsd_proc3_values[i].name, NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
919 }
920 else rrdset_next(st);
921
865 - for(i = 0; nfsd_proc3_values[i].present ; i++)
866 - rrddim_set(st, nfsd_proc3_values[i].name, nfsd_proc3_values[i].value);
922 + size_t i;
923 + for(i = 0; nfsd_proc3_values[i].present ; i++) {
924 + if(unlikely(!nfsd_proc3_values[i].rd))
925 + nfsd_proc3_values[i].rd = rrddim_add(st, nfsd_proc3_values[i].name, NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
926 +
927 + rrddim_set_by_pointer(st, nfsd_proc3_values[i].rd, nfsd_proc3_values[i].value);
928 + }
929
930 rrdset_done(st);
931 }
@@ -871,9 +933,8 @@ int do_proc_net_rpc_nfsd(int update_every, usec_t dt) {
933 // --------------------------------------------------------------------
934
935 if(do_proc4 == 2) {
874 - unsigned int i;
875 - st = rrdset_find_bytype_localhost("nfsd", "proc4");
876 - if(!st) {
936 + static RRDSET *st = NULL;
937 + if(unlikely(!st)) {
938 st = rrdset_create_localhost(
939 "nfsd"
940 , "proc4"
@@ -888,14 +949,16 @@ int do_proc_net_rpc_nfsd(int update_every, usec_t dt) {
949 , update_every
950 , RRDSET_TYPE_STACKED
951 );
891 -
892 - for(i = 0; nfsd_proc4_values[i].present ; i++)
893 - rrddim_add(st, nfsd_proc4_values[i].name, NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
952 }
953 else rrdset_next(st);
954
897 - for(i = 0; nfsd_proc4_values[i].present ; i++)
898 - rrddim_set(st, nfsd_proc4_values[i].name, nfsd_proc4_values[i].value);
955 + size_t i;
956 + for(i = 0; nfsd_proc4_values[i].present ; i++) {
957 + if(unlikely(!nfsd_proc4_values[i].rd))
958 + nfsd_proc4_values[i].rd = rrddim_add(st, nfsd_proc4_values[i].name, NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
959 +
960 + rrddim_set_by_pointer(st, nfsd_proc4_values[i].rd, nfsd_proc4_values[i].value);
961 + }
962
963 rrdset_done(st);
964 }
@@ -903,9 +966,8 @@ int do_proc_net_rpc_nfsd(int update_every, usec_t dt) {
966 // --------------------------------------------------------------------
967
968 if(do_proc4ops == 2) {
906 - unsigned int i;
907 - st = rrdset_find_bytype_localhost("nfsd", "proc4ops");
908 - if(!st) {
969 + static RRDSET *st = NULL;
970 + if(unlikely(!st)) {
971 st = rrdset_create_localhost(
972 "nfsd"
973 , "proc4ops"
@@ -920,14 +982,16 @@ int do_proc_net_rpc_nfsd(int update_every, usec_t dt) {
982 , update_every
983 , RRDSET_TYPE_STACKED
984 );
923 -
924 - for(i = 0; nfsd4_ops_values[i].present ; i++)
925 - rrddim_add(st, nfsd4_ops_values[i].name, NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
985 }
986 else rrdset_next(st);
987
929 - for(i = 0; nfsd4_ops_values[i].present ; i++)
930 - rrddim_set(st, nfsd4_ops_values[i].name, nfsd4_ops_values[i].value);
988 + size_t i;
989 + for(i = 0; nfsd4_ops_values[i].present ; i++) {
990 + if(unlikely(!nfsd4_ops_values[i].rd))
991 + nfsd4_ops_values[i].rd = rrddim_add(st, nfsd4_ops_values[i].name, NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
992 +
993 + rrddim_set_by_pointer(st, nfsd4_ops_values[i].rd, nfsd4_ops_values[i].value);
994 + }
995
996 rrdset_done(st);
997 }
src/proc_net_stat_conntrack.c
+59 -34
@@ -129,6 +129,8 @@ int do_proc_net_stat_conntrack(int update_every, usec_t dt) {
129
130 if(do_sockets) {
131 static RRDSET *st = NULL;
132 + static RRDDIM *rd_connections = NULL;
133 +
134 if(unlikely(!st)) {
135 st = rrdset_create_localhost(
136 RRD_TYPE_NET_STAT_NETFILTER
@@ -145,11 +147,11 @@ int do_proc_net_stat_conntrack(int update_every, usec_t dt) {
147 , RRDSET_TYPE_LINE
148 );
149
148 - rrddim_add(st, "connections", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
150 + rd_connections = rrddim_add(st, "connections", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
151 }
152 else rrdset_next(st);
153
152 - rrddim_set(st, "connections", aentries);
154 + rrddim_set_by_pointer(st, rd_connections, aentries);
155 rrdset_done(st);
156 }
157
@@ -157,6 +159,11 @@ int do_proc_net_stat_conntrack(int update_every, usec_t dt) {
159
160 if(do_new) {
161 static RRDSET *st = NULL;
162 + static RRDDIM
163 + *rd_new = NULL,
164 + *rd_ignore = NULL,
165 + *rd_invalid = NULL;
166 +
167 if(unlikely(!st)) {
168 st = rrdset_create_localhost(
169 RRD_TYPE_NET_STAT_NETFILTER
@@ -173,15 +180,15 @@ int do_proc_net_stat_conntrack(int update_every, usec_t dt) {
180 , RRDSET_TYPE_LINE
181 );
182
176 - rrddim_add(st, "new", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
177 - rrddim_add(st, "ignore", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
178 - rrddim_add(st, "invalid", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
183 + rd_new = rrddim_add(st, "new", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
184 + rd_ignore = rrddim_add(st, "ignore", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
185 + rd_invalid = rrddim_add(st, "invalid", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
186 }
187 else rrdset_next(st);
188
182 - rrddim_set(st, "new", anew);
183 - rrddim_set(st, "ignore", aignore);
184 - rrddim_set(st, "invalid", ainvalid);
189 + rrddim_set_by_pointer(st, rd_new, anew);
190 + rrddim_set_by_pointer(st, rd_ignore, aignore);
191 + rrddim_set_by_pointer(st, rd_invalid, ainvalid);
192 rrdset_done(st);
193 }
194
@@ -189,6 +196,11 @@ int do_proc_net_stat_conntrack(int update_every, usec_t dt) {
196
197 if(do_changes) {
198 static RRDSET *st = NULL;
199 + static RRDDIM
200 + *rd_inserted = NULL,
201 + *rd_deleted = NULL,
202 + *rd_delete_list = NULL;
203 +
204 if(unlikely(!st)) {
205 st = rrdset_create_localhost(
206 RRD_TYPE_NET_STAT_NETFILTER
@@ -206,15 +218,15 @@ int do_proc_net_stat_conntrack(int update_every, usec_t dt) {
218 );
219 rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
220
209 - rrddim_add(st, "inserted", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
210 - rrddim_add(st, "deleted", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
211 - rrddim_add(st, "delete_list", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
221 + rd_inserted = rrddim_add(st, "inserted", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
222 + rd_deleted = rrddim_add(st, "deleted", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
223 + rd_delete_list = rrddim_add(st, "delete_list", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
224 }
225 else rrdset_next(st);
226
215 - rrddim_set(st, "inserted", ainsert);
216 - rrddim_set(st, "deleted", adelete);
217 - rrddim_set(st, "delete_list", adelete_list);
227 + rrddim_set_by_pointer(st, rd_inserted, ainsert);
228 + rrddim_set_by_pointer(st, rd_deleted, adelete);
229 + rrddim_set_by_pointer(st, rd_delete_list, adelete_list);
230 rrdset_done(st);
231 }
232
@@ -222,6 +234,10 @@ int do_proc_net_stat_conntrack(int update_every, usec_t dt) {
234
235 if(do_expect) {
236 static RRDSET *st = NULL;
237 + static RRDDIM *rd_created = NULL,
238 + *rd_deleted = NULL,
239 + *rd_new = NULL;
240 +
241 if(unlikely(!st)) {
242 st = rrdset_create_localhost(
243 RRD_TYPE_NET_STAT_NETFILTER
@@ -239,15 +255,15 @@ int do_proc_net_stat_conntrack(int update_every, usec_t dt) {
255 );
256 rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
257
242 - rrddim_add(st, "created", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
243 - rrddim_add(st, "deleted", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
244 - rrddim_add(st, "new", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
258 + rd_created = rrddim_add(st, "created", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
259 + rd_deleted = rrddim_add(st, "deleted", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
260 + rd_new = rrddim_add(st, "new", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
261 }
262 else rrdset_next(st);
263
248 - rrddim_set(st, "created", aexpect_create);
249 - rrddim_set(st, "deleted", aexpect_delete);
250 - rrddim_set(st, "new", aexpect_new);
264 + rrddim_set_by_pointer(st, rd_created, aexpect_create);
265 + rrddim_set_by_pointer(st, rd_deleted, aexpect_delete);
266 + rrddim_set_by_pointer(st, rd_new, aexpect_new);
267 rrdset_done(st);
268 }
269
@@ -255,6 +271,10 @@ int do_proc_net_stat_conntrack(int update_every, usec_t dt) {
271
272 if(do_search) {
273 static RRDSET *st = NULL;
274 + static RRDDIM *rd_searched = NULL,
275 + *rd_restarted = NULL,
276 + *rd_found = NULL;
277 +
278 if(unlikely(!st)) {
279 st = rrdset_create_localhost(
280 RRD_TYPE_NET_STAT_NETFILTER
@@ -272,15 +292,15 @@ int do_proc_net_stat_conntrack(int update_every, usec_t dt) {
292 );
293 rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
294
275 - rrddim_add(st, "searched", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
276 - rrddim_add(st, "restarted", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
277 - rrddim_add(st, "found", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
295 + rd_searched = rrddim_add(st, "searched", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
296 + rd_restarted = rrddim_add(st, "restarted", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
297 + rd_found = rrddim_add(st, "found", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
298 }
299 else rrdset_next(st);
300
281 - rrddim_set(st, "searched", asearched);
282 - rrddim_set(st, "restarted", asearch_restart);
283 - rrddim_set(st, "found", afound);
301 + rrddim_set_by_pointer(st, rd_searched, asearched);
302 + rrddim_set_by_pointer(st, rd_restarted, asearch_restart);
303 + rrddim_set_by_pointer(st, rd_found, afound);
304 rrdset_done(st);
305 }
306
@@ -288,6 +308,11 @@ int do_proc_net_stat_conntrack(int update_every, usec_t dt) {
308
309 if(do_errors) {
310 static RRDSET *st = NULL;
311 + static RRDDIM *rd_icmp_error = NULL,
312 + *rd_insert_failed = NULL,
313 + *rd_drop = NULL,
314 + *rd_early_drop = NULL;
315 +
316 if(unlikely(!st)) {
317 st = rrdset_create_localhost(
318 RRD_TYPE_NET_STAT_NETFILTER
@@ -305,17 +330,17 @@ int do_proc_net_stat_conntrack(int update_every, usec_t dt) {
330 );
331 rrdset_flag_set(st, RRDSET_FLAG_DETAIL);
332
308 - rrddim_add(st, "icmp_error", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
309 - rrddim_add(st, "insert_failed", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
310 - rrddim_add(st, "drop", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
311 - rrddim_add(st, "early_drop", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
333 + rd_icmp_error = rrddim_add(st, "icmp_error", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
334 + rd_insert_failed = rrddim_add(st, "insert_failed", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
335 + rd_drop = rrddim_add(st, "drop", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
336 + rd_early_drop = rrddim_add(st, "early_drop", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
337 }
338 else rrdset_next(st);
339
315 - rrddim_set(st, "icmp_error", aicmp_error);
316 - rrddim_set(st, "insert_failed", ainsert_failed);
317 - rrddim_set(st, "drop", adrop);
318 - rrddim_set(st, "early_drop", aearly_drop);
340 + rrddim_set_by_pointer(st, rd_icmp_error, aicmp_error);
341 + rrddim_set_by_pointer(st, rd_insert_failed, ainsert_failed);
342 + rrddim_set_by_pointer(st, rd_drop, adrop);
343 + rrddim_set_by_pointer(st, rd_early_drop, aearly_drop);
344 rrdset_done(st);
345 }
346