Skip to content

Possible regression in GC time in 1.10 #53018

@sumiya11

Description

@sumiya11

Hi!

Out of curiousity, I checked the performance of my package (Groebner) on recent 1.11.

It occurred to me that there could be a regression, and that the root of it could be somewhere in 1.10.
My back of the envelope benchmarks show a 2-5x slowdown in 1.10 compared to 1.9, see below.

I run the script

using Groebner, AbstractAlgebra

model = Groebner.cyclicn(8, k=GF(2^30 + 3), ordering=:degrevlex);

@time groebner(model);
@time groebner(model);
@time groebner(model);
@time groebner(model);
@time groebner(model);
@time groebner(model);

And get the output:

1.9.2 (official release):

  5.102363 seconds (1.96 M allocations: 338.489 MiB, 2.31% gc time, 73.30% compilation time)
  1.302451 seconds (159.63 k allocations: 221.873 MiB, 2.55% gc time)
  1.172796 seconds (159.63 k allocations: 221.873 MiB, 0.87% gc time)
  1.157940 seconds (159.63 k allocations: 221.873 MiB, 0.66% gc time)
  1.232590 seconds (159.63 k allocations: 221.873 MiB, 1.08% gc time)
  1.151201 seconds (159.63 k allocations: 221.873 MiB, 0.67% gc time)

1.10.0 (official release):

  8.735243 seconds (1.79 M allocations: 331.722 MiB, 44.51% gc time, 43.72% compilation time)
  1.465188 seconds (159.65 k allocations: 221.874 MiB)
  3.934508 seconds (159.65 k allocations: 164.941 MiB, 59.77% gc time)
  2.728948 seconds (159.65 k allocations: 162.659 MiB, 42.54% gc time)
  2.651898 seconds (159.65 k allocations: 162.659 MiB, 43.89% gc time)
  4.909563 seconds (159.65 k allocations: 221.874 MiB, 68.95% gc time)

1.11 (1 day old master):

  6.671727 seconds (3.48 M allocations: 456.577 MiB, 3.70% gc time, 75.23% compilation time)
  2.353556 seconds (264.26 k allocations: 294.034 MiB, 39.44% gc time)
  1.538453 seconds (264.26 k allocations: 294.034 MiB, 6.80% gc time)
  2.392527 seconds (264.26 k allocations: 294.034 MiB, 38.40% gc time)
  2.007164 seconds (264.26 k allocations: 294.034 MiB, 43.94% gc time)
  1.672259 seconds (264.26 k allocations: 294.034 MiB, 34.68% gc time)

One feature of the Groebner.groebner function is that it allocates a lot of small vectors throughout execution.
I can try to isolate this into a smaller example if it would make sense.

All julia versions use AbstractAlgebra v0.35.3 and Groebner v0.6.3.
I run julia without cli arguments and without a startup file.
My machine is:

Julia Version 1.11.0-DEV.1355
Commit 4d26be0847 (2024-01-22 21:30 UTC)
Platform Info:
  OS: Linux (x86_64-linux-gnu)
  CPU: 64 × Intel(R) Xeon(R) Gold 6130 CPU @ 2.10GHz
  WORD_SIZE: 64
  LLVM: libLLVM-16.0.6 (ORCJIT, skylake-avx512)
Threads: 1 default, 0 interactive, 1 GC (on 64 virtual cores)
Environment:
  LD_LIBRARY_PATH = :/home/demin/libs2/usr/local/lib/

Metadata

Metadata

Assignees

No one assigned

    Labels

    GCGarbage collectorperformanceMust go fasterregressionRegression in behavior compared to a previous version

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions