]> git.proxmox.com Git - zfsonlinux.git/blame - debian/patches/0009-arc-stat-summary-guard-access-to-l2arc-MFU-MRU-stats.patch
update zfs submodule to 2.2.4 and refresh patches
[zfsonlinux.git] / debian / patches / 0009-arc-stat-summary-guard-access-to-l2arc-MFU-MRU-stats.patch
CommitLineData
c79374e7
TL
1From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2From: Thomas Lamprecht <t.lamprecht@proxmox.com>
3Date: Wed, 10 Nov 2021 09:29:47 +0100
4Subject: [PATCH] arc stat/summary: guard access to l2arc MFU/MRU stats
5
6commit 085321621e79a75bea41c2b6511da6ebfbf2ba0a added printing MFU
7and MRU stats for 2.1 user space tools, but those keys are not
8available in the 2.0 module. That means it may break the arcstat and
9arc_summary tools after upgrade to 2.1 (user space), before a reboot
10to the new 2.1 ZFS kernel-module happened, due to python raising a
11KeyError on the dict access then.
12
13Move those two keys to a .get accessor with `0` as fallback, as it
14should be better to show some possible wrong data for new stat-keys
15than throwing an exception.
16
17Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
56ef1ea0
SI
18
19also move l2_mfu_asize l2_mru_asize l2_prefetch_asize
20l2_bufc_data_asize l2_bufc_metadata_asize to .get accessor
21(these are only present with a cache device in the pool)
22Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
f4e2c4ae 23Signed-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 29diff --git a/cmd/arc_summary b/cmd/arc_summary
76119aa3 30index 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 82diff --git a/cmd/arcstat.in b/cmd/arcstat.in
76119aa3 83index 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"]