Skip to content

Commit 4d170fa

Browse files
committed
PCP: Resolve nested derived metric definitions for devices
Previously these expressions were (incorrectly) silently failing to evaluate because a derived metric expression was geing nested which isn't valid. Now libpcp generates several warnings like: "Semantic error: derived metric htop.screen.disks.read_await: operand disk.dev.r_await: Illegal nested derived metric" Fortunately they're all simple expressions so just unwinding the nesting is the simplest fix. Add in help text for good measure.
1 parent 8dfe7ed commit 4d170fa

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

pcp/screens/devices

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,13 @@ read_merge_pct.caption = Percentage reads merged before queued
3535
read_merge_pct.format = percent
3636

3737
read_await.heading = RAWAIT
38-
read_await.metric = disk.dev.r_await
38+
read_await.metric = delta(disk.dev.read_rawactive) / delta(disk.dev.read)
39+
read_await.caption = Average time read requests queued and serviced
3940
read_await.default = false
4041

4142
read_avqsz.heading = RARQSZ
42-
read_avqsz.metric = disk.dev.r_avg_rqsz
43+
read_avqsz.metric = rescale(delta(disk.dev.read_bytes), "kbyte") / delta(disk.dev.read)
44+
read_avqsz.caption = Average I/O request size for reads to the device
4345
read_avqsz.default = false
4446

4547
write.heading = WR/S
@@ -61,11 +63,13 @@ write_merge_pct.caption = Percentage writes merged before queued
6163
write_merge_pct.format = percent
6264

6365
write_await.heading = WAWAIT
64-
write_await.metric = disk.dev.w_await
66+
write_await.metric = delta(disk.dev.write_rawactive) / delta(disk.dev.write)
67+
write_await.caption = Average time write requests queued and serviced
6568
write_await.default = false
6669

6770
write_avqsz.heading = WARQSZ
68-
write_avqsz.metric = disk.dev.w_avg_rqsz
71+
write_avqsz.metric = rescale(delta(disk.dev.write_bytes), "kbyte") / delta(disk.dev.write)
72+
write_avqsz.caption = Average I/O request size for writes to the device
6973
write_avqsz.default = false
7074

7175
discard.heading = DR/S
@@ -89,11 +93,13 @@ discard_merge_pct.format = percent
8993
discard_merge_pct.default = false
9094

9195
discard_await.heading = DAWAIT
92-
discard_await.metric = disk.dev.d_await
96+
discard_await.metric = delta(disk.dev.discard_rawactive) / delta(disk.dev.discard)
97+
discard_await.caption = Average time discard requests queued and serviced
9398
discard_await.default = false
9499

95100
discard_avqsz.heading = DARQSZ
96-
discard_avqsz.metric = disk.dev.d_avg_rqsz
101+
discard_avqsz.metric = rescale(delta(disk.dev.discard_bytes), "kbyte") / delta(disk.dev.discard)
102+
discard_avqsz.caption = Average I/O request size for discards to the device
97103
discard_avqsz.default = false
98104

99105
flush.heading = F/S
@@ -102,13 +108,15 @@ flush.default = false
102108
flush.caption = Flushes per second
103109

104110
flush_await.heading = FAWAIT
105-
flush_await.metric = disk.dev.f_await
111+
flush_await.metric = delta(disk.dev.flush_rawactive) / delta(disk.dev.flush)
112+
flush_await.caption = Average time that flush requests were queued and serviced
106113
flush_await.default = false
107114

108115
qlen.heading = AQU-SZ
109-
qlen.metric = disk.dev.avg_qlen
116+
qlen.metric = rate(disk.dev.read_rawactive) + rate(disk.dev.write_rawactive)
117+
qlen.caption = Average read and write I/O queue length to the device
110118

111119
util.heading = UTIL%
112-
util.metric = 100 * disk.dev.util
113-
util.caption = Perentage device utilization
120+
util.metric = 100 * rate(disk.dev.avactive)
121+
util.caption = Perentage of time device was busy processing requests
114122
util.format = percent

0 commit comments

Comments
 (0)