xref: /dpdk/usertools/telemetry-endpoints/memory.py (revision d94ebd627a86dfbc0ccf8d7d3802196c55d826cf)
1*d94ebd62SRobin Jarry# SPDX-License-Identifier: BSD-3-Clause
2*d94ebd62SRobin Jarry# Copyright (c) 2023 Robin Jarry
3*d94ebd62SRobin Jarry
4*d94ebd62SRobin JarryMEM_TOTAL = "total_bytes"
5*d94ebd62SRobin JarryMEM_USED = "used_bytes"
6*d94ebd62SRobin Jarry
7*d94ebd62SRobin Jarry
8*d94ebd62SRobin Jarrydef info() -> "dict[Name, tuple[Description, Type]]":
9*d94ebd62SRobin Jarry    return {
10*d94ebd62SRobin Jarry        MEM_TOTAL: ("The total size of reserved memory in bytes.", "gauge"),
11*d94ebd62SRobin Jarry        MEM_USED: ("The currently used memory in bytes.", "gauge"),
12*d94ebd62SRobin Jarry    }
13*d94ebd62SRobin Jarry
14*d94ebd62SRobin Jarry
15*d94ebd62SRobin Jarrydef metrics(sock: "TelemetrySocket") -> "list[tuple[Name, Value, Labels]]":
16*d94ebd62SRobin Jarry    zones = {}
17*d94ebd62SRobin Jarry    used = 0
18*d94ebd62SRobin Jarry    for zone in sock.cmd("/eal/memzone_list") or []:
19*d94ebd62SRobin Jarry        z = sock.cmd("/eal/memzone_info", zone)
20*d94ebd62SRobin Jarry        start = int(z["Hugepage_base"], 16)
21*d94ebd62SRobin Jarry        end = start + (z["Hugepage_size"] * z["Hugepage_used"])
22*d94ebd62SRobin Jarry        used += z["Length"]
23*d94ebd62SRobin Jarry        for s, e in list(zones.items()):
24*d94ebd62SRobin Jarry            if s < start < e < end:
25*d94ebd62SRobin Jarry                zones[s] = end
26*d94ebd62SRobin Jarry                break
27*d94ebd62SRobin Jarry            if start < s < end < e:
28*d94ebd62SRobin Jarry                del zones[s]
29*d94ebd62SRobin Jarry                zones[start] = e
30*d94ebd62SRobin Jarry                break
31*d94ebd62SRobin Jarry        else:
32*d94ebd62SRobin Jarry            zones[start] = end
33*d94ebd62SRobin Jarry
34*d94ebd62SRobin Jarry    return [
35*d94ebd62SRobin Jarry        (MEM_TOTAL, sum(end - start for (start, end) in zones.items()), {}),
36*d94ebd62SRobin Jarry        (MEM_USED, max(0, used), {}),
37*d94ebd62SRobin Jarry    ]
38