Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9e332a7f authored by Alessio Balsini's avatar Alessio Balsini
Browse files

Add kernel memory allocations to bugreport



Add the contents of /proc/allocinfo to the bugreport.
This file shows the current snapshot of all the memory allocated and the
number of allocations associated with kernel code locations.
The collection and processing of /proc/allocinfo is done by calling the
alloctop tool, to return the top entries that allocated most memory.
The kernel memory allocations entry is added to the bugreport only if
the /proc/allocinfo file exists.

As shown below, a rough measurement of the execution time of this
command on Cuttlefish shows an average of ~43 ms.
On the same device, the total number of characters generated by the
command is 6704, so ~6.6 KiB uncompressed.

```
vsoc_x86_64:/ # time for i in $(seq 1 1000); do
  alloctop --once --sort s --min 1 --lines 100 > /dev/null
done
    0m42.25s real     0m00.17s user     0m03.63s system

vsoc_x86_64:/ # alloctop --once --sort s --min 1 --lines 100 | wc -c
6704
```

Bug: 384777823
Test: adb shell dumpstate
Change-Id: Ib8f7eeebe5ad88fc608e2d84582ad32e1b069985
Signed-off-by: default avatarAlessio Balsini <balsini@google.com>
parent f408a472
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -128,6 +128,7 @@ cc_binary {
        "main.cpp",
        "main.cpp",
    ],
    ],
    required: [
    required: [
        "alloctop",
        "atrace",
        "atrace",
        "bugreport_procdump",
        "bugreport_procdump",
        "dmabuf_dump",
        "dmabuf_dump",
+11 −0
Original line number Original line Diff line number Diff line
@@ -1257,6 +1257,15 @@ static void DumpIpAddrAndRules() {
    RunCommand("IP RULES v6", {"ip", "-6", "rule", "show"});
    RunCommand("IP RULES v6", {"ip", "-6", "rule", "show"});
}
}


static void DumpKernelMemoryAllocations() {
    if (!access("/proc/allocinfo", F_OK)) {
        // Print the top 100 biggest memory allocations of at least one byte.
        // The output is sorted by size, descending.
        RunCommand("KERNEL MEMORY ALLOCATIONS",
                   {"alloctop", "--once", "--sort", "s", "--min", "1", "--lines", "100"});
    }
}

static Dumpstate::RunStatus RunDumpsysTextByPriority(const std::string& title, int priority,
static Dumpstate::RunStatus RunDumpsysTextByPriority(const std::string& title, int priority,
                                                     std::chrono::milliseconds timeout,
                                                     std::chrono::milliseconds timeout,
                                                     std::chrono::milliseconds service_timeout) {
                                                     std::chrono::milliseconds service_timeout) {
@@ -1766,6 +1775,8 @@ Dumpstate::RunStatus Dumpstate::dumpstate() {


    DoKmsg();
    DoKmsg();


    DumpKernelMemoryAllocations();

    DumpShutdownCheckpoints();
    DumpShutdownCheckpoints();


    DumpIpAddrAndRules();
    DumpIpAddrAndRules();