RFR: 8352316: More MergeStoreBench
Shaojin Wen
swen at openjdk.org
Sat Mar 29 05:21:30 UTC 2025
On Sat, 29 Mar 2025 01:30:01 GMT, Vladimir Ivanov <vlivanov at openjdk.org> wrote:
>> Added performance tests related to String.getBytes/String.getChars/StringBuilder.append/System.arraycopy in constant scenarios to verify whether MergeStore works
>
> Ok, I don't have anything against a fixed string constant. But existing names (`NULL_STR` et al, `putNull`) add confusion IMO (especially, when there's Unsafe in play).
According to @iwanowww's suggestion, I changed the original name of putNull to str4, and added the benchmarks of str5 and str7. The following are the new performance numbers, which show that using ArraySetConst or UnsafePut has better performance.
# 1. Scipt
git remote add wenshao git at github.com:wenshao/jdk.git
git fetch wenshao
git checkout a5eb3b98ece8cf1aa6eaa3d1287148e1b0510f4b
make test TEST="micro:vm.compiler.MergeStoreBench.str"
# 2. aliyun_ecs_c8a_x64 (CPU AMD EPYC™ Genoa)
Benchmark Mode Cnt Score Error Units
MergeStoreBench.str4ArraySetConst avgt 5 1343.148 ± 3.995 ns/op
MergeStoreBench.str4Arraycopy avgt 5 7293.298 ± 35.868 ns/op
MergeStoreBench.str4GetBytes avgt 5 6175.505 ± 17.465 ns/op
MergeStoreBench.str4GetChars avgt 5 13954.105 ± 1561.080 ns/op
MergeStoreBench.str4StringBuilder avgt 5 15633.944 ± 4579.011 ns/op
MergeStoreBench.str4UnsafePut avgt 5 1325.916 ± 6.126 ns/op
MergeStoreBench.str4Utf16ArrayCopy avgt 5 13998.302 ± 938.311 ns/op
MergeStoreBench.str4Utf16ArraySetConst avgt 5 1514.040 ± 6.774 ns/op
MergeStoreBench.str4Utf16StringBuilder avgt 5 16382.059 ± 4943.649 ns/op
MergeStoreBench.str4Utf16UnsafePut avgt 5 1616.452 ± 9.472 ns/op
MergeStoreBench.str5ArraySetConst avgt 5 2609.046 ± 28.409 ns/op
MergeStoreBench.str5Arraycopy avgt 5 9519.887 ± 54.364 ns/op
MergeStoreBench.str5GetBytes avgt 5 5987.410 ± 14.277 ns/op
MergeStoreBench.str5GetChars avgt 5 13598.285 ± 241.078 ns/op
MergeStoreBench.str5StringBuilder avgt 5 16556.510 ± 2962.211 ns/op
MergeStoreBench.str5UnsafePut avgt 5 2431.841 ± 24.299 ns/op
MergeStoreBench.str5Utf16ArrayCopy avgt 5 21433.158 ± 131.466 ns/op
MergeStoreBench.str5Utf16ArraySetConst avgt 5 2935.785 ± 3.777 ns/op
MergeStoreBench.str5Utf16StringBuilder avgt 5 18746.936 ± 3680.162 ns/op
MergeStoreBench.str5Utf16UnsafePut avgt 5 2878.038 ± 10.055 ns/op
MergeStoreBench.str7ArraySetConst avgt 5 3594.628 ± 24.397 ns/op
MergeStoreBench.str7Arraycopy avgt 5 12314.423 ± 81.095 ns/op
MergeStoreBench.str7GetBytes avgt 5 9014.943 ± 222.911 ns/op
MergeStoreBench.str7GetChars avgt 5 16866.491 ± 178.543 ns/op
MergeStoreBench.str7StringBuilder avgt 5 25238.440 ± 2757.460 ns/op
MergeStoreBench.str7UnsafePut avgt 5 3597.008 ± 26.531 ns/op
MergeStoreBench.str7Utf16ArrayCopy avgt 5 21325.797 ± 111.975 ns/op
MergeStoreBench.str7Utf16ArraySetConst avgt 5 3934.164 ± 97.003 ns/op
MergeStoreBench.str7Utf16StringBuilder avgt 5 19315.320 ± 1960.379 ns/op
MergeStoreBench.str7Utf16UnsafePut avgt 5 4190.362 ± 8.042 ns/op
# 3. aliyun_ecs_c8i_x64 (CPU Intel®Xeon®Emerald Rapids)
Benchmark Mode Cnt Score Error Units
MergeStoreBench.str4ArraySetConst avgt 5 1558.348 ± 0.959 ns/op
MergeStoreBench.str4Arraycopy avgt 5 5837.069 ± 3.166 ns/op
MergeStoreBench.str4GetBytes avgt 5 5875.195 ± 12.562 ns/op
MergeStoreBench.str4GetChars avgt 5 12679.307 ± 62.069 ns/op
MergeStoreBench.str4StringBuilder avgt 5 16588.064 ± 75.515 ns/op
MergeStoreBench.str4UnsafePut avgt 5 1543.947 ± 4.780 ns/op
MergeStoreBench.str4Utf16ArrayCopy avgt 5 13973.910 ± 329.196 ns/op
MergeStoreBench.str4Utf16ArraySetConst avgt 5 2591.923 ± 6.758 ns/op
MergeStoreBench.str4Utf16StringBuilder avgt 5 17719.390 ± 5016.367 ns/op
MergeStoreBench.str4Utf16UnsafePut avgt 5 2539.849 ± 8.091 ns/op
MergeStoreBench.str5ArraySetConst avgt 5 3004.459 ± 9.575 ns/op
MergeStoreBench.str5Arraycopy avgt 5 7153.397 ± 52.069 ns/op
MergeStoreBench.str5GetBytes avgt 5 5566.344 ± 4.400 ns/op
MergeStoreBench.str5GetChars avgt 5 14444.069 ± 224.157 ns/op
MergeStoreBench.str5StringBuilder avgt 5 18371.573 ± 293.271 ns/op
MergeStoreBench.str5UnsafePut avgt 5 2879.242 ± 9.412 ns/op
MergeStoreBench.str5Utf16ArrayCopy avgt 5 4548.225 ± 14.172 ns/op
MergeStoreBench.str5Utf16ArraySetConst avgt 5 3864.536 ± 4.208 ns/op
MergeStoreBench.str5Utf16StringBuilder avgt 5 20413.600 ± 1513.652 ns/op
MergeStoreBench.str5Utf16UnsafePut avgt 5 3858.928 ± 2.923 ns/op
MergeStoreBench.str7ArraySetConst avgt 5 4658.730 ± 4.558 ns/op
MergeStoreBench.str7Arraycopy avgt 5 12130.150 ± 13.268 ns/op
MergeStoreBench.str7GetBytes avgt 5 11941.311 ± 201.509 ns/op
MergeStoreBench.str7GetChars avgt 5 21081.423 ± 1892.526 ns/op
MergeStoreBench.str7StringBuilder avgt 5 14661.312 ± 768.749 ns/op
MergeStoreBench.str7UnsafePut avgt 5 4662.649 ± 2.974 ns/op
MergeStoreBench.str7Utf16ArrayCopy avgt 5 4973.827 ± 2.841 ns/op
MergeStoreBench.str7Utf16ArraySetConst avgt 5 5407.768 ± 19.989 ns/op
MergeStoreBench.str7Utf16StringBuilder avgt 5 25378.418 ± 9377.505 ns/op
MergeStoreBench.str7Utf16UnsafePut avgt 5 5494.466 ± 5.377 ns/op
# 4. aliyun_ecs_c8y_aarch64 (CPU Aliyun Yitian 710)
Benchmark Mode Cnt Score Error Units
MergeStoreBench.str4ArraySetConst avgt 5 2232.675 ± 0.858 ns/op
MergeStoreBench.str4Arraycopy avgt 5 8342.762 ± 22.772 ns/op
MergeStoreBench.str4GetBytes avgt 5 6988.049 ± 11.874 ns/op
MergeStoreBench.str4GetChars avgt 5 12363.100 ± 30.414 ns/op
MergeStoreBench.str4StringBuilder avgt 5 21257.805 ± 1371.310 ns/op
MergeStoreBench.str4UnsafePut avgt 5 2234.198 ± 1.698 ns/op
MergeStoreBench.str4Utf16ArrayCopy avgt 5 16381.011 ± 102.719 ns/op
MergeStoreBench.str4Utf16ArraySetConst avgt 5 3109.010 ± 8.955 ns/op
MergeStoreBench.str4Utf16StringBuilder avgt 5 22010.040 ± 908.358 ns/op
MergeStoreBench.str4Utf16UnsafePut avgt 5 2868.544 ± 12.469 ns/op
MergeStoreBench.str5ArraySetConst avgt 5 3780.322 ± 5.041 ns/op
MergeStoreBench.str5Arraycopy avgt 5 10649.712 ± 39.440 ns/op
MergeStoreBench.str5GetBytes avgt 5 6612.562 ± 7.260 ns/op
MergeStoreBench.str5GetChars avgt 5 15521.451 ± 157.817 ns/op
MergeStoreBench.str5StringBuilder avgt 5 22938.577 ± 1814.071 ns/op
MergeStoreBench.str5UnsafePut avgt 5 3769.850 ± 0.524 ns/op
MergeStoreBench.str5Utf16ArrayCopy avgt 5 5832.413 ± 5.256 ns/op
MergeStoreBench.str5Utf16ArraySetConst avgt 5 4644.579 ± 41.694 ns/op
MergeStoreBench.str5Utf16StringBuilder avgt 5 26369.411 ± 8050.710 ns/op
MergeStoreBench.str5Utf16UnsafePut avgt 5 4497.980 ± 42.817 ns/op
MergeStoreBench.str7ArraySetConst avgt 5 5913.136 ± 12.055 ns/op
MergeStoreBench.str7Arraycopy avgt 5 14427.669 ± 80.229 ns/op
MergeStoreBench.str7GetBytes avgt 5 11712.364 ± 13.206 ns/op
MergeStoreBench.str7GetChars avgt 5 21309.046 ± 519.416 ns/op
MergeStoreBench.str7StringBuilder avgt 5 18882.777 ± 2659.525 ns/op
MergeStoreBench.str7UnsafePut avgt 5 5926.995 ± 11.841 ns/op
MergeStoreBench.str7Utf16ArrayCopy avgt 5 6362.405 ± 5.381 ns/op
MergeStoreBench.str7Utf16ArraySetConst avgt 5 4339.133 ± 2.066 ns/op
MergeStoreBench.str7Utf16StringBuilder avgt 5 30761.366 ± 13408.497 ns/op
MergeStoreBench.str7Utf16UnsafePut avgt 5 6345.575 ± 128.697 ns/op
-------------
PR Comment: https://git.openjdk.org/jdk/pull/24108#issuecomment-2763108910
More information about the hotspot-compiler-dev
mailing list