[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