I’m migrating my project from julia 1.9.3 to 1.10.11 and I’m experiencing a huge quantity of time in gc.
I benchmarked a function that performs arrow files reads from an s3 bucket an the @time with Julia 1.10.11 report
476.519375 seconds (322.14 M allocations: 38.442 GiB, 89.24% gc time)
instead the same function on the same server but with Julia 1.9.3 report:
34.163547 seconds (232.64 M allocations: 31.249 GiB, 39.14% gc time)
Key point: Simplify your code to the smallest piece of code that still shows your problem. This step takes the most effort but is the most important for fixing your problem. Short, simple examples tend to get answers quickly.
Ok, for now I find that reducing the number of the BLAS thread to 1 the CG time reduced (still too hight). And after I will run a benchmark to find which combination of thread and CG thread is the best.
In the meanwhile I will, alse make a simple version of my code the could be shared and executed by you
You may find better performance on 1.12 vs 1.10. We’ve continued to tweak the GC heuristics (there’s a back and forth between performance and maximum memory use that’s tricky to get right)
It might be worth experimenting with the “–gcthreads” parameter:
--gcthreads=N[,M] Use N threads for the mark phase of GC and M (0 or 1)
threads for the concurrent sweeping phase of GC.
N is set to the number of compute threads and
M is set to 0 if unspecified.
Sometimes it gave me 20% better performance by using the right number of GC threads.