]> git.proxmox.com Git - zfsonlinux.git/blob - debian/patches/0011-arc-stat-summary-guard-access-to-l2arc-MFU-MRU-stats.patch
6a70484825d6f4bfe366dd3069e4648d26cd830f
[zfsonlinux.git] / debian / patches / 0011-arc-stat-summary-guard-access-to-l2arc-MFU-MRU-stats.patch
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>
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>
23 ---
24 cmd/arc_summary/arc_summary3 | 28 ++++++++++++++--------------
25 cmd/arcstat/arcstat.in | 14 +++++++-------
26 2 files changed, 21 insertions(+), 21 deletions(-)
27
28 diff --git a/cmd/arc_summary/arc_summary3 b/cmd/arc_summary/arc_summary3
29 index 7b28012ed..fe6a6d9e2 100755
30 --- a/cmd/arc_summary/arc_summary3
31 +++ b/cmd/arc_summary/arc_summary3
32 @@ -617,13 +617,13 @@ def section_arc(kstats_dict):
33 prt_i1('L2 cached evictions:', f_bytes(arc_stats['evict_l2_cached']))
34 prt_i1('L2 eligible evictions:', f_bytes(arc_stats['evict_l2_eligible']))
35 prt_i2('L2 eligible MFU evictions:',
36 - f_perc(arc_stats['evict_l2_eligible_mfu'],
37 + f_perc(arc_stats.get('evict_l2_eligible_mfu', 0), # 2.0 module compat
38 arc_stats['evict_l2_eligible']),
39 - f_bytes(arc_stats['evict_l2_eligible_mfu']))
40 + f_bytes(arc_stats.get('evict_l2_eligible_mfu', 0)))
41 prt_i2('L2 eligible MRU evictions:',
42 - f_perc(arc_stats['evict_l2_eligible_mru'],
43 + f_perc(arc_stats.get('evict_l2_eligible_mru', 0), # 2.0 module compat
44 arc_stats['evict_l2_eligible']),
45 - f_bytes(arc_stats['evict_l2_eligible_mru']))
46 + f_bytes(arc_stats.get('evict_l2_eligible_mru', 0)))
47 prt_i1('L2 ineligible evictions:',
48 f_bytes(arc_stats['evict_l2_ineligible']))
49 print()
50 @@ -765,20 +765,20 @@ def section_l2arc(kstats_dict):
51 f_perc(arc_stats['l2_hdr_size'], arc_stats['l2_size']),
52 f_bytes(arc_stats['l2_hdr_size']))
53 prt_i2('MFU allocated size:',
54 - f_perc(arc_stats['l2_mfu_asize'], arc_stats['l2_asize']),
55 - f_bytes(arc_stats['l2_mfu_asize']))
56 + f_perc(arc_stats.get('l2_mfu_asize', 0), arc_stats['l2_asize']),
57 + f_bytes(arc_stats.get('l2_mfu_asize', 0))) # 2.0 module compat
58 prt_i2('MRU allocated size:',
59 - f_perc(arc_stats['l2_mru_asize'], arc_stats['l2_asize']),
60 - f_bytes(arc_stats['l2_mru_asize']))
61 + f_perc(arc_stats.get('l2_mru_asize', 0), arc_stats['l2_asize']),
62 + f_bytes(arc_stats.get('l2_mru_asize', 0))) # 2.0 module compat
63 prt_i2('Prefetch allocated size:',
64 - f_perc(arc_stats['l2_prefetch_asize'], arc_stats['l2_asize']),
65 - f_bytes(arc_stats['l2_prefetch_asize']))
66 + f_perc(arc_stats.get('l2_prefetch_asize', 0), arc_stats['l2_asize']),
67 + f_bytes(arc_stats.get('l2_prefetch_asize',0))) # 2.0 module compat
68 prt_i2('Data (buffer content) allocated size:',
69 - f_perc(arc_stats['l2_bufc_data_asize'], arc_stats['l2_asize']),
70 - f_bytes(arc_stats['l2_bufc_data_asize']))
71 + f_perc(arc_stats.get('l2_bufc_data_asize', 0), arc_stats['l2_asize']),
72 + f_bytes(arc_stats.get('l2_bufc_data_asize', 0))) # 2.0 module compat
73 prt_i2('Metadata (buffer content) allocated size:',
74 - f_perc(arc_stats['l2_bufc_metadata_asize'], arc_stats['l2_asize']),
75 - f_bytes(arc_stats['l2_bufc_metadata_asize']))
76 + f_perc(arc_stats.get('l2_bufc_metadata_asize', 0), arc_stats['l2_asize']),
77 + f_bytes(arc_stats.get('l2_bufc_metadata_asize', 0))) # 2.0 module compat
78
79 print()
80 prt_1('L2ARC breakdown:', f_hits(l2_access_total))
81 diff --git a/cmd/arcstat/arcstat.in b/cmd/arcstat/arcstat.in
82 index cd9a803a2..ea45dc602 100755
83 --- a/cmd/arcstat/arcstat.in
84 +++ b/cmd/arcstat/arcstat.in
85 @@ -482,8 +482,8 @@ def calculate():
86 v["el2skip"] = d["evict_l2_skip"] // sint
87 v["el2cach"] = d["evict_l2_cached"] // sint
88 v["el2el"] = d["evict_l2_eligible"] // sint
89 - v["el2mfu"] = d["evict_l2_eligible_mfu"] // sint
90 - v["el2mru"] = d["evict_l2_eligible_mru"] // sint
91 + v["el2mfu"] = d.get("evict_l2_eligible_mfu", 0) // sint
92 + v["el2mru"] = d.get("evict_l2_eligible_mru", 0) // sint
93 v["el2inel"] = d["evict_l2_ineligible"] // sint
94 v["mtxmis"] = d["mutex_miss"] // sint
95
96 @@ -498,11 +498,11 @@ def calculate():
97 v["l2size"] = cur["l2_size"]
98 v["l2bytes"] = d["l2_read_bytes"] // sint
99
100 - v["l2pref"] = cur["l2_prefetch_asize"]
101 - v["l2mfu"] = cur["l2_mfu_asize"]
102 - v["l2mru"] = cur["l2_mru_asize"]
103 - v["l2data"] = cur["l2_bufc_data_asize"]
104 - v["l2meta"] = cur["l2_bufc_metadata_asize"]
105 + v["l2pref"] = cur.get("l2_prefetch_asize", 0)
106 + v["l2mfu"] = cur.get("l2_mfu_asize", 0)
107 + v["l2mru"] = cur.get("l2_mru_asize", 0)
108 + v["l2data"] = cur.get("l2_bufc_data_asize", 0)
109 + v["l2meta"] = cur.get("l2_bufc_metadata_asize", 0)
110 v["l2pref%"] = 100 * v["l2pref"] // v["l2asize"]
111 v["l2mfu%"] = 100 * v["l2mfu"] // v["l2asize"]
112 v["l2mru%"] = 100 * v["l2mru"] // v["l2asize"]