File: memory.py

package info (click to toggle)
dpdk 25.11-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 127,892 kB
  • sloc: ansic: 2,358,479; python: 16,426; sh: 4,474; makefile: 1,713; awk: 70
file content (37 lines) | stat: -rw-r--r-- 1,117 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# SPDX-License-Identifier: BSD-3-Clause
# Copyright (c) 2023 Robin Jarry

MEM_TOTAL = "total_bytes"
MEM_USED = "used_bytes"


def info() -> "dict[Name, tuple[Description, Type]]":
    return {
        MEM_TOTAL: ("The total size of reserved memory in bytes.", "gauge"),
        MEM_USED: ("The currently used memory in bytes.", "gauge"),
    }


def metrics(sock: "TelemetrySocket") -> "list[tuple[Name, Value, Labels]]":
    zones = {}
    used = 0
    for zone in sock.cmd("/eal/memzone_list") or []:
        z = sock.cmd("/eal/memzone_info", zone)
        start = int(z["Hugepage_base"], 16)
        end = start + (z["Hugepage_size"] * z["Hugepage_used"])
        used += z["Length"]
        for s, e in list(zones.items()):
            if s < start < e < end:
                zones[s] = end
                break
            if start < s < end < e:
                del zones[s]
                zones[start] = e
                break
        else:
            zones[start] = end

    return [
        (MEM_TOTAL, sum(end - start for (start, end) in zones.items()), {}),
        (MEM_USED, max(0, used), {}),
    ]