]>
Commit | Line | Data |
---|---|---|
c79374e7 TL |
1 | From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
2 | From: Thomas Lamprecht <t.lamprecht@proxmox.com> | |
3 | Date: Wed, 10 Nov 2021 09:29:47 +0100 | |
4 | Subject: [PATCH] arc stat/summary: guard access to l2arc MFU/MRU stats | |
5 | ||
6 | commit 085321621e79a75bea41c2b6511da6ebfbf2ba0a added printing MFU | |
7 | and MRU stats for 2.1 user space tools, but those keys are not | |
8 | available in the 2.0 module. That means it may break the arcstat and | |
9 | arc_summary tools after upgrade to 2.1 (user space), before a reboot | |
10 | to the new 2.1 ZFS kernel-module happened, due to python raising a | |
11 | KeyError on the dict access then. | |
12 | ||
13 | Move those two keys to a .get accessor with `0` as fallback, as it | |
14 | should be better to show some possible wrong data for new stat-keys | |
15 | than throwing an exception. | |
16 | ||
17 | Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com> | |
56ef1ea0 SI |
18 | |
19 | also move l2_mfu_asize l2_mru_asize l2_prefetch_asize | |
20 | l2_bufc_data_asize l2_bufc_metadata_asize to .get accessor | |
21 | (these are only present with a cache device in the pool) | |
22 | Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com> | |
f4e2c4ae | 23 | Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com> |
c79374e7 | 24 | --- |
2c95b923 TL |
25 | cmd/arc_summary | 28 ++++++++++++++-------------- |
26 | cmd/arcstat.in | 14 +++++++------- | |
56ef1ea0 | 27 | 2 files changed, 21 insertions(+), 21 deletions(-) |
c79374e7 | 28 | |
2c95b923 | 29 | diff --git a/cmd/arc_summary b/cmd/arc_summary |
76119aa3 | 30 | index 100fb1987..86b2260a1 100755 |
2c95b923 TL |
31 | --- a/cmd/arc_summary |
32 | +++ b/cmd/arc_summary | |
33 | @@ -655,13 +655,13 @@ def section_arc(kstats_dict): | |
c79374e7 TL |
34 | prt_i1('L2 cached evictions:', f_bytes(arc_stats['evict_l2_cached'])) |
35 | prt_i1('L2 eligible evictions:', f_bytes(arc_stats['evict_l2_eligible'])) | |
36 | prt_i2('L2 eligible MFU evictions:', | |
37 | - f_perc(arc_stats['evict_l2_eligible_mfu'], | |
38 | + f_perc(arc_stats.get('evict_l2_eligible_mfu', 0), # 2.0 module compat | |
39 | arc_stats['evict_l2_eligible']), | |
eb93ae91 TL |
40 | - f_bytes(arc_stats['evict_l2_eligible_mfu'])) |
41 | + f_bytes(arc_stats.get('evict_l2_eligible_mfu', 0))) | |
c79374e7 TL |
42 | prt_i2('L2 eligible MRU evictions:', |
43 | - f_perc(arc_stats['evict_l2_eligible_mru'], | |
44 | + f_perc(arc_stats.get('evict_l2_eligible_mru', 0), # 2.0 module compat | |
45 | arc_stats['evict_l2_eligible']), | |
eb93ae91 TL |
46 | - f_bytes(arc_stats['evict_l2_eligible_mru'])) |
47 | + f_bytes(arc_stats.get('evict_l2_eligible_mru', 0))) | |
c79374e7 | 48 | prt_i1('L2 ineligible evictions:', |
eb93ae91 TL |
49 | f_bytes(arc_stats['evict_l2_ineligible'])) |
50 | print() | |
76119aa3 | 51 | @@ -860,20 +860,20 @@ def section_l2arc(kstats_dict): |
56ef1ea0 SI |
52 | f_perc(arc_stats['l2_hdr_size'], arc_stats['l2_size']), |
53 | f_bytes(arc_stats['l2_hdr_size'])) | |
54 | prt_i2('MFU allocated size:', | |
55 | - f_perc(arc_stats['l2_mfu_asize'], arc_stats['l2_asize']), | |
56 | - f_bytes(arc_stats['l2_mfu_asize'])) | |
57 | + f_perc(arc_stats.get('l2_mfu_asize', 0), arc_stats['l2_asize']), | |
58 | + f_bytes(arc_stats.get('l2_mfu_asize', 0))) # 2.0 module compat | |
59 | prt_i2('MRU allocated size:', | |
60 | - f_perc(arc_stats['l2_mru_asize'], arc_stats['l2_asize']), | |
61 | - f_bytes(arc_stats['l2_mru_asize'])) | |
62 | + f_perc(arc_stats.get('l2_mru_asize', 0), arc_stats['l2_asize']), | |
63 | + f_bytes(arc_stats.get('l2_mru_asize', 0))) # 2.0 module compat | |
64 | prt_i2('Prefetch allocated size:', | |
65 | - f_perc(arc_stats['l2_prefetch_asize'], arc_stats['l2_asize']), | |
66 | - f_bytes(arc_stats['l2_prefetch_asize'])) | |
67 | + f_perc(arc_stats.get('l2_prefetch_asize', 0), arc_stats['l2_asize']), | |
68 | + f_bytes(arc_stats.get('l2_prefetch_asize',0))) # 2.0 module compat | |
69 | prt_i2('Data (buffer content) allocated size:', | |
70 | - f_perc(arc_stats['l2_bufc_data_asize'], arc_stats['l2_asize']), | |
71 | - f_bytes(arc_stats['l2_bufc_data_asize'])) | |
72 | + f_perc(arc_stats.get('l2_bufc_data_asize', 0), arc_stats['l2_asize']), | |
73 | + f_bytes(arc_stats.get('l2_bufc_data_asize', 0))) # 2.0 module compat | |
74 | prt_i2('Metadata (buffer content) allocated size:', | |
75 | - f_perc(arc_stats['l2_bufc_metadata_asize'], arc_stats['l2_asize']), | |
76 | - f_bytes(arc_stats['l2_bufc_metadata_asize'])) | |
77 | + f_perc(arc_stats.get('l2_bufc_metadata_asize', 0), arc_stats['l2_asize']), | |
78 | + f_bytes(arc_stats.get('l2_bufc_metadata_asize', 0))) # 2.0 module compat | |
79 | ||
80 | print() | |
81 | prt_1('L2ARC breakdown:', f_hits(l2_access_total)) | |
2c95b923 | 82 | diff --git a/cmd/arcstat.in b/cmd/arcstat.in |
76119aa3 | 83 | index c4f10a1d6..c570dca88 100755 |
2c95b923 TL |
84 | --- a/cmd/arcstat.in |
85 | +++ b/cmd/arcstat.in | |
76119aa3 | 86 | @@ -597,8 +597,8 @@ def calculate(): |
c79374e7 TL |
87 | v["el2skip"] = d["evict_l2_skip"] // sint |
88 | v["el2cach"] = d["evict_l2_cached"] // sint | |
89 | v["el2el"] = d["evict_l2_eligible"] // sint | |
90 | - v["el2mfu"] = d["evict_l2_eligible_mfu"] // sint | |
91 | - v["el2mru"] = d["evict_l2_eligible_mru"] // sint | |
92 | + v["el2mfu"] = d.get("evict_l2_eligible_mfu", 0) // sint | |
93 | + v["el2mru"] = d.get("evict_l2_eligible_mru", 0) // sint | |
94 | v["el2inel"] = d["evict_l2_ineligible"] // sint | |
95 | v["mtxmis"] = d["mutex_miss"] // sint | |
76119aa3 SI |
96 | v["ztotal"] = (d["zfetch_hits"] + d["zfetch_future"] + d["zfetch_stride"] + |
97 | @@ -624,11 +624,11 @@ def calculate(): | |
56ef1ea0 SI |
98 | v["l2size"] = cur["l2_size"] |
99 | v["l2bytes"] = d["l2_read_bytes"] // sint | |
100 | ||
101 | - v["l2pref"] = cur["l2_prefetch_asize"] | |
102 | - v["l2mfu"] = cur["l2_mfu_asize"] | |
103 | - v["l2mru"] = cur["l2_mru_asize"] | |
104 | - v["l2data"] = cur["l2_bufc_data_asize"] | |
105 | - v["l2meta"] = cur["l2_bufc_metadata_asize"] | |
106 | + v["l2pref"] = cur.get("l2_prefetch_asize", 0) | |
107 | + v["l2mfu"] = cur.get("l2_mfu_asize", 0) | |
108 | + v["l2mru"] = cur.get("l2_mru_asize", 0) | |
109 | + v["l2data"] = cur.get("l2_bufc_data_asize", 0) | |
110 | + v["l2meta"] = cur.get("l2_bufc_metadata_asize", 0) | |
111 | v["l2pref%"] = 100 * v["l2pref"] // v["l2asize"] | |
112 | v["l2mfu%"] = 100 * v["l2mfu"] // v["l2asize"] | |
113 | v["l2mru%"] = 100 * v["l2mru"] // v["l2asize"] |