-
Notifications
You must be signed in to change notification settings - Fork 4.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
improve turbine cold-start performance #8006
Comments
cc: @cushon |
I considered it, but decided to use a graalvm native-image for turbine instead. That approach has shown good startup performance without the overhead of additional workers. |
I see. So maybe this issue is actually feature request to graal turbine in Bazel's java tools. :) |
That, or use multiplex workers. |
G1 has a smoother memory profile than parallelGC, which is desirable for workers that users run locally like javac. Unfortunately, completely getting rid of the parallelGC option regresses Java build performance. This is because Turbine does not run as a worker—see https://github.com/bazelbuild/bazel/issues/8006—and G1 seems to do worse than parallelGC for short-lived programs. So, I simply moved the parallelGC option to the Turbine-specific jvm opts. I ran bazel-bench to test the performance this change building //src:bazel_nojdk: ``` metric mean median stddev pval wall: 475.842s ( -0.05%) 474.997s ( -0.09%) 1.203s 0.00000 cpu: 73.063s ( -2.28%) 72.980s ( -2.21%) 1.499s 0.40000 system: 19.427s ( +0.66%) 19.450s ( +1.09%) 0.111s 0.40000 memory: 89.667MB ( -0.74%) 90.000MB ( +0.00%) 0.471MB 0.00000 ```
G1 has a smoother memory profile than parallelGC, which is desirable for workers that users run locally like javac. Unfortunately, completely getting rid of the parallelGC option regresses Java build performance. This is because Turbine does not run as a worker—see https://github.com/bazelbuild/bazel/issues/8006—and G1 seems to do worse than parallelGC for short-lived programs. So, I simply moved the parallelGC option to the Turbine-specific jvm opts. I ran bazel-bench to test the performance this change building //src:bazel_nojdk: ``` metric mean median stddev pval wall: 475.842s ( -0.05%) 474.997s ( -0.09%) 1.203s 0.00000 cpu: 73.063s ( -2.28%) 72.980s ( -2.21%) 1.499s 0.40000 system: 19.427s ( +0.66%) 19.450s ( +1.09%) 0.111s 0.40000 memory: 89.667MB ( -0.74%) 90.000MB ( +0.00%) 0.471MB 0.00000 ``` Closes #12598. PiperOrigin-RevId: 3456162
Hi there! We're doing a clean up of old issues and will be closing this one. Please reopen if you’d like to discuss anything further. We’ll respond as soon as we have the bandwidth/resources to do so. |
While there is no immediate work planned, I think this is something we want to keep open for the time being. |
@sgowroji Could you reopen? |
Fixed by #19361, which makes turbine a native image. I have further performance improvements planned. |
It seems to me that using a persist worker for turbine Java header compilations would be beneficial for the same reasons as running javac as a persistent worker is. Has this been considered?
The text was updated successfully, but these errors were encountered: