[memprof] Print out the segment information in YAML format.

This change prints out the segment information in the raw profile in
YAML format for testing. Since we don't capture build ids yet, we print
out <None> for now.

Reviewed By: tejohnson

Differential Revision: https://reviews.llvm.org/D126840
This commit is contained in:
Snehasish Kumar 2022-06-01 22:20:53 +00:00
parent 058791d8f2
commit 8a87f42fc6
3 changed files with 117 additions and 0 deletions

View File

@ -18,6 +18,7 @@
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/DebugInfo/DWARF/DWARFContext.h"
#include "llvm/DebugInfo/Symbolize/SymbolizableModule.h"
#include "llvm/DebugInfo/Symbolize/SymbolizableObjectFile.h"
@ -150,6 +151,21 @@ bool isRuntimePath(const StringRef Path) {
return StringRef(llvm::sys::path::convert_to_slash(Path))
.contains("memprof/memprof_");
}
std::string getBuildIdString(const SegmentEntry &Entry) {
constexpr size_t Size = sizeof(Entry.BuildId) / sizeof(uint8_t);
constexpr uint8_t Zeros[Size] = {0};
// If the build id is unset print a helpful string instead of all zeros.
if (memcmp(Entry.BuildId, Zeros, Size) == 0)
return "<None>";
std::string Str;
raw_string_ostream OS(Str);
for (size_t I = 0; I < Size; I++) {
OS << format_hex_no_prefix(Entry.BuildId[I], 2);
}
return OS.str();
}
} // namespace
Expected<std::unique_ptr<RawMemProfReader>>
@ -217,6 +233,15 @@ void RawMemProfReader::printYAML(raw_ostream &OS) {
OS << " NumMibInfo: " << NumMibInfo << "\n";
OS << " NumAllocFunctions: " << NumAllocFunctions << "\n";
OS << " NumStackOffsets: " << StackMap.size() << "\n";
// Print out the segment information.
OS << " Segments:\n";
for (const auto &Entry : SegmentInfo) {
OS << " -\n";
OS << " BuildId: " << getBuildIdString(Entry) << "\n";
OS << " Start: 0x" << llvm::utohexstr(Entry.Start) << "\n";
OS << " End: 0x" << llvm::utohexstr(Entry.End) << "\n";
OS << " Offset: 0x" << llvm::utohexstr(Entry.Offset) << "\n";
}
// Print out the merged contents of the profiles.
OS << " Records:\n";
for (const auto &Entry : *this) {

View File

@ -43,6 +43,52 @@ CHECK-NEXT: NumSegments: 9
CHECK-NEXT: NumMibInfo: 2
CHECK-NEXT: NumAllocFunctions: 1
CHECK-NEXT: NumStackOffsets: 2
CHECK-NEXT: Segments:
CHECK-NEXT: -
CHECK-NEXT: BuildId: <None>
CHECK-NEXT: Start: 0x200000
CHECK-NEXT: End: 0x298000
CHECK-NEXT: Offset: 0x0
CHECK-NEXT: -
CHECK-NEXT: BuildId: <None>
CHECK-NEXT: Start: 0x7FFFF7C7C000
CHECK-NEXT: End: 0x7FFFF7DC5000
CHECK-NEXT: Offset: 0x26000
CHECK-NEXT: -
CHECK-NEXT: BuildId: <None>
CHECK-NEXT: Start: 0x7FFFF7E1E000
CHECK-NEXT: End: 0x7FFFF7E30000
CHECK-NEXT: Offset: 0x3000
CHECK-NEXT: -
CHECK-NEXT: BuildId: <None>
CHECK-NEXT: Start: 0x7FFFF7E36000
CHECK-NEXT: End: 0x7FFFF7E38000
CHECK-NEXT: Offset: 0x1000
CHECK-NEXT: -
CHECK-NEXT: BuildId: <None>
CHECK-NEXT: Start: 0x7FFFF7E4A000
CHECK-NEXT: End: 0x7FFFF7EE5000
CHECK-NEXT: Offset: 0xF000
CHECK-NEXT: -
CHECK-NEXT: BuildId: <None>
CHECK-NEXT: Start: 0x7FFFF7F83000
CHECK-NEXT: End: 0x7FFFF7F87000
CHECK-NEXT: Offset: 0x3000
CHECK-NEXT: -
CHECK-NEXT: BuildId: <None>
CHECK-NEXT: Start: 0x7FFFF7F92000
CHECK-NEXT: End: 0x7FFFF7FA1000
CHECK-NEXT: Offset: 0x7000
CHECK-NEXT: -
CHECK-NEXT: BuildId: <None>
CHECK-NEXT: Start: 0x7FFFF7FD0000
CHECK-NEXT: End: 0x7FFFF7FD2000
CHECK-NEXT: Offset: 0x0
CHECK-NEXT: -
CHECK-NEXT: BuildId: <None>
CHECK-NEXT: Start: 0x7FFFF7FD3000
CHECK-NEXT: End: 0x7FFFF7FF3000
CHECK-NEXT: Offset: 0x1000
CHECK-NEXT: Records:
CHECK-NEXT: -
CHECK-NEXT: FunctionGUID: {{[0-9]+}}

View File

@ -44,6 +44,52 @@ CHECK-NEXT: NumSegments: 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: 0x200000
CHECK-NEXT: End: 0x29B000
CHECK-NEXT: Offset: 0x0
CHECK-NEXT: -
CHECK-NEXT: BuildId: <None>
CHECK-NEXT: Start: 0x7F5871485000
CHECK-NEXT: End: 0x7F58715CD000
CHECK-NEXT: Offset: 0x26000
CHECK-NEXT: -
CHECK-NEXT: BuildId: <None>
CHECK-NEXT: Start: 0x7F587162D000
CHECK-NEXT: End: 0x7F587163F000
CHECK-NEXT: Offset: 0x3000
CHECK-NEXT: -
CHECK-NEXT: BuildId: <None>
CHECK-NEXT: Start: 0x7F5871646000
CHECK-NEXT: End: 0x7F5871648000
CHECK-NEXT: Offset: 0x2000
CHECK-NEXT: -
CHECK-NEXT: BuildId: <None>
CHECK-NEXT: Start: 0x7F587165A000
CHECK-NEXT: End: 0x7F58716F4000
CHECK-NEXT: Offset: 0xF000
CHECK-NEXT: -
CHECK-NEXT: BuildId: <None>
CHECK-NEXT: Start: 0x7F5871791000
CHECK-NEXT: End: 0x7F5871795000
CHECK-NEXT: Offset: 0x3000
CHECK-NEXT: -
CHECK-NEXT: BuildId: <None>
CHECK-NEXT: Start: 0x7F58717A0000
CHECK-NEXT: End: 0x7F58717AF000
CHECK-NEXT: Offset: 0x7000
CHECK-NEXT: -
CHECK-NEXT: BuildId: <None>
CHECK-NEXT: Start: 0x7F58717D6000
CHECK-NEXT: End: 0x7F58717FA000
CHECK-NEXT: Offset: 0x1000
CHECK-NEXT: -
CHECK-NEXT: BuildId: <None>
CHECK-NEXT: Start: 0x7FFFC77BD000
CHECK-NEXT: End: 0x7FFFC77BF000
CHECK-NEXT: Offset: 0x0
CHECK-NEXT: Records:
CHECK-NEXT: -
CHECK-NEXT: FunctionGUID: 15505678318020221912