Application Performance Profiling

Performance issues are a subset of software faults caused by a failure to complete an operation within fixed-time constraints. For example, real-time system such as autonomous vehicles or high-frequency financial trading platforms that fail to perform required actions within millisecond resolution would ultimately result in significant socio-economical impacts. Unlike fatal or logic errors, performance issues may not result in obvious failures like system crashes or incorrect output.

In order to diagnose performance issues, an instrumentation tool called the profiler is used to sample the execution state of the program at regular intervals. By analyzing the profile data, the overconsumption of CPU/memory resources can be isolated to the offending source code file and function.

PSYGIG Mobility IoT SDK provides instrumentation tools to identify hotspots in the program code where overall performance may be affected. The Application Performance Profiling API includes many features suitable for integration into embedded systems:

  • Works on existing applications; no need to recompile source code

  • Multiplatform support

  • Seamless integration with third party APM platforms

  • Automatically collect CPU usage profiling data, generating call trees that identify performance hotspots

  • Generate periodic memory usage snapshots, providing a stack trace of where memory is being allocated/de-allocated

  • Identify memory leaks in your program

  • Generate an application performance HTML report

Using psymon

Without modifying your existing source code, you can instantly enable performance profiling to your application by using the psymon script to run your program. For example:

psymon --profile "/path/to/your/app --arg1 --arg2 --arg3"

See psymon man page for a complete list of options.

Using C/C++ SDK API

The Application Performance Profiling API can be accessed by including a single header file and linking the libpsyiage shared library. See Advanced Setup - Building your application with libpsyiage for details.

Start/stop CPU profiler

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#include <psyiage/psyiagesdk.h>

int main(int argc, char **argv)
{
    psyiage_handle     pah;  // handle to psyiage instance

    /* ... Initialize code omitted for simplicity ... */

    // Start CPU profiler
    rc = psyiage_profile_enable_profiling(pah, 10);

    /* Some code to profile */

    // Stop CPU profiler
    rc = psyiage_profile_enable_profiling(pah, 0);

    /* ... Cleanup code omitted for simplicity ... */
}

Generate memory usage snapshot

Note

Generate memory usage snapshot is a work-in-progress. Please contact us if you are interested in beta-testing this feature.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#include <psyiage/psyiagesdk.h>

int main(int argc, char **argv)
{
    psyiage_handle     pah;  // handle to psyiage instance

    /* ... Initialize code omitted for simplicity ... */

    // Capture memory snapshot
    rc = psyiage_profile_memory_snapshot(pah);

    /* ... Cleanup code omitted for simplicity ... */
}

Sample JSON CPU profile data

