[all-commits] [llvm/llvm-project] 8e1eb4: BOLT fails to read correctly the size of multi-seg...
Paschalis Mpeis via All-commits
all-commits at lists.llvm.org
Tue Nov 5 01:08:34 PST 2024
Branch: refs/heads/users/paschalis-mpeis/bolt-heatmap-fix
Home: https://github.com/llvm/llvm-project
Commit: 8e1eb4a2ba9b5ca020c69a235f96ccfc8aead2ee
https://github.com/llvm/llvm-project/commit/8e1eb4a2ba9b5ca020c69a235f96ccfc8aead2ee
Author: Paschalis Mpeis <Paschalis.Mpeis at arm.com>
Date: 2024-11-04 (Mon, 04 Nov 2024)
Changed paths:
M bolt/include/bolt/Profile/DataAggregator.h
M bolt/lib/Profile/DataAggregator.cpp
M bolt/unittests/Core/CMakeLists.txt
A bolt/unittests/Core/MemoryMaps.cpp
Log Message:
-----------
BOLT fails to read correctly the size of multi-segment mmaps.
Commit: d3ce4aa08c7e9dc6193c72be6bcab130e12e3f6a
https://github.com/llvm/llvm-project/commit/d3ce4aa08c7e9dc6193c72be6bcab130e12e3f6a
Author: Paschalis Mpeis (aws-mem-aarch64) <paschalis.mpeis at arm.com>
Date: 2024-11-04 (Mon, 04 Nov 2024)
Changed paths:
M bolt/lib/Profile/DataAggregator.cpp
Log Message:
-----------
[BOLT] DataAggregator supports binaries with multiple text segments
When a binary has multiple text segments, the Size is computed as the
difference of the last address of these segments from the BaseAddress.
The base addresses of all text segments must be the same.
Background:
Larger binaries get two text segments mapped when loaded in memory.
BOLT processes only the first, which is not having a correct BaseAddress,
causing a wrong computation of a BinaryMMapInfo's size.
Consequently, BOLT wrongly thinks that many of the samples fall outside
the binary and ignores them. As a result, when used in heatmaps the
output excludes all those entries and the section hotness statistics are
wrong.
This bug is present in both the AArch64 and x86 backends.
---
This patch introduces the flag 'perf-script-events' that allows passing
perf events without BOLT having to parse them using 'perf script'.
The flag is used to pass a mock perf profile that has two memory
mappings for a mock binary that has two text segments. The size of the
mapping is updated as `parseMMapEvents` now processes all text segments.
---
Example used in unit tests:
>From `/proc/<BINARY PID>/maps`, we have 2 text mappings, say A and B.
```
abc0000000-abc1000000 r-xp 011c0000 103:01 1573523 BINARY
abc2000000-abca000000 r-xp 031d0000 103:01 1573523 BINARY
```
Size of text mappings:
| Mapping | Size |
| ------- | ------ |
| A | ~15MB |
| B | ~135MB |
---
Example on a real program:
```
2f7200000-2fabca000 r--p 00000000 bolted-binary
2fabd9000-2fe47c000 r-xp 039c9000 bolted-binary <- 1st txt segment
2fe48b000-2fe61d000 r--p 0727b000 bolted-binary
2fe62c000-2fe660000 rw-p 0740c000 bolted-binary
2fe660000-2fea4c000 rw-p 00000000
2fec00000-303dad000 r-xp 07a00000 bolted-binary <- 2nd (appears only on the bolted binary)
```
Commit: 44ce75097e77f42a6927d3f4f7677a8f525bc99b
https://github.com/llvm/llvm-project/commit/44ce75097e77f42a6927d3f4f7677a8f525bc99b
Author: Paschalis Mpeis <Paschalis.Mpeis at arm.com>
Date: 2024-11-04 (Mon, 04 Nov 2024)
Changed paths:
M bolt/unittests/Core/MemoryMaps.cpp
M llvm/utils/gn/secondary/bolt/unittests/Core/BUILD.gn
Log Message:
-----------
Attempt to fix build bot failures.
- Added to CoreTests in BUILD.gn
- Hiding DataAggregator std out/err outputs
Commit: 14cf49c7d7ecd5f5a6b2eb3f436e07b70f94d09a
https://github.com/llvm/llvm-project/commit/14cf49c7d7ecd5f5a6b2eb3f436e07b70f94d09a
Author: Paschalis Mpeis <Paschalis.Mpeis at arm.com>
Date: 2024-11-05 (Tue, 05 Nov 2024)
Changed paths:
M bolt/include/bolt/Profile/DataAggregator.h
M bolt/lib/Profile/DataAggregator.cpp
M bolt/unittests/Core/MemoryMaps.cpp
Log Message:
-----------
Addressing reviewers
Compare: https://github.com/llvm/llvm-project/compare/b1765dc9b9f2...14cf49c7d7ec
To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications
More information about the All-commits
mailing list