Track min/max/avg access density (accesses per byte and accesses per byte per lifetime second) metrics directly during profiling. This allows more accurate use of these metrics in profile analysis and use, instead of trying to compute them from already aggregated data in the profile. This required regenerating some of the raw profile and executable inputs for a few tests. While here, make the llvm-profdata memprof tests more resilient to differences in things like memory mapping, timestamps and cpu ids to make future test updates easier. Differential Revision: https://reviews.llvm.org/D141558
202 lines
6.2 KiB
Plaintext
202 lines
6.2 KiB
Plaintext
REQUIRES: x86_64-linux
|
|
|
|
The input raw profile test has been generated from the following source code:
|
|
|
|
```
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
__attribute__((always_inline))
|
|
void qux(int x) {
|
|
char *ptr = malloc(x);
|
|
memset(ptr, 0, x);
|
|
free(ptr);
|
|
}
|
|
|
|
__attribute__((noinline))
|
|
void foo(int x){ qux(x); }
|
|
|
|
__attribute__((noinline))
|
|
void bar(int x) { foo(x); }
|
|
|
|
int main(int argc, char **argv) {
|
|
bar(argc);
|
|
return 0;
|
|
}
|
|
```
|
|
|
|
Compile and run with the following commands:
|
|
|
|
```
|
|
bin/clang -fuse-ld=lld -Wl,--no-rosegment -gmlt -fdebug-info-for-profiling \
|
|
-fmemory-profile -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer \
|
|
-fno-optimize-sibling-calls -m64 -Wl,-build-id -no-pie \
|
|
inline.c -o inline.memprofexe
|
|
|
|
env MEMPROF_OPTIONS=log_path=stdout ./inline.memprofexe > inline.memprofraw
|
|
```
|
|
|
|
RUN: llvm-profdata show --memory %p/Inputs/inline.memprofraw --profiled-binary %p/Inputs/inline.memprofexe | FileCheck %s
|
|
|
|
CHECK: MemprofProfile:
|
|
CHECK-NEXT: Summary:
|
|
CHECK-NEXT: Version: 2
|
|
CHECK-NEXT: NumSegments: {{[0-9]+}}
|
|
CHECK-NEXT: NumMibInfo: 2
|
|
CHECK-NEXT: NumAllocFunctions: 2
|
|
CHECK-NEXT: NumStackOffsets: 1
|
|
CHECK-NEXT: Segments:
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: BuildId: <None>
|
|
CHECK-NEXT: Start: 0x{{[0-9]+}}
|
|
CHECK-NEXT: End: 0x{{[0-9]+}}
|
|
CHECK-NEXT: Offset: 0x{{[0-9]+}}
|
|
CHECK-NEXT: -
|
|
|
|
CHECK: Records:
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: FunctionGUID: 15505678318020221912
|
|
CHECK-NEXT: AllocSites:
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: Callstack:
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: Function: 15505678318020221912
|
|
CHECK-NEXT: SymbolName: qux
|
|
CHECK-NEXT: LineOffset: 1
|
|
CHECK-NEXT: Column: 15
|
|
CHECK-NEXT: Inline: 1
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: Function: 6699318081062747564
|
|
CHECK-NEXT: SymbolName: foo
|
|
CHECK-NEXT: LineOffset: 0
|
|
CHECK-NEXT: Column: 18
|
|
CHECK-NEXT: Inline: 0
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: Function: 16434608426314478903
|
|
CHECK-NEXT: SymbolName: bar
|
|
CHECK-NEXT: LineOffset: 0
|
|
CHECK-NEXT: Column: 19
|
|
CHECK-NEXT: Inline: 0
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: Function: 15822663052811949562
|
|
CHECK-NEXT: SymbolName: main
|
|
CHECK-NEXT: LineOffset: 1
|
|
CHECK-NEXT: Column: 3
|
|
CHECK-NEXT: Inline: 0
|
|
CHECK-NEXT: MemInfoBlock:
|
|
CHECK-NEXT: AllocCount: 1
|
|
CHECK-NEXT: TotalAccessCount: 1
|
|
CHECK-NEXT: MinAccessCount: 1
|
|
CHECK-NEXT: MaxAccessCount: 1
|
|
CHECK-NEXT: TotalSize: 1
|
|
CHECK-NEXT: MinSize: 1
|
|
CHECK-NEXT: MaxSize: 1
|
|
CHECK-NEXT: AllocTimestamp: {{[0-9]+}}
|
|
CHECK-NEXT: DeallocTimestamp: {{[0-9]+}}
|
|
CHECK-NEXT: TotalLifetime: 0
|
|
CHECK-NEXT: MinLifetime: 0
|
|
CHECK-NEXT: MaxLifetime: 0
|
|
CHECK-NEXT: AllocCpuId: {{[0-9]+}}
|
|
CHECK-NEXT: DeallocCpuId: {{[0-9]+}}
|
|
CHECK-NEXT: NumMigratedCpu: 0
|
|
CHECK-NEXT: NumLifetimeOverlaps: 0
|
|
CHECK-NEXT: NumSameAllocCpu: 0
|
|
CHECK-NEXT: NumSameDeallocCpu: 0
|
|
CHECK-NEXT: DataTypeId: {{[0-9]+}}
|
|
CHECK-NEXT: TotalAccessDensity: 100
|
|
CHECK-NEXT: MinAccessDensity: 100
|
|
CHECK-NEXT: MaxAccessDensity: 100
|
|
CHECK-NEXT: TotalLifetimeAccessDensity: 100000
|
|
CHECK-NEXT: MinLifetimeAccessDensity: 100000
|
|
CHECK-NEXT: MaxLifetimeAccessDensity: 100000
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: FunctionGUID: 6699318081062747564
|
|
CHECK-NEXT: AllocSites:
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: Callstack:
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: Function: 15505678318020221912
|
|
CHECK-NEXT: SymbolName: qux
|
|
CHECK-NEXT: LineOffset: 1
|
|
CHECK-NEXT: Column: 15
|
|
CHECK-NEXT: Inline: 1
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: Function: 6699318081062747564
|
|
CHECK-NEXT: SymbolName: foo
|
|
CHECK-NEXT: LineOffset: 0
|
|
CHECK-NEXT: Column: 18
|
|
CHECK-NEXT: Inline: 0
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: Function: 16434608426314478903
|
|
CHECK-NEXT: SymbolName: bar
|
|
CHECK-NEXT: LineOffset: 0
|
|
CHECK-NEXT: Column: 19
|
|
CHECK-NEXT: Inline: 0
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: Function: 15822663052811949562
|
|
CHECK-NEXT: SymbolName: main
|
|
CHECK-NEXT: LineOffset: 1
|
|
CHECK-NEXT: Column: 3
|
|
CHECK-NEXT: Inline: 0
|
|
CHECK-NEXT: MemInfoBlock:
|
|
CHECK-NEXT: AllocCount: 1
|
|
CHECK-NEXT: TotalAccessCount: 1
|
|
CHECK-NEXT: MinAccessCount: 1
|
|
CHECK-NEXT: MaxAccessCount: 1
|
|
CHECK-NEXT: TotalSize: 1
|
|
CHECK-NEXT: MinSize: 1
|
|
CHECK-NEXT: MaxSize: 1
|
|
CHECK-NEXT: AllocTimestamp: {{[0-9]+}}
|
|
CHECK-NEXT: DeallocTimestamp: {{[0-9]+}}
|
|
CHECK-NEXT: TotalLifetime: 0
|
|
CHECK-NEXT: MinLifetime: 0
|
|
CHECK-NEXT: MaxLifetime: 0
|
|
CHECK-NEXT: AllocCpuId: {{[0-9]+}}
|
|
CHECK-NEXT: DeallocCpuId: {{[0-9]+}}
|
|
CHECK-NEXT: NumMigratedCpu: 0
|
|
CHECK-NEXT: NumLifetimeOverlaps: 0
|
|
CHECK-NEXT: NumSameAllocCpu: 0
|
|
CHECK-NEXT: NumSameDeallocCpu: 0
|
|
CHECK-NEXT: DataTypeId: {{[0-9]+}}
|
|
CHECK-NEXT: TotalAccessDensity: 100
|
|
CHECK-NEXT: MinAccessDensity: 100
|
|
CHECK-NEXT: MaxAccessDensity: 100
|
|
CHECK-NEXT: TotalLifetimeAccessDensity: 100000
|
|
CHECK-NEXT: MinLifetimeAccessDensity: 100000
|
|
CHECK-NEXT: MaxLifetimeAccessDensity: 100000
|
|
CHECK-NEXT: CallSites:
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: Function: 15505678318020221912
|
|
CHECK-NEXT: SymbolName: qux
|
|
CHECK-NEXT: LineOffset: 1
|
|
CHECK-NEXT: Column: 15
|
|
CHECK-NEXT: Inline: 1
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: Function: 6699318081062747564
|
|
CHECK-NEXT: SymbolName: foo
|
|
CHECK-NEXT: LineOffset: 0
|
|
CHECK-NEXT: Column: 18
|
|
CHECK-NEXT: Inline: 0
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: FunctionGUID: 16434608426314478903
|
|
CHECK-NEXT: CallSites:
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: Function: 16434608426314478903
|
|
CHECK-NEXT: SymbolName: bar
|
|
CHECK-NEXT: LineOffset: 0
|
|
CHECK-NEXT: Column: 19
|
|
CHECK-NEXT: Inline: 0
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: FunctionGUID: 15822663052811949562
|
|
CHECK-NEXT: CallSites:
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: -
|
|
CHECK-NEXT: Function: 15822663052811949562
|
|
CHECK-NEXT: SymbolName: main
|
|
CHECK-NEXT: LineOffset: 1
|
|
CHECK-NEXT: Column: 3
|
|
CHECK-NEXT: Inline: 0
|