{
    "CPUProfile": {
    "Duration": 6.971331596,
    "Timestamp": 1559354468.148161173,
    "TimeOfDay": "2019-06-01 11:01:08.148161172",
    "Samples": [
    {
        "ThreadId": "0x00007f49a2367800",
        "Count": 1,
        "Depth": 10,
        "StackTrace": [
        {
        "FrameNum": 1,
        "InstrAddr": "0x000055d0471b2f38",
        "FilePathId": 0,
        "FunctionId": 1,
        "Offset": "0xf148"
        },
        {
        "FrameNum": 2,
        "InstrAddr": "0x000055d0471b3dc1",
        "FilePathId": 0,
        "FunctionId": 1,
        "Offset": "0xffd1"
        },
        {
        "FrameNum": 3,
        "InstrAddr": "0x000055d0471aad13",
        "FilePathId": 0,
        "FunctionId": 1,
        "Offset": "0x6f23"
        },
        {
        "FrameNum": 4,
        "InstrAddr": "0x000055d04719d6f2",
        "FilePathId": 0,
        "FunctionId": 2,
        "Offset": "0x32"
        },
        {
        "FrameNum": 5,
        "InstrAddr": "0x000055d0471a27ae",
        "FilePathId": 0,
        "FunctionId": 3,
        "Offset": "0x45de"
        },
        {
        "FrameNum": 6,
        "InstrAddr": "0x000055d0471a27ae",
        "FilePathId": 0,
        "FunctionId": 3,
        "Offset": "0x45de"
        },
        {
        "FrameNum": 7,
        "InstrAddr": "0x000055d04719cb2a",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0xf32"
        },
        {
        "FrameNum": 8,
        "InstrAddr": "0x000055d04719c221",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0x629"
        },
        {
        "FrameNum": 9,
        "InstrAddr": "0x00007f49a11bc830",
        "FilePathId": 5,
        "FunctionId": 6,
        "Offset": "0xf0"
        },
        {
        "FrameNum": 10,
        "InstrAddr": "0x000055d04719c369",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0x771"
        }
        ]
    },
    {
        "ThreadId": "0x00007f49a2367800",
        "Count": 7,
        "Depth": 8,
        "StackTrace": [
        {
        "FrameNum": 1,
        "InstrAddr": "0x00007f49a12648eb",
        "FilePathId": 5,
        "FunctionId": 7,
        "Offset": "0x3b"
        },
        {
        "FrameNum": 2,
        "InstrAddr": "0x00007f49a12644b1",
        "FilePathId": 5,
        "FunctionId": 8,
        "Offset": "0x91"
        },
        {
        "FrameNum": 3,
        "InstrAddr": "0x000055d0471b6bb8",
        "FilePathId": 0,
        "FunctionId": 1,
        "Offset": "0x12dc8"
        },
        {
        "FrameNum": 4,
        "InstrAddr": "0x000055d0471b7e6c",
        "FilePathId": -1,
        "FunctionId": 9,
        "Offset": "0x4fc"
        },
        {
        "FrameNum": 5,
        "InstrAddr": "0x000055d04719c7a0",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0xba8"
        },
        {
        "FrameNum": 6,
        "InstrAddr": "0x000055d04719c221",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0x629"
        },
        {
        "FrameNum": 7,
        "InstrAddr": "0x00007f49a11bc830",
        "FilePathId": 5,
        "FunctionId": 6,
        "Offset": "0xf0"
        },
        {
        "FrameNum": 8,
        "InstrAddr": "0x000055d04719c369",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0x771"
        }
        ]
    },
    {
        "ThreadId": "0x00007f49a2367800",
        "Count": 1,
        "Depth": 10,
        "StackTrace": [
        {
        "FrameNum": 1,
        "InstrAddr": "0x00007f49a11e9319",
        "FilePathId": 5,
        "FunctionId": 10,
        "Offset": "0x1a9"
        },
        {
        "FrameNum": 2,
        "InstrAddr": "0x00007f49a12b2bc9",
        "FilePathId": 5,
        "FunctionId": 11,
        "Offset": "0xf9"
        },
        {
        "FrameNum": 3,
        "InstrAddr": "0x000055d0471aad45",
        "FilePathId": 0,
        "FunctionId": 1,
        "Offset": "0x6f55"
        },
        {
        "FrameNum": 4,
        "InstrAddr": "0x000055d04719d6f2",
        "FilePathId": 0,
        "FunctionId": 2,
        "Offset": "0x32"
        },
        {
        "FrameNum": 5,
        "InstrAddr": "0x000055d0471a27ae",
        "FilePathId": 0,
        "FunctionId": 3,
        "Offset": "0x45de"
        },
        {
        "FrameNum": 6,
        "InstrAddr": "0x000055d0471a27ae",
        "FilePathId": 0,
        "FunctionId": 3,
        "Offset": "0x45de"
        },
        {
        "FrameNum": 7,
        "InstrAddr": "0x000055d04719cb2a",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0xf32"
        },
        {
        "FrameNum": 8,
        "InstrAddr": "0x000055d04719c221",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0x629"
        },
        {
        "FrameNum": 9,
        "InstrAddr": "0x00007f49a11bc830",
        "FilePathId": 5,
        "FunctionId": 6,
        "Offset": "0xf0"
        },
        {
        "FrameNum": 10,
        "InstrAddr": "0x000055d04719c369",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0x771"
        }
        ]
    },
    {
        "ThreadId": "0x00007f49a2367800",
        "Count": 1,
        "Depth": 11,
        "StackTrace": [
        {
        "FrameNum": 1,
        "InstrAddr": "0x00007f49a11c8b74",
        "FilePathId": 5,
        "FunctionId": 12,
        "Offset": "0x14"
        },
        {
        "FrameNum": 2,
        "InstrAddr": "0x000055d0471b2cad",
        "FilePathId": 0,
        "FunctionId": 1,
        "Offset": "0xeebd"
        },
        {
        "FrameNum": 3,
        "InstrAddr": "0x000055d0471b3dc1",
        "FilePathId": 0,
        "FunctionId": 1,
        "Offset": "0xffd1"
        },
        {
        "FrameNum": 4,
        "InstrAddr": "0x000055d0471aad13",
        "FilePathId": 0,
        "FunctionId": 1,
        "Offset": "0x6f23"
        },
        {
        "FrameNum": 5,
        "InstrAddr": "0x000055d04719d6f2",
        "FilePathId": 0,
        "FunctionId": 2,
        "Offset": "0x32"
        },
        {
        "FrameNum": 6,
        "InstrAddr": "0x000055d0471a27ae",
        "FilePathId": 0,
        "FunctionId": 3,
        "Offset": "0x45de"
        },
        {
        "FrameNum": 7,
        "InstrAddr": "0x000055d0471a27ae",
        "FilePathId": 0,
        "FunctionId": 3,
        "Offset": "0x45de"
        },
        {
        "FrameNum": 8,
        "InstrAddr": "0x000055d04719cb2a",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0xf32"
        },
        {
        "FrameNum": 9,
        "InstrAddr": "0x000055d04719c221",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0x629"
        },
        {
        "FrameNum": 10,
        "InstrAddr": "0x00007f49a11bc830",
        "FilePathId": 5,
        "FunctionId": 6,
        "Offset": "0xf0"
        },
        {
        "FrameNum": 11,
        "InstrAddr": "0x000055d04719c369",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0x771"
        }
        ]
    },
    {
        "ThreadId": "0x00007f49a2367800",
        "Count": 1,
        "Depth": 9,
        "StackTrace": [
        {
        "FrameNum": 1,
        "InstrAddr": "0x00007f49a121e786",
        "FilePathId": 5,
        "FunctionId": 13,
        "Offset": "0x56b6"
        },
        {
        "FrameNum": 2,
        "InstrAddr": "0x00007f49a1220184",
        "FilePathId": 5,
        "FunctionId": 14,
        "Offset": "0x54"
        },
        {
        "FrameNum": 3,
        "InstrAddr": "0x000055d0471b6313",
        "FilePathId": 0,
        "FunctionId": 1,
        "Offset": "0x12523"
        },
        {
        "FrameNum": 4,
        "InstrAddr": "0x000055d0471b6bf2",
        "FilePathId": -1,
        "FunctionId": 1,
        "Offset": "0x12e02"
        },
        {
        "FrameNum": 5,
        "InstrAddr": "0x000055d0471b7e6c",
        "FilePathId": -1,
        "FunctionId": 9,
        "Offset": "0x4fc"
        },
        {
        "FrameNum": 6,
        "InstrAddr": "0x000055d04719c7a0",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0xba8"
        },
        {
        "FrameNum": 7,
        "InstrAddr": "0x000055d04719c221",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0x629"
        },
        {
        "FrameNum": 8,
        "InstrAddr": "0x00007f49a11bc830",
        "FilePathId": 5,
        "FunctionId": 6,
        "Offset": "0xf0"
        },
        {
        "FrameNum": 9,
        "InstrAddr": "0x000055d04719c369",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0x771"
        }
        ]
    },
    {
        "ThreadId": "0x00007f49a2367800",
        "Count": 1,
        "Depth": 4,
        "StackTrace": [
        {
        "FrameNum": 1,
        "InstrAddr": "0x000055d04719cb02",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0xf0a"
        },
        {
        "FrameNum": 2,
        "InstrAddr": "0x000055d04719c221",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0x629"
        },
        {
        "FrameNum": 3,
        "InstrAddr": "0x00007f49a11bc830",
        "FilePathId": 5,
        "FunctionId": 6,
        "Offset": "0xf0"
        },
        {
        "FrameNum": 4,
        "InstrAddr": "0x000055d04719c369",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0x771"
        }
        ]
    },
    {
        "ThreadId": "0x00007f49a2367800",
        "Count": 42,
        "Depth": 14,
        "StackTrace": [
        {
        "FrameNum": 1,
        "InstrAddr": "0x00007f49a12932c0",
        "FilePathId": 5,
        "FunctionId": 15,
        "Offset": "0x10"
        },
        {
        "FrameNum": 2,
        "InstrAddr": "0x00007f49a1214bff",
        "FilePathId": 5,
        "FunctionId": 16,
        "Offset": "0x8f"
        },
        {
        "FrameNum": 3,
        "InstrAddr": "0x00007f49a1216409",
        "FilePathId": 5,
        "FunctionId": 17,
        "Offset": "0x79"
        },
        {
        "FrameNum": 4,
        "InstrAddr": "0x00007f49a121547d",
        "FilePathId": 5,
        "FunctionId": 18,
        "Offset": "0x29d"
        },
        {
        "FrameNum": 5,
        "InstrAddr": "0x00007f49a11e992d",
        "FilePathId": 5,
        "FunctionId": 10,
        "Offset": "0x7bd"
        },
        {
        "FrameNum": 6,
        "InstrAddr": "0x00007f49a12b2bc9",
        "FilePathId": 5,
        "FunctionId": 11,
        "Offset": "0xf9"
        },
        {
        "FrameNum": 7,
        "InstrAddr": "0x000055d0471aad45",
        "FilePathId": 0,
        "FunctionId": 1,
        "Offset": "0x6f55"
        },
        {
        "FrameNum": 8,
        "InstrAddr": "0x000055d04719d6f2",
        "FilePathId": 0,
        "FunctionId": 2,
        "Offset": "0x32"
        },
        {
        "FrameNum": 9,
        "InstrAddr": "0x000055d0471a27ae",
        "FilePathId": 0,
        "FunctionId": 3,
        "Offset": "0x45de"
        },
        {
        "FrameNum": 10,
        "InstrAddr": "0x000055d0471a27ae",
        "FilePathId": 0,
        "FunctionId": 3,
        "Offset": "0x45de"
        },
        {
        "FrameNum": 11,
        "InstrAddr": "0x000055d04719cb2a",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0xf32"
        },
        {
        "FrameNum": 12,
        "InstrAddr": "0x000055d04719c221",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0x629"
        },
        {
        "FrameNum": 13,
        "InstrAddr": "0x00007f49a11bc830",
        "FilePathId": 5,
        "FunctionId": 6,
        "Offset": "0xf0"
        },
        {
        "FrameNum": 14,
        "InstrAddr": "0x000055d04719c369",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0x771"
        }
        ]
    },
    {
        "ThreadId": "0x00007f49a2367800",
        "Count": 1,
        "Depth": 14,
        "StackTrace": [
        {
        "FrameNum": 1,
        "InstrAddr": "0x00007f49a12932be",
        "FilePathId": 5,
        "FunctionId": 15,
        "Offset": "0xe"
        },
        {
        "FrameNum": 2,
        "InstrAddr": "0x00007f49a1214bff",
        "FilePathId": 5,
        "FunctionId": 16,
        "Offset": "0x8f"
        },
        {
        "FrameNum": 3,
        "InstrAddr": "0x00007f49a1216409",
        "FilePathId": 5,
        "FunctionId": 17,
        "Offset": "0x79"
        },
        {
        "FrameNum": 4,
        "InstrAddr": "0x00007f49a121547d",
        "FilePathId": 5,
        "FunctionId": 18,
        "Offset": "0x29d"
        },
        {
        "FrameNum": 5,
        "InstrAddr": "0x00007f49a11e992d",
        "FilePathId": 5,
        "FunctionId": 10,
        "Offset": "0x7bd"
        },
        {
        "FrameNum": 6,
        "InstrAddr": "0x00007f49a12b2bc9",
        "FilePathId": 5,
        "FunctionId": 11,
        "Offset": "0xf9"
        },
        {
        "FrameNum": 7,
        "InstrAddr": "0x000055d0471aad45",
        "FilePathId": 0,
        "FunctionId": 1,
        "Offset": "0x6f55"
        },
        {
        "FrameNum": 8,
        "InstrAddr": "0x000055d04719d6f2",
        "FilePathId": 0,
        "FunctionId": 2,
        "Offset": "0x32"
        },
        {
        "FrameNum": 9,
        "InstrAddr": "0x000055d0471a27ae",
        "FilePathId": 0,
        "FunctionId": 3,
        "Offset": "0x45de"
        },
        {
        "FrameNum": 10,
        "InstrAddr": "0x000055d0471a27ae",
        "FilePathId": 0,
        "FunctionId": 3,
        "Offset": "0x45de"
        },
        {
        "FrameNum": 11,
        "InstrAddr": "0x000055d04719cb2a",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0xf32"
        },
        {
        "FrameNum": 12,
        "InstrAddr": "0x000055d04719c221",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0x629"
        },
        {
        "FrameNum": 13,
        "InstrAddr": "0x00007f49a11bc830",
        "FilePathId": 5,
        "FunctionId": 6,
        "Offset": "0xf0"
        },
        {
        "FrameNum": 14,
        "InstrAddr": "0x000055d04719c369",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0x771"
        }
        ]
    },
    {
        "ThreadId": "0x00007f49a2367800",
        "Count": 1,
        "Depth": 9,
        "StackTrace": [
        {
        "FrameNum": 1,
        "InstrAddr": "0x000055d0471aae7f",
        "FilePathId": 0,
        "FunctionId": 1,
        "Offset": "0x708f"
        },
        {
        "FrameNum": 2,
        "InstrAddr": "0x000055d0471aad29",
        "FilePathId": 0,
        "FunctionId": 1,
        "Offset": "0x6f39"
        },
        {
        "FrameNum": 3,
        "InstrAddr": "0x000055d04719d6f2",
        "FilePathId": 0,
        "FunctionId": 2,
        "Offset": "0x32"
        },
        {
        "FrameNum": 4,
        "InstrAddr": "0x000055d0471a27ae",
        "FilePathId": 0,
        "FunctionId": 3,
        "Offset": "0x45de"
        },
        {
        "FrameNum": 5,
        "InstrAddr": "0x000055d0471a27ae",
        "FilePathId": 0,
        "FunctionId": 3,
        "Offset": "0x45de"
        },
        {
        "FrameNum": 6,
        "InstrAddr": "0x000055d04719cb2a",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0xf32"
        },
        {
        "FrameNum": 7,
        "InstrAddr": "0x000055d04719c221",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0x629"
        },
        {
        "FrameNum": 8,
        "InstrAddr": "0x00007f49a11bc830",
        "FilePathId": 5,
        "FunctionId": 6,
        "Offset": "0xf0"
        },
        {
        "FrameNum": 9,
        "InstrAddr": "0x000055d04719c369",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0x771"
        }
        ]
    },
    {
        "ThreadId": "0x00007f49a2367800",
        "Count": 1,
        "Depth": 9,
        "StackTrace": [
        {
        "FrameNum": 1,
        "InstrAddr": "0x000055d0471aae35",
        "FilePathId": 0,
        "FunctionId": 1,
        "Offset": "0x7045"
        },
        {
        "FrameNum": 2,
        "InstrAddr": "0x000055d0471aad29",
        "FilePathId": 0,
        "FunctionId": 1,
        "Offset": "0x6f39"
        },
        {
        "FrameNum": 3,
        "InstrAddr": "0x000055d04719d6f2",
        "FilePathId": 0,
        "FunctionId": 2,
        "Offset": "0x32"
        },
        {
        "FrameNum": 4,
        "InstrAddr": "0x000055d0471a27ae",
        "FilePathId": 0,
        "FunctionId": 3,
        "Offset": "0x45de"
        },
        {
        "FrameNum": 5,
        "InstrAddr": "0x000055d0471a27ae",
        "FilePathId": 0,
        "FunctionId": 3,
        "Offset": "0x45de"
        },
        {
        "FrameNum": 6,
        "InstrAddr": "0x000055d04719cb2a",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0xf32"
        },
        {
        "FrameNum": 7,
        "InstrAddr": "0x000055d04719c221",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0x629"
        },
        {
        "FrameNum": 8,
        "InstrAddr": "0x00007f49a11bc830",
        "FilePathId": 5,
        "FunctionId": 6,
        "Offset": "0xf0"
        },
        {
        "FrameNum": 9,
        "InstrAddr": "0x000055d04719c369",
        "FilePathId": 0,
        "FunctionId": 4,
        "Offset": "0x771"
        }
        ]
    }
    ],
    "MemoryMap": [
    {
        "StartAddr": "0x55d047195000",
        "EndAddr": "0x55d0471c8000",
        "Permissions": "r-xp",
        "FileOffset": "0x0",
        "Device": "08:01",
        "Inode": 1573226,
        "FilePathId": 19
    },
    {
        "StartAddr": "0x55d0473c8000",
        "EndAddr": "0x55d0473ca000",
        "Permissions": "r--p",
        "FileOffset": "0x33000",
        "Device": "08:01",
        "Inode": 1573226,
        "FilePathId": 19
    },
    {
        "StartAddr": "0x55d0473ca000",
        "EndAddr": "0x55d0473cb000",
        "Permissions": "rw-p",
        "FileOffset": "0x35000",
        "Device": "08:01",
        "Inode": 1573226,
        "FilePathId": 19
    },
    {
        "StartAddr": "0x55d0473cb000",
        "EndAddr": "0x55d0473cc000",
        "Permissions": "rw-p",
        "FileOffset": "0x0",
        "Device": "00:00",
        "Inode": 0,
        "FilePathId": -1
    },
    {
        "StartAddr": "0x55d04889b000",
        "EndAddr": "0x55d0488c9000",
        "Permissions": "rw-p",
        "FileOffset": "0x0",
        "Device": "00:00",
        "Inode": 0,
        "FilePathId": 20
    },
    {
        "StartAddr": "0x7f49a031c000",
        "EndAddr": "0x7f49a06f1000",
        "Permissions": "r--p",
        "FileOffset": "0x0",
        "Device": "08:01",
        "Inode": 1582240,
        "FilePathId": 21
    },
    {
        "StartAddr": "0x7f49a06f1000",
        "EndAddr": "0x7f49a0b0b000",
        "Permissions": "rw-p",
        "FileOffset": "0x0",
        "Device": "00:00",
        "Inode": 0,
        "FilePathId": -1
    },
    {
        "StartAddr": "0x7f49a0b0b000",
        "EndAddr": "0x7f49a0b79000",
        "Permissions": "r-xp",
        "FileOffset": "0x0",
        "Device": "08:01",
        "Inode": 1971606,
        "FilePathId": 22
    },
    {
        "StartAddr": "0x7f49a0b79000",
        "EndAddr": "0x7f49a0d79000",
        "Permissions": "---p",
        "FileOffset": "0x6e000",
        "Device": "08:01",
        "Inode": 1971606,
        "FilePathId": 22
    },
    {
        "StartAddr": "0x7f49a0d79000",
        "EndAddr": "0x7f49a0d7a000",
        "Permissions": "r--p",
        "FileOffset": "0x6e000",
        "Device": "08:01",
        "Inode": 1971606,
        "FilePathId": 22
    },
    {
        "StartAddr": "0x7f49a0d7a000",
        "EndAddr": "0x7f49a0d7b000",
        "Permissions": "rw-p",
        "FileOffset": "0x6f000",
        "Device": "08:01",
        "Inode": 1971606,
        "FilePathId": 22
    },
    {
        "StartAddr": "0x7f49a0d7b000",
        "EndAddr": "0x7f49a0d7e000",
        "Permissions": "r-xp",
        "FileOffset": "0x0",
        "Device": "08:01",
        "Inode": 1972536,
        "FilePathId": 23
    },
    {
        "StartAddr": "0x7f49a0d7e000",
        "EndAddr": "0x7f49a0f7d000",
        "Permissions": "---p",
        "FileOffset": "0x3000",
        "Device": "08:01",
        "Inode": 1972536,
        "FilePathId": 23
    },
    {
        "StartAddr": "0x7f49a0f7d000",
        "EndAddr": "0x7f49a0f7e000",
        "Permissions": "r--p",
        "FileOffset": "0x2000",
        "Device": "08:01",
        "Inode": 1972536,
        "FilePathId": 23
    },
    {
        "StartAddr": "0x7f49a0f7e000",
        "EndAddr": "0x7f49a0f7f000",
        "Permissions": "rw-p",
        "FileOffset": "0x3000",
        "Device": "08:01",
        "Inode": 1972536,
        "FilePathId": 23
    },
    {
        "StartAddr": "0x7f49a0f7f000",
        "EndAddr": "0x7f49a0f97000",
        "Permissions": "r-xp",
        "FileOffset": "0x0",
        "Device": "08:01",
        "Inode": 1972533,
        "FilePathId": 24
    },
    {
        "StartAddr": "0x7f49a0f97000",
        "EndAddr": "0x7f49a1196000",
        "Permissions": "---p",
        "FileOffset": "0x18000",
        "Device": "08:01",
        "Inode": 1972533,
        "FilePathId": 24
    },
    {
        "StartAddr": "0x7f49a1196000",
        "EndAddr": "0x7f49a1197000",
        "Permissions": "r--p",
        "FileOffset": "0x17000",
        "Device": "08:01",
        "Inode": 1972533,
        "FilePathId": 24
    },
    {
        "StartAddr": "0x7f49a1197000",
        "EndAddr": "0x7f49a1198000",
        "Permissions": "rw-p",
        "FileOffset": "0x18000",
        "Device": "08:01",
        "Inode": 1972533,
        "FilePathId": 24
    },
    {
        "StartAddr": "0x7f49a1198000",
        "EndAddr": "0x7f49a119c000",
        "Permissions": "rw-p",
        "FileOffset": "0x0",
        "Device": "00:00",
        "Inode": 0,
        "FilePathId": -1
    },
    {
        "StartAddr": "0x7f49a119c000",
        "EndAddr": "0x7f49a135c000",
        "Permissions": "r-xp",
        "FileOffset": "0x0",
        "Device": "08:01",
        "Inode": 1972534,
        "FilePathId": 25
    },
    {
        "StartAddr": "0x7f49a135c000",
        "EndAddr": "0x7f49a155c000",
        "Permissions": "---p",
        "FileOffset": "0x1c0000",
        "Device": "08:01",
        "Inode": 1972534,
        "FilePathId": 25
    },
    {
        "StartAddr": "0x7f49a155c000",
        "EndAddr": "0x7f49a1560000",
        "Permissions": "r--p",
        "FileOffset": "0x1c0000",
        "Device": "08:01",
        "Inode": 1972534,
        "FilePathId": 25
    },
    {
        "StartAddr": "0x7f49a1560000",
        "EndAddr": "0x7f49a1562000",
        "Permissions": "rw-p",
        "FileOffset": "0x1c4000",
        "Device": "08:01",
        "Inode": 1972534,
        "FilePathId": 25
    },
    {
        "StartAddr": "0x7f49a1562000",
        "EndAddr": "0x7f49a1566000",
        "Permissions": "rw-p",
        "FileOffset": "0x0",
        "Device": "00:00",
        "Inode": 0,
        "FilePathId": -1
    },
    {
        "StartAddr": "0x7f49a1566000",
        "EndAddr": "0x7f49a166e000",
        "Permissions": "r-xp",
        "FileOffset": "0x0",
        "Device": "08:01",
        "Inode": 1971430,
        "FilePathId": 26
    },
    {
        "StartAddr": "0x7f49a166e000",
        "EndAddr": "0x7f49a186d000",
        "Permissions": "---p",
        "FileOffset": "0x108000",
        "Device": "08:01",
        "Inode": 1971430,
        "FilePathId": 26
    },
    {
        "StartAddr": "0x7f49a186d000",
        "EndAddr": "0x7f49a186e000",
        "Permissions": "r--p",
        "FileOffset": "0x107000",
        "Device": "08:01",
        "Inode": 1971430,
        "FilePathId": 26
    },
    {
        "StartAddr": "0x7f49a186e000",
        "EndAddr": "0x7f49a186f000",
        "Permissions": "rw-p",
        "FileOffset": "0x108000",
        "Device": "08:01",
        "Inode": 1971430,
        "FilePathId": 26
    },
    {
        "StartAddr": "0x7f49a186f000",
        "EndAddr": "0x7f49a188e000",
        "Permissions": "r-xp",
        "FileOffset": "0x0",
        "Device": "08:01",
        "Inode": 1971635,
        "FilePathId": 27
    },
    {
        "StartAddr": "0x7f49a188e000",
        "EndAddr": "0x7f49a1a8d000",
        "Permissions": "---p",
        "FileOffset": "0x1f000",
        "Device": "08:01",
        "Inode": 1971635,
        "FilePathId": 27
    },
    {
        "StartAddr": "0x7f49a1a8d000",
        "EndAddr": "0x7f49a1a8e000",
        "Permissions": "r--p",
        "FileOffset": "0x1e000",
        "Device": "08:01",
        "Inode": 1971635,
        "FilePathId": 27
    },
    {
        "StartAddr": "0x7f49a1a8e000",
        "EndAddr": "0x7f49a1a8f000",
        "Permissions": "rw-p",
        "FileOffset": "0x1f000",
        "Device": "08:01",
        "Inode": 1971635,
        "FilePathId": 27
    },
    {
        "StartAddr": "0x7f49a1a8f000",
        "EndAddr": "0x7f49a1a91000",
        "Permissions": "rw-p",
        "FileOffset": "0x0",
        "Device": "00:00",
        "Inode": 0,
        "FilePathId": -1
    },
    {
        "StartAddr": "0x7f49a1a91000",
        "EndAddr": "0x7f49a1e75000",
        "Permissions": "r-xp",
        "FileOffset": "0x0",
        "Device": "00:32",
        "Inode": 1967932,
        "FilePathId": 28
    },
    {
        "StartAddr": "0x7f49a1e75000",
        "EndAddr": "0x7f49a2074000",
        "Permissions": "---p",
        "FileOffset": "0x3e4000",
        "Device": "00:32",
        "Inode": 1967932,
        "FilePathId": 28
    },
    {
        "StartAddr": "0x7f49a2074000",
        "EndAddr": "0x7f49a20a7000",
        "Permissions": "r--p",
        "FileOffset": "0x3e3000",
        "Device": "00:32",
        "Inode": 1967932,
        "FilePathId": 28
    },
    {
        "StartAddr": "0x7f49a20a7000",
        "EndAddr": "0x7f49a20b4000",
        "Permissions": "rw-p",
        "FileOffset": "0x416000",
        "Device": "00:32",
        "Inode": 1967932,
        "FilePathId": 28
    },
    {
        "StartAddr": "0x7f49a20b4000",
        "EndAddr": "0x7f49a2169000",
        "Permissions": "rw-p",
        "FileOffset": "0x0",
        "Device": "00:00",
        "Inode": 0,
        "FilePathId": -1
    },
    {
        "StartAddr": "0x7f49a2169000",
        "EndAddr": "0x7f49a218f000",
        "Permissions": "r-xp",
        "FileOffset": "0x0",
        "Device": "08:01",
        "Inode": 1972305,
        "FilePathId": 29
    },
    {
        "StartAddr": "0x7f49a2327000",
        "EndAddr": "0x7f49a236c000",
        "Permissions": "rw-p",
        "FileOffset": "0x0",
        "Device": "00:00",
        "Inode": 0,
        "FilePathId": -1
    },
    {
        "StartAddr": "0x7f49a2388000",
        "EndAddr": "0x7f49a238e000",
        "Permissions": "rw-p",
        "FileOffset": "0x0",
        "Device": "00:00",
        "Inode": 0,
        "FilePathId": -1
    },
    {
        "StartAddr": "0x7f49a238e000",
        "EndAddr": "0x7f49a238f000",
        "Permissions": "r--p",
        "FileOffset": "0x25000",
        "Device": "08:01",
        "Inode": 1972305,
        "FilePathId": 29
    },
    {
        "StartAddr": "0x7f49a238f000",
        "EndAddr": "0x7f49a2390000",
        "Permissions": "rw-p",
        "FileOffset": "0x26000",
        "Device": "08:01",
        "Inode": 1972305,
        "FilePathId": 29
    },
    {
        "StartAddr": "0x7f49a2390000",
        "EndAddr": "0x7f49a2391000",
        "Permissions": "rw-p",
        "FileOffset": "0x0",
        "Device": "00:00",
        "Inode": 0,
        "FilePathId": -1
    },
    {
        "StartAddr": "0x7ffc76986000",
        "EndAddr": "0x7ffc769a8000",
        "Permissions": "rw-p",
        "FileOffset": "0x0",
        "Device": "00:00",
        "Inode": 0,
        "FilePathId": 30
    },
    {
        "StartAddr": "0x7ffc769eb000",
        "EndAddr": "0x7ffc769ee000",
        "Permissions": "r--p",
        "FileOffset": "0x0",
        "Device": "00:00",
        "Inode": 0,
        "FilePathId": 31
    }
    ],
    "StringTable": [
    {
        "Id": 22,
        "Value": "/lib/x86_64-linux-gnu/libpcre.so.3.13.2"
    },
    {
        "Id": 4,
        "Value": "_init"
    },
    {
        "Id": 3,
        "Value": "pred_fls"
    },
    {
        "Id": 0,
        "Value": "find"
    },
    {
        "Id": 10,
        "Value": "_IO_vfprintf"
    },
    {
        "Id": 7,
        "Value": "versionsort"
    },
    {
        "Id": 27,
        "Value": "/lib/x86_64-linux-gnu/libselinux.so.1"
    },
    {
        "Id": 24,
        "Value": "/lib/x86_64-linux-gnu/libpthread-2.23.so"
    },
    {
        "Id": 16,
        "Value": "_IO_file_write"
    },
    {
        "Id": 8,
        "Value": "readdir"
    },
    {
        "Id": 1,
        "Value": "pred_fprintf"
    },
    {
        "Id": 9,
        "Value": "fts_read"
    },
    {
        "Id": 17,
        "Value": "_IO_do_write"
    },
    {
        "Id": 6,
        "Value": "__libc_start_main"
    },
    {
        "Id": 11,
        "Value": "__fprintf_chk"
    },
    {
        "Id": 30,
        "Value": "[stack]"
    },
    {
        "Id": 18,
        "Value": "_IO_file_xsputn"
    },
    {
        "Id": 31,
        "Value": "[vvar]"
    },
    {
        "Id": 23,
        "Value": "/lib/x86_64-linux-gnu/libdl-2.23.so"
    },
    {
        "Id": 5,
        "Value": "/lib/x86_64-linux-gnu/libc.so.6"
    },
    {
        "Id": 26,
        "Value": "/lib/x86_64-linux-gnu/libm-2.23.so"
    },
    {
        "Id": 28,
        "Value": "/home/psygig/psygig-sdk-c/build/install/opt/psygig/psyiage/lib/libpsyiage.so.0.3.0"
    },
    {
        "Id": 29,
        "Value": "/lib/x86_64-linux-gnu/ld-2.23.so"
    },
    {
        "Id": 12,
        "Value": "__ctype_get_mb_cur_max"
    },
    {
        "Id": 15,
        "Value": "__write"
    },
    {
        "Id": 21,
        "Value": "/usr/lib/locale/locale-archive"
    },
    {
        "Id": 25,
        "Value": "/lib/x86_64-linux-gnu/libc-2.23.so"
    },
    {
        "Id": 2,
        "Value": "pred_execdir"
    },
    {
        "Id": 19,
        "Value": "/usr/bin/find"
    },
    {
        "Id": 14,
        "Value": "__libc_malloc"
    },
    {
        "Id": 13,
        "Value": "_IO_str_seekoff"
    },
    {
        "Id": 20,
        "Value": "[heap]"
    }
    ]
    }
}

Sample CPU profile data visualization

_images/cpu-profile.png