-
Notifications
You must be signed in to change notification settings - Fork 9
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
Fixed amount of work for rb_tree.jl #61
Conversation
@kpamnany: could you take a look as well? Can't assign you as a reviewer for some reason. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This really needs to run at least 10 minutes to expose the extent of the pause time increase. That's why it's in slow/
. Suggest finding an N
corresponding to that amount of time.
|
I am not sure there is useful information in there after the first ~60s
For a useful benchmark the absolute length of GC is not that interesting for me. For a good benchmark my rules are:
A benchmark that needs 10 minutes to run exceeds the threshold of "Can I use it to improve the GC". So the question is what is the "goal" of the benchmark. |
Maybe the answer is that we need two versions of this benchmark (and of the other slow benchmarks) A version fast enough to be used for tuning the GC and another that is more of the verification of the GC. |
The length of GC is a "feature" of GC behavior. Knowing how big this can get is absolutely an interesting datum. G1, Shenandoah, LXR, etc. all make claims about maximum pause time. What's the maximum pause time for our GC? If we don't have an answer to that question, then you can't make a meaningful comparison with another GC. |
Also worth noting is that this is not a "torture" test. It is designed to be representative of a real workload. That it takes a long time to create this heap shape is practically irrelevant to the point, which is to show GC behavior for this size and shape of heap. I understand that it becomes inconvenient when the runtime is long, but the solution is not to discard or break the benchmark but perhaps to find a way to quickly recreate the heap shape at 10 minutes. Which is probably beyond scope for us. I'm not sure there is much value to the benchmark if it runs for a minute or two -- at that point it isn't too different from the tree benchmarks? |
I ran this benchmark on a small aarch64 laptop and also on a large x86_64 server. On both of them, 50M nodes was enough to make the benchmark last for more than 10 minutes and to cause pathological (more than 20 seconds) GC pauses, which should be more than enough to exercise the desired behavior. If there are no objections, I'll be this merging by tomorrow night. |
I believe the previous version was imposing a time cutoff for the benchmark.
This PR eliminates the time cutoffs and sets a lower iteration count.
N=10_000_000
was chosen in order to make the benchmark last ~1min on my machine: