Skip to content

Commit

Permalink
arcstat: add structural, types, states breakdown
Browse files Browse the repository at this point in the history
add ARC structural breakdown, ARC types breakdown, ARC states breakdown similar to arc_summary

Signed-off-by: Theera K. <[email protected]>

rename column names to fit 5 chars

Signed-off-by: Theera K. <[email protected]>

rename column names to fit 5 chars

Signed-off-by: Theera K. <[email protected]>

add data target, metadata target

Signed-off-by: Theera K. <[email protected]>

add data target, metadata target

Signed-off-by: Theera K. <[email protected]>

fix abd typo

Signed-off-by: Theera K. <[email protected]>

fix abd typo

Signed-off-by: Theera K. <[email protected]>

make column name a bit shorter

Signed-off-by: Theera K. <[email protected]>

make column name a bit shorter

Signed-off-by: Theera K. <[email protected]>

fix structural typo

Signed-off-by: Theera K. <[email protected]>

Delete cmd/arc_summary.py

incorrect file extension

Signed-off-by: Theera K. <[email protected]>

fix structural typo

Signed-off-by: Theera K. <[email protected]>

arcstat: add structural, types, states breakdown

add ARC structural breakdown, ARC types breakdown, ARC states breakdown similar to arc_summary

Signed-off-by: Theera K. <[email protected]>

Update arcstat: add Anonymous, MFU, MRU, Uncached

Signed-off-by: Theera K. <[email protected]>

Update arcstat: add Anonymous, MFU, MRU, Uncached

Signed-off-by: Theera K. <[email protected]>

Update arcstat: add Anonymous, MFU, MRU, Uncached

Signed-off-by: Theera K. <[email protected]>

Update arcstat.1 : add mfusz, mrusz, l2wbytes

Signed-off-by: Theera K. <[email protected]>

Update arcstat: add mfusz, mrusz, l2wbytes

mfusz: MFU size
mrusz: MRU size
l2wbytes: Bytes write per second to the L2ARC

Signed-off-by: Theera K. <[email protected]>

remove extra spaces

Signed-off-by: Theera K. <[email protected]>

arcstat: add target size of data, meta, MFU, MRU

arcstat: add target size of ARC data, ARC metadata, MFU, MRU

Signed-off-by: Theera K. <[email protected]>

arcstat: add target size of data, meta, MFU, MRU

arcstat: add target size of ARC data, ARC metadata, MFU, MRU

Signed-off-by: Theera K. <[email protected]>
  • Loading branch information
tkittich committed Sep 10, 2024
1 parent d4d7945 commit bed3022
Show file tree
Hide file tree
Showing 3 changed files with 286 additions and 1 deletion.
2 changes: 1 addition & 1 deletion cmd/arc_summary
Original file line number Diff line number Diff line change
Expand Up @@ -566,7 +566,7 @@ def section_arc(kstats_dict):
l2_hdr_size = arc_stats['l2_hdr_size']
abd_chunk_waste_size = arc_stats['abd_chunk_waste_size']

prt_1('ARC structal breakdown (current size):', f_bytes(arc_size))
prt_1('ARC structural breakdown (current size):', f_bytes(arc_size))
prt_i2('Compressed size:',
f_perc(compressed_size, arc_size), f_bytes(compressed_size))
prt_i2('Overhead size:',
Expand Down
119 changes: 119 additions & 0 deletions cmd/arcstat.in
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ cols = {
"l2asize": [7, 1024, "Actual (compressed) size of the L2ARC"],
"l2size": [6, 1024, "Size of the L2ARC"],
"l2bytes": [7, 1024, "Bytes read per second from the L2ARC"],
"l2wbytes": [8, 1024, "Bytes written per second to the L2ARC"],
"grow": [4, 1000, "ARC grow disabled"],
"need": [5, 1024, "ARC reclaim need"],
"free": [5, 1024, "ARC free memory"],
Expand All @@ -169,6 +170,83 @@ cols = {
"zactive": [7, 1000, "zfetch prefetches active per second"],
}

# ARC structural breakdown from arc_summary
structfields = {
"cmp": ["compressed", "Compressed"],
"ovh": ["overhead", "Overhead"],
"bon": ["bonus", "Bonus"],
"dno": ["dnode", "Dnode"],
"dbu": ["dbuf", "Dbuf"],
"hdr": ["hdr", "Header"],
"l2h": ["l2_hdr", "L2 header"],
"abd": ["abd_chunk_waste", "ABD chunk waste"],
}
structstats = { # size stats
"percent": "size", # percentage of this value
"sz": ["_size", "size"],
}

# ARC types breakdown from arc_summary
typefields = {
"data": ["data", "ARC data"],
"meta": ["metadata", "ARC metadata"],
}
typestats = { # size stats
"percent": "cachessz", # percentage of this value
"tg": ["_target", "target"],
"sz": ["_size", "size"],
}

# ARC states breakdown from arc_summary
statefields = {
"ano": ["anon", "Anonymous"],
"mfu": ["mfu", "MFU"],
"mru": ["mru", "MRU"],
"unc": ["uncached", "Uncached"],
}
targetstats = {
"percent": "cachessz", # percentage of this value
"fields": ["mfu", "mru"], # only applicable to these fields
"tg": ["_target", "target"],
"dat": ["_data_target", "data target"],
"met": ["_metadata_target", "metadata target"],
}
statestats = { # size stats
"percent": "cachessz", # percentage of this value
"sz": ["_size", "size"],
"data": ["_data", "data size"],
"meta": ["_metadata", "metadata size"],
"eda": ["_evictable_data", "evictable data size"],
"eme": ["_evictable_metadata", "evictable metadata size"],
}
ghoststats = {
"fields": ["mfu", "mru"], # only applicable to these fields
"gsz": ["_ghost_size", "ghost size"],
"gda": ["_ghost_data", "ghost data size"],
"gme": ["_ghost_metadata", "ghost metadata size"],
}

# fields and stats
fieldstats = [
[structfields, structstats],
[typefields, typestats],
[statefields, targetstats, statestats, ghoststats],
]
for fs in fieldstats:
fields, stats = fs[0], fs[1:]
for field, fieldval in fields.items():
for group in stats:
for stat, statval in group.items():
if stat in ["fields", "percent"] or \
("fields" in group and field not in group["fields"]):
continue
colname = field + stat
coldesc = fieldval[1] + " " + statval[1]
cols[colname] = [len(colname), 1024, coldesc]
if "percent" in group:
cols[colname + "%"] = [len(colname) + 1, 100, \
coldesc + " percentage"]

v = {}
hdr = ["time", "read", "ddread", "ddh%", "dmread", "dmh%", "pread", "ph%",
"size", "c", "avail"]
Expand Down Expand Up @@ -286,6 +364,29 @@ def snap_stats():
kstat_update()

cur = kstat

# fill in additional values from arc_summary
cur["caches_size"] = caches_size = cur["anon_data"]+cur["anon_metadata"]+\
cur["mfu_data"]+cur["mfu_metadata"]+cur["mru_data"]+cur["mru_metadata"]+\
cur["uncached_data"]+cur["uncached_metadata"]
s = 4294967296
pd = cur["pd"]
pm = cur["pm"]
meta = cur["meta"]
v = (s-int(pd))*(s-int(meta))/s
cur["mfu_data_target"] = v / 65536 * caches_size / 65536
v = (s-int(pm))*int(meta)/s
cur["mfu_metadata_target"] = v / 65536 * caches_size / 65536
v = int(pd)*(s-int(meta))/s
cur["mru_data_target"] = v / 65536 * caches_size / 65536
v = int(pm)*int(meta)/s
cur["mru_metadata_target"] = v / 65536 * caches_size / 65536

cur["data_target"] = cur["mfu_data_target"] + cur["mru_data_target"]
cur["metadata_target"] = cur["mfu_metadata_target"] + cur["mru_metadata_target"]
cur["mfu_target"] = cur["mfu_data_target"] + cur["mfu_metadata_target"]
cur["mru_target"] = cur["mru_data_target"] + cur["mru_metadata_target"]

for key in cur:
if re.match(key, "class"):
continue
Expand Down Expand Up @@ -506,6 +607,7 @@ def calculate():
global d
global v
global l2exist
global fieldstats

v = dict()
v["time"] = time.strftime("%H:%M:%S", time.localtime())
Expand Down Expand Up @@ -613,6 +715,22 @@ def calculate():
v["zissued"] = d["zfetch_io_issued"] // sint
v["zactive"] = d["zfetch_io_active"] // sint

# ARC structural breakdown, ARC types breakdown, ARC states breakdown
v["cachessz"] = cur["caches_size"]
for fs in fieldstats:
fields, stats = fs[0], fs[1:]
for field, fieldval in fields.items():
for group in stats:
for stat, statval in group.items():
if stat in ["fields", "percent"] or \
("fields" in group and field not in group["fields"]):
continue
colname = field + stat
v[colname] = cur[fieldval[0] + statval[0]]
if "percent" in group:
v[colname + "%"] = 100 * v[colname] // \
v[group["percent"]] if v[group["percent"]] > 0 else 0

if l2exist:
v["l2hits"] = d["l2_hits"] // sint
v["l2miss"] = d["l2_misses"] // sint
Expand All @@ -623,6 +741,7 @@ def calculate():
v["l2asize"] = cur["l2_asize"]
v["l2size"] = cur["l2_size"]
v["l2bytes"] = d["l2_read_bytes"] // sint
v["l2wbytes"] = d["l2_write_bytes"] // sint

v["l2pref"] = cur["l2_prefetch_asize"]
v["l2mfu"] = cur["l2_mfu_asize"]
Expand Down
166 changes: 166 additions & 0 deletions man/man1/arcstat.1
Original file line number Diff line number Diff line change
Expand Up @@ -199,10 +199,176 @@ Size of the L2ARC
mutex_miss per second
.It Sy l2bytes
Bytes read per second from the L2ARC
.It Sy l2wbytes
Bytes written per second to the L2ARC
.It Sy l2miss%
L2ARC access miss percentage
.It Sy l2asize
Actual (compressed) size of the L2ARC
.It Sy cmpsz
Compressed size
.It Sy cmpsz%
Compressed size percentage
.It Sy ovhsz
Overhead size
.It Sy ovhsz%
Overhead size percentage
.It Sy bonsz
Bonus size
.It Sy bonsz%
Bonus size percentage
.It Sy dnosz
Dnode size
.It Sy dnosz%
Dnode size percentage
.It Sy dbusz
Dbuf size
.It Sy dbusz%
Dbuf size percentage
.It Sy hdrsz
Header size
.It Sy hdrsz%
Header size percentage
.It Sy l2hsz
L2 header size
.It Sy l2hsz%
L2 header size percentage
.It Sy abdsz
ABD chunk waste size
.It Sy abdsz%
ABD chunk waste size percentage
.It Sy datatg
ARC data target
.It Sy datatg%
ARC data target percentage
.It Sy datasz
ARC data size
.It Sy datasz%
ARC data size percentage
.It Sy metatg
ARC metadata target
.It Sy metatg%
ARC metadata target percentage
.It Sy metasz
ARC metadata size
.It Sy metasz%
ARC metadata size percentage
.It Sy anosz
Anonymous size
.It Sy anosz%
Anonymous size percentage
.It Sy anodata
Anonymous data size
.It Sy anodata%
Anonymous data size percentage
.It Sy anometa
Anonymous metadata size
.It Sy anometa%
Anonymous metadata size percentage
.It Sy anoeda
Anonymous evictable data size
.It Sy anoeda%
Anonymous evictable data size percentage
.It Sy anoeme
Anonymous evictable metadata size
.It Sy anoeme%
Anonymous evictable metadata size percentage
.It Sy mfutg
MFU target
.It Sy mfutg%
MFU target percentage
.It Sy mfudat
MFU data target
.It Sy mfudat%
MFU data target percentage
.It Sy mfumet
MFU metadata target
.It Sy mfumet%
MFU metadata target percentage
.It Sy mfusz
MFU size
.It Sy mfusz%
MFU size percentage
.It Sy mfudata
MFU data size
.It Sy mfudata%
MFU data size percentage
.It Sy mfumeta
MFU metadata size
.It Sy mfumeta%
MFU metadata size percentage
.It Sy mfueda
MFU evictable data size
.It Sy mfueda%
MFU evictable data size percentage
.It Sy mfueme
MFU evictable metadata size
.It Sy mfueme%
MFU evictable metadata size percentage
.It Sy mfugsz
MFU ghost size
.It Sy mfugda
MFU ghost data size
.It Sy mfugme
MFU ghost metadata size
.It Sy mrutg
MRU target
.It Sy mrutg%
MRU target percentage
.It Sy mrudat
MRU data target
.It Sy mrudat%
MRU data target percentage
.It Sy mrumet
MRU metadata target
.It Sy mrumet%
MRU metadata target percentage
.It Sy mrusz
MRU size
.It Sy mrusz%
MRU size percentage
.It Sy mrudata
MRU data size
.It Sy mrudata%
MRU data size percentage
.It Sy mrumeta
MRU metadata size
.It Sy mrumeta%
MRU metadata size percentage
.It Sy mrueda
MRU evictable data size
.It Sy mrueda%
MRU evictable data size percentage
.It Sy mrueme
MRU evictable metadata size
.It Sy mrueme%
MRU evictable metadata size percentage
.It Sy mrugsz
MRU ghost size
.It Sy mrugda
MRU ghost data size
.It Sy mrugme
MRU ghost metadata size
.It Sy uncsz
Uncached size
.It Sy uncsz%
Uncached size percentage
.It Sy uncdata
Uncached data size
.It Sy uncdata%
Uncached data size percentage
.It Sy uncmeta
Uncached metadata size
.It Sy uncmeta%
Uncached metadata size percentage
.It Sy unceda
Uncached evictable data size
.It Sy unceda%
Uncached evictable data size percentage
.It Sy unceme
Uncached evictable metadata size
.It Sy unceme%
Uncached evictable metadata size percentage
.It Sy grow
ARC grow disabled
.It Sy need
Expand Down

0 comments on commit bed3022

Please sign in to comment.