llvm-project/lld/test/ELF/text-section-prefix.s

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

65 lines
1.6 KiB
ArmAsm
Raw Normal View History

# REQUIRES: x86
## -z keep-text-section-prefix separates text sections with prefix .text.hot,
[lld] Add a new output section ".text.unknown" for funtions with unknown hotness For sampleFDO, because the optimized build uses profile generated from previous release, often we couldn't tell a function without profile was truely cold or just newly created so we had to treat them conservatively and put them in .text section instead of .text.unlikely. The result was when we persue the best performance by locking .text.hot and .text in memory, we wasted a lot of memory to keep cold functions inside. This problem has been largely solved for regular sampleFDO using profile-symbol-list (https://reviews.llvm.org/D66374), but for the case when we use partial profile, we still waste a lot of memory because of it. In https://reviews.llvm.org/D62540, we propose to save functions with unknown hotness information in a special section called ".text.unknown", so that compiler will treat those functions as luck-warm, but runtime can choose not to mlock the special section in memory or use other strategy to save memory. That will solve most of the memory problem even if we use a partial profile. The patch adds the support in lld for the special section.For sampleFDO, because the optimized build uses profile generated from previous release, often we couldn't tell a function without profile was truely cold or just newly created so we had to treat them conservatively and put them in .text section instead of .text.unlikely. The result was when we persue the best performance by locking .text.hot and .text in memory, we wasted a lot of memory to keep cold functions inside. This problem has been largely solved for regular sampleFDO using profile-symbol-list (https://reviews.llvm.org/D66374), but for the case when we use partial profile, we still waste a lot of memory because of it. In https://reviews.llvm.org/D62540, we propose to save functions with unknown hotness information in a special section called ".text.unknown", so that compiler will treat those functions as luck-warm, but runtime can choose not to mlock the special section in memory or use other strategy to save memory. That will solve most of the memory problem even if we use a partial profile. The patch adds the support in lld for the special section. Differential Revision: https://reviews.llvm.org/D79590
2020-05-08 01:24:19 +08:00
## .text.unknown, .text.unlikely, .text.startup, or .text.exit, in the absence
## of a SECTIONS command.
# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t.o
# RUN: ld.lld %t.o -o %t1
# RUN: llvm-readelf -S %t1 | FileCheck --check-prefix=NOKEEP %s
# RUN: ld.lld -z nokeep-text-section-prefix %t.o -o %t2
# RUN: cmp %t1 %t2
# RUN: ld.lld -z keep-text-section-prefix %t.o -o %t.keep
# RUN: llvm-readelf -S %t.keep | FileCheck --check-prefix=KEEP %s
# KEEP: [ 1] .text
# KEEP-NEXT: [ 2] .text.hot
[lld] Add a new output section ".text.unknown" for funtions with unknown hotness For sampleFDO, because the optimized build uses profile generated from previous release, often we couldn't tell a function without profile was truely cold or just newly created so we had to treat them conservatively and put them in .text section instead of .text.unlikely. The result was when we persue the best performance by locking .text.hot and .text in memory, we wasted a lot of memory to keep cold functions inside. This problem has been largely solved for regular sampleFDO using profile-symbol-list (https://reviews.llvm.org/D66374), but for the case when we use partial profile, we still waste a lot of memory because of it. In https://reviews.llvm.org/D62540, we propose to save functions with unknown hotness information in a special section called ".text.unknown", so that compiler will treat those functions as luck-warm, but runtime can choose not to mlock the special section in memory or use other strategy to save memory. That will solve most of the memory problem even if we use a partial profile. The patch adds the support in lld for the special section.For sampleFDO, because the optimized build uses profile generated from previous release, often we couldn't tell a function without profile was truely cold or just newly created so we had to treat them conservatively and put them in .text section instead of .text.unlikely. The result was when we persue the best performance by locking .text.hot and .text in memory, we wasted a lot of memory to keep cold functions inside. This problem has been largely solved for regular sampleFDO using profile-symbol-list (https://reviews.llvm.org/D66374), but for the case when we use partial profile, we still waste a lot of memory because of it. In https://reviews.llvm.org/D62540, we propose to save functions with unknown hotness information in a special section called ".text.unknown", so that compiler will treat those functions as luck-warm, but runtime can choose not to mlock the special section in memory or use other strategy to save memory. That will solve most of the memory problem even if we use a partial profile. The patch adds the support in lld for the special section. Differential Revision: https://reviews.llvm.org/D79590
2020-05-08 01:24:19 +08:00
# KEEP-NEXT: [ 3] .text.unknown
# KEEP-NEXT: [ 4] .text.split
# KEEP-NEXT: [ 5] .text.startup
# KEEP-NEXT: [ 6] .text.exit
# KEEP-NEXT: [ 7] .text.unlikely
# NOKEEP: [ 1] .text
# NOKEEP-NOT: .text
## With a SECTIONS command, orphan sections are created verbatim.
## No grouping is performed for them.
# RUN: echo 'SECTIONS {}' > %t.lds
# RUN: ld.lld -T %t.lds -z keep-text-section-prefix %t.o -o %t.script
# RUN: llvm-readelf -S %t.script | FileCheck --check-prefix=SCRIPT %s
# SCRIPT: .text
# SCRIPT-NEXT: .text.f
# SCRIPT-NEXT: .text.hot.f_hot
[lld] Add a new output section ".text.unknown" for funtions with unknown hotness For sampleFDO, because the optimized build uses profile generated from previous release, often we couldn't tell a function without profile was truely cold or just newly created so we had to treat them conservatively and put them in .text section instead of .text.unlikely. The result was when we persue the best performance by locking .text.hot and .text in memory, we wasted a lot of memory to keep cold functions inside. This problem has been largely solved for regular sampleFDO using profile-symbol-list (https://reviews.llvm.org/D66374), but for the case when we use partial profile, we still waste a lot of memory because of it. In https://reviews.llvm.org/D62540, we propose to save functions with unknown hotness information in a special section called ".text.unknown", so that compiler will treat those functions as luck-warm, but runtime can choose not to mlock the special section in memory or use other strategy to save memory. That will solve most of the memory problem even if we use a partial profile. The patch adds the support in lld for the special section.For sampleFDO, because the optimized build uses profile generated from previous release, often we couldn't tell a function without profile was truely cold or just newly created so we had to treat them conservatively and put them in .text section instead of .text.unlikely. The result was when we persue the best performance by locking .text.hot and .text in memory, we wasted a lot of memory to keep cold functions inside. This problem has been largely solved for regular sampleFDO using profile-symbol-list (https://reviews.llvm.org/D66374), but for the case when we use partial profile, we still waste a lot of memory because of it. In https://reviews.llvm.org/D62540, we propose to save functions with unknown hotness information in a special section called ".text.unknown", so that compiler will treat those functions as luck-warm, but runtime can choose not to mlock the special section in memory or use other strategy to save memory. That will solve most of the memory problem even if we use a partial profile. The patch adds the support in lld for the special section. Differential Revision: https://reviews.llvm.org/D79590
2020-05-08 01:24:19 +08:00
# SCRIPT-NEXT: .text.unknown.f_unknown
# SCRIPT-NEXT: .text.split.f_split
# SCRIPT-NEXT: .text.startup.f_startup
# SCRIPT-NEXT: .text.exit.f_exit
# SCRIPT-NEXT: .text.unlikely.f_unlikely
.globl _start
_start:
ret
.section .text.f,"ax"
nop
.section .text.hot.f_hot,"ax"
nop
[lld] Add a new output section ".text.unknown" for funtions with unknown hotness For sampleFDO, because the optimized build uses profile generated from previous release, often we couldn't tell a function without profile was truely cold or just newly created so we had to treat them conservatively and put them in .text section instead of .text.unlikely. The result was when we persue the best performance by locking .text.hot and .text in memory, we wasted a lot of memory to keep cold functions inside. This problem has been largely solved for regular sampleFDO using profile-symbol-list (https://reviews.llvm.org/D66374), but for the case when we use partial profile, we still waste a lot of memory because of it. In https://reviews.llvm.org/D62540, we propose to save functions with unknown hotness information in a special section called ".text.unknown", so that compiler will treat those functions as luck-warm, but runtime can choose not to mlock the special section in memory or use other strategy to save memory. That will solve most of the memory problem even if we use a partial profile. The patch adds the support in lld for the special section.For sampleFDO, because the optimized build uses profile generated from previous release, often we couldn't tell a function without profile was truely cold or just newly created so we had to treat them conservatively and put them in .text section instead of .text.unlikely. The result was when we persue the best performance by locking .text.hot and .text in memory, we wasted a lot of memory to keep cold functions inside. This problem has been largely solved for regular sampleFDO using profile-symbol-list (https://reviews.llvm.org/D66374), but for the case when we use partial profile, we still waste a lot of memory because of it. In https://reviews.llvm.org/D62540, we propose to save functions with unknown hotness information in a special section called ".text.unknown", so that compiler will treat those functions as luck-warm, but runtime can choose not to mlock the special section in memory or use other strategy to save memory. That will solve most of the memory problem even if we use a partial profile. The patch adds the support in lld for the special section. Differential Revision: https://reviews.llvm.org/D79590
2020-05-08 01:24:19 +08:00
.section .text.unknown.f_unknown,"ax"
nop
.section .text.split.f_split,"ax"
nop
.section .text.startup.f_startup,"ax"
nop
.section .text.exit.f_exit,"ax"
nop
.section .text.unlikely.f_unlikely,"ax"
nop