RFR: 8365053: Refresh hotspot precompiled.hpp with headers based on current frequency [v11]
Francesco Andreuzzi
duke at openjdk.org
Mon Aug 25 09:26:12 UTC 2025
On Tue, 12 Aug 2025 11:32:42 GMT, Francesco Andreuzzi <duke at openjdk.org> wrote:
>> In this PR I propose to refresh the included headers in hotspot `precompiled.hpp`. The current set of precompiled headers was refreshed in 2018, 7 years ago. I repeated the same operations and measurements after refreshing the set of precompiled headers according to the current usage frequency.
>>
>> These are the results I observed. Depending on the platform, the improvement is between 10 and 20% in terms of total work (user+sys). The results are in seconds.
>>
>>
>> linux-x64 GCC
>> master real 81.39 user 3352.15 sys 287.49
>> JDK-8365053 real 81.94 user 3030.24 sys 295.82
>>
>> linux-x64 Clang
>> master real 43.44 user 2082.93 sys 130.70
>> JDK-8365053 real 38.44 user 1723.80 sys 117.68
>>
>> linux-aarch64 GCC
>> master real 1188.08 user 2015.22 sys 175.53
>> JDK-8365053 real 1019.85 user 1667.45 sys 171.86
>>
>> linux-aarch64 clang
>> master real 981.77 user 1645.05 sys 118.60
>> JDK-8365053 real 791.96 user 1262.92 sys 101.50
>
> Francesco Andreuzzi has updated the pull request incrementally with two additional commits since the last revision:
>
> - conditional includes
> - variants
### Amazon Linux 2 x86_64 + Docker `debian:bookworm-slim`
| Git Ref | Compiler | Build flavor | Average (user+sys) | StdDev |
|----------|--------|--------|----------|---------|
| master | gcc | server | 2962.90 | 3.04 |
| master | gcc | fd | 4165.31 | 4.36 |
| master | gcc | custom | 677.99 | 0.45 |
| master | clang | server | 2247.31 | 4.27 |
| master | clang | fd | 3054.74 | 0.23 |
| master | clang | custom | 496.13 | 1.30 |
| 9e0cb7e8 | gcc | server | 2552.51 | 1.44 |
| 9e0cb7e8 | gcc | fd | 3650.50 | 1.68 |
| 9e0cb7e8 | gcc | custom | 630.25 | 1.80 |
| 9e0cb7e8 | clang | server | 1826.63 | 4.21 |
| 9e0cb7e8 | clang | fd | 2514.22 | 1.16 |
| 9e0cb7e8 | clang | custom | 453.29 | 0.52 |
| 892ecb5a | gcc | server | 2570.87 | 0.96 |
| 892ecb5a | gcc | fd | 3644.73 | 7.16 |
| 892ecb5a | gcc | custom | 626.08 | 2.83 |
| 892ecb5a | clang | server | 1824.21 | 2.31 |
| 892ecb5a | clang | fd | 2518.37 | 1.75 |
| 892ecb5a | clang | custom | 453.56 | 0.74 |
### Amazon Linux 2 aarch64 + Docker `debian:bookworm-slim`
| Git Ref | Compiler | Build flavor | Average (user+sys) | StdDev |
|---------|--------|--------|----------|---------|
| master | gcc | server | 2248.63 | 4.49 |
| master | gcc | fd | 3238.64 | 4.29 |
| master | gcc | custom | 523.34 | 6.50 |
| master | clang | server | 1877.40 | 3.01 |
| master | clang | fd | 2516.10 | 2.95 |
| master | clang | custom | 437.22 | 1.22 |
| 9e0cb7e8| gcc | server | 1811.81 | 5.17 |
| 9e0cb7e8| gcc | fd | 2693.76 | 7.68 |
| 9e0cb7e8| gcc | custom | 440.88 | 1.81 |
| 9e0cb7e8| clang | server | 1406.12 | 6.20 |
| 9e0cb7e8| clang | fd | 1872.41 | 13.27 |
| 9e0cb7e8| clang | custom | 354.82 | 0.65 |
| 892ecb5a| gcc | server | 1774.99 | 13.02 |
| 892ecb5a| gcc | fd | 2623.76 | 1.51 |
| 892ecb5a| gcc | custom | 428.87 | 1.05 |
| 892ecb5a| clang | server | 1363.65 | 0.61 |
| 892ecb5a| clang | fd | 1842.38 | 6.90 |
| 892ecb5a| clang | custom | 344.98 | 1.21 |
### Fedora 42 x86_64
| Git Ref | Compiler | Build flavor | Average (user+sys) | StdDev |
|----------|--------|--------|----------|---------|
| master | gcc | server | 2713.01 | 3.68 |
| master | gcc | fd | 3849.04 | 18.43 |
| master | gcc | custom | 650.11 | 0.51 |
| master | clang | server | 2227.25 | 0.95 |
| master | clang | fd | 2998.13 | 0.37 |
| master | clang | custom | 499.48 | 0.15 |
| 9e0cb7e8 | gcc | server | 2398.33 | 1.41 |
| 9e0cb7e8 | gcc | fd | 3449.44 | 1.61 |
| 9e0cb7e8 | gcc | custom | 609.89 | 0.70 |
| 9e0cb7e8 | clang | server | 1781.34 | 1.05 |
| 9e0cb7e8 | clang | fd | 2431.96 | 0.37 |
| 9e0cb7e8 | clang | custom | 451.13 | 0.22 |
| 892ecb5a | gcc | server | 2407.65 | 2.21 |
| 892ecb5a | gcc | fd | 3457.53 | 0.34 |
| 892ecb5a | gcc | custom | 611.44 | 0.51 |
| 892ecb5a | clang | server | 1784.70 | 0.69 |
| 892ecb5a | clang | fd | 2437.44 | 0.82 |
| 892ecb5a | clang | custom | 452.42 | 0.20 |
### Git Ref
- 9e0cb7e8: First approach in this PR, counting header inclusions
- 892ecb5a: `-ftime-trace` + ClangBuildAnalyzer (last commit)
### Compiler
- Clang 20
- GCC 12
### Build flavor
- `fd`: `--enable-debug`
- `custom`: `--with-jvm-variants=custom --enable-jvm-feature-epsilongc`
Each of the measurements above was taken three times.
I got some measurements using a cutoff of **100.000ms** in ClangBuildAnalyzer, so all headers taking more than that are included in `precompiled.hpp`. Overall, 892ecb5a95695d75cef80dfdf053e50a092b0784 (last commit) seems to perform better than both `master` and the initial approach I tried in this PR.
It would be nice if other compilers would provide similar metrics as `-ftime-trace`, but I couldn't find anything useful. So far GCC seems to like the new precompiled set.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/26681#issuecomment-3219345092
PR Comment: https://git.openjdk.org/jdk/pull/26681#issuecomment-3219373245
More information about the hotspot-dev
mailing list