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